Overview
FTM Balance
0 FTM
FTM Value
$0.00More Info
Private Name Tags
ContractCreator
Sponsored
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
49551494 | 717 days ago | Contract Creation | 0 FTM |
Loading...
Loading
Contract Name:
LimitManager
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-10-19 */ // Sources flattened with hardhat v2.9.6 https://hardhat.org // File contracts/MultiSigOwner.sol // SPDX-License-Identifier: LICENSED pragma solidity ^0.7.0; pragma abicoder v2; // 2/3 Multi Sig Owner contract MultiSigOwner { address[] public owners; mapping(uint256 => bool) public signatureId; bool private initialized; // events event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); event SignValidTimeChanged(uint256 newValue); modifier validSignOfOwner( bytes calldata signData, bytes calldata keys, string memory functionName ) { require(isOwner(msg.sender), "on"); address signer = getSigner(signData, keys); require( signer != msg.sender && isOwner(signer) && signer != address(0), "is" ); (bytes4 method, uint256 id, uint256 validTime, ) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); require( signatureId[id] == false && method == bytes4(keccak256(bytes(functionName))), "sru" ); require(validTime > block.timestamp, "ep"); signatureId[id] = true; _; } function isOwner(address addr) public view returns (bool) { bool _isOwner = false; for (uint256 i = 0; i < owners.length; i++) { if (owners[i] == addr) { _isOwner = true; } } return _isOwner; } constructor() {} function initializeOwners(address[3] memory _owners) public { require( !initialized && _owners[0] != address(0) && _owners[1] != address(0) && _owners[2] != address(0), "ai" ); owners = [_owners[0], _owners[1], _owners[2]]; initialized = true; } function getSigner(bytes calldata _data, bytes calldata keys) public view returns (address) { uint256 chainId; assembly { chainId := chainid() } (uint8 v, bytes32 r, bytes32 s) = abi.decode( keys, (uint8, bytes32, bytes32) ); return ecrecover( toEthSignedMessageHash( keccak256(abi.encodePacked(this, chainId, _data)) ), v, r, s ); } function encodePackedData(bytes calldata _data) public view returns (bytes32) { uint256 chainId; assembly { chainId := chainid() } return keccak256(abi.encodePacked(this, chainId, _data)); } function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { return keccak256( abi.encodePacked("\x19Ethereum Signed Message:\n32", hash) ); } // Set functions // verified function transferOwnership(bytes calldata signData, bytes calldata keys) public validSignOfOwner(signData, keys, "transferOwnership") { (, , , bytes memory params) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); address newOwner = abi.decode(params, (address)); uint256 index; for (uint256 i = 0; i < owners.length; i++) { if (owners[i] == msg.sender) { index = i; } } address oldOwner = owners[index]; owners[index] = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/Manager.sol // Solidity files have to start with this pragma. // It will be used by the Solidity compiler to validate its version. pragma solidity ^0.7.0; contract Manager { address public immutable cardContract; constructor(address _cardContract) { cardContract = _cardContract; } /// modifier functions modifier onlyFromCardContract() { require(msg.sender == cardContract, "oc"); _; } } // File contracts/interfaces/ILevelManager.sol pragma solidity ^0.7.0; interface ILevelManager { function getUserLevel(address userAddr) external view returns (uint256); function getLevel(uint256 _okseAmount) external view returns (uint256); function updateUserLevel( address userAddr, uint256 beforeAmount ) external returns (bool); } // File contracts/libraries/SafeMath.sol pragma solidity ^0.7.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return add(a, b, "SafeMath: addition overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, errorMessage); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File contracts/LimitManager.sol // Solidity files have to start with this pragma. // It will be used by the Solidity compiler to validate its version. pragma solidity ^0.7.0; contract LimitManager is MultiSigOwner, Manager { using SafeMath for uint256; address public immutable levelManager; uint256 public constant MAX_LEVEL = 5; // user's sepnd amount in a day. mapping(address => uint256) public usersSpendAmountDay; // user's spend date // it is needed to calculate how much assets user sold in a day. mapping(address => uint256) public usersSpendTime; // unit is usd amount , so decimal is 18 // specific user's daily spend limit. // this value should be zero in default. // if this value is not 0, then return the value and if 0, return limt for user's level. mapping(address => uint256) public userDailyLimits; uint256[] public DailyLimits; uint256 public timeDiff; event TimeDiffChanged(uint256 timeDiff); event DailyLimitChanged(uint256 index, uint256 _amount); event UserDailyLimitChanged(address userAddr, uint256 usdAmount); constructor(address _cardContract, address _levelManager) Manager(_cardContract) { DailyLimits = [ 250 ether, 500 ether, 2500 ether, 5000 ether, 10000 ether, 50000 ether ]; levelManager = _levelManager; timeDiff = 4 hours; } ////////////////////////// Read functions ///////////////////////////////////////////////////////////// function getUserLimit(address userAddr) public view returns (uint256) { uint256 dailyLimit = userDailyLimits[userAddr]; if (dailyLimit != 0) return dailyLimit; uint256 userLevel = ILevelManager(levelManager).getUserLevel(userAddr); return getDailyLimit(userLevel); } // verified function getDailyLimit(uint256 level) public view returns (uint256) { require(level <= 5, "level > 5"); return DailyLimits[level]; } // decimal of usdAmount is 18 function withinLimits(address userAddr, uint256 usdAmount) public view returns (bool) { if (usdAmount <= getUserLimit(userAddr)) return true; return false; } function getSpendAmountToday(address userAddr) public view returns (uint256) { uint256 currentDate = (block.timestamp.add(timeDiff)).div(1 days); // UTC -> PST time zone 12 PM if (usersSpendTime[userAddr] != currentDate) { return 0; } return usersSpendAmountDay[userAddr]; } ///////////////// CallBack functions from card contract ////////////////////////////////////////////// function updateUserSpendAmount(address userAddr, uint256 usdAmount) public onlyFromCardContract { uint256 currentDate = (block.timestamp.add(timeDiff)).div(1 days); // UTC -> PST time zone 12 PM uint256 totalSpendAmount; if (usersSpendTime[userAddr] != currentDate) { usersSpendTime[userAddr] = currentDate; totalSpendAmount = usdAmount; } else { totalSpendAmount = usersSpendAmountDay[userAddr].add(usdAmount); } require(withinLimits(userAddr, totalSpendAmount), "odl"); usersSpendAmountDay[userAddr] = totalSpendAmount; } //////////////////// Owner functions //////////////////////////////////////////////////////////////// // verified function setDailyLimit(bytes calldata signData, bytes calldata keys) public validSignOfOwner(signData, keys, "setDailyLimit") { (, , , bytes memory params) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); (uint256 index, uint256 _amount) = abi.decode( params, (uint256, uint256) ); require(index <= MAX_LEVEL, "level<=5"); DailyLimits[index] = _amount; emit DailyLimitChanged(index, _amount); } // verified function setUserDailyLimits(bytes calldata signData, bytes calldata keys) public validSignOfOwner(signData, keys, "setUserDailyLimits") { (, , , bytes memory params) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); (address userAddr, uint256 usdAmount) = abi.decode( params, (address, uint256) ); userDailyLimits[userAddr] = usdAmount; emit UserDailyLimitChanged(userAddr, usdAmount); } function setTimeDiff(bytes calldata signData, bytes calldata keys) external validSignOfOwner(signData, keys, "setTimeDiff") { (, , , bytes memory params) = abi.decode( signData, (bytes4, uint256, uint256, bytes) ); uint256 _value = abi.decode(params, (uint256)); timeDiff = _value; emit TimeDiffChanged(timeDiff); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_cardContract","type":"address"},{"internalType":"address","name":"_levelManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"DailyLimitChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"SignValidTimeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timeDiff","type":"uint256"}],"name":"TimeDiffChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"usdAmount","type":"uint256"}],"name":"UserDailyLimitChanged","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"DailyLimits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_LEVEL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cardContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"encodePackedData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"name":"getDailyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"getSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddr","type":"address"}],"name":"getSpendAmountToday","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddr","type":"address"}],"name":"getUserLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[3]","name":"_owners","type":"address[3]"}],"name":"initializeOwners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"levelManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"setDailyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"setTimeDiff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"setUserDailyLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"signatureId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeDiff","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signData","type":"bytes"},{"internalType":"bytes","name":"keys","type":"bytes"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddr","type":"address"},{"internalType":"uint256","name":"usdAmount","type":"uint256"}],"name":"updateUserSpendAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userDailyLimits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usersSpendAmountDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usersSpendTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddr","type":"address"},{"internalType":"uint256","name":"usdAmount","type":"uint256"}],"name":"withinLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060405162001a0138038062001a0183398101604081905262000034916200016b565b606082811b6001600160601b03191660809081526040805160c081018252680d8d726b7177a800008152681b1ae4d6e2ef500000602082015268878678326eac9000009181019190915269010f0cf064dd592000009281019290925269021e19e0c9bab240000090820152690a968163f0a57b40000060a0820152620000be9060069081620000dc565b5060601b6001600160601b03191660a05250613840600755620001a2565b82805482825590600052602060002090810192821562000125579160200282015b828111156200012557825182906001600160501b0316905591602001919060010190620000fd565b506200013392915062000137565b5090565b5b8082111562000133576000815560010162000138565b80516001600160a01b03811681146200016657600080fd5b919050565b600080604083850312156200017e578182fd5b62000189836200014e565b915062000199602084016200014e565b90509250929050565b60805160601c60a05160601c61182b620001d660003980610576528061100b525080610a6c5280610ebe525061182b6000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063693bd2d0116100c3578063c743a0e21161007c578063c743a0e21461029b578063d1f21f4f146102ae578063d7262fc9146102c1578063db83dc0a146102d4578063e7b0b58c146102e7578063e9587e86146102fa5761014d565b8063693bd2d01461024a5780636f9e4f0b1461025257806375e16b17146102655780638b1014c414610278578063a49062d414610280578063b2b9f0ed146102885761014d565b8063343bd79b11610115578063343bd79b146101d8578063360cf54a146101eb57806341e78889146101fe578063431e1c4e1461021157806345e2e5a11461022457806368af81e6146102375761014d565b8063025e7c2714610152578063115d6d791461017b57806311d5cd381461019b5780632a8d950c146101b05780632f54bf6e146101b8575b600080fd5b6101656101603660046114fe565b61030d565b60405161017291906115ee565b60405180910390f35b61018e610189366004611286565b610337565b6040516101729190611626565b6101ae6101a9366004611495565b6103a9565b005b610165610574565b6101cb6101c6366004611286565b610598565b604051610172919061161b565b6101cb6101e63660046112eb565b6105ed565b61018e6101f9366004611286565b610610565b6101ae61020c366004611495565b610622565b61018e61021f3660046114fe565b610807565b6101ae610232366004611495565b610849565b61018e610245366004611455565b610a2f565b610165610a6a565b6101ae610260366004611316565b610a8e565b610165610273366004611495565b610b46565b61018e610bef565b61018e610bf5565b6101cb6102963660046114fe565b610bfa565b61018e6102a93660046114fe565b610c0f565b6101ae6102bc366004611495565b610c30565b61018e6102cf366004611286565b610e8f565b61018e6102e2366004611286565b610ea1565b6101ae6102f53660046112eb565b610eb3565b61018e610308366004611286565b610fcb565b6000818154811061031d57600080fd5b6000918252602090912001546001600160a01b0316905081565b60008061035c62015180610356600754426110a390919063ffffffff16565b906110ec565b6001600160a01b03841660009081526004602052604090205490915081146103885760009150506103a4565b50506001600160a01b0381166000908152600360205260409020545b919050565b838383836040518060400160405280600b81526020016a39b2ba2a34b6b2a234b33360a91b8152506103da33610598565b6103ff5760405162461bcd60e51b81526004016103f6906116e0565b60405180910390fd5b600061040d86868686610b46565b90506001600160a01b038116331480159061042c575061042c81610598565b801561044057506001600160a01b03811615155b61045c5760405162461bcd60e51b81526004016103f690611718565b6000808061046c888a018a61139c565b50600082815260016020526040902054929550909350915060ff161580156104a65750845160208601206001600160e01b03198481169116145b6104c25760405162461bcd60e51b81526004016103f69061178e565b4281116104e15760405162461bcd60e51b81526004016103f6906116fc565b60008281526001602081905260408220805460ff191690911790556105088d8f018f61139c565b93505050506000818060200190518101906105239190611516565b60078190556040519091507f88dac46c4157e9fbc3f7f17aa5d351a50a5c466c076c8b30f6e514fe53dcc7bf9061055b908390611626565b60405180910390a1505050505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080805b6000548110156105e657836001600160a01b0316600082815481106105be57fe5b6000918252602090912001546001600160a01b031614156105de57600191505b60010161059d565b5092915050565b60006105f883610fcb565b82116106065750600161060a565b5060005b92915050565b60056020526000908152604090205481565b8383838360405180604001604052806012815260200171736574557365724461696c794c696d69747360701b81525061065a33610598565b6106765760405162461bcd60e51b81526004016103f6906116e0565b600061068486868686610b46565b90506001600160a01b03811633148015906106a357506106a381610598565b80156106b757506001600160a01b03811615155b6106d35760405162461bcd60e51b81526004016103f690611718565b600080806106e3888a018a61139c565b50600082815260016020526040902054929550909350915060ff1615801561071d5750845160208601206001600160e01b03198481169116145b6107395760405162461bcd60e51b81526004016103f69061178e565b4281116107585760405162461bcd60e51b81526004016103f6906116fc565b60008281526001602081905260408220805460ff1916909117905561077f8d8f018f61139c565b93505050506000808280602001905181019061079b91906112be565b6001600160a01b038216600090815260056020526040908190208290555191935091507ffcb4556904d2d02126266a72662259e3b3614856b04c3bceeb1ddfe90cdf651a906107ed9084908490611602565b60405180910390a150505050505050505050505050505050565b6000600582111561082a5760405162461bcd60e51b81526004016103f6906116a0565b6006828154811061083757fe5b90600052602060002001549050919050565b838383836040518060400160405280600d81526020016c1cd95d11185a5b1e531a5b5a5d609a1b81525061087c33610598565b6108985760405162461bcd60e51b81526004016103f6906116e0565b60006108a686868686610b46565b90506001600160a01b03811633148015906108c557506108c581610598565b80156108d957506001600160a01b03811615155b6108f55760405162461bcd60e51b81526004016103f690611718565b60008080610905888a018a61139c565b50600082815260016020526040902054929550909350915060ff1615801561093f5750845160208601206001600160e01b03198481169116145b61095b5760405162461bcd60e51b81526004016103f69061178e565b42811161097a5760405162461bcd60e51b81526004016103f6906116fc565b60008281526001602081905260408220805460ff191690911790556109a18d8f018f61139c565b9350505050600080828060200190518101906109bd919061152e565b9150915060058211156109e25760405162461bcd60e51b81526004016103f690611734565b80600683815481106109f057fe5b90600052602060002001819055507f070dc0f9e511fdc888935179b3eba0bb274ccb33e0572454d85d32a70219dd6282826040516107ed9291906117ab565b6040516000904690610a4b90309083908790879060200161158a565b6040516020818303038152906040528051906020012091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff16158015610aaa575080516001600160a01b031615155b8015610ac2575060208101516001600160a01b031615155b8015610ada575060408101516001600160a01b031615155b610af65760405162461bcd60e51b81526004016103f690611756565b6040805160608101825282516001600160a01b039081168252602080850151821690830152838301511691810191909152610b359060009060036111c5565b50506002805460ff19166001179055565b600046818080610b5886880188611551565b9250925092506001610b9530868c8c604051602001610b7a949392919061158a565b6040516020818303038152906040528051906020012061112e565b84848460405160008152602001604052604051610bb5949392919061162f565b6020604051602081039080840390855afa158015610bd7573d6000803e3d6000fd5b5050604051601f1901519a9950505050505050505050565b60075481565b600581565b60016020526000908152604090205460ff1681565b60068181548110610c1f57600080fd5b600091825260209091200154905081565b838383836040518060400160405280601181526020017007472616e736665724f776e65727368697607c1b815250610c6733610598565b610c835760405162461bcd60e51b81526004016103f6906116e0565b6000610c9186868686610b46565b90506001600160a01b0381163314801590610cb05750610cb081610598565b8015610cc457506001600160a01b03811615155b610ce05760405162461bcd60e51b81526004016103f690611718565b60008080610cf0888a018a61139c565b50600082815260016020526040902054929550909350915060ff16158015610d2a5750845160208601206001600160e01b03198481169116145b610d465760405162461bcd60e51b81526004016103f69061178e565b428111610d655760405162461bcd60e51b81526004016103f6906116fc565b60008281526001602081905260408220805460ff19169091179055610d8c8d8f018f61139c565b9350505050600081806020019051810190610da791906112a2565b90506000805b600054811015610df557336001600160a01b031660008281548110610dce57fe5b6000918252602090912001546001600160a01b03161415610ded578091505b600101610dad565b506000808281548110610e0457fe5b600091825260208220015481546001600160a01b03909116925084919084908110610e2b57fe5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051858316928416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050505050505050505050505050505050565b60036020526000908152604090205481565b60046020526000908152604090205481565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610efb5760405162461bcd60e51b81526004016103f690611772565b6000610f1962015180610356600754426110a390919063ffffffff16565b6001600160a01b038416600090815260046020526040812054919250908214610f5e57506001600160a01b038316600090815260046020526040902081905581610f84565b6001600160a01b038416600090815260036020526040902054610f8190846110a3565b90505b610f8e84826105ed565b610faa5760405162461bcd60e51b81526004016103f6906116c3565b6001600160a01b039093166000908152600360205260409020929092555050565b6001600160a01b0381166000908152600560205260408120548015610ff15790506103a4565b6040516310c91def60e11b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906321923bde906110409087906004016115ee565b60206040518083038186803b15801561105857600080fd5b505afa15801561106c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110909190611516565b905061109b81610807565b949350505050565b60006110e583836040518060400160405280601b81526020017f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525061115e565b9392505050565b60006110e583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061118e565b60008160405160200161114191906115bd565b604051602081830303815290604052805190602001209050919050565b600083830182858210156111855760405162461bcd60e51b81526004016103f6919061164d565b50949350505050565b600081836111af5760405162461bcd60e51b81526004016103f6919061164d565b5060008385816111bb57fe5b0495945050505050565b82805482825590600052602060002090810192821561121a579160200282015b8281111561121a57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906111e5565b5061122692915061122a565b5090565b5b80821115611226576000815560010161122b565b60008083601f840112611250578182fd5b50813567ffffffffffffffff811115611267578182fd5b60208301915083602082850101111561127f57600080fd5b9250929050565b600060208284031215611297578081fd5b81356110e5816117dd565b6000602082840312156112b3578081fd5b81516110e5816117dd565b600080604083850312156112d0578081fd5b82516112db816117dd565b6020939093015192949293505050565b600080604083850312156112fd578182fd5b8235611308816117dd565b946020939093013593505050565b600060608284031215611327578081fd5b82601f830112611335578081fd5b6040516060810181811067ffffffffffffffff8211171561135257fe5b604052808360608101861015611366578384fd5b835b600381101561139157813561137c816117dd565b83526020928301929190910190600101611368565b509195945050505050565b600080600080608085870312156113b1578182fd5b84356001600160e01b0319811681146113c8578283fd5b9350602085810135935060408601359250606086013567ffffffffffffffff808211156113f3578384fd5b818801915088601f830112611406578384fd5b81358181111561141257fe5b611424601f8201601f191685016117b9565b91508082528984828501011115611439578485fd5b8084840185840137810190920192909252939692955090935050565b60008060208385031215611467578182fd5b823567ffffffffffffffff81111561147d578283fd5b6114898582860161123f565b90969095509350505050565b600080600080604085870312156114aa578384fd5b843567ffffffffffffffff808211156114c1578586fd5b6114cd8883890161123f565b909650945060208701359150808211156114e5578384fd5b506114f28782880161123f565b95989497509550505050565b60006020828403121561150f578081fd5b5035919050565b600060208284031215611527578081fd5b5051919050565b60008060408385031215611540578182fd5b505080516020909101519092909150565b600080600060608486031215611565578283fd5b833560ff81168114611575578384fd5b95602085013595506040909401359392505050565b60006bffffffffffffffffffffffff198660601b1682528460148301528284603484013791016034019081529392505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b818110156116795785810183015185820160400152820161165d565b8181111561168a5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600990820152686c6576656c203e203560b81b604082015260600190565b6020808252600390820152621bd91b60ea1b604082015260600190565b60208082526002908201526137b760f11b604082015260600190565b602080825260029082015261065760f41b604082015260600190565b602080825260029082015261697360f01b604082015260600190565b6020808252600890820152676c6576656c3c3d3560c01b604082015260600190565b602080825260029082015261616960f01b604082015260600190565b6020808252600290820152616f6360f01b604082015260600190565b60208082526003908201526273727560e81b604082015260600190565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156117d557fe5b604052919050565b6001600160a01b03811681146117f257600080fd5b5056fea264697066735822122082bc77c6707c42df7480f258d16b95782ac52fbad3b05aa456cc8d32453c83c064736f6c6343000706003300000000000000000000000008b1fc2b48e5871354af138b7909e9d1a04a89dd00000000000000000000000022cae3f82c6b8aaa2457175fd6a788aa2940bee6
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c8063693bd2d0116100c3578063c743a0e21161007c578063c743a0e21461029b578063d1f21f4f146102ae578063d7262fc9146102c1578063db83dc0a146102d4578063e7b0b58c146102e7578063e9587e86146102fa5761014d565b8063693bd2d01461024a5780636f9e4f0b1461025257806375e16b17146102655780638b1014c414610278578063a49062d414610280578063b2b9f0ed146102885761014d565b8063343bd79b11610115578063343bd79b146101d8578063360cf54a146101eb57806341e78889146101fe578063431e1c4e1461021157806345e2e5a11461022457806368af81e6146102375761014d565b8063025e7c2714610152578063115d6d791461017b57806311d5cd381461019b5780632a8d950c146101b05780632f54bf6e146101b8575b600080fd5b6101656101603660046114fe565b61030d565b60405161017291906115ee565b60405180910390f35b61018e610189366004611286565b610337565b6040516101729190611626565b6101ae6101a9366004611495565b6103a9565b005b610165610574565b6101cb6101c6366004611286565b610598565b604051610172919061161b565b6101cb6101e63660046112eb565b6105ed565b61018e6101f9366004611286565b610610565b6101ae61020c366004611495565b610622565b61018e61021f3660046114fe565b610807565b6101ae610232366004611495565b610849565b61018e610245366004611455565b610a2f565b610165610a6a565b6101ae610260366004611316565b610a8e565b610165610273366004611495565b610b46565b61018e610bef565b61018e610bf5565b6101cb6102963660046114fe565b610bfa565b61018e6102a93660046114fe565b610c0f565b6101ae6102bc366004611495565b610c30565b61018e6102cf366004611286565b610e8f565b61018e6102e2366004611286565b610ea1565b6101ae6102f53660046112eb565b610eb3565b61018e610308366004611286565b610fcb565b6000818154811061031d57600080fd5b6000918252602090912001546001600160a01b0316905081565b60008061035c62015180610356600754426110a390919063ffffffff16565b906110ec565b6001600160a01b03841660009081526004602052604090205490915081146103885760009150506103a4565b50506001600160a01b0381166000908152600360205260409020545b919050565b838383836040518060400160405280600b81526020016a39b2ba2a34b6b2a234b33360a91b8152506103da33610598565b6103ff5760405162461bcd60e51b81526004016103f6906116e0565b60405180910390fd5b600061040d86868686610b46565b90506001600160a01b038116331480159061042c575061042c81610598565b801561044057506001600160a01b03811615155b61045c5760405162461bcd60e51b81526004016103f690611718565b6000808061046c888a018a61139c565b50600082815260016020526040902054929550909350915060ff161580156104a65750845160208601206001600160e01b03198481169116145b6104c25760405162461bcd60e51b81526004016103f69061178e565b4281116104e15760405162461bcd60e51b81526004016103f6906116fc565b60008281526001602081905260408220805460ff191690911790556105088d8f018f61139c565b93505050506000818060200190518101906105239190611516565b60078190556040519091507f88dac46c4157e9fbc3f7f17aa5d351a50a5c466c076c8b30f6e514fe53dcc7bf9061055b908390611626565b60405180910390a1505050505050505050505050505050565b7f00000000000000000000000022cae3f82c6b8aaa2457175fd6a788aa2940bee681565b600080805b6000548110156105e657836001600160a01b0316600082815481106105be57fe5b6000918252602090912001546001600160a01b031614156105de57600191505b60010161059d565b5092915050565b60006105f883610fcb565b82116106065750600161060a565b5060005b92915050565b60056020526000908152604090205481565b8383838360405180604001604052806012815260200171736574557365724461696c794c696d69747360701b81525061065a33610598565b6106765760405162461bcd60e51b81526004016103f6906116e0565b600061068486868686610b46565b90506001600160a01b03811633148015906106a357506106a381610598565b80156106b757506001600160a01b03811615155b6106d35760405162461bcd60e51b81526004016103f690611718565b600080806106e3888a018a61139c565b50600082815260016020526040902054929550909350915060ff1615801561071d5750845160208601206001600160e01b03198481169116145b6107395760405162461bcd60e51b81526004016103f69061178e565b4281116107585760405162461bcd60e51b81526004016103f6906116fc565b60008281526001602081905260408220805460ff1916909117905561077f8d8f018f61139c565b93505050506000808280602001905181019061079b91906112be565b6001600160a01b038216600090815260056020526040908190208290555191935091507ffcb4556904d2d02126266a72662259e3b3614856b04c3bceeb1ddfe90cdf651a906107ed9084908490611602565b60405180910390a150505050505050505050505050505050565b6000600582111561082a5760405162461bcd60e51b81526004016103f6906116a0565b6006828154811061083757fe5b90600052602060002001549050919050565b838383836040518060400160405280600d81526020016c1cd95d11185a5b1e531a5b5a5d609a1b81525061087c33610598565b6108985760405162461bcd60e51b81526004016103f6906116e0565b60006108a686868686610b46565b90506001600160a01b03811633148015906108c557506108c581610598565b80156108d957506001600160a01b03811615155b6108f55760405162461bcd60e51b81526004016103f690611718565b60008080610905888a018a61139c565b50600082815260016020526040902054929550909350915060ff1615801561093f5750845160208601206001600160e01b03198481169116145b61095b5760405162461bcd60e51b81526004016103f69061178e565b42811161097a5760405162461bcd60e51b81526004016103f6906116fc565b60008281526001602081905260408220805460ff191690911790556109a18d8f018f61139c565b9350505050600080828060200190518101906109bd919061152e565b9150915060058211156109e25760405162461bcd60e51b81526004016103f690611734565b80600683815481106109f057fe5b90600052602060002001819055507f070dc0f9e511fdc888935179b3eba0bb274ccb33e0572454d85d32a70219dd6282826040516107ed9291906117ab565b6040516000904690610a4b90309083908790879060200161158a565b6040516020818303038152906040528051906020012091505092915050565b7f00000000000000000000000008b1fc2b48e5871354af138b7909e9d1a04a89dd81565b60025460ff16158015610aaa575080516001600160a01b031615155b8015610ac2575060208101516001600160a01b031615155b8015610ada575060408101516001600160a01b031615155b610af65760405162461bcd60e51b81526004016103f690611756565b6040805160608101825282516001600160a01b039081168252602080850151821690830152838301511691810191909152610b359060009060036111c5565b50506002805460ff19166001179055565b600046818080610b5886880188611551565b9250925092506001610b9530868c8c604051602001610b7a949392919061158a565b6040516020818303038152906040528051906020012061112e565b84848460405160008152602001604052604051610bb5949392919061162f565b6020604051602081039080840390855afa158015610bd7573d6000803e3d6000fd5b5050604051601f1901519a9950505050505050505050565b60075481565b600581565b60016020526000908152604090205460ff1681565b60068181548110610c1f57600080fd5b600091825260209091200154905081565b838383836040518060400160405280601181526020017007472616e736665724f776e65727368697607c1b815250610c6733610598565b610c835760405162461bcd60e51b81526004016103f6906116e0565b6000610c9186868686610b46565b90506001600160a01b0381163314801590610cb05750610cb081610598565b8015610cc457506001600160a01b03811615155b610ce05760405162461bcd60e51b81526004016103f690611718565b60008080610cf0888a018a61139c565b50600082815260016020526040902054929550909350915060ff16158015610d2a5750845160208601206001600160e01b03198481169116145b610d465760405162461bcd60e51b81526004016103f69061178e565b428111610d655760405162461bcd60e51b81526004016103f6906116fc565b60008281526001602081905260408220805460ff19169091179055610d8c8d8f018f61139c565b9350505050600081806020019051810190610da791906112a2565b90506000805b600054811015610df557336001600160a01b031660008281548110610dce57fe5b6000918252602090912001546001600160a01b03161415610ded578091505b600101610dad565b506000808281548110610e0457fe5b600091825260208220015481546001600160a01b03909116925084919084908110610e2b57fe5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051858316928416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050505050505050505050505050505050565b60036020526000908152604090205481565b60046020526000908152604090205481565b336001600160a01b037f00000000000000000000000008b1fc2b48e5871354af138b7909e9d1a04a89dd1614610efb5760405162461bcd60e51b81526004016103f690611772565b6000610f1962015180610356600754426110a390919063ffffffff16565b6001600160a01b038416600090815260046020526040812054919250908214610f5e57506001600160a01b038316600090815260046020526040902081905581610f84565b6001600160a01b038416600090815260036020526040902054610f8190846110a3565b90505b610f8e84826105ed565b610faa5760405162461bcd60e51b81526004016103f6906116c3565b6001600160a01b039093166000908152600360205260409020929092555050565b6001600160a01b0381166000908152600560205260408120548015610ff15790506103a4565b6040516310c91def60e11b81526000906001600160a01b037f00000000000000000000000022cae3f82c6b8aaa2457175fd6a788aa2940bee616906321923bde906110409087906004016115ee565b60206040518083038186803b15801561105857600080fd5b505afa15801561106c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110909190611516565b905061109b81610807565b949350505050565b60006110e583836040518060400160405280601b81526020017f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525061115e565b9392505050565b60006110e583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061118e565b60008160405160200161114191906115bd565b604051602081830303815290604052805190602001209050919050565b600083830182858210156111855760405162461bcd60e51b81526004016103f6919061164d565b50949350505050565b600081836111af5760405162461bcd60e51b81526004016103f6919061164d565b5060008385816111bb57fe5b0495945050505050565b82805482825590600052602060002090810192821561121a579160200282015b8281111561121a57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906111e5565b5061122692915061122a565b5090565b5b80821115611226576000815560010161122b565b60008083601f840112611250578182fd5b50813567ffffffffffffffff811115611267578182fd5b60208301915083602082850101111561127f57600080fd5b9250929050565b600060208284031215611297578081fd5b81356110e5816117dd565b6000602082840312156112b3578081fd5b81516110e5816117dd565b600080604083850312156112d0578081fd5b82516112db816117dd565b6020939093015192949293505050565b600080604083850312156112fd578182fd5b8235611308816117dd565b946020939093013593505050565b600060608284031215611327578081fd5b82601f830112611335578081fd5b6040516060810181811067ffffffffffffffff8211171561135257fe5b604052808360608101861015611366578384fd5b835b600381101561139157813561137c816117dd565b83526020928301929190910190600101611368565b509195945050505050565b600080600080608085870312156113b1578182fd5b84356001600160e01b0319811681146113c8578283fd5b9350602085810135935060408601359250606086013567ffffffffffffffff808211156113f3578384fd5b818801915088601f830112611406578384fd5b81358181111561141257fe5b611424601f8201601f191685016117b9565b91508082528984828501011115611439578485fd5b8084840185840137810190920192909252939692955090935050565b60008060208385031215611467578182fd5b823567ffffffffffffffff81111561147d578283fd5b6114898582860161123f565b90969095509350505050565b600080600080604085870312156114aa578384fd5b843567ffffffffffffffff808211156114c1578586fd5b6114cd8883890161123f565b909650945060208701359150808211156114e5578384fd5b506114f28782880161123f565b95989497509550505050565b60006020828403121561150f578081fd5b5035919050565b600060208284031215611527578081fd5b5051919050565b60008060408385031215611540578182fd5b505080516020909101519092909150565b600080600060608486031215611565578283fd5b833560ff81168114611575578384fd5b95602085013595506040909401359392505050565b60006bffffffffffffffffffffffff198660601b1682528460148301528284603484013791016034019081529392505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b818110156116795785810183015185820160400152820161165d565b8181111561168a5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600990820152686c6576656c203e203560b81b604082015260600190565b6020808252600390820152621bd91b60ea1b604082015260600190565b60208082526002908201526137b760f11b604082015260600190565b602080825260029082015261065760f41b604082015260600190565b602080825260029082015261697360f01b604082015260600190565b6020808252600890820152676c6576656c3c3d3560c01b604082015260600190565b602080825260029082015261616960f01b604082015260600190565b6020808252600290820152616f6360f01b604082015260600190565b60208082526003908201526273727560e81b604082015260600190565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156117d557fe5b604052919050565b6001600160a01b03811681146117f257600080fd5b5056fea264697066735822122082bc77c6707c42df7480f258d16b95782ac52fbad3b05aa456cc8d32453c83c064736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000008b1fc2b48e5871354af138b7909e9d1a04a89dd00000000000000000000000022cae3f82c6b8aaa2457175fd6a788aa2940bee6
-----Decoded View---------------
Arg [0] : _cardContract (address): 0x08B1fC2B48e5871354AF138B7909E9d1a04A89DD
Arg [1] : _levelManager (address): 0x22CAe3f82c6b8AAA2457175fD6A788aA2940bEe6
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000008b1fc2b48e5871354af138b7909e9d1a04a89dd
Arg [1] : 00000000000000000000000022cae3f82c6b8aaa2457175fd6a788aa2940bee6
Deployed Bytecode Sourcemap
10410:4979:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;243:23;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12593:360;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14972:414::-;;;;;;:::i;:::-;;:::i;:::-;;10498:37;;;:::i;1318:277::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12373:212::-;;;;;;:::i;:::-;;:::i;11066:50::-;;;;;;:::i;:::-;;:::i;14432:532::-;;;;;;:::i;:::-;;:::i;12175:155::-;;;;;;:::i;:::-;;:::i;13858:549::-;;;;;;:::i;:::-;;:::i;2601:276::-;;;;;;:::i;:::-;;:::i;4064:37::-;;;:::i;1627:363::-;;;;;;:::i;:::-;;:::i;1998:595::-;;;;;;:::i;:::-;;:::i;11158:23::-;;;:::i;10542:37::-;;;:::i;273:43::-;;;;;;:::i;:::-;;:::i;11123:28::-;;;;;;:::i;:::-;;:::i;3182:668::-;;;;;;:::i;:::-;;:::i;10624:54::-;;;;;;:::i;:::-;;:::i;10781:49::-;;;;;;:::i;:::-;;:::i;13069:657::-;;;;;;:::i;:::-;;:::i;11843:307::-;;;;;;:::i;:::-;;:::i;243:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;243:23:0;;-1:-1:-1;243:23:0;:::o;12593:360::-;12688:7;12713:19;12735:43;12771:6;12736:29;12756:8;;12736:15;:19;;:29;;;;:::i;:::-;12735:35;;:43::i;:::-;-1:-1:-1;;;;;12823:24:0;;;;;;:14;:24;;;;;;12713:65;;-1:-1:-1;12823:39:0;;12819:80;;12886:1;12879:8;;;;;12819:80;-1:-1:-1;;;;;;;12916:29:0;;;;;;:19;:29;;;;;;12593:360;;;;:::o;14972:414::-;15083:8;;15093:4;;535:775;;;;;;;;;;;;;-1:-1:-1;;;535:775:0;;;688:19;696:10;688:7;:19::i;:::-;680:34;;;;-1:-1:-1;;;680:34:0;;;;;;;:::i;:::-;;;;;;;;;725:14;742:25;752:8;;762:4;;742:9;:25::i;:::-;725:42;-1:-1:-1;;;;;;800:20:0;;810:10;800:20;;;;:39;;;824:15;832:6;824:7;:15::i;:::-;800:63;;;;-1:-1:-1;;;;;;843:20:0;;;;800:63;778:115;;;;-1:-1:-1;;;778:115:0;;;;;;;:::i;:::-;905:13;;;955:92;;;;980:8;955:92;:::i;:::-;-1:-1:-1;1080:15:0;;;;:11;:15;;;;;;904:143;;-1:-1:-1;904:143:0;;-1:-1:-1;904:143:0;-1:-1:-1;1080:15:0;;:24;;;:93;;-1:-1:-1;1142:30:0;;;;;;-1:-1:-1;;;;;;1125:48:0;;;;;;1080:93;1058:146;;;;-1:-1:-1;;;1058:146:0;;;;;;;:::i;:::-;1235:15;1223:9;:27;1215:42;;;;-1:-1:-1;;;1215:42:0;;;;;;;:::i;:::-;1268:15;;;;1286:4;1268:15;;;;;;;:22;;-1:-1:-1;;1268:22:0;;;;;;15160:92:::1;::::0;;::::1;15185:8:::0;15160:92:::1;:::i;:::-;15130:122;;;;;15263:14;15291:6;15280:29;;;;;;;;;;;;:::i;:::-;15320:8;:17:::0;;;15353:25:::1;::::0;15263:46;;-1:-1:-1;15353:25:0::1;::::0;::::1;::::0;15263:46;;15353:25:::1;:::i;:::-;;;;;;;;1301:1;;14972:414:::0;;;;;;;;;;;;;:::o;10498:37::-;;;:::o;1318:277::-;1370:4;;;1419:143;1443:6;:13;1439:17;;1419:143;;;1495:4;-1:-1:-1;;;;;1482:17:0;:6;1489:1;1482:9;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1482:9:0;:17;1478:73;;;1531:4;1520:15;;1478:73;1458:3;;1419:143;;;-1:-1:-1;1579:8:0;1318:277;-1:-1:-1;;1318:277:0:o;12373:212::-;12480:4;12519:22;12532:8;12519:12;:22::i;:::-;12506:9;:35;12502:52;;-1:-1:-1;12550:4:0;12543:11;;12502:52;-1:-1:-1;12572:5:0;12373:212;;;;;:::o;11066:50::-;;;;;;;;;;;;;:::o;14432:532::-;14548:8;;14558:4;;535:775;;;;;;;;;;;;;-1:-1:-1;;;535:775:0;;;688:19;696:10;688:7;:19::i;:::-;680:34;;;;-1:-1:-1;;;680:34:0;;;;;;;:::i;:::-;725:14;742:25;752:8;;762:4;;742:9;:25::i;:::-;725:42;-1:-1:-1;;;;;;800:20:0;;810:10;800:20;;;;:39;;;824:15;832:6;824:7;:15::i;:::-;800:63;;;;-1:-1:-1;;;;;;843:20:0;;;;800:63;778:115;;;;-1:-1:-1;;;778:115:0;;;;;;;:::i;:::-;905:13;;;955:92;;;;980:8;955:92;:::i;:::-;-1:-1:-1;1080:15:0;;;;:11;:15;;;;;;904:143;;-1:-1:-1;904:143:0;;-1:-1:-1;904:143:0;-1:-1:-1;1080:15:0;;:24;;;:93;;-1:-1:-1;1142:30:0;;;;;;-1:-1:-1;;;;;;1125:48:0;;;;;;1080:93;1058:146;;;;-1:-1:-1;;;1058:146:0;;;;;;;:::i;:::-;1235:15;1223:9;:27;1215:42;;;;-1:-1:-1;;;1215:42:0;;;;;;;:::i;:::-;1268:15;;;;1286:4;1268:15;;;;;;;:22;;-1:-1:-1;;1268:22:0;;;;;;14632:92:::1;::::0;;::::1;14657:8:::0;14632:92:::1;:::i;:::-;14602:122;;;;;14736:16;14754:17:::0;14800:6:::1;14775:75;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14861:25:0;::::1;;::::0;;;:15:::1;:25;::::0;;;;;;:37;;;14914:42;14735:115;;-1:-1:-1;14735:115:0;-1:-1:-1;14914:42:0::1;::::0;::::1;::::0;14735:115;;;;14914:42:::1;:::i;:::-;;;;;;;;1301:1;;;14432:532:::0;;;;;;;;;;;;;:::o;12175:155::-;12234:7;12271:1;12262:5;:10;;12254:32;;;;-1:-1:-1;;;12254:32:0;;;;;;;:::i;:::-;12304:11;12316:5;12304:18;;;;;;;;;;;;;;;;12297:25;;12175:155;;;:::o;13858:549::-;13969:8;;13979:4;;535:775;;;;;;;;;;;;;-1:-1:-1;;;535:775:0;;;688:19;696:10;688:7;:19::i;:::-;680:34;;;;-1:-1:-1;;;680:34:0;;;;;;;:::i;:::-;725:14;742:25;752:8;;762:4;;742:9;:25::i;:::-;725:42;-1:-1:-1;;;;;;800:20:0;;810:10;800:20;;;;:39;;;824:15;832:6;824:7;:15::i;:::-;800:63;;;;-1:-1:-1;;;;;;843:20:0;;;;800:63;778:115;;;;-1:-1:-1;;;778:115:0;;;;;;;:::i;:::-;905:13;;;955:92;;;;980:8;955:92;:::i;:::-;-1:-1:-1;1080:15:0;;;;:11;:15;;;;;;904:143;;-1:-1:-1;904:143:0;;-1:-1:-1;904:143:0;-1:-1:-1;1080:15:0;;:24;;;:93;;-1:-1:-1;1142:30:0;;;;;;-1:-1:-1;;;;;;1125:48:0;;;;;;1080:93;1058:146;;;;-1:-1:-1;;;1058:146:0;;;;;;;:::i;:::-;1235:15;1223:9;:27;1215:42;;;;-1:-1:-1;;;1215:42:0;;;;;;;:::i;:::-;1268:15;;;;1286:4;1268:15;;;;;;;:22;;-1:-1:-1;;1268:22:0;;;;;;14048:92:::1;::::0;;::::1;14073:8:::0;14048:92:::1;:::i;:::-;14018:122;;;;;14152:13;14167:15:::0;14211:6:::1;14186:75;;;;;;;;;;;;:::i;:::-;14151:110;;;;10578:1;14280:5;:18;;14272:39;;;;-1:-1:-1::0;;;14272:39:0::1;;;;;;;:::i;:::-;14343:7;14322:11;14334:5;14322:18;;;;;;;;;;;;;;;:28;;;;14366:33;14384:5;14391:7;14366:33;;;;;;;:::i;2601:276::-:0;2830:38;;2697:7;;2783:9;;2830:38;;2847:4;;2783:9;;2862:5;;;;2830:38;;;:::i;:::-;;;;;;;;;;;;;2820:49;;;;;;2813:56;;;2601:276;;;;:::o;4064:37::-;;;:::o;1627:363::-;1721:11;;;;1720:12;:57;;;;-1:-1:-1;1753:10:0;;-1:-1:-1;;;;;1753:24:0;;;1720:57;:102;;;;-1:-1:-1;1798:10:0;;;;-1:-1:-1;;;;;1798:24:0;;;1720:102;:147;;;;-1:-1:-1;1843:10:0;;;;-1:-1:-1;;;;;1843:24:0;;;1720:147;1698:199;;;;-1:-1:-1;;;1698:199:0;;;;;;;:::i;:::-;1908:45;;;;;;;;1918:10;;-1:-1:-1;;;;;1908:45:0;;;;;1918:10;1930;;;;1908:45;;;;;;1942:10;;;;1908:45;;;;;;;;;;-1:-1:-1;;1908:45:0;;:::i;:::-;-1:-1:-1;;1964:11:0;:18;;-1:-1:-1;;1964:18:0;1978:4;1964:18;;;1627:363::o;1998:595::-;2108:7;2194:9;2108:7;;;2258:80;;;;2283:4;2258:80;:::i;:::-;2224:114;;;;;;2369:216;2397:113;2469:4;2475:7;2484:5;;2452:38;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2442:49;;;;;;2397:22;:113::i;:::-;2529:1;2549;2569;2369:216;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2369:216:0;;-1:-1:-1;;2369:216:0;;;1998:595;-1:-1:-1;;;;;;;;;;1998:595:0:o;11158:23::-;;;;:::o;10542:37::-;10578:1;10542:37;:::o;273:43::-;;;;;;;;;;;;;;;:::o;11123:28::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11123:28:0;:::o;3182:668::-;3297:8;;3307:4;;535:775;;;;;;;;;;;;;-1:-1:-1;;;535:775:0;;;688:19;696:10;688:7;:19::i;:::-;680:34;;;;-1:-1:-1;;;680:34:0;;;;;;;:::i;:::-;725:14;742:25;752:8;;762:4;;742:9;:25::i;:::-;725:42;-1:-1:-1;;;;;;800:20:0;;810:10;800:20;;;;:39;;;824:15;832:6;824:7;:15::i;:::-;800:63;;;;-1:-1:-1;;;;;;843:20:0;;;;800:63;778:115;;;;-1:-1:-1;;;778:115:0;;;;;;;:::i;:::-;905:13;;;955:92;;;;980:8;955:92;:::i;:::-;-1:-1:-1;1080:15:0;;;;:11;:15;;;;;;904:143;;-1:-1:-1;904:143:0;;-1:-1:-1;904:143:0;-1:-1:-1;1080:15:0;;:24;;;:93;;-1:-1:-1;1142:30:0;;;;;;-1:-1:-1;;;;;;1125:48:0;;;;;;1080:93;1058:146;;;;-1:-1:-1;;;1058:146:0;;;;;;;:::i;:::-;1235:15;1223:9;:27;1215:42;;;;-1:-1:-1;;;1215:42:0;;;;;;;:::i;:::-;1268:15;;;;1286:4;1268:15;;;;;;;:22;;-1:-1:-1;;1268:22:0;;;;;;3380:92:::1;::::0;;::::1;3405:8:::0;3380:92:::1;:::i;:::-;3350:122;;;;;3483:16;3513:6;3502:29;;;;;;;;;;;;:::i;:::-;3483:48:::0;-1:-1:-1;3542:13:0::1;::::0;3566:143:::1;3590:6;:13:::0;3586:17;::::1;3566:143;;;3642:10;-1:-1:-1::0;;;;;3629:23:0::1;:6;3636:1;3629:9;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;3629:9:0::1;:23;3625:73;;;3681:1;3673:9;;3625:73;3605:3;;3566:143;;;;3719:16;3738:6:::0;3745:5:::1;3738:13;;;;;;;;;::::0;;;::::1;::::0;;::::1;::::0;3762;;-1:-1:-1;;;;;3738:13:0;;::::1;::::0;-1:-1:-1;3778:8:0;;3738:13;3769:5;;3762:13;::::1;;;;;;::::0;;;::::1;::::0;;::::1;:24:::0;;-1:-1:-1;;;;;;3762:24:0::1;-1:-1:-1::0;;;;;3762:24:0;;::::1;;::::0;;3802:40:::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;1301:1;;;;3182:668:::0;;;;;;;;;;;;;:::o;10624:54::-;;;;;;;;;;;;;:::o;10781:49::-;;;;;;;;;;;;;:::o;13069:657::-;4279:10;-1:-1:-1;;;;;4293:12:0;4279:26;;4271:41;;;;-1:-1:-1;;;4271:41:0;;;;;;;:::i;:::-;13199:19:::1;13221:43;13257:6;13222:29;13242:8;;13222:15;:19;;:29;;;;:::i;13221:43::-;-1:-1:-1::0;;;;;13346:24:0;::::1;13305;13346::::0;;;:14:::1;:24;::::0;;;;;13199:65;;-1:-1:-1;13305:24:0;13346:39;::::1;13342:249;;-1:-1:-1::0;;;;;;13402:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;:38;;;13474:9;13342:249:::1;;;-1:-1:-1::0;;;;;13535:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;;:44:::1;::::0;13569:9;13535:33:::1;:44::i;:::-;13516:63;;13342:249;13611:40;13624:8;13634:16;13611:12;:40::i;:::-;13603:56;;;;-1:-1:-1::0;;;13603:56:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13670:29:0;;::::1;;::::0;;;:19:::1;:29;::::0;;;;:48;;;;-1:-1:-1;;13069:657:0:o;11843:307::-;-1:-1:-1;;;;;11945:25:0;;11904:7;11945:25;;;:15;:25;;;;;;11985:15;;11981:38;;12009:10;-1:-1:-1;12002:17:0;;11981:38;12050:50;;-1:-1:-1;;;12050:50:0;;12030:17;;-1:-1:-1;;;;;12064:12:0;12050:40;;;;:50;;12091:8;;12050:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12030:70;;12118:24;12132:9;12118:13;:24::i;:::-;12111:31;11843:307;-1:-1:-1;;;;11843:307:0:o;5614:127::-;5672:7;5695:40;5699:1;5702;5695:40;;;;;;;;;;;;;;;;;:3;:40::i;:::-;5688:47;5614:127;-1:-1:-1;;;5614:127:0:o;8138:126::-;8196:7;8219:39;8223:1;8226;8219:39;;;;;;;;;;;;;;;;;:3;:39::i;2885:250::-;2981:7;3107:4;3054:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;3026:101;;;;;;3006:121;;2885:250;;;:::o;6016:178::-;6102:7;6130:5;;;6158:12;6150:6;;;;6142:29;;;;-1:-1:-1;;;6142:29:0;;;;;;;;:::i;:::-;-1:-1:-1;6187:1:0;6016:178;-1:-1:-1;;;;6016:178:0:o;8728:323::-;8814:7;8908:12;8901:5;8893:28;;;;-1:-1:-1;;;8893:28:0;;;;;;;;:::i;:::-;;8928:9;8944:1;8940;:5;;;;;;;8728:323;-1:-1:-1;;;;;8728:323:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:377:1;;;131:3;124:4;116:6;112:17;108:27;98:2;;156:8;146;139:26;98:2;-1:-1:-1;186:20:1;;229:18;218:30;;215:2;;;268:8;258;251:26;215:2;312:4;304:6;300:17;288:29;;364:3;357:4;348:6;340;336:19;332:30;329:39;326:2;;;381:1;378;371:12;326:2;88:303;;;;;:::o;396:259::-;;508:2;496:9;487:7;483:23;479:32;476:2;;;529:6;521;514:22;476:2;573:9;560:23;592:33;619:5;592:33;:::i;660:271::-;;791:2;779:9;770:7;766:23;762:32;759:2;;;812:6;804;797:22;759:2;849:9;843:16;868:33;895:5;868:33;:::i;936:332::-;;;1084:2;1072:9;1063:7;1059:23;1055:32;1052:2;;;1105:6;1097;1090:22;1052:2;1142:9;1136:16;1161:33;1188:5;1161:33;:::i;:::-;1258:2;1243:18;;;;1237:25;1213:5;;1237:25;;-1:-1:-1;;;1042:226:1:o;1273:327::-;;;1402:2;1390:9;1381:7;1377:23;1373:32;1370:2;;;1423:6;1415;1408:22;1370:2;1467:9;1454:23;1486:33;1513:5;1486:33;:::i;:::-;1538:5;1590:2;1575:18;;;;1562:32;;-1:-1:-1;;;1360:240:1:o;1605:897::-;;1740:2;1728:9;1719:7;1715:23;1711:32;1708:2;;;1761:6;1753;1746:22;1708:2;1815:7;1808:4;1797:9;1793:20;1789:34;1779:2;;1842:6;1834;1827:22;1779:2;1880;1874:9;1922:2;1914:6;1910:15;1991:6;1979:10;1976:22;1955:18;1943:10;1940:34;1937:62;1934:2;;;2002:9;1934:2;2029;2022:22;2064:6;2090:9;2129:2;2114:18;;2111:31;-1:-1:-1;2108:2:1;;;2160:6;2152;2145:22;2108:2;2187:6;2202:269;2216:4;2213:1;2210:11;2202:269;;;2289:3;2276:17;2306:33;2333:5;2306:33;:::i;:::-;2352:18;;2393:4;2417:12;;;;2449;;;;;2236:1;2229:9;2202:269;;;-1:-1:-1;2490:6:1;;1698:804;-1:-1:-1;;;;;1698:804:1:o;2507:1119::-;;;;;2678:3;2666:9;2657:7;2653:23;2649:33;2646:2;;;2700:6;2692;2685:22;2646:2;2731:23;;-1:-1:-1;;;;;;2783:32:1;;2773:43;;2763:2;;2835:6;2827;2820:22;2763:2;2863:5;-1:-1:-1;2887:2:1;2921:18;;;2908:32;;-1:-1:-1;2987:2:1;2972:18;;2959:32;;-1:-1:-1;3042:2:1;3027:18;;3014:32;3065:18;3095:14;;;3092:2;;;3127:6;3119;3112:22;3092:2;3170:6;3159:9;3155:22;3145:32;;3215:7;3208:4;3204:2;3200:13;3196:27;3186:2;;3242:6;3234;3227:22;3186:2;3283;3270:16;3305:2;3301;3298:10;3295:2;;;3311:9;3295:2;3344:52;3386:2;3367:13;;-1:-1:-1;;3363:27:1;3359:36;;3344:52;:::i;:::-;3331:65;;3419:2;3412:5;3405:17;3459:7;3454:2;3449;3445;3441:11;3437:20;3434:33;3431:2;;;3485:6;3477;3470:22;3431:2;3545;3540;3536;3532:11;3527:2;3520:5;3516:14;3503:45;3568:14;;3564:23;;;3557:39;;;;2636:990;;;;-1:-1:-1;2636:990:1;;-1:-1:-1;;2636:990:1:o;3631:431::-;;;3762:2;3750:9;3741:7;3737:23;3733:32;3730:2;;;3783:6;3775;3768:22;3730:2;3828:9;3815:23;3861:18;3853:6;3850:30;3847:2;;;3898:6;3890;3883:22;3847:2;3942:60;3994:7;3985:6;3974:9;3970:22;3942:60;:::i;:::-;4021:8;;3916:86;;-1:-1:-1;3720:342:1;-1:-1:-1;;;;3720:342:1:o;4067:751::-;;;;;4234:2;4222:9;4213:7;4209:23;4205:32;4202:2;;;4255:6;4247;4240:22;4202:2;4300:9;4287:23;4329:18;4370:2;4362:6;4359:14;4356:2;;;4391:6;4383;4376:22;4356:2;4435:60;4487:7;4478:6;4467:9;4463:22;4435:60;:::i;:::-;4514:8;;-1:-1:-1;4409:86:1;-1:-1:-1;4602:2:1;4587:18;;4574:32;;-1:-1:-1;4618:16:1;;;4615:2;;;4652:6;4644;4637:22;4615:2;;4696:62;4750:7;4739:8;4728:9;4724:24;4696:62;:::i;:::-;4192:626;;;;-1:-1:-1;4777:8:1;-1:-1:-1;;;;4192:626:1:o;4823:190::-;;4935:2;4923:9;4914:7;4910:23;4906:32;4903:2;;;4956:6;4948;4941:22;4903:2;-1:-1:-1;4984:23:1;;4893:120;-1:-1:-1;4893:120:1:o;5018:194::-;;5141:2;5129:9;5120:7;5116:23;5112:32;5109:2;;;5162:6;5154;5147:22;5109:2;-1:-1:-1;5190:16:1;;5099:113;-1:-1:-1;5099:113:1:o;5217:255::-;;;5357:2;5345:9;5336:7;5332:23;5328:32;5325:2;;;5378:6;5370;5363:22;5325:2;-1:-1:-1;;5406:16:1;;5462:2;5447:18;;;5441:25;5406:16;;5441:25;;-1:-1:-1;5315:157:1:o;5477:425::-;;;;5621:2;5609:9;5600:7;5596:23;5592:32;5589:2;;;5642:6;5634;5627:22;5589:2;5686:9;5673:23;5736:4;5729:5;5725:16;5718:5;5715:27;5705:2;;5761:6;5753;5746:22;5705:2;5789:5;5841:2;5826:18;;5813:32;;-1:-1:-1;5892:2:1;5877:18;;;5864:32;;5579:323;-1:-1:-1;;;5579:323:1:o;5907:480::-;;6178:26;6174:31;6165:6;6161:2;6157:15;6153:53;6148:3;6141:66;6237:6;6232:2;6227:3;6223:12;6216:28;6288:6;6280;6275:2;6270:3;6266:12;6253:42;6318:16;;6336:2;6314:25;6348:15;;;6314:25;6131:256;-1:-1:-1;;;6131:256:1:o;6392:380::-;6634:66;6622:79;;6726:2;6717:12;;6710:28;;;;6763:2;6754:12;;6612:160::o;6777:203::-;-1:-1:-1;;;;;6941:32:1;;;;6923:51;;6911:2;6896:18;;6878:102::o;6985:274::-;-1:-1:-1;;;;;7177:32:1;;;;7159:51;;7241:2;7226:18;;7219:34;7147:2;7132:18;;7114:145::o;7264:187::-;7429:14;;7422:22;7404:41;;7392:2;7377:18;;7359:92::o;7456:177::-;7602:25;;;7590:2;7575:18;;7557:76::o;7638:398::-;7865:25;;;7938:4;7926:17;;;;7921:2;7906:18;;7899:45;7975:2;7960:18;;7953:34;8018:2;8003:18;;7996:34;7852:3;7837:19;;7819:217::o;8041:603::-;;8182:2;8211;8200:9;8193:21;8243:6;8237:13;8286:6;8281:2;8270:9;8266:18;8259:34;8311:4;8324:140;8338:6;8335:1;8332:13;8324:140;;;8433:14;;;8429:23;;8423:30;8399:17;;;8418:2;8395:26;8388:66;8353:10;;8324:140;;;8482:6;8479:1;8476:13;8473:2;;;8552:4;8547:2;8538:6;8527:9;8523:22;8519:31;8512:45;8473:2;-1:-1:-1;8628:2:1;8607:15;-1:-1:-1;;8603:29:1;8588:45;;;;8635:2;8584:54;;8162:482;-1:-1:-1;;;8162:482:1:o;8649:332::-;8851:2;8833:21;;;8890:1;8870:18;;;8863:29;-1:-1:-1;;;8923:2:1;8908:18;;8901:39;8972:2;8957:18;;8823:158::o;8986:326::-;9188:2;9170:21;;;9227:1;9207:18;;;9200:29;-1:-1:-1;;;9260:2:1;9245:18;;9238:33;9303:2;9288:18;;9160:152::o;9317:325::-;9519:2;9501:21;;;9558:1;9538:18;;;9531:29;-1:-1:-1;;;9591:2:1;9576:18;;9569:32;9633:2;9618:18;;9491:151::o;9647:325::-;9849:2;9831:21;;;9888:1;9868:18;;;9861:29;-1:-1:-1;;;9921:2:1;9906:18;;9899:32;9963:2;9948:18;;9821:151::o;9977:325::-;10179:2;10161:21;;;10218:1;10198:18;;;10191:29;-1:-1:-1;;;10251:2:1;10236:18;;10229:32;10293:2;10278:18;;10151:151::o;10307:331::-;10509:2;10491:21;;;10548:1;10528:18;;;10521:29;-1:-1:-1;;;10581:2:1;10566:18;;10559:38;10629:2;10614:18;;10481:157::o;10643:325::-;10845:2;10827:21;;;10884:1;10864:18;;;10857:29;-1:-1:-1;;;10917:2:1;10902:18;;10895:32;10959:2;10944:18;;10817:151::o;10973:325::-;11175:2;11157:21;;;11214:1;11194:18;;;11187:29;-1:-1:-1;;;11247:2:1;11232:18;;11225:32;11289:2;11274:18;;11147:151::o;11303:326::-;11505:2;11487:21;;;11544:1;11524:18;;;11517:29;-1:-1:-1;;;11577:2:1;11562:18;;11555:33;11620:2;11605:18;;11477:152::o;11816:248::-;11990:25;;;12046:2;12031:18;;12024:34;11978:2;11963:18;;11945:119::o;12069:242::-;12139:2;12133:9;12169:17;;;12216:18;12201:34;;12237:22;;;12198:62;12195:2;;;12263:9;12195:2;12290;12283:22;12113:198;;-1:-1:-1;12113:198:1:o;12316:133::-;-1:-1:-1;;;;;12393:31:1;;12383:42;;12373:2;;12439:1;12436;12429:12;12373:2;12363:86;:::o
Swarm Source
ipfs://82bc77c6707c42df7480f258d16b95782ac52fbad3b05aa456cc8d32453c83c0
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.