Ready to onboard to Polygon? With MetaMask Portfolio, you're in control.
20M+ users trust MoonPay worldwide. Checkout with your preferred payment method.
Get up to 0.5% cashback per purchase and receive daily interest.
3000+ Slots, 20+ Cryptos, 75K Raffle, Sports Promos - World's largest Crypto Casino & Sportsbook - Provably Fair!
Play in crypto to make deposits and withdrawals easy! Register and get a free daily shot at a 100 000 $ jackpot.
Play and Win POL!
Daily free Spin 50000 Matic ,760% Deposit Bonus, 20%Rakeback, And Get 1000000 Matic free bonus on BC.Game
Deposit BONUS 300% and Cashbacks. without verification!
Join Metawin for the ultimate Web3 Casino Experience. Frictionless Signup & Instant Withdrawals. Play Now & Earn $MWIN Points.
Overview
POL Balance
POL Value
$0.00Token Holdings
Could not find any matches!
- ERC-20 Tokens (>100)10 USDT(PoS) Tether... (USDT)$10.01@1.00115.00536021 CHERCherry Token (CHER)$0.04@0.0026225.45 ICEDecentral Ga... (ICE)$0.34@0.00152,836,503,191.02313 GMEEGAMEE (GMEE)$39,339,349.30@0.01394.71317655 $ZKPPanther ($ZKP)$0.04@0.00891,576.54245504 ROLLPolyroll Tok... (ROLL)$0.09@0.0001106.90919015 QIQi Dao (QI)$2.07@0.01932.40234276 RBWRainbow Toke... (RBW)0.075 SANDSAND (SAND)$0.02@0.25870.55 SPORTSport (SPORT)$0.00@0.00120.00617476 UNIUniswap (PoS... (UNI)$0.04@6.9424.583577 USDC.eUSD Coin (Po... (USDC.e)$24.61@1.0010.11910069 WIXSWrapped Ixs ... (WIXS)$0.06@0.48390.00001 WMATICWrapped Mati... (WMATIC)$0.00@0.424443,767 AAVE [ACCESS AAVE.ASIA]! AAVE.asia (AAVE [...)9,650 Access Airdrop Link [zksyon.one]! Airdrop: Z... (Access...)1,000,000,000 Fyde Points - www.fyde.pw! FYDE (Fyde P...)600 $Visit Reward at [ airdrop.li ]$30,000,000 ... ($Visit...)3,000,000 GAMBLING0Gambling.co (GAMBLI...)10 ApeCoin.com.deApeCoin.com.... (ApeCoi...)10,000 AVAXVOUCHER.COM SWAP NOWAVAX (AVAXVO...)100,000,000 BABYGECKOBABY GECKO (BABYGE...)1 BTCBitcoin (BTC)10 BTNBITMAN TOKEN (BTN)54.3185665 BLOKBLOK$0.03@0.00062ERC20 ***10,000 $E T H - B O ... ($)14,500 claim $fox at foxyvv.vercel.app/FoxyToken (claim ...)80,000 nft.bitconnect666.comFree NFT go ... (nft.bi...)80,000 pepe-erc.vipFree PEPE go... (pepe-e...)999,000,000 FRUITFRUITARIAN (FRUIT)3,763 EigenLayer airdrop on platform ( Gemradar.site )Gemradar.sit... (EigenL...)10,000 $ Check: gasfee.io You received a refundGSF ($ Chec...)100 Some very long token symbol www.ankr.com {HELLO \ (Some v...)400 IGTInfinity Gol... (IGT)14,500 bridge for 12000 $POL (polclaim.vercel.app)MATIC (bridge...)14,500 bridge for 12000 $POL (polclaim.vercel.app)MATIC (bridge...)14,500 bridge for 14500 $POL (polybridge.vercel.app)MATIC (bridge...)300,000 MNEPMinereum Polygon2.77383483 MOMMOM (MOM)1 MORSE- Reveal yours https://morsenft.comMORSE- Revea... (MORSE-...)1,041.73 PLOTPlotX$4.69@0.00458,308,269,388,326.5 POLYMETAPOLYMETA (POLYME...)80,157.04498124 PolyMoonPolyMoon (PolyMo...)18,489 pSwap⚡PolySwap (pSwap⚡)1 Swap $pufETH at https://puffereth.xyzPufETH (Swap $...)1ERC20 ***829,170 SYTSaveYourToke... (SYT)23.9781932 SIMSimba Empire1 Some very long token symbol /Some very lo... (Some v...)1 Some very long token symbol .Some very lo... (Some v...)2,769,000 SSXStakeShare245.3 GMTStepn.fitnes... (GMT)10 STEPN.meSTEPN.me (STEPN....)50,000 TBBT.orgTBBT.org (TBBT.o...)1.6 TCPThe Crypto P... (TCP)2 UniInchUniInch.com (UniInc...)10,000 vAIX AIXBOXES.COM Limited BoxvAIX (vAIX A...)888,888 vanity-address.iovanity-addre... (vanity...)1 VELOVELOCITY (VELO)5 ETH AT [adrp-ether.lol]wENA (ETH AT...)5 5ETH at [web3eth.vip]wENA (5ETH a...)100 WGCWild Goat Coin1 zerolends.comzerolends.co... (zerole...)10,000 ZIKTOKEN.COM-AIRDROPSWAPZkash (ZIKTOK...)1 ZDRZloadr$0.07@0.074520.35 QUIDDQUIDD$0.20@0.00961 REVVREVV$0.00@0.004222,000,000 mXENXEN Crypto7,864 TokenERC-20 TOKEN*[Suspicious]900,000,000 TokenERC-20 TOKEN*[Suspicious]714,707 TokenERC-20 TOKEN*[Suspicious]745,900 TokenERC-20 TOKEN*[Suspicious]745,000 TokenERC-20 TOKEN*[Suspicious]9,467 TokenERC-20 TOKEN*[Suspicious]7,800 TokenERC-20 TOKEN*[Suspicious]8,726 TokenERC-20 TOKEN*[Suspicious]9,860 TokenERC-20 TOKEN*[Suspicious]9,543 TokenERC-20 TOKEN*[Suspicious]7,680 TokenERC-20 TOKEN*[Suspicious]110,000 TokenERC-20 TOKEN*[Suspicious]8,750 TokenERC-20 TOKEN*[Suspicious]8,750 TokenERC-20 TOKEN*[Suspicious]7,800 TokenERC-20 TOKEN*[Suspicious]7,800 TokenERC-20 TOKEN*[Suspicious]900,000,000 TokenERC-20 TOKEN*[Suspicious]9,000,000,000 TokenERC-20 TOKEN*[Suspicious]900,000,000 TokenERC-20 TOKEN*[Suspicious]3,680 TokenERC-20 TOKEN*[Suspicious]900,000,000 TokenERC-20 TOKEN*[Suspicious]90,000,000,000 TokenERC-20 TOKEN*[Suspicious]989 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]60,000 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]NFT Tokens (29)GIVEAWAY$100,000,000ERC-1155NFTVoucher5000$ CYBERERC-1155NFTVoucher5000$ CYBERERC-1155Vouchers50M $SHIB VoucherERC-1155AAVE-V3-POSAave Positions AirdropERC-1155APE COINAPE NFT TICKETSERC-1155APE COINAPE NFT TICKETSERC-1155APE COINAPE NFT TICKETSERC-1155DCL-ARC8XICEPKRArc8 x ICE PokerERC-721LastOneMorgenshternLastOneERC-721UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]
Multichain Info
2 addresses found viaLatest 25 from a total of 401,696 transactions
Transaction Hash MethodBlockFromToApprove 61775417 2024-09-13 13:10:52 1 hr ago 1726233052 IN 0 POL$0.00 0.00999368 214.68239764 Transfer 61773711 2024-09-13 12:10:26 2 hrs ago 1726229426 IN 0 POL$0.00 0.00166194 32.13350078 Transfer 61769586 2024-09-13 9:44:21 5 hrs ago 1726220661 IN 0 POL$0.00 0.00155255 30.01855705 Transfer 61768308 2024-09-13 8:59:04 5 hrs ago 1726217944 IN 0 POL$0.00 0.00155233 30.01420668 Approve 61766989 2024-09-13 8:12:17 6 hrs ago 1726215137 IN 0 POL$0.00 0.00351202 75 Approve 61765115 2024-09-13 7:02:27 7 hrs ago 1726210947 IN 0 POL$0.00 0.00073629 30.00000025 Transfer 61760727 2024-09-13 4:21:40 10 hrs ago 1726201300 IN 0 POL$0.00 0.00103823 29.99999996 Transfer 61759081 2024-09-13 3:22:46 11 hrs ago 1726197766 IN 0 POL$0.00 0.00140796 30.00000004 Approve 61757356 2024-09-13 2:20:22 12 hrs ago 1726194022 IN 0 POL$0.00 0.00139653 30.00000003 Approve 61757103 2024-09-13 2:10:56 12 hrs ago 1726193456 IN 0 POL$0.00 0.00144308 31 Transfer 61757057 2024-09-13 2:09:20 12 hrs ago 1726193360 IN 0 POL$0.00 0.00140832 30.00000004 Approve 61753894 2024-09-13 0:15:22 14 hrs ago 1726186522 IN 0 POL$0.00 0.00139653 30.00000002 Approve 61753839 2024-09-13 0:13:24 14 hrs ago 1726186404 IN 0 POL$0.00 0.00139653 30.00000003 Transfer 61750785 2024-09-12 22:23:07 16 hrs ago 1726179787 IN 0 POL$0.00 0.00103896 30.00000002 Transfer 61749775 2024-09-12 21:46:47 17 hrs ago 1726177607 IN 0 POL$0.00 0.00073911 30.00000002 Approve 61746688 2024-09-12 19:55:52 18 hrs ago 1726170952 IN 0 POL$0.00 0.00139581 30.00000002 Transfer 61746226 2024-09-12 19:39:04 19 hrs ago 1726169944 IN 0 POL$0.00 0.00073947 30.00000003 Transfer 61745959 2024-09-12 19:29:28 19 hrs ago 1726169368 IN 0 POL$0.00 0.00073947 30.00000003 Transfer 61741965 2024-09-12 17:05:18 21 hrs ago 1726160718 IN 0 POL$0.00 0.0008946 30.00000004 Transfer 61741433 2024-09-12 16:46:28 22 hrs ago 1726159588 IN 0 POL$0.00 0.0015516 30.00007289 Transfer 61741295 2024-09-12 16:41:34 22 hrs ago 1726159294 IN 0 POL$0.00 0.00079647 30.00025508 Approve 61739778 2024-09-12 15:47:52 23 hrs ago 1726156072 IN 0 POL$0.00 0.00167174 35.93060288 Transfer 61739688 2024-09-12 15:44:40 23 hrs ago 1726155880 IN 0 POL$0.00 0.00100377 28.99399861 Transfer 61739683 2024-09-12 15:44:30 23 hrs ago 1726155870 IN 0 POL$0.00 0.00163213 34.79434965 Transfer 61734688 2024-09-12 12:47:33 26 hrs ago 1726145253 IN 0 POL$0.00 0.00103824 30.00000007 Loading...LoadingContract Name:PolygonGMEE
Compiler Versionv0.7.6+commit.7338295f
Contract Source Code (Solidity)
- library AddressIsContract
- - function isContract(address account)
- library ERC20Wrapper
- - function wrappedTransfer(
- - function wrappedTransferFrom(
- - function wrappedApprove(
- - function _callWithOptionalReturnData( ...
- interface IWrappedERC20
- - function transfer(address to, uint256 ...
- - function transferFrom(
- - function approve(address spender, uin ...
- - function _msgSender()
- - function _msgData()
- interface IERC173
- - function owner()
- - function transferOwnership(address ne ...
- - function owner()
- - function transferOwnership(address ne ...
- - function _requireOwnership(address ac ...
- - function recoverERC20s(
- - function recoverERC721s(
- interface IRecoverableERC721
- - function transferFrom(
- interface IERC165
- - function supportsInterface(bytes4 int ...
- interface IERC20
- - function totalSupply()
- - function balanceOf(address owner)
- - function transfer(address to, uint256 ...
- - function transferFrom(
- - function approve(address spender, uin ...
- - function allowance(address owner, add ...
- interface IERC20Detailed
- - function name()
- - function symbol()
- - function decimals()
- interface IERC20Allowance
- - function increaseAllowance(address sp ...
- - function decreaseAllowance(address sp ...
- interface IERC20SafeTransfers
- - function safeTransfer(
- - function safeTransferFrom(
- interface IERC20BatchTransfers
- - function batchTransfer(address[] call ...
- - function batchTransferFrom(
- interface IERC20Metadata
- - function tokenURI()
- interface IERC20Permit
- - function permit(
- - function nonces(address owner)
- - function DOMAIN_SEPARATOR()
- interface IERC20Receiver
- - function onERC20Received(
- - function DOMAIN_SEPARATOR()
- - function _calculateDomainSeparator(ui ...
- - function supportsInterface(bytes4 int ...
- - function name()
- - function symbol()
- - function decimals()
- - function tokenURI()
- - function totalSupply()
- - function balanceOf(address account)
- - function allowance(address owner, add ...
- - function approve(address spender, uin ...
- - function increaseAllowance(address sp ...
- - function decreaseAllowance(address sp ...
- - function transfer(address to, uint256 ...
- - function transferFrom(
- - function batchTransfer(address[] call ...
- - function batchTransferFrom(
- - function safeTransfer(
- - function safeTransferFrom(
- - function permit(
- - function _approve(
- - function _decreaseAllowance(
- - function _transfer(
- - function _transferFrom(
- - function _mint(address to, uint256 va ...
- - function _batchMint(address[] memory ...
- - function _burn(address from, uint256 ...
- - function _burnFrom(address from, uint ...
- - function _batchBurnFrom(address[] mem ...
- interface IChildToken
- - function deposit(address user, bytes ...
- - function supportsInterface(bytes4 int ...
- - function _requireDepositorRole(addres ...
- - function supportsInterface(bytes4 int ...
- - function deposit(address user, bytes ...
- - function withdraw(uint256 amount)
- - function onERC20Received(
- - function _lastAppendedDataAsSender()
- - function _msgDataAssuming20BytesAppen ...
- interface IERC2771
- - function isTrustedForwarder(address f ...
- interface IForwarderRegistry
- - function isForwarderFor(address, addr ...
- - function isTrustedForwarder(address f ...
- - function _msgSender()
- - function _msgData()
- contract PolygonGMEE is Recoverabl ... *
- - function setTokenURI(string memory to ...
- - function deposit(address user, bytes ...
- - function withdraw(uint256 amount)
- - function onERC20Received(
- - function recoverERC20s(
- - function _msgSender()
- - function _msgData()
/** *Submitted for verification at polygonscan.com on 2021-09-08 */ // Sources flattened with hardhat v2.5.0 https://hardhat.org // File @animoca/ethereum-contracts-core-1.1.1/contracts/utils/types/[email protected] // SPDX-License-Identifier: MIT // Partially derived from OpenZeppelin: // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/406c83649bd6169fc1b578e08506d78f0873b276/contracts/utils/Address.sol pragma solidity >=0.7.6 <0.8.0; /** * @dev Upgrades the address type to check if it is a contract. */ library AddressIsContract { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } } // File @animoca/ethereum-contracts-core-1.1.1/contracts/utils/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20Wrapper * Wraps ERC20 functions to support non-standard implementations which do not return a bool value. * Calls to the wrapped functions revert only if they throw or if they return false. */ library ERC20Wrapper { using AddressIsContract for address; function wrappedTransfer( IWrappedERC20 token, address to, uint256 value ) internal { _callWithOptionalReturnData(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function wrappedTransferFrom( IWrappedERC20 token, address from, address to, uint256 value ) internal { _callWithOptionalReturnData(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function wrappedApprove( IWrappedERC20 token, address spender, uint256 value ) internal { _callWithOptionalReturnData(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function _callWithOptionalReturnData(IWrappedERC20 token, bytes memory callData) internal { address target = address(token); require(target.isContract(), "ERC20Wrapper: non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory data) = target.call(callData); if (success) { if (data.length != 0) { require(abi.decode(data, (bool)), "ERC20Wrapper: operation failed"); } } else { // revert using a standard revert message if (data.length == 0) { revert("ERC20Wrapper: operation failed"); } // revert using the revert message coming from the call assembly { let size := mload(data) revert(add(32, data), size) } } } } interface IWrappedERC20 { function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function approve(address spender, uint256 value) external returns (bool); } // File @animoca/ethereum-contracts-core-1.1.1/contracts/metatx/[email protected] pragma solidity >=0.7.6 <0.8.0; /* * Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner. */ abstract contract ManagedIdentity { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { return msg.data; } } // File @animoca/ethereum-contracts-core-1.1.1/contracts/access/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC-173 Contract Ownership Standard * Note: the ERC-165 identifier for this interface is 0x7f5828d0 */ interface IERC173 { /** * Event emited when ownership of a contract changes. * @param previousOwner the previous owner. * @param newOwner the new owner. */ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * Get the address of the owner * @return The address of the owner. */ function owner() external view returns (address); /** * Set the address of the new owner of the contract * Set newOwner to address(0) to renounce any ownership. * @dev Emits an {OwnershipTransferred} event. * @param newOwner The address of the new owner of the contract. Using the zero address means renouncing ownership. */ function transferOwnership(address newOwner) external; } // File @animoca/ethereum-contracts-core-1.1.1/contracts/access/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is ManagedIdentity, IERC173 { address internal _owner; /** * Initializes the contract, setting the deployer as the initial owner. * @dev Emits an {IERC173-OwnershipTransferred(address,address)} event. */ constructor(address owner_) { _owner = owner_; emit OwnershipTransferred(address(0), owner_); } /** * Gets the address of the current contract owner. */ function owner() public view virtual override returns (address) { return _owner; } /** * See {IERC173-transferOwnership(address)} * @dev Reverts if the sender is not the current contract owner. * @param newOwner the address of the new owner. Use the zero address to renounce the ownership. */ function transferOwnership(address newOwner) public virtual override { _requireOwnership(_msgSender()); _owner = newOwner; emit OwnershipTransferred(_owner, newOwner); } /** * @dev Reverts if `account` is not the contract owner. * @param account the account to test. */ function _requireOwnership(address account) internal virtual { require(account == this.owner(), "Ownable: not the owner"); } } // File @animoca/ethereum-contracts-core-1.1.1/contracts/utils/[email protected] pragma solidity >=0.7.6 <0.8.0; abstract contract Recoverable is ManagedIdentity, Ownable { using ERC20Wrapper for IWrappedERC20; /** * Extract ERC20 tokens which were accidentally sent to the contract to a list of accounts. * Warning: this function should be overriden for contracts which are supposed to hold ERC20 tokens * so that the extraction is limited to only amounts sent accidentally. * @dev Reverts if the sender is not the contract owner. * @dev Reverts if `accounts`, `tokens` and `amounts` do not have the same length. * @dev Reverts if one of `tokens` is does not implement the ERC20 transfer function. * @dev Reverts if one of the ERC20 transfers fail for any reason. * @param accounts the list of accounts to transfer the tokens to. * @param tokens the list of ERC20 token addresses. * @param amounts the list of token amounts to transfer. */ function recoverERC20s( address[] calldata accounts, address[] calldata tokens, uint256[] calldata amounts ) external virtual { _requireOwnership(_msgSender()); uint256 length = accounts.length; require(length == tokens.length && length == amounts.length, "Recov: inconsistent arrays"); for (uint256 i = 0; i != length; ++i) { IWrappedERC20(tokens[i]).wrappedTransfer(accounts[i], amounts[i]); } } /** * Extract ERC721 tokens which were accidentally sent to the contract to a list of accounts. * Warning: this function should be overriden for contracts which are supposed to hold ERC721 tokens * so that the extraction is limited to only tokens sent accidentally. * @dev Reverts if the sender is not the contract owner. * @dev Reverts if `accounts`, `contracts` and `amounts` do not have the same length. * @dev Reverts if one of `contracts` is does not implement the ERC721 transferFrom function. * @dev Reverts if one of the ERC721 transfers fail for any reason. * @param accounts the list of accounts to transfer the tokens to. * @param contracts the list of ERC721 contract addresses. * @param tokenIds the list of token ids to transfer. */ function recoverERC721s( address[] calldata accounts, address[] calldata contracts, uint256[] calldata tokenIds ) external virtual { _requireOwnership(_msgSender()); uint256 length = accounts.length; require(length == contracts.length && length == tokenIds.length, "Recov: inconsistent arrays"); for (uint256 i = 0; i != length; ++i) { IRecoverableERC721(contracts[i]).transferFrom(address(this), accounts[i], tokenIds[i]); } } } interface IRecoverableERC721 { /// See {IERC721-transferFrom(address,address,uint256)} function transferFrom( address from, address to, uint256 tokenId ) external; } // File @animoca/ethereum-contracts-core-1.1.1/contracts/introspection/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, basic interface * @dev See https://eips.ethereum.org/EIPS/eip-20 * Note: The ERC-165 identifier for this interface is 0x36372b07. */ interface IERC20 { /** * @dev Emitted when tokens are transferred, including zero value transfers. * @param _from The account where the transferred tokens are withdrawn from. * @param _to The account where the transferred tokens are deposited to. * @param _value The amount of tokens being transferred. */ event Transfer(address indexed _from, address indexed _to, uint256 _value); /** * @dev Emitted when a successful call to {IERC20-approve(address,uint256)} is made. * @param _owner The account granting an allowance to `_spender`. * @param _spender The account being granted an allowance from `_owner`. * @param _value The allowance amount being granted. */ event Approval(address indexed _owner, address indexed _spender, uint256 _value); /** * @notice Returns the total token supply. * @return The total token supply. */ function totalSupply() external view returns (uint256); /** * @notice Returns the account balance of another account with address `owner`. * @param owner The account whose balance will be returned. * @return The account balance of another account with address `owner`. */ function balanceOf(address owner) external view returns (uint256); /** * Transfers `value` amount of tokens to address `to`. * @dev Reverts if `to` is the zero address. * @dev Reverts if the sender does not have enough balance. * @dev Emits an {IERC20-Transfer} event. * @dev Transfers of 0 values are treated as normal transfers and fire the {IERC20-Transfer} event. * @param to The receiver account. * @param value The amount of tokens to transfer. * @return True if the transfer succeeds, false otherwise. */ function transfer(address to, uint256 value) external returns (bool); /** * @notice Transfers `value` amount of tokens from address `from` to address `to` via the approval mechanism. * @dev Reverts if `to` is the zero address. * @dev Reverts if the sender is not `from` and has not been approved by `from` for at least `value`. * @dev Reverts if `from` does not have at least `value` of balance. * @dev Emits an {IERC20-Transfer} event. * @dev Transfers of 0 values are treated as normal transfers and fire the {IERC20-Transfer} event. * @param from The emitter account. * @param to The receiver account. * @param value The amount of tokens to transfer. * @return True if the transfer succeeds, false otherwise. */ function transferFrom( address from, address to, uint256 value ) external returns (bool); /** * Sets `value` as the allowance from the caller to `spender`. * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @dev Reverts if `spender` is the zero address. * @dev Emits the {IERC20-Approval} event. * @param spender The account being granted the allowance by the message caller. * @param value The allowance amount to grant. * @return True if the approval succeeds, false otherwise. */ function approve(address spender, uint256 value) external returns (bool); /** * Returns the amount which `spender` is allowed to spend on behalf of `owner`. * @param owner The account that has granted an allowance to `spender`. * @param spender The account that was granted an allowance by `owner`. * @return The amount which `spender` is allowed to spend on behalf of `owner`. */ function allowance(address owner, address spender) external view returns (uint256); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, optional extension: Detailed * See https://eips.ethereum.org/EIPS/eip-20 * Note: the ERC-165 identifier for this interface is 0xa219a025. */ interface IERC20Detailed { /** * Returns the name of the token. E.g. "My Token". * @return The name of the token. */ function name() external view returns (string memory); /** * Returns the symbol of the token. E.g. "HIX". * @return The symbol of the token. */ function symbol() external view returns (string memory); /** * Returns the number of decimals used to display the balances. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. * * NOTE: This information is only used for _display_ purposes: it does not impact the arithmetic of the contract. * @return The number of decimals used to display the balances. */ function decimals() external view returns (uint8); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, optional extension: Allowance * See https://eips.ethereum.org/EIPS/eip-20 * Note: the ERC-165 identifier for this interface is 0xd5b86388. */ interface IERC20Allowance { /** * Increases the allowance granted by the sender to `spender` by `value`. * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * @dev Reverts if `spender` is the zero address. * @dev Reverts if `spender`'s allowance overflows. * @dev Emits an {IERC20-Approval} event with an updated allowance for `spender`. * @param spender The account whose allowance is being increased by the message caller. * @param value The allowance amount increase. * @return True if the allowance increase succeeds, false otherwise. */ function increaseAllowance(address spender, uint256 value) external returns (bool); /** * Decreases the allowance granted by the sender to `spender` by `value`. * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * @dev Reverts if `spender` is the zero address. * @dev Reverts if `spender` has an allowance with the message caller for less than `value`. * @dev Emits an {IERC20-Approval} event with an updated allowance for `spender`. * @param spender The account whose allowance is being decreased by the message caller. * @param value The allowance amount decrease. * @return True if the allowance decrease succeeds, false otherwise. */ function decreaseAllowance(address spender, uint256 value) external returns (bool); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, optional extension: Safe Transfers * Note: the ERC-165 identifier for this interface is 0x53f41a97. */ interface IERC20SafeTransfers { /** * Transfers tokens from the caller to `to`. If this address is a contract, then calls `onERC20Received(address,address,uint256,bytes)` on it. * @dev Reverts if `to` is the zero address. * @dev Reverts if `value` is greater than the sender's balance. * @dev Reverts if `to` is a contract which does not implement `onERC20Received(address,address,uint256,bytes)`. * @dev Reverts if `to` is a contract and the call to `onERC20Received(address,address,uint256,bytes)` returns a wrong value. * @dev Emits an {IERC20-Transfer} event. * @param to The address for the tokens to be transferred to. * @param amount The amount of tokens to be transferred. * @param data Optional additional data with no specified format, to be passed to the receiver contract. * @return true. */ function safeTransfer( address to, uint256 amount, bytes calldata data ) external returns (bool); /** * Transfers tokens from `from` to another address, using the allowance mechanism. * If this address is a contract, then calls `onERC20Received(address,address,uint256,bytes)` on it. * @dev Reverts if `to` is the zero address. * @dev Reverts if `value` is greater than `from`'s balance. * @dev Reverts if the sender does not have at least `value` allowance by `from`. * @dev Reverts if `to` is a contract which does not implement `onERC20Received(address,address,uint256,bytes)`. * @dev Reverts if `to` is a contract and the call to `onERC20Received(address,address,uint256,bytes)` returns a wrong value. * @dev Emits an {IERC20-Transfer} event. * @param from The address which owns the tokens to be transferred. * @param to The address for the tokens to be transferred to. * @param amount The amount of tokens to be transferred. * @param data Optional additional data with no specified format, to be passed to the receiver contract. * @return true. */ function safeTransferFrom( address from, address to, uint256 amount, bytes calldata data ) external returns (bool); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, optional extension: Multi Transfers * Note: the ERC-165 identifier for this interface is 0xd5b86388. */ interface IERC20BatchTransfers { /** * Moves multiple `amounts` tokens from the caller's account to each of `recipients`. * @dev Reverts if `recipients` and `amounts` have different lengths. * @dev Reverts if one of `recipients` is the zero address. * @dev Reverts if the caller has an insufficient balance. * @dev Emits an {IERC20-Transfer} event for each individual transfer. * @param recipients the list of recipients to transfer the tokens to. * @param amounts the amounts of tokens to transfer to each of `recipients`. * @return a boolean value indicating whether the operation succeeded. */ function batchTransfer(address[] calldata recipients, uint256[] calldata amounts) external returns (bool); /** * Moves multiple `amounts` tokens from an account to each of `recipients`, using the approval mechanism. * @dev Reverts if `recipients` and `amounts` have different lengths. * @dev Reverts if one of `recipients` is the zero address. * @dev Reverts if `from` has an insufficient balance. * @dev Reverts if the sender does not have at least the sum of all `amounts` as allowance by `from`. * @dev Emits an {IERC20-Transfer} event for each individual transfer. * @dev Emits an {IERC20-Approval} event. * @param from The address which owns the tokens to be transferred. * @param recipients the list of recipients to transfer the tokens to. * @param amounts the amounts of tokens to transfer to each of `recipients`. * @return a boolean value indicating whether the operation succeeded. */ function batchTransferFrom( address from, address[] calldata recipients, uint256[] calldata amounts ) external returns (bool); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, ERC1046 optional extension: Metadata * See https://eips.ethereum.org/EIPS/eip-1046 * Note: the ERC-165 identifier for this interface is 0x3c130d90. */ interface IERC20Metadata { /** * Returns a distinct Uniform Resource Identifier (URI) for the token metadata. * @return a distinct Uniform Resource Identifier (URI) for the token metadata. */ function tokenURI() external view returns (string memory); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, ERC2612 optional extension: permit – 712-signed approvals * @dev Interface for allowing ERC20 approvals to be made via ECDSA `secp256k1` signatures. * See https://eips.ethereum.org/EIPS/eip-2612 * Note: the ERC-165 identifier for this interface is 0x9d8ff7da. */ interface IERC20Permit { /** * Sets `value` as the allowance of `spender` over the tokens of `owner`, given `owner` account's signed permit. * @dev WARNING: The standard ERC-20 race condition for approvals applies to `permit()` as well: https://swcregistry.io/docs/SWC-114 * @dev Reverts if `owner` is the zero address. * @dev Reverts if the current blocktime is > `deadline`. * @dev Reverts if `r`, `s`, and `v` is not a valid `secp256k1` signature from `owner`. * @dev Emits an {IERC20-Approval} event. * @param owner The token owner granting the allowance to `spender`. * @param spender The token spender being granted the allowance by `owner`. * @param value The token amount of the allowance. * @param deadline The deadline from which the permit signature is no longer valid. * @param v Permit signature v parameter * @param r Permit signature r parameter. * @param s Permis signature s parameter. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * Returns the current permit nonce of `owner`. * @param owner the address to check the nonce of. * @return the current permit nonce of `owner`. */ function nonces(address owner) external view returns (uint256); /** * Returns the EIP-712 encoded hash struct of the domain-specific information for permits. * * @dev A common ERC-20 permit implementation choice for the `DOMAIN_SEPARATOR` is: * * keccak256( * abi.encode( * keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), * keccak256(bytes(name)), * keccak256(bytes(version)), * chainId, * address(this))) * * where * - `name` (string) is the ERC-20 token name. * - `version` (string) refers to the ERC-20 token contract version. * - `chainId` (uint256) is the chain ID to which the ERC-20 token contract is deployed to. * - `verifyingContract` (address) is the ERC-20 token contract address. * * @return the EIP-712 encoded hash struct of the domain-specific information for permits. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, Receiver * See https://eips.ethereum.org/EIPS/eip-20 * Note: the ERC-165 identifier for this interface is 0x4fc35859. */ interface IERC20Receiver { /** * Handles the receipt of ERC20 tokens. * @param sender The initiator of the transfer. * @param from The address which transferred the tokens. * @param value The amount of tokens transferred. * @param data Optional additional data with no specified format. * @return bytes4 `bytes4(keccak256("onERC20Received(address,address,uint256,bytes)"))` */ function onERC20Received( address sender, address from, uint256 value, bytes calldata data ) external returns (bytes4); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Fungible Token Contract. */ abstract contract ERC20 is ManagedIdentity, IERC165, IERC20, IERC20Detailed, IERC20Metadata, IERC20Allowance, IERC20BatchTransfers, IERC20SafeTransfers, IERC20Permit { using AddressIsContract for address; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)") bytes32 internal constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; uint256 public immutable deploymentChainId; // solhint-disable-next-line var-name-mixedcase bytes32 internal immutable _DOMAIN_SEPARATOR; mapping(address => uint256) public override nonces; string internal _name; string internal _symbol; uint8 internal immutable _decimals; string internal _tokenURI; mapping(address => uint256) internal _balances; mapping(address => mapping(address => uint256)) internal _allowances; uint256 internal _totalSupply; constructor( string memory name_, string memory symbol_, uint8 decimals_, string memory tokenURI_ ) { _name = name_; _symbol = symbol_; _decimals = decimals_; _tokenURI = tokenURI_; uint256 chainId; assembly { chainId := chainid() } deploymentChainId = chainId; _DOMAIN_SEPARATOR = _calculateDomainSeparator(chainId, bytes(name_)); } // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() public view override returns (bytes32) { uint256 chainId; assembly { chainId := chainid() } // recompute the domain separator in case of fork and chainid update return chainId == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(chainId, bytes(_name)); } function _calculateDomainSeparator(uint256 chainId, bytes memory name_) private view returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(name_), keccak256("1"), chainId, address(this) ) ); } /////////////////////////////////////////// ERC165 /////////////////////////////////////// /// @dev See {IERC165-supportsInterface}. function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId || interfaceId == type(IERC20).interfaceId || interfaceId == type(IERC20Detailed).interfaceId || interfaceId == type(IERC20Metadata).interfaceId || interfaceId == type(IERC20Allowance).interfaceId || interfaceId == type(IERC20BatchTransfers).interfaceId || interfaceId == type(IERC20SafeTransfers).interfaceId || interfaceId == type(IERC20Permit).interfaceId; } /////////////////////////////////////////// ERC20Detailed /////////////////////////////////////// /// @dev See {IERC20Detailed-name}. function name() external view override returns (string memory) { return _name; } /// @dev See {IERC20Detailed-symbol}. function symbol() external view override returns (string memory) { return _symbol; } /// @dev See {IERC20Detailed-decimals}. function decimals() external view override returns (uint8) { return _decimals; } /////////////////////////////////////////// ERC20Metadata /////////////////////////////////////// /// @dev See {IERC20Metadata-tokenURI}. function tokenURI() external view override returns (string memory) { return _tokenURI; } /////////////////////////////////////////// ERC20 /////////////////////////////////////// /// @dev See {IERC20-totalSupply}. function totalSupply() external view override returns (uint256) { return _totalSupply; } /// @dev See {IERC20-balanceOf}. function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } /// @dev See {IERC20-allowance}. function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /// @dev See {IERC20-approve}. function approve(address spender, uint256 value) external virtual override returns (bool) { _approve(_msgSender(), spender, value); return true; } /////////////////////////////////////////// ERC20 Allowance /////////////////////////////////////// /// @dev See {IERC20Allowance-increaseAllowance}. function increaseAllowance(address spender, uint256 addedValue) external virtual override returns (bool) { require(spender != address(0), "ERC20: zero address spender"); address owner = _msgSender(); uint256 allowance_ = _allowances[owner][spender]; if (addedValue != 0) { uint256 newAllowance = allowance_ + addedValue; require(newAllowance > allowance_, "ERC20: allowance overflow"); _allowances[owner][spender] = newAllowance; allowance_ = newAllowance; } emit Approval(owner, spender, allowance_); return true; } /// @dev See {IERC20Allowance-decreaseAllowance}. function decreaseAllowance(address spender, uint256 subtractedValue) external virtual override returns (bool) { require(spender != address(0), "ERC20: zero address spender"); _decreaseAllowance(_msgSender(), spender, subtractedValue); return true; } /// @dev See {IERC20-transfer}. function transfer(address to, uint256 value) external virtual override returns (bool) { _transfer(_msgSender(), to, value); return true; } /// @dev See {IERC20-transferFrom}. function transferFrom( address from, address to, uint256 value ) external virtual override returns (bool) { _transferFrom(_msgSender(), from, to, value); return true; } /////////////////////////////////////////// ERC20MultiTransfer /////////////////////////////////////// /// @dev See {IERC20MultiTransfer-multiTransfer(address[],uint256[])}. function batchTransfer(address[] calldata recipients, uint256[] calldata values) external virtual override returns (bool) { uint256 length = recipients.length; require(length == values.length, "ERC20: inconsistent arrays"); address sender = _msgSender(); uint256 balance = _balances[sender]; uint256 totalValue; uint256 selfTransferTotalValue; for (uint256 i; i != length; ++i) { address to = recipients[i]; require(to != address(0), "ERC20: to zero address"); uint256 value = values[i]; if (value != 0) { uint256 newTotalValue = totalValue + value; require(newTotalValue > totalValue, "ERC20: values overflow"); totalValue = newTotalValue; if (sender != to) { _balances[to] += value; } else { require(value <= balance, "ERC20: insufficient balance"); selfTransferTotalValue += value; // cannot overflow as 'selfTransferTotalValue <= totalValue' is always true } } emit Transfer(sender, to, value); } if (totalValue != 0 && totalValue != selfTransferTotalValue) { uint256 newBalance = balance - totalValue; require(newBalance < balance, "ERC20: insufficient balance"); // balance must be sufficient, including self-transfers _balances[sender] = newBalance + selfTransferTotalValue; // do not deduct self-transfers from the sender balance } return true; } /// @dev See {IERC20MultiTransfer-multiTransferFrom(address,address[],uint256[])}. function batchTransferFrom( address from, address[] calldata recipients, uint256[] calldata values ) external virtual override returns (bool) { uint256 length = recipients.length; require(length == values.length, "ERC20: inconsistent arrays"); uint256 balance = _balances[from]; uint256 totalValue; uint256 selfTransferTotalValue; for (uint256 i; i != length; ++i) { address to = recipients[i]; require(to != address(0), "ERC20: to zero address"); uint256 value = values[i]; if (value != 0) { uint256 newTotalValue = totalValue + value; require(newTotalValue > totalValue, "ERC20: values overflow"); totalValue = newTotalValue; if (from != to) { _balances[to] += value; } else { require(value <= balance, "ERC20: insufficient balance"); selfTransferTotalValue += value; // cannot overflow as 'selfTransferTotalValue <= totalValue' is always true } } emit Transfer(from, to, value); } if (totalValue != 0 && totalValue != selfTransferTotalValue) { uint256 newBalance = balance - totalValue; require(newBalance < balance, "ERC20: insufficient balance"); // balance must be sufficient, including self-transfers _balances[from] = newBalance + selfTransferTotalValue; // do not deduct self-transfers from the sender balance } address sender = _msgSender(); if (from != sender) { _decreaseAllowance(from, sender, totalValue); } return true; } /////////////////////////////////////////// ERC20SafeTransfers /////////////////////////////////////// /// @dev See {IERC20Safe-safeTransfer(address,uint256,bytes)}. function safeTransfer( address to, uint256 amount, bytes calldata data ) external virtual override returns (bool) { address sender = _msgSender(); _transfer(sender, to, amount); if (to.isContract()) { require(IERC20Receiver(to).onERC20Received(sender, sender, amount, data) == type(IERC20Receiver).interfaceId, "ERC20: transfer refused"); } return true; } /// @dev See {IERC20Safe-safeTransferFrom(address,address,uint256,bytes)}. function safeTransferFrom( address from, address to, uint256 amount, bytes calldata data ) external virtual override returns (bool) { address sender = _msgSender(); _transferFrom(sender, from, to, amount); if (to.isContract()) { require(IERC20Receiver(to).onERC20Received(sender, from, amount, data) == type(IERC20Receiver).interfaceId, "ERC20: transfer refused"); } return true; } /////////////////////////////////////////// ERC20Permit /////////////////////////////////////// /// @dev See {IERC2612-permit(address,address,uint256,uint256,uint8,bytes32,bytes32)}. function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external virtual override { require(owner != address(0), "ERC20: zero address owner"); require(block.timestamp <= deadline, "ERC20: expired permit"); bytes32 hashStruct = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)); bytes32 hash = keccak256(abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR(), hashStruct)); address signer = ecrecover(hash, v, r, s); require(signer == owner, "ERC20: invalid permit"); _approve(owner, spender, value); } /////////////////////////////////////////// Internal Functions /////////////////////////////////////// function _approve( address owner, address spender, uint256 value ) internal { require(spender != address(0), "ERC20: zero address spender"); _allowances[owner][spender] = value; emit Approval(owner, spender, value); } function _decreaseAllowance( address owner, address spender, uint256 subtractedValue ) internal { uint256 allowance_ = _allowances[owner][spender]; if (allowance_ != type(uint256).max && subtractedValue != 0) { // save gas when allowance is maximal by not reducing it (see https://github.com/ethereum/EIPs/issues/717) uint256 newAllowance = allowance_ - subtractedValue; require(newAllowance < allowance_, "ERC20: insufficient allowance"); _allowances[owner][spender] = newAllowance; allowance_ = newAllowance; } emit Approval(owner, spender, allowance_); } function _transfer( address from, address to, uint256 value ) internal virtual { require(to != address(0), "ERC20: to zero address"); if (value != 0) { uint256 balance = _balances[from]; uint256 newBalance = balance - value; require(newBalance < balance, "ERC20: insufficient balance"); if (from != to) { _balances[from] = newBalance; _balances[to] += value; } } emit Transfer(from, to, value); } function _transferFrom( address sender, address from, address to, uint256 value ) internal { _transfer(from, to, value); if (from != sender) { _decreaseAllowance(from, sender, value); } } function _mint(address to, uint256 value) internal virtual { require(to != address(0), "ERC20: zero address"); uint256 supply = _totalSupply; if (value != 0) { uint256 newSupply = supply + value; require(newSupply > supply, "ERC20: supply overflow"); _totalSupply = newSupply; _balances[to] += value; // balance cannot overflow if supply does not } emit Transfer(address(0), to, value); } function _batchMint(address[] memory recipients, uint256[] memory values) internal virtual { uint256 length = recipients.length; require(length == values.length, "ERC20: inconsistent arrays"); uint256 totalValue; for (uint256 i; i != length; ++i) { address to = recipients[i]; require(to != address(0), "ERC20: zero address"); uint256 value = values[i]; if (value != 0) { uint256 newTotalValue = totalValue + value; require(newTotalValue > totalValue, "ERC20: values overflow"); totalValue = newTotalValue; _balances[to] += value; // balance cannot overflow if supply does not } emit Transfer(address(0), to, value); } if (totalValue != 0) { uint256 supply = _totalSupply; uint256 newSupply = supply + totalValue; require(newSupply > supply, "ERC20: supply overflow"); _totalSupply = newSupply; } } function _burn(address from, uint256 value) internal virtual { if (value != 0) { uint256 balance = _balances[from]; uint256 newBalance = balance - value; require(newBalance < balance, "ERC20: insufficient balance"); _balances[from] = newBalance; _totalSupply -= value; // will not underflow if balance does not } emit Transfer(from, address(0), value); } function _burnFrom(address from, uint256 value) internal virtual { _burn(from, value); address sender = _msgSender(); if (from != sender) { _decreaseAllowance(from, sender, value); } } function _batchBurnFrom(address[] memory owners, uint256[] memory values) internal virtual { uint256 length = owners.length; require(length == values.length, "ERC20: inconsistent arrays"); address sender = _msgSender(); uint256 totalValue; for (uint256 i; i != length; ++i) { address from = owners[i]; uint256 value = values[i]; if (value != 0) { uint256 balance = _balances[from]; uint256 newBalance = balance - value; require(newBalance < balance, "ERC20: insufficient balance"); _balances[from] = newBalance; totalValue += value; // totalValue cannot overflow if the individual balances do not underflow } emit Transfer(from, address(0), value); if (from != sender) { _decreaseAllowance(from, sender, value); } } if (totalValue != 0) { _totalSupply -= totalValue; // _totalSupply cannot underfow as balances do not underflow } } } // File @animoca/ethereum-contracts-core-1.1.1/contracts/bridging/[email protected] pragma solidity >=0.7.6 <0.8.0; interface IChildToken { function deposit(address user, bytes calldata depositData) external; } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; abstract contract ERC20Receiver is IERC20Receiver, IERC165 { bytes4 internal constant _ERC20_RECEIVED = type(IERC20Receiver).interfaceId; bytes4 internal constant _ERC20_REJECTED = 0xffffffff; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId || interfaceId == type(IERC20Receiver).interfaceId; } } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/bridging/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * Polygon (MATIC) bridging base child ERC20 for deployment on the child chain (Polygon/MATIC). */ abstract contract ChildERC20Base is IChildToken, ERC20Receiver { event Withdrawn(address account, uint256 value); // see https://github.com/maticnetwork/pos-portal/blob/master/contracts/child/ChildChainManager/ChildChainManager.sol address public childChainManager; /** * Constructor * @param childChainManager_ the Polygon/MATIC ChildChainManager proxy address. */ constructor(address childChainManager_) { childChainManager = childChainManager_; } function _requireDepositorRole(address account) internal view { require(account == childChainManager, "ChildERC20: only depositor"); } } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; abstract contract ChildERC20 is ERC20, ChildERC20Base { constructor( string memory name_, string memory symbol_, uint8 decimals_, string memory tokenURI_, address childChainManager ) ERC20(name_, symbol_, decimals_, tokenURI_) ChildERC20Base(childChainManager) {} function supportsInterface(bytes4 interfaceId) public view virtual override(ERC20, ERC20Receiver) returns (bool) { return ERC20.supportsInterface(interfaceId) || ERC20Receiver.supportsInterface(interfaceId); } /** * Called when tokens have been deposited on the root chain. * @dev Should handle deposit by un-escrowing the required amount for user. * @dev Reverts if not sent by the depositor (ChildChainManager). * @param user address for whom deposit has been done. * @param depositData abi encoded amount. */ function deposit(address user, bytes calldata depositData) public virtual override { _requireDepositorRole(_msgSender()); uint256 amount = abi.decode(depositData, (uint256)); _transfer(address(this), user, amount); } /** * Called when user wants to withdraw tokens back to the root chain. * @dev Should escrow user's tokens. This transaction will be verified when exiting on root chain. * @dev Emits a {Withdrawn} event. * @param amount amount of tokens to withdraw. */ function withdraw(uint256 amount) public virtual { address sender = _msgSender(); _transferFrom(sender, sender, address(this), amount); emit Withdrawn(sender, amount); } /** * Called when user wants to withdraw tokens back to the root chain (no pre-approval required). * @dev Should escrow user's tokens. This transaction will be verified when exiting on root chain. * @dev Reverts if the sender is not this contract. * @dev Emits a {Withdrawn} event. * _param operator The initiator of the transfer. * @param from The address which transferred the tokens. * @param amount The amount of tokens transferred. * _param data Optional additional data with no specified format. * @return bytes4 `bytes4(keccak256("onERC20Received(address,address,uint256,bytes)"))` */ function onERC20Received( address, /*operator*/ address from, uint256 amount, bytes calldata /*data*/ ) public virtual override returns (bytes4) { require(_msgSender() == address(this), "ChildERC20: wrong sender"); emit Withdrawn(from, amount); return _ERC20_RECEIVED; } } // File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected] pragma solidity ^0.7.0; abstract contract UsingAppendedCallData { function _lastAppendedDataAsSender() internal pure virtual returns (address payable sender) { // Copied from openzeppelin : https://github.com/OpenZeppelin/openzeppelin-contracts/blob/9d5f77db9da0604ce0b25148898a94ae2c20d70f/contracts/metatx/ERC2771Context.sol1 // The assembly code is more direct than the Solidity version using `abi.decode`. // solhint-disable-next-line no-inline-assembly assembly { sender := shr(96, calldataload(sub(calldatasize(), 20))) } } function _msgDataAssuming20BytesAppendedData() internal pure virtual returns (bytes calldata) { return msg.data[:msg.data.length - 20]; } } // File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected] pragma solidity ^0.7.0; interface IERC2771 { function isTrustedForwarder(address forwarder) external view returns (bool); } // File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected] pragma solidity ^0.7.0; interface IForwarderRegistry { function isForwarderFor(address, address) external view returns (bool); } // File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected] pragma solidity ^0.7.0; abstract contract UsingUniversalForwarding is UsingAppendedCallData, IERC2771 { IForwarderRegistry internal immutable _forwarderRegistry; address internal immutable _universalForwarder; constructor(IForwarderRegistry forwarderRegistry, address universalForwarder) { _universalForwarder = universalForwarder; _forwarderRegistry = forwarderRegistry; } function isTrustedForwarder(address forwarder) external view virtual override returns (bool) { return forwarder == _universalForwarder || forwarder == address(_forwarderRegistry); } function _msgSender() internal view virtual returns (address payable) { address payable msgSender = msg.sender; address payable sender = _lastAppendedDataAsSender(); if (msgSender == address(_forwarderRegistry) || msgSender == _universalForwarder) { // if forwarder use appended data return sender; } // if msg.sender is neither the registry nor the universal forwarder, // we have to check the last 20bytes of the call data intepreted as an address // and check if the msg.sender was registered as forewarder for that address // we check tx.origin to save gas in case where msg.sender == tx.origin // solhint-disable-next-line avoid-tx-origin if (msgSender != tx.origin && _forwarderRegistry.isForwarderFor(sender, msgSender)) { return sender; } return msgSender; } function _msgData() internal view virtual returns (bytes calldata) { address payable msgSender = msg.sender; if (msgSender == address(_forwarderRegistry) || msgSender == _universalForwarder) { // if forwarder use appended data return _msgDataAssuming20BytesAppendedData(); } // we check tx.origin to save gas in case where msg.sender == tx.origin // solhint-disable-next-line avoid-tx-origin if (msgSender != tx.origin && _forwarderRegistry.isForwarderFor(_lastAppendedDataAsSender(), msgSender)) { return _msgDataAssuming20BytesAppendedData(); } return msg.data; } } // File contracts/token/ERC20/PolygonGMEE.sol pragma solidity >=0.7.6 <0.8.0; contract PolygonGMEE is Recoverable, UsingUniversalForwarding, ChildERC20 { using ERC20Wrapper for IWrappedERC20; uint256 public escrowed; constructor( uint256 supply, address childChainManager, IForwarderRegistry forwarderRegistry, address universalForwarder ) ChildERC20("GAMEE", "GMEE", 18, "", childChainManager) UsingUniversalForwarding(forwarderRegistry, universalForwarder) Ownable(msg.sender) { _mint(address(this), supply); escrowed = supply; } function setTokenURI(string memory tokenURI_) external { _requireOwnership(_msgSender()); _tokenURI = tokenURI_; } function deposit(address user, bytes calldata depositData) public virtual override { escrowed -= abi.decode(depositData, (uint256)); super.deposit(user, depositData); } function withdraw(uint256 amount) public virtual override { escrowed += amount; super.withdraw(amount); } function onERC20Received( address operator, address from, uint256 amount, bytes calldata data ) public virtual override returns (bytes4) { escrowed += amount; return super.onERC20Received(operator, from, amount, data); } function recoverERC20s( address[] calldata accounts, address[] calldata tokens, uint256[] calldata amounts ) external virtual override { _requireOwnership(_msgSender()); uint256 length = accounts.length; require(length == tokens.length && length == amounts.length, "Recov: inconsistent arrays"); for (uint256 i = 0; i != length; ++i) { address token = tokens[i]; uint256 amount = amounts[i]; if (token == address(this)) { uint256 recoverable = _balances[address(this)] - escrowed; require(amount <= recoverable, "Recov: insufficient balance"); } IWrappedERC20(token).wrappedTransfer(accounts[i], amount); } } function _msgSender() internal view virtual override(ManagedIdentity, UsingUniversalForwarding) returns (address payable) { return UsingUniversalForwarding._msgSender(); } function _msgData() internal view virtual override(ManagedIdentity, UsingUniversalForwarding) returns (bytes memory ret) { return UsingUniversalForwarding._msgData(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"address","name":"childChainManager","type":"address"},{"internalType":"contract IForwarderRegistry","name":"forwarderRegistry","type":"address"},{"internalType":"address","name":"universalForwarder","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"childChainManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"depositData","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"escrowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC20Received","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":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"recoverERC20s","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"contracts","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"recoverERC721s","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tokenURI_","type":"string"}],"name":"setTokenURI","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":[],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101206040523480156200001257600080fd5b506040516200332838038062003328833981810160405260808110156200003857600080fd5b50805160208083015160408085015160609095015181518083018352600581526447414d454560d81b81860152825180840184526004815263474d454560e01b8187015283519586018452600080875280546001600160a01b031916339081178255945197989597959693959294919360129390928992839288928892889288928e928e928291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160601b0319606091821b811660a05291901b1660805283516200011590600290602087019062000379565b5082516200012b90600390602086019062000379565b507fff0000000000000000000000000000000000000000000000000000000000000060f883901b166101005280516200016c90600490602084019062000379565b504660c08190526200017f8186620001c9565b60e0525050600880546001600160a01b0319166001600160a01b03959095169490941790935550620001bd96503095508a9450620002539350505050565b50505060095562000425565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b6001600160a01b038216620002af576040805162461bcd60e51b815260206004820152601360248201527f45524332303a207a65726f206164647265737300000000000000000000000000604482015290519081900360640190fd5b6007548115620003335780820181811162000311576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20737570706c79206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b6007556001600160a01b03831660009081526005602052604090208054830190555b6040805183815290516001600160a01b038516916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003b15760008555620003fc565b82601f10620003cc57805160ff1916838001178555620003fc565b82800160010185558215620003fc579182015b82811115620003fc578251825591602001919060010190620003df565b506200040a9291506200040e565b5090565b5b808211156200040a57600081556001016200040f565b60805160601c60a05160601c60c05160e0516101005160f81c612ea66200048260003980610d0b525080610df3525080610d325280611c495250806113415280612a2652508061137c52806129eb5280612a7e5250612ea66000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637ecebe001161010f578063c8291d84116100a2578063dd62ed3e11610071578063dd62ed3e14610a7a578063e0df5b6f14610aa8578063eb79554914610b4e578063f2fde38b14610bd3576101f0565b8063c8291d8414610999578063cd0d0096146109a1578063cf2c52cb146109a9578063d505accf14610a29576101f0565b8063a457c2d7116100de578063a457c2d71461079d578063a9059cbb146107c9578063b88d4fde146107f5578063c3666c3614610885576101f0565b80637ecebe001461068957806388d695b2146106af5780638da5cb5b1461077157806395d89b4114610795576101f0565b80633644e515116101875780634fc35859116101565780634fc358591461047c578063572b6c051461052957806370a082311461054f57806373c8a95814610575576101f0565b80633644e5151461036e57806339509351146103765780633c130d90146103a25780634885b254146103aa576101f0565b806318160ddd116101c357806318160ddd146102f357806323b872dd146102fb5780632e1a7d4d14610331578063313ce56714610350576101f0565b806301522b1e146101f557806301ffc9a71461020f57806306fdde031461024a578063095ea7b3146102c7575b600080fd5b6101fd610bf9565b60408051918252519081900360200190f35b6102366004803603602081101561022557600080fd5b50356001600160e01b031916610bff565b604080519115158252519081900360200190f35b610252610c1f565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028c578181015183820152602001610274565b50505050905090810190601f1680156102b95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610236600480360360408110156102dd57600080fd5b506001600160a01b038135169060200135610cb3565b6101fd610cd0565b6102366004803603606081101561031157600080fd5b506001600160a01b03813581169160208101359091169060400135610cd6565b61034e6004803603602081101561034757600080fd5b5035610cf5565b005b610358610d09565b6040805160ff9092168252519081900360200190f35b6101fd610d2d565b6102366004803603604081101561038c57600080fd5b506001600160a01b038135169060200135610e19565b610252610f87565b610236600480360360608110156103c057600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156103eb57600080fd5b8201836020820111156103fd57600080fd5b8035906020019184602083028401116401000000008311171561041f57600080fd5b91939092909160208101903564010000000081111561043d57600080fd5b82018360208201111561044f57600080fd5b8035906020019184602083028401116401000000008311171561047157600080fd5b509092509050610fe8565b61050c6004803603608081101561049257600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156104cd57600080fd5b8201836020820111156104df57600080fd5b8035906020019184600183028401116401000000008311171561050157600080fd5b50909250905061131c565b604080516001600160e01b03199092168252519081900360200190f35b6102366004803603602081101561053f57600080fd5b50356001600160a01b031661133d565b6101fd6004803603602081101561056557600080fd5b50356001600160a01b03166113b6565b61034e6004803603606081101561058b57600080fd5b8101906020810181356401000000008111156105a657600080fd5b8201836020820111156105b857600080fd5b803590602001918460208302840111640100000000831117156105da57600080fd5b9193909290916020810190356401000000008111156105f857600080fd5b82018360208201111561060a57600080fd5b8035906020019184602083028401116401000000008311171561062c57600080fd5b91939092909160208101903564010000000081111561064a57600080fd5b82018360208201111561065c57600080fd5b8035906020019184602083028401116401000000008311171561067e57600080fd5b5090925090506113d1565b6101fd6004803603602081101561069f57600080fd5b50356001600160a01b0316611554565b610236600480360360408110156106c557600080fd5b8101906020810181356401000000008111156106e057600080fd5b8201836020820111156106f257600080fd5b8035906020019184602083028401116401000000008311171561071457600080fd5b91939092909160208101903564010000000081111561073257600080fd5b82018360208201111561074457600080fd5b8035906020019184602083028401116401000000008311171561076657600080fd5b509092509050611566565b610779611875565b604080516001600160a01b039092168252519081900360200190f35b610252611884565b610236600480360360408110156107b357600080fd5b506001600160a01b0381351690602001356118e5565b610236600480360360408110156107df57600080fd5b506001600160a01b038135169060200135611954565b6102366004803603608081101561080b57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561084657600080fd5b82018360208201111561085857600080fd5b8035906020019184600183028401116401000000008311171561087a57600080fd5b509092509050611968565b61034e6004803603606081101561089b57600080fd5b8101906020810181356401000000008111156108b657600080fd5b8201836020820111156108c857600080fd5b803590602001918460208302840111640100000000831117156108ea57600080fd5b91939092909160208101903564010000000081111561090857600080fd5b82018360208201111561091a57600080fd5b8035906020019184602083028401116401000000008311171561093c57600080fd5b91939092909160208101903564010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184602083028401116401000000008311171561098e57600080fd5b509092509050611af0565b610779611c38565b6101fd611c47565b61034e600480360360408110156109bf57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156109ea57600080fd5b8201836020820111156109fc57600080fd5b80359060200191846001830284011164010000000083111715610a1e57600080fd5b509092509050611c6b565b61034e600480360360e0811015610a3f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611c97565b6101fd60048036036040811015610a9057600080fd5b506001600160a01b0381358116916020013516611f16565b61034e60048036036020811015610abe57600080fd5b810190602081018135640100000000811115610ad957600080fd5b820183602082011115610aeb57600080fd5b80359060200191846001830284011164010000000083111715610b0d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f41945050505050565b61023660048036036060811015610b6457600080fd5b6001600160a01b0382351691602081013591810190606081016040820135640100000000811115610b9457600080fd5b820183602082011115610ba657600080fd5b80359060200191846001830284011164010000000083111715610bc857600080fd5b509092509050611f63565b61034e60048036036020811015610be957600080fd5b50356001600160a01b03166120e9565b60095481565b6000610c0a8261215a565b80610c195750610c19826122f7565b92915050565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b820191906000526020600020905b815481529060010190602001808311610c8b57829003601f168201915b505050505090505b90565b6000610cc7610cc0612343565b8484612352565b50600192915050565b60075490565b6000610ceb610ce3612343565b85858561240f565b5060019392505050565b6009805482019055610d0681612444565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000467f00000000000000000000000000000000000000000000000000000000000000008114610df1576002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152610dec93859391929091830182828015610de25780601f10610db757610100808354040283529160200191610de2565b820191906000526020600020905b815481529060010190602001808311610dc557829003601f168201915b50505050506124a4565b610e13565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b60006001600160a01b038316610e76576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6000610e80612343565b6001600160a01b038082166000908152600660209081526040808320938916835292905220549091508315610f3157808401818111610f06576040805162461bcd60e51b815260206004820152601960248201527f45524332303a20616c6c6f77616e6365206f766572666c6f7700000000000000604482015290519081900360640190fd5b6001600160a01b038084166000908152600660209081526040808320938a1683529290522081905590505b846001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3506001949350505050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b60008382811461103f576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6001600160a01b0387166000908152600560205260408120549080805b8481146112515760008a8a8381811061107157fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b031614156110eb576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008989848181106110f957fe5b905060200201359050806000146111fc57848101858111611161576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b03168e6001600160a01b0316146111a0576001600160a01b03831660009081526005602052604090208054830190556111fa565b868211156111f5576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505060010161105c565b5081158015906112615750808214155b156112db578183038381106112bd576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038b16600090815260056020526040902090820190555b60006112e5612343565b9050806001600160a01b03168b6001600160a01b03161461130b5761130b8b828561252e565b5060019a9950505050505050505050565b60098054840190556000611333868686868661263d565b9695505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480610c1957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316149050919050565b6001600160a01b031660009081526005602052604090205490565b6113e16113dc612343565b6126f9565b8483811480156113f057508082145b611441576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461154a57600086868381811061145957fe5b905060200201356001600160a01b03169050600085858481811061147957fe5b905060200201359050306001600160a01b0316826001600160a01b0316141561150757600954306000908152600560205260409020540380821115611505576040805162461bcd60e51b815260206004820152601b60248201527f5265636f763a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b505b6115408a8a8581811061151657fe5b905060200201356001600160a01b031682846001600160a01b03166127bd9092919063ffffffff16565b5050600101611444565b5050505050505050565b60016020526000908152604090205481565b6000838281146115bd576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60006115c7612343565b6001600160a01b03811660009081526005602052604081205491925080805b8581146117db5760008b8b838181106115fb57fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b03161415611675576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008a8a8481811061168357fe5b90506020020135905080600014611786578481018581116116eb576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b0316886001600160a01b03161461172a576001600160a01b0383166000908152600560205260409020805483019055611784565b8682111561177f576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350506001016115e6565b5081158015906117eb5750808214155b1561186557818303838110611847576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038516600090815260056020526040902090820190555b5060019998505050505050505050565b6000546001600160a01b031690565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b60006001600160a01b038316611942576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b610cc761194d612343565b848461252e565b6000610cc7611961612343565b848461283d565b600080611973612343565b90506119818188888861240f565b611993866001600160a01b03166129a4565b15611ae357634fc3585960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc35859838a8989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611a5b57600080fd5b505af1158015611a6f573d6000803e3d6000fd5b505050506040513d6020811015611a8557600080fd5b50516001600160e01b03191614611ae3576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b5060019695505050505050565b611afb6113dc612343565b848381148015611b0a57508082145b611b5b576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461154a57858582818110611b7157fe5b905060200201356001600160a01b03166001600160a01b03166323b872dd308a8a85818110611b9c57fe5b905060200201356001600160a01b0316878786818110611bb857fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611c1557600080fd5b505af1158015611c29573d6000803e3d6000fd5b50505050806001019050611b5e565b6008546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b81816020811015611c7b57600080fd5b506009805491359091039055611c928383836129aa565b505050565b6001600160a01b038716611cf2576040805162461bcd60e51b815260206004820152601960248201527f45524332303a207a65726f2061646472657373206f776e657200000000000000604482015290519081900360640190fd5b83421115611d47576040805162461bcd60e51b815260206004820152601560248201527f45524332303a2065787069726564207065726d69740000000000000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526001602081815260408084208054938401905580517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280820195909552948b166060850152608084018a905260a084019190915260c08084018990528451808503909101815260e09093019093528151919092012090611dd9610d2d565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611e8d573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b031614611eff576040805162461bcd60e51b815260206004820152601560248201527f45524332303a20696e76616c6964207065726d69740000000000000000000000604482015290519081900360640190fd5b611f0a8a8a8a612352565b50505050505050505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b611f4c6113dc612343565b8051611f5f906004906020840190612dcf565b5050565b600080611f6e612343565b9050611f7b81878761283d565b611f8d866001600160a01b03166129a4565b156120dd57634fc3585960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc3585983848989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561205557600080fd5b505af1158015612069573d6000803e3d6000fd5b505050506040513d602081101561207f57600080fd5b50516001600160e01b031916146120dd576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b50600195945050505050565b6120f46113dc612343565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60006001600160e01b031982167f01ffc9a70000000000000000000000000000000000000000000000000000000014806121bd57506001600160e01b031982167f36372b0700000000000000000000000000000000000000000000000000000000145b806121f157506001600160e01b031982167fa219a02500000000000000000000000000000000000000000000000000000000145b8061222557506001600160e01b031982167f3c130d9000000000000000000000000000000000000000000000000000000000145b8061225957506001600160e01b031982167f9d07518600000000000000000000000000000000000000000000000000000000145b8061228d57506001600160e01b031982167fc05327e600000000000000000000000000000000000000000000000000000000145b806122c157506001600160e01b031982167f53f41a9700000000000000000000000000000000000000000000000000000000145b80610c195750506001600160e01b0319167f9d8ff7da000000000000000000000000000000000000000000000000000000001490565b60006001600160e01b031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610c195750506001600160e01b031916634fc3585960e01b1490565b600061234d6129db565b905090565b6001600160a01b0382166123ad576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61241a83838361283d565b836001600160a01b0316836001600160a01b03161461243e5761243e83858361252e565b50505050565b600061244e612343565b905061245c8182308561240f565b604080516001600160a01b03831681526020810184905281517f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5929181900390910190a15050565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b6001600160a01b03808416600090815260066020908152604080832093861683529290522054600019811480159061256557508115155b156125ec578181038181106125c1576040805162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015290519081900360640190fd5b6001600160a01b03808616600090815260066020908152604080832093881683529290522081905590505b826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050565b600030612648612343565b6001600160a01b0316146126a3576040805162461bcd60e51b815260206004820152601860248201527f4368696c6445524332303a2077726f6e672073656e6465720000000000000000604482015290519081900360640190fd5b604080516001600160a01b03871681526020810186905281517f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5929181900390910190a150634fc3585960e01b95945050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561273257600080fd5b505afa158015612746573d6000803e3d6000fd5b505050506040513d602081101561275c57600080fd5b50516001600160a01b03828116911614610d06576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611c92908490612b3b565b6001600160a01b038216612898576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b8015612954576001600160a01b03831660009081526005602052604090205481810381811061290e576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614612951576001600160a01b038086166000908152600560205260408082208490559186168152208054840190555b50505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b3b151590565b6129ba6129b5612343565b612d43565b6000828260208110156129cc57600080fd5b5035905061243e30858361283d565b600033816129e7612da5565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480612a5a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15612a68579150610cb09050565b6001600160a01b0382163214801590612b2757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e60125d682846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015612afa57600080fd5b505afa158015612b0e573d6000803e3d6000fd5b505050506040513d6020811015612b2457600080fd5b50515b15612b35579150610cb09050565b50905090565b81612b4e6001600160a01b0382166129a4565b612b9f576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b60208310612bfa57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612bbd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612c5c576040519150601f19603f3d011682016040523d82523d6000602084013e612c61565b606091505b50915091508115612ce057805115612cdb57808060200190516020811015612c8857600080fd5b5051612cdb576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b612d3c565b8051612d33576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b6008546001600160a01b03828116911614610d06576040805162461bcd60e51b815260206004820152601a60248201527f4368696c6445524332303a206f6e6c79206465706f7369746f72000000000000604482015290519081900360640190fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282612e055760008555612e4b565b82601f10612e1e57805160ff1916838001178555612e4b565b82800160010185558215612e4b579182015b82811115612e4b578251825591602001919060010190612e30565b50612e57929150612e5b565b5090565b5b80821115612e575760008155600101612e5c56fea2646970667358221220b59b0a0d499e3060772343aeab81766fe7856236ffcfffb5bcf2c31dede2fa2464736f6c6343000706003300000000000000000000000000000000000000000a466f316cd997cbec000000000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa000000000000000000000000c5f6ac13b98f0e2b541c55c67a2c4946ae16d3f8000000000000000000000000e8f7fa0697b9b5edcbf3b6bf30040c75130e3297Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637ecebe001161010f578063c8291d84116100a2578063dd62ed3e11610071578063dd62ed3e14610a7a578063e0df5b6f14610aa8578063eb79554914610b4e578063f2fde38b14610bd3576101f0565b8063c8291d8414610999578063cd0d0096146109a1578063cf2c52cb146109a9578063d505accf14610a29576101f0565b8063a457c2d7116100de578063a457c2d71461079d578063a9059cbb146107c9578063b88d4fde146107f5578063c3666c3614610885576101f0565b80637ecebe001461068957806388d695b2146106af5780638da5cb5b1461077157806395d89b4114610795576101f0565b80633644e515116101875780634fc35859116101565780634fc358591461047c578063572b6c051461052957806370a082311461054f57806373c8a95814610575576101f0565b80633644e5151461036e57806339509351146103765780633c130d90146103a25780634885b254146103aa576101f0565b806318160ddd116101c357806318160ddd146102f357806323b872dd146102fb5780632e1a7d4d14610331578063313ce56714610350576101f0565b806301522b1e146101f557806301ffc9a71461020f57806306fdde031461024a578063095ea7b3146102c7575b600080fd5b6101fd610bf9565b60408051918252519081900360200190f35b6102366004803603602081101561022557600080fd5b50356001600160e01b031916610bff565b604080519115158252519081900360200190f35b610252610c1f565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028c578181015183820152602001610274565b50505050905090810190601f1680156102b95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610236600480360360408110156102dd57600080fd5b506001600160a01b038135169060200135610cb3565b6101fd610cd0565b6102366004803603606081101561031157600080fd5b506001600160a01b03813581169160208101359091169060400135610cd6565b61034e6004803603602081101561034757600080fd5b5035610cf5565b005b610358610d09565b6040805160ff9092168252519081900360200190f35b6101fd610d2d565b6102366004803603604081101561038c57600080fd5b506001600160a01b038135169060200135610e19565b610252610f87565b610236600480360360608110156103c057600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156103eb57600080fd5b8201836020820111156103fd57600080fd5b8035906020019184602083028401116401000000008311171561041f57600080fd5b91939092909160208101903564010000000081111561043d57600080fd5b82018360208201111561044f57600080fd5b8035906020019184602083028401116401000000008311171561047157600080fd5b509092509050610fe8565b61050c6004803603608081101561049257600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156104cd57600080fd5b8201836020820111156104df57600080fd5b8035906020019184600183028401116401000000008311171561050157600080fd5b50909250905061131c565b604080516001600160e01b03199092168252519081900360200190f35b6102366004803603602081101561053f57600080fd5b50356001600160a01b031661133d565b6101fd6004803603602081101561056557600080fd5b50356001600160a01b03166113b6565b61034e6004803603606081101561058b57600080fd5b8101906020810181356401000000008111156105a657600080fd5b8201836020820111156105b857600080fd5b803590602001918460208302840111640100000000831117156105da57600080fd5b9193909290916020810190356401000000008111156105f857600080fd5b82018360208201111561060a57600080fd5b8035906020019184602083028401116401000000008311171561062c57600080fd5b91939092909160208101903564010000000081111561064a57600080fd5b82018360208201111561065c57600080fd5b8035906020019184602083028401116401000000008311171561067e57600080fd5b5090925090506113d1565b6101fd6004803603602081101561069f57600080fd5b50356001600160a01b0316611554565b610236600480360360408110156106c557600080fd5b8101906020810181356401000000008111156106e057600080fd5b8201836020820111156106f257600080fd5b8035906020019184602083028401116401000000008311171561071457600080fd5b91939092909160208101903564010000000081111561073257600080fd5b82018360208201111561074457600080fd5b8035906020019184602083028401116401000000008311171561076657600080fd5b509092509050611566565b610779611875565b604080516001600160a01b039092168252519081900360200190f35b610252611884565b610236600480360360408110156107b357600080fd5b506001600160a01b0381351690602001356118e5565b610236600480360360408110156107df57600080fd5b506001600160a01b038135169060200135611954565b6102366004803603608081101561080b57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561084657600080fd5b82018360208201111561085857600080fd5b8035906020019184600183028401116401000000008311171561087a57600080fd5b509092509050611968565b61034e6004803603606081101561089b57600080fd5b8101906020810181356401000000008111156108b657600080fd5b8201836020820111156108c857600080fd5b803590602001918460208302840111640100000000831117156108ea57600080fd5b91939092909160208101903564010000000081111561090857600080fd5b82018360208201111561091a57600080fd5b8035906020019184602083028401116401000000008311171561093c57600080fd5b91939092909160208101903564010000000081111561095a57600080fd5b82018360208201111561096c57600080fd5b8035906020019184602083028401116401000000008311171561098e57600080fd5b509092509050611af0565b610779611c38565b6101fd611c47565b61034e600480360360408110156109bf57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156109ea57600080fd5b8201836020820111156109fc57600080fd5b80359060200191846001830284011164010000000083111715610a1e57600080fd5b509092509050611c6b565b61034e600480360360e0811015610a3f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611c97565b6101fd60048036036040811015610a9057600080fd5b506001600160a01b0381358116916020013516611f16565b61034e60048036036020811015610abe57600080fd5b810190602081018135640100000000811115610ad957600080fd5b820183602082011115610aeb57600080fd5b80359060200191846001830284011164010000000083111715610b0d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f41945050505050565b61023660048036036060811015610b6457600080fd5b6001600160a01b0382351691602081013591810190606081016040820135640100000000811115610b9457600080fd5b820183602082011115610ba657600080fd5b80359060200191846001830284011164010000000083111715610bc857600080fd5b509092509050611f63565b61034e60048036036020811015610be957600080fd5b50356001600160a01b03166120e9565b60095481565b6000610c0a8261215a565b80610c195750610c19826122f7565b92915050565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b820191906000526020600020905b815481529060010190602001808311610c8b57829003601f168201915b505050505090505b90565b6000610cc7610cc0612343565b8484612352565b50600192915050565b60075490565b6000610ceb610ce3612343565b85858561240f565b5060019392505050565b6009805482019055610d0681612444565b50565b7f000000000000000000000000000000000000000000000000000000000000001290565b6000467f00000000000000000000000000000000000000000000000000000000000000898114610df1576002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152610dec93859391929091830182828015610de25780601f10610db757610100808354040283529160200191610de2565b820191906000526020600020905b815481529060010190602001808311610dc557829003601f168201915b50505050506124a4565b610e13565b7f94f6b5784d9d00faef0270e46f4aaca03a079a8ab991bfe536e0825d1e30512c5b91505090565b60006001600160a01b038316610e76576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6000610e80612343565b6001600160a01b038082166000908152600660209081526040808320938916835292905220549091508315610f3157808401818111610f06576040805162461bcd60e51b815260206004820152601960248201527f45524332303a20616c6c6f77616e6365206f766572666c6f7700000000000000604482015290519081900360640190fd5b6001600160a01b038084166000908152600660209081526040808320938a1683529290522081905590505b846001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3506001949350505050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b60008382811461103f576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6001600160a01b0387166000908152600560205260408120549080805b8481146112515760008a8a8381811061107157fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b031614156110eb576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008989848181106110f957fe5b905060200201359050806000146111fc57848101858111611161576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b03168e6001600160a01b0316146111a0576001600160a01b03831660009081526005602052604090208054830190556111fa565b868211156111f5576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505060010161105c565b5081158015906112615750808214155b156112db578183038381106112bd576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038b16600090815260056020526040902090820190555b60006112e5612343565b9050806001600160a01b03168b6001600160a01b03161461130b5761130b8b828561252e565b5060019a9950505050505050505050565b60098054840190556000611333868686868661263d565b9695505050505050565b60007f000000000000000000000000e8f7fa0697b9b5edcbf3b6bf30040c75130e32976001600160a01b0316826001600160a01b03161480610c1957507f000000000000000000000000c5f6ac13b98f0e2b541c55c67a2c4946ae16d3f86001600160a01b0316826001600160a01b0316149050919050565b6001600160a01b031660009081526005602052604090205490565b6113e16113dc612343565b6126f9565b8483811480156113f057508082145b611441576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461154a57600086868381811061145957fe5b905060200201356001600160a01b03169050600085858481811061147957fe5b905060200201359050306001600160a01b0316826001600160a01b0316141561150757600954306000908152600560205260409020540380821115611505576040805162461bcd60e51b815260206004820152601b60248201527f5265636f763a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b505b6115408a8a8581811061151657fe5b905060200201356001600160a01b031682846001600160a01b03166127bd9092919063ffffffff16565b5050600101611444565b5050505050505050565b60016020526000908152604090205481565b6000838281146115bd576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60006115c7612343565b6001600160a01b03811660009081526005602052604081205491925080805b8581146117db5760008b8b838181106115fb57fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b03161415611675576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008a8a8481811061168357fe5b90506020020135905080600014611786578481018581116116eb576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b0316886001600160a01b03161461172a576001600160a01b0383166000908152600560205260409020805483019055611784565b8682111561177f576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350506001016115e6565b5081158015906117eb5750808214155b1561186557818303838110611847576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038516600090815260056020526040902090820190555b5060019998505050505050505050565b6000546001600160a01b031690565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b60006001600160a01b038316611942576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b610cc761194d612343565b848461252e565b6000610cc7611961612343565b848461283d565b600080611973612343565b90506119818188888861240f565b611993866001600160a01b03166129a4565b15611ae357634fc3585960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc35859838a8989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611a5b57600080fd5b505af1158015611a6f573d6000803e3d6000fd5b505050506040513d6020811015611a8557600080fd5b50516001600160e01b03191614611ae3576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b5060019695505050505050565b611afb6113dc612343565b848381148015611b0a57508082145b611b5b576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461154a57858582818110611b7157fe5b905060200201356001600160a01b03166001600160a01b03166323b872dd308a8a85818110611b9c57fe5b905060200201356001600160a01b0316878786818110611bb857fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611c1557600080fd5b505af1158015611c29573d6000803e3d6000fd5b50505050806001019050611b5e565b6008546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000008981565b81816020811015611c7b57600080fd5b506009805491359091039055611c928383836129aa565b505050565b6001600160a01b038716611cf2576040805162461bcd60e51b815260206004820152601960248201527f45524332303a207a65726f2061646472657373206f776e657200000000000000604482015290519081900360640190fd5b83421115611d47576040805162461bcd60e51b815260206004820152601560248201527f45524332303a2065787069726564207065726d69740000000000000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526001602081815260408084208054938401905580517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280820195909552948b166060850152608084018a905260a084019190915260c08084018990528451808503909101815260e09093019093528151919092012090611dd9610d2d565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611e8d573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b031614611eff576040805162461bcd60e51b815260206004820152601560248201527f45524332303a20696e76616c6964207065726d69740000000000000000000000604482015290519081900360640190fd5b611f0a8a8a8a612352565b50505050505050505050565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b611f4c6113dc612343565b8051611f5f906004906020840190612dcf565b5050565b600080611f6e612343565b9050611f7b81878761283d565b611f8d866001600160a01b03166129a4565b156120dd57634fc3585960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc3585983848989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561205557600080fd5b505af1158015612069573d6000803e3d6000fd5b505050506040513d602081101561207f57600080fd5b50516001600160e01b031916146120dd576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b50600195945050505050565b6120f46113dc612343565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60006001600160e01b031982167f01ffc9a70000000000000000000000000000000000000000000000000000000014806121bd57506001600160e01b031982167f36372b0700000000000000000000000000000000000000000000000000000000145b806121f157506001600160e01b031982167fa219a02500000000000000000000000000000000000000000000000000000000145b8061222557506001600160e01b031982167f3c130d9000000000000000000000000000000000000000000000000000000000145b8061225957506001600160e01b031982167f9d07518600000000000000000000000000000000000000000000000000000000145b8061228d57506001600160e01b031982167fc05327e600000000000000000000000000000000000000000000000000000000145b806122c157506001600160e01b031982167f53f41a9700000000000000000000000000000000000000000000000000000000145b80610c195750506001600160e01b0319167f9d8ff7da000000000000000000000000000000000000000000000000000000001490565b60006001600160e01b031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610c195750506001600160e01b031916634fc3585960e01b1490565b600061234d6129db565b905090565b6001600160a01b0382166123ad576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61241a83838361283d565b836001600160a01b0316836001600160a01b03161461243e5761243e83858361252e565b50505050565b600061244e612343565b905061245c8182308561240f565b604080516001600160a01b03831681526020810184905281517f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5929181900390910190a15050565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b6001600160a01b03808416600090815260066020908152604080832093861683529290522054600019811480159061256557508115155b156125ec578181038181106125c1576040805162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015290519081900360640190fd5b6001600160a01b03808616600090815260066020908152604080832093881683529290522081905590505b826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050565b600030612648612343565b6001600160a01b0316146126a3576040805162461bcd60e51b815260206004820152601860248201527f4368696c6445524332303a2077726f6e672073656e6465720000000000000000604482015290519081900360640190fd5b604080516001600160a01b03871681526020810186905281517f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5929181900390910190a150634fc3585960e01b95945050505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561273257600080fd5b505afa158015612746573d6000803e3d6000fd5b505050506040513d602081101561275c57600080fd5b50516001600160a01b03828116911614610d06576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611c92908490612b3b565b6001600160a01b038216612898576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b8015612954576001600160a01b03831660009081526005602052604090205481810381811061290e576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614612951576001600160a01b038086166000908152600560205260408082208490559186168152208054840190555b50505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b3b151590565b6129ba6129b5612343565b612d43565b6000828260208110156129cc57600080fd5b5035905061243e30858361283d565b600033816129e7612da5565b90507f000000000000000000000000c5f6ac13b98f0e2b541c55c67a2c4946ae16d3f86001600160a01b0316826001600160a01b03161480612a5a57507f000000000000000000000000e8f7fa0697b9b5edcbf3b6bf30040c75130e32976001600160a01b0316826001600160a01b0316145b15612a68579150610cb09050565b6001600160a01b0382163214801590612b2757507f000000000000000000000000c5f6ac13b98f0e2b541c55c67a2c4946ae16d3f86001600160a01b031663e60125d682846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015612afa57600080fd5b505afa158015612b0e573d6000803e3d6000fd5b505050506040513d6020811015612b2457600080fd5b50515b15612b35579150610cb09050565b50905090565b81612b4e6001600160a01b0382166129a4565b612b9f576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b60208310612bfa57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612bbd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612c5c576040519150601f19603f3d011682016040523d82523d6000602084013e612c61565b606091505b50915091508115612ce057805115612cdb57808060200190516020811015612c8857600080fd5b5051612cdb576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b612d3c565b8051612d33576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b6008546001600160a01b03828116911614610d06576040805162461bcd60e51b815260206004820152601a60248201527f4368696c6445524332303a206f6e6c79206465706f7369746f72000000000000604482015290519081900360640190fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282612e055760008555612e4b565b82601f10612e1e57805160ff1916838001178555612e4b565b82800160010185558215612e4b579182015b82811115612e4b578251825591602001919060010190612e30565b50612e57929150612e5b565b5090565b5b80821115612e575760008155600101612e5c56fea2646970667358221220b59b0a0d499e3060772343aeab81766fe7856236ffcfffb5bcf2c31dede2fa2464736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000a466f316cd997cbec000000000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa000000000000000000000000c5f6ac13b98f0e2b541c55c67a2c4946ae16d3f8000000000000000000000000e8f7fa0697b9b5edcbf3b6bf30040c75130e3297
-----Decoded View---------------
Arg [0] : supply (uint256): 3180000000000000000000000000
Arg [1] : childChainManager (address): 0xA6FA4fB5f76172d178d61B04b0ecd319C5d1C0aa
Arg [2] : forwarderRegistry (address): 0xC5f6aC13b98F0E2b541C55C67A2C4946ae16D3F8
Arg [3] : universalForwarder (address): 0xe8F7fA0697b9b5eDCBF3B6BF30040c75130E3297
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000a466f316cd997cbec000000
Arg [1] : 000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa
Arg [2] : 000000000000000000000000c5f6ac13b98f0e2b541c55c67a2c4946ae16d3f8
Arg [3] : 000000000000000000000000e8f7fa0697b9b5edcbf3b6bf30040c75130e3297Deployed Bytecode Sourcemap
54137:2491:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54263:23;;;:::i;:::-;;;;;;;;;;;;;;;;48060:223;;;;;;;;;;;;;;;;-1:-1:-1;48060:223:0;-1:-1:-1;;;;;;48060:223:0;;:::i;:::-;;;;;;;;;;;;;;;;;;31460:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32765:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32765:169:0;;;;;;;;:::i;32255:102::-;;;:::i;34341:223::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34341:223:0;;;;;;;;;;;;;;;;;:::i;55025:128::-;;;;;;;;;;;;;;;;-1:-1:-1;55025:128:0;;:::i;:::-;;31756:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29690:361;;;:::i;33104:638::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33104:638:0;;;;;;;;:::i;32008:102::-;;;:::i;36500:1801::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36500:1801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36500:1801:0;;-1:-1:-1;36500:1801:0;-1:-1:-1;36500:1801:0;:::i;55161:284::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;55161:284:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55161:284:0;;-1:-1:-1;55161:284:0;-1:-1:-1;55161:284:0;:::i;:::-;;;;-1:-1:-1;;;;;;55161:284:0;;;;;;;;;;;;;;52228:195;;;;;;;;;;;;;;;;-1:-1:-1;52228:195:0;-1:-1:-1;;;;;52228:195:0;;:::i;32403:121::-;;;;;;;;;;;;;;;;-1:-1:-1;32403:121:0;-1:-1:-1;;;;;32403:121:0;;:::i;55453:789::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55453:789:0;;-1:-1:-1;55453:789:0;-1:-1:-1;55453:789:0;:::i;28795:50::-;;;;;;;;;;;;;;;;-1:-1:-1;28795:50:0;-1:-1:-1;;;;;28795:50:0;;:::i;34758:1646::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34758:1646:0;;-1:-1:-1;34758:1646:0;-1:-1:-1;34758:1646:0;:::i;6688:96::-;;;:::i;:::-;;;;-1:-1:-1;;;;;6688:96:0;;;;;;;;;;;;;;31605:98;;;:::i;33805:281::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33805:281:0;;;;;;;;:::i;34131:161::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34131:161:0;;;;;;;;:::i;39025:485::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39025:485:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39025:485:0;;-1:-1:-1;39025:485:0;-1:-1:-1;39025:485:0;:::i;9867:522::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9867:522:0;;-1:-1:-1;9867:522:0;-1:-1:-1;9867:522:0;:::i;47175:32::-;;;:::i;28638:42::-;;;:::i;54826:191::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54826:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54826:191:0;;-1:-1:-1;54826:191:0;-1:-1:-1;54826:191:0;:::i;39713:727::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39713:727:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32570:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32570:151:0;;;;;;;;;;:::i;54681:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54681:137:0;;-1:-1:-1;54681:137:0;;-1:-1:-1;;;;;54681:137:0:i;38487:450::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38487:450:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38487:450:0;;-1:-1:-1;38487:450:0;-1:-1:-1;38487:450:0;:::i;7031:201::-;;;;;;;;;;;;;;;;-1:-1:-1;7031:201:0;-1:-1:-1;;;;;7031:201:0;;:::i;54263:23::-;;;;:::o;48060:223::-;48167:4;48191:36;48215:11;48191:23;:36::i;:::-;:84;;;;48231:44;48263:11;48231:31;:44::i;:::-;48184:91;48060:223;-1:-1:-1;;48060:223:0:o;31460:94::-;31541:5;31534:12;;;;;;;-1:-1:-1;;31534:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31508:13;;31534:12;;31541:5;;31534:12;;31541:5;31534:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31460:94;;:::o;32765:169::-;32849:4;32866:38;32875:12;:10;:12::i;:::-;32889:7;32898:5;32866:8;:38::i;:::-;-1:-1:-1;32922:4:0;32765:169;;;;:::o;32255:102::-;32337:12;;32255:102;:::o;34341:223::-;34473:4;34490:44;34504:12;:10;:12::i;:::-;34518:4;34524:2;34528:5;34490:13;:44::i;:::-;-1:-1:-1;34552:4:0;34341:223;;;;;:::o;55025:128::-;55094:8;:18;;;;;;55123:22;55106:6;55123:14;:22::i;:::-;55025:128;:::o;31756:94::-;31833:9;31756:94;:::o;29690:361::-;29748:7;29829:9;29955:17;29944:28;;:99;;30036:5;29995:48;;;;;;;;;;;;-1:-1:-1;;29995:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;30021:7;;29995:48;;30036:5;;29995:48;;30036:5;29995:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;:48::i;:::-;29944:99;;;29975:17;29944:99;29937:106;;;29690:361;:::o;33104:638::-;33203:4;-1:-1:-1;;;;;33228:21:0;;33220:61;;;;;-1:-1:-1;;;33220:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33292:13;33308:12;:10;:12::i;:::-;-1:-1:-1;;;;;33352:18:0;;;33331;33352;;;:11;:18;;;;;;;;:27;;;;;;;;;;33292:28;;-1:-1:-1;33394:15:0;;33390:269;;33449:23;;;33495:25;;;33487:63;;;;;-1:-1:-1;;;33487:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33565:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:42;;;33595:12;-1:-1:-1;33390:269:0;33690:7;-1:-1:-1;;;;;33674:36:0;33683:5;-1:-1:-1;;;;;33674:36:0;;33699:10;33674:36;;;;;;;;;;;;;;;;;;-1:-1:-1;33730:4:0;;33104:638;-1:-1:-1;;;;33104:638:0:o;32008:102::-;32093:9;32086:16;;;;;;;;-1:-1:-1;;32086:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32060:13;;32086:16;;32093:9;;32086:16;;32093:9;32086:16;;;;;;;;;;;;;;;;;;;;;;;;36500:1801;36668:4;36702:10;36738:23;;;36730:62;;;;;-1:-1:-1;;;36730:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36823:15:0;;36805;36823;;;:9;:15;;;;;;;36805;;36921:810;36942:6;36937:1;:11;36921:810;;36970:10;36983;;36994:1;36983:13;;;;;;;;;;;;;-1:-1:-1;;;;;36983:13:0;36970:26;;37033:1;-1:-1:-1;;;;;37019:16:0;:2;-1:-1:-1;;;;;37019:16:0;;;37011:51;;;;;-1:-1:-1;;;37011:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37079:13;37095:6;;37102:1;37095:9;;;;;;;;;;;;;37079:25;;37125:5;37134:1;37125:10;37121:552;;37180:18;;;37225:26;;;37217:61;;;;;-1:-1:-1;;;37217:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37310:13;37297:26;;37354:2;-1:-1:-1;;;;;37346:10:0;:4;-1:-1:-1;;;;;37346:10:0;;37342:316;;-1:-1:-1;;;;;37381:13:0;;;;;;:9;:13;;;;;:22;;;;;;37342:316;;;37469:7;37460:5;:16;;37452:56;;;;;-1:-1:-1;;;37452:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37531:31;;;;37342:316;37121:552;;37709:2;-1:-1:-1;;;;;37694:25:0;37703:4;-1:-1:-1;;;;;37694:25:0;;37713:5;37694:25;;;;;;;;;;;;;;;;;;-1:-1:-1;;36950:3:0;;36921:810;;;-1:-1:-1;37747:15:0;;;;;:55;;;37780:22;37766:10;:36;;37747:55;37743:384;;;37840:20;;;37883;;;37875:60;;;;;-1:-1:-1;;;37875:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38006:15:0;;;;;;:9;:15;;;;;38024:35;;;38006:53;;37743:384;38139:14;38156:12;:10;:12::i;:::-;38139:29;;38191:6;-1:-1:-1;;;;;38183:14:0;:4;-1:-1:-1;;;;;38183:14:0;;38179:91;;38214:44;38233:4;38239:6;38247:10;38214:18;:44::i;:::-;-1:-1:-1;38289:4:0;;36500:1801;-1:-1:-1;;;;;;;;;;36500:1801:0:o;55161:284::-;55350:8;:18;;;;;;55331:6;55386:51;55408:8;55418:4;55362:6;55432:4;;55386:21;:51::i;:::-;55379:58;55161:284;-1:-1:-1;;;;;;55161:284:0:o;52228:195::-;52315:4;52352:19;-1:-1:-1;;;;;52339:32:0;:9;-1:-1:-1;;;;;52339:32:0;;:76;;;;52396:18;-1:-1:-1;;;;;52375:40:0;:9;-1:-1:-1;;;;;52375:40:0;;52332:83;;52228:195;;;:::o;32403:121::-;-1:-1:-1;;;;;32498:18:0;32471:7;32498:18;;;:9;:18;;;;;;;32403:121::o;55453:789::-;55631:31;55649:12;:10;:12::i;:::-;55631:17;:31::i;:::-;55690:8;55724:23;;;:51;;;;-1:-1:-1;55751:24:0;;;55724:51;55716:90;;;;;-1:-1:-1;;;55716:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;55822:9;55817:418;55842:6;55837:1;:11;55817:418;;55870:13;55886:6;;55893:1;55886:9;;;;;;;;;;;;;-1:-1:-1;;;;;55886:9:0;55870:25;;55910:14;55927:7;;55935:1;55927:10;;;;;;;;;;;;;55910:27;;55973:4;-1:-1:-1;;;;;55956:22:0;:5;-1:-1:-1;;;;;55956:22:0;;55952:200;;;56048:8;;56039:4;55999:19;56021:24;;;:9;:24;;;;;;:35;56083:21;;;;56075:61;;;;;-1:-1:-1;;;56075:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;55952:200;;56166:57;56203:8;;56212:1;56203:11;;;;;;;;;;;;;-1:-1:-1;;;;;56203:11:0;56216:6;56180:5;-1:-1:-1;;;;;56166:36:0;;;:57;;;;;:::i;:::-;-1:-1:-1;;55850:3:0;;55817:418;;;;55453:789;;;;;;;:::o;28795:50::-;;;;;;;;;;;;;:::o;34758:1646::-;34874:4;34908:10;34944:23;;;34936:62;;;;;-1:-1:-1;;;34936:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35009:14;35026:12;:10;:12::i;:::-;-1:-1:-1;;;;;35067:17:0;;35049:15;35067:17;;;:9;:17;;;;;;35009:29;;-1:-1:-1;35049:15:0;;35167:810;35188:6;35183:1;:11;35167:810;;35216:10;35229;;35240:1;35229:13;;;;;;;;;;;;;-1:-1:-1;;;;;35229:13:0;35216:26;;35279:1;-1:-1:-1;;;;;35265:16:0;:2;-1:-1:-1;;;;;35265:16:0;;;35257:51;;;;;-1:-1:-1;;;35257:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35325:13;35341:6;;35348:1;35341:9;;;;;;;;;;;;;35325:25;;35369:5;35378:1;35369:10;35365:554;;35424:18;;;35469:26;;;35461:61;;;;;-1:-1:-1;;;35461:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35554:13;35541:26;;35600:2;-1:-1:-1;;;;;35590:12:0;:6;-1:-1:-1;;;;;35590:12:0;;35586:318;;-1:-1:-1;;;;;35627:13:0;;;;;;:9;:13;;;;;:22;;;;;;35586:318;;;35715:7;35706:5;:16;;35698:56;;;;;-1:-1:-1;;;35698:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35777:31;;;;35586:318;35365:554;;35955:2;-1:-1:-1;;;;;35938:27:0;35947:6;-1:-1:-1;;;;;35938:27:0;;35959:5;35938:27;;;;;;;;;;;;;;;;;;-1:-1:-1;;35196:3:0;;35167:810;;;-1:-1:-1;35993:15:0;;;;;:55;;;36026:22;36012:10;:36;;35993:55;35989:386;;;36086:20;;;36129;;;36121:60;;;;;-1:-1:-1;;;36121:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36252:17:0;;;;;;:9;:17;;;;;36272:35;;;36252:55;;35989:386;-1:-1:-1;36392:4:0;;34758:1646;-1:-1:-1;;;;;;;;;34758:1646:0:o;6688:96::-;6743:7;6770:6;-1:-1:-1;;;;;6770:6:0;6688:96;:::o;31605:98::-;31688:7;31681:14;;;;;;;;-1:-1:-1;;31681:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31655:13;;31681:14;;31688:7;;31681:14;;31688:7;31681:14;;;;;;;;;;;;;;;;;;;;;;;;33805:281;33909:4;-1:-1:-1;;;;;33934:21:0;;33926:61;;;;;-1:-1:-1;;;33926:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33998:58;34017:12;:10;:12::i;:::-;34031:7;34040:15;33998:18;:58::i;34131:161::-;34211:4;34228:34;34238:12;:10;:12::i;:::-;34252:2;34256:5;34228:9;:34::i;39025:485::-;39192:4;39209:14;39226:12;:10;:12::i;:::-;39209:29;;39249:39;39263:6;39271:4;39277:2;39281:6;39249:13;:39::i;:::-;39303:15;:2;-1:-1:-1;;;;;39303:13:0;;:15::i;:::-;39299:182;;;-1:-1:-1;;;39343:98:0;;;39358:2;-1:-1:-1;;;;;39343:34:0;;39378:6;39386:4;39392:6;39400:4;;39343:62;;;;;;;;;;;;;-1:-1:-1;;;;;39343:62:0;;;;;;-1:-1:-1;;;;;39343:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39343:62:0;-1:-1:-1;;;;;;39343:98:0;;39335:134;;;;;-1:-1:-1;;;39335:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39498:4:0;;39025:485;-1:-1:-1;;;;;;39025:485:0:o;9867:522::-;10041:31;10059:12;:10;:12::i;10041:31::-;10100:8;10134:26;;;:55;;;;-1:-1:-1;10164:25:0;;;10134:55;10126:94;;;;;-1:-1:-1;;;10126:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10236:9;10231:151;10256:6;10251:1;:11;10231:151;;10303:9;;10313:1;10303:12;;;;;;;;;;;;;-1:-1:-1;;;;;10303:12:0;-1:-1:-1;;;;;10284:45:0;;10338:4;10345:8;;10354:1;10345:11;;;;;;;;;;;;;-1:-1:-1;;;;;10345:11:0;10358:8;;10367:1;10358:11;;;;;;;;;;;;;10284:86;;;;;;;;;;;;;-1:-1:-1;;;;;10284:86:0;;;;;;-1:-1:-1;;;;;10284:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10264:3;;;;;10231:151;;47175:32;;;-1:-1:-1;;;;;47175:32:0;;:::o;28638:42::-;;;:::o;54826:191::-;54943:11;;54932:34;;;;;;;;;;-1:-1:-1;54920:8:0;:46;;54932:34;;54920:46;;;;;54977:32;54991:4;54997:11;;54977:13;:32::i;:::-;54826:191;;;:::o;39713:727::-;-1:-1:-1;;;;;39940:19:0;;39932:57;;;;;-1:-1:-1;;;39932:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40027:8;40008:15;:27;;40000:61;;;;;-1:-1:-1;;;40000:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40154:13:0;;;40072:18;40154:13;;;:6;:13;;;;;;;;:15;;;;;;;40103:77;;28563:66;40103:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40093:88;;;;;;;;40246:18;:16;:18::i;:::-;40266:10;40217:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40207:71;;;;;;40192:86;;40289:14;40306:24;40316:4;40322:1;40325;40328;40306:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40289:41;;40359:5;-1:-1:-1;;;;;40349:15:0;:6;-1:-1:-1;;;;;40349:15:0;;40341:49;;;;;-1:-1:-1;;;40341:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40401:31;40410:5;40417:7;40426:5;40401:8;:31::i;:::-;39713:727;;;;;;;;;;:::o;32570:151::-;-1:-1:-1;;;;;32686:18:0;;;32659:7;32686:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;32570:151::o;54681:137::-;54747:31;54765:12;:10;:12::i;54747:31::-;54789:21;;;;:9;;:21;;;;;:::i;:::-;;54681:137;:::o;38487:450::-;38627:4;38644:14;38661:12;:10;:12::i;:::-;38644:29;;38684;38694:6;38702:2;38706:6;38684:9;:29::i;:::-;38728:15;:2;-1:-1:-1;;;;;38728:13:0;;:15::i;:::-;38724:184;;;-1:-1:-1;;;38768:100:0;;;38783:2;-1:-1:-1;;;;;38768:34:0;;38803:6;38811;38819;38827:4;;38768:64;;;;;;;;;;;;;-1:-1:-1;;;;;38768:64:0;;;;;;-1:-1:-1;;;;;38768:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38768:64:0;-1:-1:-1;;;;;;38768:100:0;;38760:136;;;;;-1:-1:-1;;;38760:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38925:4:0;;38487:450;-1:-1:-1;;;;;38487:450:0:o;7031:201::-;7111:31;7129:12;:10;:12::i;7111:31::-;7153:6;:17;;;;-1:-1:-1;;;;;7153:17:0;;;;;;;;;7186:38;;7153:17;;7207:6;;;7186:38;;7153:6;7186:38;7031:201;:::o;30686:620::-;30771:4;-1:-1:-1;;;;;;30808:40:0;;30823:25;30808:40;;:96;;-1:-1:-1;;;;;;;30865:39:0;;30880:24;30865:39;30808:96;:160;;;-1:-1:-1;;;;;;;30921:47:0;;30936:32;30921:47;30808:160;:224;;;-1:-1:-1;;;;;;;30985:47:0;;31000:32;30985:47;30808:224;:289;;;-1:-1:-1;;;;;;;31049:48:0;;31064:33;31049:48;30808:289;:359;;;-1:-1:-1;;;;;;;31114:53:0;;31129:38;31114:53;30808:359;:428;;;-1:-1:-1;;;;;;;31184:52:0;;31199:37;31184:52;30808:428;:490;;;-1:-1:-1;;;;;;;;31253:45:0;31268:30;31253:45;;30686:620::o;46468:208::-;46553:4;-1:-1:-1;;;;;;46577:40:0;;46592:25;46577:40;;:91;;-1:-1:-1;;;;;;;;46621:47:0;-1:-1:-1;;;46621:47:0;;46468:208::o;56250:185::-;56355:15;56390:37;:35;:37::i;:::-;56383:44;;56250:185;:::o;40558:281::-;-1:-1:-1;;;;;40685:21:0;;40677:61;;;;;-1:-1:-1;;;40677:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40749:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;40800:31;;;;;;;;;;;;;;;;;40558:281;;;:::o;42132:273::-;42275:26;42285:4;42291:2;42295:5;42275:9;:26::i;:::-;42324:6;-1:-1:-1;;;;;42316:14:0;:4;-1:-1:-1;;;;;42316:14:0;;42312:86;;42347:39;42366:4;42372:6;42380:5;42347:18;:39::i;:::-;42132:273;;;;:::o;49178:201::-;49238:14;49255:12;:10;:12::i;:::-;49238:29;;49278:52;49292:6;49300;49316:4;49323:6;49278:13;:52::i;:::-;49346:25;;;-1:-1:-1;;;;;49346:25:0;;;;;;;;;;;;;;;;;;;;;;;49178:201;;:::o;30059:474::-;30372:16;;;;;;;30221:289;;;30254:95;30221:289;;;;;;;;;;;30411:14;30221:289;;;;;;;;;;;30486:4;30221:289;;;;;;;;;;;;;;;;;;;;;;;;;30193:332;;;;;;30059:474::o;40847:697::-;-1:-1:-1;;;;;41007:18:0;;;40986;41007;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;41051:31:0;;;;;:55;;-1:-1:-1;41086:20:0;;;41051:55;41047:438;;;41266:28;;;41317:25;;;41309:67;;;;;-1:-1:-1;;;41309:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41391:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:42;;;41421:12;-1:-1:-1;41047:438:0;41516:7;-1:-1:-1;;;;;41500:36:0;41509:5;-1:-1:-1;;;;;41500:36:0;;41525:10;41500:36;;;;;;;;;;;;;;;;;;40847:697;;;;:::o;50044:343::-;50222:6;50273:4;50249:12;:10;:12::i;:::-;-1:-1:-1;;;;;50249:29:0;;50241:66;;;;;-1:-1:-1;;;50241:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;50323:23;;;-1:-1:-1;;;;;50323:23:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;50044:343:0;;;;;;;:::o;7363:138::-;7454:4;-1:-1:-1;;;;;7454:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7454:12:0;-1:-1:-1;;;;;7443:23:0;;;;;;7435:58;;;;;-1:-1:-1;;;7435:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1919:229;2081:58;;;-1:-1:-1;;;;;2081:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2104:23;2081:58;;;2046:94;;2074:5;;2046:27;:94::i;41552:572::-;-1:-1:-1;;;;;41682:16:0;;41674:51;;;;;-1:-1:-1;;;41674:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41742:10;;41738:336;;-1:-1:-1;;;;;41787:15:0;;41769;41787;;;:9;:15;;;;;;41838;;;41876:20;;;41868:60;;;;;-1:-1:-1;;;41868:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41955:2;-1:-1:-1;;;;;41947:10:0;:4;-1:-1:-1;;;;;41947:10:0;;41943:120;;-1:-1:-1;;;;;41978:15:0;;;;;;;:9;:15;;;;;;:28;;;42025:13;;;;;;:22;;;;;;41943:120;41738:336;;;42106:2;-1:-1:-1;;;;;42091:25:0;42100:4;-1:-1:-1;;;;;42091:25:0;;42110:5;42091:25;;;;;;;;;;;;;;;;;;41552:572;;;:::o;1106:387::-;1429:20;1477:8;;;1106:387::o;48634:248::-;48728:35;48750:12;:10;:12::i;:::-;48728:21;:35::i;:::-;48774:14;48802:11;;48791:34;;;;;;;;;;-1:-1:-1;48791:34:0;;-1:-1:-1;48836:38:0;48854:4;48861;48791:34;48836:9;:38::i;52431:922::-;52484:15;52540:10;52484:15;52586:27;:25;:27::i;:::-;52561:52;;52649:18;-1:-1:-1;;;;;52628:40:0;:9;-1:-1:-1;;;;;52628:40:0;;:76;;;;52685:19;-1:-1:-1;;;;;52672:32:0;:9;-1:-1:-1;;;;;52672:32:0;;52628:76;52624:169;;;52775:6;-1:-1:-1;52768:13:0;;-1:-1:-1;52768:13:0;52624:169;-1:-1:-1;;;;;53197:22:0;;53210:9;53197:22;;;;:78;;;53223:18;-1:-1:-1;;;;;53223:33:0;;53257:6;53265:9;53223:52;;;;;;;;;;;;;-1:-1:-1;;;;;53223:52:0;;;;;;-1:-1:-1;;;;;53223:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53223:52:0;53197:78;53193:124;;;53299:6;-1:-1:-1;53292:13:0;;-1:-1:-1;53292:13:0;53193:124;-1:-1:-1;53336:9:0;-1:-1:-1;52431:922:0;:::o;2675:892::-;2801:5;2826:19;-1:-1:-1;;;;;2826:17:0;;;:19::i;:::-;2818:58;;;;;-1:-1:-1;;;2818:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2950:12;2964:17;2985:6;-1:-1:-1;;;;;2985:11:0;2997:8;2985:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:57;;;;3021:7;3017:543;;;3049:11;;:16;3045:124;;3105:4;3094:24;;;;;;;;;;;;;;;-1:-1:-1;3094:24:0;3086:67;;;;;-1:-1:-1;;;3086:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3017:543;;;3260:11;;3256:97;;3297:40;;;-1:-1:-1;;;3297:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3256:97;3484:4;3478:11;3529:4;3522;3518:2;3514:13;3507:27;3447:102;2675:892;;;;;:::o;47444:148::-;47536:17;;-1:-1:-1;;;;;47525:28:0;;;47536:17;;47525:28;47517:67;;;;;-1:-1:-1;;;47517:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;50562:526;51045:23;51049:14;51045:23;51032:37;51028:2;51024:46;;50999:82::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://b59b0a0d499e3060772343aeab81766fe7856236ffcfffb5bcf2c31dede2fa24
Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingOVERVIEW
The GAMEE token (GMEE) is an ERC-20 utility token. It is used for game purchases, DAO governance, and access across the GAMEE ecosystem, most notably in the Arc8 mobile gaming application.
Loading...LoadingMultichain Portfolio | 26 Chains
Chain Token Portfolio % Price Amount Value POL 99.98% $0.013869 2,836,503,191.0231 $39,339,349.3 POL <0.01% $1 24.5836 $24.61 POL <0.01% $1 10 $10.01 POL <0.01% $0.004497 1,041.73 $4.69 POL <0.01% $0.01933 106.9092 $2.07 POL <0.01% $0.001493 225.45 $0.3365 POL <0.01% $0.009621 20.35 $0.1957 ETH 0.02% $0.013857 433,200 $6,002.95 BSC <0.01% $1 120 $120.06 BSC <0.01% $0.418064 274.5851 $114.79 BSC <0.01% $550.23 0.1418 $78 BSC <0.01% $0.013896 35.1408 $0.4883 [ Download: CSV Export ]A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Compiler specific version warnings:
The compiled contract might be susceptible to FullInlinerNonExpressionSplitArgumentEvaluationOrder (low-severity), MissingSideEffectsOnSelectorAccess (low-severity), AbiReencodingHeadOverflowWithStaticArrayCleanup (medium-severity), DirtyBytesArrayToStorage (low-severity), DataLocationChangeInInternalOverride (very low-severity), NestedCalldataArrayAbiReencodingSizeValidation (very low-severity), SignedImmutables (very low-severity), ABIDecodeTwoDimensionalArrayMemory (very low-severity), KeccakCaching (medium-severity) Solidity Compiler Bugs.
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Notice
The migration from MATIC to POL is now live. To find out more, please visit Polygon Official Announcement .
Before You Copy
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.