More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit | 10381835 | 1673 days ago | IN | 0.01 ETH | 0.00568953 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
11541675 | 1495 days ago | 386.40194705 ETH | ||||
11541675 | 1495 days ago | 386.40194705 ETH | ||||
10964079 | 1583 days ago | 1,400.1365192 ETH | ||||
10964079 | 1583 days ago | 1,400.1365192 ETH | ||||
10963045 | 1584 days ago | 15 ETH | ||||
10963045 | 1584 days ago | 15 ETH | ||||
10963045 | 1584 days ago | 15 ETH | ||||
10963045 | 1584 days ago | 15 ETH | ||||
10963032 | 1584 days ago | 15 ETH | ||||
10935059 | 1588 days ago | 0.9991 ETH | ||||
10935059 | 1588 days ago | 0.9991 ETH | ||||
10935059 | 1588 days ago | 0.9991 ETH | ||||
10935059 | 1588 days ago | 0.9991 ETH | ||||
10931834 | 1588 days ago | 833.698995 ETH | ||||
10931834 | 1588 days ago | 833.698995 ETH | ||||
10931834 | 1588 days ago | 833.698995 ETH | ||||
10931834 | 1588 days ago | 833.698995 ETH | ||||
10927330 | 1589 days ago | 663.20257999 ETH | ||||
10927330 | 1589 days ago | 663.20257999 ETH | ||||
10927330 | 1589 days ago | 663.20257999 ETH | ||||
10927330 | 1589 days ago | 663.20257999 ETH | ||||
10927127 | 1589 days ago | 73 ETH | ||||
10927127 | 1589 days ago | 73 ETH | ||||
10927127 | 1589 days ago | 73 ETH | ||||
10927127 | 1589 days ago | 73 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
InstaPool
Compiler Version
v0.6.0+commit.26b70077
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-07-02 */ pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; /** * @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); } /** * @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) { 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; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call.value(weiValue)(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface CTokenInterface { function mint(uint mintAmount) external returns (uint); function redeem(uint redeemTokens) external returns (uint); function repayBorrow(uint repayAmount) external returns (uint); function borrowBalanceCurrent(address) external returns (uint); function redeemUnderlying(uint) external returns (uint); function borrow(uint) external returns (uint); function underlying() external view returns (address); function borrowBalanceStored(address) external view returns (uint); } interface CETHInterface { function mint() external payable; function repayBorrow() external payable; } interface ComptrollerInterface { function getAssetsIn(address account) external view returns (address[] memory); function enterMarkets(address[] calldata cTokens) external returns (uint[] memory); function exitMarket(address cTokenAddress) external returns (uint); } interface AccountInterface { function version() external view returns (uint); } interface ListInterface { function accountID(address) external view returns (uint64); } interface IndexInterface { function master() external view returns (address); function list() external view returns (address); function isClone(uint, address) external view returns (bool); } interface CheckInterface { function isOk() external view returns (bool); } contract DSMath { function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, "sub-overflow"); } } contract Helpers is DSMath { using SafeERC20 for IERC20; address constant internal instaIndex = 0x2971AdFa57b20E5a416aE5a708A8655A9c74f723; address constant internal oldInstaPool = 0x1879BEE186BFfBA9A8b1cAD8181bBFb218A5Aa61; address constant internal comptrollerAddr = 0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B; address constant internal ethAddr = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address constant internal cEth = 0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5; mapping (address => bool) public isTknAllowed; mapping (address => address) public tknToCTkn; mapping (address => uint) public borrowedToken; address[] public tokensAllowed; bool public checkOldPool = true; IndexInterface indexContract = IndexInterface(instaIndex); ListInterface listContract = ListInterface(indexContract.list()); CheckInterface oldInstaPoolContract = CheckInterface(oldInstaPool); /** * FOR SECURITY PURPOSE * only Smart DEFI Account can access the liquidity pool contract */ modifier isDSA { uint64 id = listContract.accountID(msg.sender); require(id != 0, "not-dsa-id"); require(indexContract.isClone(AccountInterface(msg.sender).version(), msg.sender), "not-dsa-clone"); _; } function tokenBal(address token) internal view returns (uint _bal) { _bal = token == ethAddr ? address(this).balance : IERC20(token).balanceOf(address(this)); } function _transfer(address token, uint _amt) internal { token == ethAddr ? msg.sender.transfer(_amt) : IERC20(token).safeTransfer(msg.sender, _amt); } } contract CompoundResolver is Helpers { function borrowAndSend(address[] memory tokens, uint[] memory tknAmt) internal { if (tokens.length > 0) { for (uint i = 0; i < tokens.length; i++) { address token = tokens[i]; address cToken = tknToCTkn[token]; require(isTknAllowed[token], "token-not-listed"); if (cToken != address(0) && tknAmt[i] > 0) { require(CTokenInterface(cToken).borrow(tknAmt[i]) == 0, "borrow-failed"); borrowedToken[token] += tknAmt[i]; _transfer(token, tknAmt[i]); } } } } function payback(address[] memory tokens) internal { if (tokens.length > 0) { for (uint i = 0; i < tokens.length; i++) { address token = tokens[i]; address cToken = tknToCTkn[token]; if (cToken != address(0)) { CTokenInterface ctknContract = CTokenInterface(cToken); if(token != ethAddr) { require(ctknContract.repayBorrow(uint(-1)) == 0, "payback-failed"); } else { CETHInterface(cToken).repayBorrow.value(ctknContract.borrowBalanceCurrent(address(this)))(); require(ctknContract.borrowBalanceCurrent(address(this)) == 0, "ETH-flashloan-not-paid"); } delete borrowedToken[token]; } } } } } contract AccessLiquidity is CompoundResolver { event LogPoolBorrow(address indexed user, address[] tknAddr, uint[] amt); event LogPoolPayback(address indexed user, address[] tknAddr); /** * @dev borrow tokens and use them on DSA. * @param tokens Array of tokens.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amounts Array of tokens amount. */ function accessLiquidity(address[] calldata tokens, uint[] calldata amounts) external isDSA { require(tokens.length == amounts.length, "length-not-equal"); borrowAndSend(tokens, amounts); emit LogPoolBorrow( msg.sender, tokens, amounts ); } /** * @dev Payback borrowed tokens. * @param tokens Array of tokens.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) */ function returnLiquidity(address[] calldata tokens) external payable isDSA { payback(tokens); emit LogPoolPayback(msg.sender, tokens); } function isOk() public view returns(bool ok) { ok = true; for (uint i = 0; i < tokensAllowed.length; i++) { uint tknBorrowed = borrowedToken[tokensAllowed[i]]; if(tknBorrowed > 0){ ok = false; break; } } if(checkOldPool && ok) { bool isOldPoolOk = oldInstaPoolContract.isOk(); ok = isOldPoolOk; } } } contract ProvideLiquidity is AccessLiquidity { event LogDeposit(address indexed user, address indexed token, uint amount, uint cAmount); event LogWithdraw(address indexed user, address indexed token, uint amount, uint cAmount); mapping (address => mapping (address => uint)) public liquidityBalance; /** * @dev Deposit Liquidity. * @param token token address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt token amount. */ function deposit(address token, uint amt) external payable returns (uint _amt) { require(isTknAllowed[token], "token-not-listed"); require(amt > 0 || msg.value > 0, "amt-not-valid"); if (msg.value > 0) require(token == ethAddr, "not-eth-addr"); address cErc20 = tknToCTkn[token]; uint initalBal = tokenBal(cErc20); if (token == ethAddr) { _amt = msg.value; CETHInterface(cErc20).mint.value(_amt)(); } else { _amt = amt == (uint(-1)) ? IERC20(token).balanceOf(msg.sender) : amt; IERC20(token).safeTransferFrom(msg.sender, address(this), _amt); require(CTokenInterface(cErc20).mint(_amt) == 0, "mint-failed"); } uint finalBal = tokenBal(cErc20); uint ctokenAmt = sub(finalBal, initalBal); liquidityBalance[token][msg.sender] += ctokenAmt; emit LogDeposit(msg.sender, token, _amt, ctokenAmt); } /** * @dev Withdraw Liquidity. * @param token token address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt token amount. */ function withdraw(address token, uint amt) external returns (uint _amt) { uint _userLiq = liquidityBalance[token][msg.sender]; require(_userLiq > 0, "nothing-to-withdraw"); uint _cAmt; address ctoken = tknToCTkn[token]; if (amt == uint(-1)) { uint initknBal = tokenBal(token); require(CTokenInterface(ctoken).redeem(_userLiq) == 0, "redeem-failed"); uint finTknBal = tokenBal(token); _cAmt = _userLiq; delete liquidityBalance[token][msg.sender]; _amt = sub(finTknBal, initknBal); } else { uint iniCtknBal = tokenBal(ctoken); require(CTokenInterface(ctoken).redeemUnderlying(amt) == 0, "redeemUnderlying-failed"); uint finCtknBal = tokenBal(ctoken); _cAmt = sub(iniCtknBal, finCtknBal); require(_cAmt <= _userLiq, "not-enough-to-withdraw"); liquidityBalance[token][msg.sender] -= _cAmt; _amt = amt; } _transfer(token, _amt); emit LogWithdraw(msg.sender, token, _amt, _cAmt); } } contract Controllers is ProvideLiquidity { event LogEnterMarket(address[] token, address[] ctoken); event LogExitMarket(address indexed token, address indexed ctoken); event LogWithdrawMaster(address indexed user, address indexed token, uint amount); modifier isMaster { require(msg.sender == indexContract.master(), "not-master"); _; } function switchOldPoolCheck() external isMaster { checkOldPool = !checkOldPool; } function _enterMarket(address[] memory cTknAddrs) internal { ComptrollerInterface(comptrollerAddr).enterMarkets(cTknAddrs); address[] memory tknAddrs = new address[](cTknAddrs.length); for (uint i = 0; i < cTknAddrs.length; i++) { if (cTknAddrs[i] != cEth) { tknAddrs[i] = CTokenInterface(cTknAddrs[i]).underlying(); IERC20(tknAddrs[i]).safeApprove(cTknAddrs[i], uint(-1)); } else { tknAddrs[i] = ethAddr; } tknToCTkn[tknAddrs[i]] = cTknAddrs[i]; require(!isTknAllowed[tknAddrs[i]], "tkn-already-allowed"); isTknAllowed[tknAddrs[i]] = true; tokensAllowed.push(tknAddrs[i]); } emit LogEnterMarket(tknAddrs, cTknAddrs); } /** * @dev Enter compound market to enable borrowing. * @param cTknAddrs Array Ctoken addresses. */ function enterMarket(address[] calldata cTknAddrs) external isMaster { _enterMarket(cTknAddrs); } /** * @dev Exit compound market to disable borrowing. * @param cTkn Ctoken address. */ function exitMarket(address cTkn) external isMaster { address tkn; if (cTkn != cEth) { tkn = CTokenInterface(cTkn).underlying(); IERC20(tkn).safeApprove(cTkn, 0); } else { tkn = ethAddr; } require(isTknAllowed[tkn], "tkn-not-allowed"); ComptrollerInterface(comptrollerAddr).exitMarket(cTkn); delete isTknAllowed[tkn]; bool isFound = false; uint _length = tokensAllowed.length; uint _id; for (uint i = 0; i < _length; i++) { if (tkn == tokensAllowed[i]) { isFound = true; _id = i; break; } } if (isFound) { address _last = tokensAllowed[_length - 1]; tokensAllowed[_length - 1] = tokensAllowed[_id]; tokensAllowed[_id] = _last; tokensAllowed.pop(); } emit LogExitMarket(tkn, cTkn); } /** * @dev Withdraw Liquidity. * @param token token address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt token amount. */ function withdrawMaster(address token, uint amt) external isMaster { _transfer(token, amt); emit LogWithdrawMaster(msg.sender, token, amt); } function spell(address _target, bytes calldata _data) external isMaster { require(_target != address(0), "target-invalid"); bytes memory _callData = _data; assembly { let succeeded := delegatecall(gas(), _target, add(_callData, 0x20), mload(_callData), 0, 0) switch iszero(succeeded) case 1 { // throw if delegatecall failed let size := returndatasize() returndatacopy(0x00, 0x00, size) revert(0x00, size) } } } } contract InstaPool is Controllers { constructor (address[] memory ctkns) public { _enterMarket(ctkns); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"ctkns","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cAmount","type":"uint256"}],"name":"LogDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"token","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"ctoken","type":"address[]"}],"name":"LogEnterMarket","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"ctoken","type":"address"}],"name":"LogExitMarket","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address[]","name":"tknAddr","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"amt","type":"uint256[]"}],"name":"LogPoolBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address[]","name":"tknAddr","type":"address[]"}],"name":"LogPoolPayback","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cAmount","type":"uint256"}],"name":"LogWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogWithdrawMaster","type":"event"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"accessLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"borrowedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkOldPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"cTknAddrs","type":"address[]"}],"name":"enterMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"cTkn","type":"address"}],"name":"exitMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOk","outputs":[{"internalType":"bool","name":"ok","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTknAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"returnLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"spell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchOldPoolCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tknToCTkn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensAllowed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600460006101000a81548160ff021916908315150217905550732971adfa57b20e5a416ae5a708a8655a9c74f723600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f560cd76040518163ffffffff1660e01b815260040160206040518083038186803b158015620000dd57600080fd5b505afa158015620000f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000118919081019062000cd9565b600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731879bee186bffba9a8b1cad8181bbfb218a5aa61600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001ba57600080fd5b5060405162005e3338038062005e338339818101604052620001e0919081019062000d05565b620001f181620001f860201b60201c565b50620013b2565b733d9819210a31b4961b30ef54be2aed79b9c9cd3b73ffffffffffffffffffffffffffffffffffffffff1663c2998238826040518263ffffffff1660e01b8152600401620002479190620010dd565b600060405180830381600087803b1580156200026257600080fd5b505af115801562000277573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250620002a2919081019062000d4a565b5060608151604051908082528060200260200182016040528015620002d65781602001602082028038833980820191505090505b50905060008090505b82518110156200073857734ddc2d193948926d02f9b1fe9e1daa0718270ed573ffffffffffffffffffffffffffffffffffffffff168382815181106200032157fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614620004a2578281815181106200035257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a057600080fd5b505afa158015620003b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003db919081019062000cd9565b828281518110620003e857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506200049c8382815181106200043357fe5b60200260200101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484815181106200046957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166200077860201b62003254179092919060201c565b620004ff565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee828281518110620004c457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b8281815181106200050c57fe5b6020026020010151600160008484815181106200052557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600080838381518110620005b557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000648576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063f9062001182565b60405180910390fd5b60016000808484815181106200065a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506003828281518110620006c257fe5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050620002df565b507ffd3a921f1fa46f1a74dd60fb935c87e5a55ba53b12dda46e040504288c28fe9681836040516200076c92919062001101565b60405180910390a15050565b600081148062000818575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401620007c292919062001083565b60206040518083038186803b158015620007db57600080fd5b505afa158015620007f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000816919081019062000dbb565b145b6200085a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085190620011c6565b60405180910390fd5b620008fe838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b848460405160240162000895929190620010b0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506200090360201b60201c565b505050565b60606200096c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16620009d760201b62003531179092919060201c565b9050600081511115620009d257808060200190516200098f919081019062000d8f565b620009d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c890620011a4565b60405180910390fd5b5b505050565b6060620009ee8484600085620009f760201b60201c565b90509392505050565b606062000a0a8562000b2e60201b60201c565b62000a4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a439062001160565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff16858760405162000a7891906200106a565b60006040518083038185875af1925050503d806000811462000ab7576040519150601f19603f3d011682016040523d82523d6000602084013e62000abc565b606091505b5091509150811562000ad357809250505062000b26565b60008151111562000ae75780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1d91906200113c565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801562000b7157506000801b8214155b92505050919050565b60008151905062000b8b8162001364565b92915050565b600082601f83011262000ba357600080fd5b815162000bba62000bb48262001216565b620011e8565b9150818183526020840193506020810190508385602084028201111562000be057600080fd5b60005b8381101562000c14578162000bf9888262000b7a565b84526020840193506020830192505060018101905062000be3565b5050505092915050565b600082601f83011262000c3057600080fd5b815162000c4762000c41826200123f565b620011e8565b9150818183526020840193506020810190508385602084028201111562000c6d57600080fd5b60005b8381101562000ca1578162000c86888262000cc2565b84526020840193506020830192505060018101905062000c70565b5050505092915050565b60008151905062000cbc816200137e565b92915050565b60008151905062000cd38162001398565b92915050565b60006020828403121562000cec57600080fd5b600062000cfc8482850162000b7a565b91505092915050565b60006020828403121562000d1857600080fd5b600082015167ffffffffffffffff81111562000d3357600080fd5b62000d418482850162000b91565b91505092915050565b60006020828403121562000d5d57600080fd5b600082015167ffffffffffffffff81111562000d7857600080fd5b62000d868482850162000c1e565b91505092915050565b60006020828403121562000da257600080fd5b600062000db28482850162000cab565b91505092915050565b60006020828403121562000dce57600080fd5b600062000dde8482850162000cc2565b91505092915050565b600062000df5838362000e01565b60208301905092915050565b62000e0c81620012d3565b82525050565b62000e1d81620012d3565b82525050565b600062000e308262001278565b62000e3c8185620012a6565b935062000e498362001268565b8060005b8381101562000e8057815162000e64888262000de7565b975062000e718362001299565b92505060018101905062000e4d565b5085935050505092915050565b600062000e9a8262001283565b62000ea68185620012b7565b935062000eb88185602086016200131d565b80840191505092915050565b600062000ed1826200128e565b62000edd8185620012c2565b935062000eef8185602086016200131d565b62000efa8162001353565b840191505092915050565b600062000f14601d83620012c2565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b600062000f56601383620012c2565b91507f746b6e2d616c72656164792d616c6c6f776564000000000000000000000000006000830152602082019050919050565b600062000f98602a83620012c2565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600062001000603683620012c2565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b620010648162001313565b82525050565b600062001078828462000e8d565b915081905092915050565b60006040820190506200109a600083018562000e12565b620010a9602083018462000e12565b9392505050565b6000604082019050620010c7600083018562000e12565b620010d6602083018462001059565b9392505050565b60006020820190508181036000830152620010f9818462000e23565b905092915050565b600060408201905081810360008301526200111d818562000e23565b9050818103602083015262001133818462000e23565b90509392505050565b6000602082019050818103600083015262001158818462000ec4565b905092915050565b600060208201905081810360008301526200117b8162000f05565b9050919050565b600060208201905081810360008301526200119d8162000f47565b9050919050565b60006020820190508181036000830152620011bf8162000f89565b9050919050565b60006020820190508181036000830152620011e18162000ff1565b9050919050565b6000604051905081810181811067ffffffffffffffff821117156200120c57600080fd5b8060405250919050565b600067ffffffffffffffff8211156200122e57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156200125757600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000620012e082620012f3565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200133d57808201518184015260208101905062001320565b838111156200134d576000848401525b50505050565b6000601f19601f8301169050919050565b6200136f81620012d3565b81146200137b57600080fd5b50565b6200138981620012e7565b81146200139557600080fd5b50565b620013a38162001313565b8114620013af57600080fd5b50565b614a7180620013c26000396000f3fe6080604052600436106100f75760003560e01c806384a0e58f1161008a578063eb1e582511610059578063eb1e582514610317578063ed86172c14610354578063ede4edd014610391578063f3fef3a3146103ba576100fe565b806384a0e58f14610249578063bd984ab614610286578063c7acb01f146102c3578063d957dd3c146102ec576100fe565b806347e7ef24116100c657806347e7ef241461019c578063503ea3fb146101cc578063522d3571146101e35780637cc4fc0514610220576100fe565b8063098dbba4146101035780630c3b37ac1461012c5780632406d0da146101485780632a9dcb0614610173576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b5061012a6004803603610125919081019061397c565b6103f7565b005b610146600480360361014191908101906139b8565b610577565b005b34801561015457600080fd5b5061015d61087c565b60405161016a9190614491565b60405180910390f35b34801561017f57600080fd5b5061019a600480360361019591908101906139fd565b61088f565b005b6101b660048036036101b1919081019061397c565b610c24565b6040516101c3919061478e565b60405180910390f35b3480156101d857600080fd5b506101e1611177565b005b3480156101ef57600080fd5b5061020a600480360361020591908101906138e8565b6112b0565b604051610217919061478e565b60405180910390f35b34801561022c57600080fd5b50610247600480360361024291908101906139b8565b6112d5565b005b34801561025557600080fd5b50610270600480360361026b9190810190613896565b611430565b60405161027d919061478e565b60405180910390f35b34801561029257600080fd5b506102ad60048036036102a89190810190613896565b611448565b6040516102ba919061431a565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036036102e59190810190613924565b61147b565b005b3480156102f857600080fd5b5061030161166f565b60405161030e9190614491565b60405180910390f35b34801561032357600080fd5b5061033e60048036036103399190810190613adc565b6117ef565b60405161034b919061431a565b60405180910390f35b34801561036057600080fd5b5061037b60048036036103769190810190613896565b61182b565b6040516103889190614491565b60405180910390f35b34801561039d57600080fd5b506103b860048036036103b39190810190613896565b61184b565b005b3480156103c657600080fd5b506103e160048036036103dc919081019061397c565b611e55565b6040516103ee919061478e565b60405180910390f35b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee97f7f36040518163ffffffff1660e01b815260040160206040518083038186803b15801561045f57600080fd5b505afa158015610473573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061049791908101906138bf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fb9061464e565b60405180910390fd5b61050e8282612364565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f23ac82180cbea697d555748deb1c320630633db5f6a2e17f789b499e717524158360405161056b919061478e565b60405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636cfaf5e9336040518263ffffffff1660e01b81526004016105d49190614335565b60206040518083038186803b1580156105ec57600080fd5b505afa158015610600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106249190810190613b2e565b905060008167ffffffffffffffff161415610674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066b9061450e565b60405180910390fd5b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743681893373ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f857600080fd5b505afa15801561070c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107309190810190613b05565b336040518363ffffffff1660e01b815260040161074e9291906147a9565b60206040518083038186803b15801561076657600080fd5b505afa15801561077a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061079e9190810190613ab3565b6107dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d49061458e565b60405180910390fd5b610827838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612427565b3373ffffffffffffffffffffffffffffffffffffffff167f4108d4efeb53e71745fff5118ffe3d05ea64306d58c40efe886cb234d3b467d2848460405161086f9291906143d9565b60405180910390a2505050565b600460009054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636cfaf5e9336040518263ffffffff1660e01b81526004016108ec9190614335565b60206040518083038186803b15801561090457600080fd5b505afa158015610918573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061093c9190810190613b2e565b905060008167ffffffffffffffff16141561098c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109839061450e565b60405180910390fd5b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743681893373ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1057600080fd5b505afa158015610a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a489190810190613b05565b336040518363ffffffff1660e01b8152600401610a669291906147a9565b60206040518083038186803b158015610a7e57600080fd5b505afa158015610a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ab69190810190613ab3565b610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec9061458e565b60405180910390fd5b828290508585905014610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b349061474e565b60405180910390fd5b610bc9858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612840565b3373ffffffffffffffffffffffffffffffffffffffff167ffc0bc9df281aa48a47afd9c8148717de12c91e0c699d023e9261459b40fbebb786868686604051610c1594939291906143fd565b60405180910390a25050505050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca89061466e565b60405180910390fd5b6000821180610cc05750600034115b610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf6906145ae565b60405180910390fd5b6000341115610d8b5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d81906145ce565b60405180910390fd5b5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610dfa82612b28565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610ead573492508173ffffffffffffffffffffffffffffffffffffffff16631249c58b846040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e8f57600080fd5b505af1158015610ea3573d6000803e3d6000fd5b5050505050611061565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8414610eda5783610f64565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610f139190614335565b60206040518083038186803b158015610f2b57600080fd5b505afa158015610f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f639190810190613b05565b5b9250610f933330858873ffffffffffffffffffffffffffffffffffffffff16612c08909392919063ffffffff16565b60008273ffffffffffffffffffffffffffffffffffffffff1663a0712d68856040518263ffffffff1660e01b8152600401610fce919061478e565b602060405180830381600087803b158015610fe857600080fd5b505af1158015610ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110209190810190613b05565b14611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611057906146ae565b60405180910390fd5b5b600061106c83612b28565b9050600061107a8284612caa565b905080600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4e3e4894f24a7c50bcb21d1ef785e34688bee05663c55d822eed7cefc253312387846040516111659291906147d2565b60405180910390a35050505092915050565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee97f7f36040518163ffffffff1660e01b815260040160206040518083038186803b1580156111df57600080fd5b505afa1580156111f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061121791908101906138bf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b9061464e565b60405180910390fd5b600460009054906101000a900460ff1615600460006101000a81548160ff021916908315150217905550565b6007602052816000526040600020602052806000526040600020600091509150505481565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee97f7f36040518163ffffffff1660e01b815260040160206040518083038186803b15801561133d57600080fd5b505afa158015611351573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061137591908101906138bf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d99061464e565b60405180910390fd5b61142c828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612cfa565b5050565b60026020528060005260406000206000915090505481565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee97f7f36040518163ffffffff1660e01b815260040160206040518083038186803b1580156114e357600080fd5b505afa1580156114f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061151b91908101906138bf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f9061464e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef9061454e565b60405180910390fd5b606082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080825160208401875af480156001811461165c57611667565b3d806000803e806000fd5b505050505050565b60006001905060008090505b600380549050811015611724576000600260006003848154811061169b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115611716576000925050611724565b50808060010191505061167b565b50600460009054906101000a900460ff16801561173e5750805b156117ec576000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d957dd3c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ad57600080fd5b505afa1580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117e59190810190613ab3565b9050809150505b90565b600381815481106117fc57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006020528060005260406000206000915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee97f7f36040518163ffffffff1660e01b815260040160206040518083038186803b1580156118b357600080fd5b505afa1580156118c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118eb91908101906138bf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f9061464e565b60405180910390fd5b6000734ddc2d193948926d02f9b1fe9e1daa0718270ed573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611a52578173ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e757600080fd5b505afa1580156119fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a1f91908101906138bf565b9050611a4d8260008373ffffffffffffffffffffffffffffffffffffffff166132549092919063ffffffff16565b611a6a565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90505b6000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec906144ee565b60405180910390fd5b733d9819210a31b4961b30ef54be2aed79b9c9cd3b73ffffffffffffffffffffffffffffffffffffffff1663ede4edd0836040518263ffffffff1660e01b8152600401611b42919061431a565b602060405180830381600087803b158015611b5c57600080fd5b505af1158015611b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b949190810190613b05565b506000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600080905060006003805490509050600080600090505b82811015611c865760038181548110611c0f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611c795760019350809150611c86565b8080600101915050611bfa565b508215611df457600060036001840381548110611c9f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060038281548110611cd957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660036001850381548110611d1457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060038381548110611d6a57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003805480611dbd57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd511e486604296bfc72fc300fe7f957e689ec21219268e5a4c8706b65633500960405160405180910390a35050505050565b600080600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f11906145ee565b60405180910390fd5b600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851415612124576000611fb287612b28565b905060008273ffffffffffffffffffffffffffffffffffffffff1663db006a75866040518263ffffffff1660e01b8152600401611fef919061478e565b602060405180830381600087803b15801561200957600080fd5b505af115801561201d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120419190810190613b05565b14612081576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612078906146ce565b60405180910390fd5b600061208c88612b28565b9050849350600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905561211b8183612caa565b955050506122ea565b600061212f82612b28565b905060008273ffffffffffffffffffffffffffffffffffffffff1663852a12e3886040518263ffffffff1660e01b815260040161216c919061478e565b602060405180830381600087803b15801561218657600080fd5b505af115801561219a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121be9190810190613b05565b146121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f59061452e565b60405180910390fd5b600061220983612b28565b90506122158282612caa565b93508484111561225a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906144ce565b60405180910390fd5b83600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555086955050505b6122f48685612364565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f74217ce088f00bfd283666b763c64f0d1b1c345591dfdd01891dddf52446694e86856040516123539291906147d2565b60405180910390a350505092915050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123db576123d633828473ffffffffffffffffffffffffffffffffffffffff166133cb9092919063ffffffff16565b612423565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612421573d6000803e3d6000fd5b505b5050565b60008151111561283d5760008090505b815181101561283b57600082828151811061244e57fe5b602002602001015190506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461282c57600081905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461262e5760008173ffffffffffffffffffffffffffffffffffffffff16630e7527027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518263ffffffff1660e01b8152600401612597919061478e565b602060405180830381600087803b1580156125b157600080fd5b505af11580156125c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125e99190810190613b05565b14612629576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126209061460e565b60405180910390fd5b6127e7565b8173ffffffffffffffffffffffffffffffffffffffff16634e4d9fea8273ffffffffffffffffffffffffffffffffffffffff166317bfdfbc306040518263ffffffff1660e01b8152600401612683919061431a565b602060405180830381600087803b15801561269d57600080fd5b505af11580156126b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126d59190810190613b05565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561270057600080fd5b505af1158015612714573d6000803e3d6000fd5b505050505060008173ffffffffffffffffffffffffffffffffffffffff166317bfdfbc306040518263ffffffff1660e01b8152600401612754919061431a565b602060405180830381600087803b15801561276e57600080fd5b505af1158015612782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127a69190810190613b05565b146127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd9061462e565b60405180910390fd5b5b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055505b50508080600101915050612437565b505b50565b600082511115612b245760008090505b8251811015612b2257600083828151811061286757fe5b602002602001015190506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612960576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129579061466e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156129b0575060008484815181106129a657fe5b6020026020010151115b15612b135760008173ffffffffffffffffffffffffffffffffffffffff1663c5ebeaec8686815181106129df57fe5b60200260200101516040518263ffffffff1660e01b8152600401612a03919061478e565b602060405180830381600087803b158015612a1d57600080fd5b505af1158015612a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a559190810190613b05565b14612a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8c9061468e565b60405180910390fd5b838381518110612aa157fe5b6020026020010151600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612b1282858581518110612b0557fe5b6020026020010151612364565b5b50508080600101915050612850565b505b5050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bff578173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612baa919061431a565b60206040518083038186803b158015612bc257600080fd5b505afa158015612bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612bfa9190810190613b05565b612c01565b475b9050919050565b612ca4848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401612c4293929190614379565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061346a565b50505050565b6000828284039150811115612cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ceb9061456e565b60405180910390fd5b92915050565b733d9819210a31b4961b30ef54be2aed79b9c9cd3b73ffffffffffffffffffffffffffffffffffffffff1663c2998238826040518263ffffffff1660e01b8152600401612d479190614438565b600060405180830381600087803b158015612d6157600080fd5b505af1158015612d75573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612d9e9190810190613a72565b5060608151604051908082528060200260200182016040528015612dd15781602001602082028038833980820191505090505b50905060008090505b825181101561321657734ddc2d193948926d02f9b1fe9e1daa0718270ed573ffffffffffffffffffffffffffffffffffffffff16838281518110612e1a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614612f8a57828181518110612e4957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612e9657600080fd5b505afa158015612eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ece91908101906138bf565b828281518110612eda57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f85838281518110612f2357fe5b60200260200101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848481518110612f5857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166132549092919063ffffffff16565b612fe6565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee828281518110612fab57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b828181518110612ff257fe5b60200260200101516001600084848151811061300a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008083838151811061309957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131209061470e565b60405180910390fd5b600160008084848151811061313a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060038282815181106131a157fe5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050612dda565b507ffd3a921f1fa46f1a74dd60fb935c87e5a55ba53b12dda46e040504288c28fe96818360405161324892919061445a565b60405180910390a15050565b60008114806132ed575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161329b929190614350565b60206040518083038186803b1580156132b357600080fd5b505afa1580156132c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132eb9190810190613b05565b145b61332c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133239061476e565b60405180910390fd5b6133c6838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b84846040516024016133649291906143b0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061346a565b505050565b613465838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b84846040516024016134039291906143b0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061346a565b505050565b60606134cc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166135319092919063ffffffff16565b905060008151111561352c57808060200190516134ec9190810190613ab3565b61352b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135229061472e565b60405180910390fd5b5b505050565b60606135408484600085613549565b90509392505050565b60606135548561366c565b613593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358a906146ee565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516135bd9190614303565b60006040518083038185875af1925050503d80600081146135fa576040519150601f19603f3d011682016040523d82523d6000602084013e6135ff565b606091505b50915091508115613614578092505050613664565b6000815111156136275780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365b91906144ac565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156136ae57506000801b8214155b92505050919050565b6000813590506136c6816149df565b92915050565b6000815190506136db816149df565b92915050565b60008083601f8401126136f357600080fd5b8235905067ffffffffffffffff81111561370c57600080fd5b60208301915083602082028301111561372457600080fd5b9250929050565b60008083601f84011261373d57600080fd5b8235905067ffffffffffffffff81111561375657600080fd5b60208301915083602082028301111561376e57600080fd5b9250929050565b600082601f83011261378657600080fd5b815161379961379482614828565b6147fb565b915081818352602084019350602081019050838560208402820111156137be57600080fd5b60005b838110156137ee57816137d4888261386c565b8452602084019350602083019250506001810190506137c1565b5050505092915050565b600081519050613807816149f6565b92915050565b60008083601f84011261381f57600080fd5b8235905067ffffffffffffffff81111561383857600080fd5b60208301915083600182028301111561385057600080fd5b9250929050565b60008135905061386681614a0d565b92915050565b60008151905061387b81614a0d565b92915050565b60008151905061389081614a24565b92915050565b6000602082840312156138a857600080fd5b60006138b6848285016136b7565b91505092915050565b6000602082840312156138d157600080fd5b60006138df848285016136cc565b91505092915050565b600080604083850312156138fb57600080fd5b6000613909858286016136b7565b925050602061391a858286016136b7565b9150509250929050565b60008060006040848603121561393957600080fd5b6000613947868287016136b7565b935050602084013567ffffffffffffffff81111561396457600080fd5b6139708682870161380d565b92509250509250925092565b6000806040838503121561398f57600080fd5b600061399d858286016136b7565b92505060206139ae85828601613857565b9150509250929050565b600080602083850312156139cb57600080fd5b600083013567ffffffffffffffff8111156139e557600080fd5b6139f1858286016136e1565b92509250509250929050565b60008060008060408587031215613a1357600080fd5b600085013567ffffffffffffffff811115613a2d57600080fd5b613a39878288016136e1565b9450945050602085013567ffffffffffffffff811115613a5857600080fd5b613a648782880161372b565b925092505092959194509250565b600060208284031215613a8457600080fd5b600082015167ffffffffffffffff811115613a9e57600080fd5b613aaa84828501613775565b91505092915050565b600060208284031215613ac557600080fd5b6000613ad3848285016137f8565b91505092915050565b600060208284031215613aee57600080fd5b6000613afc84828501613857565b91505092915050565b600060208284031215613b1757600080fd5b6000613b258482850161386c565b91505092915050565b600060208284031215613b4057600080fd5b6000613b4e84828501613881565b91505092915050565b6000613b638383613b7e565b60208301905092915050565b613b7881614956565b82525050565b613b87816148fa565b82525050565b613b96816148fa565b82525050565b6000613ba883856148a5565b9350613bb382614850565b8060005b85811015613bec57613bc982846148e3565b613bd38882613b57565b9750613bde8361488b565b925050600181019050613bb7565b5085925050509392505050565b6000613c048261486a565b613c0e81856148a5565b9350613c198361485a565b8060005b83811015613c4a578151613c318882613b57565b9750613c3c83614898565b925050600181019050613c1d565b5085935050505092915050565b6000613c6383856148b6565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613c9257600080fd5b602083029250613ca383858461498c565b82840190509392505050565b613cb88161490c565b82525050565b6000613cc982614875565b613cd381856148c7565b9350613ce381856020860161499b565b80840191505092915050565b6000613cfa82614880565b613d0481856148d2565b9350613d1481856020860161499b565b613d1d816149ce565b840191505092915050565b6000613d356016836148d2565b91507f6e6f742d656e6f7567682d746f2d7769746864726177000000000000000000006000830152602082019050919050565b6000613d75600f836148d2565b91507f746b6e2d6e6f742d616c6c6f77656400000000000000000000000000000000006000830152602082019050919050565b6000613db5600a836148d2565b91507f6e6f742d6473612d6964000000000000000000000000000000000000000000006000830152602082019050919050565b6000613df56017836148d2565b91507f72656465656d556e6465726c79696e672d6661696c65640000000000000000006000830152602082019050919050565b6000613e35600e836148d2565b91507f7461726765742d696e76616c69640000000000000000000000000000000000006000830152602082019050919050565b6000613e75600c836148d2565b91507f7375622d6f766572666c6f7700000000000000000000000000000000000000006000830152602082019050919050565b6000613eb5600d836148d2565b91507f6e6f742d6473612d636c6f6e65000000000000000000000000000000000000006000830152602082019050919050565b6000613ef5600d836148d2565b91507f616d742d6e6f742d76616c6964000000000000000000000000000000000000006000830152602082019050919050565b6000613f35600c836148d2565b91507f6e6f742d6574682d6164647200000000000000000000000000000000000000006000830152602082019050919050565b6000613f756013836148d2565b91507f6e6f7468696e672d746f2d7769746864726177000000000000000000000000006000830152602082019050919050565b6000613fb5600e836148d2565b91507f7061796261636b2d6661696c65640000000000000000000000000000000000006000830152602082019050919050565b6000613ff56016836148d2565b91507f4554482d666c6173686c6f616e2d6e6f742d70616964000000000000000000006000830152602082019050919050565b6000614035600a836148d2565b91507f6e6f742d6d6173746572000000000000000000000000000000000000000000006000830152602082019050919050565b60006140756010836148d2565b91507f746f6b656e2d6e6f742d6c6973746564000000000000000000000000000000006000830152602082019050919050565b60006140b5600d836148d2565b91507f626f72726f772d6661696c6564000000000000000000000000000000000000006000830152602082019050919050565b60006140f5600b836148d2565b91507f6d696e742d6661696c65640000000000000000000000000000000000000000006000830152602082019050919050565b6000614135600d836148d2565b91507f72656465656d2d6661696c6564000000000000000000000000000000000000006000830152602082019050919050565b6000614175601d836148d2565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006141b56013836148d2565b91507f746b6e2d616c72656164792d616c6c6f776564000000000000000000000000006000830152602082019050919050565b60006141f5602a836148d2565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600061425b6010836148d2565b91507f6c656e6774682d6e6f742d657175616c000000000000000000000000000000006000830152602082019050919050565b600061429b6036836148d2565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b6142fd81614938565b82525050565b600061430f8284613cbe565b915081905092915050565b600060208201905061432f6000830184613b8d565b92915050565b600060208201905061434a6000830184613b6f565b92915050565b60006040820190506143656000830185613b8d565b6143726020830184613b8d565b9392505050565b600060608201905061438e6000830186613b8d565b61439b6020830185613b8d565b6143a860408301846142f4565b949350505050565b60006040820190506143c56000830185613b8d565b6143d260208301846142f4565b9392505050565b600060208201905081810360008301526143f4818486613b9c565b90509392505050565b60006040820190508181036000830152614418818688613b9c565b9050818103602083015261442d818486613c57565b905095945050505050565b600060208201905081810360008301526144528184613bf9565b905092915050565b600060408201905081810360008301526144748185613bf9565b905081810360208301526144888184613bf9565b90509392505050565b60006020820190506144a66000830184613caf565b92915050565b600060208201905081810360008301526144c68184613cef565b905092915050565b600060208201905081810360008301526144e781613d28565b9050919050565b6000602082019050818103600083015261450781613d68565b9050919050565b6000602082019050818103600083015261452781613da8565b9050919050565b6000602082019050818103600083015261454781613de8565b9050919050565b6000602082019050818103600083015261456781613e28565b9050919050565b6000602082019050818103600083015261458781613e68565b9050919050565b600060208201905081810360008301526145a781613ea8565b9050919050565b600060208201905081810360008301526145c781613ee8565b9050919050565b600060208201905081810360008301526145e781613f28565b9050919050565b6000602082019050818103600083015261460781613f68565b9050919050565b6000602082019050818103600083015261462781613fa8565b9050919050565b6000602082019050818103600083015261464781613fe8565b9050919050565b6000602082019050818103600083015261466781614028565b9050919050565b6000602082019050818103600083015261468781614068565b9050919050565b600060208201905081810360008301526146a7816140a8565b9050919050565b600060208201905081810360008301526146c7816140e8565b9050919050565b600060208201905081810360008301526146e781614128565b9050919050565b6000602082019050818103600083015261470781614168565b9050919050565b60006020820190508181036000830152614727816141a8565b9050919050565b60006020820190508181036000830152614747816141e8565b9050919050565b600060208201905081810360008301526147678161424e565b9050919050565b600060208201905081810360008301526147878161428e565b9050919050565b60006020820190506147a360008301846142f4565b92915050565b60006040820190506147be60008301856142f4565b6147cb6020830184613b6f565b9392505050565b60006040820190506147e760008301856142f4565b6147f460208301846142f4565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561481e57600080fd5b8060405250919050565b600067ffffffffffffffff82111561483f57600080fd5b602082029050602081019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006148f260208401846136b7565b905092915050565b600061490582614918565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600061496182614968565b9050919050565b60006149738261497a565b9050919050565b600061498582614918565b9050919050565b82818337600083830152505050565b60005b838110156149b957808201518184015260208101905061499e565b838111156149c8576000848401525b50505050565b6000601f19601f8301169050919050565b6149e8816148fa565b81146149f357600080fd5b50565b6149ff8161490c565b8114614a0a57600080fd5b50565b614a1681614938565b8114614a2157600080fd5b50565b614a2d81614942565b8114614a3857600080fd5b5056fea2646970667358221220542e9d2a6ea42000a33beb205ca0a6cfe9cc43840eaca99830d9814f630fd91964736f6c63430006000033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000080000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e364300000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c1000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d4070000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e
Deployed Bytecode
0x6080604052600436106100f75760003560e01c806384a0e58f1161008a578063eb1e582511610059578063eb1e582514610317578063ed86172c14610354578063ede4edd014610391578063f3fef3a3146103ba576100fe565b806384a0e58f14610249578063bd984ab614610286578063c7acb01f146102c3578063d957dd3c146102ec576100fe565b806347e7ef24116100c657806347e7ef241461019c578063503ea3fb146101cc578063522d3571146101e35780637cc4fc0514610220576100fe565b8063098dbba4146101035780630c3b37ac1461012c5780632406d0da146101485780632a9dcb0614610173576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b5061012a6004803603610125919081019061397c565b6103f7565b005b610146600480360361014191908101906139b8565b610577565b005b34801561015457600080fd5b5061015d61087c565b60405161016a9190614491565b60405180910390f35b34801561017f57600080fd5b5061019a600480360361019591908101906139fd565b61088f565b005b6101b660048036036101b1919081019061397c565b610c24565b6040516101c3919061478e565b60405180910390f35b3480156101d857600080fd5b506101e1611177565b005b3480156101ef57600080fd5b5061020a600480360361020591908101906138e8565b6112b0565b604051610217919061478e565b60405180910390f35b34801561022c57600080fd5b50610247600480360361024291908101906139b8565b6112d5565b005b34801561025557600080fd5b50610270600480360361026b9190810190613896565b611430565b60405161027d919061478e565b60405180910390f35b34801561029257600080fd5b506102ad60048036036102a89190810190613896565b611448565b6040516102ba919061431a565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036036102e59190810190613924565b61147b565b005b3480156102f857600080fd5b5061030161166f565b60405161030e9190614491565b60405180910390f35b34801561032357600080fd5b5061033e60048036036103399190810190613adc565b6117ef565b60405161034b919061431a565b60405180910390f35b34801561036057600080fd5b5061037b60048036036103769190810190613896565b61182b565b6040516103889190614491565b60405180910390f35b34801561039d57600080fd5b506103b860048036036103b39190810190613896565b61184b565b005b3480156103c657600080fd5b506103e160048036036103dc919081019061397c565b611e55565b6040516103ee919061478e565b60405180910390f35b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee97f7f36040518163ffffffff1660e01b815260040160206040518083038186803b15801561045f57600080fd5b505afa158015610473573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061049791908101906138bf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fb9061464e565b60405180910390fd5b61050e8282612364565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f23ac82180cbea697d555748deb1c320630633db5f6a2e17f789b499e717524158360405161056b919061478e565b60405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636cfaf5e9336040518263ffffffff1660e01b81526004016105d49190614335565b60206040518083038186803b1580156105ec57600080fd5b505afa158015610600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106249190810190613b2e565b905060008167ffffffffffffffff161415610674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066b9061450e565b60405180910390fd5b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743681893373ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f857600080fd5b505afa15801561070c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107309190810190613b05565b336040518363ffffffff1660e01b815260040161074e9291906147a9565b60206040518083038186803b15801561076657600080fd5b505afa15801561077a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061079e9190810190613ab3565b6107dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d49061458e565b60405180910390fd5b610827838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612427565b3373ffffffffffffffffffffffffffffffffffffffff167f4108d4efeb53e71745fff5118ffe3d05ea64306d58c40efe886cb234d3b467d2848460405161086f9291906143d9565b60405180910390a2505050565b600460009054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636cfaf5e9336040518263ffffffff1660e01b81526004016108ec9190614335565b60206040518083038186803b15801561090457600080fd5b505afa158015610918573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061093c9190810190613b2e565b905060008167ffffffffffffffff16141561098c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109839061450e565b60405180910390fd5b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743681893373ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1057600080fd5b505afa158015610a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a489190810190613b05565b336040518363ffffffff1660e01b8152600401610a669291906147a9565b60206040518083038186803b158015610a7e57600080fd5b505afa158015610a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ab69190810190613ab3565b610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec9061458e565b60405180910390fd5b828290508585905014610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b349061474e565b60405180910390fd5b610bc9858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612840565b3373ffffffffffffffffffffffffffffffffffffffff167ffc0bc9df281aa48a47afd9c8148717de12c91e0c699d023e9261459b40fbebb786868686604051610c1594939291906143fd565b60405180910390a25050505050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca89061466e565b60405180910390fd5b6000821180610cc05750600034115b610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf6906145ae565b60405180910390fd5b6000341115610d8b5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d81906145ce565b60405180910390fd5b5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610dfa82612b28565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610ead573492508173ffffffffffffffffffffffffffffffffffffffff16631249c58b846040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e8f57600080fd5b505af1158015610ea3573d6000803e3d6000fd5b5050505050611061565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8414610eda5783610f64565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610f139190614335565b60206040518083038186803b158015610f2b57600080fd5b505afa158015610f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f639190810190613b05565b5b9250610f933330858873ffffffffffffffffffffffffffffffffffffffff16612c08909392919063ffffffff16565b60008273ffffffffffffffffffffffffffffffffffffffff1663a0712d68856040518263ffffffff1660e01b8152600401610fce919061478e565b602060405180830381600087803b158015610fe857600080fd5b505af1158015610ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110209190810190613b05565b14611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611057906146ae565b60405180910390fd5b5b600061106c83612b28565b9050600061107a8284612caa565b905080600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4e3e4894f24a7c50bcb21d1ef785e34688bee05663c55d822eed7cefc253312387846040516111659291906147d2565b60405180910390a35050505092915050565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee97f7f36040518163ffffffff1660e01b815260040160206040518083038186803b1580156111df57600080fd5b505afa1580156111f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061121791908101906138bf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b9061464e565b60405180910390fd5b600460009054906101000a900460ff1615600460006101000a81548160ff021916908315150217905550565b6007602052816000526040600020602052806000526040600020600091509150505481565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee97f7f36040518163ffffffff1660e01b815260040160206040518083038186803b15801561133d57600080fd5b505afa158015611351573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061137591908101906138bf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d99061464e565b60405180910390fd5b61142c828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612cfa565b5050565b60026020528060005260406000206000915090505481565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee97f7f36040518163ffffffff1660e01b815260040160206040518083038186803b1580156114e357600080fd5b505afa1580156114f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061151b91908101906138bf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f9061464e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ef9061454e565b60405180910390fd5b606082828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080825160208401875af480156001811461165c57611667565b3d806000803e806000fd5b505050505050565b60006001905060008090505b600380549050811015611724576000600260006003848154811061169b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115611716576000925050611724565b50808060010191505061167b565b50600460009054906101000a900460ff16801561173e5750805b156117ec576000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d957dd3c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ad57600080fd5b505afa1580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117e59190810190613ab3565b9050809150505b90565b600381815481106117fc57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006020528060005260406000206000915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee97f7f36040518163ffffffff1660e01b815260040160206040518083038186803b1580156118b357600080fd5b505afa1580156118c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118eb91908101906138bf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f9061464e565b60405180910390fd5b6000734ddc2d193948926d02f9b1fe9e1daa0718270ed573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611a52578173ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e757600080fd5b505afa1580156119fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a1f91908101906138bf565b9050611a4d8260008373ffffffffffffffffffffffffffffffffffffffff166132549092919063ffffffff16565b611a6a565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee90505b6000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec906144ee565b60405180910390fd5b733d9819210a31b4961b30ef54be2aed79b9c9cd3b73ffffffffffffffffffffffffffffffffffffffff1663ede4edd0836040518263ffffffff1660e01b8152600401611b42919061431a565b602060405180830381600087803b158015611b5c57600080fd5b505af1158015611b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b949190810190613b05565b506000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600080905060006003805490509050600080600090505b82811015611c865760038181548110611c0f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611c795760019350809150611c86565b8080600101915050611bfa565b508215611df457600060036001840381548110611c9f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060038281548110611cd957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660036001850381548110611d1457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060038381548110611d6a57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003805480611dbd57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd511e486604296bfc72fc300fe7f957e689ec21219268e5a4c8706b65633500960405160405180910390a35050505050565b600080600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f11906145ee565b60405180910390fd5b600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851415612124576000611fb287612b28565b905060008273ffffffffffffffffffffffffffffffffffffffff1663db006a75866040518263ffffffff1660e01b8152600401611fef919061478e565b602060405180830381600087803b15801561200957600080fd5b505af115801561201d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120419190810190613b05565b14612081576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612078906146ce565b60405180910390fd5b600061208c88612b28565b9050849350600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905561211b8183612caa565b955050506122ea565b600061212f82612b28565b905060008273ffffffffffffffffffffffffffffffffffffffff1663852a12e3886040518263ffffffff1660e01b815260040161216c919061478e565b602060405180830381600087803b15801561218657600080fd5b505af115801561219a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121be9190810190613b05565b146121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f59061452e565b60405180910390fd5b600061220983612b28565b90506122158282612caa565b93508484111561225a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906144ce565b60405180910390fd5b83600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555086955050505b6122f48685612364565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f74217ce088f00bfd283666b763c64f0d1b1c345591dfdd01891dddf52446694e86856040516123539291906147d2565b60405180910390a350505092915050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123db576123d633828473ffffffffffffffffffffffffffffffffffffffff166133cb9092919063ffffffff16565b612423565b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612421573d6000803e3d6000fd5b505b5050565b60008151111561283d5760008090505b815181101561283b57600082828151811061244e57fe5b602002602001015190506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461282c57600081905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461262e5760008173ffffffffffffffffffffffffffffffffffffffff16630e7527027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518263ffffffff1660e01b8152600401612597919061478e565b602060405180830381600087803b1580156125b157600080fd5b505af11580156125c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125e99190810190613b05565b14612629576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126209061460e565b60405180910390fd5b6127e7565b8173ffffffffffffffffffffffffffffffffffffffff16634e4d9fea8273ffffffffffffffffffffffffffffffffffffffff166317bfdfbc306040518263ffffffff1660e01b8152600401612683919061431a565b602060405180830381600087803b15801561269d57600080fd5b505af11580156126b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126d59190810190613b05565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561270057600080fd5b505af1158015612714573d6000803e3d6000fd5b505050505060008173ffffffffffffffffffffffffffffffffffffffff166317bfdfbc306040518263ffffffff1660e01b8152600401612754919061431a565b602060405180830381600087803b15801561276e57600080fd5b505af1158015612782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127a69190810190613b05565b146127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd9061462e565b60405180910390fd5b5b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055505b50508080600101915050612437565b505b50565b600082511115612b245760008090505b8251811015612b2257600083828151811061286757fe5b602002602001015190506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612960576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129579061466e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156129b0575060008484815181106129a657fe5b6020026020010151115b15612b135760008173ffffffffffffffffffffffffffffffffffffffff1663c5ebeaec8686815181106129df57fe5b60200260200101516040518263ffffffff1660e01b8152600401612a03919061478e565b602060405180830381600087803b158015612a1d57600080fd5b505af1158015612a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a559190810190613b05565b14612a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8c9061468e565b60405180910390fd5b838381518110612aa157fe5b6020026020010151600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612b1282858581518110612b0557fe5b6020026020010151612364565b5b50508080600101915050612850565b505b5050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bff578173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612baa919061431a565b60206040518083038186803b158015612bc257600080fd5b505afa158015612bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612bfa9190810190613b05565b612c01565b475b9050919050565b612ca4848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401612c4293929190614379565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061346a565b50505050565b6000828284039150811115612cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ceb9061456e565b60405180910390fd5b92915050565b733d9819210a31b4961b30ef54be2aed79b9c9cd3b73ffffffffffffffffffffffffffffffffffffffff1663c2998238826040518263ffffffff1660e01b8152600401612d479190614438565b600060405180830381600087803b158015612d6157600080fd5b505af1158015612d75573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612d9e9190810190613a72565b5060608151604051908082528060200260200182016040528015612dd15781602001602082028038833980820191505090505b50905060008090505b825181101561321657734ddc2d193948926d02f9b1fe9e1daa0718270ed573ffffffffffffffffffffffffffffffffffffffff16838281518110612e1a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614612f8a57828181518110612e4957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612e9657600080fd5b505afa158015612eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ece91908101906138bf565b828281518110612eda57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f85838281518110612f2357fe5b60200260200101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848481518110612f5857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166132549092919063ffffffff16565b612fe6565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee828281518110612fab57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b828181518110612ff257fe5b60200260200101516001600084848151811061300a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008083838151811061309957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131209061470e565b60405180910390fd5b600160008084848151811061313a57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060038282815181106131a157fe5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050612dda565b507ffd3a921f1fa46f1a74dd60fb935c87e5a55ba53b12dda46e040504288c28fe96818360405161324892919061445a565b60405180910390a15050565b60008114806132ed575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161329b929190614350565b60206040518083038186803b1580156132b357600080fd5b505afa1580156132c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132eb9190810190613b05565b145b61332c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133239061476e565b60405180910390fd5b6133c6838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b84846040516024016133649291906143b0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061346a565b505050565b613465838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b84846040516024016134039291906143b0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061346a565b505050565b60606134cc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166135319092919063ffffffff16565b905060008151111561352c57808060200190516134ec9190810190613ab3565b61352b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135229061472e565b60405180910390fd5b5b505050565b60606135408484600085613549565b90509392505050565b60606135548561366c565b613593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358a906146ee565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516135bd9190614303565b60006040518083038185875af1925050503d80600081146135fa576040519150601f19603f3d011682016040523d82523d6000602084013e6135ff565b606091505b50915091508115613614578092505050613664565b6000815111156136275780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365b91906144ac565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156136ae57506000801b8214155b92505050919050565b6000813590506136c6816149df565b92915050565b6000815190506136db816149df565b92915050565b60008083601f8401126136f357600080fd5b8235905067ffffffffffffffff81111561370c57600080fd5b60208301915083602082028301111561372457600080fd5b9250929050565b60008083601f84011261373d57600080fd5b8235905067ffffffffffffffff81111561375657600080fd5b60208301915083602082028301111561376e57600080fd5b9250929050565b600082601f83011261378657600080fd5b815161379961379482614828565b6147fb565b915081818352602084019350602081019050838560208402820111156137be57600080fd5b60005b838110156137ee57816137d4888261386c565b8452602084019350602083019250506001810190506137c1565b5050505092915050565b600081519050613807816149f6565b92915050565b60008083601f84011261381f57600080fd5b8235905067ffffffffffffffff81111561383857600080fd5b60208301915083600182028301111561385057600080fd5b9250929050565b60008135905061386681614a0d565b92915050565b60008151905061387b81614a0d565b92915050565b60008151905061389081614a24565b92915050565b6000602082840312156138a857600080fd5b60006138b6848285016136b7565b91505092915050565b6000602082840312156138d157600080fd5b60006138df848285016136cc565b91505092915050565b600080604083850312156138fb57600080fd5b6000613909858286016136b7565b925050602061391a858286016136b7565b9150509250929050565b60008060006040848603121561393957600080fd5b6000613947868287016136b7565b935050602084013567ffffffffffffffff81111561396457600080fd5b6139708682870161380d565b92509250509250925092565b6000806040838503121561398f57600080fd5b600061399d858286016136b7565b92505060206139ae85828601613857565b9150509250929050565b600080602083850312156139cb57600080fd5b600083013567ffffffffffffffff8111156139e557600080fd5b6139f1858286016136e1565b92509250509250929050565b60008060008060408587031215613a1357600080fd5b600085013567ffffffffffffffff811115613a2d57600080fd5b613a39878288016136e1565b9450945050602085013567ffffffffffffffff811115613a5857600080fd5b613a648782880161372b565b925092505092959194509250565b600060208284031215613a8457600080fd5b600082015167ffffffffffffffff811115613a9e57600080fd5b613aaa84828501613775565b91505092915050565b600060208284031215613ac557600080fd5b6000613ad3848285016137f8565b91505092915050565b600060208284031215613aee57600080fd5b6000613afc84828501613857565b91505092915050565b600060208284031215613b1757600080fd5b6000613b258482850161386c565b91505092915050565b600060208284031215613b4057600080fd5b6000613b4e84828501613881565b91505092915050565b6000613b638383613b7e565b60208301905092915050565b613b7881614956565b82525050565b613b87816148fa565b82525050565b613b96816148fa565b82525050565b6000613ba883856148a5565b9350613bb382614850565b8060005b85811015613bec57613bc982846148e3565b613bd38882613b57565b9750613bde8361488b565b925050600181019050613bb7565b5085925050509392505050565b6000613c048261486a565b613c0e81856148a5565b9350613c198361485a565b8060005b83811015613c4a578151613c318882613b57565b9750613c3c83614898565b925050600181019050613c1d565b5085935050505092915050565b6000613c6383856148b6565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613c9257600080fd5b602083029250613ca383858461498c565b82840190509392505050565b613cb88161490c565b82525050565b6000613cc982614875565b613cd381856148c7565b9350613ce381856020860161499b565b80840191505092915050565b6000613cfa82614880565b613d0481856148d2565b9350613d1481856020860161499b565b613d1d816149ce565b840191505092915050565b6000613d356016836148d2565b91507f6e6f742d656e6f7567682d746f2d7769746864726177000000000000000000006000830152602082019050919050565b6000613d75600f836148d2565b91507f746b6e2d6e6f742d616c6c6f77656400000000000000000000000000000000006000830152602082019050919050565b6000613db5600a836148d2565b91507f6e6f742d6473612d6964000000000000000000000000000000000000000000006000830152602082019050919050565b6000613df56017836148d2565b91507f72656465656d556e6465726c79696e672d6661696c65640000000000000000006000830152602082019050919050565b6000613e35600e836148d2565b91507f7461726765742d696e76616c69640000000000000000000000000000000000006000830152602082019050919050565b6000613e75600c836148d2565b91507f7375622d6f766572666c6f7700000000000000000000000000000000000000006000830152602082019050919050565b6000613eb5600d836148d2565b91507f6e6f742d6473612d636c6f6e65000000000000000000000000000000000000006000830152602082019050919050565b6000613ef5600d836148d2565b91507f616d742d6e6f742d76616c6964000000000000000000000000000000000000006000830152602082019050919050565b6000613f35600c836148d2565b91507f6e6f742d6574682d6164647200000000000000000000000000000000000000006000830152602082019050919050565b6000613f756013836148d2565b91507f6e6f7468696e672d746f2d7769746864726177000000000000000000000000006000830152602082019050919050565b6000613fb5600e836148d2565b91507f7061796261636b2d6661696c65640000000000000000000000000000000000006000830152602082019050919050565b6000613ff56016836148d2565b91507f4554482d666c6173686c6f616e2d6e6f742d70616964000000000000000000006000830152602082019050919050565b6000614035600a836148d2565b91507f6e6f742d6d6173746572000000000000000000000000000000000000000000006000830152602082019050919050565b60006140756010836148d2565b91507f746f6b656e2d6e6f742d6c6973746564000000000000000000000000000000006000830152602082019050919050565b60006140b5600d836148d2565b91507f626f72726f772d6661696c6564000000000000000000000000000000000000006000830152602082019050919050565b60006140f5600b836148d2565b91507f6d696e742d6661696c65640000000000000000000000000000000000000000006000830152602082019050919050565b6000614135600d836148d2565b91507f72656465656d2d6661696c6564000000000000000000000000000000000000006000830152602082019050919050565b6000614175601d836148d2565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006141b56013836148d2565b91507f746b6e2d616c72656164792d616c6c6f776564000000000000000000000000006000830152602082019050919050565b60006141f5602a836148d2565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600061425b6010836148d2565b91507f6c656e6774682d6e6f742d657175616c000000000000000000000000000000006000830152602082019050919050565b600061429b6036836148d2565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b6142fd81614938565b82525050565b600061430f8284613cbe565b915081905092915050565b600060208201905061432f6000830184613b8d565b92915050565b600060208201905061434a6000830184613b6f565b92915050565b60006040820190506143656000830185613b8d565b6143726020830184613b8d565b9392505050565b600060608201905061438e6000830186613b8d565b61439b6020830185613b8d565b6143a860408301846142f4565b949350505050565b60006040820190506143c56000830185613b8d565b6143d260208301846142f4565b9392505050565b600060208201905081810360008301526143f4818486613b9c565b90509392505050565b60006040820190508181036000830152614418818688613b9c565b9050818103602083015261442d818486613c57565b905095945050505050565b600060208201905081810360008301526144528184613bf9565b905092915050565b600060408201905081810360008301526144748185613bf9565b905081810360208301526144888184613bf9565b90509392505050565b60006020820190506144a66000830184613caf565b92915050565b600060208201905081810360008301526144c68184613cef565b905092915050565b600060208201905081810360008301526144e781613d28565b9050919050565b6000602082019050818103600083015261450781613d68565b9050919050565b6000602082019050818103600083015261452781613da8565b9050919050565b6000602082019050818103600083015261454781613de8565b9050919050565b6000602082019050818103600083015261456781613e28565b9050919050565b6000602082019050818103600083015261458781613e68565b9050919050565b600060208201905081810360008301526145a781613ea8565b9050919050565b600060208201905081810360008301526145c781613ee8565b9050919050565b600060208201905081810360008301526145e781613f28565b9050919050565b6000602082019050818103600083015261460781613f68565b9050919050565b6000602082019050818103600083015261462781613fa8565b9050919050565b6000602082019050818103600083015261464781613fe8565b9050919050565b6000602082019050818103600083015261466781614028565b9050919050565b6000602082019050818103600083015261468781614068565b9050919050565b600060208201905081810360008301526146a7816140a8565b9050919050565b600060208201905081810360008301526146c7816140e8565b9050919050565b600060208201905081810360008301526146e781614128565b9050919050565b6000602082019050818103600083015261470781614168565b9050919050565b60006020820190508181036000830152614727816141a8565b9050919050565b60006020820190508181036000830152614747816141e8565b9050919050565b600060208201905081810360008301526147678161424e565b9050919050565b600060208201905081810360008301526147878161428e565b9050919050565b60006020820190506147a360008301846142f4565b92915050565b60006040820190506147be60008301856142f4565b6147cb6020830184613b6f565b9392505050565b60006040820190506147e760008301856142f4565b6147f460208301846142f4565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561481e57600080fd5b8060405250919050565b600067ffffffffffffffff82111561483f57600080fd5b602082029050602081019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006148f260208401846136b7565b905092915050565b600061490582614918565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600061496182614968565b9050919050565b60006149738261497a565b9050919050565b600061498582614918565b9050919050565b82818337600083830152505050565b60005b838110156149b957808201518184015260208101905061499e565b838111156149c8576000848401525b50505050565b6000601f19601f8301169050919050565b6149e8816148fa565b81146149f357600080fd5b50565b6149ff8161490c565b8114614a0a57600080fd5b50565b614a1681614938565b8114614a2157600080fd5b50565b614a2d81614942565b8114614a3857600080fd5b5056fea2646970667358221220542e9d2a6ea42000a33beb205ca0a6cfe9cc43840eaca99830d9814f630fd91964736f6c63430006000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000080000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e364300000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c1000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d4070000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e
-----Decoded View---------------
Arg [0] : ctkns (address[]): 0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5,0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643,0x39AA39c021dfbaE8faC545936693aC917d5E7563,0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9,0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1,0xC11b1268C1A384e55C48c2391d8d480264A3A7F4,0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407,0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [2] : 0000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed5
Arg [3] : 0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Arg [4] : 00000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563
Arg [5] : 000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9
Arg [6] : 000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c1
Arg [7] : 000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4
Arg [8] : 000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d407
Arg [9] : 0000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e
Deployed Bytecode Sourcemap
30706:163:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29925:164;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29925:164:0;;;;;;;;;;;;;;;;:::i;:::-;;23636:159;;;;;;;;;;;;;;;;:::i;:::-;;20159:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20159:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;23158:320;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23158:320:0;;;;;;;;;;;;;;;;:::i;:::-;;24759:977;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27477:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27477:95:0;;;:::i;:::-;;24509:70;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24509:70:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28521:111;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28521:111:0;;;;;;;;;;;;;;;;:::i;:::-;;20067:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20067:46:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;20013:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20013:45:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;30097:598;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30097:598:0;;;;;;;;;;;;;;;;:::i;:::-;;23807:447;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23807:447:0;;;:::i;:::-;;;;;;;;;;;;;;;;20120:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20120:30:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19961:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19961:45:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28749:996;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28749:996:0;;;;;;;;;;;;;;;;:::i;:::-;;25922:1153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25922:1153:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29925:164;27412:13;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27412:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27412:22:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27412:22:0;;;;;;;;;27398:36;;:10;:36;;;27390:59;;;;;;;;;;;;;;;;;;;;;;30003:21:::1;30013:5;30020:3;30003:9;:21::i;:::-;30070:5;30040:41;;30058:10;30040:41;;;30077:3;30040:41;;;;;;;;;;;;;;;29925:164:::0;;:::o;23636:159::-;20553:9;20565:12;;;;;;;;;;;:22;;;20588:10;20565:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20565:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20565:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20565:34:0;;;;;;;;;20553:46;;20624:1;20618:2;:7;;;;20610:30;;;;;;;;;;;;;;;;;;;;;;20659:13;;;;;;;;;;;:21;;;20698:10;20681:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20681:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20681:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20681:38:0;;;;;;;;;20721:10;20659:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20659:73:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20659:73:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20659:73:0;;;;;;;;;20651:99;;;;;;;;;;;;;;;;;;;;;;23722:15:::1;23730:6;;23722:15;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;23722:15:0;;;;;;:7;:15::i;:::-;23768:10;23753:34;;;23780:6;;23753:34;;;;;;;;;;;;;;;;23636:159:::0;;;:::o;20159:31::-;;;;;;;;;;;;;:::o;23158:320::-;20553:9;20565:12;;;;;;;;;;;:22;;;20588:10;20565:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20565:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20565:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20565:34:0;;;;;;;;;20553:46;;20624:1;20618:2;:7;;;;20610:30;;;;;;;;;;;;;;;;;;;;;;20659:13;;;;;;;;;;;:21;;;20698:10;20681:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20681:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20681:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20681:38:0;;;;;;;;;20721:10;20659:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20659:73:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20659:73:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20659:73:0;;;;;;;;;20651:99;;;;;;;;;;;;;;;;;;;;;;23286:7:::1;;:14;;23269:6;;:13;;:31;23261:60;;;;;;;;;;;;;;;;;;;;;;23332:30;23346:6;;23332:30;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;23332:30:0;;;;;;23354:7;;23332:30;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;23332:30:0;;;;;;:13;:30::i;:::-;23406:10;23378:92;;;23431:6;;23452:7;;23378:92;;;;;;;;;;;;;;;;;;23158:320:::0;;;;;:::o;24759:977::-;24827:9;24857:12;:19;24870:5;24857:19;;;;;;;;;;;;;;;;;;;;;;;;;24849:48;;;;;;;;;;;;;;;;;;;;;;24922:1;24916:3;:7;:24;;;;24939:1;24927:9;:13;24916:24;24908:50;;;;;;;;;;;;;;;;;;;;;;24987:1;24975:9;:13;24971:60;;;19828:42;24998:16;;:5;:16;;;24990:41;;;;;;;;;;;;;;;;;;;;;;24971:60;25044:14;25061:9;:16;25071:5;25061:16;;;;;;;;;;;;;;;;;;;;;;;;;25044:33;;25088:14;25105:16;25114:6;25105:8;:16::i;:::-;25088:33;;19828:42;25136:16;;:5;:16;;;25132:377;;;25176:9;25169:16;;25214:6;25200:26;;;25233:4;25200:40;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25200:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25200:40:0;;;;;25132:377;;;25293:2;25280:3;:17;:61;;25338:3;25280:61;;;25307:5;25300:23;;;25324:10;25300:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25300:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25300:35:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25300:35:0;;;;;;;;;25280:61;25273:68;;25356:63;25387:10;25407:4;25414;25363:5;25356:30;;;;:63;;;;;;:::i;:::-;25480:1;25458:6;25442:28;;;25471:4;25442:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25442:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25442:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25442:34:0;;;;;;;;;:39;25434:63;;;;;;;;;;;;;;;;;;;;;;25132:377;25519:13;25535:16;25544:6;25535:8;:16::i;:::-;25519:32;;25562:14;25579:24;25583:8;25593:9;25579:3;:24::i;:::-;25562:41;;25655:9;25616:16;:23;25633:5;25616:23;;;;;;;;;;;;;;;:35;25640:10;25616:35;;;;;;;;;;;;;;;;:48;;;;;;;;;;;25705:5;25682:46;;25693:10;25682:46;;;25712:4;25718:9;25682:46;;;;;;;;;;;;;;;;24759:977;;;;;;;;:::o;27477:95::-;27412:13;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27412:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27412:22:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27412:22:0;;;;;;;;;27398:36;;:10;:36;;;27390:59;;;;;;;;;;;;;;;;;;;;;;27552:12:::1;;;;;;;;;;;27551:13;27536:12;;:28;;;;;;;;;;;;;;;;;;27477:95::o:0;24509:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28521:111::-;27412:13;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27412:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27412:22:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27412:22:0;;;;;;;;;27398:36;;:10;:36;;;27390:59;;;;;;;;;;;;;;;;;;;;;;28601:23:::1;28614:9;;28601:23;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28601:23:0;;;;;;:12;:23::i;:::-;28521:111:::0;;:::o;20067:46::-;;;;;;;;;;;;;;;;;:::o;20013:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;30097:598::-;27412:13;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27412:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27412:22:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27412:22:0;;;;;;;;;27398:36;;:10;:36;;;27390:59;;;;;;;;;;;;;;;;;;;;;;30207:1:::1;30188:21;;:7;:21;;;;30180:48;;;;;;;;;;;;;;;;;;;;;;30239:22;30264:5;;30239:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;30239:30:0;;;;;;;;30393:1;30390::::0;30378:9:::1;30372:16;30365:4;30354:9;30350:20;30341:7;30334:5;30321:74;30425:9;30418:17;30458:1;30453:224;;;;30411:266;;30453:224;30548:16;30613:4;30607;30601::::0;30586:32:::1;30653:4;30647;30640:18;30411:266;;30289:399;;30097:598:::0;;;:::o;23807:447::-;23843:7;23868:4;23863:9;;23888:6;23897:1;23888:10;;23883:227;23904:13;:20;;;;23900:1;:24;23883:227;;;23946:16;23965:13;:31;23979:13;23993:1;23979:16;;;;;;;;;;;;;;;;;;;;;;;;;23965:31;;;;;;;;;;;;;;;;23946:50;;24028:1;24014:11;:15;24011:88;;;24054:5;24049:10;;24078:5;;;24011:88;23883:227;23926:3;;;;;;;23883:227;;;;24123:12;;;;;;;;;;;:18;;;;;24139:2;24123:18;24120:127;;;24158:16;24177:20;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24177:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24177:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;24177:27:0;;;;;;;;;24158:46;;24224:11;24219:16;;24120:127;;23807:447;:::o;20120:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19961:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;28749:996::-;27412:13;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27412:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27412:22:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27412:22:0;;;;;;;;;27398:36;;:10;:36;;;27390:59;;;;;;;;;;;;;;;;;;;;;;28812:11:::1;19910:42;28838:12;;:4;:12;;;28834:178;;28889:4;28873:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;28873:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28873:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28873:34:0;;;;;;;;;28867:40;;28922:32;28946:4;28952:1;28929:3;28922:23;;;;:32;;;;;:::i;:::-;28834:178;;;19828:42;28987:13;;28834:178;29030:12;:17:::0;29043:3:::1;29030:17;;;;;;;;;;;;;;;;;;;;;;;;;29022:45;;;;;;;;;;;;;;;;;;;;;;19741:42;29080:48;;;29129:4;29080:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;29080:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29080:54:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29080:54:0;;;;;;;;;;29154:12;:17:::0;29167:3:::1;29154:17;;;;;;;;;;;;;;;;29147:24;;;;;;;;;;;29184:12;29199:5:::0;29184:20:::1;;29215:12;29230:13;:20;;;;29215:35;;29261:8;29285:6:::0;29294:1:::1;29285:10;;29280:189;29301:7;29297:1;:11;29280:189;;;29341:13;29355:1;29341:16;;;;;;;;;;;;;;;;;;;;;;;;;29334:23;;:3;:23;;;29330:128;;;29388:4;29378:14;;29417:1;29411:7;;29437:5;;29330:128;29310:3;;;;;;;29280:189;;;;29483:7;29479:219;;;29507:13;29523;29547:1;29537:7;:11;29523:26;;;;;;;;;;;;;;;;;;;;;;;;;29507:42;;29593:13;29607:3;29593:18;;;;;;;;;;;;;;;;;;;;;;;;;29564:13;29588:1;29578:7;:11;29564:26;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;29647:5;29626:13;29640:3;29626:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;29667:13;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29479:219;;29732:4;29713:24;;29727:3;29713:24;;;;;;;;;;;;27460:1;;;;28749:996:::0;:::o;25922:1153::-;25983:9;26005:13;26021:16;:23;26038:5;26021:23;;;;;;;;;;;;;;;:35;26045:10;26021:35;;;;;;;;;;;;;;;;26005:51;;26086:1;26075:8;:12;26067:44;;;;;;;;;;;;;;;;;;;;;;26124:10;26147:14;26164:9;:16;26174:5;26164:16;;;;;;;;;;;;;;;;;;;;;;;;;26147:33;;26207:2;26195:3;:15;26191:766;;;26227:14;26244:15;26253:5;26244:8;:15::i;:::-;26227:32;;26326:1;26298:6;26282:30;;;26313:8;26282:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26282:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26282:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26282:40:0;;;;;;;;;:45;26274:71;;;;;;;;;;;;;;;;;;;;;;26360:14;26377:15;26386:5;26377:8;:15::i;:::-;26360:32;;26415:8;26407:16;;26445;:23;26462:5;26445:23;;;;;;;;;;;;;;;:35;26469:10;26445:35;;;;;;;;;;;;;;;26438:42;;;26502:25;26506:9;26517;26502:3;:25::i;:::-;26495:32;;26191:766;;;;;26560:15;26578:16;26587:6;26578:8;:16::i;:::-;26560:34;;26666:1;26633:6;26617:40;;;26658:3;26617:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26617:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26617:45:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26617:45:0;;;;;;;;;:50;26609:86;;;;;;;;;;;;;;;;;;;;;;26710:15;26728:16;26737:6;26728:8;:16::i;:::-;26710:34;;26767:27;26771:10;26783;26767:3;:27::i;:::-;26759:35;;26826:8;26817:5;:17;;26809:52;;;;;;;;;;;;;;;;;;;;;;26915:5;26876:16;:23;26893:5;26876:23;;;;;;;;;;;;;;;:35;26900:10;26876:35;;;;;;;;;;;;;;;;:44;;;;;;;;;;;26942:3;26935:10;;26191:766;;;26977:22;26987:5;26994:4;26977:9;:22::i;:::-;27048:5;27024:43;;27036:10;27024:43;;;27055:4;27061:5;27024:43;;;;;;;;;;;;;;;;25922:1153;;;;;;;:::o;20960:190::-;19828:42;21025:16;;:5;:16;;;:117;;21098:44;21125:10;21137:4;21105:5;21098:26;;;;:44;;;;;:::i;:::-;21025:117;;;21057:10;:19;;:25;21077:4;21057:25;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21057:25:0;21025:117;20960:190;;:::o;21861:885::-;21943:1;21927:6;:13;:17;21923:816;;;21966:6;21975:1;21966:10;;21961:767;21982:6;:13;21978:1;:17;21961:767;;;22021:13;22037:6;22044:1;22037:9;;;;;;;;;;;;;;22021:25;;22065:14;22082:9;:16;22092:5;22082:16;;;;;;;;;;;;;;;;;;;;;;;;;22065:33;;22139:1;22121:20;;:6;:20;;;22117:596;;22166:28;22213:6;22166:54;;19828:42;22246:16;;:5;:16;;;22243:401;;22337:1;22299:12;:24;;;22329:2;22299:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22299:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22299:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;22299:34:0;;;;;;;;;:39;22291:66;;;;;;;;;;;;;;;;;;;;;;22243:401;;;22428:6;22414:33;;;22454:12;:33;;;22496:4;22454:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22454:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22454:48:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;22454:48:0;;;;;;;;;22414:91;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22414:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22414:91:0;;;;;22592:1;22540:12;:33;;;22582:4;22540:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22540:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22540:48:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;22540:48:0;;;;;;;;;:53;22532:88;;;;;;;;;;;;;;;;;;;;;;22243:401;22673:13;:20;22687:5;22673:20;;;;;;;;;;;;;;;22666:27;;;22117:596;;21961:767;;21997:3;;;;;;;21961:767;;;;21923:816;21861:885;:::o;21205:648::-;21315:1;21299:6;:13;:17;21295:551;;;21338:6;21347:1;21338:10;;21333:502;21354:6;:13;21350:1;:17;21333:502;;;21393:13;21409:6;21416:1;21409:9;;;;;;;;;;;;;;21393:25;;21437:14;21454:9;:16;21464:5;21454:16;;;;;;;;;;;;;;;;;;;;;;;;;21437:33;;21497:12;:19;21510:5;21497:19;;;;;;;;;;;;;;;;;;;;;;;;;21489:48;;;;;;;;;;;;;;;;;;;;;;21578:1;21560:20;;:6;:20;;;;:37;;;;;21596:1;21584:6;21591:1;21584:9;;;;;;;;;;;;;;:13;21560:37;21556:264;;;21675:1;21646:6;21630:30;;;21661:6;21668:1;21661:9;;;;;;;;;;;;;;21630:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21630:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21630:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21630:41:0;;;;;;;;;:46;21622:72;;;;;;;;;;;;;;;;;;;;;;21741:6;21748:1;21741:9;;;;;;;;;;;;;;21717:13;:20;21731:5;21717:20;;;;;;;;;;;;;;;;:33;;;;;;;;;;;21773:27;21783:5;21790:6;21797:1;21790:9;;;;;;;;;;;;;;21773;:27::i;:::-;21556:264;21333:502;;21369:3;;;;;;;21333:502;;;;21295:551;21205:648;;:::o;20778:174::-;20834:9;19828:42;20863:16;;:5;:16;;;:81;;20913:5;20906:23;;;20938:4;20906:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20906:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20906:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20906:38:0;;;;;;;;;20863:81;;;20882:21;20863:81;20856:88;;20778:174;;;:::o;14974:205::-;15075:96;15095:5;15125;:18;;;:27;;;;15154:4;15160:2;15164:5;15102:68;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15102:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;15102:68:0;15075:19;:96::i;:::-;14974:205;;;;:::o;19317:120::-;19369:6;19411:1;19405;19401;:5;19397:9;;;19396:16;;19388:41;;;;;;;;;;;;;;;;;;;;;;19317:120;;;;:::o;27580:811::-;19741:42;27650:50;;;27701:9;27650:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27650:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27650:61:0;;;;;;39:16:-1;36:1;17:17;2:54;27650:61:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27650:61:0;;;;;;;;;;27722:25;27764:9;:16;27750:31;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;27750:31:0;;;;27722:59;;27797:6;27806:1;27797:10;;27792:541;27813:9;:16;27809:1;:20;27792:541;;;19910:42;27855:20;;:9;27865:1;27855:12;;;;;;;;;;;;;;:20;;;27851:253;;27926:9;27936:1;27926:12;;;;;;;;;;;;;;27910:40;;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27910:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27910:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27910:42:0;;;;;;;;;27896:8;27905:1;27896:11;;;;;;;;;;;;;:56;;;;;;;;;;;27971:55;28003:9;28013:1;28003:12;;;;;;;;;;;;;;28022:2;27978:8;27987:1;27978:11;;;;;;;;;;;;;;27971:31;;;;:55;;;;;:::i;:::-;27851:253;;;19828:42;28067:8;28076:1;28067:11;;;;;;;;;;;;;:21;;;;;;;;;;;27851:253;28143:9;28153:1;28143:12;;;;;;;;;;;;;;28118:9;:22;28128:8;28137:1;28128:11;;;;;;;;;;;;;;28118:22;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;28179:12;:25;28192:8;28201:1;28192:11;;;;;;;;;;;;;;28179:25;;;;;;;;;;;;;;;;;;;;;;;;;28178:26;28170:58;;;;;;;;;;;;;;;;;;;;;;28271:4;28243:12;:25;28256:8;28265:1;28256:11;;;;;;;;;;;;;;28243:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;28290:13;28309:8;28318:1;28309:11;;;;;;;;;;;;;;28290:31;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;28290:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27831:3;;;;;;;27792:541;;;;28348:35;28363:8;28373:9;28348:35;;;;;;;;;;;;;;;;27580:811;;:::o;15448:622::-;15827:1;15818:5;:10;15817:62;;;;15877:1;15834:5;:15;;;15858:4;15865:7;15834:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15834:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15834:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15834:39:0;;;;;;;;;:44;15817:62;15809:152;;;;;;;;;;;;;;;;;;;;;;15972:90;15992:5;16022;:13;;;:22;;;;16046:7;16055:5;15999:62;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15999:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;15999:62:0;15972:19;:90::i;:::-;15448:622;;;:::o;14789:177::-;14872:86;14892:5;14922;:14;;;:23;;;;14947:2;14951:5;14899:58;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14899:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;14899:58:0;14872:19;:86::i;:::-;14789:177;;;:::o;17094:761::-;17518:23;17544:69;17572:4;17544:69;;;;;;;;;;;;;;;;;17552:5;17544:27;;;;:69;;;;;:::i;:::-;17518:95;;17648:1;17628:10;:17;:21;17624:224;;;17770:10;17759:30;;;;;;;;;;;;;;17751:85;;;;;;;;;;;;;;;;;;;;;;17624:224;17094:761;;;:::o;11868:196::-;11971:12;12003:53;12026:6;12034:4;12040:1;12043:12;12003:22;:53::i;:::-;11996:60;;11868:196;;;;;:::o;13245:976::-;13375:12;13408:18;13419:6;13408:10;:18::i;:::-;13400:60;;;;;;;;;;;;;;;;;;;;;;13534:12;13548:23;13575:6;:11;;13593:8;13603:4;13575:33;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;13533:75:0;;;;13623:7;13619:595;;;13654:10;13647:17;;;;;;13619:595;13788:1;13768:10;:17;:21;13764:439;;;14031:10;14025:17;14092:15;14079:10;14075:2;14071:19;14064:44;13979:148;14174:12;14167:20;;;;;;;;;;;;;;;;;;;;13245:976;;;;;;;:::o;8756:619::-;8816:4;9078:16;9105:19;9127:66;9105:88;;;;9296:7;9284:20;9272:32;;9336:11;9324:8;:23;;:42;;;;;9363:3;9351:15;;:8;:15;;9324:42;9316:51;;;;8756:619;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;301:352;;;431:3;424:4;416:6;412:17;408:27;398:2;;449:1;446;439:12;398:2;482:6;469:20;459:30;;509:18;501:6;498:30;495:2;;;541:1;538;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;618:4;610:6;606:17;596:8;592:32;589:41;586:2;;;643:1;640;633:12;586:2;391:262;;;;;;679:352;;;809:3;802:4;794:6;790:17;786:27;776:2;;827:1;824;817:12;776:2;860:6;847:20;837:30;;887:18;879:6;876:30;873:2;;;919:1;916;909:12;873:2;953:4;945:6;941:17;929:29;;1004:3;996:4;988:6;984:17;974:8;970:32;967:41;964:2;;;1021:1;1018;1011:12;964:2;769:262;;;;;;1057:722;;1185:3;1178:4;1170:6;1166:17;1162:27;1152:2;;1203:1;1200;1193:12;1152:2;1233:6;1227:13;1255:80;1270:64;1327:6;1270:64;;;1255:80;;;1246:89;;1352:5;1377:6;1370:5;1363:21;1407:4;1399:6;1395:17;1385:27;;1429:4;1424:3;1420:14;1413:21;;1482:6;1529:3;1521:4;1513:6;1509:17;1504:3;1500:27;1497:36;1494:2;;;1546:1;1543;1536:12;1494:2;1571:1;1556:217;1581:6;1578:1;1575:13;1556:217;;;1639:3;1661:48;1705:3;1693:10;1661:48;;;1656:3;1649:61;1733:4;1728:3;1724:14;1717:21;;1761:4;1756:3;1752:14;1745:21;;1613:160;1603:1;1600;1596:9;1591:14;;1556:217;;;1560:14;1145:634;;;;;;;;1787:128;;1868:6;1862:13;1853:22;;1880:30;1904:5;1880:30;;;1847:68;;;;;1936:336;;;2050:3;2043:4;2035:6;2031:17;2027:27;2017:2;;2068:1;2065;2058:12;2017:2;2101:6;2088:20;2078:30;;2128:18;2120:6;2117:30;2114:2;;;2160:1;2157;2150:12;2114:2;2194:4;2186:6;2182:17;2170:29;;2245:3;2237:4;2229:6;2225:17;2215:8;2211:32;2208:41;2205:2;;;2262:1;2259;2252:12;2205:2;2010:262;;;;;;2280:130;;2360:6;2347:20;2338:29;;2372:33;2399:5;2372:33;;;2332:78;;;;;2417:134;;2501:6;2495:13;2486:22;;2513:33;2540:5;2513:33;;;2480:71;;;;;2558:132;;2641:6;2635:13;2626:22;;2653:32;2679:5;2653:32;;;2620:70;;;;;2697:241;;2801:2;2789:9;2780:7;2776:23;2772:32;2769:2;;;2817:1;2814;2807:12;2769:2;2852:1;2869:53;2914:7;2905:6;2894:9;2890:22;2869:53;;;2859:63;;2831:97;2763:175;;;;;2945:263;;3060:2;3048:9;3039:7;3035:23;3031:32;3028:2;;;3076:1;3073;3066:12;3028:2;3111:1;3128:64;3184:7;3175:6;3164:9;3160:22;3128:64;;;3118:74;;3090:108;3022:186;;;;;3215:366;;;3336:2;3324:9;3315:7;3311:23;3307:32;3304:2;;;3352:1;3349;3342:12;3304:2;3387:1;3404:53;3449:7;3440:6;3429:9;3425:22;3404:53;;;3394:63;;3366:97;3494:2;3512:53;3557:7;3548:6;3537:9;3533:22;3512:53;;;3502:63;;3473:98;3298:283;;;;;;3588:490;;;;3728:2;3716:9;3707:7;3703:23;3699:32;3696:2;;;3744:1;3741;3734:12;3696:2;3779:1;3796:53;3841:7;3832:6;3821:9;3817:22;3796:53;;;3786:63;;3758:97;3914:2;3903:9;3899:18;3886:32;3938:18;3930:6;3927:30;3924:2;;;3970:1;3967;3960:12;3924:2;3998:64;4054:7;4045:6;4034:9;4030:22;3998:64;;;3988:74;;;;3865:203;3690:388;;;;;;4085:366;;;4206:2;4194:9;4185:7;4181:23;4177:32;4174:2;;;4222:1;4219;4212:12;4174:2;4257:1;4274:53;4319:7;4310:6;4299:9;4295:22;4274:53;;;4264:63;;4236:97;4364:2;4382:53;4427:7;4418:6;4407:9;4403:22;4382:53;;;4372:63;;4343:98;4168:283;;;;;;4458:397;;;4597:2;4585:9;4576:7;4572:23;4568:32;4565:2;;;4613:1;4610;4603:12;4565:2;4676:1;4665:9;4661:17;4648:31;4699:18;4691:6;4688:30;4685:2;;;4731:1;4728;4721:12;4685:2;4759:80;4831:7;4822:6;4811:9;4807:22;4759:80;;;4749:90;;;;4627:218;4559:296;;;;;;4862:678;;;;;5053:2;5041:9;5032:7;5028:23;5024:32;5021:2;;;5069:1;5066;5059:12;5021:2;5132:1;5121:9;5117:17;5104:31;5155:18;5147:6;5144:30;5141:2;;;5187:1;5184;5177:12;5141:2;5215:80;5287:7;5278:6;5267:9;5263:22;5215:80;;;5205:90;;;;5083:218;5360:2;5349:9;5345:18;5332:32;5384:18;5376:6;5373:30;5370:2;;;5416:1;5413;5406:12;5370:2;5444:80;5516:7;5507:6;5496:9;5492:22;5444:80;;;5434:90;;;;5311:219;5015:525;;;;;;;;5547:392;;5687:2;5675:9;5666:7;5662:23;5658:32;5655:2;;;5703:1;5700;5693:12;5655:2;5759:1;5748:9;5744:17;5738:24;5782:18;5774:6;5771:30;5768:2;;;5814:1;5811;5804:12;5768:2;5834:89;5915:7;5906:6;5895:9;5891:22;5834:89;;;5824:99;;5717:212;5649:290;;;;;5946:257;;6058:2;6046:9;6037:7;6033:23;6029:32;6026:2;;;6074:1;6071;6064:12;6026:2;6109:1;6126:61;6179:7;6170:6;6159:9;6155:22;6126:61;;;6116:71;;6088:105;6020:183;;;;;6210:241;;6314:2;6302:9;6293:7;6289:23;6285:32;6282:2;;;6330:1;6327;6320:12;6282:2;6365:1;6382:53;6427:7;6418:6;6407:9;6403:22;6382:53;;;6372:63;;6344:97;6276:175;;;;;6458:263;;6573:2;6561:9;6552:7;6548:23;6544:32;6541:2;;;6589:1;6586;6579:12;6541:2;6624:1;6641:64;6697:7;6688:6;6677:9;6673:22;6641:64;;;6631:74;;6603:108;6535:186;;;;;6728:261;;6842:2;6830:9;6821:7;6817:23;6813:32;6810:2;;;6858:1;6855;6848:12;6810:2;6893:1;6910:63;6965:7;6956:6;6945:9;6941:22;6910:63;;;6900:73;;6872:107;6804:185;;;;;6997:173;;7084:46;7126:3;7118:6;7084:46;;;7159:4;7154:3;7150:14;7136:28;;7077:93;;;;;7178:142;7269:45;7308:5;7269:45;;;7264:3;7257:58;7251:69;;;7327:103;7400:24;7418:5;7400:24;;;7395:3;7388:37;7382:48;;;7437:113;7520:24;7538:5;7520:24;;;7515:3;7508:37;7502:48;;;7588:665;;7742:86;7821:6;7816:3;7742:86;;;7735:93;;7849:58;7901:5;7849:58;;;7927:7;7955:1;7940:291;7965:6;7962:1;7959:13;7940:291;;;8026:42;8061:6;8052:7;8026:42;;;8082:63;8141:3;8126:13;8082:63;;;8075:70;;8162:62;8217:6;8162:62;;;8152:72;;7997:234;7987:1;7984;7980:9;7975:14;;7940:291;;;7944:14;8244:3;8237:10;;7722:531;;;;;;;;8292:690;;8437:54;8485:5;8437:54;;;8504:86;8583:6;8578:3;8504:86;;;8497:93;;8611:56;8661:5;8611:56;;;8687:7;8715:1;8700:260;8725:6;8722:1;8719:13;8700:260;;;8792:6;8786:13;8813:63;8872:3;8857:13;8813:63;;;8806:70;;8893:60;8946:6;8893:60;;;8883:70;;8757:203;8747:1;8744;8740:9;8735:14;;8700:260;;;8704:14;8973:3;8966:10;;8416:566;;;;;;;;9021:467;;9167:86;9246:6;9241:3;9167:86;;;9160:93;;9280:66;9272:6;9269:78;9266:2;;;9360:1;9357;9350:12;9266:2;9393:4;9385:6;9381:17;9371:27;;9410:43;9446:6;9441:3;9434:5;9410:43;;;9475:6;9470:3;9466:16;9459:23;;9153:335;;;;;;9496:104;9573:21;9588:5;9573:21;;;9568:3;9561:34;9555:45;;;9607:356;;9735:38;9767:5;9735:38;;;9785:88;9866:6;9861:3;9785:88;;;9778:95;;9878:52;9923:6;9918:3;9911:4;9904:5;9900:16;9878:52;;;9951:6;9946:3;9942:16;9935:23;;9715:248;;;;;;9970:347;;10082:39;10115:5;10082:39;;;10133:71;10197:6;10192:3;10133:71;;;10126:78;;10209:52;10254:6;10249:3;10242:4;10235:5;10231:16;10209:52;;;10282:29;10304:6;10282:29;;;10277:3;10273:39;10266:46;;10062:255;;;;;;10325:322;;10485:67;10549:2;10544:3;10485:67;;;10478:74;;10585:24;10581:1;10576:3;10572:11;10565:45;10638:2;10633:3;10629:12;10622:19;;10471:176;;;;10656:315;;10816:67;10880:2;10875:3;10816:67;;;10809:74;;10916:17;10912:1;10907:3;10903:11;10896:38;10962:2;10957:3;10953:12;10946:19;;10802:169;;;;10980:310;;11140:67;11204:2;11199:3;11140:67;;;11133:74;;11240:12;11236:1;11231:3;11227:11;11220:33;11281:2;11276:3;11272:12;11265:19;;11126:164;;;;11299:323;;11459:67;11523:2;11518:3;11459:67;;;11452:74;;11559:25;11555:1;11550:3;11546:11;11539:46;11613:2;11608:3;11604:12;11597:19;;11445:177;;;;11631:314;;11791:67;11855:2;11850:3;11791:67;;;11784:74;;11891:16;11887:1;11882:3;11878:11;11871:37;11936:2;11931:3;11927:12;11920:19;;11777:168;;;;11954:312;;12114:67;12178:2;12173:3;12114:67;;;12107:74;;12214:14;12210:1;12205:3;12201:11;12194:35;12257:2;12252:3;12248:12;12241:19;;12100:166;;;;12275:313;;12435:67;12499:2;12494:3;12435:67;;;12428:74;;12535:15;12531:1;12526:3;12522:11;12515:36;12579:2;12574:3;12570:12;12563:19;;12421:167;;;;12597:313;;12757:67;12821:2;12816:3;12757:67;;;12750:74;;12857:15;12853:1;12848:3;12844:11;12837:36;12901:2;12896:3;12892:12;12885:19;;12743:167;;;;12919:312;;13079:67;13143:2;13138:3;13079:67;;;13072:74;;13179:14;13175:1;13170:3;13166:11;13159:35;13222:2;13217:3;13213:12;13206:19;;13065:166;;;;13240:319;;13400:67;13464:2;13459:3;13400:67;;;13393:74;;13500:21;13496:1;13491:3;13487:11;13480:42;13550:2;13545:3;13541:12;13534:19;;13386:173;;;;13568:314;;13728:67;13792:2;13787:3;13728:67;;;13721:74;;13828:16;13824:1;13819:3;13815:11;13808:37;13873:2;13868:3;13864:12;13857:19;;13714:168;;;;13891:322;;14051:67;14115:2;14110:3;14051:67;;;14044:74;;14151:24;14147:1;14142:3;14138:11;14131:45;14204:2;14199:3;14195:12;14188:19;;14037:176;;;;14222:310;;14382:67;14446:2;14441:3;14382:67;;;14375:74;;14482:12;14478:1;14473:3;14469:11;14462:33;14523:2;14518:3;14514:12;14507:19;;14368:164;;;;14541:316;;14701:67;14765:2;14760:3;14701:67;;;14694:74;;14801:18;14797:1;14792:3;14788:11;14781:39;14848:2;14843:3;14839:12;14832:19;;14687:170;;;;14866:313;;15026:67;15090:2;15085:3;15026:67;;;15019:74;;15126:15;15122:1;15117:3;15113:11;15106:36;15170:2;15165:3;15161:12;15154:19;;15012:167;;;;15188:311;;15348:67;15412:2;15407:3;15348:67;;;15341:74;;15448:13;15444:1;15439:3;15435:11;15428:34;15490:2;15485:3;15481:12;15474:19;;15334:165;;;;15508:313;;15668:67;15732:2;15727:3;15668:67;;;15661:74;;15768:15;15764:1;15759:3;15755:11;15748:36;15812:2;15807:3;15803:12;15796:19;;15654:167;;;;15830:329;;15990:67;16054:2;16049:3;15990:67;;;15983:74;;16090:31;16086:1;16081:3;16077:11;16070:52;16150:2;16145:3;16141:12;16134:19;;15976:183;;;;16168:319;;16328:67;16392:2;16387:3;16328:67;;;16321:74;;16428:21;16424:1;16419:3;16415:11;16408:42;16478:2;16473:3;16469:12;16462:19;;16314:173;;;;16496:379;;16656:67;16720:2;16715:3;16656:67;;;16649:74;;16756:34;16752:1;16747:3;16743:11;16736:55;16825:12;16820:2;16815:3;16811:12;16804:34;16866:2;16861:3;16857:12;16850:19;;16642:233;;;;16884:316;;17044:67;17108:2;17103:3;17044:67;;;17037:74;;17144:18;17140:1;17135:3;17131:11;17124:39;17191:2;17186:3;17182:12;17175:19;;17030:170;;;;17209:391;;17369:67;17433:2;17428:3;17369:67;;;17362:74;;17469:34;17465:1;17460:3;17456:11;17449:55;17538:24;17533:2;17528:3;17524:12;17517:46;17591:2;17586:3;17582:12;17575:19;;17355:245;;;;17608:113;17691:24;17709:5;17691:24;;;17686:3;17679:37;17673:48;;;17728:262;;17872:93;17961:3;17952:6;17872:93;;;17865:100;;17982:3;17975:10;;17853:137;;;;;17997:213;;18115:2;18104:9;18100:18;18092:26;;18129:71;18197:1;18186:9;18182:17;18173:6;18129:71;;;18086:124;;;;;18217:229;;18343:2;18332:9;18328:18;18320:26;;18357:79;18433:1;18422:9;18418:17;18409:6;18357:79;;;18314:132;;;;;18453:324;;18599:2;18588:9;18584:18;18576:26;;18613:71;18681:1;18670:9;18666:17;18657:6;18613:71;;;18695:72;18763:2;18752:9;18748:18;18739:6;18695:72;;;18570:207;;;;;;18784:435;;18958:2;18947:9;18943:18;18935:26;;18972:71;19040:1;19029:9;19025:17;19016:6;18972:71;;;19054:72;19122:2;19111:9;19107:18;19098:6;19054:72;;;19137;19205:2;19194:9;19190:18;19181:6;19137:72;;;18929:290;;;;;;;19226:324;;19372:2;19361:9;19357:18;19349:26;;19386:71;19454:1;19443:9;19439:17;19430:6;19386:71;;;19468:72;19536:2;19525:9;19521:18;19512:6;19468:72;;;19343:207;;;;;;19557:381;;19735:2;19724:9;19720:18;19712:26;;19785:9;19779:4;19775:20;19771:1;19760:9;19756:17;19749:47;19810:118;19923:4;19914:6;19906;19810:118;;;19802:126;;19706:232;;;;;;19945:660;;20211:2;20200:9;20196:18;20188:26;;20261:9;20255:4;20251:20;20247:1;20236:9;20232:17;20225:47;20286:118;20399:4;20390:6;20382;20286:118;;;20278:126;;20452:9;20446:4;20442:20;20437:2;20426:9;20422:18;20415:48;20477:118;20590:4;20581:6;20573;20477:118;;;20469:126;;20182:423;;;;;;;;20612:361;;20780:2;20769:9;20765:18;20757:26;;20830:9;20824:4;20820:20;20816:1;20805:9;20801:17;20794:47;20855:108;20958:4;20949:6;20855:108;;;20847:116;;20751:222;;;;;20980:620;;21226:2;21215:9;21211:18;21203:26;;21276:9;21270:4;21266:20;21262:1;21251:9;21247:17;21240:47;21301:108;21404:4;21395:6;21301:108;;;21293:116;;21457:9;21451:4;21447:20;21442:2;21431:9;21427:18;21420:48;21482:108;21585:4;21576:6;21482:108;;;21474:116;;21197:403;;;;;;21607:201;;21719:2;21708:9;21704:18;21696:26;;21733:65;21795:1;21784:9;21780:17;21771:6;21733:65;;;21690:118;;;;;21815:301;;21953:2;21942:9;21938:18;21930:26;;22003:9;21997:4;21993:20;21989:1;21978:9;21974:17;21967:47;22028:78;22101:4;22092:6;22028:78;;;22020:86;;21924:192;;;;;22123:407;;22314:2;22303:9;22299:18;22291:26;;22364:9;22358:4;22354:20;22350:1;22339:9;22335:17;22328:47;22389:131;22515:4;22389:131;;;22381:139;;22285:245;;;;22537:407;;22728:2;22717:9;22713:18;22705:26;;22778:9;22772:4;22768:20;22764:1;22753:9;22749:17;22742:47;22803:131;22929:4;22803:131;;;22795:139;;22699:245;;;;22951:407;;23142:2;23131:9;23127:18;23119:26;;23192:9;23186:4;23182:20;23178:1;23167:9;23163:17;23156:47;23217:131;23343:4;23217:131;;;23209:139;;23113:245;;;;23365:407;;23556:2;23545:9;23541:18;23533:26;;23606:9;23600:4;23596:20;23592:1;23581:9;23577:17;23570:47;23631:131;23757:4;23631:131;;;23623:139;;23527:245;;;;23779:407;;23970:2;23959:9;23955:18;23947:26;;24020:9;24014:4;24010:20;24006:1;23995:9;23991:17;23984:47;24045:131;24171:4;24045:131;;;24037:139;;23941:245;;;;24193:407;;24384:2;24373:9;24369:18;24361:26;;24434:9;24428:4;24424:20;24420:1;24409:9;24405:17;24398:47;24459:131;24585:4;24459:131;;;24451:139;;24355:245;;;;24607:407;;24798:2;24787:9;24783:18;24775:26;;24848:9;24842:4;24838:20;24834:1;24823:9;24819:17;24812:47;24873:131;24999:4;24873:131;;;24865:139;;24769:245;;;;25021:407;;25212:2;25201:9;25197:18;25189:26;;25262:9;25256:4;25252:20;25248:1;25237:9;25233:17;25226:47;25287:131;25413:4;25287:131;;;25279:139;;25183:245;;;;25435:407;;25626:2;25615:9;25611:18;25603:26;;25676:9;25670:4;25666:20;25662:1;25651:9;25647:17;25640:47;25701:131;25827:4;25701:131;;;25693:139;;25597:245;;;;25849:407;;26040:2;26029:9;26025:18;26017:26;;26090:9;26084:4;26080:20;26076:1;26065:9;26061:17;26054:47;26115:131;26241:4;26115:131;;;26107:139;;26011:245;;;;26263:407;;26454:2;26443:9;26439:18;26431:26;;26504:9;26498:4;26494:20;26490:1;26479:9;26475:17;26468:47;26529:131;26655:4;26529:131;;;26521:139;;26425:245;;;;26677:407;;26868:2;26857:9;26853:18;26845:26;;26918:9;26912:4;26908:20;26904:1;26893:9;26889:17;26882:47;26943:131;27069:4;26943:131;;;26935:139;;26839:245;;;;27091:407;;27282:2;27271:9;27267:18;27259:26;;27332:9;27326:4;27322:20;27318:1;27307:9;27303:17;27296:47;27357:131;27483:4;27357:131;;;27349:139;;27253:245;;;;27505:407;;27696:2;27685:9;27681:18;27673:26;;27746:9;27740:4;27736:20;27732:1;27721:9;27717:17;27710:47;27771:131;27897:4;27771:131;;;27763:139;;27667:245;;;;27919:407;;28110:2;28099:9;28095:18;28087:26;;28160:9;28154:4;28150:20;28146:1;28135:9;28131:17;28124:47;28185:131;28311:4;28185:131;;;28177:139;;28081:245;;;;28333:407;;28524:2;28513:9;28509:18;28501:26;;28574:9;28568:4;28564:20;28560:1;28549:9;28545:17;28538:47;28599:131;28725:4;28599:131;;;28591:139;;28495:245;;;;28747:407;;28938:2;28927:9;28923:18;28915:26;;28988:9;28982:4;28978:20;28974:1;28963:9;28959:17;28952:47;29013:131;29139:4;29013:131;;;29005:139;;28909:245;;;;29161:407;;29352:2;29341:9;29337:18;29329:26;;29402:9;29396:4;29392:20;29388:1;29377:9;29373:17;29366:47;29427:131;29553:4;29427:131;;;29419:139;;29323:245;;;;29575:407;;29766:2;29755:9;29751:18;29743:26;;29816:9;29810:4;29806:20;29802:1;29791:9;29787:17;29780:47;29841:131;29967:4;29841:131;;;29833:139;;29737:245;;;;29989:407;;30180:2;30169:9;30165:18;30157:26;;30230:9;30224:4;30220:20;30216:1;30205:9;30201:17;30194:47;30255:131;30381:4;30255:131;;;30247:139;;30151:245;;;;30403:407;;30594:2;30583:9;30579:18;30571:26;;30644:9;30638:4;30634:20;30630:1;30619:9;30615:17;30608:47;30669:131;30795:4;30669:131;;;30661:139;;30565:245;;;;30817:407;;31008:2;30997:9;30993:18;30985:26;;31058:9;31052:4;31048:20;31044:1;31033:9;31029:17;31022:47;31083:131;31209:4;31083:131;;;31075:139;;30979:245;;;;31231:213;;31349:2;31338:9;31334:18;31326:26;;31363:71;31431:1;31420:9;31416:17;31407:6;31363:71;;;31320:124;;;;;31451:340;;31605:2;31594:9;31590:18;31582:26;;31619:71;31687:1;31676:9;31672:17;31663:6;31619:71;;;31701:80;31777:2;31766:9;31762:18;31753:6;31701:80;;;31576:215;;;;;;31798:324;;31944:2;31933:9;31929:18;31921:26;;31958:71;32026:1;32015:9;32011:17;32002:6;31958:71;;;32040:72;32108:2;32097:9;32093:18;32084:6;32040:72;;;31915:207;;;;;;32129:256;;32191:2;32185:9;32175:19;;32229:4;32221:6;32217:17;32328:6;32316:10;32313:22;32292:18;32280:10;32277:34;32274:62;32271:2;;;32349:1;32346;32339:12;32271:2;32369:10;32365:2;32358:22;32169:216;;;;;32392:304;;32551:18;32543:6;32540:30;32537:2;;;32583:1;32580;32573:12;32537:2;32618:4;32610:6;32606:17;32598:25;;32681:4;32675;32671:15;32663:23;;32474:222;;;;32703:118;;32791:3;32783:11;;32777:44;;;;32828:151;;32914:3;32906:11;;32952:4;32947:3;32943:14;32935:22;;32900:79;;;;32986:137;;33095:5;33089:12;33079:22;;33060:63;;;;33130:121;;33223:5;33217:12;33207:22;;33188:63;;;;33258:122;;33352:5;33346:12;33336:22;;33317:63;;;;33387:110;;33487:4;33482:3;33478:14;33470:22;;33464:33;;;;33504:108;;33602:4;33597:3;33593:14;33585:22;;33579:33;;;;33620:178;;33750:6;33745:3;33738:19;33787:4;33782:3;33778:14;33763:29;;33731:67;;;;;33807:178;;33937:6;33932:3;33925:19;33974:4;33969:3;33965:14;33950:29;;33918:67;;;;;33994:144;;34129:3;34114:18;;34107:31;;;;;34147:163;;34262:6;34257:3;34250:19;34299:4;34294:3;34290:14;34275:29;;34243:67;;;;;34319:119;;34393:39;34428:2;34423:3;34419:12;34414:3;34393:39;;;34384:48;;34377:61;;;;;34446:91;;34508:24;34526:5;34508:24;;;34497:35;;34491:46;;;;34544:85;;34617:5;34610:13;34603:21;34592:32;;34586:43;;;;34636:121;;34709:42;34702:5;34698:54;34687:65;;34681:76;;;;34764:72;;34826:5;34815:16;;34809:27;;;;34843:96;;34915:18;34908:5;34904:30;34893:41;;34887:52;;;;34946:129;;35033:37;35064:5;35033:37;;;35020:50;;35014:61;;;;35082:121;;35161:37;35192:5;35161:37;;;35148:50;;35142:61;;;;35210:108;;35289:24;35307:5;35289:24;;;35276:37;;35270:48;;;;35326:145;35407:6;35402:3;35397;35384:30;35463:1;35454:6;35449:3;35445:16;35438:27;35377:94;;;;35480:268;35545:1;35552:101;35566:6;35563:1;35560:13;35552:101;;;35642:1;35637:3;35633:11;35627:18;35623:1;35618:3;35614:11;35607:39;35588:2;35585:1;35581:10;35576:15;;35552:101;;;35668:6;35665:1;35662:13;35659:2;;;35733:1;35724:6;35719:3;35715:16;35708:27;35659:2;35529:219;;;;;35756:97;;35844:2;35840:7;35835:2;35828:5;35824:14;35820:28;35810:38;;35804:49;;;;35861:117;35930:24;35948:5;35930:24;;;35923:5;35920:35;35910:2;;35969:1;35966;35959:12;35910:2;35904:74;;35985:111;36051:21;36066:5;36051:21;;;36044:5;36041:32;36031:2;;36087:1;36084;36077:12;36031:2;36025:71;;36103:117;36172:24;36190:5;36172:24;;;36165:5;36162:35;36152:2;;36211:1;36208;36201:12;36152:2;36146:74;;36227:115;36295:23;36312:5;36295:23;;;36288:5;36285:34;36275:2;;36333:1;36330;36323:12;36275:2;36269:73;
Swarm Source
ipfs://542e9d2a6ea42000a33beb205ca0a6cfe9cc43840eaca99830d9814f630fd919
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.