Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 419 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Shutdown | 8639207 | 1891 days ago | IN | 0 ETH | 0.00069375 | ||||
Swap | 8638288 | 1891 days ago | IN | 0.01 ETH | 0.00492411 | ||||
Swap | 8638283 | 1891 days ago | IN | 0.01 ETH | 0.00740162 | ||||
Swap | 8638278 | 1891 days ago | IN | 0.01 ETH | 0.0035833 | ||||
Swap | 8638155 | 1891 days ago | IN | 0 ETH | 0.00576322 | ||||
Swap | 8638091 | 1891 days ago | IN | 0 ETH | 0.00171738 | ||||
Swap | 8638081 | 1891 days ago | IN | 0 ETH | 0.00238655 | ||||
Swap | 8638077 | 1891 days ago | IN | 0 ETH | 0.00171738 | ||||
Swap | 8638049 | 1891 days ago | IN | 0 ETH | 0.00374279 | ||||
Swap | 8637952 | 1891 days ago | IN | 0 ETH | 0.01160586 | ||||
Swap | 8637787 | 1891 days ago | IN | 6 ETH | 0.00346172 | ||||
Swap | 8637539 | 1891 days ago | IN | 0 ETH | 0.00314345 | ||||
Swap | 8637515 | 1891 days ago | IN | 0 ETH | 0.0060501 | ||||
Swap | 8637381 | 1891 days ago | IN | 0 ETH | 0.0090157 | ||||
Swap | 8636213 | 1892 days ago | IN | 0.1 ETH | 0.00203995 | ||||
Swap | 8636111 | 1892 days ago | IN | 0 ETH | 0.00268547 | ||||
Swap | 8636061 | 1892 days ago | IN | 87 ETH | 0.00449406 | ||||
Swap | 8635982 | 1892 days ago | IN | 0.10276829 ETH | 0.00044345 | ||||
Swap | 8635918 | 1892 days ago | IN | 0 ETH | 0.00133368 | ||||
Swap | 8635865 | 1892 days ago | IN | 0.01078743 ETH | 0.000887 | ||||
Swap | 8635856 | 1892 days ago | IN | 3.5 ETH | 0.00308315 | ||||
Swap | 8635849 | 1892 days ago | IN | 3.5 ETH | 0.00090526 | ||||
Swap | 8635788 | 1892 days ago | IN | 0.74515592 ETH | 0.00106287 | ||||
Swap | 8635689 | 1892 days ago | IN | 0 ETH | 0.00456161 | ||||
Swap | 8635653 | 1892 days ago | IN | 9.8 ETH | 0.00463797 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
8638288 | 1891 days ago | 0.01 ETH | ||||
8638283 | 1891 days ago | 0.01 ETH | ||||
8638278 | 1891 days ago | 0.01 ETH | ||||
8638155 | 1891 days ago | 0.00077496 ETH | ||||
8638155 | 1891 days ago | 0.00077496 ETH | ||||
8638091 | 1891 days ago | 0.02765803 ETH | ||||
8638091 | 1891 days ago | 0.02765803 ETH | ||||
8638077 | 1891 days ago | 0.02002318 ETH | ||||
8638077 | 1891 days ago | 0.02002318 ETH | ||||
8638049 | 1891 days ago | 0.10402229 ETH | ||||
8638049 | 1891 days ago | 0.10402229 ETH | ||||
8637787 | 1891 days ago | 6 ETH | ||||
8637539 | 1891 days ago | 2.91991729 ETH | ||||
8637539 | 1891 days ago | 0.000456 ETH | ||||
8637539 | 1891 days ago | 2.9203733 ETH | ||||
8637381 | 1891 days ago | 13.98351501 ETH | ||||
8637381 | 1891 days ago | 0.00299715 ETH | ||||
8637381 | 1891 days ago | 10.20449668 ETH | ||||
8637381 | 1891 days ago | 3.78201549 ETH | ||||
8636213 | 1892 days ago | 0.1 ETH | ||||
8636061 | 1892 days ago | 0.87 ETH | ||||
8636061 | 1892 days ago | 4.35 ETH | ||||
8636061 | 1892 days ago | 40.02 ETH | ||||
8636061 | 1892 days ago | 12.18 ETH | ||||
8636061 | 1892 days ago | 29.58 ETH |
Loading...
Loading
Contract Name:
OneInchExchange
Compiler Version
v0.5.11+commit.c082d0b4
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-09-17 */ pragma solidity ^0.5.0; pragma experimental ABIEncoderV2; library ExternalCall { // Source: https://github.com/gnosis/MultiSigWallet/blob/master/contracts/MultiSigWallet.sol // call has been separated into its own function in order to take advantage // of the Solidity's code generator to produce a loop that copies tx.data into memory. function externalCall(address destination, uint value, bytes memory data, uint dataOffset, uint dataLength) internal returns(bool result) { // solium-disable-next-line security/no-inline-assembly assembly { let x := mload(0x40) // "Allocate" memory for output (0x40 is where "free memory" pointer is stored by convention) let d := add(data, 32) // First 32 bytes are the padded length of data, so exclude that result := call( sub(gas, 34710), // 34710 is the value that solidity is currently emitting // It includes callGas (700) + callVeryLow (3, to pay for SUB) + callValueTransferGas (9000) + // callNewAccountGas (25000, in case the destination address does not exist and needs creating) destination, value, add(d, dataOffset), dataLength, // Size of the input (in bytes) - this is what fixes the padding problem x, 0 // Output is ignored, therefore the output size is zero ) } } } /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see `ERC20Detailed`. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through `transferFrom`. This is * zero by default. * * This value changes when `approve` or `transferFrom` are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * > 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 * * Emits an `Approval` event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to `approve`. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); 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) { require(b <= a, "SafeMath: subtraction overflow"); 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) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); 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) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } /** * @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. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be aplied to your functions to restrict their use to * the owner. */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * > Note: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract IZrxExchange { struct Order { address makerAddress; // Address that created the order. address takerAddress; // Address that is allowed to fill the order. If set to 0, any address is allowed to fill the order. address feeRecipientAddress; // Address that will recieve fees when order is filled. address senderAddress; // Address that is allowed to call Exchange contract methods that affect this order. If set to 0, any address is allowed to call these methods. uint256 makerAssetAmount; // Amount of makerAsset being offered by maker. Must be greater than 0. uint256 takerAssetAmount; // Amount of takerAsset being bid on by maker. Must be greater than 0. uint256 makerFee; // Amount of ZRX paid to feeRecipient by maker when order is filled. If set to 0, no transfer of ZRX from maker to feeRecipient will be attempted. uint256 takerFee; // Amount of ZRX paid to feeRecipient by taker when order is filled. If set to 0, no transfer of ZRX from taker to feeRecipient will be attempted. uint256 expirationTimeSeconds; // Timestamp in seconds at which order expires. uint256 salt; // Arbitrary number to facilitate uniqueness of the order's hash. bytes makerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring makerAsset. The last byte references the id of this proxy. bytes takerAssetData; // Encoded data that can be decoded by a specified proxy contract when transferring takerAsset. The last byte references the id of this proxy. } struct OrderInfo { uint8 orderStatus; // Status that describes order's validity and fillability. bytes32 orderHash; // EIP712 hash of the order (see IZrxExchange.getOrderHash). uint256 orderTakerAssetFilledAmount; // Amount of order that has already been filled. } struct FillResults { uint256 makerAssetFilledAmount; // Total amount of makerAsset(s) filled. uint256 takerAssetFilledAmount; // Total amount of takerAsset(s) filled. uint256 makerFeePaid; // Total amount of ZRX paid by maker(s) to feeRecipient(s). uint256 takerFeePaid; // Total amount of ZRX paid by taker to feeRecipients(s). } function getOrderInfo(Order memory order) public view returns (OrderInfo memory orderInfo); function getOrdersInfo(Order[] memory orders) public view returns (OrderInfo[] memory ordersInfo); function fillOrder( Order memory order, uint256 takerAssetFillAmount, bytes memory signature ) public returns (FillResults memory fillResults); function fillOrderNoThrow( Order memory order, uint256 takerAssetFillAmount, bytes memory signature ) public returns (FillResults memory fillResults); } contract IGST2 is IERC20 { function freeUpTo(uint256 value) external returns (uint256 freed); function freeFromUpTo(address from, uint256 value) external returns (uint256 freed); function balanceOf(address who) external view returns (uint256); } /** * @dev Collection of functions related to the address type, */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * > It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } contract IWETH is IERC20 { function deposit() external payable; function withdraw(uint256 amount) external; } contract Shutdownable is Ownable { bool public isShutdown; event Shutdown(); modifier notShutdown { require(!isShutdown, "Smart contract is shut down."); _; } function shutdown() public onlyOwner { isShutdown = true; emit Shutdown(); } } contract IERC20NonView { // Methods are not view to avoid throw on proxy tokens with delegatecall inside function balanceOf(address user) public returns(uint256); function allowance(address from, address to) public returns(uint256); } contract ZrxMarketOrder { using SafeMath for uint256; function marketSellOrdersProportion( IERC20 tokenSell, address tokenBuy, address zrxExchange, address zrxTokenProxy, IZrxExchange.Order[] calldata orders, bytes[] calldata signatures, uint256 mul, uint256 div ) external { uint256 amount = tokenSell.balanceOf(msg.sender).mul(mul).div(div); this.marketSellOrders(tokenBuy, zrxExchange, zrxTokenProxy, amount, orders, signatures); } function marketSellOrders( address makerAsset, address zrxExchange, address zrxTokenProxy, uint256 takerAssetFillAmount, IZrxExchange.Order[] calldata orders, bytes[] calldata signatures ) external returns (IZrxExchange.FillResults memory totalFillResults) { for (uint i = 0; i < orders.length; i++) { // Stop execution if the entire amount of takerAsset has been sold if (totalFillResults.takerAssetFilledAmount >= takerAssetFillAmount) { break; } // Calculate the remaining amount of takerAsset to sell uint256 remainingTakerAmount = takerAssetFillAmount.sub(totalFillResults.takerAssetFilledAmount); IZrxExchange.OrderInfo memory orderInfo = IZrxExchange(zrxExchange).getOrderInfo(orders[i]); uint256 orderRemainingTakerAmount = orders[i].takerAssetAmount.sub(orderInfo.orderTakerAssetFilledAmount); // Check available balance and allowance and update orderRemainingTakerAmount { uint256 balance = IERC20NonView(makerAsset).balanceOf(orders[i].makerAddress); uint256 allowance = IERC20NonView(makerAsset).allowance(orders[i].makerAddress, zrxTokenProxy); uint256 availableMakerAmount = (allowance < balance) ? allowance : balance; uint256 availableTakerAmount = availableMakerAmount.mul(orders[i].takerAssetAmount).div(orders[i].makerAssetAmount); if (availableTakerAmount < orderRemainingTakerAmount) { orderRemainingTakerAmount = availableTakerAmount; } } uint256 takerAmount = (orderRemainingTakerAmount < remainingTakerAmount) ? orderRemainingTakerAmount : remainingTakerAmount; IZrxExchange.FillResults memory fillResults = IZrxExchange(zrxExchange).fillOrderNoThrow( orders[i], takerAmount, signatures[i] ); _addFillResults(totalFillResults, fillResults); } return totalFillResults; } function _addFillResults( IZrxExchange.FillResults memory totalFillResults, IZrxExchange.FillResults memory singleFillResults ) internal pure { totalFillResults.makerAssetFilledAmount = totalFillResults.makerAssetFilledAmount.add(singleFillResults.makerAssetFilledAmount); totalFillResults.takerAssetFilledAmount = totalFillResults.takerAssetFilledAmount.add(singleFillResults.takerAssetFilledAmount); totalFillResults.makerFeePaid = totalFillResults.makerFeePaid.add(singleFillResults.makerFeePaid); totalFillResults.takerFeePaid = totalFillResults.takerFeePaid.add(singleFillResults.takerFeePaid); } function getOrdersInfoRespectingBalancesAndAllowances( IERC20 token, IZrxExchange zrx, address zrxTokenProxy, IZrxExchange.Order[] memory orders ) public view returns (IZrxExchange.OrderInfo[] memory ordersInfo) { ordersInfo = zrx.getOrdersInfo(orders); for (uint i = 0; i < ordersInfo.length; i++) { uint256 balance = token.balanceOf(orders[i].makerAddress); uint256 allowance = token.allowance(orders[i].makerAddress, zrxTokenProxy); uint256 availableMakerAmount = (allowance < balance) ? allowance : balance; uint256 availableTakerAmount = availableMakerAmount.mul(orders[i].takerAssetAmount).div(orders[i].makerAssetAmount); for (uint j = 0; j < i; j++) { if (orders[j].makerAddress == orders[i].makerAddress) { uint256 orderTakerAssetRemainigAmount = orders[j].takerAssetAmount.sub( ordersInfo[j].orderTakerAssetFilledAmount ); if (availableTakerAmount > orderTakerAssetRemainigAmount) { availableTakerAmount = availableTakerAmount.sub(orderTakerAssetRemainigAmount); } else { availableTakerAmount = 0; break; } } } uint256 remainingTakerAmount = orders[i].takerAssetAmount.sub( ordersInfo[i].orderTakerAssetFilledAmount ); if (availableTakerAmount < remainingTakerAmount) { ordersInfo[i].orderTakerAssetFilledAmount = orders[i].takerAssetAmount.sub(availableTakerAmount); } } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } library UniversalERC20 { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 private constant ZERO_ADDRESS = IERC20(0x0000000000000000000000000000000000000000); IERC20 private constant ETH_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); function universalTransfer(IERC20 token, address to, uint256 amount) internal { universalTransfer(token, to, amount, false); } function universalTransfer(IERC20 token, address to, uint256 amount, bool mayFail) internal returns(bool) { if (amount == 0) { return true; } if (token == ZERO_ADDRESS || token == ETH_ADDRESS) { if (mayFail) { return address(uint160(to)).send(amount); } else { address(uint160(to)).transfer(amount); return true; } } else { token.safeTransfer(to, amount); return true; } } function universalApprove(IERC20 token, address to, uint256 amount) internal { if (token != ZERO_ADDRESS && token != ETH_ADDRESS) { token.safeApprove(to, amount); } } function universalTransferFrom(IERC20 token, address from, address to, uint256 amount) internal { if (amount == 0) { return; } if (token == ZERO_ADDRESS || token == ETH_ADDRESS) { require(from == msg.sender && msg.value >= amount, "msg.value is zero"); if (to != address(this)) { address(uint160(to)).transfer(amount); } if (msg.value > amount) { msg.sender.transfer(msg.value.sub(amount)); } } else { token.safeTransferFrom(from, to, amount); } } function universalBalanceOf(IERC20 token, address who) internal view returns (uint256) { if (token == ZERO_ADDRESS || token == ETH_ADDRESS) { return who.balance; } else { return token.balanceOf(who); } } } contract TokenSpender { using SafeERC20 for IERC20; address public owner; IGST2 public gasToken; address public gasTokenOwner; constructor(IGST2 _gasToken, address _gasTokenOwner) public { owner = msg.sender; gasToken = _gasToken; gasTokenOwner = _gasTokenOwner; } function claimTokens(IERC20 token, address who, address dest, uint256 amount) external { require(msg.sender == owner, "Access restricted"); token.safeTransferFrom(who, dest, amount); } function burnGasToken(uint gasSpent) external { require(msg.sender == owner, "Access restricted"); uint256 tokens = (gasSpent + 14154) / 41130; gasToken.freeUpTo(tokens); } function() external { if (msg.sender == gasTokenOwner) { gasToken.transfer(msg.sender, gasToken.balanceOf(address(this))); } } } contract OneInchExchange is Shutdownable, ZrxMarketOrder { using SafeMath for uint256; using UniversalERC20 for IERC20; using ExternalCall for address; IERC20 constant ETH_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); TokenSpender public spender; uint fee; // 10000 => 100%, 1 => 0.01% event Swapped( IERC20 indexed fromToken, IERC20 indexed toToken, uint256 fromAmount, uint256 toAmount, address indexed referrer, uint256 referrerFee, uint256 fee ); constructor(address _owner, IGST2 _gasToken, uint _fee) public { spender = new TokenSpender( _gasToken, _owner ); _transferOwnership(_owner); fee = _fee; } function () external payable notShutdown { require(msg.sender != tx.origin); } function swap( IERC20 fromToken, IERC20 toToken, uint256 fromTokenAmount, uint256 minReturnAmount, uint256 guaranteedAmount, address payable referrer, address[] memory callAddresses, bytes memory callDataConcat, uint256[] memory starts, uint256[] memory values ) public payable notShutdown returns (uint256 returnAmount) { uint256 gasProvided = gasleft(); if (fromToken != ETH_ADDRESS) { spender.claimTokens(fromToken, msg.sender, address(this), fromTokenAmount); } for (uint i = 0; i < callAddresses.length; i++) { require(callAddresses[i] != address(spender), "Access denied"); require(callAddresses[i].externalCall(values[i], callDataConcat, starts[i], starts[i + 1] - starts[i])); } returnAmount = toToken.universalBalanceOf(address(this)); (uint256 toTokenAmount, uint256 referrerFee) = _handleFees(toToken, referrer, returnAmount, guaranteedAmount); require(toTokenAmount >= minReturnAmount, "Return amount is not enough"); toToken.universalTransfer(msg.sender, toTokenAmount); emit Swapped( fromToken, toToken, fromTokenAmount, toTokenAmount, referrer, referrerFee, returnAmount.sub(toTokenAmount) ); spender.burnGasToken(gasProvided.sub(gasleft())); } function _handleFees( IERC20 toToken, address referrer, uint256 returnAmount, uint256 guaranteedAmount ) internal returns( uint256 toTokenAmount, uint256 referrerFee ) { if (returnAmount <= guaranteedAmount) { return (returnAmount, 0); } uint256 feeAmount = returnAmount.sub(guaranteedAmount).mul(fee).div(10000); if (referrer != address(0) && referrer != msg.sender && referrer != tx.origin) { referrerFee = feeAmount.div(10); if (toToken.universalTransfer(referrer, referrerFee, true)) { returnAmount = returnAmount.sub(referrerFee); feeAmount = feeAmount.sub(referrerFee); } else { referrerFee = 0; } } if (toToken.universalTransfer(owner(), feeAmount, true)) { returnAmount = returnAmount.sub(feeAmount); } return (returnAmount, referrerFee); } function infiniteApproveIfNeeded(IERC20 token, address to) external notShutdown { if (token != ETH_ADDRESS) { if ((token.allowance(address(this), to) >> 255) == 0) { token.universalApprove(to, uint256(- 1)); } } } function withdrawAllToken(IWETH token) external notShutdown { uint256 amount = token.balanceOf(address(this)); token.withdraw(amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"contract IZrxExchange","name":"zrx","type":"address"},{"internalType":"address","name":"zrxTokenProxy","type":"address"},{"components":[{"internalType":"address","name":"makerAddress","type":"address"},{"internalType":"address","name":"takerAddress","type":"address"},{"internalType":"address","name":"feeRecipientAddress","type":"address"},{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"uint256","name":"makerAssetAmount","type":"uint256"},{"internalType":"uint256","name":"takerAssetAmount","type":"uint256"},{"internalType":"uint256","name":"makerFee","type":"uint256"},{"internalType":"uint256","name":"takerFee","type":"uint256"},{"internalType":"uint256","name":"expirationTimeSeconds","type":"uint256"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes","name":"makerAssetData","type":"bytes"},{"internalType":"bytes","name":"takerAssetData","type":"bytes"}],"internalType":"struct IZrxExchange.Order[]","name":"orders","type":"tuple[]"}],"name":"getOrdersInfoRespectingBalancesAndAllowances","outputs":[{"components":[{"internalType":"uint8","name":"orderStatus","type":"uint8"},{"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"internalType":"uint256","name":"orderTakerAssetFilledAmount","type":"uint256"}],"internalType":"struct IZrxExchange.OrderInfo[]","name":"ordersInfo","type":"tuple[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"tokenSell","type":"address"},{"internalType":"address","name":"tokenBuy","type":"address"},{"internalType":"address","name":"zrxExchange","type":"address"},{"internalType":"address","name":"zrxTokenProxy","type":"address"},{"components":[{"internalType":"address","name":"makerAddress","type":"address"},{"internalType":"address","name":"takerAddress","type":"address"},{"internalType":"address","name":"feeRecipientAddress","type":"address"},{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"uint256","name":"makerAssetAmount","type":"uint256"},{"internalType":"uint256","name":"takerAssetAmount","type":"uint256"},{"internalType":"uint256","name":"makerFee","type":"uint256"},{"internalType":"uint256","name":"takerFee","type":"uint256"},{"internalType":"uint256","name":"expirationTimeSeconds","type":"uint256"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes","name":"makerAssetData","type":"bytes"},{"internalType":"bytes","name":"takerAssetData","type":"bytes"}],"internalType":"struct IZrxExchange.Order[]","name":"orders","type":"tuple[]"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"},{"internalType":"uint256","name":"mul","type":"uint256"},{"internalType":"uint256","name":"div","type":"uint256"}],"name":"marketSellOrdersProportion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IWETH","name":"token","type":"address"}],"name":"withdrawAllToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isShutdown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"infiniteApproveIfNeeded","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"spender","outputs":[{"internalType":"contract TokenSpender","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"fromToken","type":"address"},{"internalType":"contract IERC20","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromTokenAmount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"guaranteedAmount","type":"uint256"},{"internalType":"address payable","name":"referrer","type":"address"},{"internalType":"address[]","name":"callAddresses","type":"address[]"},{"internalType":"bytes","name":"callDataConcat","type":"bytes"},{"internalType":"uint256[]","name":"starts","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"swap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"shutdown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"makerAsset","type":"address"},{"internalType":"address","name":"zrxExchange","type":"address"},{"internalType":"address","name":"zrxTokenProxy","type":"address"},{"internalType":"uint256","name":"takerAssetFillAmount","type":"uint256"},{"components":[{"internalType":"address","name":"makerAddress","type":"address"},{"internalType":"address","name":"takerAddress","type":"address"},{"internalType":"address","name":"feeRecipientAddress","type":"address"},{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"uint256","name":"makerAssetAmount","type":"uint256"},{"internalType":"uint256","name":"takerAssetAmount","type":"uint256"},{"internalType":"uint256","name":"makerFee","type":"uint256"},{"internalType":"uint256","name":"takerFee","type":"uint256"},{"internalType":"uint256","name":"expirationTimeSeconds","type":"uint256"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes","name":"makerAssetData","type":"bytes"},{"internalType":"bytes","name":"takerAssetData","type":"bytes"}],"internalType":"struct IZrxExchange.Order[]","name":"orders","type":"tuple[]"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"marketSellOrders","outputs":[{"components":[{"internalType":"uint256","name":"makerAssetFilledAmount","type":"uint256"},{"internalType":"uint256","name":"takerAssetFilledAmount","type":"uint256"},{"internalType":"uint256","name":"makerFeePaid","type":"uint256"},{"internalType":"uint256","name":"takerFeePaid","type":"uint256"}],"internalType":"struct IZrxExchange.FillResults","name":"totalFillResults","type":"tuple"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"contract IGST2","name":"_gasToken","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"fromToken","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"toToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"referrerFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"Swapped","type":"event"},{"anonymous":false,"inputs":[],"name":"Shutdown","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"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003c6a38038062003c6a8339810160408190526200003491620001af565b600080546001600160a01b03191633178082556040516001600160a01b0391909116919060008051602062003c4a833981519152908290a381836040516200007c9062000174565b6200008992919062000280565b604051809103906000f080158015620000a6573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216919091179055620000d283620000de565b600255506200031a9050565b6001600160a01b0381166200012a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012190620002a6565b60405180910390fd5b600080546040516001600160a01b038085169392169160008051602062003c4a83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b610941806200330983390190565b80516200018f81620002ea565b92915050565b80516200018f8162000304565b80516200018f816200030f565b600080600060608486031215620001c557600080fd5b6000620001d3868662000182565b9350506020620001e68682870162000195565b9250506040620001f986828701620001a2565b9150509250925092565b6200020e81620002c1565b82525050565b6200020e81620002ce565b60006200022e602683620002b8565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b6040810162000290828562000214565b6200029f602083018462000203565b9392505050565b602080825281016200018f816200021f565b90815260200190565b60006200018f82620002db565b60006200018f82620002c1565b6001600160a01b031690565b90565b620002f581620002c1565b81146200030157600080fd5b50565b620002f581620002ce565b620002f581620002e7565b612fdf806200032a6000396000f3fe6080604052600436106100c25760003560e01c8063bf86d6901161007f578063f2fde38b11610059578063f2fde38b1461022a578063f88309d71461024a578063fc0e74d11461026a578063fcc06f8e1461027f576100c2565b8063bf86d690146101d3578063c9b27359146101e8578063e8edc81614610208576100c2565b8063715018a61461010457806371a2039a146101195780638da5cb5b1461014f5780638f32d59b14610171578063a96c400e14610193578063ae4dd0fc146101b3575b600054600160a01b900460ff16156100f55760405162461bcd60e51b81526004016100ec90612c7b565b60405180910390fd5b3332141561010257600080fd5b005b34801561011057600080fd5b506101026102ac565b34801561012557600080fd5b506101396101343660046121aa565b61031a565b6040516101469190612c08565b60405180910390f35b34801561015b57600080fd5b50610164610689565b6040516101469190612b3d565b34801561017d57600080fd5b50610186610698565b6040516101469190612c2a565b34801561019f57600080fd5b506101026101ae366004611fa0565b6106a9565b3480156101bf57600080fd5b506101026101ce366004612222565b6107cf565b3480156101df57600080fd5b506101866108dd565b3480156101f457600080fd5b50610102610203366004611f66565b6108ed565b34801561021457600080fd5b5061021d6109e2565b6040516101469190612c6d565b34801561023657600080fd5b50610102610245366004611e37565b6109f1565b61025d610258366004612087565b610a21565b6040516101469190612d9d565b34801561027657600080fd5b50610102610d35565b34801561028b57600080fd5b5061029f61029a366004611e55565b610d95565b6040516101469190612d4b565b6102b4610698565b6102d05760405162461bcd60e51b81526004016100ec90612cfb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b604051631fa75d3760e21b81526060906001600160a01b03851690637e9d74dc90610349908590600401612c19565b60006040518083038186803b15801561036157600080fd5b505afa158015610375573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261039d9190810190611f14565b905060005b8151811015610680576000866001600160a01b03166370a082318584815181106103c857fe5b6020026020010151600001516040518263ffffffff1660e01b81526004016103f09190612b3d565b60206040518083038186803b15801561040857600080fd5b505afa15801561041c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610440919081019061227c565b90506000876001600160a01b031663dd62ed3e86858151811061045f57fe5b602002602001015160000151886040518363ffffffff1660e01b8152600401610489929190612b74565b60206040518083038186803b1580156104a157600080fd5b505afa1580156104b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104d9919081019061227c565b905060008282106104ea57826104ec565b815b905060006105418786815181106104ff57fe5b60200260200101516080015161053589888151811061051a57fe5b602002602001015160a001518561122790919063ffffffff16565b9063ffffffff61126a16565b905060005b8581101561060e5787868151811061055a57fe5b6020026020010151600001516001600160a01b031688828151811061057b57fe5b6020026020010151600001516001600160a01b031614156106065760006105d98883815181106105a757fe5b6020026020010151604001518a84815181106105bf57fe5b602002602001015160a0015161129f90919063ffffffff16565b9050808311156105fa576105f3838263ffffffff61129f16565b9250610604565b600092505061060e565b505b600101610546565b50600061063887878151811061062057fe5b6020026020010151604001518988815181106105bf57fe5b90508082101561066f57610652828988815181106105bf57fe5b87878151811061065e57fe5b602002602001015160400181815250505b5050600190930192506103a2915050565b50949350505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b600061073b82610535858e6001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016106df9190612b4b565b60206040518083038186803b1580156106f757600080fd5b505afa15801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061072f919081019061227c565b9063ffffffff61122716565b604051637e6037c760e11b8152909150309063fcc06f8e9061076f908d908d908d9087908e908e908e908e90600401612b82565b608060405180830381600087803b15801561078957600080fd5b505af115801561079d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107c19190810190612240565b505050505050505050505050565b600054600160a01b900460ff16156107f95760405162461bcd60e51b81526004016100ec90612c7b565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610828903090600401612b4b565b60206040518083038186803b15801561084057600080fd5b505afa158015610854573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610878919081019061227c565b604051632e1a7d4d60e01b81529091506001600160a01b03831690632e1a7d4d906108a7908490600401612d9d565b600060405180830381600087803b1580156108c157600080fd5b505af11580156108d5573d6000803e3d6000fd5b505050505050565b600054600160a01b900460ff1681565b600054600160a01b900460ff16156109175760405162461bcd60e51b81526004016100ec90612c7b565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146109de57604051636eb1769f60e11b815260ff906001600160a01b0384169063dd62ed3e9061096c9030908690600401612b59565b60206040518083038186803b15801561098457600080fd5b505afa158015610998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109bc919081019061227c565b901c6109de576109de6001600160a01b0383168260001963ffffffff6112c716565b5050565b6001546001600160a01b031681565b6109f9610698565b610a155760405162461bcd60e51b81526004016100ec90612cfb565b610a1e81611320565b50565b60008054600160a01b900460ff1615610a4c5760405162461bcd60e51b81526004016100ec90612c7b565b60005a90506001600160a01b038c1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610aef57600160009054906101000a90046001600160a01b03166001600160a01b0316630a5ea4668d33308e6040518563ffffffff1660e01b8152600401610abc9493929190612c38565b600060405180830381600087803b158015610ad657600080fd5b505af1158015610aea573d6000803e3d6000fd5b505050505b60005b8651811015610bde5760015487516001600160a01b0390911690889083908110610b1857fe5b60200260200101516001600160a01b03161415610b475760405162461bcd60e51b81526004016100ec90612d1b565b610bcd848281518110610b5657fe5b602002602001015187878481518110610b6b57fe5b6020026020010151888581518110610b7f57fe5b6020026020010151898660010181518110610b9657fe5b6020026020010151038b8681518110610bab57fe5b60200260200101516001600160a01b03166113a190949392919063ffffffff16565b610bd657600080fd5b600101610af2565b50610bf86001600160a01b038c163063ffffffff6113c516565b9150600080610c098d8a868d611492565b915091508a821015610c2d5760405162461bcd60e51b81526004016100ec90612cdb565b610c476001600160a01b038e16338463ffffffff6115b116565b886001600160a01b03168d6001600160a01b03168f6001600160a01b03167f99f0ec3ddaa27fb7bf3ee41d40a80aae33aecadd1877c0fa06f62e78ad3b7b6f8f8686610c9c898c61129f90919063ffffffff16565b604051610cac9493929190612dab565b60405180910390a46001546001600160a01b031663b1746b86610cd65a869063ffffffff61129f16565b6040518263ffffffff1660e01b8152600401610cf29190612d9d565b600060405180830381600087803b158015610d0c57600080fd5b505af1158015610d20573d6000803e3d6000fd5b505050505050509a9950505050505050505050565b610d3d610698565b610d595760405162461bcd60e51b81526004016100ec90612cfb565b6000805460ff60a01b1916600160a01b1781556040517f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf89190a1565b610d9d611947565b60005b8481101561121a5786826020015110610db85761121a565b6000610dd183602001518961129f90919063ffffffff16565b9050610ddb61196f565b8a6001600160a01b031663c75e0a81898986818110610df657fe5b60200282019050803561017e1936849003018112610e1357600080fd5b6040516001600160e01b031960e086901b168152610e38939091019150600401612d59565b60606040518083038186803b158015610e5057600080fd5b505afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e88919081019061225e565b90506000610ecc82604001518a8a87818110610ea057fe5b60200282019050803561017e1936849003018112610ebd57600080fd5b90910160a0013591905061129f565b905060008d6001600160a01b03166370a082318b8b88818110610eeb57fe5b60200282019050803561017e1936849003018112610f0857600080fd5b610f189201602081019150611e37565b6040518263ffffffff1660e01b8152600401610f349190612b3d565b602060405180830381600087803b158015610f4e57600080fd5b505af1158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f86919081019061227c565b905060008e6001600160a01b031663dd62ed3e8c8c89818110610fa557fe5b60200282019050803561017e1936849003018112610fc257600080fd5b610fd29201602081019150611e37565b8f6040518363ffffffff1660e01b8152600401610ff0929190612b74565b602060405180830381600087803b15801561100a57600080fd5b505af115801561101e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611042919081019061227c565b905060008282106110535782611055565b815b905060006110ca8d8d8a81811061106857fe5b60200282019050803561017e193684900301811261108557600080fd5b80830192505050608001356105358f8f8c81811061109f57fe5b60200282019050803561017e19368490030181126110bc57600080fd5b87920160a001359050611227565b9050848110156110d8578094505b5050505060008382106110eb57836110ed565b815b90506110f7611947565b8d6001600160a01b0316633e228bae8c8c8981811061111257fe5b60200282019050803561017e193684900301811261112f57600080fd5b919091019050848c8c8b81811061114257fe5b602002820190508035601e193684900301811261115e57600080fd5b909101602081019150356001600160401b0381111561117c57600080fd5b3681900382131561118c57600080fd5b6040518563ffffffff1660e01b81526004016111ab9493929190612d6a565b608060405180830381600087803b1580156111c557600080fd5b505af11580156111d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111fd9190810190612240565b905061120987826115c4565b505060019093019250610da0915050565b5098975050505050505050565b60008261123657506000611264565b8282028284828161124357fe5b04146112615760405162461bcd60e51b81526004016100ec90612ceb565b90505b92915050565b600080821161128b5760405162461bcd60e51b81526004016100ec90612ccb565b600082848161129657fe5b04949350505050565b6000828211156112c15760405162461bcd60e51b81526004016100ec90612cbb565b50900390565b6001600160a01b038316158015906112fc57506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b1561131b5761131b6001600160a01b038416838363ffffffff61163a16565b505050565b6001600160a01b0381166113465760405162461bcd60e51b81526004016100ec90612c8b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600060405160208501600082858784018a8c6187965a03f198975050505050505050565b60006001600160a01b03831615806113f957506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b1561140f57506001600160a01b03811631611264565b6040516370a0823160e01b81526001600160a01b038416906370a082319061143b908590600401612b3d565b60206040518083038186803b15801561145357600080fd5b505afa158015611467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061148b919081019061227c565b9050611264565b6000808284116114a7575082905060006115a8565b60006114c861271061053560025461072f888a61129f90919063ffffffff16565b90506001600160a01b038616158015906114eb57506001600160a01b0386163314155b801561150057506001600160a01b0386163214155b156115675761151681600a63ffffffff61126a16565b91506115346001600160a01b0388168784600163ffffffff61173716565b1561156257611549858363ffffffff61129f16565b945061155b818363ffffffff61129f16565b9050611567565b600091505b61158b611572610689565b6001600160a01b0389169083600163ffffffff61173716565b156115a3576115a0858263ffffffff61129f16565b94505b508391505b94509492505050565b6115be8383836000611737565b50505050565b805182516115d79163ffffffff61181516565b8252602080820151908301516115f29163ffffffff61181516565b6020830152604080820151908301516116109163ffffffff61181516565b60408301526060808201519083015161162e9163ffffffff61181516565b60609092019190915250565b8015806116c25750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e906116709030908690600401612b74565b60206040518083038186803b15801561168857600080fd5b505afa15801561169c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116c0919081019061227c565b155b6116de5760405162461bcd60e51b81526004016100ec90612d2b565b60405161131b90849063095ea7b360e01b906117009086908690602401612bed565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261183a565b6000826117465750600161180d565b6001600160a01b038516158061177857506001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b156117ef5781156117af576040516001600160a01b0385169084156108fc029085906000818181858888f19350505050905061180d565b6040516001600160a01b0385169084156108fc029085906000818181858888f193505050501580156117e5573d6000803e3d6000fd5b506001905061180d565b6118096001600160a01b038616858563ffffffff61191f16565b5060015b949350505050565b6000828201838110156112615760405162461bcd60e51b81526004016100ec90612c9b565b61184c826001600160a01b0316611941565b6118685760405162461bcd60e51b81526004016100ec90612d3b565b60006060836001600160a01b0316836040516118849190612b31565b6000604051808303816000865af19150503d80600081146118c1576040519150601f19603f3d011682016040523d82523d6000602084013e6118c6565b606091505b5091509150816118e85760405162461bcd60e51b81526004016100ec90612cab565b8051156115be57808060200190516119039190810190611f48565b6115be5760405162461bcd60e51b81526004016100ec90612d0b565b60405161131b90849063a9059cbb60e01b906117009086908690602401612bed565b3b151590565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561126481612f64565b600082601f8301126119ab57600080fd5b81356119be6119b982612df9565b612dd3565b915081818352602084019350602081019050838560208402820111156119e357600080fd5b60005b83811015611a0f57816119f9888261198f565b84525060209283019291909101906001016119e6565b5050505092915050565b60008083601f840112611a2b57600080fd5b5081356001600160401b03811115611a4257600080fd5b602083019150836020820283011115611a5a57600080fd5b9250929050565b600082601f830112611a7257600080fd5b8151611a806119b982612df9565b91508181835260208401935060208101905083856060840282011115611aa557600080fd5b60005b83811015611a0f5781611abb8882611c7f565b84525060209092019160609190910190600101611aa8565b600082601f830112611ae457600080fd5b8135611af26119b982612df9565b81815260209384019390925082018360005b83811015611a0f5781358601611b1a8882611cda565b8452506020928301929190910190600101611b04565b600082601f830112611b4157600080fd5b8135611b4f6119b982612df9565b91508181835260208401935060208101905083856020840282011115611b7457600080fd5b60005b83811015611a0f5781611b8a8882611e21565b8452506020928301929190910190600101611b77565b805161126481612f78565b805161126481612f81565b600082601f830112611bc757600080fd5b8135611bd56119b982612e19565b91508082526020830160208301858383011115611bf157600080fd5b611bfc838284612f22565b50505092915050565b803561126481612f8a565b600060808284031215611c2257600080fd5b611c2c6080612dd3565b90506000611c3a8484611bab565b8252506020611c4b84848301611bab565b6020830152506040611c5f84828501611bab565b6040830152506060611c7384828501611bab565b60608301525092915050565b600060608284031215611c9157600080fd5b611c9b6060612dd3565b90506000611ca98484611e2c565b8252506020611cba84848301611bab565b6020830152506040611cce84828501611bab565b60408301525092915050565b60006101808284031215611ced57600080fd5b611cf8610180612dd3565b90506000611d06848461198f565b8252506020611d178484830161198f565b6020830152506040611d2b8482850161198f565b6040830152506060611d3f8482850161198f565b6060830152506080611d5384828501611e21565b60808301525060a0611d6784828501611e21565b60a08301525060c0611d7b84828501611e21565b60c08301525060e0611d8f84828501611e21565b60e083015250610100611da484828501611e21565b61010083015250610120611dba84828501611e21565b610120830152506101408201356001600160401b03811115611ddb57600080fd5b611de784828501611bb6565b610140830152506101608201356001600160401b03811115611e0857600080fd5b611e1484828501611bb6565b6101608301525092915050565b803561126481612f81565b805161126481612f93565b600060208284031215611e4957600080fd5b600061180d848461198f565b60008060008060008060008060c0898b031215611e7157600080fd5b6000611e7d8b8b61198f565b9850506020611e8e8b828c0161198f565b9750506040611e9f8b828c0161198f565b9650506060611eb08b828c01611e21565b95505060808901356001600160401b03811115611ecc57600080fd5b611ed88b828c01611a19565b945094505060a08901356001600160401b03811115611ef657600080fd5b611f028b828c01611a19565b92509250509295985092959890939650565b600060208284031215611f2657600080fd5b81516001600160401b03811115611f3c57600080fd5b61180d84828501611a61565b600060208284031215611f5a57600080fd5b600061180d8484611ba0565b60008060408385031215611f7957600080fd5b6000611f858585611c05565b9250506020611f968582860161198f565b9150509250929050565b6000806000806000806000806000806101008b8d031215611fc057600080fd5b6000611fcc8d8d611c05565b9a50506020611fdd8d828e0161198f565b9950506040611fee8d828e0161198f565b9850506060611fff8d828e0161198f565b97505060808b01356001600160401b0381111561201b57600080fd5b6120278d828e01611a19565b965096505060a08b01356001600160401b0381111561204557600080fd5b6120518d828e01611a19565b945094505060c06120648d828e01611e21565b92505060e06120758d828e01611e21565b9150509295989b9194979a5092959850565b6000806000806000806000806000806101408b8d0312156120a757600080fd5b60006120b38d8d611c05565b9a505060206120c48d828e01611c05565b99505060406120d58d828e01611e21565b98505060606120e68d828e01611e21565b97505060806120f78d828e01611e21565b96505060a06121088d828e0161198f565b95505060c08b01356001600160401b0381111561212457600080fd5b6121308d828e0161199a565b94505060e08b01356001600160401b0381111561214c57600080fd5b6121588d828e01611bb6565b9350506101008b01356001600160401b0381111561217557600080fd5b6121818d828e01611b30565b9250506101208b01356001600160401b0381111561219e57600080fd5b6120758d828e01611b30565b600080600080608085870312156121c057600080fd5b60006121cc8787611c05565b94505060206121dd87828801611c05565b93505060406121ee8782880161198f565b92505060608501356001600160401b0381111561220a57600080fd5b61221687828801611ad3565b91505092959194509250565b60006020828403121561223457600080fd5b600061180d8484611c05565b60006080828403121561225257600080fd5b600061180d8484611c10565b60006060828403121561227057600080fd5b600061180d8484611c7f565b60006020828403121561228e57600080fd5b600061180d8484611bab565b600061180d84848461248d565b60006122b38383612889565b505060600190565b60006122c783836128c0565b9392505050565b60006122c78383612a25565b6122e381612f17565b82525050565b6122e381612eea565b60006122fe8385612e4d565b93508360208402850161231084612e40565b8060005b8781101561235457848403895261232b8284612e6a565b61233686828461229a565b955061234184612e43565b60209b909b019a93505050600101612314565b5091979650505050505050565b600061236c82612e49565b6123768185612e4d565b935061238183612e43565b8060005b838110156123af57815161239988826122a7565b97506123a483612e43565b925050600101612385565b509495945050505050565b60006123c68385612e4d565b9350836020840285016123d884612e40565b8060005b878110156123545784840389526123f38284612eba565b6123fd85826122bb565b945061240883612e43565b60209a909a01999250506001016123dc565b600061242582612e49565b61242f8185612e4d565b93508360208202850161244185612e43565b8060005b85811015612354578484038952815161245e85826122ce565b945061246983612e43565b60209a909a0199925050600101612445565b6122e381612ef5565b6122e381612e40565b60006124998385612e4d565b93506124a6838584612f22565b6124af83612f5a565b9093019392505050565b60006124c482612e49565b6124ce8185612e56565b93506124de818560208601612f2e565b9290920192915050565b60006124f382612e49565b6124fd8185612e4d565b935061250d818560208601612f2e565b6124af81612f5a565b6122e381612efa565b600061252c601c83612e4d565b7f536d61727420636f6e7472616374206973207368757420646f776e2e00000000815260200192915050565b6000612565602683612e4d565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006125ad601b83612e4d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006125e6602083612e4d565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b600061261f601e83612e4d565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815260200192915050565b6000612658601a83612e4d565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000815260200192915050565b6000612691601b83612e4d565b7f52657475726e20616d6f756e74206973206e6f7420656e6f7567680000000000815260200192915050565b60006126ca602183612e4d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061270d602083612e4d565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000612746602a83612e4d565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000612792600d83612e4d565b6c1058d8d95cdcc819195b9a5959609a1b815260200192915050565b60006127bb603683612e4d565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b602082015260400192915050565b6000612813601f83612e4d565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b805160808301906128508482612484565b5060208201516128636020850182612484565b5060408201516128766040850182612484565b5060608201516115be6060850182612484565b8051606083019061289a8482612b28565b5060208201516128ad6020850182612484565b5060408201516115be6040850182612484565b600061018083016128d18380612e5b565b6128db85826122e9565b506128e96020840184612e5b565b6128f660208601826122e9565b506129046040840184612e5b565b61291160408601826122e9565b5061291f6060840184612e5b565b61292c60608601826122e9565b5061293a6080840184612edb565b6129476080860182612484565b5061295560a0840184612edb565b61296260a0860182612484565b5061297060c0840184612edb565b61297d60c0860182612484565b5061298b60e0840184612edb565b61299860e0860182612484565b506129a7610100840184612edb565b6129b5610100860182612484565b506129c4610120840184612edb565b6129d2610120860182612484565b506129e1610140840184612e6a565b8583036101408701526129f583828461248d565b92505050612a07610160840184612e6a565b858303610160870152612a1b83828461248d565b9695505050505050565b8051600090610180840190612a3a85826122e9565b506020830151612a4d60208601826122e9565b506040830151612a6060408601826122e9565b506060830151612a7360608601826122e9565b506080830151612a866080860182612484565b5060a0830151612a9960a0860182612484565b5060c0830151612aac60c0860182612484565b5060e0830151612abf60e0860182612484565b50610100830151612ad4610100860182612484565b50610120830151612ae9610120860182612484565b50610140830151848203610140860152612b0382826124e8565b915050610160830151848203610160860152612b1f82826124e8565b95945050505050565b6122e381612f11565b60006122c782846124b9565b6020810161126482846122e9565b6020810161126482846122da565b60408101612b6782856122da565b6122c760208301846122e9565b60408101612b6782856122e9565b60c08101612b90828b6122e9565b612b9d602083018a6122e9565b612baa60408301896122e9565b612bb76060830188612484565b8181036080830152612bca8186886123ba565b905081810360a0830152612bdf8184866122f2565b9a9950505050505050505050565b60408101612bfb82856122e9565b6122c76020830184612484565b602080825281016122c78184612361565b602080825281016122c7818461241a565b60208101611264828461247b565b60808101612c468287612516565b612c5360208301866122da565b612c6060408301856122da565b612b1f6060830184612484565b602081016112648284612516565b602080825281016112648161251f565b6020808252810161126481612558565b60208082528101611264816125a0565b60208082528101611264816125d9565b6020808252810161126481612612565b602080825281016112648161264b565b6020808252810161126481612684565b60208082528101611264816126bd565b6020808252810161126481612700565b6020808252810161126481612739565b6020808252810161126481612785565b60208082528101611264816127ae565b6020808252810161126481612806565b60808101611264828461283f565b602080825281016122c781846128c0565b60608082528101612d7b81876128c0565b9050612d8a6020830186612484565b8181036040830152612a1b81848661248d565b602081016112648284612484565b60808101612db98287612484565b612dc66020830186612484565b612c606040830185612484565b6040518181016001600160401b0381118282101715612df157600080fd5b604052919050565b60006001600160401b03821115612e0f57600080fd5b5060209081020190565b60006001600160401b03821115612e2f57600080fd5b506020601f91909101601f19160190565b90565b60200190565b5190565b90815260200190565b919050565b60006122c7602084018461198f565b6000808335601e1936859003018112612e8257600080fd5b8381016020810193503591506001600160401b03821115612ea257600080fd5b36829003841315612eb257600080fd5b509250929050565b6000823561017e1936849003018112612ed257600080fd5b90910192915050565b60006122c76020840184611e21565b600061126482612f05565b151590565b600061126482612eea565b6001600160a01b031690565b60ff1690565b600061126482612efa565b82818337506000910152565b60005b83811015612f49578181015183820152602001612f31565b838111156115be5750506000910152565b601f01601f191690565b612f6d81612eea565b8114610a1e57600080fd5b612f6d81612ef5565b612f6d81612e40565b612f6d81612efa565b612f6d81612f1156fea365627a7a72315820c54ee3c1ba530ca85ef298b219cd2a8b77dd4bdf84bc8e26cfcaa0bf126899e56c6578706572696d656e74616cf564736f6c634300050b0040608060405234801561001057600080fd5b5060405161094138038061094183398101604081905261002f91610087565b600080546001600160a01b03199081163317909155600180546001600160a01b0394851690831617905560028054929093169116179055610103565b8051610076816100e3565b92915050565b8051610076816100fa565b6000806040838503121561009a57600080fd5b60006100a6858561007c565b92505060206100b78582860161006b565b9150509250929050565b6000610076826100d7565b6000610076826100c1565b6001600160a01b031690565b6100ec816100c1565b81146100f757600080fd5b50565b6100ec816100cc565b61082f806101126000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630a5ea466146101675780638da5cb5b1461017a578063b1746b8614610198578063c91d59fe146101ab578063ccf1af31146101c0575b6002546001600160a01b0316331415610165576001546040516370a0823160e01b81526001600160a01b039091169063a9059cbb90339083906370a08231906100a490309060040161069a565b60206040518083038186803b1580156100bc57600080fd5b505afa1580156100d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506100f49190810190610525565b6040518363ffffffff1660e01b81526004016101119291906106a8565b602060405180830381600087803b15801561012b57600080fd5b505af115801561013f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101639190810190610480565b505b005b6101656101753660046104a6565b6101c8565b61018261021c565b60405161018f919061069a565b60405180910390f35b6101656101a6366004610507565b61022b565b6101b36102e4565b60405161018f91906106eb565b6101826102f3565b6000546001600160a01b031633146101fb5760405162461bcd60e51b81526004016101f2906106f9565b60405180910390fd5b6102166001600160a01b03851684848463ffffffff61030216565b50505050565b6000546001600160a01b031681565b6000546001600160a01b031633146102555760405162461bcd60e51b81526004016101f2906106f9565b6001546040516331b35c9b60e11b815261a0aa61374a840104916001600160a01b031690636366b9369061028d908490600401610739565b602060405180830381600087803b1580156102a757600080fd5b505af11580156102bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102df9190810190610525565b505050565b6001546001600160a01b031681565b6002546001600160a01b031681565b6040516102169085906323b872dd60e01b90610326908790879087906024016106c3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261036a826001600160a01b031661043d565b6103865760405162461bcd60e51b81526004016101f290610729565b60006060836001600160a01b0316836040516103a29190610687565b6000604051808303816000865af19150503d80600081146103df576040519150601f19603f3d011682016040523d82523d6000602084013e6103e4565b606091505b5091509150816104065760405162461bcd60e51b81526004016101f290610709565b80511561021657808060200190516104219190810190610480565b6102165760405162461bcd60e51b81526004016101f290610719565b3b151590565b803561044e816107ba565b92915050565b805161044e816107d1565b803561044e816107da565b803561044e816107e3565b805161044e816107e3565b60006020828403121561049257600080fd5b600061049e8484610454565b949350505050565b600080600080608085870312156104bc57600080fd5b60006104c8878761045f565b94505060206104d987828801610443565b93505060406104ea87828801610443565b92505060606104fb8782880161046a565b91505092959194509250565b60006020828403121561051957600080fd5b600061049e848461046a565b60006020828403121561053757600080fd5b600061049e8484610475565b61054c81610783565b82525050565b61054c81610759565b600061056682610747565b610570818561074b565b935061058081856020860161078e565b9290920192915050565b61054c81610769565b60006105a0601183610750565b701058d8d95cdcc81c995cdd1c9a58dd1959607a1b815260200192915050565b60006105cd602083610750565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000610606602a83610750565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000610652601f83610750565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b61054c81610780565b6000610693828461055b565b9392505050565b6020810161044e8284610552565b604081016106b68285610543565b610693602083018461067e565b606081016106d18286610552565b6106de6020830185610552565b61049e604083018461067e565b6020810161044e828461058a565b6020808252810161044e81610593565b6020808252810161044e816105c0565b6020808252810161044e816105f9565b6020808252810161044e81610645565b6020810161044e828461067e565b5190565b919050565b90815260200190565b600061044e82610774565b151590565b600061044e82610759565b6001600160a01b031690565b90565b600061044e82610769565b60005b838110156107a9578181015183820152602001610791565b838111156102165750506000910152565b6107c381610759565b81146107ce57600080fd5b50565b6107c381610764565b6107c381610769565b6107c38161078056fea365627a7a723158208c59ccff021a83d26af80f0ae27ae65fc175b110caabc0e0c3a1c87caaac12226c6578706572696d656e74616cf564736f6c634300050b00408be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000004d37f28d2db99e8d35a6c725a5f1749a085850a30000000000000000000000000000000000b3f879cb30fe243b4dfee438691c040000000000000000000000000000000000000000000000000000000000001388
Deployed Bytecode
0x6080604052600436106100c25760003560e01c8063bf86d6901161007f578063f2fde38b11610059578063f2fde38b1461022a578063f88309d71461024a578063fc0e74d11461026a578063fcc06f8e1461027f576100c2565b8063bf86d690146101d3578063c9b27359146101e8578063e8edc81614610208576100c2565b8063715018a61461010457806371a2039a146101195780638da5cb5b1461014f5780638f32d59b14610171578063a96c400e14610193578063ae4dd0fc146101b3575b600054600160a01b900460ff16156100f55760405162461bcd60e51b81526004016100ec90612c7b565b60405180910390fd5b3332141561010257600080fd5b005b34801561011057600080fd5b506101026102ac565b34801561012557600080fd5b506101396101343660046121aa565b61031a565b6040516101469190612c08565b60405180910390f35b34801561015b57600080fd5b50610164610689565b6040516101469190612b3d565b34801561017d57600080fd5b50610186610698565b6040516101469190612c2a565b34801561019f57600080fd5b506101026101ae366004611fa0565b6106a9565b3480156101bf57600080fd5b506101026101ce366004612222565b6107cf565b3480156101df57600080fd5b506101866108dd565b3480156101f457600080fd5b50610102610203366004611f66565b6108ed565b34801561021457600080fd5b5061021d6109e2565b6040516101469190612c6d565b34801561023657600080fd5b50610102610245366004611e37565b6109f1565b61025d610258366004612087565b610a21565b6040516101469190612d9d565b34801561027657600080fd5b50610102610d35565b34801561028b57600080fd5b5061029f61029a366004611e55565b610d95565b6040516101469190612d4b565b6102b4610698565b6102d05760405162461bcd60e51b81526004016100ec90612cfb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b604051631fa75d3760e21b81526060906001600160a01b03851690637e9d74dc90610349908590600401612c19565b60006040518083038186803b15801561036157600080fd5b505afa158015610375573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261039d9190810190611f14565b905060005b8151811015610680576000866001600160a01b03166370a082318584815181106103c857fe5b6020026020010151600001516040518263ffffffff1660e01b81526004016103f09190612b3d565b60206040518083038186803b15801561040857600080fd5b505afa15801561041c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610440919081019061227c565b90506000876001600160a01b031663dd62ed3e86858151811061045f57fe5b602002602001015160000151886040518363ffffffff1660e01b8152600401610489929190612b74565b60206040518083038186803b1580156104a157600080fd5b505afa1580156104b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104d9919081019061227c565b905060008282106104ea57826104ec565b815b905060006105418786815181106104ff57fe5b60200260200101516080015161053589888151811061051a57fe5b602002602001015160a001518561122790919063ffffffff16565b9063ffffffff61126a16565b905060005b8581101561060e5787868151811061055a57fe5b6020026020010151600001516001600160a01b031688828151811061057b57fe5b6020026020010151600001516001600160a01b031614156106065760006105d98883815181106105a757fe5b6020026020010151604001518a84815181106105bf57fe5b602002602001015160a0015161129f90919063ffffffff16565b9050808311156105fa576105f3838263ffffffff61129f16565b9250610604565b600092505061060e565b505b600101610546565b50600061063887878151811061062057fe5b6020026020010151604001518988815181106105bf57fe5b90508082101561066f57610652828988815181106105bf57fe5b87878151811061065e57fe5b602002602001015160400181815250505b5050600190930192506103a2915050565b50949350505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b600061073b82610535858e6001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016106df9190612b4b565b60206040518083038186803b1580156106f757600080fd5b505afa15801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061072f919081019061227c565b9063ffffffff61122716565b604051637e6037c760e11b8152909150309063fcc06f8e9061076f908d908d908d9087908e908e908e908e90600401612b82565b608060405180830381600087803b15801561078957600080fd5b505af115801561079d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107c19190810190612240565b505050505050505050505050565b600054600160a01b900460ff16156107f95760405162461bcd60e51b81526004016100ec90612c7b565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610828903090600401612b4b565b60206040518083038186803b15801561084057600080fd5b505afa158015610854573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610878919081019061227c565b604051632e1a7d4d60e01b81529091506001600160a01b03831690632e1a7d4d906108a7908490600401612d9d565b600060405180830381600087803b1580156108c157600080fd5b505af11580156108d5573d6000803e3d6000fd5b505050505050565b600054600160a01b900460ff1681565b600054600160a01b900460ff16156109175760405162461bcd60e51b81526004016100ec90612c7b565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146109de57604051636eb1769f60e11b815260ff906001600160a01b0384169063dd62ed3e9061096c9030908690600401612b59565b60206040518083038186803b15801561098457600080fd5b505afa158015610998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109bc919081019061227c565b901c6109de576109de6001600160a01b0383168260001963ffffffff6112c716565b5050565b6001546001600160a01b031681565b6109f9610698565b610a155760405162461bcd60e51b81526004016100ec90612cfb565b610a1e81611320565b50565b60008054600160a01b900460ff1615610a4c5760405162461bcd60e51b81526004016100ec90612c7b565b60005a90506001600160a01b038c1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610aef57600160009054906101000a90046001600160a01b03166001600160a01b0316630a5ea4668d33308e6040518563ffffffff1660e01b8152600401610abc9493929190612c38565b600060405180830381600087803b158015610ad657600080fd5b505af1158015610aea573d6000803e3d6000fd5b505050505b60005b8651811015610bde5760015487516001600160a01b0390911690889083908110610b1857fe5b60200260200101516001600160a01b03161415610b475760405162461bcd60e51b81526004016100ec90612d1b565b610bcd848281518110610b5657fe5b602002602001015187878481518110610b6b57fe5b6020026020010151888581518110610b7f57fe5b6020026020010151898660010181518110610b9657fe5b6020026020010151038b8681518110610bab57fe5b60200260200101516001600160a01b03166113a190949392919063ffffffff16565b610bd657600080fd5b600101610af2565b50610bf86001600160a01b038c163063ffffffff6113c516565b9150600080610c098d8a868d611492565b915091508a821015610c2d5760405162461bcd60e51b81526004016100ec90612cdb565b610c476001600160a01b038e16338463ffffffff6115b116565b886001600160a01b03168d6001600160a01b03168f6001600160a01b03167f99f0ec3ddaa27fb7bf3ee41d40a80aae33aecadd1877c0fa06f62e78ad3b7b6f8f8686610c9c898c61129f90919063ffffffff16565b604051610cac9493929190612dab565b60405180910390a46001546001600160a01b031663b1746b86610cd65a869063ffffffff61129f16565b6040518263ffffffff1660e01b8152600401610cf29190612d9d565b600060405180830381600087803b158015610d0c57600080fd5b505af1158015610d20573d6000803e3d6000fd5b505050505050509a9950505050505050505050565b610d3d610698565b610d595760405162461bcd60e51b81526004016100ec90612cfb565b6000805460ff60a01b1916600160a01b1781556040517f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf89190a1565b610d9d611947565b60005b8481101561121a5786826020015110610db85761121a565b6000610dd183602001518961129f90919063ffffffff16565b9050610ddb61196f565b8a6001600160a01b031663c75e0a81898986818110610df657fe5b60200282019050803561017e1936849003018112610e1357600080fd5b6040516001600160e01b031960e086901b168152610e38939091019150600401612d59565b60606040518083038186803b158015610e5057600080fd5b505afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e88919081019061225e565b90506000610ecc82604001518a8a87818110610ea057fe5b60200282019050803561017e1936849003018112610ebd57600080fd5b90910160a0013591905061129f565b905060008d6001600160a01b03166370a082318b8b88818110610eeb57fe5b60200282019050803561017e1936849003018112610f0857600080fd5b610f189201602081019150611e37565b6040518263ffffffff1660e01b8152600401610f349190612b3d565b602060405180830381600087803b158015610f4e57600080fd5b505af1158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f86919081019061227c565b905060008e6001600160a01b031663dd62ed3e8c8c89818110610fa557fe5b60200282019050803561017e1936849003018112610fc257600080fd5b610fd29201602081019150611e37565b8f6040518363ffffffff1660e01b8152600401610ff0929190612b74565b602060405180830381600087803b15801561100a57600080fd5b505af115801561101e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611042919081019061227c565b905060008282106110535782611055565b815b905060006110ca8d8d8a81811061106857fe5b60200282019050803561017e193684900301811261108557600080fd5b80830192505050608001356105358f8f8c81811061109f57fe5b60200282019050803561017e19368490030181126110bc57600080fd5b87920160a001359050611227565b9050848110156110d8578094505b5050505060008382106110eb57836110ed565b815b90506110f7611947565b8d6001600160a01b0316633e228bae8c8c8981811061111257fe5b60200282019050803561017e193684900301811261112f57600080fd5b919091019050848c8c8b81811061114257fe5b602002820190508035601e193684900301811261115e57600080fd5b909101602081019150356001600160401b0381111561117c57600080fd5b3681900382131561118c57600080fd5b6040518563ffffffff1660e01b81526004016111ab9493929190612d6a565b608060405180830381600087803b1580156111c557600080fd5b505af11580156111d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111fd9190810190612240565b905061120987826115c4565b505060019093019250610da0915050565b5098975050505050505050565b60008261123657506000611264565b8282028284828161124357fe5b04146112615760405162461bcd60e51b81526004016100ec90612ceb565b90505b92915050565b600080821161128b5760405162461bcd60e51b81526004016100ec90612ccb565b600082848161129657fe5b04949350505050565b6000828211156112c15760405162461bcd60e51b81526004016100ec90612cbb565b50900390565b6001600160a01b038316158015906112fc57506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b1561131b5761131b6001600160a01b038416838363ffffffff61163a16565b505050565b6001600160a01b0381166113465760405162461bcd60e51b81526004016100ec90612c8b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600060405160208501600082858784018a8c6187965a03f198975050505050505050565b60006001600160a01b03831615806113f957506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b1561140f57506001600160a01b03811631611264565b6040516370a0823160e01b81526001600160a01b038416906370a082319061143b908590600401612b3d565b60206040518083038186803b15801561145357600080fd5b505afa158015611467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061148b919081019061227c565b9050611264565b6000808284116114a7575082905060006115a8565b60006114c861271061053560025461072f888a61129f90919063ffffffff16565b90506001600160a01b038616158015906114eb57506001600160a01b0386163314155b801561150057506001600160a01b0386163214155b156115675761151681600a63ffffffff61126a16565b91506115346001600160a01b0388168784600163ffffffff61173716565b1561156257611549858363ffffffff61129f16565b945061155b818363ffffffff61129f16565b9050611567565b600091505b61158b611572610689565b6001600160a01b0389169083600163ffffffff61173716565b156115a3576115a0858263ffffffff61129f16565b94505b508391505b94509492505050565b6115be8383836000611737565b50505050565b805182516115d79163ffffffff61181516565b8252602080820151908301516115f29163ffffffff61181516565b6020830152604080820151908301516116109163ffffffff61181516565b60408301526060808201519083015161162e9163ffffffff61181516565b60609092019190915250565b8015806116c25750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e906116709030908690600401612b74565b60206040518083038186803b15801561168857600080fd5b505afa15801561169c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116c0919081019061227c565b155b6116de5760405162461bcd60e51b81526004016100ec90612d2b565b60405161131b90849063095ea7b360e01b906117009086908690602401612bed565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261183a565b6000826117465750600161180d565b6001600160a01b038516158061177857506001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b156117ef5781156117af576040516001600160a01b0385169084156108fc029085906000818181858888f19350505050905061180d565b6040516001600160a01b0385169084156108fc029085906000818181858888f193505050501580156117e5573d6000803e3d6000fd5b506001905061180d565b6118096001600160a01b038616858563ffffffff61191f16565b5060015b949350505050565b6000828201838110156112615760405162461bcd60e51b81526004016100ec90612c9b565b61184c826001600160a01b0316611941565b6118685760405162461bcd60e51b81526004016100ec90612d3b565b60006060836001600160a01b0316836040516118849190612b31565b6000604051808303816000865af19150503d80600081146118c1576040519150601f19603f3d011682016040523d82523d6000602084013e6118c6565b606091505b5091509150816118e85760405162461bcd60e51b81526004016100ec90612cab565b8051156115be57808060200190516119039190810190611f48565b6115be5760405162461bcd60e51b81526004016100ec90612d0b565b60405161131b90849063a9059cbb60e01b906117009086908690602401612bed565b3b151590565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561126481612f64565b600082601f8301126119ab57600080fd5b81356119be6119b982612df9565b612dd3565b915081818352602084019350602081019050838560208402820111156119e357600080fd5b60005b83811015611a0f57816119f9888261198f565b84525060209283019291909101906001016119e6565b5050505092915050565b60008083601f840112611a2b57600080fd5b5081356001600160401b03811115611a4257600080fd5b602083019150836020820283011115611a5a57600080fd5b9250929050565b600082601f830112611a7257600080fd5b8151611a806119b982612df9565b91508181835260208401935060208101905083856060840282011115611aa557600080fd5b60005b83811015611a0f5781611abb8882611c7f565b84525060209092019160609190910190600101611aa8565b600082601f830112611ae457600080fd5b8135611af26119b982612df9565b81815260209384019390925082018360005b83811015611a0f5781358601611b1a8882611cda565b8452506020928301929190910190600101611b04565b600082601f830112611b4157600080fd5b8135611b4f6119b982612df9565b91508181835260208401935060208101905083856020840282011115611b7457600080fd5b60005b83811015611a0f5781611b8a8882611e21565b8452506020928301929190910190600101611b77565b805161126481612f78565b805161126481612f81565b600082601f830112611bc757600080fd5b8135611bd56119b982612e19565b91508082526020830160208301858383011115611bf157600080fd5b611bfc838284612f22565b50505092915050565b803561126481612f8a565b600060808284031215611c2257600080fd5b611c2c6080612dd3565b90506000611c3a8484611bab565b8252506020611c4b84848301611bab565b6020830152506040611c5f84828501611bab565b6040830152506060611c7384828501611bab565b60608301525092915050565b600060608284031215611c9157600080fd5b611c9b6060612dd3565b90506000611ca98484611e2c565b8252506020611cba84848301611bab565b6020830152506040611cce84828501611bab565b60408301525092915050565b60006101808284031215611ced57600080fd5b611cf8610180612dd3565b90506000611d06848461198f565b8252506020611d178484830161198f565b6020830152506040611d2b8482850161198f565b6040830152506060611d3f8482850161198f565b6060830152506080611d5384828501611e21565b60808301525060a0611d6784828501611e21565b60a08301525060c0611d7b84828501611e21565b60c08301525060e0611d8f84828501611e21565b60e083015250610100611da484828501611e21565b61010083015250610120611dba84828501611e21565b610120830152506101408201356001600160401b03811115611ddb57600080fd5b611de784828501611bb6565b610140830152506101608201356001600160401b03811115611e0857600080fd5b611e1484828501611bb6565b6101608301525092915050565b803561126481612f81565b805161126481612f93565b600060208284031215611e4957600080fd5b600061180d848461198f565b60008060008060008060008060c0898b031215611e7157600080fd5b6000611e7d8b8b61198f565b9850506020611e8e8b828c0161198f565b9750506040611e9f8b828c0161198f565b9650506060611eb08b828c01611e21565b95505060808901356001600160401b03811115611ecc57600080fd5b611ed88b828c01611a19565b945094505060a08901356001600160401b03811115611ef657600080fd5b611f028b828c01611a19565b92509250509295985092959890939650565b600060208284031215611f2657600080fd5b81516001600160401b03811115611f3c57600080fd5b61180d84828501611a61565b600060208284031215611f5a57600080fd5b600061180d8484611ba0565b60008060408385031215611f7957600080fd5b6000611f858585611c05565b9250506020611f968582860161198f565b9150509250929050565b6000806000806000806000806000806101008b8d031215611fc057600080fd5b6000611fcc8d8d611c05565b9a50506020611fdd8d828e0161198f565b9950506040611fee8d828e0161198f565b9850506060611fff8d828e0161198f565b97505060808b01356001600160401b0381111561201b57600080fd5b6120278d828e01611a19565b965096505060a08b01356001600160401b0381111561204557600080fd5b6120518d828e01611a19565b945094505060c06120648d828e01611e21565b92505060e06120758d828e01611e21565b9150509295989b9194979a5092959850565b6000806000806000806000806000806101408b8d0312156120a757600080fd5b60006120b38d8d611c05565b9a505060206120c48d828e01611c05565b99505060406120d58d828e01611e21565b98505060606120e68d828e01611e21565b97505060806120f78d828e01611e21565b96505060a06121088d828e0161198f565b95505060c08b01356001600160401b0381111561212457600080fd5b6121308d828e0161199a565b94505060e08b01356001600160401b0381111561214c57600080fd5b6121588d828e01611bb6565b9350506101008b01356001600160401b0381111561217557600080fd5b6121818d828e01611b30565b9250506101208b01356001600160401b0381111561219e57600080fd5b6120758d828e01611b30565b600080600080608085870312156121c057600080fd5b60006121cc8787611c05565b94505060206121dd87828801611c05565b93505060406121ee8782880161198f565b92505060608501356001600160401b0381111561220a57600080fd5b61221687828801611ad3565b91505092959194509250565b60006020828403121561223457600080fd5b600061180d8484611c05565b60006080828403121561225257600080fd5b600061180d8484611c10565b60006060828403121561227057600080fd5b600061180d8484611c7f565b60006020828403121561228e57600080fd5b600061180d8484611bab565b600061180d84848461248d565b60006122b38383612889565b505060600190565b60006122c783836128c0565b9392505050565b60006122c78383612a25565b6122e381612f17565b82525050565b6122e381612eea565b60006122fe8385612e4d565b93508360208402850161231084612e40565b8060005b8781101561235457848403895261232b8284612e6a565b61233686828461229a565b955061234184612e43565b60209b909b019a93505050600101612314565b5091979650505050505050565b600061236c82612e49565b6123768185612e4d565b935061238183612e43565b8060005b838110156123af57815161239988826122a7565b97506123a483612e43565b925050600101612385565b509495945050505050565b60006123c68385612e4d565b9350836020840285016123d884612e40565b8060005b878110156123545784840389526123f38284612eba565b6123fd85826122bb565b945061240883612e43565b60209a909a01999250506001016123dc565b600061242582612e49565b61242f8185612e4d565b93508360208202850161244185612e43565b8060005b85811015612354578484038952815161245e85826122ce565b945061246983612e43565b60209a909a0199925050600101612445565b6122e381612ef5565b6122e381612e40565b60006124998385612e4d565b93506124a6838584612f22565b6124af83612f5a565b9093019392505050565b60006124c482612e49565b6124ce8185612e56565b93506124de818560208601612f2e565b9290920192915050565b60006124f382612e49565b6124fd8185612e4d565b935061250d818560208601612f2e565b6124af81612f5a565b6122e381612efa565b600061252c601c83612e4d565b7f536d61727420636f6e7472616374206973207368757420646f776e2e00000000815260200192915050565b6000612565602683612e4d565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006125ad601b83612e4d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006125e6602083612e4d565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b600061261f601e83612e4d565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815260200192915050565b6000612658601a83612e4d565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000815260200192915050565b6000612691601b83612e4d565b7f52657475726e20616d6f756e74206973206e6f7420656e6f7567680000000000815260200192915050565b60006126ca602183612e4d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061270d602083612e4d565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000612746602a83612e4d565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b6000612792600d83612e4d565b6c1058d8d95cdcc819195b9a5959609a1b815260200192915050565b60006127bb603683612e4d565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b602082015260400192915050565b6000612813601f83612e4d565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b805160808301906128508482612484565b5060208201516128636020850182612484565b5060408201516128766040850182612484565b5060608201516115be6060850182612484565b8051606083019061289a8482612b28565b5060208201516128ad6020850182612484565b5060408201516115be6040850182612484565b600061018083016128d18380612e5b565b6128db85826122e9565b506128e96020840184612e5b565b6128f660208601826122e9565b506129046040840184612e5b565b61291160408601826122e9565b5061291f6060840184612e5b565b61292c60608601826122e9565b5061293a6080840184612edb565b6129476080860182612484565b5061295560a0840184612edb565b61296260a0860182612484565b5061297060c0840184612edb565b61297d60c0860182612484565b5061298b60e0840184612edb565b61299860e0860182612484565b506129a7610100840184612edb565b6129b5610100860182612484565b506129c4610120840184612edb565b6129d2610120860182612484565b506129e1610140840184612e6a565b8583036101408701526129f583828461248d565b92505050612a07610160840184612e6a565b858303610160870152612a1b83828461248d565b9695505050505050565b8051600090610180840190612a3a85826122e9565b506020830151612a4d60208601826122e9565b506040830151612a6060408601826122e9565b506060830151612a7360608601826122e9565b506080830151612a866080860182612484565b5060a0830151612a9960a0860182612484565b5060c0830151612aac60c0860182612484565b5060e0830151612abf60e0860182612484565b50610100830151612ad4610100860182612484565b50610120830151612ae9610120860182612484565b50610140830151848203610140860152612b0382826124e8565b915050610160830151848203610160860152612b1f82826124e8565b95945050505050565b6122e381612f11565b60006122c782846124b9565b6020810161126482846122e9565b6020810161126482846122da565b60408101612b6782856122da565b6122c760208301846122e9565b60408101612b6782856122e9565b60c08101612b90828b6122e9565b612b9d602083018a6122e9565b612baa60408301896122e9565b612bb76060830188612484565b8181036080830152612bca8186886123ba565b905081810360a0830152612bdf8184866122f2565b9a9950505050505050505050565b60408101612bfb82856122e9565b6122c76020830184612484565b602080825281016122c78184612361565b602080825281016122c7818461241a565b60208101611264828461247b565b60808101612c468287612516565b612c5360208301866122da565b612c6060408301856122da565b612b1f6060830184612484565b602081016112648284612516565b602080825281016112648161251f565b6020808252810161126481612558565b60208082528101611264816125a0565b60208082528101611264816125d9565b6020808252810161126481612612565b602080825281016112648161264b565b6020808252810161126481612684565b60208082528101611264816126bd565b6020808252810161126481612700565b6020808252810161126481612739565b6020808252810161126481612785565b60208082528101611264816127ae565b6020808252810161126481612806565b60808101611264828461283f565b602080825281016122c781846128c0565b60608082528101612d7b81876128c0565b9050612d8a6020830186612484565b8181036040830152612a1b81848661248d565b602081016112648284612484565b60808101612db98287612484565b612dc66020830186612484565b612c606040830185612484565b6040518181016001600160401b0381118282101715612df157600080fd5b604052919050565b60006001600160401b03821115612e0f57600080fd5b5060209081020190565b60006001600160401b03821115612e2f57600080fd5b506020601f91909101601f19160190565b90565b60200190565b5190565b90815260200190565b919050565b60006122c7602084018461198f565b6000808335601e1936859003018112612e8257600080fd5b8381016020810193503591506001600160401b03821115612ea257600080fd5b36829003841315612eb257600080fd5b509250929050565b6000823561017e1936849003018112612ed257600080fd5b90910192915050565b60006122c76020840184611e21565b600061126482612f05565b151590565b600061126482612eea565b6001600160a01b031690565b60ff1690565b600061126482612efa565b82818337506000910152565b60005b83811015612f49578181015183820152602001612f31565b838111156115be5750506000910152565b601f01601f191690565b612f6d81612eea565b8114610a1e57600080fd5b612f6d81612ef5565b612f6d81612e40565b612f6d81612efa565b612f6d81612f1156fea365627a7a72315820c54ee3c1ba530ca85ef298b219cd2a8b77dd4bdf84bc8e26cfcaa0bf126899e56c6578706572696d656e74616cf564736f6c634300050b0040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004d37f28d2db99e8d35a6c725a5f1749a085850a30000000000000000000000000000000000b3f879cb30fe243b4dfee438691c040000000000000000000000000000000000000000000000000000000000001388
-----Decoded View---------------
Arg [0] : _owner (address): 0x4D37f28D2db99e8d35A6C725a5f1749A085850a3
Arg [1] : _gasToken (address): 0x0000000000b3F879cb30FE243b4Dfee438691c04
Arg [2] : _fee (uint256): 5000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004d37f28d2db99e8d35a6c725a5f1749a085850a3
Arg [1] : 0000000000000000000000000000000000b3f879cb30fe243b4dfee438691c04
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001388
Deployed Bytecode Sourcemap
27442:3993:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14975:10;;-1:-1:-1;;;14975:10:0;;;;14974:11;14966:52;;;;-1:-1:-1;;;14966:52:0;;;;;;;;;;;;;;;;;28319:10;28333:9;28319:23;;28311:32;;;;;;27442:3993;9581:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9581:140:0;;;:::i;18886:1813::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18886:1813:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8770:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8770:79:0;;;:::i;:::-;;;;;;;;9136:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9136:92:0;;;:::i;:::-;;;;;;;;15482:494;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15482:494:0;;;;;;;;:::i;31273:159::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31273:159:0;;;;;;;;:::i;14878:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14878:22:0;;;:::i;30986:279::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30986:279:0;;;;;;;;:::i;27707:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27707:27:0;;;:::i;:::-;;;;;;;;9876:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9876:109:0;;;;;;;;:::i;28359:1550::-;;;;;;;;;:::i;:::-;;;;;;;;15046:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15046:99:0;;;:::i;15984:2198::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15984:2198:0;;;;;;;;:::i;:::-;;;;;;;;9581:140;8982:9;:7;:9::i;:::-;8974:54;;;;-1:-1:-1;;;8974:54:0;;;;;;;;;9680:1;9664:6;;9643:40;;-1:-1:-1;;;;;9664:6:0;;;;9643:40;;9680:1;;9643:40;9711:1;9694:19;;-1:-1:-1;;;;;;9694:19:0;;;9581:140::o;18886:1813::-;19195:25;;-1:-1:-1;;;19195:25:0;;19122:42;;-1:-1:-1;;;;;19195:17:0;;;;;:25;;19213:6;;19195:25;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19195:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19195:25:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;19195:25:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;19195:25:0;;;;;;;;;19182:38;-1:-1:-1;19238:6:0;19233:1459;19254:10;:17;19250:1;:21;19233:1459;;;19295:15;19313:5;-1:-1:-1;;;;;19313:15:0;;19329:6;19336:1;19329:9;;;;;;;;;;;;;;:22;;;19313:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19313:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19313:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19313:39:0;;;;;;;;;19295:57;;19367:17;19387:5;-1:-1:-1;;;;;19387:15:0;;19403:6;19410:1;19403:9;;;;;;;;;;;;;;:22;;;19427:13;19387:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19387:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19387:54:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19387:54:0;;;;;;;;;19367:74;;19456:28;19500:7;19488:9;:19;19487:43;;19523:7;19487:43;;;19511:9;19487:43;19456:74;;19545:28;19576:84;19633:6;19640:1;19633:9;;;;;;;;;;;;;;:26;;;19576:52;19601:6;19608:1;19601:9;;;;;;;;;;;;;;:26;;;19576:20;:24;;:52;;;;:::i;:::-;:56;:84;:56;:84;:::i;:::-;19545:115;-1:-1:-1;19682:6:0;19677:653;19698:1;19694;:5;19677:653;;;19757:6;19764:1;19757:9;;;;;;;;;;;;;;:22;;;-1:-1:-1;;;;;19731:48:0;:6;19738:1;19731:9;;;;;;;;;;;;;;:22;;;-1:-1:-1;;;;;19731:48:0;;19727:588;;;19806:37;19846:121;19903:10;19914:1;19903:13;;;;;;;;;;;;;;:41;;;19846:6;19853:1;19846:9;;;;;;;;;;;;;;:26;;;:30;;:121;;;;:::i;:::-;19806:161;;20019:29;19996:20;:52;19992:304;;;20102:55;:20;20127:29;20102:55;:24;:55;:::i;:::-;20079:78;;19992:304;;;20239:1;20216:24;;20267:5;;;19992:304;19727:588;;19701:3;;19677:653;;;;20346:28;20377:105;20426:10;20437:1;20426:13;;;;;;;;;;;;;;:41;;;20377:6;20384:1;20377:9;;;;;;;:105;20346:136;;20526:20;20503;:43;20499:182;;;20613:52;20644:20;20613:6;20620:1;20613:9;;;;;;;:52;20569:10;20580:1;20569:13;;;;;;;;;;;;;;:41;;:96;;;;;20499:182;-1:-1:-1;;19273:3:0;;;;;-1:-1:-1;19233:1459:0;;-1:-1:-1;;19233:1459:0;;;18886:1813;;;;;;:::o;8770:79::-;8808:7;8835:6;-1:-1:-1;;;;;8835:6:0;8770:79;:::o;9136:92::-;9176:4;9214:6;-1:-1:-1;;;;;9214:6:0;9200:10;:20;;9136:92::o;15482:494::-;15804:14;15821:49;15866:3;15821:40;15857:3;15821:9;-1:-1:-1;;;;;15821:19:0;;15841:10;15821:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15821:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15821:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15821:31:0;;;;;;;;;:35;:40;:35;:40;:::i;:49::-;15881:87;;-1:-1:-1;;;15881:87:0;;15804:66;;-1:-1:-1;15881:4:0;;:21;;:87;;15903:8;;15913:11;;15926:13;;15804:66;;15949:6;;;;15957:10;;;;15881:87;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15881:87:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15881:87:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15881:87:0;;;;;;;;;;15482:494;;;;;;;;;;;:::o;31273:159::-;14975:10;;-1:-1:-1;;;14975:10:0;;;;14974:11;14966:52;;;;-1:-1:-1;;;14966:52:0;;;;;;;;;31361:30;;-1:-1:-1;;;31361:30:0;;31344:14;;-1:-1:-1;;;;;31361:15:0;;;;;:30;;31385:4;;31361:30;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31361:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31361:30:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;31361:30:0;;;;;;;;;31402:22;;-1:-1:-1;;;31402:22:0;;31344:47;;-1:-1:-1;;;;;;31402:14:0;;;;;:22;;31344:47;;31402:22;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31402:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31402:22:0;;;;15029:1;31273:159;:::o;14878:22::-;;;-1:-1:-1;;;14878:22:0;;;;;:::o;30986:279::-;14975:10;;-1:-1:-1;;;14975:10:0;;;;14974:11;14966:52;;;;-1:-1:-1;;;14966:52:0;;;;;;;;;-1:-1:-1;;;;;31081:20:0;;27655:42;31081:20;31077:181;;31123:34;;-1:-1:-1;;;31123:34:0;;31161:3;;-1:-1:-1;;;;;31123:15:0;;;;;:34;;31147:4;;31154:2;;31123:34;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31123:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31123:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;31123:34:0;;;;;;;;;:41;;31118:129;;31191:40;-1:-1:-1;;;;;31191:22:0;;31214:2;-1:-1:-1;;31191:40:0;:22;:40;:::i;:::-;30986:279;;:::o;27707:27::-;;;-1:-1:-1;;;;;27707:27:0;;:::o;9876:109::-;8982:9;:7;:9::i;:::-;8974:54;;;;-1:-1:-1;;;8974:54:0;;;;;;;;;9949:28;9968:8;9949:18;:28::i;:::-;9876:109;:::o;28359:1550::-;28789:20;14975:10;;-1:-1:-1;;;14975:10:0;;;;14974:11;14966:52;;;;-1:-1:-1;;;14966:52:0;;;;;;;;;28827:19;28849:9;28827:31;-1:-1:-1;;;;;;28875:24:0;;27655:42;28875:24;28871:131;;28916:7;;;;;;;;;-1:-1:-1;;;;;28916:7:0;-1:-1:-1;;;;;28916:19:0;;28936:9;28947:10;28967:4;28974:15;28916:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28916:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28916:74:0;;;;28871:131;29019:6;29014:255;29035:13;:20;29031:1;:24;29014:255;;;29113:7;;29085:16;;-1:-1:-1;;;;;29113:7:0;;;;29085:13;;29099:1;;29085:16;;;;;;;;;;;;-1:-1:-1;;;;;29085:36:0;;;29077:62;;;;-1:-1:-1;;;29077:62:0;;;;;;;;;29162:94;29192:6;29199:1;29192:9;;;;;;;;;;;;;;29203:14;29219:6;29226:1;29219:9;;;;;;;;;;;;;;29246:6;29253:1;29246:9;;;;;;;;;;;;;;29230:6;29237:1;29241;29237:5;29230:13;;;;;;;;;;;;;;:25;29162:13;29176:1;29162:16;;;;;;;;;;;;;;-1:-1:-1;;;;;29162:29:0;;;:94;;;;;;;:::i;:::-;29154:103;;;;;;29057:3;;29014:255;;;-1:-1:-1;29296:41:0;-1:-1:-1;;;;;29296:26:0;;29331:4;29296:41;:26;:41;:::i;:::-;29281:56;;29349:21;29372:19;29395:62;29407:7;29416:8;29426:12;29440:16;29395:11;:62::i;:::-;29348:109;;;;29495:15;29478:13;:32;;29470:72;;;;-1:-1:-1;;;29470:72:0;;;;;;;;;29553:52;-1:-1:-1;;;;;29553:25:0;;29579:10;29591:13;29553:52;:25;:52;:::i;:::-;29749:8;-1:-1:-1;;;;;29623:217:0;29669:7;-1:-1:-1;;;;;29623:217:0;29645:9;-1:-1:-1;;;;;29623:217:0;;29691:15;29721:13;29772:11;29798:31;29815:13;29798:12;:16;;:31;;;;:::i;:::-;29623:217;;;;;;;;;;;;;;;;;;29853:7;;-1:-1:-1;;;;;29853:7:0;:20;29874:26;29890:9;29874:11;;:26;:15;:26;:::i;:::-;29853:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29853:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29853:48:0;;;;15029:1;;;28359:1550;;;;;;;;;;;;:::o;15046:99::-;8982:9;:7;:9::i;:::-;8974:54;;;;-1:-1:-1;;;8974:54:0;;;;;;;;;15094:10;:17;;-1:-1:-1;;;;15094:17:0;-1:-1:-1;;;15094:17:0;;;15127:10;;;;15094;15127;15046:99::o;15984:2198::-;16268:48;;:::i;:::-;16339:6;16334:1805;16351:17;;;16334:1805;;;16519:20;16476:16;:39;;;:63;16472:109;;16560:5;;16472:109;16666:28;16697:65;16722:16;:39;;;16697:20;:24;;:65;;;;:::i;:::-;16666:96;;16779:39;;:::i;:::-;16834:11;-1:-1:-1;;;;;16821:38:0;;16860:6;;16867:1;16860:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;16821:49:0;;-1:-1:-1;;;;;;16821:49:0;;;;;;;;;175:33:-1;;;;-1:-1;16821:49:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16821:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16821:49:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16821:49:0;;;;;;;;;16779:91;;16885:33;16921:69;16952:9;:37;;;16921:6;;16928:1;16921:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;175:33;;;16921:26:0;;;;;-1:-1:-1;16921:30:0;:69::i;:::-;16885:105;;17117:15;17149:10;-1:-1:-1;;;;;17135:35:0;;17171:6;;17178:1;17171:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;17171:22:0;;175:33:-1;17171:22:0;;;;-1:-1:-1;17171:22:0;;;17135:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17135:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17135:59:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17135:59:0;;;;;;;;;17117:77;;17213:17;17247:10;-1:-1:-1;;;;;17233:35:0;;17269:6;;17276:1;17269:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;17269:22:0;;175:33:-1;17269:22:0;;;;-1:-1:-1;17269:22:0;;;17293:13;17233:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17233:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17233:74:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17233:74:0;;;;;;;;;17213:94;;17326:28;17370:7;17358:9;:19;17357:43;;17393:7;17357:43;;;17381:9;17357:43;17326:74;;17419:28;17450:84;17507:6;;17514:1;17507:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;189:18;179:8;175:33;163:45;;0:211;17507:9:0;:26;;;17450:52;17475:6;;17482:1;17475:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;17450:20:0;;175:33:-1;17475:26:0;;;;-1:-1:-1;17450:24:0;:52::i;:84::-;17419:115;;17582:25;17559:20;:48;17555:145;;;17660:20;17632:48;;17555:145;16334:1805;;;;17731:19;17782:20;17754:25;:48;17753:101;;17834:20;17753:101;;;17806:25;17753:101;17731:123;;17871:43;;:::i;:::-;17930:11;-1:-1:-1;;;;;17917:42:0;;17978:6;;17985:1;17978:9;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:49;68:74;;58:2;;156:1;153;146:12;58:2;175:33;;;;;-1:-1;18006:11:0;18036:10;;18047:1;18036:13;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:48;68:73;;58:2;;155:1;152;145:12;58:2;174:33;;;69:4;55:19;;;-1:-1;16:22;-1:-1;;;;;82:30;;79:2;;;125:1;122;115:12;79:2;155:14;151:37;;;137:52;;134:2;;;202:1;199;192:12;134:2;17917:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17917:147:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17917:147:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17917:147:0;;;;;;;;;17871:193;;18081:46;18097:16;18115:11;18081:15;:46::i;:::-;-1:-1:-1;;16370:3:0;;;;;-1:-1:-1;16334:1805:0;;-1:-1:-1;;16334:1805:0;;-1:-1:-1;15984:2198:0;;;;;;;;;;:::o;6066:471::-;6124:7;6369:6;6365:47;;-1:-1:-1;6399:1:0;6392:8;;6365:47;6436:5;;;6440:1;6436;:5;:1;6460:5;;;;;:10;6452:56;;;;-1:-1:-1;;;6452:56:0;;;;;;;;;6528:1;-1:-1:-1;6066:471:0;;;;;:::o;7005:333::-;7063:7;7162:1;7158;:5;7150:44;;;;-1:-1:-1;;;7150:44:0;;;;;;;;;7205:9;7221:1;7217;:5;;;;;;;7005:333;-1:-1:-1;;;;7005:333:0:o;5631:184::-;5689:7;5722:1;5717;:6;;5709:49;;;;-1:-1:-1;;;5709:49:0;;;;;;;;;-1:-1:-1;5781:5:0;;;5631:184::o;25395:202::-;-1:-1:-1;;;;;25487:21:0;;;;;;:45;;-1:-1:-1;;;;;;25512:20:0;;24634:42;25512:20;;25487:45;25483:107;;;25549:29;-1:-1:-1;;;;;25549:17:0;;25567:2;25571:6;25549:29;:17;:29;:::i;:::-;25395:202;;;:::o;10091:229::-;-1:-1:-1;;;;;10165:22:0;;10157:73;;;;-1:-1:-1;;;10157:73:0;;;;;;;;;10267:6;;;10246:38;;-1:-1:-1;;;;;10246:38:0;;;;10267:6;;;10246:38;;;10295:6;:17;;-1:-1:-1;;;;;;10295:17:0;-1:-1:-1;;;;;10295:17:0;;;;;;;;;;10091:229::o;361:1186::-;486:11;614:4;608:11;748:2;742:4;738:13;1440:1;1420;1311:10;1281;1278:1;1274:18;1250:5;1220:11;872:5;867:3;863:15;840:689;830:699;584:956;-1:-1:-1;;;;;;;;584:956:0:o;26237:261::-;26315:7;-1:-1:-1;;;;;26339:21:0;;;;:45;;-1:-1:-1;;;;;;26364:20:0;;24634:42;26364:20;26339:45;26335:156;;;-1:-1:-1;;;;;;26408:11:0;;;26401:18;;26335:156;26459:20;;-1:-1:-1;;;26459:20:0;;-1:-1:-1;;;;;26459:15:0;;;;;:20;;26475:3;;26459:20;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26459:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26459:20:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26459:20:0;;;;;;;;;26452:27;;;;29917:1061;30112:21;30148:19;30215:16;30199:12;:32;30195:89;;-1:-1:-1;30256:12:0;;-1:-1:-1;30270:1:0;30248:24;;30195:89;30296:17;30316:54;30364:5;30316:43;30355:3;;30316:34;30333:16;30316:12;:16;;:34;;;;:::i;:54::-;30296:74;-1:-1:-1;;;;;;30387:22:0;;;;;;:48;;-1:-1:-1;;;;;;30413:22:0;;30425:10;30413:22;;30387:48;:73;;;;-1:-1:-1;;;;;;30439:21:0;;30451:9;30439:21;;30387:73;30383:403;;;30491:17;:9;30505:2;30491:17;:13;:17;:::i;:::-;30477:31;-1:-1:-1;30527:54:0;-1:-1:-1;;;;;30527:25:0;;30553:8;30477:31;30576:4;30527:54;:25;:54;:::i;:::-;30523:252;;;30617:29;:12;30634:11;30617:29;:16;:29;:::i;:::-;30602:44;-1:-1:-1;30677:26:0;:9;30691:11;30677:26;:13;:26;:::i;:::-;30665:38;;30523:252;;;30758:1;30744:15;;30523:252;30802:51;30828:7;:5;:7::i;:::-;-1:-1:-1;;;;;30802:25:0;;;30837:9;30848:4;30802:51;:25;:51;:::i;:::-;30798:126;;;30885:27;:12;30902:9;30885:27;:16;:27;:::i;:::-;30870:42;;30798:126;-1:-1:-1;30944:12:0;;-1:-1:-1;29917:1061:0;;;;;;;;:::o;24686:140::-;24775:43;24793:5;24800:2;24804:6;24812:5;24775:17;:43::i;:::-;;24686:140;;;:::o;18190:688::-;18475:40;;18431:39;;:85;;;:43;:85;:::i;:::-;18389:127;;18613:40;;;;;18569:39;;;;:85;;;:43;:85;:::i;:::-;18527:39;;;:127;18731:30;;;;;18697:29;;;;:65;;;:33;:65;:::i;:::-;18665:29;;;:97;18839:30;;;;;18805:29;;;;:65;;;:33;:65;:::i;:::-;18773:29;;;;:97;;;;-1:-1:-1;18190:688:0:o;21666:621::-;22036:10;;;22035:62;;-1:-1:-1;22052:39:0;;-1:-1:-1;;;22052:39:0;;-1:-1:-1;;;;;22052:15:0;;;;;:39;;22076:4;;22083:7;;22052:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22052:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22052:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;22052:39:0;;;;;;;;;:44;22035:62;22027:152;;;;-1:-1:-1;;;22027:152:0;;;;;;;;;22216:62;;22190:89;;22209:5;;-1:-1:-1;;;22239:22:0;22216:62;;22263:7;;22272:5;;22216:62;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;22216:62:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;22216:62:0;;;179:29:-1;;;;160:49;;;22190:18:0;:89::i;24834:553::-;24934:4;24955:11;24951:55;;-1:-1:-1;24990:4:0;24983:11;;24951:55;-1:-1:-1;;;;;25022:21:0;;;;:45;;-1:-1:-1;;;;;;25047:20:0;;24634:42;25047:20;25022:45;25018:362;;;25088:7;25084:196;;;25123:33;;-1:-1:-1;;;;;25123:25:0;;;:33;;;;;25149:6;;25123:33;;;;25149:6;25123:25;:33;;;;;;;25116:40;;;;25084:196;25197:37;;-1:-1:-1;;;;;25197:29:0;;;:37;;;;;25227:6;;25197:37;;;;25227:6;25197:29;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25197:37:0;25260:4;25253:11;;;;25018:362;25312:30;-1:-1:-1;;;;;25312:18:0;;25331:2;25335:6;25312:30;:18;:30;:::i;:::-;-1:-1:-1;25364:4:0;25018:362;24834:553;;;;;;:::o;5175:181::-;5233:7;5265:5;;;5289:6;;;;5281:46;;;;-1:-1:-1;;;5281:46:0;;;;;;;;23264:1114;23868:27;23876:5;-1:-1:-1;;;;;23868:25:0;;:27::i;:::-;23860:71;;;;-1:-1:-1;;;23860:71:0;;;;;;;;;24005:12;24019:23;24054:5;-1:-1:-1;;;;;24046:19:0;24066:4;24046:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;24004:67:0;;;;24090:7;24082:52;;;;-1:-1:-1;;;24082:52:0;;;;;;;;;24151:17;;:21;24147:224;;24293:10;24282:30;;;;;;;;;;;;;;24274:85;;;;-1:-1:-1;;;24274:85:0;;;;;;;;21270:176;21379:58;;21353:85;;21372:5;;-1:-1:-1;;;21402:23:0;21379:58;;21427:2;;21431:5;;21379:58;;;;14271:422;14638:20;14677:8;;;14271:422::o;27442:3993::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;27442:3993:0;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;313:707;;430:3;423:4;415:6;411:17;407:27;397:2;;448:1;445;438:12;397:2;485:6;472:20;507:80;522:64;579:6;522:64;;;507:80;;;498:89;;604:5;629:6;622:5;615:21;659:4;651:6;647:17;637:27;;681:4;676:3;672:14;665:21;;734:6;781:3;773:4;765:6;761:17;756:3;752:27;749:36;746:2;;;798:1;795;788:12;746:2;823:1;808:206;833:6;830:1;827:13;808:206;;;891:3;913:37;946:3;934:10;913:37;;;901:50;;-1:-1;974:4;965:14;;;;993;;;;;855:1;848:9;808:206;;;812:14;390:630;;;;;;;;1044:359;;;1181:3;1174:4;1166:6;1162:17;1158:27;1148:2;;1199:1;1196;1189:12;1148:2;-1:-1;1219:20;;-1:-1;;;;;1248:30;;1245:2;;;1291:1;1288;1281:12;1245:2;1325:4;1317:6;1313:17;1301:29;;1376:3;1368:4;1360:6;1356:17;1346:8;1342:32;1339:41;1336:2;;;1393:1;1390;1383:12;1336:2;1141:262;;;;;;1451:788;;1601:3;1594:4;1586:6;1582:17;1578:27;1568:2;;1619:1;1616;1609:12;1568:2;1649:6;1643:13;1671:102;1686:86;1765:6;1686:86;;1671:102;1662:111;;1790:5;1815:6;1808:5;1801:21;1845:4;1837:6;1833:17;1823:27;;1867:4;1862:3;1858:14;1851:21;;1920:6;1967:3;1959:4;1951:6;1947:17;1942:3;1938:27;1935:36;1932:2;;;1984:1;1981;1974:12;1932:2;2009:1;1994:239;2019:6;2016:1;2013:13;1994:239;;;2077:3;2099:70;2165:3;2153:10;2099:70;;;2087:83;;-1:-1;2193:4;2184:14;;;;2221:4;2212:14;;;;;2041:1;2034:9;1994:239;;2699:732;;2834:3;2827:4;2819:6;2815:17;2811:27;2801:2;;2852:1;2849;2842:12;2801:2;2889:6;2876:20;2911:98;2926:82;3001:6;2926:82;;2911:98;3037:21;;;3081:4;3069:17;;;;2902:107;;-1:-1;3094:14;;3069:17;3189:1;3174:251;3199:6;3196:1;3193:13;3174:251;;;3282:3;3269:17;3261:6;3257:30;3306:55;3357:3;3345:10;3306:55;;;3294:68;;-1:-1;3385:4;3376:14;;;;3404;;;;;3221:1;3214:9;3174:251;;3457:707;;3574:3;3567:4;3559:6;3555:17;3551:27;3541:2;;3592:1;3589;3582:12;3541:2;3629:6;3616:20;3651:80;3666:64;3723:6;3666:64;;3651:80;3642:89;;3748:5;3773:6;3766:5;3759:21;3803:4;3795:6;3791:17;3781:27;;3825:4;3820:3;3816:14;3809:21;;3878:6;3925:3;3917:4;3909:6;3905:17;3900:3;3896:27;3893:36;3890:2;;;3942:1;3939;3932:12;3890:2;3967:1;3952:206;3977:6;3974:1;3971:13;3952:206;;;4035:3;4057:37;4090:3;4078:10;4057:37;;;4045:50;;-1:-1;4118:4;4109:14;;;;4137;;;;;3999:1;3992:9;3952:206;;4172:128;4247:13;;4265:30;4247:13;4265:30;;4307:134;4385:13;;4403:33;4385:13;4403:33;;4449:432;;4546:3;4539:4;4531:6;4527:17;4523:27;4513:2;;4564:1;4561;4554:12;4513:2;4601:6;4588:20;4623:60;4638:44;4675:6;4638:44;;4623:60;4614:69;;4703:6;4696:5;4689:21;4739:4;4731:6;4727:17;4772:4;4765:5;4761:16;4807:3;4798:6;4793:3;4789:16;4786:25;4783:2;;;4824:1;4821;4814:12;4783:2;4834:41;4868:6;4863:3;4858;4834:41;;;4506:375;;;;;;;;5338:156;5418:20;;5443:46;5418:20;5443:46;;5879:864;;6007:4;5995:9;5990:3;5986:19;5982:30;5979:2;;;6025:1;6022;6015:12;5979:2;6043:20;6058:4;6043:20;;;6034:29;-1:-1;6131:1;6162:60;6218:3;6198:9;6162:60;;;6138:85;;-1:-1;6302:2;6335:60;6391:3;6367:22;;;6335:60;;;6328:4;6321:5;6317:16;6310:86;6244:163;6465:2;6498:60;6554:3;6545:6;6534:9;6530:22;6498:60;;;6491:4;6484:5;6480:16;6473:86;6417:153;6628:2;6661:60;6717:3;6708:6;6697:9;6693:22;6661:60;;;6654:4;6647:5;6643:16;6636:86;6580:153;5973:770;;;;;6786:684;;6908:4;6896:9;6891:3;6887:19;6883:30;6880:2;;;6926:1;6923;6916:12;6880:2;6944:20;6959:4;6944:20;;;6935:29;-1:-1;7021:1;7052:58;7106:3;7086:9;7052:58;;;7028:83;;-1:-1;7177:2;7210:60;7266:3;7242:22;;;7210:60;;;7203:4;7196:5;7192:16;7185:86;7132:150;7355:2;7388:60;7444:3;7435:6;7424:9;7420:22;7388:60;;;7381:4;7374:5;7370:16;7363:86;7292:168;6874:596;;;;;8240:2204;;8347:5;8335:9;8330:3;8326:19;8322:31;8319:2;;;8366:1;8363;8356:12;8319:2;8384:21;8399:5;8384:21;;;8375:30;-1:-1;8463:1;8494:49;8539:3;8519:9;8494:49;;;8470:74;;-1:-1;8613:2;8646:49;8691:3;8667:22;;;8646:49;;;8639:4;8632:5;8628:16;8621:75;8565:142;8772:2;8805:49;8850:3;8841:6;8830:9;8826:22;8805:49;;;8798:4;8791:5;8787:16;8780:75;8717:149;8925:2;8958:49;9003:3;8994:6;8983:9;8979:22;8958:49;;;8951:4;8944:5;8940:16;8933:75;8876:143;9081:3;9115:49;9160:3;9151:6;9140:9;9136:22;9115:49;;;9108:4;9101:5;9097:16;9090:75;9029:147;9238:3;9272:49;9317:3;9308:6;9297:9;9293:22;9272:49;;;9265:4;9258:5;9254:16;9247:75;9186:147;9387:3;9421:49;9466:3;9457:6;9446:9;9442:22;9421:49;;;9414:4;9407:5;9403:16;9396:75;9343:139;9536:3;9570:49;9615:3;9606:6;9595:9;9591:22;9570:49;;;9563:4;9556:5;9552:16;9545:75;9492:139;9698:3;9733:49;9778:3;9769:6;9758:9;9754:22;9733:49;;;9725:5;9718;9714:17;9707:76;9641:153;9844:3;9879:49;9924:3;9915:6;9904:9;9900:22;9879:49;;;9871:5;9864;9860:17;9853:76;9804:136;10028:3;10017:9;10013:19;10000:33;-1:-1;;;;;10045:6;10042:30;10039:2;;;10085:1;10082;10075:12;10039:2;10121:54;10171:3;10162:6;10151:9;10147:22;10121:54;;;10113:5;10106;10102:17;10095:81;9950:237;10275:3;10264:9;10260:19;10247:33;-1:-1;;;;;10292:6;10289:30;10286:2;;;10332:1;10329;10322:12;10286:2;10368:54;10418:3;10409:6;10398:9;10394:22;10368:54;;;10360:5;10353;10349:17;10342:81;10197:237;8313:2131;;;;;10451:130;10518:20;;10543:33;10518:20;10543:33;;10729:130;10805:13;;10823:31;10805:13;10823:31;;10866:241;;10970:2;10958:9;10949:7;10945:23;10941:32;10938:2;;;10986:1;10983;10976:12;10938:2;11021:1;11038:53;11083:7;11063:9;11038:53;;11114:1235;;;;;;;;;11400:3;11388:9;11379:7;11375:23;11371:33;11368:2;;;11417:1;11414;11407:12;11368:2;11452:1;11469:53;11514:7;11494:9;11469:53;;;11459:63;;11431:97;11559:2;11577:53;11622:7;11613:6;11602:9;11598:22;11577:53;;;11567:63;;11538:98;11667:2;11685:53;11730:7;11721:6;11710:9;11706:22;11685:53;;;11675:63;;11646:98;11775:2;11793:53;11838:7;11829:6;11818:9;11814:22;11793:53;;;11783:63;;11754:98;11911:3;11900:9;11896:19;11883:33;-1:-1;;;;;11928:6;11925:30;11922:2;;;11968:1;11965;11958:12;11922:2;11996:100;12088:7;12079:6;12068:9;12064:22;11996:100;;;11986:110;;;;11862:240;12161:3;12150:9;12146:19;12133:33;-1:-1;;;;;12178:6;12175:30;12172:2;;;12218:1;12215;12208:12;12172:2;12246:87;12325:7;12316:6;12305:9;12301:22;12246:87;;;12236:97;;;;12112:227;11362:987;;;;;;;;;;;;12356:436;;12518:2;12506:9;12497:7;12493:23;12489:32;12486:2;;;12534:1;12531;12524:12;12486:2;12569:24;;-1:-1;;;;;12602:30;;12599:2;;;12645:1;12642;12635:12;12599:2;12665:111;12768:7;12759:6;12748:9;12744:22;12665:111;;12799:257;;12911:2;12899:9;12890:7;12886:23;12882:32;12879:2;;;12927:1;12924;12917:12;12879:2;12962:1;12979:61;13032:7;13012:9;12979:61;;13063:392;;;13197:2;13185:9;13176:7;13172:23;13168:32;13165:2;;;13213:1;13210;13203:12;13165:2;13248:1;13265:66;13323:7;13303:9;13265:66;;;13255:76;;13227:110;13368:2;13386:53;13431:7;13422:6;13411:9;13407:22;13386:53;;;13376:63;;13347:98;13159:296;;;;;;13462:1513;;;;;;;;;;;13795:3;13783:9;13774:7;13770:23;13766:33;13763:2;;;13812:1;13809;13802:12;13763:2;13847:1;13864:66;13922:7;13902:9;13864:66;;;13854:76;;13826:110;13967:2;13985:53;14030:7;14021:6;14010:9;14006:22;13985:53;;;13975:63;;13946:98;14075:2;14093:53;14138:7;14129:6;14118:9;14114:22;14093:53;;;14083:63;;14054:98;14183:2;14201:53;14246:7;14237:6;14226:9;14222:22;14201:53;;;14191:63;;14162:98;14319:3;14308:9;14304:19;14291:33;-1:-1;;;;;14336:6;14333:30;14330:2;;;14376:1;14373;14366:12;14330:2;14404:100;14496:7;14487:6;14476:9;14472:22;14404:100;;;14394:110;;;;14270:240;14569:3;14558:9;14554:19;14541:33;-1:-1;;;;;14586:6;14583:30;14580:2;;;14626:1;14623;14616:12;14580:2;14654:87;14733:7;14724:6;14713:9;14709:22;14654:87;;;14644:97;;;;14520:227;14778:3;14797:53;14842:7;14833:6;14822:9;14818:22;14797:53;;;14787:63;;14757:99;14887:3;14906:53;14951:7;14942:6;14931:9;14927:22;14906:53;;;14896:63;;14866:99;13757:1218;;;;;;;;;;;;;;14982:1953;;;;;;;;;;;15357:3;15345:9;15336:7;15332:23;15328:33;15325:2;;;15374:1;15371;15364:12;15325:2;15409:1;15426:66;15484:7;15464:9;15426:66;;;15416:76;;15388:110;15529:2;15547:66;15605:7;15596:6;15585:9;15581:22;15547:66;;;15537:76;;15508:111;15650:2;15668:53;15713:7;15704:6;15693:9;15689:22;15668:53;;;15658:63;;15629:98;15758:2;15776:53;15821:7;15812:6;15801:9;15797:22;15776:53;;;15766:63;;15737:98;15866:3;15885:53;15930:7;15921:6;15910:9;15906:22;15885:53;;;15875:63;;15845:99;15975:3;15994:61;16047:7;16038:6;16027:9;16023:22;15994:61;;;15984:71;;15954:107;16120:3;16109:9;16105:19;16092:33;-1:-1;;;;;16137:6;16134:30;16131:2;;;16177:1;16174;16167:12;16131:2;16197:78;16267:7;16258:6;16247:9;16243:22;16197:78;;;16187:88;;16071:210;16340:3;16329:9;16325:19;16312:33;-1:-1;;;;;16357:6;16354:30;16351:2;;;16397:1;16394;16387:12;16351:2;16417:62;16471:7;16462:6;16451:9;16447:22;16417:62;;;16407:72;;16291:194;16544:3;16533:9;16529:19;16516:33;-1:-1;;;;;16561:6;16558:30;16555:2;;;16601:1;16598;16591:12;16555:2;16621:78;16691:7;16682:6;16671:9;16667:22;16621:78;;;16611:88;;16495:210;16764:3;16753:9;16749:19;16736:33;-1:-1;;;;;16781:6;16778:30;16775:2;;;16821:1;16818;16811:12;16775:2;16841:78;16911:7;16902:6;16891:9;16887:22;16841:78;;16942:855;;;;;17173:3;17161:9;17152:7;17148:23;17144:33;17141:2;;;17190:1;17187;17180:12;17141:2;17225:1;17242:66;17300:7;17280:9;17242:66;;;17232:76;;17204:110;17345:2;17363:73;17428:7;17419:6;17408:9;17404:22;17363:73;;;17353:83;;17324:118;17473:2;17491:53;17536:7;17527:6;17516:9;17512:22;17491:53;;;17481:63;;17452:98;17609:2;17598:9;17594:18;17581:32;-1:-1;;;;;17625:6;17622:30;17619:2;;;17665:1;17662;17655:12;17619:2;17685:96;17773:7;17764:6;17753:9;17749:22;17685:96;;;17675:106;;17560:227;17135:662;;;;;;;;17804:267;;17921:2;17909:9;17900:7;17896:23;17892:32;17889:2;;;17937:1;17934;17927:12;17889:2;17972:1;17989:66;18047:7;18027:9;17989:66;;18078:320;;18221:3;18209:9;18200:7;18196:23;18192:33;18189:2;;;18238:1;18235;18228:12;18189:2;18273:1;18290:92;18374:7;18354:9;18290:92;;18405:315;;18546:2;18534:9;18525:7;18521:23;18517:32;18514:2;;;18562:1;18559;18552:12;18514:2;18597:1;18614:90;18696:7;18676:9;18614:90;;18727:263;;18842:2;18830:9;18821:7;18817:23;18813:32;18810:2;;;18858:1;18855;18848:12;18810:2;18893:1;18910:64;18966:7;18946:9;18910:64;;18998:197;;19119:70;19185:3;19177:6;19169;19119:70;;19204:265;;19335:94;19425:3;19417:6;19335:94;;;-1:-1;;19458:4;19449:14;;19328:141;19478:233;;19617:88;19701:3;19693:6;19617:88;;;19603:102;19596:115;-1:-1;;;19596:115;19720:229;;19857:86;19939:3;19931:6;19857:86;;19957:142;20048:45;20087:5;20048:45;;;20043:3;20036:58;20030:69;;;20106:103;20179:24;20197:5;20179:24;;20363:903;;20529:91;20613:6;20608:3;20529:91;;;20522:98;;20643:3;20685:4;20677:6;20673:17;20668:3;20664:27;20712:65;20771:5;20712:65;;;20797:7;20825:1;20810:417;20835:6;20832:1;20829:13;20810:417;;;20897:9;20891:4;20887:20;20882:3;20875:33;20951:49;20993:6;20984:7;20951:49;;;21015:91;21101:4;21086:13;21071;21015:91;;;21007:99;;21123:69;21185:6;21123:69;;;21215:4;21206:14;;;;;21113:79;-1:-1;;;20857:1;20850:9;20810:417;;;-1:-1;21240:4;;20509:757;-1:-1;;;;;;;20509:757;21349:866;;21538:76;21608:5;21538:76;;;21627:108;21728:6;21723:3;21627:108;;;21620:115;;21756:78;21828:5;21756:78;;;21854:7;21882:1;21867:326;21892:6;21889:1;21886:13;21867:326;;;21959:6;21953:13;21980:107;22083:3;22068:13;21980:107;;;21973:114;;22104:82;22179:6;22104:82;;;22094:92;-1:-1;;21914:1;21907:9;21867:326;;;-1:-1;22206:3;;21517:698;-1:-1;;;;;21517:698;22290:977;;22482:104;22579:6;22574:3;22482:104;;;22475:111;;22609:3;22651:4;22643:6;22639:17;22634:3;22630:27;22678:78;22750:5;22678:78;;;22776:7;22804:1;22789:439;22814:6;22811:1;22808:13;22789:439;;;22876:9;22870:4;22866:20;22861:3;22854:33;22915:62;22970:6;22961:7;22915:62;;;22992:102;23089:4;23074:13;22992:102;;;22984:110;;23111:82;23186:6;23111:82;;;23216:4;23207:14;;;;;23101:92;-1:-1;;22836:1;22829:9;22789:439;;23342:992;;23523:72;23589:5;23523:72;;;23608:104;23705:6;23700:3;23608:104;;;23601:111;;23735:3;23777:4;23769:6;23765:17;23760:3;23756:27;23804:74;23872:5;23804:74;;;23898:7;23926:1;23911:384;23936:6;23933:1;23930:13;23911:384;;;23998:9;23992:4;23988:20;23983:3;23976:33;24043:6;24037:13;24065:100;24160:4;24145:13;24065:100;;;24057:108;;24182:78;24253:6;24182:78;;;24283:4;24274:14;;;;;24172:88;-1:-1;;23958:1;23951:9;23911:384;;24342:104;24419:21;24434:5;24419:21;;24453:103;24526:24;24544:5;24526:24;;24586:273;;24686:60;24739:6;24734:3;24686:60;;;24679:67;;24758:43;24794:6;24789:3;24782:5;24758:43;;;24823:29;24845:6;24823:29;;;24814:39;;;;24672:187;-1:-1;;;24672:187;25191:356;;25319:38;25351:5;25319:38;;;25369:88;25450:6;25445:3;25369:88;;;25362:95;;25462:52;25507:6;25502:3;25495:4;25488:5;25484:16;25462:52;;;25526:16;;;;;25299:248;-1:-1;;25299:248;25554:315;;25650:34;25678:5;25650:34;;;25696:60;25749:6;25744:3;25696:60;;;25689:67;;25761:52;25806:6;25801:3;25794:4;25787:5;25783:16;25761:52;;;25834:29;25856:6;25834:29;;25876:152;25972:50;26016:5;25972:50;;26211:364;;26371:67;26435:2;26430:3;26371:67;;;26471:66;26451:87;;26566:2;26557:12;;26357:218;-1:-1;;26357:218;26584:465;;26744:67;26808:2;26803:3;26744:67;;;26844:66;26824:87;;-1:-1;;;26940:2;26931:12;;26924:88;27040:2;27031:12;;26730:319;-1:-1;;26730:319;27058:364;;27218:67;27282:2;27277:3;27218:67;;;27318:66;27298:87;;27413:2;27404:12;;27204:218;-1:-1;;27204:218;27431:364;;27591:67;27655:2;27650:3;27591:67;;;27691:66;27671:87;;27786:2;27777:12;;27577:218;-1:-1;;27577:218;27804:364;;27964:67;28028:2;28023:3;27964:67;;;28064:66;28044:87;;28159:2;28150:12;;27950:218;-1:-1;;27950:218;28177:364;;28337:67;28401:2;28396:3;28337:67;;;28437:66;28417:87;;28532:2;28523:12;;28323:218;-1:-1;;28323:218;28550:364;;28710:67;28774:2;28769:3;28710:67;;;28810:66;28790:87;;28905:2;28896:12;;28696:218;-1:-1;;28696:218;28923:465;;29083:67;29147:2;29142:3;29083:67;;;29183:66;29163:87;;-1:-1;;;29279:2;29270:12;;29263:88;29379:2;29370:12;;29069:319;-1:-1;;29069:319;29397:364;;29557:67;29621:2;29616:3;29557:67;;;29657:66;29637:87;;29752:2;29743:12;;29543:218;-1:-1;;29543:218;29770:465;;29930:67;29994:2;29989:3;29930:67;;;30030:66;30010:87;;-1:-1;;;30126:2;30117:12;;30110:88;30226:2;30217:12;;29916:319;-1:-1;;29916:319;30244:364;;30404:67;30468:2;30463:3;30404:67;;;-1:-1;;;30484:87;;30599:2;30590:12;;30390:218;-1:-1;;30390:218;30617:465;;30777:67;30841:2;30836:3;30777:67;;;30877:66;30857:87;;-1:-1;;;30973:2;30964:12;;30957:88;31073:2;31064:12;;30763:319;-1:-1;;30763:319;31091:364;;31251:67;31315:2;31310:3;31251:67;;;31351:66;31331:87;;31446:2;31437:12;;31237:218;-1:-1;;31237:218;31536:840;31769:22;;31685:4;31676:14;;;31797:62;31680:3;31769:22;31797:62;;;31705:160;31956:4;31949:5;31945:16;31939:23;31968:63;32025:4;32020:3;32016:14;32002:12;31968:63;;;31875:162;32118:4;32111:5;32107:16;32101:23;32130:63;32187:4;32182:3;32178:14;32164:12;32130:63;;;32047:152;32280:4;32273:5;32269:16;32263:23;32292:63;32349:4;32344:3;32340:14;32326:12;32292:63;;32452:647;32656:22;;32583:4;32574:14;;;32684:58;32578:3;32656:22;32684:58;;;32603:145;32826:4;32819:5;32815:16;32809:23;32838:63;32895:4;32890:3;32886:14;32872:12;32838:63;;;32758:149;33003:4;32996:5;32992:16;32986:23;33015:63;33072:4;33067:3;33063:14;33049:12;33015:63;;33167:2671;;33300:5;33291:15;;33375:49;33412:5;;33375:49;;;33430:62;33482:3;33464:12;33430:62;;;33321:177;33562:50;33606:4;33599:5;33595:16;33588:5;33562:50;;;33618:63;33675:4;33670:3;33666:14;33652:12;33618:63;;;33508:179;33758:50;33802:4;33795:5;33791:16;33784:5;33758:50;;;33814:63;33871:4;33866:3;33862:14;33848:12;33814:63;;;33697:186;33948:50;33992:4;33985:5;33981:16;33974:5;33948:50;;;34004:63;34061:4;34056:3;34052:14;34038:12;34004:63;;;33893:180;34141:50;34185:4;34178:5;34174:16;34167:5;34141:50;;;34197:63;34254:4;34249:3;34245:14;34231:12;34197:63;;;34083:183;34334:50;34378:4;34371:5;34367:16;34360:5;34334:50;;;34390:63;34447:4;34442:3;34438:14;34424:12;34390:63;;;34276:183;34519:50;34563:4;34556:5;34552:16;34545:5;34519:50;;;34575:63;34632:4;34627:3;34623:14;34609:12;34575:63;;;34469:175;34704:50;34748:4;34741:5;34737:16;34730:5;34704:50;;;34760:63;34817:4;34812:3;34808:14;34794:12;34760:63;;;34654:175;34902:51;34946:5;34939;34935:17;34928:5;34902:51;;;34959:64;35016:5;35011:3;35007:15;34993:12;34959:64;;;34839:190;35085:51;35129:5;35122;35118:17;35111:5;35085:51;;;35142:64;35199:5;35194:3;35190:15;35176:12;35142:64;;;35039:173;35292:58;35343:5;35336;35332:17;35325:5;35292:58;;;35397:3;35391:4;35387:14;35379:5;35374:3;35370:15;35363:39;35417:83;35495:4;35481:12;35467;35417:83;;;35409:91;;35222:290;;35592:58;35643:5;35636;35632:17;35625:5;35592:58;;;35697:3;35691:4;35687:14;35679:5;35674:3;35670:15;35663:39;35717:83;35795:4;35781:12;35767;35717:83;;;35709:91;33273:2565;-1:-1;;;;;;33273:2565;38655:2271;38861:22;;38655:2271;;38786:5;38777:15;;;38889:62;38781:3;38861:22;38889:62;;;38807:150;39038:4;39031:5;39027:16;39021:23;39050:63;39107:4;39102:3;39098:14;39084:12;39050:63;;;38967:152;39207:4;39200:5;39196:16;39190:23;39219:63;39276:4;39271:3;39267:14;39253:12;39219:63;;;39129:159;39370:4;39363:5;39359:16;39353:23;39382:63;39439:4;39434:3;39430:14;39416:12;39382:63;;;39298:153;39536:4;39529:5;39525:16;39519:23;39548:63;39605:4;39600:3;39596:14;39582:12;39548:63;;;39461:156;39702:4;39695:5;39691:16;39685:23;39714:63;39771:4;39766:3;39762:14;39748:12;39714:63;;;39627:156;39860:4;39853:5;39849:16;39843:23;39872:63;39929:4;39924:3;39920:14;39906:12;39872:63;;;39793:148;40018:4;40011:5;40007:16;40001:23;40030:63;40087:4;40082:3;40078:14;40064:12;40030:63;;;39951:148;40189:5;40182;40178:17;40172:24;40202:64;40259:5;40254:3;40250:15;40236:12;40202:64;;;40109:163;40345:5;40338;40334:17;40328:24;40358:64;40415:5;40410:3;40406:15;40392:12;40358:64;;;40282:146;40511:5;40504;40500:17;40494:24;40565:3;40559:4;40555:14;40547:5;40542:3;40538:15;40531:39;40585:67;40647:4;40633:12;40585:67;;;40577:75;;40438:226;40747:5;40740;40736:17;40730:24;40801:3;40795:4;40791:14;40783:5;40778:3;40774:15;40767:39;40821:67;40883:4;40869:12;40821:67;;;40813:75;38759:2167;-1:-1;;;;;38759:2167;41163:97;41232:22;41248:5;41232:22;;41267:262;;41411:93;41500:3;41491:6;41411:93;;41536:213;41654:2;41639:18;;41668:71;41643:9;41712:6;41668:71;;41756:229;41882:2;41867:18;;41896:79;41871:9;41948:6;41896:79;;41992:340;42146:2;42131:18;;42160:79;42135:9;42212:6;42160:79;;;42250:72;42318:2;42307:9;42303:18;42294:6;42250:72;;42339:324;42485:2;42470:18;;42499:71;42474:9;42543:6;42499:71;;42670:1207;43098:3;43083:19;;43113:71;43087:9;43157:6;43113:71;;;43195:72;43263:2;43252:9;43248:18;43239:6;43195:72;;;43278;43346:2;43335:9;43331:18;43322:6;43278:72;;;43361;43429:2;43418:9;43414:18;43405:6;43361:72;;;43482:9;43476:4;43472:20;43466:3;43455:9;43451:19;43444:49;43507:156;43658:4;43649:6;43641;43507:156;;;43499:164;;43712:9;43706:4;43702:20;43696:3;43685:9;43681:19;43674:49;43737:130;43862:4;43853:6;43845;43737:130;;;43729:138;43069:808;-1:-1;;;;;;;;;;43069:808;43884:324;44030:2;44015:18;;44044:71;44019:9;44088:6;44044:71;;;44126:72;44194:2;44183:9;44179:18;44170:6;44126:72;;44215:449;44427:2;44441:47;;;44412:18;;44502:152;44412:18;44640:6;44502:152;;44671:433;44875:2;44889:47;;;44860:18;;44950:144;44860:18;45080:6;44950:144;;45111:201;45223:2;45208:18;;45237:65;45212:9;45275:6;45237:65;;45319:605;45550:3;45535:19;;45565:84;45539:9;45622:6;45565:84;;;45660:80;45736:2;45725:9;45721:18;45712:6;45660:80;;;45751;45827:2;45816:9;45812:18;45803:6;45751:80;;;45842:72;45910:2;45899:9;45895:18;45886:6;45842:72;;45931:255;46070:2;46055:18;;46084:92;46059:9;46149:6;46084:92;;46193:407;46384:2;46398:47;;;46369:18;;46459:131;46369:18;46459:131;;46607:407;46798:2;46812:47;;;46783:18;;46873:131;46783:18;46873:131;;47021:407;47212:2;47226:47;;;47197:18;;47287:131;47197:18;47287:131;;47435:407;47626:2;47640:47;;;47611:18;;47701:131;47611:18;47701:131;;47849:407;48040:2;48054:47;;;48025:18;;48115:131;48025:18;48115:131;;48263:407;48454:2;48468:47;;;48439:18;;48529:131;48439:18;48529:131;;48677:407;48868:2;48882:47;;;48853:18;;48943:131;48853:18;48943:131;;49091:407;49282:2;49296:47;;;49267:18;;49357:131;49267:18;49357:131;;49505:407;49696:2;49710:47;;;49681:18;;49771:131;49681:18;49771:131;;49919:407;50110:2;50124:47;;;50095:18;;50185:131;50095:18;50185:131;;50333:407;50524:2;50538:47;;;50509:18;;50599:131;50509:18;50599:131;;50747:407;50938:2;50952:47;;;50923:18;;51013:131;50923:18;51013:131;;51161:407;51352:2;51366:47;;;51337:18;;51427:131;51337:18;51427:131;;51575:326;51749:3;51734:19;;51764:127;51738:9;51864:6;51764:127;;51908:345;52068:2;52082:47;;;52053:18;;52143:100;52053:18;52229:6;52143:100;;52260:663;52500:2;52514:47;;;52485:18;;52575:100;52485:18;52661:6;52575:100;;;52567:108;;52686:72;52754:2;52743:9;52739:18;52730:6;52686:72;;;52806:9;52800:4;52796:20;52791:2;52780:9;52776:18;52769:48;52831:82;52908:4;52899:6;52891;52831:82;;52930:213;53048:2;53033:18;;53062:71;53037:9;53106:6;53062:71;;53150:547;53352:3;53337:19;;53367:71;53341:9;53411:6;53367:71;;;53449:72;53517:2;53506:9;53502:18;53493:6;53449:72;;;53532;53600:2;53589:9;53585:18;53576:6;53532:72;;53704:256;53766:2;53760:9;53792:17;;;-1:-1;;;;;53852:34;;53888:22;;;53849:62;53846:2;;;53924:1;53921;53914:12;53846:2;53940;53933:22;53744:216;;-1:-1;53744:216;53967:304;;-1:-1;;;;;54118:6;54115:30;54112:2;;;54158:1;54155;54148:12;54112:2;-1:-1;54193:4;54181:17;;;54246:15;;54049:222;55251:317;;-1:-1;;;;;55382:6;55379:30;55376:2;;;55422:1;55419;55412:12;55376:2;-1:-1;55553:4;55489;55466:17;;;;-1:-1;;55462:33;55543:15;;55313:255;55903:125;55998:3;55984:44;56035:173;56181:4;56172:14;;56129:79;56536:159;56661:12;;56632:63;57648:183;57771:19;;;57820:4;57811:14;;57764:67;58586:144;58721:3;58699:31;-1:-1;58699:31;58911:119;;58985:39;59020:2;59015:3;59011:12;59006:3;58985:39;;59039:496;;;59146:17;;-1:-1;;59211:14;59207:29;;;59203:48;59179:73;;59169:2;;59266:1;59263;59256:12;59169:2;59285:33;;;59385:4;59374:16;;;-1:-1;59340:19;;-1:-1;;;;;;59399:30;;59396:2;;;59442:1;59439;59432:12;59396:2;59473:14;59469:37;;;59455:52;;59452:2;;;59520:1;59517;59510:12;59452:2;59113:422;;;;;;;59544:297;;59656:17;;-1:-1;;59721:14;59717:29;;;59713:49;59689:74;;59679:2;;59777:1;59774;59767:12;59679:2;59796:33;;;;59623:218;-1:-1;;59623:218;59850:119;;59924:39;59959:2;59954:3;59950:12;59945:3;59924:39;;59977:91;;60039:24;60057:5;60039:24;;60181:85;60247:13;60240:21;;60223:43;60352:104;;60427:24;60445:5;60427:24;;60692:121;-1:-1;;;;;60754:54;;60737:76;60899:81;60970:4;60959:16;;60942:38;60987:129;;61074:37;61105:5;61074:37;;61955:145;62036:6;62031:3;62026;62013:30;-1:-1;62092:1;62074:16;;62067:27;62006:94;62109:268;62174:1;62181:101;62195:6;62192:1;62189:13;62181:101;;;62262:11;;;62256:18;62243:11;;;62236:39;62217:2;62210:10;62181:101;;;62297:6;62294:1;62291:13;62288:2;;;-1:-1;;62362:1;62344:16;;62337:27;62158:219;62385:97;62473:2;62453:14;-1:-1;;62449:28;;62433:49;62490:117;62559:24;62577:5;62559:24;;;62552:5;62549:35;62539:2;;62598:1;62595;62588:12;62754:111;62820:21;62835:5;62820:21;;62872:117;62941:24;62959:5;62941:24;;62996:143;63078:37;63109:5;63078:37;;63584:113;63651:22;63667:5;63651:22;
Swarm Source
bzzr://8c59ccff021a83d26af80f0ae27ae65fc175b110caabc0e0c3a1c87caaac1222
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.