Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 11343688 | 1430 days ago | IN | 0 ETH | 0.05908314 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
COREForkMigrator
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-28 */ // Sources flattened with hardhat v2.0.1 https://hardhat.org // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File @uniswap/lib/contracts/libraries/[email protected] // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.5.0; library AddressStringUtil { // converts an address to the uppercase hex string, extracting only len bytes (up to 20, multiple of 2) function toAsciiString(address addr, uint len) pure internal returns (string memory) { require(len % 2 == 0 && len > 0 && len <= 40, "AddressStringUtil: INVALID_LEN"); bytes memory s = new bytes(len); uint addrNum = uint(addr); for (uint i = 0; i < len / 2; i++) { // shift right and truncate all but the least significant byte to extract the byte at position 19-i uint8 b = uint8(addrNum >> (8 * (19 - i))); // first hex character is the most significant 4 bits uint8 hi = b >> 4; // second hex character is the least significant 4 bits uint8 lo = b - (hi << 4); s[2 * i] = char(hi); s[2 * i + 1] = char(lo); } return string(s); } // hi and lo are only 4 bits and between 0 and 16 // this method converts those values to the unicode/ascii code point for the hex representation // uses upper case for the characters function char(uint8 b) pure private returns (byte c) { if (b < 10) { return byte(b + 0x30); } else { return byte(b + 0x37); } } } // File @uniswap/lib/contracts/libraries/[email protected] pragma solidity >=0.5.0; // produces token descriptors from inconsistent or absent ERC20 symbol implementations that can return string or bytes32 // this library will always produce a string symbol to represent the token library SafeERC20Namer { function bytes32ToString(bytes32 x) pure private returns (string memory) { bytes memory bytesString = new bytes(32); uint charCount = 0; for (uint j = 0; j < 32; j++) { byte char = x[j]; if (char != 0) { bytesString[charCount] = char; charCount++; } } bytes memory bytesStringTrimmed = new bytes(charCount); for (uint j = 0; j < charCount; j++) { bytesStringTrimmed[j] = bytesString[j]; } return string(bytesStringTrimmed); } // assumes the data is in position 2 function parseStringData(bytes memory b) pure private returns (string memory) { uint charCount = 0; // first parse the charCount out of the data for (uint i = 32; i < 64; i++) { charCount <<= 8; charCount += uint8(b[i]); } bytes memory bytesStringTrimmed = new bytes(charCount); for (uint i = 0; i < charCount; i++) { bytesStringTrimmed[i] = b[i + 64]; } return string(bytesStringTrimmed); } // uses a heuristic to produce a token name from the address // the heuristic returns the full hex of the address string in upper case function addressToName(address token) pure private returns (string memory) { return AddressStringUtil.toAsciiString(token, 40); } // uses a heuristic to produce a token symbol from the address // the heuristic returns the first 6 hex of the address string in upper case function addressToSymbol(address token) pure private returns (string memory) { return AddressStringUtil.toAsciiString(token, 6); } // calls an external view token contract method that returns a symbol or name, and parses the output into a string function callAndParseStringReturn(address token, bytes4 selector) view private returns (string memory) { (bool success, bytes memory data) = token.staticcall(abi.encodeWithSelector(selector)); // if not implemented, or returns empty data, return empty string if (!success || data.length == 0) { return ""; } // bytes32 data always has length 32 if (data.length == 32) { bytes32 decoded = abi.decode(data, (bytes32)); return bytes32ToString(decoded); } else if (data.length > 64) { return abi.decode(data, (string)); } return ""; } // attempts to extract the token symbol. if it does not implement symbol, returns a symbol derived from the address function tokenSymbol(address token) internal view returns (string memory) { // 0x95d89b41 = bytes4(keccak256("symbol()")) string memory symbol = callAndParseStringReturn(token, 0x95d89b41); if (bytes(symbol).length == 0) { // fallback to 6 uppercase hex of address return addressToSymbol(token); } return symbol; } // attempts to extract the token name. if it does not implement name, returns a name derived from the address function tokenName(address token) internal view returns (string memory) { // 0x06fdde03 = bytes4(keccak256("name()")) string memory name = callAndParseStringReturn(token, 0x06fdde03); if (bytes(name).length == 0) { // fallback to full hex of address return addressToName(token); } return name; } } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File contracts/v612/ICOREGlobals.sol // COPYRIGHT cVault.finance TEAM // NO COPY // COPY = BAD // This code is provided with no assurances or guarantees of any kind. Use at your own responsibility. interface ICOREGlobals { function CORETokenAddress() external view returns (address); function COREGlobalsAddress() external view returns (address); function COREDelegatorAddress() external view returns (address); function COREVaultAddress() external returns (address); function COREWETHUniPair() external view returns (address); function UniswapFactory() external view returns (address); function TransferHandler() external view returns (address); function addDelegatorStateChangePermission(address that, bool status) external; function isStateChangeApprovedContract(address that) external view returns (bool); } // File @openzeppelin/contracts-ethereum-package/contracts/token/ERC20/[email protected] pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * 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); } // File @openzeppelin/contracts-ethereum-package/contracts/math/[email protected] pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { 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) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File @openzeppelin/contracts-ethereum-package/contracts/[email protected] pragma solidity >=0.4.24 <0.7.0; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } // File @openzeppelin/contracts-ethereum-package/contracts/GSN/[email protected] pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract ContextUpgradeSafe is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } // File @openzeppelin/contracts-ethereum-package/contracts/access/[email protected] pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @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(_owner == _msgSender(), "Ownable: caller is not the 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 virtual 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 virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } // File contracts/v612/COREForkMigrator.sol pragma solidity 0.6.12; // import "hardhat/console.sol"; // import "@openzeppelin/contracts/access/Ownable.sol"; interface ICOREVault { function addPendingRewards(uint256 _) external; } interface IUNICORE { function viewGovernanceLevel(address) external returns (uint8); function setVault(address) external; function burnFromUni(uint256) external; function viewUNIv2() external returns (address); function viewUniBurnRatio() external returns (uint256); function setGovernanceLevel(address, uint8) external; function balanceOf(address) external returns (uint256); function setUniBurnRatio(uint256) external; function viewwWrappedUNIv2() external returns (address); function burnToken(uint256) external; function totalSupply() external returns (uint256); } interface IUNICOREVault { function userInfo(uint,address) external view returns (uint256, uint256); } interface IProxyAdmin { function owner() external returns (address); function transferOwnership(address) external; function upgrade(address, address) external; } interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } interface ILGE { function claimLP() external; } interface ITransferContract { function run(address) external; } interface ICORE { function setShouldTransferChecker(address) external; } interface IFIX { function unwrapAndSendToMigrator() external; } interface ITimelockVault { function LPContributed(address) external view returns (uint256); } interface ILGE3 { function addLiquidityETH() payable external ; } contract TENSFeeApproverPermanent { address public tokenETHPair; constructor() public { tokenETHPair = 0xB1b537B7272BA1EDa0086e2f480AdCA72c0B511C; } function calculateAmountsAfterFee( address sender, address recipient, uint256 amount ) public returns (uint256 transferToAmount, uint256 transferToFeeDistributorAmount, uint256 burn) { // Will block all buys and liquidity removals if(sender == tokenETHPair || recipient == tokenETHPair) { // This is how a legend dies require(false, "TENS is deprecated."); } // No fees // school is out transferToAmount = amount; } } contract COREForkMigrator is OwnableUpgradeSafe { using SafeMath for uint256; /// EVENTS event ETHSendToLGE(uint256); ///Variables bool public LPClaimedFromLGE; bool private locked; IERC20 public CORE; ICOREVault public coreVault; IUniswapV2Factory public uniswapFactory; IWETH wETH; address public CORExWETHPair; address payable public CORE_MULTISIG; address public postLGELPTokenAddress; address public Fee_Approver_Permanent; address public Vault_Permanent; uint256 public totalLPClaimed; uint256 public totalETHSent; uint256 contractStartTimestamp; mapping (address => bool) LPClaimed; //// UNICORE Specific Variables bool public UNICORE_Migrated; bool public UNICORE_Liquidity_Transfered; address public UNICORE_Vault; address public UNICORE_Token; address public UNICORE_Reactor_Token; // Slit token for liquidity uint256 public UNICORE_Snapshot_Block; uint256 public Ether_Total_For_UNICORE_LP; uint256 public UNICORE_Total_LP_Supply; mapping (address => uint256) balanceUNICOREReactor; mapping (address => uint256) balanceUNICOREReactorInVaultOnSnapshot; // ENCORE Specific variables bool public ENCORE_Liquidity_Transfered; bool public ENCORE_Transfers_Closed; address public ENCORE_Vault; address public ENCORE_Vault_Timelock; address public ENCORE_Fee_Approver; address public ENCORE_Token; address public ENCORE_Timelock_Vault; address public ENCORE_Proxy_Admin; address public ENCORE_LP_Token; address public ENCORE_Migrator; uint256 public Ether_Credit_Per_ENCORE_LP; uint256 public Ether_Total_For_Encore_LP; uint256 public ENCORE_Total_LP_Supply; mapping (address => uint256) balanceENCORELP; // No need for snapshot /// TENS Specific functions and variables bool public TENS_Liquidity_Transfered; address public TENS_Vault; address public TENS_Token; address public TENS_Proxy_Admin; address public TENS_LP_Token; address public TENS_Fee_Approver_Permanent; uint256 public Ether_Total_For_TENS_LP; uint256 public TENS_Total_LP_Supply; mapping (address => uint256) balanceTENSLP; // No need for snapshot address public LGE3; /// Reentrancy modifier modifier lock() { require(locked == false, 'CORE Migrator: Execution Locked'); locked = true; _; locked = false; } // Constructor function initialize() initializer public{ require(tx.origin == 0x5A16552f59ea34E44ec81E58b3817833E9fD5436); require(msg.sender == 0x5A16552f59ea34E44ec81E58b3817833E9fD5436); OwnableUpgradeSafe.__Ownable_init(); CORE_MULTISIG = 0x5A16552f59ea34E44ec81E58b3817833E9fD5436; contractStartTimestamp = block.timestamp; // Permanent vault and fee approver Vault_Permanent = 0xfeD4Ec1348a4068d4934E09492428FD92E399e5c; Fee_Approver_Permanent = 0x43Dd7026284Ac8f95Eb02bB1bd68D0699B0Ae9cA; //UNICORE UNICORE_Vault = 0x6F31ECD8110bcBc679AEfb74c7608241D1B78949; UNICORE_Token = 0x5506861bbb104Baa8d8575e88E22084627B192D8; //TENS TENS_Vault = 0xf983EcF91195bD63DE8445997082680E688749BC; TENS_Token = 0x776CA7dEd9474829ea20AD4a5Ab7a6fFdB64C796; TENS_Proxy_Admin = 0x2d0C48C5BF930A09F8CD6fae5aC5A16b24e1723a; TENS_LP_Token = 0xB1b537B7272BA1EDa0086e2f480AdCA72c0B511C; TENS_Fee_Approver_Permanent = 0x22C91cDd1E00cD4d7D029f0dB94020Fce3C486e3; ENCORE_Proxy_Admin = 0x1964784ba40c9fD5EED1070c1C38cd5D1d5F9f55; ENCORE_Token = 0xe0E4839E0c7b2773c58764F9Ec3B9622d01A0428; ENCORE_LP_Token = 0x2e0721E6C951710725997928DcAAa05DaaFa031B; ENCORE_Fee_Approver = 0xF3c3ff0ea59d15e82b9620Ed7406fa3f6A261f98; ENCORE_Vault = 0xdeF7BdF8eCb450c1D93C5dB7C8DBcE5894CCDaa9; ENCORE_Vault_Timelock = 0xC2Cb86437355f36d42Fb8D979ab28b9816ac0545; Ether_Credit_Per_ENCORE_LP = uint256(1 ether).div(2).mul(10724).div(10000); // Account for 7.24% fee on LGE ICOREGlobals globals = ICOREGlobals(0x255CA4596A963883Afe0eF9c85EA071Cc050128B); CORE = IERC20(globals.CORETokenAddress()); uniswapFactory = IUniswapV2Factory(globals.UniswapFactory()); coreVault = ICOREVault(globals.COREVaultAddress()); CORExWETHPair = globals.COREWETHUniPair(); wETH = IWETH(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); } //Enables recieving eth receive() external payable{ } function setLPTokenAddress(address _token) onlyOwner public { postLGELPTokenAddress = _token; } function claimLP() lock public { require(LPClaimedFromLGE == true, "Nothing to claim yet"); require(getOwedLP(msg.sender) > 0, "nothing to claim"); require(IERC20(postLGELPTokenAddress).transfer(msg.sender, getOwedLP(msg.sender))); LPClaimed[msg.sender] = true; } function getOwedLP(address user) public view returns (uint256 LPDebtForUser) { if(postLGELPTokenAddress == address (0)) return 0; if(LPClaimedFromLGE == false) return 0; if(LPClaimed[msg.sender] == true) return 0; uint256 balanceUNICORE = viewCreditedUNICOREReactors(user); uint256 balanceENCORE = viewCreditedENCORETokens(user); uint256 balanceTENS = viewCreditedTENSTokens(user); if(balanceUNICORE == 0 && balanceENCORE == 0 && balanceTENS == 0) return 0; uint256 totalETH = Ether_Total_For_TENS_LP.add(Ether_Total_For_UNICORE_LP).add(Ether_Total_For_Encore_LP); uint256 totalETHEquivalent; if(balanceUNICORE > 0){ totalETHEquivalent = Ether_Total_For_UNICORE_LP.div(UNICORE_Total_LP_Supply).mul(balanceUNICORE); } if(balanceENCORE > 0){ totalETHEquivalent = totalETHEquivalent.add(Ether_Total_For_Encore_LP).div(ENCORE_Total_LP_Supply).mul(balanceENCORE); } if(balanceTENS > 0){ totalETHEquivalent = totalETHEquivalent.add(Ether_Total_For_TENS_LP).div(TENS_Total_LP_Supply).mul(balanceTENS); } LPDebtForUser = totalETHEquivalent.mul(totalLPClaimed).div(totalETH).div(1e18); } //////////// /// Unicore specific functions ////////// function snapshotUNICORE(address[] memory _addresses, uint256[] memory balances) onlyOwner public { require(UNICORE_Migrated == true, "UNICORE Deposits are still not closed"); uint256 length = _addresses.length; require(length == balances.length, "Wrong input"); for (uint256 i = 0; i < length; i++) { balanceUNICOREReactorInVaultOnSnapshot[_addresses[i]] = balances[i]; } } function setUnicoreReactorToken ( address _token ) onlyOwner public { UNICORE_Reactor_Token = _token; } function viewCreditedUNICOREReactors(address person) public view returns (uint256) { if(UNICORE_Migrated) { return balanceUNICOREReactorInVaultOnSnapshot[person].add(balanceUNICOREReactor[person]); } else { (uint256 userAmount, ) = IUNICOREVault(UNICORE_Vault).userInfo(0, person); return balanceUNICOREReactor[person].add(userAmount); } } function addUNICOREReactors() lock public { require(UNICORE_Migrated == false, "UNICORE Deposits closed"); uint256 amtAdded = transferTokenHereSupportingFeeOnTransferTokens(UNICORE_Reactor_Token, IERC20(UNICORE_Reactor_Token).balanceOf(msg.sender)); balanceUNICOREReactor[msg.sender] = balanceUNICOREReactor[msg.sender].add(amtAdded); } // // Unicore migraiton is special and a-typical // // Because of the extensive changes to the code-base. // function transferUNICORELiquidity() onlyOwner public { // require(ENCORE_Liquidity_Transfered == true, "ENCORE has to go first"); // require(UNICORE_Liquidity_Transfered == false, "UNICORE already transfered"); // // Make sure we have the proper permissions. // require(IUNICORE(UNICORE_Token).viewGovernanceLevel(address(this)) == 2, "Incorrectly set governance level, can't proceed"); // require(IUNICORE(UNICORE_Token).viewGovernanceLevel(0x5A16552f59ea34E44ec81E58b3817833E9fD5436) == 2, "Incorrectly set governance level, can't proceed"); // require(IUNICORE(UNICORE_Token).viewGovernanceLevel(0x05957F3344255fDC9fE172E30016ee148D684313) == 0, "Incorrectly set governance level, can't proceed"); // require(IUNICORE(UNICORE_Token).viewGovernanceLevel(0xE6f32f17BE3Bf031B4B6150689C1f17cEcA375C8) == 0, "Incorrectly set governance level, can't proceed"); // require(IUNICORE(UNICORE_Token).viewGovernanceLevel(0xF4D7a0E8a68345442172F45cAbD272c25320AA96) == 0, "Incorrectly set governance level, can't proceed"); // require(address(this).balance >= 1e18, " Feed me eth"); // IUNICORE unicore = IUNICORE(UNICORE_Token); // wETH.deposit{value: 1e18}(); // IUniswapV2Pair pair = IUniswapV2Pair(unicore.viewUNIv2()); // bool token0IsWETH = pair.token0() == address(wETH); // (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); // wETH.transfer(address(pair), 1e18); // uint256 amtUnicore; // if(token0IsWETH){ // amtUnicore = getAmountOut(1e18, reserve0, reserve1); // pair.swap(0, amtUnicore, address(this), ""); // } // else{ // amtUnicore = getAmountOut(1e18, reserve1, reserve0); // pair.swap(amtUnicore, 0, address(this), ""); // } // unicore.setVault(address(this)); // unicore.setUniBurnRatio(100); // uint256 balUnicoreOfUniPair = unicore.balanceOf(unicore.viewUNIv2()); // uint256 totalSupplywraps = IERC20(unicore.viewwWrappedUNIv2()).totalSupply(); // UNICORE_Total_LP_Supply = totalSupplywraps; // uint256 input = (balUnicoreOfUniPair-1).mul(totalSupplywraps).div(balUnicoreOfUniPair); // unicore.burnFromUni(input); // { // (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); // uint256 amtWETH; // uint256 previousPairBalance = unicore.balanceOf(address(pair)); // IERC20(address(unicore)).transfer(address(pair), unicore.balanceOf(address(this))); // uint256 nowPairBalance = unicore.balanceOf(address(pair)); // if(token0IsWETH){ // amtWETH = getAmountOut(nowPairBalance- previousPairBalance, reserve1, reserve0); // pair.swap(amtWETH, 0, address(this), ""); // ( reserve0, reserve1, ) = pair.getReserves(); // require(reserve0 < 1e18, " Burn not sufficient"); // } // else{ // amtWETH = getAmountOut(nowPairBalance- previousPairBalance, reserve0, reserve1); // pair.swap(0, amtWETH, address(this), ""); // ( reserve0, reserve1, ) = pair.getReserves(); // require(reserve1 < 1e18, " Burn not sufficient"); // } // uint256 UNICORETotalSupply = unicore.totalSupply(); // // 0.6 eth per is the floor we should get more here // require(amtWETH > UNICORETotalSupply.mul(60).div(100), " Didn't get enough ETH "); // require(amtWETH > 500 ether, " Didn't get enough ETH"); // sanity // Ether_Total_For_UNICORE_LP = amtWETH // .mul(Ether_Credit_Per_ENCORE_LP) // .div(1e18); // address wethFixed = address(new fixWETH()); // wETH.transfer(wethFixed, amtWETH); // { // uint256 ethBalBefore = address(this).balance; // IFIX(wethFixed).unwrapAndSendToMigrator(); // uint256 newETH = address(this).balance.sub(ethBalBefore); // require(newETH == amtWETH, "Fix unsucessful"); // } // unicore.setGovernanceLevel(address(this), 1); // UNICORE_Liquidity_Transfered = true; // } // } //////////// /// ENCORE specific functions ////////// function viewCreditedENCORETokens(address person) public view returns (uint256) { (uint256 userAmount, ) = IUNICOREVault(ENCORE_Vault).userInfo(0, person); uint256 userAmountTimelock = ITimelockVault(ENCORE_Vault_Timelock).LPContributed(person); return balanceENCORELP[person].add(userAmount).add(userAmountTimelock); } // Add LP to balance here function addENCORELPTokens() lock public { require(ENCORE_Transfers_Closed == false, "ENCORE LP transfers closed"); uint256 amtAdded = transferTokenHereSupportingFeeOnTransferTokens(ENCORE_LP_Token, IERC20(ENCORE_LP_Token).balanceOf(msg.sender)); balanceENCORELP[msg.sender] = balanceENCORELP[msg.sender].add(amtAdded); } function closeENCORETransfers() onlyOwner public { require(block.timestamp >= contractStartTimestamp.add(2 days), "2 day grace ongoing"); ENCORE_Transfers_Closed = true; } function transferENCORELiquidity(address privateTransferContract) onlyOwner public { require(ENCORE_Transfers_Closed == true, "ENCORE LP transfers still ongoing"); require(ENCORE_Liquidity_Transfered == false, "Already transfered liquidity"); require(IProxyAdmin(ENCORE_Proxy_Admin).owner() == address(this), "Set me as the proxy owner for ENCORE"); require(privateTransferContract != address(0)); IProxyAdmin(ENCORE_Proxy_Admin).transferOwnership(privateTransferContract); // We check 2 contracts with burned LP uint256 burnedLPTokens = IERC20(ENCORE_LP_Token).balanceOf(ENCORE_Token) .add(IERC20(ENCORE_LP_Token).balanceOf(0x2a997EaD7478885a66e6961ac0837800A07492Fc)); ENCORE_Total_LP_Supply = IERC20(ENCORE_LP_Token).totalSupply() - burnedLPTokens; // We calculate total owed to ENCORE LPs Ether_Total_For_Encore_LP = ENCORE_Total_LP_Supply // burned ~100 .mul(Ether_Credit_Per_ENCORE_LP) .div(1e18); // We send out all LP tokens we have IERC20(ENCORE_LP_Token) .transfer(ENCORE_LP_Token, IERC20(ENCORE_LP_Token).balanceOf(address(this))); uint256 ethBalBefore = address(this).balance; ITransferContract(privateTransferContract).run(ENCORE_LP_Token); uint256 newETH = address(this).balance.sub(ethBalBefore); // Make sure we got eth require(newETH > 9200 ether, "Did not recieve enough ether"); //60% max require(newETH.mul(60).div(100) > Ether_Total_For_Encore_LP, "Too much for encore LP"); require(ENCORE_Proxy_Admin != address(0) && Fee_Approver_Permanent != address(0) && Vault_Permanent != address(0), "Sanity check failue"); IProxyAdmin(ENCORE_Proxy_Admin).upgrade(ENCORE_Fee_Approver, Fee_Approver_Permanent); IProxyAdmin(ENCORE_Proxy_Admin).upgrade(ENCORE_Vault, Vault_Permanent); _sendENCOREProxyAdminBackToMultisig(); ENCORE_Liquidity_Transfered = true; } function sendENCOREProxyAdminBackToMultisig() onlyOwner public { return _sendENCOREProxyAdminBackToMultisig(); } function _sendENCOREProxyAdminBackToMultisig() internal { IProxyAdmin(ENCORE_Proxy_Admin).transferOwnership(CORE_MULTISIG); require(IProxyAdmin(ENCORE_Proxy_Admin).owner() == CORE_MULTISIG, "Proxy Ownership Transfer Not Successfull"); } //////////// /// TENS specific functions ////////// function addTENSLPTokens() lock public { require(ENCORE_Transfers_Closed == false, "TENS LP transfers still ongoing"); uint256 amtAdded = transferTokenHereSupportingFeeOnTransferTokens(TENS_LP_Token, IERC20(TENS_LP_Token).balanceOf(msg.sender)); balanceTENSLP[msg.sender] = balanceTENSLP[msg.sender].add(amtAdded); } function viewCreditedTENSTokens(address person) public view returns (uint256) { (uint256 userAmount, ) = IUNICOREVault(TENS_Vault).userInfo(0, person); return balanceTENSLP[person].add(userAmount); } function transferTENSLiquidity(address privateTransferContract) onlyOwner public { require(TENS_Liquidity_Transfered == false, "Already transfered"); require(ENCORE_Liquidity_Transfered == true, "ENCORE has to go first"); require(IProxyAdmin(TENS_Proxy_Admin).owner() == address(this), "Set me as the proxy owner for TENS"); require(IProxyAdmin(TENS_Token).owner() == address(this), "Set me as the owner for TENS"); // same interface require(privateTransferContract != address(0)); IProxyAdmin(TENS_Proxy_Admin).transferOwnership(privateTransferContract); IProxyAdmin(TENS_Token).transferOwnership(privateTransferContract); TENS_Total_LP_Supply = IERC20(TENS_LP_Token).totalSupply(); // We send out all LP tokens we have IERC20(TENS_LP_Token) .transfer(TENS_LP_Token, IERC20(TENS_LP_Token).balanceOf(address(this))); uint256 ethBalBefore = address(this).balance; ITransferContract(privateTransferContract).run(TENS_LP_Token); uint256 newETH = address(this).balance.sub(ethBalBefore); require(newETH > 130 ether, "Did not recieve enough ether"); require(TENS_Fee_Approver_Permanent != address(0) && Vault_Permanent != address(0), "Sanity check failue"); IProxyAdmin(TENS_Proxy_Admin).upgrade(TENS_Vault, Vault_Permanent); TENS_Fee_Approver_Permanent = address ( new TENSFeeApproverPermanent() ); ICORE(TENS_Token).setShouldTransferChecker(TENS_Fee_Approver_Permanent); Ether_Total_For_TENS_LP = newETH .mul(Ether_Credit_Per_ENCORE_LP) .div(1e18); _sendOwnershipOfTENSBackToMultisig(); TENS_Liquidity_Transfered = true; } function sendOwnershipOfTENSBackToMultisig() onlyOwner public { return _sendOwnershipOfTENSBackToMultisig(); } function _sendOwnershipOfTENSBackToMultisig() internal { IProxyAdmin(TENS_Token).transferOwnership(CORE_MULTISIG); require(IProxyAdmin(TENS_Token).owner() == CORE_MULTISIG, "Multisig not owner of token"); // same interface IProxyAdmin(TENS_Proxy_Admin).transferOwnership(CORE_MULTISIG); require(IProxyAdmin(TENS_Proxy_Admin).owner() == CORE_MULTISIG, "Multisig not owner of proxyadmin"); } /////////////////// //// Helper functions ////////////////// function sendETH(address payable to, uint256 amt) internal { // // throw exception on failure to.transfer(amt); } function safeTransfer(address token, address to, uint256 value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'FA Controller: TRANSFER_FAILED'); } function transferTokenHereSupportingFeeOnTransferTokens(address token,uint256 amountTransfer) internal returns (uint256 amtAdded) { uint256 balBefore = IERC20(token).balanceOf(address(this)); require(IERC20(token).transferFrom(msg.sender, address(this), amountTransfer)); amtAdded = IERC20(token).balanceOf(address(this)).sub(balBefore); } function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) internal pure returns (uint256 amountOut) { require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // A function that lets owner remove any tokens from this addrss // note this address shoudn't hold any tokens // And if it does that means someting already went wrong or someone send them to this address function rescueUnsupportedTokens(address token, uint256 amt) public onlyOwner { IERC20(token).transfer(CORE_MULTISIG, amt); } function sendETHToLGE(uint256 amt) onlyOwner public { uint256 totalETH = Ether_Total_For_TENS_LP.add(Ether_Total_For_UNICORE_LP).add(Ether_Total_For_Encore_LP); totalETHSent = totalETHSent.add(amt); require(totalETHSent <= totalETH, "Too much sent"); require(LGE3 != address(0), "LGE address set incorrectly"); ILGE3(LGE3).addLiquidityETH{value:amt}(); emit ETHSendToLGE(amt); } function sendETHToTreasury(uint256 amt, address payable to) onlyOwner public { uint256 totalETH = Ether_Total_For_TENS_LP.add(Ether_Total_For_UNICORE_LP).add(Ether_Total_For_Encore_LP); require(totalETHSent == totalETH, "Still money to send to LGE"); require(to != address(0)," no "); sendETH(to, amt); } function getETHLeftToDepositToLGE() public view returns (uint256) { uint256 totalETH = Ether_Total_For_TENS_LP.add(Ether_Total_For_UNICORE_LP).add(Ether_Total_For_Encore_LP); return totalETH - totalETHSent; } function claimLPFromLGE(address lgeContract) onlyOwner public { require(postLGELPTokenAddress != address(0), "LP token address not set."); ILGE(lgeContract).claimLP(); LPClaimedFromLGE = true; totalLPClaimed = IERC20(postLGELPTokenAddress).balanceOf(address(this)); } function setLGEAddress(address _LGE3) onlyOwner public { LGE3 = _LGE3; } } contract fixWETH { // 0x5DCA4093BFE88D6fD5511fb78F6a777d47314d35 migrator address payable migrator = 0x5DCA4093BFE88D6fD5511fb78F6a777d47314d35; IWETH wETH = IWETH(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); receive() external payable{} function unwrapAndSendToMigrator() public { uint256 bal = IERC20(address(wETH)).balanceOf(address(this)); wETH.withdraw(bal); selfdestruct(migrator); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ETHSendToLGE","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"CORE","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CORE_MULTISIG","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CORExWETHPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Fee_Approver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_LP_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Liquidity_Transfered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Proxy_Admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Timelock_Vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Total_LP_Supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Transfers_Closed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Vault_Timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ether_Credit_Per_ENCORE_LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ether_Total_For_Encore_LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ether_Total_For_TENS_LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ether_Total_For_UNICORE_LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Fee_Approver_Permanent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LGE3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPClaimedFromLGE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_Fee_Approver_Permanent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_LP_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_Liquidity_Transfered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_Proxy_Admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_Total_LP_Supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_Vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Liquidity_Transfered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Migrated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Reactor_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Snapshot_Block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Total_LP_Supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Vault_Permanent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addENCORELPTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addTENSLPTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addUNICOREReactors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lgeContract","type":"address"}],"name":"claimLPFromLGE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closeENCORETransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coreVault","outputs":[{"internalType":"contract ICOREVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHLeftToDepositToLGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getOwedLP","outputs":[{"internalType":"uint256","name":"LPDebtForUser","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postLGELPTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"rescueUnsupportedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendENCOREProxyAdminBackToMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"sendETHToLGE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"}],"name":"sendETHToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendOwnershipOfTENSBackToMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_LGE3","type":"address"}],"name":"setLGEAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setLPTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setUnicoreReactorToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"name":"snapshotUNICORE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalETHSent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLPClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"privateTransferContract","type":"address"}],"name":"transferENCORELiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"privateTransferContract","type":"address"}],"name":"transferTENSLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"person","type":"address"}],"name":"viewCreditedENCORETokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"person","type":"address"}],"name":"viewCreditedTENSTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"person","type":"address"}],"name":"viewCreditedUNICOREReactors","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b506145da806100206000396000f3fe6080604052600436106103e85760003560e01c80637c6f419c11610208578063cbb4b9c211610118578063e79459e5116100ab578063f42d20581161007a578063f42d205814610bf6578063f42ebbe014610c0b578063f7a3cbc214610c3e578063fc70712e14610c53578063ffd6265614610c68576103ef565b8063e79459e514610b84578063e80a120114610b99578063e853c03514610bae578063f2fde38b14610bc3576103ef565b8063d7bb5dd2116100e7578063d7bb5dd214610b12578063db71604214610b27578063db75ec4814610b3c578063de44391a14610b6f576103ef565b8063cbb4b9c214610aa0578063cf28f39a14610ab5578063d5e3e7e814610ae8578063d7b65c7d14610afd576103ef565b8063978756971161019b578063af8b242f1161016a578063af8b242f14610a13578063b636e44914610a28578063b948ac7a14610a3d578063c36bcc9414610a52578063ca34205814610a67576103ef565b8063978756971461099b5780639a789482146109b0578063a1b07c83146109c5578063ae1a3318146109da576103ef565b80638129fc1c116101d75780638129fc1c146109475780638bdb2afa1461095c5780638da5cb5b146109715780639030062b14610986576103ef565b80637c6f419c146108d55780637d17ccb3146108ea5780637d8a5f07146108ff5780637f9d075214610932576103ef565b80633f0deeb9116103035780635b5a0e70116102965780636b6c0774116102655780636b6c07741461084e578063715018a614610863578063752f92141461087857806376203ff9146108ab5780637c673e27146108c0576103ef565b80635b5a0e70146107fa578063674ce1b51461080f57806368903aec146108245780636afa77c214610839576103ef565b806352ffe699116102d257806352ffe6991461066957806357e589b11461079d578063582cca60146107d057806358551d09146107e5576103ef565b80633f0deeb9146106155780633f4128f61461062a5780634be5a97f1461063f5780634fd6f58614610654576103ef565b80632d6a37c11161037b57806338abdd771161034a57806338abdd771461058557806339bdf7e4146105b85780633a53a56d146105eb5780633c82559f14610600576103ef565b80632d6a37c1146105015780632f0619ca14610516578063352339cd1461055b5780633658ede514610570576103ef565b806310a33ccc116103b757806310a33ccc1461048f5780631a0cd28e146104c25780631df87870146104d75780632c978105146104ec576103ef565b806302c4eea4146103f4578063050f1f0b1461041d5780630aab5ff51461044e5780630f02585314610463576103ef565b366103ef57005b600080fd5b34801561040057600080fd5b50610409610c7d565b604080519115158252519081900360200190f35b34801561042957600080fd5b50610432610c86565b604080516001600160a01b039092168252519081900360200190f35b34801561045a57600080fd5b50610432610c95565b34801561046f57600080fd5b5061048d6004803603602081101561048657600080fd5b5035610ca4565b005b34801561049b57600080fd5b5061048d600480360360208110156104b257600080fd5b50356001600160a01b0316610e79565b3480156104ce57600080fd5b50610432610ef3565b3480156104e357600080fd5b50610432610f08565b3480156104f857600080fd5b50610432610f17565b34801561050d57600080fd5b50610432610f26565b34801561052257600080fd5b506105496004803603602081101561053957600080fd5b50356001600160a01b0316610f35565b60408051918252519081900360200190f35b34801561056757600080fd5b50610432610feb565b34801561057c57600080fd5b50610432610fff565b34801561059157600080fd5b5061048d600480360360208110156105a857600080fd5b50356001600160a01b031661100e565b3480156105c457600080fd5b5061048d600480360360208110156105db57600080fd5b50356001600160a01b03166111a0565b3480156105f757600080fd5b50610549611943565b34801561060c57600080fd5b50610549611949565b34801561062157600080fd5b5061054961194f565b34801561063657600080fd5b50610432611955565b34801561064b57600080fd5b5061048d611964565b34801561066057600080fd5b5061048d611ad5565b34801561067557600080fd5b5061048d6004803603604081101561068c57600080fd5b8101906020810181356401000000008111156106a757600080fd5b8201836020820111156106b957600080fd5b803590602001918460208302840111640100000000831117156106db57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561072b57600080fd5b82018360208201111561073d57600080fd5b8035906020019184602083028401116401000000008311171561075f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611c19945050505050565b3480156107a957600080fd5b5061048d600480360360208110156107c057600080fd5b50356001600160a01b0316611d5d565b3480156107dc57600080fd5b506104096124d0565b3480156107f157600080fd5b506104096124d9565b34801561080657600080fd5b506104326124e7565b34801561081b57600080fd5b506104326124f6565b34801561083057600080fd5b50610549612505565b34801561084557600080fd5b5061054961250b565b34801561085a57600080fd5b50610432612511565b34801561086f57600080fd5b5061048d612526565b34801561088457600080fd5b506105496004803603602081101561089b57600080fd5b50356001600160a01b03166125c8565b3480156108b757600080fd5b50610432612735565b3480156108cc57600080fd5b50610409612744565b3480156108e157600080fd5b50610432612752565b3480156108f657600080fd5b50610549612761565b34801561090b57600080fd5b506105496004803603602081101561092257600080fd5b50356001600160a01b0316612767565b34801561093e57600080fd5b5061040961285b565b34801561095357600080fd5b5061048d612864565b34801561096857600080fd5b50610432612dce565b34801561097d57600080fd5b50610432612ddd565b34801561099257600080fd5b50610549612dec565b3480156109a757600080fd5b50610432612df2565b3480156109bc57600080fd5b50610432612e01565b3480156109d157600080fd5b50610432612e16565b3480156109e657600080fd5b5061048d600480360360408110156109fd57600080fd5b506001600160a01b038135169060200135612e25565b348015610a1f57600080fd5b50610409612efd565b348015610a3457600080fd5b5061048d612f06565b348015610a4957600080fd5b5061048d612f68565b348015610a5e57600080fd5b50610432612fc8565b348015610a7357600080fd5b5061048d60048036036040811015610a8a57600080fd5b50803590602001356001600160a01b0316612fd7565b348015610aac57600080fd5b506105496130f9565b348015610ac157600080fd5b5061054960048036036020811015610ad857600080fd5b50356001600160a01b03166130ff565b348015610af457600080fd5b5061043261323a565b348015610b0957600080fd5b5061048d613249565b348015610b1e57600080fd5b5061043261338d565b348015610b3357600080fd5b5061043261339c565b348015610b4857600080fd5b5061048d60048036036020811015610b5f57600080fd5b50356001600160a01b03166133ab565b348015610b7b57600080fd5b5061048d613425565b348015610b9057600080fd5b506105496135de565b348015610ba557600080fd5b5061048d613609565b348015610bba57600080fd5b506104326136cc565b348015610bcf57600080fd5b5061048d60048036036020811015610be657600080fd5b50356001600160a01b03166136db565b348015610c0257600080fd5b506105496137d4565b348015610c1757600080fd5b5061048d60048036036020811015610c2e57600080fd5b50356001600160a01b03166137da565b348015610c4a57600080fd5b50610432613854565b348015610c5f57600080fd5b50610432613863565b348015610c7457600080fd5b50610549613872565b60a45460ff1681565b60a6546001600160a01b031681565b60c0546001600160a01b031681565b610cac613878565b6065546001600160a01b03908116911614610cfc576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b6000610d2160b554610d1b60a85460bd5461387c90919063ffffffff16565b9061387c565b60a154909150610d31908361387c565b60a1819055811015610d7a576040805162461bcd60e51b815260206004820152600d60248201526c151bdbc81b5d58da081cd95b9d609a1b604482015290519081900360640190fd5b60c0546001600160a01b0316610dd7576040805162461bcd60e51b815260206004820152601b60248201527f4c474520616464726573732073657420696e636f72726563746c790000000000604482015290519081900360640190fd5b60c060009054906101000a90046001600160a01b03166001600160a01b031663ed995307836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e2757600080fd5b505af1158015610e3b573d6000803e3d6000fd5b50506040805186815290517fb8b41fad14a0213642b056f1575bcff86305c7b67b8ed71fef3f14808f716d0d94509081900360200192509050a15050565b610e81613878565b6065546001600160a01b03908116911614610ed1576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b60a680546001600160a01b0319166001600160a01b0392909216919091179055565b60ac546201000090046001600160a01b031681565b60ba546001600160a01b031681565b60af546001600160a01b031681565b60ae546001600160a01b031681565b60b854604080516393f1a40b60e01b81526000600482018190526001600160a01b038581166024840152835191948594610100909104909116926393f1a40b9260448083019392829003018186803b158015610f9057600080fd5b505afa158015610fa4573d6000803e3d6000fd5b505050506040513d6040811015610fba57600080fd5b50516001600160a01b038416600090815260bf6020526040902054909150610fe2908261387c565b9150505b919050565b60b85461010090046001600160a01b031681565b609e546001600160a01b031681565b611016613878565b6065546001600160a01b03908116911614611066576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b609d546001600160a01b03166110c3576040805162461bcd60e51b815260206004820152601960248201527f4c5020746f6b656e2061646472657373206e6f74207365742e00000000000000604482015290519081900360640190fd5b806001600160a01b031663de44391a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110fe57600080fd5b505af1158015611112573d6000803e3d6000fd5b50506097805460ff191660011790555050609d54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561116e57600080fd5b505afa158015611182573d6000803e3d6000fd5b505050506040513d602081101561119857600080fd5b505160a05550565b6111a8613878565b6065546001600160a01b039081169116146111f8576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b60ac5460ff6101009091041615156001146112445760405162461bcd60e51b81526004018080602001828103825260218152602001806145846021913960400191505060405180910390fd5b60ac5460ff161561129c576040805162461bcd60e51b815260206004820152601c60248201527f416c7265616479207472616e736665726564206c697175696469747900000000604482015290519081900360640190fd5b60b15460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181600087803b1580156112e257600080fd5b505af11580156112f6573d6000803e3d6000fd5b505050506040513d602081101561130c57600080fd5b50516001600160a01b0316146113535760405162461bcd60e51b81526004018080602001828103825260248152602001806145606024913960400191505060405180910390fd5b6001600160a01b03811661136657600080fd5b60b1546040805163f2fde38b60e01b81526001600160a01b0384811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b505060b254604080516370a0823160e01b8152732a997ead7478885a66e6961ac0837800a07492fc60048201529051600094506114e093506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561143257600080fd5b505afa158015611446573d6000803e3d6000fd5b505050506040513d602081101561145c57600080fd5b505160b25460af54604080516370a0823160e01b81526001600160a01b039283166004820152905191909216916370a08231916024808301926020929190829003018186803b1580156114ae57600080fd5b505afa1580156114c2573d6000803e3d6000fd5b505050506040513d60208110156114d857600080fd5b50519061387c565b90508060b260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153157600080fd5b505afa158015611545573d6000803e3d6000fd5b505050506040513d602081101561155b57600080fd5b50510360b681905560b45461158491670de0b6b3a76400009161157e91906138df565b90613938565b60b55560b254604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91839182916370a08231916024808301926020929190829003018186803b1580156115db57600080fd5b505afa1580156115ef573d6000803e3d6000fd5b505050506040513d602081101561160557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561165657600080fd5b505af115801561166a573d6000803e3d6000fd5b505050506040513d602081101561168057600080fd5b505060b2546040805163148aedc160e21b81526001600160a01b0392831660048201529051479285169163522bb70491602480830192600092919082900301818387803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b5050505060006116fd824761397a90919063ffffffff16565b90506901f2bba5d84f99c00000811161175d576040805162461bcd60e51b815260206004820152601c60248201527f446964206e6f74207265636965766520656e6f75676820657468657200000000604482015290519081900360640190fd5b60b554611770606461157e84603c6138df565b116117bb576040805162461bcd60e51b81526020600482015260166024820152750546f6f206d75636820666f7220656e636f7265204c560541b604482015290519081900360640190fd5b60b1546001600160a01b0316158015906117df5750609e546001600160a01b031615155b80156117f55750609f546001600160a01b031615155b61183c576040805162461bcd60e51b815260206004820152601360248201527253616e69747920636865636b206661696c756560681b604482015290519081900360640190fd5b60b15460ae54609e546040805163266a23b160e21b81526001600160a01b03938416600482015291831660248301525191909216916399a88ec491604480830192600092919082900301818387803b15801561189757600080fd5b505af11580156118ab573d6000803e3d6000fd5b505060b15460ac54609f546040805163266a23b160e21b8152620100009093046001600160a01b039081166004850152918216602484015251921693506399a88ec4925060448082019260009290919082900301818387803b15801561191057600080fd5b505af1158015611924573d6000803e3d6000fd5b505050506119306139bc565b505060ac805460ff191660011790555050565b60b45481565b60a95481565b60a85481565b60a5546001600160a01b031681565b609754610100900460ff16156119af576040805162461bcd60e51b815260206004820152601f60248201526000805160206144d1833981519152604482015290519081900360640190fd5b6097805461ff00191661010017905560a45460ff1615611a16576040805162461bcd60e51b815260206004820152601760248201527f554e49434f5245204465706f7369747320636c6f736564000000000000000000604482015290519081900360640190fd5b60a654604080516370a0823160e01b81523360048201529051600092611a9a926001600160a01b039091169182916370a08231916024808301926020929190829003018186803b158015611a6957600080fd5b505afa158015611a7d573d6000803e3d6000fd5b505050506040513d6020811015611a9357600080fd5b5051613ae4565b33600090815260aa6020526040902054909150611ab7908261387c565b33600090815260aa6020526040902055506097805461ff0019169055565b609754610100900460ff1615611b20576040805162461bcd60e51b815260206004820152601f60248201526000805160206144d1833981519152604482015290519081900360640190fd5b6097805461ff00191661010090811790915560ac540460ff1615611b8b576040805162461bcd60e51b815260206004820152601f60248201527f54454e53204c50207472616e7366657273207374696c6c206f6e676f696e6700604482015290519081900360640190fd5b60bb54604080516370a0823160e01b81523360048201529051600092611bde926001600160a01b039091169182916370a08231916024808301926020929190829003018186803b158015611a6957600080fd5b33600090815260bf6020526040902054909150611bfb908261387c565b33600090815260bf6020526040902055506097805461ff0019169055565b611c21613878565b6065546001600160a01b03908116911614611c71576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b60a45460ff161515600114611cb75760405162461bcd60e51b815260040180806020018281038252602581526020018061445e6025913960400191505060405180910390fd5b815181518114611cfc576040805162461bcd60e51b815260206004820152600b60248201526a15dc9bdb99c81a5b9c1d5d60aa1b604482015290519081900360640190fd5b60005b81811015611d5757828181518110611d1357fe5b602002602001015160ab6000868481518110611d2b57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055600101611cff565b50505050565b611d65613878565b6065546001600160a01b03908116911614611db5576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b60b85460ff1615611e02576040805162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481d1c985b9cd9995c995960721b604482015290519081900360640190fd5b60ac5460ff161515600114611e57576040805162461bcd60e51b8152602060048201526016602482015275115390d3d491481a185cc81d1bc819dbc8199a5c9cdd60521b604482015290519081900360640190fd5b60ba5460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181600087803b158015611e9d57600080fd5b505af1158015611eb1573d6000803e3d6000fd5b505050506040513d6020811015611ec757600080fd5b50516001600160a01b031614611f0e5760405162461bcd60e51b815260040180806020018281038252602281526020018061443c6022913960400191505060405180910390fd5b60b95460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181600087803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b505050506040513d6020811015611f7e57600080fd5b50516001600160a01b031614611fdb576040805162461bcd60e51b815260206004820152601c60248201527f536574206d6520617320746865206f776e657220666f722054454e5300000000604482015290519081900360640190fd5b6001600160a01b038116611fee57600080fd5b60ba546040805163f2fde38b60e01b81526001600160a01b0384811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b15801561203c57600080fd5b505af1158015612050573d6000803e3d6000fd5b505060b9546040805163f2fde38b60e01b81526001600160a01b038681166004830152915191909216935063f2fde38b9250602480830192600092919082900301818387803b1580156120a257600080fd5b505af11580156120b6573d6000803e3d6000fd5b5050505060bb60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561210857600080fd5b505afa15801561211c573d6000803e3d6000fd5b505050506040513d602081101561213257600080fd5b505160be5560bb54604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91839182916370a08231916024808301926020929190829003018186803b15801561218b57600080fd5b505afa15801561219f573d6000803e3d6000fd5b505050506040513d60208110156121b557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561220657600080fd5b505af115801561221a573d6000803e3d6000fd5b505050506040513d602081101561223057600080fd5b505060bb546040805163148aedc160e21b81526001600160a01b0392831660048201529051479284169163522bb70491602480830192600092919082900301818387803b15801561228057600080fd5b505af1158015612294573d6000803e3d6000fd5b5050505060006122ad824761397a90919063ffffffff16565b905068070c1cc73b00c80000811161230c576040805162461bcd60e51b815260206004820152601c60248201527f446964206e6f74207265636965766520656e6f75676820657468657200000000604482015290519081900360640190fd5b60bc546001600160a01b0316158015906123305750609f546001600160a01b031615155b612377576040805162461bcd60e51b815260206004820152601360248201527253616e69747920636865636b206661696c756560681b604482015290519081900360640190fd5b60ba5460b854609f546040805163266a23b160e21b81526101009093046001600160a01b0390811660048501529182166024840152519216916399a88ec49160448082019260009290919082900301818387803b1580156123d757600080fd5b505af11580156123eb573d6000803e3d6000fd5b505050506040516123fb9061426f565b604051809103906000f080158015612417573d6000803e3d6000fd5b5060bc80546001600160a01b0319166001600160a01b03928316179081905560b954604080516310a7a65960e01b81529284166004840152519216916310a7a6599160248082019260009290919082900301818387803b15801561247a57600080fd5b505af115801561248e573d6000803e3d6000fd5b505050506124b3670de0b6b3a764000061157e60b454846138df90919063ffffffff16565b60bd556124be613c71565b505060b8805460ff1916600117905550565b60b85460ff1681565b60ac54610100900460ff1681565b609f546001600160a01b031681565b6098546001600160a01b031681565b60a15481565b60b65481565b6097546201000090046001600160a01b031681565b61252e613878565b6065546001600160a01b0390811691161461257e576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b609d546000906001600160a01b03166125e357506000610fe6565b60975460ff166125f557506000610fe6565b33600090815260a3602052604090205460ff1615156001141561261a57506000610fe6565b600061262583612767565b90506000612632846130ff565b9050600061263f85610f35565b90508215801561264d575081155b8015612657575080155b156126685760009350505050610fe6565b600061268760b554610d1b60a85460bd5461387c90919063ffffffff16565b9050600084156126b5576126b2856126ac60a95460a85461393890919063ffffffff16565b906138df565b90505b83156126dd576126da846126ac60b65461157e60b5548661387c90919063ffffffff16565b90505b821561270557612702836126ac60be5461157e60bd548661387c90919063ffffffff16565b90505b61272a670de0b6b3a764000061157e8461157e60a054866138df90919063ffffffff16565b979650505050505050565b60bc546001600160a01b031681565b60a454610100900460ff1681565b60b0546001600160a01b031681565b60be5481565b60a45460009060ff16156127aa576001600160a01b038216600090815260aa602090815260408083205460ab909252909120546127a39161387c565b9050610fe6565b60a454604080516393f1a40b60e01b81526000600482018190526001600160a01b0386811660248401528351919462010000900416926393f1a40b9260448082019391829003018186803b15801561280157600080fd5b505afa158015612815573d6000803e3d6000fd5b505050506040513d604081101561282b57600080fd5b50516001600160a01b038416600090815260aa6020526040902054909150612853908261387c565b915050610fe6565b60975460ff1681565b600054610100900460ff168061287d575061287d613eed565b8061288b575060005460ff16155b6128c65760405162461bcd60e51b815260040180806020018281038252602e815260200180614532602e913960400191505060405180910390fd5b600054610100900460ff161580156128f1576000805460ff1961ff0019909116610100171660011790555b735a16552f59ea34e44ec81e58b3817833e9fd5436321461291157600080fd5b735a16552f59ea34e44ec81e58b3817833e9fd5436331461293157600080fd5b612939613ef3565b609c80546001600160a01b0319908116735a16552f59ea34e44ec81e58b3817833e9fd5436179091554260a255609f8054821673fed4ec1348a4068d4934e09492428fd92e399e5c179055609e805482167343dd7026284ac8f95eb02bb1bd68d0699b0ae9ca17905560a48054756f31ecd8110bcbc679aefb74c7608241d1b78949000062010000600160b01b03199182161790915560a580548316735506861bbb104baa8d8575e88e22084627b192d817905560b8805474f983ecf91195bd63de8445997082680e688749bc00610100600160a81b031990911617905560b98054831673776ca7ded9474829ea20ad4a5ab7a6ffdb64c79617905560ba80548316732d0c48c5bf930a09f8cd6fae5ac5a16b24e1723a17905560bb8054831673b1b537b7272ba1eda0086e2f480adca72c0b511c17905560bc805483167322c91cdd1e00cd4d7d029f0db94020fce3c486e317905560b180548316731964784ba40c9fd5eed1070c1c38cd5d1d5f9f5517905560af8054831673e0e4839e0c7b2773c58764f9ec3b9622d01a042817905560b280548316732e0721e6c951710725997928dcaaa05daafa031b17905560ae8054831673f3c3ff0ea59d15e82b9620ed7406fa3f6a261f9817905560ac805475def7bdf8ecb450c1d93c5db7c8dbce5894ccdaa90000921691909117905560ad805490911673c2cb86437355f36d42fb8d979ab28b9816ac0545179055612b6861271061157e6129e46126ac670de0b6b3a76400006002613938565b60b481905550600073255ca4596a963883afe0ef9c85ea071cc050128b9050806001600160a01b0316630c37c9966040518163ffffffff1660e01b815260040160206040518083038186803b158015612bc057600080fd5b505afa158015612bd4573d6000803e3d6000fd5b505050506040513d6020811015612bea57600080fd5b50516097805462010000600160b01b031916620100006001600160a01b03938416021790556040805163279c6b3360e11b8152905191831691634f38d66691600480820192602092909190829003018186803b158015612c4957600080fd5b505afa158015612c5d573d6000803e3d6000fd5b505050506040513d6020811015612c7357600080fd5b5051609980546001600160a01b0319166001600160a01b0392831617905560408051637bb53c2d60e11b815290519183169163f76a785a916004808201926020929091908290030181600087803b158015612ccd57600080fd5b505af1158015612ce1573d6000803e3d6000fd5b505050506040513d6020811015612cf757600080fd5b5051609880546001600160a01b0319166001600160a01b039283161790556040805163161d5a0360e11b8152905191831691632c3ab40691600480820192602092909190829003018186803b158015612d4f57600080fd5b505afa158015612d63573d6000803e3d6000fd5b505050506040513d6020811015612d7957600080fd5b5051609b80546001600160a01b039092166001600160a01b0319928316179055609a805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179055508015612dcb576000805461ff00191690555b50565b6099546001600160a01b031681565b6065546001600160a01b031690565b60a05481565b60b1546001600160a01b031681565b60a4546201000090046001600160a01b031681565b60b3546001600160a01b031681565b612e2d613878565b6065546001600160a01b03908116911614612e7d576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b609c546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519184169163a9059cbb916044808201926020929091908290030181600087803b158015612ed357600080fd5b505af1158015612ee7573d6000803e3d6000fd5b505050506040513d6020811015611d5757600080fd5b60ac5460ff1681565b612f0e613878565b6065546001600160a01b03908116911614612f5e576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b612f66613c71565b565b612f70613878565b6065546001600160a01b03908116911614612fc0576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b612f666139bc565b60b2546001600160a01b031681565b612fdf613878565b6065546001600160a01b0390811691161461302f576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b600061304e60b554610d1b60a85460bd5461387c90919063ffffffff16565b90508060a154146130a6576040805162461bcd60e51b815260206004820152601a60248201527f5374696c6c206d6f6e657920746f2073656e6420746f204c4745000000000000604482015290519081900360640190fd5b6001600160a01b0382166130ea576040805162461bcd60e51b815260206004808301919091526024820152630103737960e51b604482015290519081900360640190fd5b6130f48284613fa4565b505050565b60a75481565b60ac54604080516393f1a40b60e01b81526000600482018190526001600160a01b03858116602484015283519194859462010000909104909116926393f1a40b9260448083019392829003018186803b15801561315b57600080fd5b505afa15801561316f573d6000803e3d6000fd5b505050506040513d604081101561318557600080fd5b505160ad546040805163d6ce2ef960e01b81526001600160a01b0387811660048301529151939450600093919092169163d6ce2ef9916024808301926020929190829003018186803b1580156131da57600080fd5b505afa1580156131ee573d6000803e3d6000fd5b505050506040513d602081101561320457600080fd5b50516001600160a01b038516600090815260b76020526040902054909150613232908290610d1b908561387c565b949350505050565b609d546001600160a01b031681565b609754610100900460ff1615613294576040805162461bcd60e51b815260206004820152601f60248201526000805160206144d1833981519152604482015290519081900360640190fd5b6097805461ff00191661010090811790915560ac540460ff16156132ff576040805162461bcd60e51b815260206004820152601a60248201527f454e434f5245204c50207472616e736665727320636c6f736564000000000000604482015290519081900360640190fd5b60b254604080516370a0823160e01b81523360048201529051600092613352926001600160a01b039091169182916370a08231916024808301926020929190829003018186803b158015611a6957600080fd5b33600090815260b7602052604090205490915061336f908261387c565b33600090815260b76020526040902055506097805461ff0019169055565b609b546001600160a01b031681565b609c546001600160a01b031681565b6133b3613878565b6065546001600160a01b03908116911614613403576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b60c080546001600160a01b0319166001600160a01b0392909216919091179055565b609754610100900460ff1615613470576040805162461bcd60e51b815260206004820152601f60248201526000805160206144d1833981519152604482015290519081900360640190fd5b6097805461ff001916610100179081905560ff1615156001146134d1576040805162461bcd60e51b8152602060048201526014602482015273139bdd1a1a5b99c81d1bc818db185a5b481e595d60621b604482015290519081900360640190fd5b60006134dc336125c8565b11613521576040805162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b609d546001600160a01b031663a9059cbb3361353c816125c8565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561358257600080fd5b505af1158015613596573d6000803e3d6000fd5b505050506040513d60208110156135ac57600080fd5b50516135b757600080fd5b33600090815260a360205260409020805460ff191660011790556097805461ff0019169055565b6000806135fe60b554610d1b60a85460bd5461387c90919063ffffffff16565b60a154900391505090565b613611613878565b6065546001600160a01b03908116911614613661576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b60a254613671906202a30061387c565b4210156136bb576040805162461bcd60e51b81526020600482015260136024820152723220646179206772616365206f6e676f696e6760681b604482015290519081900360640190fd5b60ac805461ff001916610100179055565b60b9546001600160a01b031681565b6136e3613878565b6065546001600160a01b03908116911614613733576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b6001600160a01b0381166137785760405162461bcd60e51b81526004018080602001828103825260268152602001806144836026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60b55481565b6137e2613878565b6065546001600160a01b03908116911614613832576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b609d80546001600160a01b0319166001600160a01b0392909216919091179055565b60bb546001600160a01b031681565b60ad546001600160a01b031681565b60bd5481565b3390565b6000828201838110156138d6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826138ee575060006138d9565b828202828482816138fb57fe5b04146138d65760405162461bcd60e51b81526004018080602001828103825260218152602001806144f16021913960400191505060405180910390fd5b60006138d683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fda565b60006138d683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061407c565b60b154609c546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b158015613a0d57600080fd5b505af1158015613a21573d6000803e3d6000fd5b5050609c5460b15460408051638da5cb5b60e01b815290516001600160a01b039384169550929091169250638da5cb5b9160048083019260209291908290030181600087803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b505050506040513d6020811015613a9d57600080fd5b50516001600160a01b031614612f665760405162461bcd60e51b81526004018080602001828103825260288152602001806144a96028913960400191505060405180910390fd5b600080836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613b3457600080fd5b505afa158015613b48573d6000803e3d6000fd5b505050506040513d6020811015613b5e57600080fd5b5051604080516323b872dd60e01b81523360048201523060248201526044810186905290519192506001600160a01b038616916323b872dd916064808201926020929091908290030181600087803b158015613bb957600080fd5b505af1158015613bcd573d6000803e3d6000fd5b505050506040513d6020811015613be357600080fd5b5051613bee57600080fd5b61323281856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613c3f57600080fd5b505afa158015613c53573d6000803e3d6000fd5b505050506040513d6020811015613c6957600080fd5b50519061397a565b60b954609c546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b158015613cc257600080fd5b505af1158015613cd6573d6000803e3d6000fd5b5050609c5460b95460408051638da5cb5b60e01b815290516001600160a01b039384169550929091169250638da5cb5b9160048083019260209291908290030181600087803b158015613d2857600080fd5b505af1158015613d3c573d6000803e3d6000fd5b505050506040513d6020811015613d5257600080fd5b50516001600160a01b031614613daf576040805162461bcd60e51b815260206004820152601b60248201527f4d756c7469736967206e6f74206f776e6572206f6620746f6b656e0000000000604482015290519081900360640190fd5b60ba54609c546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b158015613e0057600080fd5b505af1158015613e14573d6000803e3d6000fd5b5050609c5460ba5460408051638da5cb5b60e01b815290516001600160a01b039384169550929091169250638da5cb5b9160048083019260209291908290030181600087803b158015613e6657600080fd5b505af1158015613e7a573d6000803e3d6000fd5b505050506040513d6020811015613e9057600080fd5b50516001600160a01b031614612f66576040805162461bcd60e51b815260206004820181905260248201527f4d756c7469736967206e6f74206f776e6572206f662070726f787961646d696e604482015290519081900360640190fd5b303b1590565b600054610100900460ff1680613f0c5750613f0c613eed565b80613f1a575060005460ff16155b613f555760405162461bcd60e51b815260040180806020018281038252602e815260200180614532602e913960400191505060405180910390fd5b600054610100900460ff16158015613f80576000805460ff1961ff0019909116610100171660011790555b613f886140d6565b613f90614176565b8015612dcb576000805461ff001916905550565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156130f4573d6000803e3d6000fd5b600081836140665760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561402b578181015183820152602001614013565b50505050905090810190601f1680156140585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161407257fe5b0495945050505050565b600081848411156140ce5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561402b578181015183820152602001614013565b505050900390565b600054610100900460ff16806140ef57506140ef613eed565b806140fd575060005460ff16155b6141385760405162461bcd60e51b815260040180806020018281038252602e815260200180614532602e913960400191505060405180910390fd5b600054610100900460ff16158015613f90576000805460ff1961ff0019909116610100171660011790558015612dcb576000805461ff001916905550565b600054610100900460ff168061418f575061418f613eed565b8061419d575060005460ff16155b6141d85760405162461bcd60e51b815260040180806020018281038252602e815260200180614532602e913960400191505060405180910390fd5b600054610100900460ff16158015614203576000805460ff1961ff0019909116610100171660011790555b600061420d613878565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612dcb576000805461ff001916905550565b6101bf8061427d8339019056fe608060405234801561001057600080fd5b50600080546001600160a01b03191673b1b537b7272ba1eda0086e2f480adca72c0b511c179055610179806100466000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80630484c7281461003b578063301a58011461005f575b600080fd5b6100436100b3565b604080516001600160a01b039092168252519081900360200190f35b6100956004803603606081101561007557600080fd5b506001600160a01b038135811691602081013590911690604001356100c2565b60408051938452602084019290925282820152519081900360600190f35b6000546001600160a01b031681565b60008054819081906001600160a01b03878116911614806100f057506000546001600160a01b038681169116145b15610138576040805162461bcd60e51b81526020600482015260136024820152722a22a7299034b9903232b83932b1b0ba32b21760691b604482015290519081900360640190fd5b92959094509192505056fea2646970667358221220ee646249104930673004beb20cb312f8ec8e71d0fde65d62ed38126cef33858264736f6c634300060c0033536574206d65206173207468652070726f7879206f776e657220666f722054454e53554e49434f5245204465706f7369747320617265207374696c6c206e6f7420636c6f7365644f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737350726f7879204f776e657273686970205472616e73666572204e6f74205375636365737366756c6c434f5245204d69677261746f723a20457865637574696f6e204c6f636b656400536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564536574206d65206173207468652070726f7879206f776e657220666f7220454e434f5245454e434f5245204c50207472616e7366657273207374696c6c206f6e676f696e67a264697066735822122039757bb3739928fb27d102ea22f670bae034c39e45414469ca000009a10e191e64736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106103e85760003560e01c80637c6f419c11610208578063cbb4b9c211610118578063e79459e5116100ab578063f42d20581161007a578063f42d205814610bf6578063f42ebbe014610c0b578063f7a3cbc214610c3e578063fc70712e14610c53578063ffd6265614610c68576103ef565b8063e79459e514610b84578063e80a120114610b99578063e853c03514610bae578063f2fde38b14610bc3576103ef565b8063d7bb5dd2116100e7578063d7bb5dd214610b12578063db71604214610b27578063db75ec4814610b3c578063de44391a14610b6f576103ef565b8063cbb4b9c214610aa0578063cf28f39a14610ab5578063d5e3e7e814610ae8578063d7b65c7d14610afd576103ef565b8063978756971161019b578063af8b242f1161016a578063af8b242f14610a13578063b636e44914610a28578063b948ac7a14610a3d578063c36bcc9414610a52578063ca34205814610a67576103ef565b8063978756971461099b5780639a789482146109b0578063a1b07c83146109c5578063ae1a3318146109da576103ef565b80638129fc1c116101d75780638129fc1c146109475780638bdb2afa1461095c5780638da5cb5b146109715780639030062b14610986576103ef565b80637c6f419c146108d55780637d17ccb3146108ea5780637d8a5f07146108ff5780637f9d075214610932576103ef565b80633f0deeb9116103035780635b5a0e70116102965780636b6c0774116102655780636b6c07741461084e578063715018a614610863578063752f92141461087857806376203ff9146108ab5780637c673e27146108c0576103ef565b80635b5a0e70146107fa578063674ce1b51461080f57806368903aec146108245780636afa77c214610839576103ef565b806352ffe699116102d257806352ffe6991461066957806357e589b11461079d578063582cca60146107d057806358551d09146107e5576103ef565b80633f0deeb9146106155780633f4128f61461062a5780634be5a97f1461063f5780634fd6f58614610654576103ef565b80632d6a37c11161037b57806338abdd771161034a57806338abdd771461058557806339bdf7e4146105b85780633a53a56d146105eb5780633c82559f14610600576103ef565b80632d6a37c1146105015780632f0619ca14610516578063352339cd1461055b5780633658ede514610570576103ef565b806310a33ccc116103b757806310a33ccc1461048f5780631a0cd28e146104c25780631df87870146104d75780632c978105146104ec576103ef565b806302c4eea4146103f4578063050f1f0b1461041d5780630aab5ff51461044e5780630f02585314610463576103ef565b366103ef57005b600080fd5b34801561040057600080fd5b50610409610c7d565b604080519115158252519081900360200190f35b34801561042957600080fd5b50610432610c86565b604080516001600160a01b039092168252519081900360200190f35b34801561045a57600080fd5b50610432610c95565b34801561046f57600080fd5b5061048d6004803603602081101561048657600080fd5b5035610ca4565b005b34801561049b57600080fd5b5061048d600480360360208110156104b257600080fd5b50356001600160a01b0316610e79565b3480156104ce57600080fd5b50610432610ef3565b3480156104e357600080fd5b50610432610f08565b3480156104f857600080fd5b50610432610f17565b34801561050d57600080fd5b50610432610f26565b34801561052257600080fd5b506105496004803603602081101561053957600080fd5b50356001600160a01b0316610f35565b60408051918252519081900360200190f35b34801561056757600080fd5b50610432610feb565b34801561057c57600080fd5b50610432610fff565b34801561059157600080fd5b5061048d600480360360208110156105a857600080fd5b50356001600160a01b031661100e565b3480156105c457600080fd5b5061048d600480360360208110156105db57600080fd5b50356001600160a01b03166111a0565b3480156105f757600080fd5b50610549611943565b34801561060c57600080fd5b50610549611949565b34801561062157600080fd5b5061054961194f565b34801561063657600080fd5b50610432611955565b34801561064b57600080fd5b5061048d611964565b34801561066057600080fd5b5061048d611ad5565b34801561067557600080fd5b5061048d6004803603604081101561068c57600080fd5b8101906020810181356401000000008111156106a757600080fd5b8201836020820111156106b957600080fd5b803590602001918460208302840111640100000000831117156106db57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561072b57600080fd5b82018360208201111561073d57600080fd5b8035906020019184602083028401116401000000008311171561075f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611c19945050505050565b3480156107a957600080fd5b5061048d600480360360208110156107c057600080fd5b50356001600160a01b0316611d5d565b3480156107dc57600080fd5b506104096124d0565b3480156107f157600080fd5b506104096124d9565b34801561080657600080fd5b506104326124e7565b34801561081b57600080fd5b506104326124f6565b34801561083057600080fd5b50610549612505565b34801561084557600080fd5b5061054961250b565b34801561085a57600080fd5b50610432612511565b34801561086f57600080fd5b5061048d612526565b34801561088457600080fd5b506105496004803603602081101561089b57600080fd5b50356001600160a01b03166125c8565b3480156108b757600080fd5b50610432612735565b3480156108cc57600080fd5b50610409612744565b3480156108e157600080fd5b50610432612752565b3480156108f657600080fd5b50610549612761565b34801561090b57600080fd5b506105496004803603602081101561092257600080fd5b50356001600160a01b0316612767565b34801561093e57600080fd5b5061040961285b565b34801561095357600080fd5b5061048d612864565b34801561096857600080fd5b50610432612dce565b34801561097d57600080fd5b50610432612ddd565b34801561099257600080fd5b50610549612dec565b3480156109a757600080fd5b50610432612df2565b3480156109bc57600080fd5b50610432612e01565b3480156109d157600080fd5b50610432612e16565b3480156109e657600080fd5b5061048d600480360360408110156109fd57600080fd5b506001600160a01b038135169060200135612e25565b348015610a1f57600080fd5b50610409612efd565b348015610a3457600080fd5b5061048d612f06565b348015610a4957600080fd5b5061048d612f68565b348015610a5e57600080fd5b50610432612fc8565b348015610a7357600080fd5b5061048d60048036036040811015610a8a57600080fd5b50803590602001356001600160a01b0316612fd7565b348015610aac57600080fd5b506105496130f9565b348015610ac157600080fd5b5061054960048036036020811015610ad857600080fd5b50356001600160a01b03166130ff565b348015610af457600080fd5b5061043261323a565b348015610b0957600080fd5b5061048d613249565b348015610b1e57600080fd5b5061043261338d565b348015610b3357600080fd5b5061043261339c565b348015610b4857600080fd5b5061048d60048036036020811015610b5f57600080fd5b50356001600160a01b03166133ab565b348015610b7b57600080fd5b5061048d613425565b348015610b9057600080fd5b506105496135de565b348015610ba557600080fd5b5061048d613609565b348015610bba57600080fd5b506104326136cc565b348015610bcf57600080fd5b5061048d60048036036020811015610be657600080fd5b50356001600160a01b03166136db565b348015610c0257600080fd5b506105496137d4565b348015610c1757600080fd5b5061048d60048036036020811015610c2e57600080fd5b50356001600160a01b03166137da565b348015610c4a57600080fd5b50610432613854565b348015610c5f57600080fd5b50610432613863565b348015610c7457600080fd5b50610549613872565b60a45460ff1681565b60a6546001600160a01b031681565b60c0546001600160a01b031681565b610cac613878565b6065546001600160a01b03908116911614610cfc576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b6000610d2160b554610d1b60a85460bd5461387c90919063ffffffff16565b9061387c565b60a154909150610d31908361387c565b60a1819055811015610d7a576040805162461bcd60e51b815260206004820152600d60248201526c151bdbc81b5d58da081cd95b9d609a1b604482015290519081900360640190fd5b60c0546001600160a01b0316610dd7576040805162461bcd60e51b815260206004820152601b60248201527f4c474520616464726573732073657420696e636f72726563746c790000000000604482015290519081900360640190fd5b60c060009054906101000a90046001600160a01b03166001600160a01b031663ed995307836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e2757600080fd5b505af1158015610e3b573d6000803e3d6000fd5b50506040805186815290517fb8b41fad14a0213642b056f1575bcff86305c7b67b8ed71fef3f14808f716d0d94509081900360200192509050a15050565b610e81613878565b6065546001600160a01b03908116911614610ed1576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b60a680546001600160a01b0319166001600160a01b0392909216919091179055565b60ac546201000090046001600160a01b031681565b60ba546001600160a01b031681565b60af546001600160a01b031681565b60ae546001600160a01b031681565b60b854604080516393f1a40b60e01b81526000600482018190526001600160a01b038581166024840152835191948594610100909104909116926393f1a40b9260448083019392829003018186803b158015610f9057600080fd5b505afa158015610fa4573d6000803e3d6000fd5b505050506040513d6040811015610fba57600080fd5b50516001600160a01b038416600090815260bf6020526040902054909150610fe2908261387c565b9150505b919050565b60b85461010090046001600160a01b031681565b609e546001600160a01b031681565b611016613878565b6065546001600160a01b03908116911614611066576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b609d546001600160a01b03166110c3576040805162461bcd60e51b815260206004820152601960248201527f4c5020746f6b656e2061646472657373206e6f74207365742e00000000000000604482015290519081900360640190fd5b806001600160a01b031663de44391a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110fe57600080fd5b505af1158015611112573d6000803e3d6000fd5b50506097805460ff191660011790555050609d54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561116e57600080fd5b505afa158015611182573d6000803e3d6000fd5b505050506040513d602081101561119857600080fd5b505160a05550565b6111a8613878565b6065546001600160a01b039081169116146111f8576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b60ac5460ff6101009091041615156001146112445760405162461bcd60e51b81526004018080602001828103825260218152602001806145846021913960400191505060405180910390fd5b60ac5460ff161561129c576040805162461bcd60e51b815260206004820152601c60248201527f416c7265616479207472616e736665726564206c697175696469747900000000604482015290519081900360640190fd5b60b15460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181600087803b1580156112e257600080fd5b505af11580156112f6573d6000803e3d6000fd5b505050506040513d602081101561130c57600080fd5b50516001600160a01b0316146113535760405162461bcd60e51b81526004018080602001828103825260248152602001806145606024913960400191505060405180910390fd5b6001600160a01b03811661136657600080fd5b60b1546040805163f2fde38b60e01b81526001600160a01b0384811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b1580156113b457600080fd5b505af11580156113c8573d6000803e3d6000fd5b505060b254604080516370a0823160e01b8152732a997ead7478885a66e6961ac0837800a07492fc60048201529051600094506114e093506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561143257600080fd5b505afa158015611446573d6000803e3d6000fd5b505050506040513d602081101561145c57600080fd5b505160b25460af54604080516370a0823160e01b81526001600160a01b039283166004820152905191909216916370a08231916024808301926020929190829003018186803b1580156114ae57600080fd5b505afa1580156114c2573d6000803e3d6000fd5b505050506040513d60208110156114d857600080fd5b50519061387c565b90508060b260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153157600080fd5b505afa158015611545573d6000803e3d6000fd5b505050506040513d602081101561155b57600080fd5b50510360b681905560b45461158491670de0b6b3a76400009161157e91906138df565b90613938565b60b55560b254604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91839182916370a08231916024808301926020929190829003018186803b1580156115db57600080fd5b505afa1580156115ef573d6000803e3d6000fd5b505050506040513d602081101561160557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561165657600080fd5b505af115801561166a573d6000803e3d6000fd5b505050506040513d602081101561168057600080fd5b505060b2546040805163148aedc160e21b81526001600160a01b0392831660048201529051479285169163522bb70491602480830192600092919082900301818387803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b5050505060006116fd824761397a90919063ffffffff16565b90506901f2bba5d84f99c00000811161175d576040805162461bcd60e51b815260206004820152601c60248201527f446964206e6f74207265636965766520656e6f75676820657468657200000000604482015290519081900360640190fd5b60b554611770606461157e84603c6138df565b116117bb576040805162461bcd60e51b81526020600482015260166024820152750546f6f206d75636820666f7220656e636f7265204c560541b604482015290519081900360640190fd5b60b1546001600160a01b0316158015906117df5750609e546001600160a01b031615155b80156117f55750609f546001600160a01b031615155b61183c576040805162461bcd60e51b815260206004820152601360248201527253616e69747920636865636b206661696c756560681b604482015290519081900360640190fd5b60b15460ae54609e546040805163266a23b160e21b81526001600160a01b03938416600482015291831660248301525191909216916399a88ec491604480830192600092919082900301818387803b15801561189757600080fd5b505af11580156118ab573d6000803e3d6000fd5b505060b15460ac54609f546040805163266a23b160e21b8152620100009093046001600160a01b039081166004850152918216602484015251921693506399a88ec4925060448082019260009290919082900301818387803b15801561191057600080fd5b505af1158015611924573d6000803e3d6000fd5b505050506119306139bc565b505060ac805460ff191660011790555050565b60b45481565b60a95481565b60a85481565b60a5546001600160a01b031681565b609754610100900460ff16156119af576040805162461bcd60e51b815260206004820152601f60248201526000805160206144d1833981519152604482015290519081900360640190fd5b6097805461ff00191661010017905560a45460ff1615611a16576040805162461bcd60e51b815260206004820152601760248201527f554e49434f5245204465706f7369747320636c6f736564000000000000000000604482015290519081900360640190fd5b60a654604080516370a0823160e01b81523360048201529051600092611a9a926001600160a01b039091169182916370a08231916024808301926020929190829003018186803b158015611a6957600080fd5b505afa158015611a7d573d6000803e3d6000fd5b505050506040513d6020811015611a9357600080fd5b5051613ae4565b33600090815260aa6020526040902054909150611ab7908261387c565b33600090815260aa6020526040902055506097805461ff0019169055565b609754610100900460ff1615611b20576040805162461bcd60e51b815260206004820152601f60248201526000805160206144d1833981519152604482015290519081900360640190fd5b6097805461ff00191661010090811790915560ac540460ff1615611b8b576040805162461bcd60e51b815260206004820152601f60248201527f54454e53204c50207472616e7366657273207374696c6c206f6e676f696e6700604482015290519081900360640190fd5b60bb54604080516370a0823160e01b81523360048201529051600092611bde926001600160a01b039091169182916370a08231916024808301926020929190829003018186803b158015611a6957600080fd5b33600090815260bf6020526040902054909150611bfb908261387c565b33600090815260bf6020526040902055506097805461ff0019169055565b611c21613878565b6065546001600160a01b03908116911614611c71576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b60a45460ff161515600114611cb75760405162461bcd60e51b815260040180806020018281038252602581526020018061445e6025913960400191505060405180910390fd5b815181518114611cfc576040805162461bcd60e51b815260206004820152600b60248201526a15dc9bdb99c81a5b9c1d5d60aa1b604482015290519081900360640190fd5b60005b81811015611d5757828181518110611d1357fe5b602002602001015160ab6000868481518110611d2b57fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055600101611cff565b50505050565b611d65613878565b6065546001600160a01b03908116911614611db5576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b60b85460ff1615611e02576040805162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481d1c985b9cd9995c995960721b604482015290519081900360640190fd5b60ac5460ff161515600114611e57576040805162461bcd60e51b8152602060048201526016602482015275115390d3d491481a185cc81d1bc819dbc8199a5c9cdd60521b604482015290519081900360640190fd5b60ba5460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181600087803b158015611e9d57600080fd5b505af1158015611eb1573d6000803e3d6000fd5b505050506040513d6020811015611ec757600080fd5b50516001600160a01b031614611f0e5760405162461bcd60e51b815260040180806020018281038252602281526020018061443c6022913960400191505060405180910390fd5b60b95460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181600087803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b505050506040513d6020811015611f7e57600080fd5b50516001600160a01b031614611fdb576040805162461bcd60e51b815260206004820152601c60248201527f536574206d6520617320746865206f776e657220666f722054454e5300000000604482015290519081900360640190fd5b6001600160a01b038116611fee57600080fd5b60ba546040805163f2fde38b60e01b81526001600160a01b0384811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b15801561203c57600080fd5b505af1158015612050573d6000803e3d6000fd5b505060b9546040805163f2fde38b60e01b81526001600160a01b038681166004830152915191909216935063f2fde38b9250602480830192600092919082900301818387803b1580156120a257600080fd5b505af11580156120b6573d6000803e3d6000fd5b5050505060bb60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561210857600080fd5b505afa15801561211c573d6000803e3d6000fd5b505050506040513d602081101561213257600080fd5b505160be5560bb54604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91839182916370a08231916024808301926020929190829003018186803b15801561218b57600080fd5b505afa15801561219f573d6000803e3d6000fd5b505050506040513d60208110156121b557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561220657600080fd5b505af115801561221a573d6000803e3d6000fd5b505050506040513d602081101561223057600080fd5b505060bb546040805163148aedc160e21b81526001600160a01b0392831660048201529051479284169163522bb70491602480830192600092919082900301818387803b15801561228057600080fd5b505af1158015612294573d6000803e3d6000fd5b5050505060006122ad824761397a90919063ffffffff16565b905068070c1cc73b00c80000811161230c576040805162461bcd60e51b815260206004820152601c60248201527f446964206e6f74207265636965766520656e6f75676820657468657200000000604482015290519081900360640190fd5b60bc546001600160a01b0316158015906123305750609f546001600160a01b031615155b612377576040805162461bcd60e51b815260206004820152601360248201527253616e69747920636865636b206661696c756560681b604482015290519081900360640190fd5b60ba5460b854609f546040805163266a23b160e21b81526101009093046001600160a01b0390811660048501529182166024840152519216916399a88ec49160448082019260009290919082900301818387803b1580156123d757600080fd5b505af11580156123eb573d6000803e3d6000fd5b505050506040516123fb9061426f565b604051809103906000f080158015612417573d6000803e3d6000fd5b5060bc80546001600160a01b0319166001600160a01b03928316179081905560b954604080516310a7a65960e01b81529284166004840152519216916310a7a6599160248082019260009290919082900301818387803b15801561247a57600080fd5b505af115801561248e573d6000803e3d6000fd5b505050506124b3670de0b6b3a764000061157e60b454846138df90919063ffffffff16565b60bd556124be613c71565b505060b8805460ff1916600117905550565b60b85460ff1681565b60ac54610100900460ff1681565b609f546001600160a01b031681565b6098546001600160a01b031681565b60a15481565b60b65481565b6097546201000090046001600160a01b031681565b61252e613878565b6065546001600160a01b0390811691161461257e576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b609d546000906001600160a01b03166125e357506000610fe6565b60975460ff166125f557506000610fe6565b33600090815260a3602052604090205460ff1615156001141561261a57506000610fe6565b600061262583612767565b90506000612632846130ff565b9050600061263f85610f35565b90508215801561264d575081155b8015612657575080155b156126685760009350505050610fe6565b600061268760b554610d1b60a85460bd5461387c90919063ffffffff16565b9050600084156126b5576126b2856126ac60a95460a85461393890919063ffffffff16565b906138df565b90505b83156126dd576126da846126ac60b65461157e60b5548661387c90919063ffffffff16565b90505b821561270557612702836126ac60be5461157e60bd548661387c90919063ffffffff16565b90505b61272a670de0b6b3a764000061157e8461157e60a054866138df90919063ffffffff16565b979650505050505050565b60bc546001600160a01b031681565b60a454610100900460ff1681565b60b0546001600160a01b031681565b60be5481565b60a45460009060ff16156127aa576001600160a01b038216600090815260aa602090815260408083205460ab909252909120546127a39161387c565b9050610fe6565b60a454604080516393f1a40b60e01b81526000600482018190526001600160a01b0386811660248401528351919462010000900416926393f1a40b9260448082019391829003018186803b15801561280157600080fd5b505afa158015612815573d6000803e3d6000fd5b505050506040513d604081101561282b57600080fd5b50516001600160a01b038416600090815260aa6020526040902054909150612853908261387c565b915050610fe6565b60975460ff1681565b600054610100900460ff168061287d575061287d613eed565b8061288b575060005460ff16155b6128c65760405162461bcd60e51b815260040180806020018281038252602e815260200180614532602e913960400191505060405180910390fd5b600054610100900460ff161580156128f1576000805460ff1961ff0019909116610100171660011790555b735a16552f59ea34e44ec81e58b3817833e9fd5436321461291157600080fd5b735a16552f59ea34e44ec81e58b3817833e9fd5436331461293157600080fd5b612939613ef3565b609c80546001600160a01b0319908116735a16552f59ea34e44ec81e58b3817833e9fd5436179091554260a255609f8054821673fed4ec1348a4068d4934e09492428fd92e399e5c179055609e805482167343dd7026284ac8f95eb02bb1bd68d0699b0ae9ca17905560a48054756f31ecd8110bcbc679aefb74c7608241d1b78949000062010000600160b01b03199182161790915560a580548316735506861bbb104baa8d8575e88e22084627b192d817905560b8805474f983ecf91195bd63de8445997082680e688749bc00610100600160a81b031990911617905560b98054831673776ca7ded9474829ea20ad4a5ab7a6ffdb64c79617905560ba80548316732d0c48c5bf930a09f8cd6fae5ac5a16b24e1723a17905560bb8054831673b1b537b7272ba1eda0086e2f480adca72c0b511c17905560bc805483167322c91cdd1e00cd4d7d029f0db94020fce3c486e317905560b180548316731964784ba40c9fd5eed1070c1c38cd5d1d5f9f5517905560af8054831673e0e4839e0c7b2773c58764f9ec3b9622d01a042817905560b280548316732e0721e6c951710725997928dcaaa05daafa031b17905560ae8054831673f3c3ff0ea59d15e82b9620ed7406fa3f6a261f9817905560ac805475def7bdf8ecb450c1d93c5db7c8dbce5894ccdaa90000921691909117905560ad805490911673c2cb86437355f36d42fb8d979ab28b9816ac0545179055612b6861271061157e6129e46126ac670de0b6b3a76400006002613938565b60b481905550600073255ca4596a963883afe0ef9c85ea071cc050128b9050806001600160a01b0316630c37c9966040518163ffffffff1660e01b815260040160206040518083038186803b158015612bc057600080fd5b505afa158015612bd4573d6000803e3d6000fd5b505050506040513d6020811015612bea57600080fd5b50516097805462010000600160b01b031916620100006001600160a01b03938416021790556040805163279c6b3360e11b8152905191831691634f38d66691600480820192602092909190829003018186803b158015612c4957600080fd5b505afa158015612c5d573d6000803e3d6000fd5b505050506040513d6020811015612c7357600080fd5b5051609980546001600160a01b0319166001600160a01b0392831617905560408051637bb53c2d60e11b815290519183169163f76a785a916004808201926020929091908290030181600087803b158015612ccd57600080fd5b505af1158015612ce1573d6000803e3d6000fd5b505050506040513d6020811015612cf757600080fd5b5051609880546001600160a01b0319166001600160a01b039283161790556040805163161d5a0360e11b8152905191831691632c3ab40691600480820192602092909190829003018186803b158015612d4f57600080fd5b505afa158015612d63573d6000803e3d6000fd5b505050506040513d6020811015612d7957600080fd5b5051609b80546001600160a01b039092166001600160a01b0319928316179055609a805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179055508015612dcb576000805461ff00191690555b50565b6099546001600160a01b031681565b6065546001600160a01b031690565b60a05481565b60b1546001600160a01b031681565b60a4546201000090046001600160a01b031681565b60b3546001600160a01b031681565b612e2d613878565b6065546001600160a01b03908116911614612e7d576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b609c546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519184169163a9059cbb916044808201926020929091908290030181600087803b158015612ed357600080fd5b505af1158015612ee7573d6000803e3d6000fd5b505050506040513d6020811015611d5757600080fd5b60ac5460ff1681565b612f0e613878565b6065546001600160a01b03908116911614612f5e576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b612f66613c71565b565b612f70613878565b6065546001600160a01b03908116911614612fc0576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b612f666139bc565b60b2546001600160a01b031681565b612fdf613878565b6065546001600160a01b0390811691161461302f576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b600061304e60b554610d1b60a85460bd5461387c90919063ffffffff16565b90508060a154146130a6576040805162461bcd60e51b815260206004820152601a60248201527f5374696c6c206d6f6e657920746f2073656e6420746f204c4745000000000000604482015290519081900360640190fd5b6001600160a01b0382166130ea576040805162461bcd60e51b815260206004808301919091526024820152630103737960e51b604482015290519081900360640190fd5b6130f48284613fa4565b505050565b60a75481565b60ac54604080516393f1a40b60e01b81526000600482018190526001600160a01b03858116602484015283519194859462010000909104909116926393f1a40b9260448083019392829003018186803b15801561315b57600080fd5b505afa15801561316f573d6000803e3d6000fd5b505050506040513d604081101561318557600080fd5b505160ad546040805163d6ce2ef960e01b81526001600160a01b0387811660048301529151939450600093919092169163d6ce2ef9916024808301926020929190829003018186803b1580156131da57600080fd5b505afa1580156131ee573d6000803e3d6000fd5b505050506040513d602081101561320457600080fd5b50516001600160a01b038516600090815260b76020526040902054909150613232908290610d1b908561387c565b949350505050565b609d546001600160a01b031681565b609754610100900460ff1615613294576040805162461bcd60e51b815260206004820152601f60248201526000805160206144d1833981519152604482015290519081900360640190fd5b6097805461ff00191661010090811790915560ac540460ff16156132ff576040805162461bcd60e51b815260206004820152601a60248201527f454e434f5245204c50207472616e736665727320636c6f736564000000000000604482015290519081900360640190fd5b60b254604080516370a0823160e01b81523360048201529051600092613352926001600160a01b039091169182916370a08231916024808301926020929190829003018186803b158015611a6957600080fd5b33600090815260b7602052604090205490915061336f908261387c565b33600090815260b76020526040902055506097805461ff0019169055565b609b546001600160a01b031681565b609c546001600160a01b031681565b6133b3613878565b6065546001600160a01b03908116911614613403576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b60c080546001600160a01b0319166001600160a01b0392909216919091179055565b609754610100900460ff1615613470576040805162461bcd60e51b815260206004820152601f60248201526000805160206144d1833981519152604482015290519081900360640190fd5b6097805461ff001916610100179081905560ff1615156001146134d1576040805162461bcd60e51b8152602060048201526014602482015273139bdd1a1a5b99c81d1bc818db185a5b481e595d60621b604482015290519081900360640190fd5b60006134dc336125c8565b11613521576040805162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b609d546001600160a01b031663a9059cbb3361353c816125c8565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561358257600080fd5b505af1158015613596573d6000803e3d6000fd5b505050506040513d60208110156135ac57600080fd5b50516135b757600080fd5b33600090815260a360205260409020805460ff191660011790556097805461ff0019169055565b6000806135fe60b554610d1b60a85460bd5461387c90919063ffffffff16565b60a154900391505090565b613611613878565b6065546001600160a01b03908116911614613661576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b60a254613671906202a30061387c565b4210156136bb576040805162461bcd60e51b81526020600482015260136024820152723220646179206772616365206f6e676f696e6760681b604482015290519081900360640190fd5b60ac805461ff001916610100179055565b60b9546001600160a01b031681565b6136e3613878565b6065546001600160a01b03908116911614613733576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b6001600160a01b0381166137785760405162461bcd60e51b81526004018080602001828103825260268152602001806144836026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60b55481565b6137e2613878565b6065546001600160a01b03908116911614613832576040805162461bcd60e51b81526020600482018190526024820152600080516020614512833981519152604482015290519081900360640190fd5b609d80546001600160a01b0319166001600160a01b0392909216919091179055565b60bb546001600160a01b031681565b60ad546001600160a01b031681565b60bd5481565b3390565b6000828201838110156138d6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6000826138ee575060006138d9565b828202828482816138fb57fe5b04146138d65760405162461bcd60e51b81526004018080602001828103825260218152602001806144f16021913960400191505060405180910390fd5b60006138d683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fda565b60006138d683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061407c565b60b154609c546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b158015613a0d57600080fd5b505af1158015613a21573d6000803e3d6000fd5b5050609c5460b15460408051638da5cb5b60e01b815290516001600160a01b039384169550929091169250638da5cb5b9160048083019260209291908290030181600087803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b505050506040513d6020811015613a9d57600080fd5b50516001600160a01b031614612f665760405162461bcd60e51b81526004018080602001828103825260288152602001806144a96028913960400191505060405180910390fd5b600080836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613b3457600080fd5b505afa158015613b48573d6000803e3d6000fd5b505050506040513d6020811015613b5e57600080fd5b5051604080516323b872dd60e01b81523360048201523060248201526044810186905290519192506001600160a01b038616916323b872dd916064808201926020929091908290030181600087803b158015613bb957600080fd5b505af1158015613bcd573d6000803e3d6000fd5b505050506040513d6020811015613be357600080fd5b5051613bee57600080fd5b61323281856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613c3f57600080fd5b505afa158015613c53573d6000803e3d6000fd5b505050506040513d6020811015613c6957600080fd5b50519061397a565b60b954609c546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b158015613cc257600080fd5b505af1158015613cd6573d6000803e3d6000fd5b5050609c5460b95460408051638da5cb5b60e01b815290516001600160a01b039384169550929091169250638da5cb5b9160048083019260209291908290030181600087803b158015613d2857600080fd5b505af1158015613d3c573d6000803e3d6000fd5b505050506040513d6020811015613d5257600080fd5b50516001600160a01b031614613daf576040805162461bcd60e51b815260206004820152601b60248201527f4d756c7469736967206e6f74206f776e6572206f6620746f6b656e0000000000604482015290519081900360640190fd5b60ba54609c546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b158015613e0057600080fd5b505af1158015613e14573d6000803e3d6000fd5b5050609c5460ba5460408051638da5cb5b60e01b815290516001600160a01b039384169550929091169250638da5cb5b9160048083019260209291908290030181600087803b158015613e6657600080fd5b505af1158015613e7a573d6000803e3d6000fd5b505050506040513d6020811015613e9057600080fd5b50516001600160a01b031614612f66576040805162461bcd60e51b815260206004820181905260248201527f4d756c7469736967206e6f74206f776e6572206f662070726f787961646d696e604482015290519081900360640190fd5b303b1590565b600054610100900460ff1680613f0c5750613f0c613eed565b80613f1a575060005460ff16155b613f555760405162461bcd60e51b815260040180806020018281038252602e815260200180614532602e913960400191505060405180910390fd5b600054610100900460ff16158015613f80576000805460ff1961ff0019909116610100171660011790555b613f886140d6565b613f90614176565b8015612dcb576000805461ff001916905550565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156130f4573d6000803e3d6000fd5b600081836140665760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561402b578181015183820152602001614013565b50505050905090810190601f1680156140585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161407257fe5b0495945050505050565b600081848411156140ce5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561402b578181015183820152602001614013565b505050900390565b600054610100900460ff16806140ef57506140ef613eed565b806140fd575060005460ff16155b6141385760405162461bcd60e51b815260040180806020018281038252602e815260200180614532602e913960400191505060405180910390fd5b600054610100900460ff16158015613f90576000805460ff1961ff0019909116610100171660011790558015612dcb576000805461ff001916905550565b600054610100900460ff168061418f575061418f613eed565b8061419d575060005460ff16155b6141d85760405162461bcd60e51b815260040180806020018281038252602e815260200180614532602e913960400191505060405180910390fd5b600054610100900460ff16158015614203576000805460ff1961ff0019909116610100171660011790555b600061420d613878565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612dcb576000805461ff001916905550565b6101bf8061427d8339019056fe608060405234801561001057600080fd5b50600080546001600160a01b03191673b1b537b7272ba1eda0086e2f480adca72c0b511c179055610179806100466000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80630484c7281461003b578063301a58011461005f575b600080fd5b6100436100b3565b604080516001600160a01b039092168252519081900360200190f35b6100956004803603606081101561007557600080fd5b506001600160a01b038135811691602081013590911690604001356100c2565b60408051938452602084019290925282820152519081900360600190f35b6000546001600160a01b031681565b60008054819081906001600160a01b03878116911614806100f057506000546001600160a01b038681169116145b15610138576040805162461bcd60e51b81526020600482015260136024820152722a22a7299034b9903232b83932b1b0ba32b21760691b604482015290519081900360640190fd5b92959094509192505056fea2646970667358221220ee646249104930673004beb20cb312f8ec8e71d0fde65d62ed38126cef33858264736f6c634300060c0033536574206d65206173207468652070726f7879206f776e657220666f722054454e53554e49434f5245204465706f7369747320617265207374696c6c206e6f7420636c6f7365644f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737350726f7879204f776e657273686970205472616e73666572204e6f74205375636365737366756c6c434f5245204d69677261746f723a20457865637574696f6e204c6f636b656400536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564536574206d65206173207468652070726f7879206f776e657220666f7220454e434f5245454e434f5245204c50207472616e7366657273207374696c6c206f6e676f696e67a264697066735822122039757bb3739928fb27d102ea22f670bae034c39e45414469ca000009a10e191e64736f6c634300060c0033
Deployed Bytecode Sourcemap
26642:22342:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27379:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;27531:36;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;27531:36:0;;;;;;;;;;;;;;28978:19;;;;;;;;;;;;;:::i;47530:437::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47530:437:0;;:::i;:::-;;33594:117;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33594:117:0;-1:-1:-1;;;;;33594:117:0;;:::i;27998:27::-;;;;;;;;;;;;;:::i;28687:31::-;;;;;;;;;;;;;:::i;28116:27::-;;;;;;;;;;;;;:::i;28075:34::-;;;;;;;;;;;;;:::i;43030:224::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43030:224:0;-1:-1:-1;;;;;43030:224:0;;:::i;:::-;;;;;;;;;;;;;;;;28623:25;;;;;;;;;;;;;:::i;27108:37::-;;;;;;;;;;;;;:::i;48567:318::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48567:318:0;-1:-1:-1;;;;;48567:318:0;;:::i;40037:2159::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40037:2159:0;-1:-1:-1;;;;;40037:2159:0;;:::i;28307:41::-;;;;;;;;;;;;;:::i;27694:38::-;;;;;;;;;;;;;:::i;27646:41::-;;;;;;;;;;;;;:::i;27496:28::-;;;;;;;;;;;;;:::i;34154:368::-;;;;;;;;;;;;;:::i;42674:348::-;;;;;;;;;;;;;:::i;33145:441::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33145:441:0;;;;;;;;-1:-1:-1;33145:441:0;;-1:-1:-1;;33145:441:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33145:441:0;;-1:-1:-1;33145:441:0;;-1:-1:-1;;;;;33145:441:0:i;43262:1796::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43262:1796:0;-1:-1:-1;;;;;43262:1796:0;;:::i;28579:37::-;;;;;;;;;;;;;:::i;27956:35::-;;;;;;;;;;;;;:::i;27152:30::-;;;;;;;;;;;;;:::i;26887:28::-;;;;;;;;;;;;;:::i;27225:27::-;;;;;;;;;;;;;:::i;28402:37::-;;;;;;;;;;;;;:::i;26861:19::-;;;;;;;;;;;;;:::i;23442:148::-;;;;;;;;;;;;;:::i;31783:1282::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31783:1282:0;-1:-1:-1;;;;;31783:1282:0;;:::i;28760:42::-;;;;;;;;;;;;;:::i;27414:40::-;;;;;;;;;;;;;:::i;28150:36::-;;;;;;;;;;;;;:::i;28854:35::-;;;;;;;;;;;;;:::i;33719:427::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33719:427:0;-1:-1:-1;;;;;33719:427:0;;:::i;26800:28::-;;;;;;;;;;;;;:::i;29220:2051::-;;;;;;;;;;;;;:::i;26922:40::-;;;;;;;;;;;;;:::i;22800:79::-;;;;;;;;;;;;;:::i;27189:29::-;;;;;;;;;;;;;:::i;28193:33::-;;;;;;;;;;;;;:::i;27461:28::-;;;;;;;;;;;;;:::i;28270:30::-;;;;;;;;;;;;;:::i;47383:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47383:139:0;;;;;;;;:::i;27910:39::-;;;;;;;;;;;;;:::i;45066:124::-;;;;;;;;;;;;;:::i;42204:126::-;;;;;;;;;;;;;:::i;28233:30::-;;;;;;;;;;;;;:::i;47975:345::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47975:345:0;;;;;;-1:-1:-1;;;;;47975:345:0;;:::i;27602:37::-;;;;;;;;;;;;;:::i;39071:363::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39071:363:0;-1:-1:-1;;;;;39071:363:0;;:::i;27065:36::-;;;;;;;;;;;;;:::i;39473:353::-;;;;;;;;;;;;;:::i;26986:29::-;;;;;;;;;;;;;:::i;27022:36::-;;;;;;;;;;;;;:::i;48893:86::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48893:86:0;-1:-1:-1;;;;;48893:86:0;;:::i;31471:304::-;;;;;;;;;;;;;:::i;48328:231::-;;;;;;;;;;;;;:::i;39834:195::-;;;;;;;;;;;;;:::i;28655:25::-;;;;;;;;;;;;;:::i;23745:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23745:244:0;-1:-1:-1;;;;;23745:244:0;;:::i;28355:40::-;;;;;;;;;;;;;:::i;31354:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31354:109:0;-1:-1:-1;;;;;31354:109:0;;:::i;28725:28::-;;;;;;;;;;;;;:::i;28032:36::-;;;;;;;;;;;;;:::i;28809:38::-;;;;;;;;;;;;;:::i;27379:28::-;;;;;;:::o;27531:36::-;;;-1:-1:-1;;;;;27531:36:0;;:::o;28978:19::-;;;-1:-1:-1;;;;;28978:19:0;;:::o;47530:437::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;47593:16:::1;47612:86;47672:25;;47612:55;47640:26;;47612:23;;:27;;:55;;;;:::i;:::-;:59:::0;::::1;:86::i;:::-;47724:12;::::0;47593:105;;-1:-1:-1;47724:21:0::1;::::0;47741:3;47724:16:::1;:21::i;:::-;47709:12;:36:::0;;;47764:24;-1:-1:-1;47764:24:0::1;47756:50;;;::::0;;-1:-1:-1;;;47756:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;47756:50:0;;;;;;;;;;;;;::::1;;47825:4;::::0;-1:-1:-1;;;;;47825:4:0::1;47817:58;;;::::0;;-1:-1:-1;;;47817:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;47892:4;;;;;;;;;-1:-1:-1::0;;;;;47892:4:0::1;-1:-1:-1::0;;;;;47886:27:0::1;;47920:3;47886:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;47942:17:0::1;::::0;;;;;;;::::1;::::0;-1:-1:-1;47942:17:0;;;;::::1;::::0;;-1:-1:-1;47942:17:0;-1:-1:-1;47942:17:0::1;23082:1;47530:437:::0;:::o;33594:117::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;33673:21:::1;:30:::0;;-1:-1:-1;;;;;;33673:30:0::1;-1:-1:-1::0;;;;;33673:30:0;;;::::1;::::0;;;::::1;::::0;;33594:117::o;27998:27::-;;;;;;-1:-1:-1;;;;;27998:27:0;;:::o;28687:31::-;;;-1:-1:-1;;;;;28687:31:0;;:::o;28116:27::-;;;-1:-1:-1;;;;;28116:27:0;;:::o;28075:34::-;;;-1:-1:-1;;;;;28075:34:0;;:::o;43030:224::-;43160:10;;43146:45;;;-1:-1:-1;;;43146:45:0;;43099:7;43146:45;;;;;;-1:-1:-1;;;;;43146:45:0;;;;;;;;;43099:7;;;;43160:10;;;;;;;;43146:34;;:45;;;;;;;;;;;43160:10;43146:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43146:45:0;-1:-1:-1;;;;;43209:21:0;;;;;;:13;43146:45;43209:21;43146:45;43209:21;;;43146:45;;-1:-1:-1;43209:37:0;;43146:45;43209:25;:37::i;:::-;43202:44;;;43030:224;;;;:::o;28623:25::-;;;;;;-1:-1:-1;;;;;28623:25:0;;:::o;27108:37::-;;;-1:-1:-1;;;;;27108:37:0;;:::o;48567:318::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;48648:21:::1;::::0;-1:-1:-1;;;;;48648:21:0::1;48640:73;;;::::0;;-1:-1:-1;;;48640:73:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;48729:11;-1:-1:-1::0;;;;;48724:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;48772:16:0::1;:23:::0;;-1:-1:-1;;48772:23:0::1;48791:4;48772:23;::::0;;-1:-1:-1;;48830:21:0::1;::::0;48823:54:::1;::::0;;-1:-1:-1;;;48823:54:0;;48871:4:::1;48823:54;::::0;::::1;::::0;;;-1:-1:-1;;;;;48830:21:0;;::::1;::::0;48823:39:::1;::::0;:54;;;;;::::1;::::0;;;;;;;;;48830:21;48823:54;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;48823:54:0;48806:14:::1;:71:::0;-1:-1:-1;48567:318:0:o;40037:2159::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;40141:23:::1;::::0;::::1;;::::0;;::::1;;:31;;:23;:31;40133:77;;;;-1:-1:-1::0;;;40133:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40229:27;::::0;::::1;;:36;40221:77;;;::::0;;-1:-1:-1;;;40221:77:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;40329:18;::::0;40317:39:::1;::::0;;-1:-1:-1;;;40317:39:0;;;;40368:4:::1;::::0;-1:-1:-1;;;;;40329:18:0::1;::::0;40317:37:::1;::::0;:39:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;40329:18:::1;::::0;40317:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;40317:39:0;-1:-1:-1;;;;;40317:56:0::1;;40309:105;;;;-1:-1:-1::0;;;40309:105:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;40435:37:0;::::1;40427:46;;;::::0;::::1;;40496:18;::::0;40484:74:::1;::::0;;-1:-1:-1;;;40484:74:0;;-1:-1:-1;;;;;40484:74:0;;::::1;;::::0;::::1;::::0;;;40496:18;;;::::1;::::0;40484:49:::1;::::0;:74;;;;;40496:18:::1;::::0;40484:74;;;;;;;40496:18;;40484:74;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;40721:15:0::1;::::0;40714:77:::1;::::0;;-1:-1:-1;;;40714:77:0;;40748:42:::1;40714:77;::::0;::::1;::::0;;;40619:22:::1;::::0;-1:-1:-1;40644:148:0::1;::::0;-1:-1:-1;;;;;;40721:15:0;;::::1;::::0;40714:33:::1;::::0;:77;;;;;::::1;::::0;;;;;;;;;40721:15;40714:77;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;40714:77:0;40651:15:::1;::::0;40678:12:::1;::::0;40644:47:::1;::::0;;-1:-1:-1;;;40644:47:0;;-1:-1:-1;;;;;40678:12:0;;::::1;40644:47;::::0;::::1;::::0;;;40651:15;;;::::1;::::0;40644:33:::1;::::0;:47;;;;;40714:77:::1;::::0;40644:47;;;;;;;40651:15;40644:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;40644:47:0;;:69:::1;:148::i;:::-;40619:173;;40870:14;40837:15;;;;;;;;;-1:-1:-1::0;;;;;40837:15:0::1;-1:-1:-1::0;;;;;40830:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;40830:37:0;:54:::1;40805:22;:79:::0;;;41039:26:::1;::::0;40979:115:::1;::::0;41089:4:::1;::::0;40979:87:::1;::::0;40830:54;40979:59:::1;:87::i;:::-;:109:::0;::::1;:115::i;:::-;40951:25;:143:::0;41161:15:::1;::::0;41218:48:::1;::::0;;-1:-1:-1;;;41218:48:0;;41260:4:::1;41218:48;::::0;::::1;::::0;;;-1:-1:-1;;;;;41161:15:0;;::::1;::::0;41154:46:::1;::::0;41161:15;;;;41218:33:::1;::::0;:48;;;;;::::1;::::0;;;;;;;;41161:15;41218:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;41218:48:0;41154:113:::1;::::0;;-1:-1:-1;;;;;;41154:113:0::1;::::0;;;;;;-1:-1:-1;;;;;41154:113:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;41218:48:::1;::::0;41154:113;;;;;;;-1:-1:-1;41154:113:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;41382:15:0::1;::::0;41335:63:::1;::::0;;-1:-1:-1;;;41335:63:0;;-1:-1:-1;;;;;41382:15:0;;::::1;41335:63;::::0;::::1;::::0;;;41303:21:::1;::::0;41335:46;::::1;::::0;::::1;::::0;:63;;;;;41280:20:::1;::::0;41335:63;;;;;;;41280:20;41335:46;:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41409:14;41426:39;41452:12;41426:21;:25;;:39;;;;:::i;:::-;41409:56;;41528:10;41519:6;:19;41511:60;;;::::0;;-1:-1:-1;;;41511:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;41661:25;::::0;41635:23:::1;41654:3;41635:14;:6:::0;41646:2:::1;41635:10;:14::i;:23::-;:51;41627:86;;;::::0;;-1:-1:-1;;;41627:86:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41627:86:0;;;;;;;;;;;;;::::1;;41751:18;::::0;-1:-1:-1;;;;;41751:18:0::1;:32:::0;;::::1;::::0;:91:::1;;-1:-1:-1::0;41806:22:0::1;::::0;-1:-1:-1;;;;;41806:22:0::1;:36:::0;::::1;41751:91;:142;;;;-1:-1:-1::0;41864:15:0::1;::::0;-1:-1:-1;;;;;41864:15:0::1;:29:::0;::::1;41751:142;41743:174;;;::::0;;-1:-1:-1;;;41743:174:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41743:174:0;;;;;;;;;;;;;::::1;;41942:18;::::0;41970:19:::1;::::0;41991:22:::1;::::0;41930:84:::1;::::0;;-1:-1:-1;;;41930:84:0;;-1:-1:-1;;;;;41970:19:0;;::::1;41930:84;::::0;::::1;::::0;41991:22;;::::1;41930:84:::0;;;;;41942:18;;;::::1;::::0;41930:39:::1;::::0;:84;;;;;41942:18:::1;::::0;41930:84;;;;;;;41942:18;;41930:84;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;42037:18:0::1;::::0;42065:12:::1;::::0;42079:15:::1;::::0;42025:70:::1;::::0;;-1:-1:-1;;;42025:70:0;;42065:12;;;::::1;-1:-1:-1::0;;;;;42065:12:0;;::::1;42025:70;::::0;::::1;::::0;42079:15;;::::1;42025:70:::0;;;;;42037:18;::::1;::::0;-1:-1:-1;42025:39:0::1;::::0;-1:-1:-1;42025:70:0;;;;;42037:18:::1;::::0;42025:70;;;;;;;;42037:18;;42025:70;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42106:37;:35;:37::i;:::-;-1:-1:-1::0;;42154:27:0::1;:34:::0;;-1:-1:-1;;42154:34:0::1;42184:4;42154:34;::::0;;-1:-1:-1;;40037:2159:0:o;28307:41::-;;;;:::o;27694:38::-;;;;:::o;27646:41::-;;;;:::o;27496:28::-;;;-1:-1:-1;;;;;27496:28:0;;:::o;34154:368::-;29070:6;;;;;;;:15;29062:59;;;;;-1:-1:-1;;;29062:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29062:59:0;;;;;;;;;;;;;;;29132:6;:13;;-1:-1:-1;;29132:13:0;;;;;34215:16:::1;::::0;29132:13;34215:16:::1;:25;34207:61;;;::::0;;-1:-1:-1;;;34207:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34345:21;::::0;34368:51:::1;::::0;;-1:-1:-1;;;34368:51:0;;34408:10:::1;34368:51;::::0;::::1;::::0;;;34279:16:::1;::::0;34298:122:::1;::::0;-1:-1:-1;;;;;34345:21:0;;::::1;::::0;;;34368:39:::1;::::0;:51;;;;;::::1;::::0;;;;;;;;34345:21;34368:51;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34368:51:0;34298:46:::1;:122::i;:::-;34489:10;34467:33;::::0;;;:21:::1;:33;::::0;;;;;34279:141;;-1:-1:-1;34467:47:0::1;::::0;34279:141;34467:37:::1;:47::i;:::-;34453:10;34431:33;::::0;;;:21:::1;:33;::::0;;;;:83;-1:-1:-1;29168:6:0;:14;;-1:-1:-1;;29168:14:0;;;34154:368::o;42674:348::-;29070:6;;;;;;;:15;29062:59;;;;;-1:-1:-1;;;29062:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29062:59:0;;;;;;;;;;;;;;;29132:6;:13;;-1:-1:-1;;29132:13:0;;;;;;;;42732:23:::1;::::0;::::1;29132:13:::0;42732:23:::1;:32;42724:76;;;::::0;;-1:-1:-1;;;42724:76:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;42877:13;::::0;42892:43:::1;::::0;;-1:-1:-1;;;42892:43:0;;42924:10:::1;42892:43;::::0;::::1;::::0;;;42811:16:::1;::::0;42830:106:::1;::::0;-1:-1:-1;;;;;42877:13:0;;::::1;::::0;;;42892:31:::1;::::0;:43;;;;;::::1;::::0;;;;;;;;42877:13;42892:43;::::1;;::::0;::::1;;;;::::0;::::1;42830:106;42989:10;42975:25;::::0;;;:13:::1;:25;::::0;;;;;42811:125;;-1:-1:-1;42975:39:0::1;::::0;42811:125;42975:29:::1;:39::i;:::-;42961:10;42947:25;::::0;;;:13:::1;:25;::::0;;;;:67;-1:-1:-1;29168:6:0;:14;;-1:-1:-1;;29168:14:0;;;42674:348::o;33145:441::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;33262:16:::1;::::0;::::1;;:24;;:16:::0;:24:::1;33254:74;;;;-1:-1:-1::0;;;33254:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33358:17:::0;;33404:15;;33394:25;::::1;33386:49;;;::::0;;-1:-1:-1;;;33386:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33386:49:0;;;;;;;;;;;;;::::1;;33453:9;33448:131;33472:6;33468:1;:10;33448:131;;;33556:8;33565:1;33556:11;;;;;;;;;;;;;;33500:38;:53;33539:10;33550:1;33539:13;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;33500:53:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;33500:53:0;:67;33480:3:::1;;33448:131;;;;23082:1;33145:441:::0;;:::o;43262:1796::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;43364:25:::1;::::0;::::1;;:34;43356:65;;;::::0;;-1:-1:-1;;;43356:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43356:65:0;;;;;;;;;;;;;::::1;;43440:27;::::0;::::1;;:35;;:27:::0;:35:::1;43432:70;;;::::0;;-1:-1:-1;;;43432:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43432:70:0;;;;;;;;;;;;;::::1;;43535:16;::::0;43523:37:::1;::::0;;-1:-1:-1;;;43523:37:0;;;;43572:4:::1;::::0;-1:-1:-1;;;;;43535:16:0::1;::::0;43523:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;43535:16:::1;::::0;43523:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;43523:37:0;-1:-1:-1;;;;;43523:54:0::1;;43515:101;;;;-1:-1:-1::0;;;43515:101:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43647:10;::::0;43635:31:::1;::::0;;-1:-1:-1;;;43635:31:0;;;;43678:4:::1;::::0;-1:-1:-1;;;;;43647:10:0::1;::::0;43635:29:::1;::::0;:31:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;43647:10:::1;::::0;43635:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;43635:31:0;-1:-1:-1;;;;;43635:48:0::1;;43627:89;;;::::0;;-1:-1:-1;;;43627:89:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;43753:37:0;::::1;43745:46;;;::::0;::::1;;43816:16;::::0;43804:72:::1;::::0;;-1:-1:-1;;;43804:72:0;;-1:-1:-1;;;;;43804:72:0;;::::1;;::::0;::::1;::::0;;;43816:16;;;::::1;::::0;43804:47:::1;::::0;:72;;;;;43816:16:::1;::::0;43804:72;;;;;;;43816:16;;43804:72;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;43899:10:0::1;::::0;43887:66:::1;::::0;;-1:-1:-1;;;43887:66:0;;-1:-1:-1;;;;;43887:66:0;;::::1;;::::0;::::1;::::0;;;43899:10;;;::::1;::::0;-1:-1:-1;43887:41:0::1;::::0;-1:-1:-1;43887:66:0;;;;;43899:10:::1;::::0;43887:66;;;;;;;43899:10;;43887:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43994:13;;;;;;;;;-1:-1:-1::0;;;;;43994:13:0::1;-1:-1:-1::0;;;;;43987:33:0::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;43987:35:0;43964:20:::1;:58:::0;44089:13:::1;::::0;44142:46:::1;::::0;;-1:-1:-1;;;44142:46:0;;44182:4:::1;44142:46;::::0;::::1;::::0;;;-1:-1:-1;;;;;44089:13:0;;::::1;::::0;44082:44:::1;::::0;44089:13;;;;44142:31:::1;::::0;:46;;;;;43987:35:::1;::::0;44142:46;;;;;;;44089:13;44142:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;44142:46:0;44082:107:::1;::::0;;-1:-1:-1;;;;;;44082:107:0::1;::::0;;;;;;-1:-1:-1;;;;;44082:107:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;44142:46:::1;::::0;44082:107;;;;;;;-1:-1:-1;44082:107:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;44304:13:0::1;::::0;44257:61:::1;::::0;;-1:-1:-1;;;44257:61:0;;-1:-1:-1;;;;;44304:13:0;;::::1;44257:61;::::0;::::1;::::0;;;44225:21:::1;::::0;44257:46;::::1;::::0;::::1;::::0;:61;;;;;44202:20:::1;::::0;44257:61;;;;;;;44202:20;44257:46;:61;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44329:14;44346:39;44372:12;44346:21;:25;;:39;;;;:::i;:::-;44329:56;;44413:9;44404:6;:18;44396:59;;;::::0;;-1:-1:-1;;;44396:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;44476:27;::::0;-1:-1:-1;;;;;44476:27:0::1;:41:::0;;::::1;::::0;:87:::1;;-1:-1:-1::0;44534:15:0::1;::::0;-1:-1:-1;;;;;44534:15:0::1;:29:::0;::::1;44476:87;44468:119;;;::::0;;-1:-1:-1;;;44468:119:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;44468:119:0;;;;;;;;;;;;;::::1;;44612:16;::::0;44638:10:::1;::::0;44650:15:::1;::::0;44600:66:::1;::::0;;-1:-1:-1;;;44600:66:0;;44612:16:::1;44638:10:::0;;::::1;-1:-1:-1::0;;;;;44638:10:0;;::::1;44600:66;::::0;::::1;::::0;44650:15;;::::1;44600:66:::0;;;;;44612:16;::::1;::::0;44600:37:::1;::::0;:66;;;;;44612:16:::1;::::0;44600:66;;;;;;;;44612:16;;44600:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44717:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;44677:27:0::1;:72:::0;;-1:-1:-1;;;;;;44677:72:0::1;-1:-1:-1::0;;;;;44677:72:0;;::::1;;::::0;;;;44766:10:::1;::::0;44760:71:::1;::::0;;-1:-1:-1;;;44760:71:0;;44803:27;;::::1;44760:71;::::0;::::1;::::0;;44766:10;::::1;::::0;44760:42:::1;::::0;:71;;;;;-1:-1:-1;;44760:71:0;;;;;;;;-1:-1:-1;44766:10:0;44760:71;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44868:84;44947:4;44868:56;44897:26;;44868:6;:28;;:56;;;;:::i;:84::-;44842:23;:110:::0;44965:36:::1;:34;:36::i;:::-;-1:-1:-1::0;;45014:25:0::1;:32:::0;;-1:-1:-1;;45014:32:0::1;45042:4;45014:32;::::0;;-1:-1:-1;43262:1796:0:o;28579:37::-;;;;;;:::o;27956:35::-;;;;;;;;;:::o;27152:30::-;;;-1:-1:-1;;;;;27152:30:0;;:::o;26887:28::-;;;-1:-1:-1;;;;;26887:28:0;;:::o;27225:27::-;;;;:::o;28402:37::-;;;;:::o;26861:19::-;;;;;;-1:-1:-1;;;;;26861:19:0;;:::o;23442:148::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;23533:6:::1;::::0;23512:40:::1;::::0;23549:1:::1;::::0;-1:-1:-1;;;;;23533:6:0::1;::::0;23512:40:::1;::::0;23549:1;;23512:40:::1;23563:6;:19:::0;;-1:-1:-1;;;;;;23563:19:0::1;::::0;;23442:148::o;31783:1282::-;31874:21;;31837;;-1:-1:-1;;;;;31874:21:0;31871:49;;-1:-1:-1;31919:1:0;31912:8;;31871:49;31934:16;;;;31931:38;;-1:-1:-1;31968:1:0;31961:8;;31931:38;31993:10;31983:21;;;;:9;:21;;;;;;;;:29;;:21;:29;31980:42;;;-1:-1:-1;32021:1:0;32014:8;;31980:42;32035:22;32060:33;32088:4;32060:27;:33::i;:::-;32035:58;;32104:21;32128:30;32153:4;32128:24;:30::i;:::-;32104:54;;32169:19;32191:28;32214:4;32191:22;:28::i;:::-;32169:50;-1:-1:-1;32235:19:0;;:41;;;;-1:-1:-1;32258:18:0;;32235:41;:61;;;;-1:-1:-1;32280:16:0;;32235:61;32232:74;;;32305:1;32298:8;;;;;;;32232:74;32319:16;32338:86;32398:25;;32338:55;32366:26;;32338:23;;:27;;:55;;;;:::i;:86::-;32319:105;-1:-1:-1;32435:26:0;32477:18;;32474:145;;32532:75;32592:14;32532:55;32563:23;;32532:26;;:30;;:55;;;;:::i;:::-;:59;;:75::i;:::-;32511:96;;32474:145;32634:17;;32631:167;;32688:96;32770:13;32688:77;32742:22;;32688:49;32711:25;;32688:18;:22;;:49;;;;:::i;:96::-;32667:117;;32631:167;32813:15;;32810:157;;32865:90;32943:11;32865:73;32917:20;;32865:47;32888:23;;32865:18;:22;;:47;;;;:::i;:90::-;32844:111;;32810:157;32995:62;33052:4;32995:52;33038:8;32995:38;33018:14;;32995:18;:22;;:38;;;;:::i;:62::-;32979:78;31783:1282;-1:-1:-1;;;;;;;31783:1282:0:o;28760:42::-;;;-1:-1:-1;;;;;28760:42:0;;:::o;27414:40::-;;;;;;;;;:::o;28150:36::-;;;-1:-1:-1;;;;;28150:36:0;;:::o;28854:35::-;;;;:::o;33719:427::-;33818:16;;33793:7;;33818:16;;33815:322;;;-1:-1:-1;;;;;33909:29:0;;;;;;:21;:29;;;;;;;;;33858:38;:46;;;;;;;:81;;:50;:81::i;:::-;33851:88;;;;33815:322;34022:13;;34008:48;;;-1:-1:-1;;;34008:48:0;;33984:18;34008:48;;;;;;-1:-1:-1;;;;;34008:48:0;;;;;;;;;33984:18;;34022:13;;;;;34008:37;;:48;;;;;;;;;;;34022:13;34008:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34008:48:0;-1:-1:-1;;;;;34078:29:0;;;;;;:21;34008:48;34078:29;34008:48;34078:29;;;34008:48;;-1:-1:-1;34078:45:0;;34008:48;34078:33;:45::i;:::-;34071:52;;;;;26800:28;;;;;;:::o;29220:2051::-;19031:12;;;;;;;;:31;;;19047:15;:13;:15::i;:::-;19031:47;;;-1:-1:-1;19067:11:0;;;;19066:12;19031:47;19023:106;;;;-1:-1:-1;;;19023:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19138:19;19161:12;;;;;;19160:13;19180:83;;;;19209:12;:19;;-1:-1:-1;;;;19209:19:0;;;;;19237:18;19224:4;19237:18;;;19180:83;29292:42:::1;29279:9;:55;29271:64;;;::::0;::::1;;29368:42;29354:10;:56;29346:65;;;::::0;::::1;;29424:35;:33;:35::i;:::-;29470:13;:58:::0;;-1:-1:-1;;;;;;29470:58:0;;::::1;29486:42;29470:58;::::0;;;29564:15:::1;29539:22;:40:::0;29637:15:::1;:60:::0;;;::::1;29655:42;29637:60;::::0;;29708:22:::1;:67:::0;;;::::1;29733:42;29708:67;::::0;;29807:13:::1;:58:::0;;;-1:-1:-1;;;;;;29807:58:0;;::::1;;::::0;;;29876:13:::1;:58:::0;;;::::1;29892:42;29876:58;::::0;;29963:10:::1;:55:::0;;;-1:-1:-1;;;;;;29963:55:0;;::::1;;::::0;;30029:10:::1;:55:::0;;;::::1;30042:42;30029:55;::::0;;30095:16:::1;:61:::0;;;::::1;30114:42;30095:61;::::0;;30167:13:::1;:58:::0;;;::::1;30183:42;30167:58;::::0;;30236:27:::1;:72:::0;;;::::1;30266:42;30236:72;::::0;;30329:18:::1;:63:::0;;;::::1;30350:42;30329:63;::::0;;30403:12:::1;:57:::0;;;::::1;30418:42;30403:57;::::0;;30471:15:::1;:60:::0;;;::::1;30489:42;30471:60;::::0;;30542:19:::1;:64:::0;;;::::1;30564:42;30542:64;::::0;;30617:12:::1;:57:::0;;;;::::1;::::0;;;::::1;::::0;;30685:21:::1;:66:::0;;;;::::1;30709:42;30685:66;::::0;;30791:45:::1;30830:5;30791:34;30819:5;30791:23;30799:7;29807:13;30791:20;:23::i;:45::-;30762:26;:74;;;;30881:20;30917:42;30881:79;;30985:7;-1:-1:-1::0;;;;;30985:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30985:26:0;30971:4:::1;:41:::0;;-1:-1:-1;;;;;;30971:41:0::1;::::0;-1:-1:-1;;;;;30971:41:0;;::::1;;;::::0;;31058:24:::1;::::0;;-1:-1:-1;;;31058:24:0;;;;:22;;::::1;::::0;::::1;::::0;:24:::1;::::0;;::::1;::::0;30985:26:::1;::::0;31058:24;;;;;;;;:22;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31058:24:0;31023:14:::1;:60:::0;;-1:-1:-1;;;;;;31023:60:0::1;-1:-1:-1::0;;;;;31023:60:0;;::::1;;::::0;;31117:26:::1;::::0;;-1:-1:-1;;;31117:26:0;;;;:24;;::::1;::::0;::::1;::::0;:26:::1;::::0;;::::1;::::0;31058:24:::1;::::0;31117:26;;;;;;;;-1:-1:-1;31117:24:0;:26;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31117:26:0;31094:9:::1;:50:::0;;-1:-1:-1;;;;;;31094:50:0::1;-1:-1:-1::0;;;;;31094:50:0;;::::1;;::::0;;31171:25:::1;::::0;;-1:-1:-1;;;31171:25:0;;;;:23;;::::1;::::0;::::1;::::0;:25:::1;::::0;;::::1;::::0;31117:26:::1;::::0;31171:25;;;;;;;;:23;:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31171:25:0;31155:13:::1;:41:::0;;-1:-1:-1;;;;;31155:41:0;;::::1;-1:-1:-1::0;;;;;;31155:41:0;;::::1;;::::0;;31207:4:::1;:56:::0;;;;::::1;31220:42;31207:56;::::0;;-1:-1:-1;19281:57:0;;;;19325:5;19310:20;;-1:-1:-1;;19310:20:0;;;19281:57;29220:2051;:::o;26922:40::-;;;-1:-1:-1;;;;;26922:40:0;;:::o;22800:79::-;22865:6;;-1:-1:-1;;;;;22865:6:0;22800:79;:::o;27189:29::-;;;;:::o;28193:33::-;;;-1:-1:-1;;;;;28193:33:0;;:::o;27461:28::-;;;;;;-1:-1:-1;;;;;27461:28:0;;:::o;28270:30::-;;;-1:-1:-1;;;;;28270:30:0;;:::o;47383:139::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;47495:13:::1;::::0;47472:42:::1;::::0;;-1:-1:-1;;;47472:42:0;;-1:-1:-1;;;;;47495:13:0;;::::1;47472:42;::::0;::::1;::::0;;;;;;;;;:22;;::::1;::::0;::::1;::::0;:42;;;;;::::1;::::0;;;;;;;;;47495:13:::1;47472:22:::0;:42;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;27910:39:::0;;;;;;:::o;45066:124::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;45146:36:::1;:34;:36::i;:::-;45066:124::o:0;42204:126::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;42285:37:::1;:35;:37::i;28233:30::-:0;;;-1:-1:-1;;;;;28233:30:0;;:::o;47975:345::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;48063:16:::1;48082:86;48142:25;;48082:55;48110:26;;48082:23;;:27;;:55;;;;:::i;:86::-;48063:105;;48203:8;48187:12;;:24;48179:63;;;::::0;;-1:-1:-1;;;48179:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;48261:16:0;::::1;48253:32;;;::::0;;-1:-1:-1;;;48253:32:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;48253:32:0;;;;;;;;;;;;;::::1;;48296:16;48304:2;48308:3;48296:7;:16::i;:::-;23082:1;47975:345:::0;;:::o;27602:37::-;;;;:::o;39071:363::-;39205:12;;39191:47;;;-1:-1:-1;;;39191:47:0;;39142:7;39191:47;;;;;;-1:-1:-1;;;;;39191:47:0;;;;;;;;;39142:7;;;;39205:12;;;;;;;;39191:36;;:47;;;;;;;;;;;39205:12;39191:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39191:47:0;39297:21;;39191:47;39282:59;;-1:-1:-1;;;39282:59:0;;-1:-1:-1;;;;;39282:59:0;;;;;;;;;39191:47;;-1:-1:-1;39253:26:0;;39297:21;;;;;39282:51;;:59;;;;;39191:47;;39282:59;;;;;;;39297:21;39282:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39282:59:0;-1:-1:-1;;;;;39363:23:0;;;;;;:15;39282:59;39363:23;;;;;39282:59;;-1:-1:-1;39363:63:0;;39282:59;;39363:39;;39391:10;39363:27;:39::i;:63::-;39356:70;39071:363;-1:-1:-1;;;;39071:363:0:o;27065:36::-;;;-1:-1:-1;;;;;27065:36:0;;:::o;39473:353::-;29070:6;;;;;;;:15;29062:59;;;;;-1:-1:-1;;;29062:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29062:59:0;;;;;;;;;;;;;;;29132:6;:13;;-1:-1:-1;;29132:13:0;;;;;;;;39533:23:::1;::::0;::::1;29132:13:::0;39533:23:::1;:32;39525:71;;;::::0;;-1:-1:-1;;;39525:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;39673:15;::::0;39690:45:::1;::::0;;-1:-1:-1;;;39690:45:0;;39724:10:::1;39690:45;::::0;::::1;::::0;;;39607:16:::1;::::0;39626:110:::1;::::0;-1:-1:-1;;;;;39673:15:0;;::::1;::::0;;;39690:33:::1;::::0;:45;;;;;::::1;::::0;;;;;;;;39673:15;39690:45;::::1;;::::0;::::1;;;;::::0;::::1;39626:110;39793:10;39777:27;::::0;;;:15:::1;:27;::::0;;;;;39607:129;;-1:-1:-1;39777:41:0::1;::::0;39607:129;39777:31:::1;:41::i;:::-;39763:10;39747:27;::::0;;;:15:::1;:27;::::0;;;;:71;-1:-1:-1;29168:6:0;:14;;-1:-1:-1;;29168:14:0;;;39473:353::o;26986:29::-;;;-1:-1:-1;;;;;26986:29:0;;:::o;27022:36::-;;;-1:-1:-1;;;;;27022:36:0;;:::o;48893:86::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;48959:4:::1;:12:::0;;-1:-1:-1;;;;;;48959:12:0::1;-1:-1:-1::0;;;;;48959:12:0;;;::::1;::::0;;;::::1;::::0;;48893:86::o;31471:304::-;29070:6;;;;;;;:15;29062:59;;;;;-1:-1:-1;;;29062:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29062:59:0;;;;;;;;;;;;;;;29132:6;:13;;-1:-1:-1;;29132:13:0;;;;;;;;31521:16:::1;:24;;29141:4:::0;31521:24:::1;31513:57;;;::::0;;-1:-1:-1;;;31513:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31513:57:0;;;;;;;;;;;;;::::1;;31613:1;31589:21;31599:10;31589:9;:21::i;:::-;:25;31581:54;;;::::0;;-1:-1:-1;;;31581:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31581:54:0;;;;;;;;;;;;;::::1;;31661:21;::::0;-1:-1:-1;;;;;31661:21:0::1;31654:38;31693:10;31705:21;31693:10:::0;31705:9:::1;:21::i;:::-;31654:73;;;;;;;;;;;;;-1:-1:-1::0;;;;;31654:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31654:73:0;31646:82:::1;;;::::0;::::1;;31749:10;31739:21;::::0;;;:9:::1;:21;::::0;;;;:28;;-1:-1:-1;;31739:28:0::1;31763:4;31739:28;::::0;;29168:6;:14;;-1:-1:-1;;29168:14:0;;;31471:304::o;48328:231::-;48385:7;48405:16;48424:86;48484:25;;48424:55;48452:26;;48424:23;;:27;;:55;;;;:::i;:86::-;48539:12;;48528:23;;;-1:-1:-1;;48328:231:0;:::o;39834:195::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;39922:22:::1;::::0;:34:::1;::::0;39949:6:::1;39922:26;:34::i;:::-;39903:15;:53;;39895:85;;;::::0;;-1:-1:-1;;;39895:85:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;39895:85:0;;;;;;;;;;;;;::::1;;39991:23;:30:::0;;-1:-1:-1;;39991:30:0::1;;;::::0;;39834:195::o;28655:25::-;;;-1:-1:-1;;;;;28655:25:0;;:::o;23745:244::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23834:22:0;::::1;23826:73;;;;-1:-1:-1::0;;;23826:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23936:6;::::0;23915:38:::1;::::0;-1:-1:-1;;;;;23915:38:0;;::::1;::::0;23936:6:::1;::::0;23915:38:::1;::::0;23936:6:::1;::::0;23915:38:::1;23964:6;:17:::0;;-1:-1:-1;;;;;;23964:17:0::1;-1:-1:-1::0;;;;;23964:17:0;;;::::1;::::0;;;::::1;::::0;;23745:244::o;28355:40::-;;;;:::o;31354:109::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;31425:21:::1;:30:::0;;-1:-1:-1;;;;;;31425:30:0::1;-1:-1:-1::0;;;;;31425:30:0;;;::::1;::::0;;;::::1;::::0;;31354:109::o;28725:28::-;;;-1:-1:-1;;;;;28725:28:0;;:::o;28032:36::-;;;-1:-1:-1;;;;;28032:36:0;;:::o;28809:38::-;;;;:::o;21068:106::-;21156:10;21068:106;:::o;13416:181::-;13474:7;13506:5;;;13530:6;;;;13522:46;;;;;-1:-1:-1;;;13522:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13588:1;-1:-1:-1;13416:181:0;;;;;:::o;14746:471::-;14804:7;15049:6;15045:47;;-1:-1:-1;15079:1:0;15072:8;;15045:47;15116:5;;;15120:1;15116;:5;:1;15140:5;;;;;:10;15132:56;;;;-1:-1:-1;;;15132:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15685:132;15743:7;15770:39;15774:1;15777;15770:39;;;;;;;;;;;;;;;;;:3;:39::i;13872:136::-;13930:7;13957:43;13961:1;13964;13957:43;;;;;;;;;;;;;;;;;:3;:43::i;42338:259::-;42417:18;;42455:13;;42405:64;;;-1:-1:-1;;;42405:64:0;;-1:-1:-1;;;;;42455:13:0;;;42405:64;;;;;;42417:18;;;;;42405:49;;:64;;;;;42417:18;;42405:64;;;;;;;42417:18;;42405:64;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42531:13:0;;42500:18;;42488:39;;;-1:-1:-1;;;42488:39:0;;;;-1:-1:-1;;;;;42531:13:0;;;;-1:-1:-1;42500:18:0;;;;;-1:-1:-1;42488:37:0;;:39;;;;;;;;;;;;;;42531:13;42500:18;42488:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42488:39:0;-1:-1:-1;;;;;42488:56:0;;42480:109;;;;-1:-1:-1;;;42480:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46242:371;46354:16;46383:17;46410:5;-1:-1:-1;;;;;46403:23:0;;46435:4;46403:38;;;;;;;;;;;;;-1:-1:-1;;;;;46403:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46403:38:0;46460:69;;;-1:-1:-1;;;46460:69:0;;46487:10;46460:69;;;;46507:4;46460:69;;;;;;;;;;;;46403:38;;-1:-1:-1;;;;;;46460:26:0;;;;;:69;;;;;46403:38;;46460:69;;;;;;;;-1:-1:-1;46460:26:0;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46460:69:0;46452:78;;;;;;46552:53;46595:9;46559:5;-1:-1:-1;;;;;46552:23:0;;46584:4;46552:38;;;;;;;;;;;;;-1:-1:-1;;;;;46552:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46552:38:0;;:42;:53::i;45198:430::-;45276:10;;45306:13;;45264:56;;;-1:-1:-1;;;45264:56:0;;-1:-1:-1;;;;;45306:13:0;;;45264:56;;;;;;45276:10;;;;;45264:41;;:56;;;;;45276:10;;45264:56;;;;;;;45276:10;;45264:56;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45374:13:0;;45351:10;;45339:31;;;-1:-1:-1;;;45339:31:0;;;;-1:-1:-1;;;;;45374:13:0;;;;-1:-1:-1;45351:10:0;;;;;-1:-1:-1;45339:29:0;;:31;;;;;;;;;;;;;;45374:13;45351:10;45339:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45339:31:0;-1:-1:-1;;;;;45339:48:0;;45331:88;;;;;-1:-1:-1;;;45331:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;45460:16;;45496:13;;45448:62;;;-1:-1:-1;;;45448:62:0;;-1:-1:-1;;;;;45496:13:0;;;45448:62;;;;;;45460:16;;;;;45448:47;;:62;;;;;45460:16;;45448:62;;;;;;;45460:16;;45448:62;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45570:13:0;;45541:16;;45529:37;;;-1:-1:-1;;;45529:37:0;;;;-1:-1:-1;;;;;45570:13:0;;;;-1:-1:-1;45541:16:0;;;;;-1:-1:-1;45529:35:0;;:37;;;;;;;;;;;;;;45570:13;45541:16;45529:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45529:37:0;-1:-1:-1;;;;;45529:54:0;;45521:99;;;;;-1:-1:-1;;;45521:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19432:508;19849:4;19895:17;19927:7;19432:508;:::o;22378:129::-;19031:12;;;;;;;;:31;;;19047:15;:13;:15::i;:::-;19031:47;;;-1:-1:-1;19067:11:0;;;;19066:12;19031:47;19023:106;;;;-1:-1:-1;;;19023:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19138:19;19161:12;;;;;;19160:13;19180:83;;;;19209:12;:19;;-1:-1:-1;;;;19209:19:0;;;;;19237:18;19224:4;19237:18;;;19180:83;22436:26:::1;:24;:26::i;:::-;22473;:24;:26::i;:::-;19285:14:::0;19281:57;;;19325:5;19310:20;;-1:-1:-1;;19310:20:0;;;22378:129;:::o;45716:145::-;45837:16;;-1:-1:-1;;;;;45837:11:0;;;:16;;;;;45849:3;;45837:16;;;;45849:3;45837:11;:16;;;;;;;;;;;;;;;;;;;16305:345;16391:7;16493:12;16486:5;16478:28;;;;-1:-1:-1;;;16478:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16517:9;16533:1;16529;:5;;;;;;;16305:345;-1:-1:-1;;;;;16305:345:0:o;14303:192::-;14389:7;14425:12;14417:6;;;;14409:29;;;;-1:-1:-1;;;14409:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14461:5:0;;;14303:192::o;20989:69::-;19031:12;;;;;;;;:31;;;19047:15;:13;:15::i;:::-;19031:47;;;-1:-1:-1;19067:11:0;;;;19066:12;19031:47;19023:106;;;;-1:-1:-1;;;19023:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19138:19;19161:12;;;;;;19160:13;19180:83;;;;19209:12;:19;;-1:-1:-1;;;;19209:19:0;;;;;19237:18;19224:4;19237:18;;;19285:14;19281:57;;;19325:5;19310:20;;-1:-1:-1;;19310:20:0;;;20989:69;:::o;22515:202::-;19031:12;;;;;;;;:31;;;19047:15;:13;:15::i;:::-;19031:47;;;-1:-1:-1;19067:11:0;;;;19066:12;19031:47;19023:106;;;;-1:-1:-1;;;19023:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19138:19;19161:12;;;;;;19160:13;19180:83;;;;19209:12;:19;;-1:-1:-1;;;;19209:19:0;;;;;19237:18;19224:4;19237:18;;;19180:83;22587:17:::1;22607:12;:10;:12::i;:::-;22630:6;:18:::0;;-1:-1:-1;;;;;;22630:18:0::1;-1:-1:-1::0;;;;;22630:18:0;::::1;::::0;;::::1;::::0;;;22664:43:::1;::::0;22630:18;;-1:-1:-1;22630:18:0;-1:-1:-1;;22664:43:0::1;::::0;-1:-1:-1;;22664:43:0::1;19271:1;19285:14:::0;19281:57;;;19325:5;19310:20;;-1:-1:-1;;19310:20:0;;;22515:202;:::o;-1:-1:-1:-;;;;;;;;:::o
Swarm Source
ipfs://39757bb3739928fb27d102ea22f670bae034c39e45414469ca000009a10e191e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.