Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0xaad6df579c348babf13c51a09b66ca639e098e911b20e81ceb9c3a0353b5cc9b | 24909336 | 411 days 16 hrs ago | Beethoven X: Deployer | Contract Creation | 0 FTM |
[ Download CSV Export ]
Contract Name:
CopperProxy
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import {TransferHelper} from "./TransferHelper.sol"; import {IERC20} from "./IERC20.sol"; import {Ownable} from "./Ownable.sol"; import {EnumerableSet} from "./EnumerableSet.sol"; interface LBPFactory { function create( string memory name, string memory symbol, address[] memory tokens, uint256[] memory weights, uint256 swapFeePercentage, address owner, bool swapEnabledOnStart ) external returns (address); } interface Vault { struct JoinPoolRequest { address[] assets; uint256[] maxAmountsIn; bytes userData; bool fromInternalBalance; } struct ExitPoolRequest { address[] assets; uint256[] minAmountsOut; bytes userData; bool toInternalBalance; } function joinPool( bytes32 poolId, address sender, address recipient, JoinPoolRequest memory request ) external; function exitPool( bytes32 poolId, address sender, address recipient, ExitPoolRequest memory request ) external; function getPoolTokens(bytes32 poolId) external view returns ( address[] memory tokens, uint256[] memory balances, uint256 lastChangeBlock ); } interface LBP { function updateWeightsGradually( uint256 startTime, uint256 endTime, uint256[] memory endWeights ) external; function setSwapEnabled(bool swapEnabled) external; function getPoolId() external returns (bytes32 poolID); } /// @title CopperProxy /// @notice This contract allows for simplified creation and management of Balancer LBPs /// It currently supports: /// - LBPs with 2 tokens /// - Withdrawl of the full liquidity at once /// - Charging a fee on the amount raised contract CopperProxy is Ownable { using EnumerableSet for EnumerableSet.AddressSet; struct PoolData { address owner; bool isCorrectOrder; uint256 fundTokenInputAmount; } mapping(address => PoolData) private _poolData; EnumerableSet.AddressSet private _pools; address public constant VAULT = address(0x20dd72Ed959b6147912C2e529F0a0C651c33c9ce); address public immutable _LBPFactoryAddress; uint256 public immutable _feeBPS; address public _feeRecipient; constructor( uint256 feeBPS, address feeRecipient, address LBPFactoryAddress ) { _feeBPS = feeBPS; _feeRecipient = feeRecipient; _LBPFactoryAddress = LBPFactoryAddress; } // Events event PoolCreated( address indexed pool, bytes32 poolId, string name, string symbol, address[] tokens, uint256[] weights, uint256 swapFeePercentage, address owner, bool swapEnabledOnStart ); event JoinedPool(address indexed pool, address[] tokens, uint256[] amounts, bytes userData); event GradualWeightUpdateScheduled(address indexed pool, uint256 startTime, uint256 endTime, uint256[] endWeights); event SwapEnabledSet(address indexed pool, bool swapEnabled); event TransferedPoolOwnership(address indexed pool, address previousOwner, address newOwner); event ExitedPool(address indexed pool, address[] tokens, uint256[] minAmountsOut, bytes userData); event TransferedFee(address indexed pool, address token, address feeRecipient, uint256 feeAmount); event TransferedToken(address indexed pool, address token, address to, uint256 amount); event ChangedFeeRecipient(address previousRecipient, address newRecipient); event Skimmed(address token, address to, uint256 balance); // Pool access control modifier onlyPoolOwner(address pool) { require(msg.sender == _poolData[pool].owner, "!owner"); _; } function isPool(address pool) external view returns (bool valid) { return _pools.contains(pool); } function poolCount() external view returns (uint256 count) { return _pools.length(); } function getPoolAt(uint256 index) external view returns (address pool) { return _pools.at(index); } function getPools() external view returns (address[] memory pools) { return _pools.values(); } function getPoolData(address pool) external view returns (PoolData memory poolData) { return _poolData[pool]; } function getBPTTokenBalance(address pool) external view returns (uint256 bptBalance) { return IERC20(pool).balanceOf(address(this)); } struct PoolConfig { string name; string symbol; address[] tokens; uint256[] amounts; uint256[] weights; uint256[] endWeights; bool isCorrectOrder; uint256 swapFeePercentage; bytes userData; uint256 startTime; uint256 endTime; } function createAuction(PoolConfig memory poolConfig) external returns (address) { // 1: deposit tokens and approve vault require(poolConfig.tokens.length == 2, "only two tokens"); TransferHelper.safeTransferFrom(poolConfig.tokens[0], msg.sender, address(this), poolConfig.amounts[0]); TransferHelper.safeTransferFrom(poolConfig.tokens[1], msg.sender, address(this), poolConfig.amounts[1]); TransferHelper.safeApprove(poolConfig.tokens[0], VAULT, poolConfig.amounts[0]); TransferHelper.safeApprove(poolConfig.tokens[1], VAULT, poolConfig.amounts[1]); // 2: pool creation address pool = LBPFactory(_LBPFactoryAddress).create( poolConfig.name, poolConfig.symbol, poolConfig.tokens, poolConfig.weights, poolConfig.swapFeePercentage, address(this), // owner set to this proxy false // swaps disabled on start ); bytes32 poolId = LBP(pool).getPoolId(); emit PoolCreated( pool, poolId, poolConfig.name, poolConfig.symbol, poolConfig.tokens, poolConfig.weights, poolConfig.swapFeePercentage, address(this), false ); // 3: store pool data _poolData[pool] = PoolData( msg.sender, poolConfig.isCorrectOrder, poolConfig.amounts[poolConfig.isCorrectOrder ? 0 : 1] ); require(_pools.add(pool), "exists already"); // 4: deposit tokens into pool Vault(VAULT).joinPool( poolId, address(this), // sender address(this), // recipient Vault.JoinPoolRequest(poolConfig.tokens, poolConfig.amounts, poolConfig.userData, false) ); emit JoinedPool(pool, poolConfig.tokens, poolConfig.amounts, poolConfig.userData); // 5: configure weights LBP(pool).updateWeightsGradually(poolConfig.startTime, poolConfig.endTime, poolConfig.endWeights); emit GradualWeightUpdateScheduled(pool, poolConfig.startTime, poolConfig.endTime, poolConfig.endWeights); return pool; } function setSwapEnabled(address pool, bool swapEnabled) external onlyPoolOwner(pool) { LBP(pool).setSwapEnabled(swapEnabled); emit SwapEnabledSet(pool, swapEnabled); } function transferPoolOwnership(address pool, address newOwner) external onlyPoolOwner(pool) { address previousOwner = _poolData[pool].owner; _poolData[pool].owner = newOwner; emit TransferedPoolOwnership(pool, previousOwner, newOwner); } enum ExitKind { EXACT_BPT_IN_FOR_ONE_TOKEN_OUT, EXACT_BPT_IN_FOR_TOKENS_OUT, BPT_IN_FOR_EXACT_TOKENS_OUT } /** * Exit a pool, burn the BPT token and transfer back the tokens. * If maxBPTTokenOut is passed as 0, the function will use the total balance available for the BPT token. * If maxBPTTokenOut is between 0 and the total of BPT available, that will be the amount used to burn. * maxBPTTokenOut must be grader or equal than 0 */ function exitPool(address pool, uint256[] calldata minAmountsOut, uint256 maxBPTTokenOut) external onlyPoolOwner(pool) { // 1. Get pool data bytes32 poolId = LBP(pool).getPoolId(); (address[] memory poolTokens, , ) = Vault(VAULT).getPoolTokens(poolId); require(poolTokens.length == minAmountsOut.length, "invalid input length"); PoolData memory poolData = _poolData[pool]; // 2. Specify the exact BPT amount to burn uint256 bptToBurn; uint256 bptBalance = IERC20(pool).balanceOf(address(this)); require(maxBPTTokenOut <= bptBalance, "Not enough BPT token amount"); require(bptBalance > 0, "invalid pool"); if (maxBPTTokenOut == 0 ) { bptToBurn = bptBalance; } else { bptToBurn = maxBPTTokenOut; } bytes memory userData = abi.encode(ExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT, bptToBurn); Vault.ExitPoolRequest memory exitRequest = Vault.ExitPoolRequest(poolTokens, minAmountsOut, userData, false); // 3. Exit pool and keep tokens in contract Vault(VAULT).exitPool(poolId, address(this), payable(address(this)), exitRequest); emit ExitedPool(pool, poolTokens, minAmountsOut, userData); // 4. Calculate and transfer fee to recipient address fundToken = poolTokens[poolData.isCorrectOrder ? 0 : 1]; uint256 fundTokenBalance = IERC20(fundToken).balanceOf(address(this)); if (fundTokenBalance > poolData.fundTokenInputAmount) { uint256 feeAmount = ((fundTokenBalance - poolData.fundTokenInputAmount) * _feeBPS) / 10_000; TransferHelper.safeTransfer(fundToken, _feeRecipient, feeAmount); emit TransferedFee(pool, fundToken, _feeRecipient, feeAmount); } // 5. Transfer to user uint256 firstTokenBalance = IERC20(poolTokens[0]).balanceOf(address(this)); TransferHelper.safeTransfer( poolTokens[0], msg.sender, firstTokenBalance ); emit TransferedToken(pool, poolTokens[0], msg.sender, firstTokenBalance); uint256 secondTokenBalance = IERC20(poolTokens[1]).balanceOf(address(this)); TransferHelper.safeTransfer( poolTokens[1], msg.sender, secondTokenBalance ); emit TransferedToken(pool, poolTokens[1], msg.sender, secondTokenBalance); } function changeFeeRecipient(address newRecipient) external onlyOwner { address previousFeeReciepient = _feeRecipient; _feeRecipient = newRecipient; emit ChangedFeeRecipient(previousFeeReciepient, newRecipient); } function skim(address token, address recipient) external onlyOwner { require(!_pools.contains(token), "can't skim LBP token"); uint256 balance = IERC20(token).balanceOf(address(this)); TransferHelper.safeTransfer(token, recipient, balance); emit Skimmed(token, recipient, balance); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"feeBPS","type":"uint256"},{"internalType":"address","name":"feeRecipient","type":"address"},{"internalType":"address","name":"LBPFactoryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousRecipient","type":"address"},{"indexed":false,"internalType":"address","name":"newRecipient","type":"address"}],"name":"ChangedFeeRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"}],"name":"ExitedPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"endWeights","type":"uint256[]"}],"name":"GradualWeightUpdateScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"indexed":false,"internalType":"bytes","name":"userData","type":"bytes"}],"name":"JoinedPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bytes32","name":"poolId","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"weights","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"bool","name":"swapEnabledOnStart","type":"bool"}],"name":"PoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Skimmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"swapEnabled","type":"bool"}],"name":"SwapEnabledSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"feeRecipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"TransferedFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"TransferedPoolOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferedToken","type":"event"},{"inputs":[],"name":"VAULT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_LBPFactoryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRecipient","type":"address"}],"name":"changeFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"weights","type":"uint256[]"},{"internalType":"uint256[]","name":"endWeights","type":"uint256[]"},{"internalType":"bool","name":"isCorrectOrder","type":"bool"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"internalType":"struct CopperProxy.PoolConfig","name":"poolConfig","type":"tuple"}],"name":"createAuction","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"uint256","name":"maxBPTTokenOut","type":"uint256"}],"name":"exitPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBPTTokenBalance","outputs":[{"internalType":"uint256","name":"bptBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPoolAt","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"isCorrectOrder","type":"bool"},{"internalType":"uint256","name":"fundTokenInputAmount","type":"uint256"}],"internalType":"struct CopperProxy.PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPool","outputs":[{"internalType":"bool","name":"valid","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"swapEnabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferPoolOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b506040516200275f3803806200275f8339810160408190526200003491620000e8565b6200003f336200007b565b60a092909252600480546001600160a01b0319166001600160a01b039290921691909117905560601b6001600160601b03191660805262000129565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000e357600080fd5b919050565b600080600060608486031215620000fe57600080fd5b835192506200011060208501620000cb565b91506200012060408501620000cb565b90509250925092565b60805160601c60a0516125ff62000160600039600081816102f1015261085601526000818161012b0152610d9201526125ff6000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063673a2a1f116100ad578063a342f23811610071578063a342f23814610321578063cac626bb14610334578063ee9ee0e414610347578063f2fde38b1461035a578063f525cb681461036d57600080fd5b8063673a2a1f146102ab578063712b772f146102c0578063715018a6146102d35780638da5cb5b146102db5780639c37ebb6146102ec57600080fd5b806323604071116100f45780632360407114610234578063411557d11461024757806346cf3e6e1461026257806351d48cea146102755780635b16ebb71461028857600080fd5b806301b1aff6146101265780630563cd7c1461016a57806305ea21831461017f57806313d21cdf14610192575b600080fd5b61014d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61017d610178366004611d28565b610375565b005b61014d61018d36600461206c565b610b4f565b6102076101a0366004611cb5565b6040805160608101825260008082526020820181905291810191909152506001600160a01b03908116600090815260016020818152604092839020835160608101855281549586168152600160a01b90950460ff1615159185019190915201549082015290565b6040805182516001600160a01b031681526020808401511515908201529181015190820152606001610161565b61017d610242366004611cb5565b610b62565b61014d7320dd72ed959b6147912c2e529f0a0c651c33c9ce81565b61014d610270366004611eef565b610bed565b61017d610283366004611db6565b6111a2565b61029b610296366004611cb5565b611282565b6040519015158152602001610161565b6102b361128f565b60405161016191906121c6565b61017d6102ce366004611cef565b6112a0565b61017d6113e0565b6000546001600160a01b031661014d565b6103137f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610161565b60045461014d906001600160a01b031681565b610313610342366004611cb5565b611416565b61017d610355366004611cef565b611490565b61017d610368366004611cb5565b61153a565b6103136115d5565b6001600160a01b0384811660009081526001602052604090205485911633146103b95760405162461bcd60e51b81526004016103b090612415565b60405180910390fd5b6000856001600160a01b03166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156103f657600080fd5b505af115801561040a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042e9190611ed6565b604051631f29a8cd60e31b8152600481018290529091506000907320dd72ed959b6147912c2e529f0a0c651c33c9ce9063f94d46689060240160006040518083038186803b15801561047f57600080fd5b505afa158015610493573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104bb9190810190611de4565b5050805190915085146105075760405162461bcd60e51b81526020600482015260146024820152730d2dcecc2d8d2c840d2dce0eae840d8cadccee8d60631b60448201526064016103b0565b6001600160a01b038781166000818152600160208181526040808420815160608101835281549788168152600160a01b90970460ff1615159287019290925291015484820152516370a0823160e01b8152306004820152909182916370a082319060240160206040518083038186803b15801561058357600080fd5b505afa158015610597573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bb9190611ed6565b90508087111561060d5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f7567682042505420746f6b656e20616d6f756e74000000000060448201526064016103b0565b6000811161064c5760405162461bcd60e51b815260206004820152600c60248201526b1a5b9d985b1a59081c1bdbdb60a21b60448201526064016103b0565b866106595780915061065d565b8691505b600060018360405160200161067392919061233c565b6040516020818303038152906040529050600060405180608001604052808781526020018c8c8080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050506020820185905260409182015251638bdb391360e01b81529091507320dd72ed959b6147912c2e529f0a0c651c33c9ce90638bdb391390610717908a90309081908790600401612288565b600060405180830381600087803b15801561073157600080fd5b505af1158015610745573d6000803e3d6000fd5b505050508b6001600160a01b03167ffbbb3d684cc731f4eff666c8534337f397ecf7937c1ed574f8626f6cb718cc01878d8d8660405161078894939291906121d9565b60405180910390a260008686602001516107a35760016107a6565b60005b60ff16815181106107b9576107b961257a565b60209081029190910101516040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a082319060240160206040518083038186803b15801561080957600080fd5b505afa15801561081d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108419190611ed6565b905086604001518111156109105760006127107f0000000000000000000000000000000000000000000000000000000000000000896040015184610885919061251d565b61088f91906124fe565b61089991906124dc565b6004549091506108b49084906001600160a01b0316836115e1565b8e6001600160a01b03167f52b4a48c36f647498ba38efeaed299eb5e0f7688e76359a58f55738ff7725af284600460009054906101000a90046001600160a01b031684604051610906939291906121a2565b60405180910390a2505b6000886000815181106109255761092561257a565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561097057600080fd5b505afa158015610984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a89190611ed6565b90506109cf896000815181106109c0576109c061257a565b602002602001015133836115e1565b8e6001600160a01b03167f235d80db0a4b8dc1e99bba791b835d938cbc8cb023a88fdaba36aafd2aa9b2768a600081518110610a0d57610a0d61257a565b60200260200101513384604051610a26939291906121a2565b60405180910390a2600089600181518110610a4357610a4361257a565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610a8e57600080fd5b505afa158015610aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac69190611ed6565b9050610ade8a6001815181106109c0576109c061257a565b8f6001600160a01b03167f235d80db0a4b8dc1e99bba791b835d938cbc8cb023a88fdaba36aafd2aa9b2768b600181518110610b1c57610b1c61257a565b60200260200101513384604051610b35939291906121a2565b60405180910390a250505050505050505050505050505050565b6000610b5c600283611712565b92915050565b6000546001600160a01b03163314610b8c5760405162461bcd60e51b81526004016103b0906123e0565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fc335ca37f71e695337f94e5078421114aee3f4c5d97e824efaf8578318e5e8c8910160405180910390a15050565b6000816040015151600214610c365760405162461bcd60e51b815260206004820152600f60248201526e6f6e6c792074776f20746f6b656e7360881b60448201526064016103b0565b610c7e8260400151600081518110610c5057610c5061257a565b602002602001015133308560600151600081518110610c7157610c7161257a565b6020026020010151611725565b610cb98260400151600181518110610c9857610c9861257a565b602002602001015133308560600151600181518110610c7157610c7161257a565b610d148260400151600081518110610cd357610cd361257a565b60200260200101517320dd72ed959b6147912c2e529f0a0c651c33c9ce8460600151600081518110610d0757610d0761257a565b602002602001015161185f565b610d628260400151600181518110610d2e57610d2e61257a565b60200260200101517320dd72ed959b6147912c2e529f0a0c651c33c9ce8460600151600181518110610d0757610d0761257a565b81516020830151604080850151608086015160e08701519251632367971960e01b81526000956001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001695632367971995610dcd959294919330908a90600401612368565b602060405180830381600087803b158015610de757600080fd5b505af1158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f9190611cd2565b90506000816001600160a01b03166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610e5e57600080fd5b505af1158015610e72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e969190611ed6565b9050816001600160a01b03167f2b416ce78f01c3304331a3a35005ee09bfb64c878f2be9849fc9909101bc61ac8286600001518760200151886040015189608001518a60e00151306000604051610ef49897969594939291906122ba565b60405180910390a26040518060600160405280336001600160a01b031681526020018560c001511515815260200185606001518660c00151610f37576001610f3a565b60005b60ff1681518110610f4d57610f4d61257a565b6020908102919091018101519091526001600160a01b038085166000908152600180845260409182902085518154958701511515600160a01b026001600160a81b03199096169416939093179390931782559290920151910155610fb2600283611987565b610fef5760405162461bcd60e51b815260206004820152600e60248201526d65786973747320616c726561647960901b60448201526064016103b0565b60408051608081018252858201518152606080870151602083015261010087015182840152600090820152905163172b958560e31b81527320dd72ed959b6147912c2e529f0a0c651c33c9ce9163b95cac289161105491859130918291600401612288565b600060405180830381600087803b15801561106e57600080fd5b505af1158015611082573d6000803e3d6000fd5b50505050816001600160a01b03167f5dcdc6c8b7b09c26d0c867e99f2b7389b69d982aa8f10b1373f84667a8f58b35856040015186606001518761010001516040516110d093929190612245565b60405180910390a2816001600160a01b0316633e5692058561012001518661014001518760a001516040518463ffffffff1660e01b815260040161111693929190612435565b600060405180830381600087803b15801561113057600080fd5b505af1158015611144573d6000803e3d6000fd5b50505050816001600160a01b03167f5b604c3eb0508fc702242270d353c7673f02b609e03862e244766785e39c278c8561012001518661014001518760a0015160405161119393929190612435565b60405180910390a25092915050565b6001600160a01b0382811660009081526001602052604090205483911633146111dd5760405162461bcd60e51b81526004016103b090612415565b604051633806be4b60e21b815282151560048201526001600160a01b0384169063e01af92c90602401600060405180830381600087803b15801561122057600080fd5b505af1158015611234573d6000803e3d6000fd5b50505050826001600160a01b03167fdc5bc5b27f91cbe9bad8b85e20c9519fb6d126629108f16d474af76579696ea983604051611275911515815260200190565b60405180910390a2505050565b6000610b5c60028361199c565b606061129b60026119be565b905090565b6000546001600160a01b031633146112ca5760405162461bcd60e51b81526004016103b0906123e0565b6112d560028361199c565b156113195760405162461bcd60e51b815260206004820152601460248201527331b0b713ba1039b5b4b690262128103a37b5b2b760611b60448201526064016103b0565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561135b57600080fd5b505afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190611ed6565b90506113a08383836115e1565b7f0cfb7d414a57e3fd35da9f4b61341e65026c225646228ba0262d9264f541c32e8383836040516113d3939291906121a2565b60405180910390a1505050565b6000546001600160a01b0316331461140a5760405162461bcd60e51b81526004016103b0906123e0565b61141460006119cb565b565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561145857600080fd5b505afa15801561146c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5c9190611ed6565b6001600160a01b0382811660009081526001602052604090205483911633146114cb5760405162461bcd60e51b81526004016103b090612415565b6001600160a01b0383811660008181526001602090815260409182902080548786166001600160a01b0319821681179092558351951680865291850152927f794fb907c01822765502a338368bdc2f31ef538f609dcc19be5629fee0cedcd8910160405180910390a250505050565b6000546001600160a01b031633146115645760405162461bcd60e51b81526004016103b0906123e0565b6001600160a01b0381166115c95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b0565b6115d2816119cb565b50565b600061129b6002611a1b565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161163d9190612186565b6000604051808303816000865af19150503d806000811461167a576040519150601f19603f3d011682016040523d82523d6000602084013e61167f565b606091505b50915091508180156116a95750805115806116a95750808060200190518101906116a99190611eb9565b61170b5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016103b0565b5050505050565b600061171e8383611a25565b9392505050565b600080856001600160a01b03166323b872dd86868660405160240161174c939291906121a2565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516117859190612186565b6000604051808303816000865af19150503d80600081146117c2576040519150601f19603f3d011682016040523d82523d6000602084013e6117c7565b606091505b50915091508180156117f15750805115806117f15750808060200190518101906117f19190611eb9565b6118575760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b60648201526084016103b0565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291516000928392908716916118bb9190612186565b6000604051808303816000865af19150503d80600081146118f8576040519150601f19603f3d011682016040523d82523d6000602084013e6118fd565b606091505b50915091508180156119275750805115806119275750808060200190518101906119279190611eb9565b61170b5760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657248656c7065723a3a73616665417070726f76653a2061707060448201526a1c9bdd994819985a5b195960aa1b60648201526084016103b0565b600061171e836001600160a01b038416611a4f565b6001600160a01b0381166000908152600183016020526040812054151561171e565b6060600061171e83611a9e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610b5c825490565b6000826000018281548110611a3c57611a3c61257a565b9060005260206000200154905092915050565b6000818152600183016020526040812054611a9657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b5c565b506000610b5c565b606081600001805480602002602001604051908101604052809291908181526020018280548015611aee57602002820191906000526020600020905b815481526020019060010190808311611ada575b50505050509050919050565b600082601f830112611b0b57600080fd5b81356020611b20611b1b836124b8565b612487565b80838252828201915082860187848660051b8901011115611b4057600080fd5b60005b85811015611b68578135611b56816125a6565b84529284019290840190600101611b43565b5090979650505050505050565b600082601f830112611b8657600080fd5b81356020611b96611b1b836124b8565b80838252828201915082860187848660051b8901011115611bb657600080fd5b60005b85811015611b6857813584529284019290840190600101611bb9565b600082601f830112611be657600080fd5b81516020611bf6611b1b836124b8565b80838252828201915082860187848660051b8901011115611c1657600080fd5b60005b85811015611b6857815184529284019290840190600101611c19565b8035611c40816125bb565b919050565b600082601f830112611c5657600080fd5b813567ffffffffffffffff811115611c7057611c70612590565b611c83601f8201601f1916602001612487565b818152846020838601011115611c9857600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611cc757600080fd5b813561171e816125a6565b600060208284031215611ce457600080fd5b815161171e816125a6565b60008060408385031215611d0257600080fd5b8235611d0d816125a6565b91506020830135611d1d816125a6565b809150509250929050565b60008060008060608587031215611d3e57600080fd5b8435611d49816125a6565b9350602085013567ffffffffffffffff80821115611d6657600080fd5b818701915087601f830112611d7a57600080fd5b813581811115611d8957600080fd5b8860208260051b8501011115611d9e57600080fd5b95986020929092019750949560400135945092505050565b60008060408385031215611dc957600080fd5b8235611dd4816125a6565b91506020830135611d1d816125bb565b600080600060608486031215611df957600080fd5b835167ffffffffffffffff80821115611e1157600080fd5b818601915086601f830112611e2557600080fd5b81516020611e35611b1b836124b8565b8083825282820191508286018b848660051b8901011115611e5557600080fd5b600096505b84871015611e81578051611e6d816125a6565b835260019690960195918301918301611e5a565b5091890151919750909350505080821115611e9b57600080fd5b50611ea886828701611bd5565b925050604084015190509250925092565b600060208284031215611ecb57600080fd5b815161171e816125bb565b600060208284031215611ee857600080fd5b5051919050565b600060208284031215611f0157600080fd5b813567ffffffffffffffff80821115611f1957600080fd5b908301906101608286031215611f2e57600080fd5b611f3661245d565b823582811115611f4557600080fd5b611f5187828601611c45565b825250602083013582811115611f6657600080fd5b611f7287828601611c45565b602083015250604083013582811115611f8a57600080fd5b611f9687828601611afa565b604083015250606083013582811115611fae57600080fd5b611fba87828601611b75565b606083015250608083013582811115611fd257600080fd5b611fde87828601611b75565b60808301525060a083013582811115611ff657600080fd5b61200287828601611b75565b60a08301525061201460c08401611c35565b60c082015260e083013560e0820152610100808401358381111561203757600080fd5b61204388828701611c45565b918301919091525061012083810135908201526101409283013592810192909252509392505050565b60006020828403121561207e57600080fd5b5035919050565b600081518084526020808501945080840160005b838110156120be5781516001600160a01b031687529582019590820190600101612099565b509495945050505050565b600081518084526020808501945080840160005b838110156120be578151875295820195908201906001016120dd565b60008151808452612111816020860160208601612534565b601f01601f19169290920160200192915050565b600081516080845261213a6080850182612085565b90506020830151848203602086015261215382826120c9565b9150506040830151848203604086015261216d82826120f9565b9150506060830151151560608501528091505092915050565b60008251612198818460208701612534565b9190910192915050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208152600061171e6020830184612085565b6060815260006121ec6060830187612085565b82810360208401528481526001600160fb1b0385111561220b57600080fd5b8460051b808760208401378082019150506020810160008152602084830301604085015261223981866120f9565b98975050505050505050565b6060815260006122586060830186612085565b828103602084015261226a81866120c9565b9050828103604084015261227e81856120f9565b9695505050505050565b8481526001600160a01b0384811660208301528316604082015260806060820181905260009061227e90830184612125565b60006101008a83528060208401526122d48184018b6120f9565b905082810360408401526122e8818a6120f9565b905082810360608401526122fc8189612085565b9050828103608084015261231081886120c9565b60a084019690965250506001600160a01b039290921660c0830152151560e09091015295945050505050565b604081016003841061235e57634e487b7160e01b600052602160045260246000fd5b9281526020015290565b60e08152600061237b60e083018a6120f9565b828103602084015261238d818a6120f9565b905082810360408401526123a18189612085565b905082810360608401526123b581886120c9565b608084019690965250506001600160a01b039290921660a0830152151560c090910152949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b83815282602082015260606040820152600061245460608301846120c9565b95945050505050565b604051610160810167ffffffffffffffff8111828210171561248157612481612590565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156124b0576124b0612590565b604052919050565b600067ffffffffffffffff8211156124d2576124d2612590565b5060051b60200190565b6000826124f957634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561251857612518612564565b500290565b60008282101561252f5761252f612564565b500390565b60005b8381101561254f578181015183820152602001612537565b8381111561255e576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146115d257600080fd5b80151581146115d257600080fdfea26469706673582212202f58ac5333d1c392d688ef78c77c75902e85eece10cb2d7d04b65816122fce3864736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000a1e849b1d6c2fd31c63eef7822e9e0632411ada70000000000000000000000002c774732c93ce393ec8125bda49fb3737ae6f473
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000a1e849b1d6c2fd31c63eef7822e9e0632411ada70000000000000000000000002c774732c93ce393ec8125bda49fb3737ae6f473
-----Decoded View---------------
Arg [0] : feeBPS (uint256): 200
Arg [1] : feeRecipient (address): 0xa1e849b1d6c2fd31c63eef7822e9e0632411ada7
Arg [2] : LBPFactoryAddress (address): 0x2c774732c93ce393ec8125bda49fb3737ae6f473
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [1] : 000000000000000000000000a1e849b1d6c2fd31c63eef7822e9e0632411ada7
Arg [2] : 0000000000000000000000002c774732c93ce393ec8125bda49fb3737ae6f473
Deployed ByteCode Sourcemap
1881:9250:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2280:43;;;;;;;;-1:-1:-1;;;;;11273:32:6;;;11255:51;;11243:2;11228:18;2280:43:1;;;;;;;;8138:2420;;;;;;:::i;:::-;;:::i;:::-;;4127:111;;;;;;:::i;:::-;;:::i;4356:123::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4457:15:1;;;;;;;:9;:15;;;;;;;;;4450:22;;;;;;;;;;;;;;-1:-1:-1;;;4450:22:1;;;;;;;;;;;;;;;;;;;;;4356:123;;;;;22767:13:6;;-1:-1:-1;;;;;22763:39:6;22745:58;;22873:4;22861:17;;;22855:24;22848:32;22841:40;22819:20;;;22812:70;22926:17;;;22920:24;22898:20;;;22891:54;22733:2;22718:18;4356:123:1;22549:402:6;10564:240:1;;;;;;:::i;:::-;;:::i;2191:83::-;;2231:42;2191:83;;4962:2210;;;;;;:::i;:::-;;:::i;7178:187::-;;;;;;:::i;:::-;;:::i;3907:110::-;;;;;;:::i;:::-;;:::i;:::-;;;14192:14:6;;14185:22;14167:41;;14155:2;14140:18;3907:110:1;14027:187:6;4244:106:1;;;:::i;:::-;;;;;;;:::i;10810:319::-;;;;;;:::i;:::-;;:::i;1598:92:4:-;;;:::i;966:85::-;1012:7;1038:6;-1:-1:-1;;;;;1038:6:4;966:85;;2329:32:1;;;;;;;;14365:25:6;;;14353:2;14338:18;2329:32:1;14219:177:6;2367:28:1;;;;;-1:-1:-1;;;;;2367:28:1;;;4485:146;;;;;;:::i;:::-;;:::i;7371:265::-;;;;;;:::i;:::-;;:::i;1839:189:4:-;;;;;;:::i;:::-;;:::i;4023:98:1:-;;;:::i;8138:2420::-;-1:-1:-1;;;;;3851:15:1;;;;;;;:9;:15;;;;;:21;:15;;:21;3837:10;:35;3829:54;;;;-1:-1:-1;;;3829:54:1;;;;;;;:::i;:::-;;;;;;;;;8295:14:::1;8316:4;-1:-1:-1::0;;;;;8312:19:1::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8379:34;::::0;-1:-1:-1;;;8379:34:1;;::::1;::::0;::::1;14365:25:6::0;;;8295:38:1;;-1:-1:-1;8344:27:1::1;::::0;2231:42:::1;::::0;8379:26:::1;::::0;14338:18:6;;8379:34:1::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;8379:34:1::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;8431:17:1;;8343:70;;-1:-1:-1;8431:41:1;::::1;8423:74;;;::::0;-1:-1:-1;;;8423:74:1;;19148:2:6;8423:74:1::1;::::0;::::1;19130:21:6::0;19187:2;19167:18;;;19160:30;-1:-1:-1;;;19206:18:6;;;19199:50;19266:18;;8423:74:1::1;18946:344:6::0;8423:74:1::1;-1:-1:-1::0;;;;;8534:15:1;;::::1;8507:24;8534:15:::0;;;:9:::1;:15;::::0;;;;;;;8507:42;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;8507:42:1;;::::1;;;;;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;8659:37;-1:-1:-1;;;8659:37:1;;8690:4:::1;8659:37;::::0;::::1;11255:51:6::0;8507:24:1;;;;8659:22:::1;::::0;11228:18:6;;8659:37:1::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8638:58;;8732:10;8714:14;:28;;8706:68;;;::::0;-1:-1:-1;;;8706:68:1;;21371:2:6;8706:68:1::1;::::0;::::1;21353:21:6::0;21410:2;21390:18;;;21383:30;21449:29;21429:18;;;21422:57;21496:18;;8706:68:1::1;21169:351:6::0;8706:68:1::1;8805:1;8792:10;:14;8784:39;;;::::0;-1:-1:-1;;;8784:39:1;;22061:2:6;8784:39:1::1;::::0;::::1;22043:21:6::0;22100:2;22080:18;;;22073:30;-1:-1:-1;;;22119:18:6;;;22112:42;22171:18;;8784:39:1::1;21859:336:6::0;8784:39:1::1;8837:19:::0;8833:130:::1;;8885:10;8873:22;;8833:130;;;8938:14;8926:26;;8833:130;8973:21;9008:36;9046:9;8997:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8973:83;;9066:40;9109:65;;;;;;;;9131:10;9109:65;;;;9143:13;;9109:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;9109:65:1;;;-1:-1:-1;;;9109:65:1::1;::::0;::::1;::::0;;;;;;;;9237:81;-1:-1:-1;;;9237:81:1;;9066:108;;-1:-1:-1;2231:42:1::1;::::0;9237:21:::1;::::0;:81:::1;::::0;9259:6;;9275:4:::1;::::0;;;9066:108;;9237:81:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9344:4;-1:-1:-1::0;;;;;9333:53:1::1;;9350:10;9362:13;;9377:8;9333:53;;;;;;;;;:::i;:::-;;;;;;;;9451:17;9471:10;9482:8;:23;;;:31;;9512:1;9482:31;;;9508:1;9482:31;9471:43;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;9551:42:::1;::::0;-1:-1:-1;;;9551:42:1;;9587:4:::1;9551:42;::::0;::::1;11255:51:6::0;9471:43:1;;-1:-1:-1;9524:24:1::1;::::0;-1:-1:-1;;;;;9551:27:1;::::1;::::0;::::1;::::0;11228:18:6;;9551:42:1::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9524:69;;9626:8;:29;;;9607:16;:48;9603:323;;;9671:17;9756:6;9745:7;9712:8;:29;;;9693:16;:48;;;;:::i;:::-;9692:60;;;;:::i;:::-;9691:71;;;;:::i;:::-;9815:13;::::0;9671:91;;-1:-1:-1;9776:64:1::1;::::0;9804:9;;-1:-1:-1;;;;;9815:13:1::1;9671:91:::0;9776:27:::1;:64::i;:::-;9873:4;-1:-1:-1::0;;;;;9859:56:1::1;;9879:9;9890:13;;;;;;;;;-1:-1:-1::0;;;;;9890:13:1::1;9905:9;9859:56;;;;;;;;:::i;:::-;;;;;;;;9657:269;9603:323;9967:25;10002:10;10013:1;10002:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;9995:46:::1;::::0;-1:-1:-1;;;9995:46:1;;10035:4:::1;9995:46;::::0;::::1;11255:51:6::0;-1:-1:-1;;;;;9995:31:1;;::::1;::::0;::::1;::::0;11228:18:6;;9995:46:1::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9967:74;;10051:119;10092:10;10103:1;10092:13;;;;;;;;:::i;:::-;;;;;;;10119:10;10143:17;10051:27;:119::i;:::-;10201:4;-1:-1:-1::0;;;;;10185:67:1::1;;10207:10;10218:1;10207:13;;;;;;;;:::i;:::-;;;;;;;10222:10;10234:17;10185:67;;;;;;;;:::i;:::-;;;;;;;;10263:26;10299:10;10310:1;10299:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;10292:46:::1;::::0;-1:-1:-1;;;10292:46:1;;10332:4:::1;10292:46;::::0;::::1;11255:51:6::0;-1:-1:-1;;;;;10292:31:1;;::::1;::::0;::::1;::::0;11228:18:6;;10292:46:1::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10263:75;;10348:120;10389:10;10400:1;10389:13;;;;;;;;:::i;10348:120::-;10499:4;-1:-1:-1::0;;;;;10483:68:1::1;;10505:10;10516:1;10505:13;;;;;;;;:::i;:::-;;;;;;;10520:10;10532:18;10483:68;;;;;;;;:::i;:::-;;;;;;;;8257:2301;;;;;;;;;;;8138:2420:::0;;;;;:::o;4127:111::-;4184:12;4215:16;:6;4225:5;4215:9;:16::i;:::-;4208:23;4127:111;-1:-1:-1;;4127:111:1:o;10564:240::-;1012:7:4;1038:6;-1:-1:-1;;;;;1038:6:4;666:10:0;1178:23:4;1170:68;;;;-1:-1:-1;;;1170:68:4;;;;;;;:::i;:::-;10675:13:1::1;::::0;;-1:-1:-1;;;;;10698:28:1;;::::1;-1:-1:-1::0;;;;;;10698:28:1;::::1;::::0;::::1;::::0;;;10741:56:::1;::::0;;10675:13;;;::::1;11529:34:6::0;;;11594:2;11579:18;;11572:43;;;;10741:56:1::1;::::0;11464:18:6;10741:56:1::1;;;;;;;10633:171;10564:240:::0;:::o;4962:2210::-;5033:7;5107:10;:17;;;:24;5135:1;5107:29;5099:57;;;;-1:-1:-1;;;5099:57:1;;20201:2:6;5099:57:1;;;20183:21:6;20240:2;20220:18;;;20213:30;-1:-1:-1;;;20259:18:6;;;20252:45;20314:18;;5099:57:1;19999:339:6;5099:57:1;5166:103;5198:10;:17;;;5216:1;5198:20;;;;;;;;:::i;:::-;;;;;;;5220:10;5240:4;5247:10;:18;;;5266:1;5247:21;;;;;;;;:::i;:::-;;;;;;;5166:31;:103::i;:::-;5279;5311:10;:17;;;5329:1;5311:20;;;;;;;;:::i;:::-;;;;;;;5333:10;5353:4;5360:10;:18;;;5379:1;5360:21;;;;;;;;:::i;5279:103::-;5392:78;5419:10;:17;;;5437:1;5419:20;;;;;;;;:::i;:::-;;;;;;;2231:42;5448:10;:18;;;5467:1;5448:21;;;;;;;;:::i;:::-;;;;;;;5392:26;:78::i;:::-;5480;5507:10;:17;;;5525:1;5507:20;;;;;;;;:::i;:::-;;;;;;;2231:42;5536:10;:18;;;5555:1;5536:21;;;;;;;;:::i;5480:78::-;5663:15;;5692:17;;;;5723;;;;;5754:18;;;;5786:28;;;;5612:312;;-1:-1:-1;;;5612:312:1;;5597:12;;-1:-1:-1;;;;;5623:18:1;5612:37;;;;:312;;5663:15;;5692:17;;5836:4;;5597:12;;5612:312;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5597:327;;5935:14;5956:4;-1:-1:-1;;;;;5952:19:1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5935:38;;6013:4;-1:-1:-1;;;;;5988:270:1;;6031:6;6051:10;:15;;;6080:10;:17;;;6111:10;:17;;;6142:10;:18;;;6174:10;:28;;;6224:4;6243:5;5988:270;;;;;;;;;;;;;:::i;:::-;;;;;;;;6317:148;;;;;;;;6339:10;-1:-1:-1;;;;;6317:148:1;;;;;6363:10;:25;;;6317:148;;;;;;6402:10;:18;;;6421:10;:25;;;:33;;6453:1;6421:33;;;6449:1;6421:33;6402:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;6317:148;;;-1:-1:-1;;;;;6299:15:1;;;;;;;:9;:15;;;;;;;;:166;;;;;;;;;;-1:-1:-1;;;6299:166:1;-1:-1:-1;;;;;;6299:166:1;;;;;;;;;;;;;;;;;;;;;;;6483:16;:6;6309:4;6483:10;:16::i;:::-;6475:43;;;;-1:-1:-1;;;6475:43:1;;19858:2:6;6475:43:1;;;19840:21:6;19897:2;19877:18;;;19870:30;-1:-1:-1;;;19916:18:6;;;19909:44;19970:18;;6475:43:1;19656:338:6;6475:43:1;6700:88;;;;;;;;6722:17;;;;6700:88;;6741:18;;;;;6700:88;;;;6761:19;;;;6700:88;;;;-1:-1:-1;6700:88:1;;;;6568:230;;-1:-1:-1;;;6568:230:1;;2231:42;;6568:21;;:230;;6603:6;;6631:4;;;;6568:230;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6824:4;-1:-1:-1;;;;;6813:76:1;;6830:10;:17;;;6849:10;:18;;;6869:10;:19;;;6813:76;;;;;;;;:::i;:::-;;;;;;;;6936:4;-1:-1:-1;;;;;6932:32:1;;6965:10;:20;;;6987:10;:18;;;7007:10;:21;;;6932:97;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7073:4;-1:-1:-1;;;;;7044:99:1;;7079:10;:20;;;7101:10;:18;;;7121:10;:21;;;7044:99;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;7161:4:1;4962:2210;-1:-1:-1;;4962:2210:1:o;7178:187::-;-1:-1:-1;;;;;3851:15:1;;;;;;;:9;:15;;;;;:21;:15;;:21;3837:10;:35;3829:54;;;;-1:-1:-1;;;3829:54:1;;;;;;;:::i;:::-;7273:37:::1;::::0;-1:-1:-1;;;7273:37:1;;14192:14:6;;14185:22;7273:37:1::1;::::0;::::1;14167:41:6::0;-1:-1:-1;;;;;7273:24:1;::::1;::::0;::::1;::::0;14140:18:6;;7273:37:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7340:4;-1:-1:-1::0;;;;;7325:33:1::1;;7346:11;7325:33;;;;14192:14:6::0;14185:22;14167:41;;14155:2;14140:18;;14027:187;7325:33:1::1;;;;;;;;7178:187:::0;;;:::o;3907:110::-;3960:10;3989:21;:6;4005:4;3989:15;:21::i;4244:106::-;4287:22;4328:15;:6;:13;:15::i;:::-;4321:22;;4244:106;:::o;10810:319::-;1012:7:4;1038:6;-1:-1:-1;;;;;1038:6:4;666:10:0;1178:23:4;1170:68;;;;-1:-1:-1;;;1170:68:4;;;;;;;:::i;:::-;10896:22:1::1;:6;10912:5:::0;10896:15:::1;:22::i;:::-;10895:23;10887:56;;;::::0;-1:-1:-1;;;10887:56:1;;22402:2:6;10887:56:1::1;::::0;::::1;22384:21:6::0;22441:2;22421:18;;;22414:30;-1:-1:-1;;;22460:18:6;;;22453:50;22520:18;;10887:56:1::1;22200:344:6::0;10887:56:1::1;10971:38;::::0;-1:-1:-1;;;10971:38:1;;11003:4:::1;10971:38;::::0;::::1;11255:51:6::0;10953:15:1::1;::::0;-1:-1:-1;;;;;10971:23:1;::::1;::::0;::::1;::::0;11228:18:6;;10971:38:1::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10953:56;;11019:54;11047:5;11054:9;11065:7;11019:27;:54::i;:::-;11088:34;11096:5;11103:9;11114:7;11088:34;;;;;;;;:::i;:::-;;;;;;;;10877:252;10810:319:::0;;:::o;1598:92:4:-;1012:7;1038:6;-1:-1:-1;;;;;1038:6:4;666:10:0;1178:23:4;1170:68;;;;-1:-1:-1;;;1170:68:4;;;;;;;:::i;:::-;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;4485:146:1:-;4587:37;;-1:-1:-1;;;4587:37:1;;4618:4;4587:37;;;11255:51:6;4550:18:1;;-1:-1:-1;;;;;4587:22:1;;;;;11228:18:6;;4587:37:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7371:265::-;-1:-1:-1;;;;;3851:15:1;;;;;;;:9;:15;;;;;:21;:15;;:21;3837:10;:35;3829:54;;;;-1:-1:-1;;;3829:54:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;7497:15:1;;::::1;7473:21;7497:15:::0;;;:9:::1;:15;::::0;;;;;;;;:21;;7528:32;;::::1;-1:-1:-1::0;;;;;;7528:32:1;::::1;::::0;::::1;::::0;;;7575:54;;7497:21;::::1;11529:34:6::0;;;11579:18;;;11572:43;7497:21:1;7575:54:::1;::::0;11464:18:6;7575:54:1::1;;;;;;;7463:173;7371:265:::0;;;:::o;1839:189:4:-;1012:7;1038:6;-1:-1:-1;;;;;1038:6:4;666:10:0;1178:23:4;1170:68;;;;-1:-1:-1;;;1170:68:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;1927:22:4;::::1;1919:73;;;::::0;-1:-1:-1;;;1919:73:4;;18323:2:6;1919:73:4::1;::::0;::::1;18305:21:6::0;18362:2;18342:18;;;18335:30;18401:34;18381:18;;;18374:62;-1:-1:-1;;;18452:18:6;;;18445:36;18498:19;;1919:73:4::1;18121:402:6::0;1919:73:4::1;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;4023:98:1:-;4067:13;4099:15;:6;:13;:15::i;652:438:5:-;878:45;;;-1:-1:-1;;;;;12198:32:6;;;878:45:5;;;12180:51:6;12247:18;;;;12240:34;;;878:45:5;;;;;;;;;;12153:18:6;;;;878:45:5;;;;;;;-1:-1:-1;;;;;878:45:5;-1:-1:-1;;;878:45:5;;;867:57;;-1:-1:-1;;;;867:10:5;;;;:57;;878:45;867:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;831:93;;;;955:7;:57;;;;-1:-1:-1;967:11:5;;:16;;:44;;;998:4;987:24;;;;;;;;;;;;:::i;:::-;934:149;;;;-1:-1:-1;;;934:149:5;;20957:2:6;934:149:5;;;20939:21:6;20996:2;20976:18;;;20969:30;21035:34;21015:18;;;21008:62;-1:-1:-1;;;21086:18:6;;;21079:43;21139:19;;934:149:5;20755:409:6;934:149:5;755:335;;652:438;;;:::o;8803:156:2:-;8877:7;8927:22;8931:3;8943:5;8927:3;:22::i;:::-;8919:31;8803:156;-1:-1:-1;;;8803:156:2:o;1096:486:5:-;1314:12;1328:17;1349:5;-1:-1:-1;;;;;1349:10:5;1383;1395:4;1401:2;1405:5;1360:51;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1360:51:5;;;;;;;;;;;1349:63;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1313:99;;;;1443:7;:57;;;;-1:-1:-1;1455:11:5;;:16;;:44;;;1486:4;1475:24;;;;;;;;;;;;:::i;:::-;1422:153;;;;-1:-1:-1;;;1422:153:5;;18730:2:6;1422:153:5;;;18712:21:6;18769:2;18749:18;;;18742:30;18808:34;18788:18;;;18781:62;-1:-1:-1;;;18859:18:6;;;18852:47;18916:19;;1422:153:5;18528:413:6;1422:153:5;1225:357;;1096:486;;;;:::o;212:434::-;436:45;;;-1:-1:-1;;;;;12198:32:6;;;436:45:5;;;12180:51:6;12247:18;;;;12240:34;;;436:45:5;;;;;;;;;;12153:18:6;;;;436:45:5;;;;;;;-1:-1:-1;;;;;436:45:5;-1:-1:-1;;;436:45:5;;;425:57;;-1:-1:-1;;;;425:10:5;;;;:57;;436:45;425:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;389:93;;;;513:7;:57;;;;-1:-1:-1;525:11:5;;:16;;:44;;;556:4;545:24;;;;;;;;;;;;:::i;:::-;492:147;;;;-1:-1:-1;;;492:147:5;;20545:2:6;492:147:5;;;20527:21:6;20584:2;20564:18;;;20557:30;20623:34;20603:18;;;20596:62;-1:-1:-1;;;20674:18:6;;;20667:41;20725:19;;492:147:5;20343:407:6;7545:150:2;7615:4;7638:50;7643:3;-1:-1:-1;;;;;7663:23:2;;7638:4;:50::i;8100:165::-;-1:-1:-1;;;;;8233:23:2;;8180:4;3767:19;;;:12;;;:19;;;;;;:24;;8203:55;3671:127;9499:257;9562:16;9590:22;9615:19;9623:3;9615:7;:19::i;2034:169:4:-;2089:16;2108:6;;-1:-1:-1;;;;;2124:17:4;;;-1:-1:-1;;;;;;2124:17:4;;;;;;2156:40;;2108:6;;;;;;;2156:40;;2089:16;2156:40;2079:124;2034:169;:::o;8346:115:2:-;8409:7;8435:19;8443:3;3961:18;;3879:107;4328:118;4395:7;4421:3;:11;;4433:5;4421:18;;;;;;;;:::i;:::-;;;;;;;;;4414:25;;4328:118;;;;:::o;1630:404::-;1693:4;3767:19;;;:12;;;:19;;;;;;1709:319;;-1:-1:-1;1751:23:2;;;;;;;;:11;:23;;;;;;;;;;;;;1931:18;;1909:19;;;:12;;;:19;;;;;;:40;;;;1963:11;;1709:319;-1:-1:-1;2012:5:2;2005:12;;4986:109;5042:16;5077:3;:11;;5070:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4986:109;;;:::o;14:748:6:-;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:238;509:2;506:1;503:9;495:238;;;580:3;567:17;597:31;622:5;597:31;:::i;:::-;641:18;;679:12;;;;711;;;;527:1;520:9;495:238;;;-1:-1:-1;751:5:6;;14:748;-1:-1:-1;;;;;;;14:748:6:o;767:673::-;821:5;874:3;867:4;859:6;855:17;851:27;841:55;;892:1;889;882:12;841:55;928:6;915:20;954:4;978:60;994:43;1034:2;994:43;:::i;978:60::-;1060:3;1084:2;1079:3;1072:15;1112:2;1107:3;1103:12;1096:19;;1147:2;1139:6;1135:15;1199:3;1194:2;1188;1185:1;1181:10;1173:6;1169:23;1165:32;1162:41;1159:61;;;1216:1;1213;1206:12;1159:61;1238:1;1248:163;1262:2;1259:1;1256:9;1248:163;;;1319:17;;1307:30;;1357:12;;;;1389;;;;1280:1;1273:9;1248:163;;1445:670;1510:5;1563:3;1556:4;1548:6;1544:17;1540:27;1530:55;;1581:1;1578;1571:12;1530:55;1610:6;1604:13;1636:4;1660:60;1676:43;1716:2;1676:43;:::i;1660:60::-;1742:3;1766:2;1761:3;1754:15;1794:2;1789:3;1785:12;1778:19;;1829:2;1821:6;1817:15;1881:3;1876:2;1870;1867:1;1863:10;1855:6;1851:23;1847:32;1844:41;1841:61;;;1898:1;1895;1888:12;1841:61;1920:1;1930:156;1944:2;1941:1;1938:9;1930:156;;;2001:10;;1989:23;;2032:12;;;;2064;;;;1962:1;1955:9;1930:156;;2120:128;2185:20;;2214:28;2185:20;2214:28;:::i;:::-;2120:128;;;:::o;2253:530::-;2295:5;2348:3;2341:4;2333:6;2329:17;2325:27;2315:55;;2366:1;2363;2356:12;2315:55;2402:6;2389:20;2428:18;2424:2;2421:26;2418:52;;;2450:18;;:::i;:::-;2494:55;2537:2;2518:13;;-1:-1:-1;;2514:27:6;2543:4;2510:38;2494:55;:::i;:::-;2574:2;2565:7;2558:19;2620:3;2613:4;2608:2;2600:6;2596:15;2592:26;2589:35;2586:55;;;2637:1;2634;2627:12;2586:55;2702:2;2695:4;2687:6;2683:17;2676:4;2667:7;2663:18;2650:55;2750:1;2725:16;;;2743:4;2721:27;2714:38;;;;2729:7;2253:530;-1:-1:-1;;;2253:530:6:o;2788:247::-;2847:6;2900:2;2888:9;2879:7;2875:23;2871:32;2868:52;;;2916:1;2913;2906:12;2868:52;2955:9;2942:23;2974:31;2999:5;2974:31;:::i;3040:251::-;3110:6;3163:2;3151:9;3142:7;3138:23;3134:32;3131:52;;;3179:1;3176;3169:12;3131:52;3211:9;3205:16;3230:31;3255:5;3230:31;:::i;3296:388::-;3364:6;3372;3425:2;3413:9;3404:7;3400:23;3396:32;3393:52;;;3441:1;3438;3431:12;3393:52;3480:9;3467:23;3499:31;3524:5;3499:31;:::i;:::-;3549:5;-1:-1:-1;3606:2:6;3591:18;;3578:32;3619:33;3578:32;3619:33;:::i;:::-;3671:7;3661:17;;;3296:388;;;;;:::o;3689:818::-;3793:6;3801;3809;3817;3870:2;3858:9;3849:7;3845:23;3841:32;3838:52;;;3886:1;3883;3876:12;3838:52;3925:9;3912:23;3944:31;3969:5;3944:31;:::i;:::-;3994:5;-1:-1:-1;4050:2:6;4035:18;;4022:32;4073:18;4103:14;;;4100:34;;;4130:1;4127;4120:12;4100:34;4168:6;4157:9;4153:22;4143:32;;4213:7;4206:4;4202:2;4198:13;4194:27;4184:55;;4235:1;4232;4225:12;4184:55;4275:2;4262:16;4301:2;4293:6;4290:14;4287:34;;;4317:1;4314;4307:12;4287:34;4370:7;4365:2;4355:6;4352:1;4348:14;4344:2;4340:23;4336:32;4333:45;4330:65;;;4391:1;4388;4381:12;4330:65;3689:818;;4422:2;4414:11;;;;;-1:-1:-1;4444:6:6;;4497:2;4482:18;4469:32;;-1:-1:-1;3689:818:6;-1:-1:-1;;;3689:818:6:o;4512:382::-;4577:6;4585;4638:2;4626:9;4617:7;4613:23;4609:32;4606:52;;;4654:1;4651;4644:12;4606:52;4693:9;4680:23;4712:31;4737:5;4712:31;:::i;:::-;4762:5;-1:-1:-1;4819:2:6;4804:18;;4791:32;4832:30;4791:32;4832:30;:::i;4899:1281::-;5037:6;5045;5053;5106:2;5094:9;5085:7;5081:23;5077:32;5074:52;;;5122:1;5119;5112:12;5074:52;5155:9;5149:16;5184:18;5225:2;5217:6;5214:14;5211:34;;;5241:1;5238;5231:12;5211:34;5279:6;5268:9;5264:22;5254:32;;5324:7;5317:4;5313:2;5309:13;5305:27;5295:55;;5346:1;5343;5336:12;5295:55;5375:2;5369:9;5397:4;5421:60;5437:43;5477:2;5437:43;:::i;5421:60::-;5503:3;5527:2;5522:3;5515:15;5555:2;5550:3;5546:12;5539:19;;5586:2;5582;5578:11;5634:7;5629:2;5623;5620:1;5616:10;5612:2;5608:19;5604:28;5601:41;5598:61;;;5655:1;5652;5645:12;5598:61;5677:1;5668:10;;5687:231;5701:2;5698:1;5695:9;5687:231;;;5765:3;5759:10;5782:31;5807:5;5782:31;:::i;:::-;5826:18;;5719:1;5712:9;;;;;5864:12;;;;5896;;5687:231;;;-1:-1:-1;5973:18:6;;;5967:25;5937:5;;-1:-1:-1;5967:25:6;;-1:-1:-1;;;6004:16:6;;;6001:36;;;6033:1;6030;6023:12;6001:36;;6056:74;6122:7;6111:8;6100:9;6096:24;6056:74;:::i;:::-;6046:84;;;6170:2;6159:9;6155:18;6149:25;6139:35;;4899:1281;;;;;:::o;6185:245::-;6252:6;6305:2;6293:9;6284:7;6280:23;6276:32;6273:52;;;6321:1;6318;6311:12;6273:52;6353:9;6347:16;6372:28;6394:5;6372:28;:::i;6435:184::-;6505:6;6558:2;6546:9;6537:7;6533:23;6529:32;6526:52;;;6574:1;6571;6564:12;6526:52;-1:-1:-1;6597:16:6;;6435:184;-1:-1:-1;6435:184:6:o;6624:2001::-;6710:6;6763:2;6751:9;6742:7;6738:23;6734:32;6731:52;;;6779:1;6776;6769:12;6731:52;6819:9;6806:23;6848:18;6889:2;6881:6;6878:14;6875:34;;;6905:1;6902;6895:12;6875:34;6928:22;;;;6984:6;6966:16;;;6962:29;6959:49;;;7004:1;7001;6994:12;6959:49;7030:22;;:::i;:::-;7090:2;7077:16;7118:2;7108:8;7105:16;7102:36;;;7134:1;7131;7124:12;7102:36;7161:44;7197:7;7186:8;7182:2;7178:17;7161:44;:::i;:::-;7154:5;7147:59;;7252:2;7248;7244:11;7231:25;7281:2;7271:8;7268:16;7265:36;;;7297:1;7294;7287:12;7265:36;7333:44;7369:7;7358:8;7354:2;7350:17;7333:44;:::i;:::-;7328:2;7321:5;7317:14;7310:68;;7424:2;7420;7416:11;7403:25;7453:2;7443:8;7440:16;7437:36;;;7469:1;7466;7459:12;7437:36;7505:56;7553:7;7542:8;7538:2;7534:17;7505:56;:::i;:::-;7500:2;7493:5;7489:14;7482:80;;7608:2;7604;7600:11;7587:25;7637:2;7627:8;7624:16;7621:36;;;7653:1;7650;7643:12;7621:36;7689:56;7737:7;7726:8;7722:2;7718:17;7689:56;:::i;:::-;7684:2;7677:5;7673:14;7666:80;;7792:3;7788:2;7784:12;7771:26;7822:2;7812:8;7809:16;7806:36;;;7838:1;7835;7828:12;7806:36;7875:56;7923:7;7912:8;7908:2;7904:17;7875:56;:::i;:::-;7869:3;7862:5;7858:15;7851:81;;7978:3;7974:2;7970:12;7957:26;8008:2;7998:8;7995:16;7992:36;;;8024:1;8021;8014:12;7992:36;8061:56;8109:7;8098:8;8094:2;8090:17;8061:56;:::i;:::-;8055:3;8048:5;8044:15;8037:81;;8151:29;8175:3;8171:2;8167:12;8151:29;:::i;:::-;8145:3;8138:5;8134:15;8127:54;8235:3;8231:2;8227:12;8214:26;8208:3;8201:5;8197:15;8190:51;8260:3;8309:2;8305;8301:11;8288:25;8338:2;8328:8;8325:16;8322:36;;;8354:1;8351;8344:12;8322:36;8390:44;8426:7;8415:8;8411:2;8407:17;8390:44;:::i;:::-;8374:14;;;8367:68;;;;-1:-1:-1;8454:3:6;8502:11;;;8489:25;8473:14;;;8466:49;8534:3;8582:11;;;8569:25;8553:14;;;8546:49;;;;-1:-1:-1;8378:5:6;6624:2001;-1:-1:-1;;;6624:2001:6:o;8630:180::-;8689:6;8742:2;8730:9;8721:7;8717:23;8713:32;8710:52;;;8758:1;8755;8748:12;8710:52;-1:-1:-1;8781:23:6;;8630:180;-1:-1:-1;8630:180:6:o;9004:461::-;9057:3;9095:5;9089:12;9122:6;9117:3;9110:19;9148:4;9177:2;9172:3;9168:12;9161:19;;9214:2;9207:5;9203:14;9235:1;9245:195;9259:6;9256:1;9253:13;9245:195;;;9324:13;;-1:-1:-1;;;;;9320:39:6;9308:52;;9380:12;;;;9415:15;;;;9356:1;9274:9;9245:195;;;-1:-1:-1;9456:3:6;;9004:461;-1:-1:-1;;;;;9004:461:6:o;9470:435::-;9523:3;9561:5;9555:12;9588:6;9583:3;9576:19;9614:4;9643:2;9638:3;9634:12;9627:19;;9680:2;9673:5;9669:14;9701:1;9711:169;9725:6;9722:1;9719:13;9711:169;;;9786:13;;9774:26;;9820:12;;;;9855:15;;;;9747:1;9740:9;9711:169;;9910:257;9951:3;9989:5;9983:12;10016:6;10011:3;10004:19;10032:63;10088:6;10081:4;10076:3;10072:14;10065:4;10058:5;10054:16;10032:63;:::i;:::-;10149:2;10128:15;-1:-1:-1;;10124:29:6;10115:39;;;;10156:4;10111:50;;9910:257;-1:-1:-1;;9910:257:6:o;10172:653::-;10230:3;10274:5;10268:12;10301:4;10296:3;10289:17;10327:58;10379:4;10374:3;10370:14;10356:12;10327:58;:::i;:::-;10315:70;;10433:4;10426:5;10422:16;10416:23;10481:3;10475:4;10471:14;10464:4;10459:3;10455:14;10448:38;10509:50;10554:4;10538:14;10509:50;:::i;:::-;10495:64;;;10607:4;10600:5;10596:16;10590:23;10657:3;10649:6;10645:16;10638:4;10633:3;10629:14;10622:40;10685;10718:6;10702:14;10685:40;:::i;:::-;10671:54;;;10788:4;10781:5;10777:16;10771:23;10764:31;10757:39;10750:4;10745:3;10741:14;10734:63;10813:6;10806:13;;;10172:653;;;;:::o;10830:274::-;10959:3;10997:6;10991:13;11013:53;11059:6;11054:3;11047:4;11039:6;11035:17;11013:53;:::i;:::-;11082:16;;;;;10830:274;-1:-1:-1;;10830:274:6:o;11626:375::-;-1:-1:-1;;;;;11884:15:6;;;11866:34;;11936:15;;;;11931:2;11916:18;;11909:43;11983:2;11968:18;;11961:34;;;;11816:2;11801:18;;11626:375::o;12285:261::-;12464:2;12453:9;12446:21;12427:4;12484:56;12536:2;12525:9;12521:18;12513:6;12484:56;:::i;12551:841::-;12864:2;12853:9;12846:21;12827:4;12890:56;12942:2;12931:9;12927:18;12919:6;12890:56;:::i;:::-;12982:22;;;12977:2;12962:18;;12955:50;13014:22;;;-1:-1:-1;;;;;13048:31:6;;13045:51;;;13092:1;13089;13082:12;13045:51;13126:6;13123:1;13119:14;13180:6;13172;13167:2;13159:6;13155:15;13142:45;13218:6;13210;13206:19;13196:29;;;13252:2;13248;13244:11;13275:1;13271:2;13264:13;13337:2;13325:9;13321:2;13317:18;13313:27;13308:2;13297:9;13293:18;13286:55;13358:28;13383:2;13375:6;13358:28;:::i;:::-;13350:36;12551:841;-1:-1:-1;;;;;;;;12551:841:6:o;13397:625::-;13700:2;13689:9;13682:21;13663:4;13726:56;13778:2;13767:9;13763:18;13755:6;13726:56;:::i;:::-;13830:9;13822:6;13818:22;13813:2;13802:9;13798:18;13791:50;13864:44;13901:6;13893;13864:44;:::i;:::-;13850:58;;13956:9;13948:6;13944:22;13939:2;13928:9;13924:18;13917:50;13984:32;14009:6;14001;13984:32;:::i;:::-;13976:40;13397:625;-1:-1:-1;;;;;;13397:625:6:o;14401:557::-;14666:25;;;-1:-1:-1;;;;;14765:15:6;;;14760:2;14745:18;;14738:43;14817:15;;14812:2;14797:18;;14790:43;14869:3;14864:2;14849:18;;14842:31;;;14647:4;;14890:62;;14932:19;;14924:6;14890:62;:::i;15517:1135::-;15939:4;15968:3;15998:6;15987:9;15980:25;16041:2;16036;16025:9;16021:18;16014:30;16067:44;16107:2;16096:9;16092:18;16084:6;16067:44;:::i;:::-;16053:58;;16159:9;16151:6;16147:22;16142:2;16131:9;16127:18;16120:50;16193:32;16218:6;16210;16193:32;:::i;:::-;16179:46;;16273:9;16265:6;16261:22;16256:2;16245:9;16241:18;16234:50;16307:44;16344:6;16336;16307:44;:::i;:::-;16293:58;;16400:9;16392:6;16388:22;16382:3;16371:9;16367:19;16360:51;16428:44;16465:6;16457;16428:44;:::i;:::-;16503:3;16488:19;;16481:35;;;;-1:-1:-1;;;;;;;16553:32:6;;;;16547:3;16532:19;;16525:61;16630:14;16623:22;16617:3;16602:19;;;16595:51;16420:52;15517:1135;-1:-1:-1;;;;;15517:1135:6:o;16657:411::-;16829:2;16814:18;;16862:1;16851:13;;16841:144;;16907:10;16902:3;16898:20;16895:1;16888:31;16942:4;16939:1;16932:15;16970:4;16967:1;16960:15;16841:144;16994:25;;;17050:2;17035:18;17028:34;16657:411;:::o;17073:1043::-;17504:3;17493:9;17486:22;17467:4;17531:45;17571:3;17560:9;17556:19;17548:6;17531:45;:::i;:::-;17624:9;17616:6;17612:22;17607:2;17596:9;17592:18;17585:50;17658:32;17683:6;17675;17658:32;:::i;:::-;17644:46;;17738:9;17730:6;17726:22;17721:2;17710:9;17706:18;17699:50;17772:44;17809:6;17801;17772:44;:::i;:::-;17758:58;;17864:9;17856:6;17852:22;17847:2;17836:9;17832:18;17825:50;17892:44;17929:6;17921;17892:44;:::i;:::-;17967:3;17952:19;;17945:35;;;;-1:-1:-1;;;;;;;18017:32:6;;;;18037:3;17996:19;;17989:61;18094:14;18087:22;18081:3;18066:19;;;18059:51;17884:52;17073:1043;-1:-1:-1;;;;17073:1043:6:o;19295:356::-;19497:2;19479:21;;;19516:18;;;19509:30;19575:34;19570:2;19555:18;;19548:62;19642:2;19627:18;;19295:356::o;21525:329::-;21727:2;21709:21;;;21766:1;21746:18;;;21739:29;-1:-1:-1;;;21799:2:6;21784:18;;21777:36;21845:2;21830:18;;21525:329::o;23138:403::-;23373:6;23362:9;23355:25;23416:6;23411:2;23400:9;23396:18;23389:34;23459:2;23454;23443:9;23439:18;23432:30;23336:4;23479:56;23531:2;23520:9;23516:18;23508:6;23479:56;:::i;:::-;23471:64;23138:403;-1:-1:-1;;;;;23138:403:6:o;23546:255::-;23618:2;23612:9;23660:6;23648:19;;23697:18;23682:34;;23718:22;;;23679:62;23676:88;;;23744:18;;:::i;:::-;23780:2;23773:22;23546:255;:::o;23806:275::-;23877:2;23871:9;23942:2;23923:13;;-1:-1:-1;;23919:27:6;23907:40;;23977:18;23962:34;;23998:22;;;23959:62;23956:88;;;24024:18;;:::i;:::-;24060:2;24053:22;23806:275;;-1:-1:-1;23806:275:6:o;24086:183::-;24146:4;24179:18;24171:6;24168:30;24165:56;;;24201:18;;:::i;:::-;-1:-1:-1;24246:1:6;24242:14;24258:4;24238:25;;24086:183::o;24274:217::-;24314:1;24340;24330:132;;24384:10;24379:3;24375:20;24372:1;24365:31;24419:4;24416:1;24409:15;24447:4;24444:1;24437:15;24330:132;-1:-1:-1;24476:9:6;;24274:217::o;24496:168::-;24536:7;24602:1;24598;24594:6;24590:14;24587:1;24584:21;24579:1;24572:9;24565:17;24561:45;24558:71;;;24609:18;;:::i;:::-;-1:-1:-1;24649:9:6;;24496:168::o;24669:125::-;24709:4;24737:1;24734;24731:8;24728:34;;;24742:18;;:::i;:::-;-1:-1:-1;24779:9:6;;24669:125::o;24799:258::-;24871:1;24881:113;24895:6;24892:1;24889:13;24881:113;;;24971:11;;;24965:18;24952:11;;;24945:39;24917:2;24910:10;24881:113;;;25012:6;25009:1;25006:13;25003:48;;;25047:1;25038:6;25033:3;25029:16;25022:27;25003:48;;24799:258;;;:::o;25062:127::-;25123:10;25118:3;25114:20;25111:1;25104:31;25154:4;25151:1;25144:15;25178:4;25175:1;25168:15;25194:127;25255:10;25250:3;25246:20;25243:1;25236:31;25286:4;25283:1;25276:15;25310:4;25307:1;25300:15;25326:127;25387:10;25382:3;25378:20;25375:1;25368:31;25418:4;25415:1;25408:15;25442:4;25439:1;25432:15;25458:131;-1:-1:-1;;;;;25533:31:6;;25523:42;;25513:70;;25579:1;25576;25569:12;25594:118;25680:5;25673:13;25666:21;25659:5;25656:32;25646:60;;25702:1;25699;25692:12
Swarm Source
ipfs://2f58ac5333d1c392d688ef78c77c75902e85eece10cb2d7d04b65816122fce38
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.