More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 187,409 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 8606912 | 1 hr ago | IN | 0 GLMR | 0.102608 | ||||
Deposit | 8605370 | 4 hrs ago | IN | 0 GLMR | 0.101676 | ||||
Withdraw | 8602764 | 8 hrs ago | IN | 0 GLMR | 0.210402 | ||||
Deposit With Per... | 8598047 | 16 hrs ago | IN | 0 GLMR | 0.128306 | ||||
Deposit With Per... | 8596522 | 19 hrs ago | IN | 0 GLMR | 0.211156 | ||||
Deposit | 8596488 | 19 hrs ago | IN | 0 GLMR | 0.177346 | ||||
Withdraw | 8596329 | 19 hrs ago | IN | 0 GLMR | 0.08504496 | ||||
Deposit | 8596322 | 19 hrs ago | IN | 0 GLMR | 0.07732368 | ||||
Deposit | 8591633 | 27 hrs ago | IN | 0 GLMR | 0.16994 | ||||
Withdraw | 8591633 | 27 hrs ago | IN | 0 GLMR | 0.209042 | ||||
Deposit | 8591439 | 27 hrs ago | IN | 0 GLMR | 0.177346 | ||||
Deposit | 8590478 | 29 hrs ago | IN | 0 GLMR | 0.101676 | ||||
Deposit | 8586687 | 36 hrs ago | IN | 0 GLMR | 0.177282 | ||||
Deposit | 8584409 | 39 hrs ago | IN | 0 GLMR | 0.177346 | ||||
Deposit With Per... | 8580498 | 46 hrs ago | IN | 0 GLMR | 0.211156 | ||||
Deposit With Per... | 8571413 | 2 days ago | IN | 0 GLMR | 0.12992 | ||||
Deposit | 8571383 | 2 days ago | IN | 0 GLMR | 0.101676 | ||||
Deposit With Per... | 8571164 | 2 days ago | IN | 0 GLMR | 0.22466998 | ||||
Deposit | 8571155 | 2 days ago | IN | 0 GLMR | 0.18869614 | ||||
Deposit With Per... | 8570828 | 2 days ago | IN | 0 GLMR | 0.22466998 | ||||
Deposit | 8570809 | 2 days ago | IN | 0 GLMR | 0.18869614 | ||||
Withdraw | 8569073 | 2 days ago | IN | 0 GLMR | 0.09543934 | ||||
Deposit With Per... | 8567850 | 2 days ago | IN | 0 GLMR | 0.20967 | ||||
Deposit With Per... | 8567813 | 2 days ago | IN | 0 GLMR | 0.12992 | ||||
Deposit With Per... | 8567768 | 2 days ago | IN | 0 GLMR | 0.128306 |
View more zero value Internal Transactions in Advanced View mode
Loading...
Loading
Contract Name:
FlareDistributor
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at moonbeam.moonscan.io on 2022-01-20 */ // Sources flattened with hardhat v2.7.0 https://hardhat.org // File contracts/flare/FlareDistributor.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) 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; } } /** * @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() { _transferOwnership(_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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @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"); (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"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IBoringERC20 { function mint(address to, uint256 amount) external; function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); /// @notice EIP 2612 function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; } interface IRewarder { function onFlareReward( uint256 pid, address user, uint256 newLpAmount ) external; function pendingTokens(uint256 pid, address user) external view returns (uint256 pending); function rewardToken() external view returns (IBoringERC20); function poolRewardsPerSec(uint256 pid) external view returns (uint256); } // solhint-disable avoid-low-level-calls library BoringERC20 { bytes4 private constant SIG_SYMBOL = 0x95d89b41; // symbol() bytes4 private constant SIG_NAME = 0x06fdde03; // name() bytes4 private constant SIG_DECIMALS = 0x313ce567; // decimals() bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256) bytes4 private constant SIG_TRANSFER_FROM = 0x23b872dd; // transferFrom(address,address,uint256) function returnDataToString(bytes memory data) internal pure returns (string memory) { if (data.length >= 64) { return abi.decode(data, (string)); } else if (data.length == 32) { uint8 i = 0; while (i < 32 && data[i] != 0) { i++; } bytes memory bytesArray = new bytes(i); for (i = 0; i < 32 && data[i] != 0; i++) { bytesArray[i] = data[i]; } return string(bytesArray); } else { return "???"; } } /// @notice Provides a safe ERC20.symbol version which returns '???' as fallback string. /// @param token The address of the ERC-20 token contract. /// @return (string) Token symbol. function safeSymbol(IBoringERC20 token) internal view returns (string memory) { (bool success, bytes memory data) = address(token).staticcall( abi.encodeWithSelector(SIG_SYMBOL) ); return success ? returnDataToString(data) : "???"; } /// @notice Provides a safe ERC20.name version which returns '???' as fallback string. /// @param token The address of the ERC-20 token contract. /// @return (string) Token name. function safeName(IBoringERC20 token) internal view returns (string memory) { (bool success, bytes memory data) = address(token).staticcall( abi.encodeWithSelector(SIG_NAME) ); return success ? returnDataToString(data) : "???"; } /// @notice Provides a safe ERC20.decimals version which returns '18' as fallback value. /// @param token The address of the ERC-20 token contract. /// @return (uint8) Token decimals. function safeDecimals(IBoringERC20 token) internal view returns (uint8) { (bool success, bytes memory data) = address(token).staticcall( abi.encodeWithSelector(SIG_DECIMALS) ); return success && data.length == 32 ? abi.decode(data, (uint8)) : 18; } /// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations. /// Reverts on a failed transfer. /// @param token The address of the ERC-20 token. /// @param to Transfer tokens to. /// @param amount The token amount. function safeTransfer( IBoringERC20 token, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(SIG_TRANSFER, to, amount) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: Transfer failed" ); } /// @notice Provides a safe ERC20.transferFrom version for different ERC-20 implementations. /// Reverts on a failed transfer. /// @param token The address of the ERC-20 token. /// @param from Transfer tokens from. /// @param to Transfer tokens to. /// @param amount The token amount. function safeTransferFrom( IBoringERC20 token, address from, address to, uint256 amount ) internal { (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(SIG_TRANSFER_FROM, from, to, amount) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: TransferFrom failed" ); } } contract FlareDistributor is Ownable, ReentrancyGuard { using BoringERC20 for IBoringERC20; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. uint256 rewardLockedUp; // Reward locked up. uint256 nextHarvestUntil; // When can the user harvest again. } // Info of each pool. struct PoolInfo { IBoringERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. FLARE to distribute per block. uint256 lastRewardTimestamp; // Last block number that FLARE distribution occurs. uint256 accFlarePerShare; // Accumulated FLARE per share, times 1e18. See below. uint16 depositFeeBP; // Deposit fee in basis points uint256 harvestInterval; // Harvest interval in seconds uint256 totalLp; // Total token in Pool IRewarder[] rewarders; // Array of rewarder contract for pools with incentives } IBoringERC20 public flare; // FLARE tokens created per second uint256 public flarePerSec; // Max harvest interval: 14 days uint256 public constant MAXIMUM_HARVEST_INTERVAL = 14 days; // Maximum deposit fee rate: 10% uint16 public constant MAXIMUM_DEPOSIT_FEE_RATE = 1000; // Info of each pool PoolInfo[] public poolInfo; // Info of each user that stakes LP tokens. mapping(uint256 => mapping(address => UserInfo)) public userInfo; // Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint = 0; // The timestamp when FLARE mining starts. uint256 public startTimestamp; // Total locked up rewards uint256 public totalLockedUpRewards; // Total FLARE in FLARE Pools (can be multiple pools) uint256 public totalFlareInPools = 0; // Team address. address public teamAddress; // Treasury address. address public treasuryAddress; // Investor address. address public investorAddress; // Percentage of pool rewards that goto the team. uint256 public teamPercent; // Percentage of pool rewards that goes to the treasury. uint256 public treasuryPercent; // Percentage of pool rewards that goes to the investor. uint256 public investorPercent; // The precision factor uint256 private immutable ACC_TOKEN_PRECISION = 1e12; modifier validatePoolByPid(uint256 _pid) { require(_pid < poolInfo.length, "Pool does not exist"); _; } event Add( uint256 indexed pid, uint256 allocPoint, IBoringERC20 indexed lpToken, uint16 depositFeeBP, uint256 harvestInterval, IRewarder[] indexed rewarders ); event Set( uint256 indexed pid, uint256 allocPoint, uint16 depositFeeBP, uint256 harvestInterval, IRewarder[] indexed rewarders ); event UpdatePool( uint256 indexed pid, uint256 lastRewardTimestamp, uint256 lpSupply, uint256 accFlarePerShare ); event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw( address indexed user, uint256 indexed pid, uint256 amount ); event EmissionRateUpdated( address indexed caller, uint256 previousValue, uint256 newValue ); event RewardLockedUp( address indexed user, uint256 indexed pid, uint256 amountLockedUp ); event AllocPointsUpdated( address indexed caller, uint256 previousAmount, uint256 newAmount ); event SetTeamAddress( address indexed oldAddress, address indexed newAddress ); event SetTreasuryAddress( address indexed oldAddress, address indexed newAddress ); event SetInvestorAddress( address indexed oldAddress, address indexed newAddress ); event SetTeamPercent(uint256 oldPercent, uint256 newPercent); event SetTreasuryPercent(uint256 oldPercent, uint256 newPercent); event SetInvestorPercent(uint256 oldPercent, uint256 newPercent); constructor( IBoringERC20 _flare, uint256 _flarePerSec, address _teamAddress, address _treasuryAddress, address _investorAddress, uint256 _teamPercent, uint256 _treasuryPercent, uint256 _investorPercent ) { require( _teamPercent <= 1000, "constructor: invalid team percent value" ); require( _treasuryPercent <= 1000, "constructor: invalid treasury percent value" ); require( _investorPercent <= 1000, "constructor: invalid investor percent value" ); require( _teamPercent + _treasuryPercent + _investorPercent <= 1000, "constructor: total percent over max" ); //StartBlock always many years later from contract const ruct, will be set later in StartFarming function startTimestamp = block.timestamp + (60 * 60 * 24 * 365); flare = _flare; flarePerSec = _flarePerSec; teamAddress = _teamAddress; treasuryAddress = _treasuryAddress; investorAddress = _investorAddress; teamPercent = _teamPercent; treasuryPercent = _treasuryPercent; investorPercent = _investorPercent; } // Set farming start, can call only once function startFarming() public onlyOwner { require( block.timestamp < startTimestamp, "start farming: farm started already" ); uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { PoolInfo storage pool = poolInfo[pid]; pool.lastRewardTimestamp = block.timestamp; } startTimestamp = block.timestamp; } function poolLength() external view returns (uint256) { return poolInfo.length; } // Add a new lp to the pool. Can only be called by the owner. // Can add multiple pool with same lp token without messing up rewards, because each pool's balance is tracked using its own totalLp function add( uint256 _allocPoint, IBoringERC20 _lpToken, uint16 _depositFeeBP, uint256 _harvestInterval, IRewarder[] calldata _rewarders ) public onlyOwner { require(_rewarders.length <= 10, "add: too many rewarders"); require( _depositFeeBP <= MAXIMUM_DEPOSIT_FEE_RATE, "add: deposit fee too high" ); require( _harvestInterval <= MAXIMUM_HARVEST_INTERVAL, "add: invalid harvest interval" ); require( Address.isContract(address(_lpToken)), "add: LP token must be a valid contract" ); for ( uint256 rewarderId = 0; rewarderId < _rewarders.length; ++rewarderId ) { require( Address.isContract(address(_rewarders[rewarderId])), "add: rewarder must be contract" ); } _massUpdatePools(); uint256 lastRewardTimestamp = block.timestamp > startTimestamp ? block.timestamp : startTimestamp; totalAllocPoint += _allocPoint; poolInfo.push( PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardTimestamp: lastRewardTimestamp, accFlarePerShare: 0, depositFeeBP: _depositFeeBP, harvestInterval: _harvestInterval, totalLp: 0, rewarders: _rewarders }) ); emit Add( poolInfo.length - 1, _allocPoint, _lpToken, _depositFeeBP, _harvestInterval, _rewarders ); } // Update the given pool's FLARE allocation point and deposit fee. Can only be called by the owner. function set( uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, uint256 _harvestInterval, IRewarder[] calldata _rewarders ) public onlyOwner validatePoolByPid(_pid) { require(_rewarders.length <= 10, "set: too many rewarders"); require( _depositFeeBP <= MAXIMUM_DEPOSIT_FEE_RATE, "set: deposit fee too high" ); require( _harvestInterval <= MAXIMUM_HARVEST_INTERVAL, "set: invalid harvest interval" ); for ( uint256 rewarderId = 0; rewarderId < _rewarders.length; ++rewarderId ) { require( Address.isContract(address(_rewarders[rewarderId])), "set: rewarder must be contract" ); } _massUpdatePools(); totalAllocPoint = totalAllocPoint - poolInfo[_pid].allocPoint + _allocPoint; poolInfo[_pid].allocPoint = _allocPoint; poolInfo[_pid].depositFeeBP = _depositFeeBP; poolInfo[_pid].harvestInterval = _harvestInterval; poolInfo[_pid].rewarders = _rewarders; emit Set( _pid, _allocPoint, _depositFeeBP, _harvestInterval, _rewarders ); } // View function to see pending rewards on frontend. function pendingTokens(uint256 _pid, address _user) external view validatePoolByPid(_pid) returns ( address[] memory addresses, string[] memory symbols, uint256[] memory decimals, uint256[] memory amounts ) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accFlarePerShare = pool.accFlarePerShare; uint256 lpSupply = pool.totalLp; if (block.timestamp > pool.lastRewardTimestamp && lpSupply != 0) { uint256 multiplier = block.timestamp - pool.lastRewardTimestamp; uint256 total = 1000; uint256 lpPercent = total - teamPercent - treasuryPercent - investorPercent; uint256 flareReward = (multiplier * flarePerSec * pool.allocPoint * lpPercent) / totalAllocPoint / total; accFlarePerShare += ( ((flareReward * ACC_TOKEN_PRECISION) / lpSupply) ); } uint256 pendingFlare = (((user.amount * accFlarePerShare) / ACC_TOKEN_PRECISION) - user.rewardDebt) + user.rewardLockedUp; addresses = new address[](pool.rewarders.length + 1); symbols = new string[](pool.rewarders.length + 1); amounts = new uint256[](pool.rewarders.length + 1); decimals = new uint256[](pool.rewarders.length + 1); addresses[0] = address(flare); symbols[0] = IBoringERC20(flare).safeSymbol(); decimals[0] = IBoringERC20(flare).safeDecimals(); amounts[0] = pendingFlare; for ( uint256 rewarderId = 0; rewarderId < pool.rewarders.length; ++rewarderId ) { addresses[rewarderId + 1] = address( pool.rewarders[rewarderId].rewardToken() ); symbols[rewarderId + 1] = IBoringERC20( pool.rewarders[rewarderId].rewardToken() ).safeSymbol(); decimals[rewarderId + 1] = IBoringERC20( pool.rewarders[rewarderId].rewardToken() ).safeDecimals(); amounts[rewarderId + 1] = pool.rewarders[rewarderId].pendingTokens( _pid, _user ); } } /// @notice View function to see pool rewards per sec function poolRewardsPerSec(uint256 _pid) external view validatePoolByPid(_pid) returns ( address[] memory addresses, string[] memory symbols, uint256[] memory decimals, uint256[] memory rewardsPerSec ) { PoolInfo storage pool = poolInfo[_pid]; addresses = new address[](pool.rewarders.length + 1); symbols = new string[](pool.rewarders.length + 1); decimals = new uint256[](pool.rewarders.length + 1); rewardsPerSec = new uint256[](pool.rewarders.length + 1); addresses[0] = address(flare); symbols[0] = IBoringERC20(flare).safeSymbol(); decimals[0] = IBoringERC20(flare).safeDecimals(); uint256 total = 1000; uint256 lpPercent = total - teamPercent - treasuryPercent - investorPercent; rewardsPerSec[0] = (pool.allocPoint * flarePerSec * lpPercent) / totalAllocPoint / total; for ( uint256 rewarderId = 0; rewarderId < pool.rewarders.length; ++rewarderId ) { addresses[rewarderId + 1] = address( pool.rewarders[rewarderId].rewardToken() ); symbols[rewarderId + 1] = IBoringERC20( pool.rewarders[rewarderId].rewardToken() ).safeSymbol(); decimals[rewarderId + 1] = IBoringERC20( pool.rewarders[rewarderId].rewardToken() ).safeDecimals(); rewardsPerSec[rewarderId + 1] = pool .rewarders[rewarderId] .poolRewardsPerSec(_pid); } } // View function to see rewarders for a pool function poolRewarders(uint256 _pid) external view validatePoolByPid(_pid) returns (address[] memory rewarders) { PoolInfo storage pool = poolInfo[_pid]; rewarders = new address[](pool.rewarders.length); for ( uint256 rewarderId = 0; rewarderId < pool.rewarders.length; ++rewarderId ) { rewarders[rewarderId] = address(pool.rewarders[rewarderId]); } } // View function to see if user can harvest FLARE. function canHarvest(uint256 _pid, address _user) public view validatePoolByPid(_pid) returns (bool) { UserInfo storage user = userInfo[_pid][_user]; return block.timestamp >= startTimestamp && block.timestamp >= user.nextHarvestUntil; } // Update reward vairables for all pools. Be careful of gas spending! function massUpdatePools() external nonReentrant { _massUpdatePools(); } // Internal method for massUpdatePools function _massUpdatePools() internal { for (uint256 pid = 0; pid < poolInfo.length; ++pid) { _updatePool(pid); } } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) external nonReentrant { _updatePool(_pid); } // Internal method for _updatePool function _updatePool(uint256 _pid) internal validatePoolByPid(_pid) { PoolInfo storage pool = poolInfo[_pid]; if (block.timestamp <= pool.lastRewardTimestamp) { return; } uint256 lpSupply = pool.totalLp; if (lpSupply == 0 || pool.allocPoint == 0) { pool.lastRewardTimestamp = block.timestamp; return; } uint256 multiplier = block.timestamp - pool.lastRewardTimestamp; uint256 flareReward = ((multiplier * flarePerSec) * pool.allocPoint) / totalAllocPoint; uint256 total = 1000; uint256 lpPercent = total - teamPercent - treasuryPercent - investorPercent; flare.mint(teamAddress, (flareReward * teamPercent) / total); flare.mint(treasuryAddress, (flareReward * treasuryPercent) / total); flare.mint(investorAddress, (flareReward * investorPercent) / total); flare.mint(address(this), (flareReward * lpPercent) / total); pool.accFlarePerShare += (flareReward * ACC_TOKEN_PRECISION * lpPercent) / pool.totalLp / total; pool.lastRewardTimestamp = block.timestamp; emit UpdatePool( _pid, pool.lastRewardTimestamp, lpSupply, pool.accFlarePerShare ); } function depositWithPermit( uint256 pid, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public nonReentrant validatePoolByPid(pid) { PoolInfo storage pool = poolInfo[pid]; IBoringERC20 pair = IBoringERC20(address(pool.lpToken)); pair.permit(msg.sender, address(this), amount, deadline, v, r, s); _deposit(pid, amount); } // Deposit tokens for FLARE allocation. function deposit(uint256 _pid, uint256 _amount) public nonReentrant { _deposit(_pid, _amount); } // Deposit tokens for FLARE allocation. function _deposit(uint256 _pid, uint256 _amount) internal validatePoolByPid(_pid) { require( block.timestamp >= startTimestamp, "deposit: farming not started" ); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; _updatePool(_pid); payOrLockupPendingFlare(_pid); if (_amount > 0) { uint256 beforeDeposit = pool.lpToken.balanceOf(address(this)); pool.lpToken.safeTransferFrom(msg.sender, address(this), _amount); uint256 afterDeposit = pool.lpToken.balanceOf(address(this)); _amount = afterDeposit - beforeDeposit; if (pool.depositFeeBP > 0) { uint256 depositFee = (_amount * pool.depositFeeBP) / 10000; pool.lpToken.safeTransfer(treasuryAddress, depositFee); _amount = _amount - depositFee; } user.amount += _amount; if (address(pool.lpToken) == address(flare)) { totalFlareInPools += _amount; } } user.rewardDebt = (user.amount * pool.accFlarePerShare) / ACC_TOKEN_PRECISION; for ( uint256 rewarderId = 0; rewarderId < pool.rewarders.length; ++rewarderId ) { pool.rewarders[rewarderId].onFlareReward( _pid, msg.sender, user.amount ); } if (_amount > 0) { pool.totalLp += _amount; } emit Deposit(msg.sender, _pid, _amount); } //withdraw tokens function withdraw(uint256 _pid, uint256 _amount) public nonReentrant validatePoolByPid(_pid) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; //this will make sure that user can only withdraw from his pool require(user.amount >= _amount, "withdraw: user amount not enough"); //cannot withdraw more than pool's balance require(pool.totalLp >= _amount, "withdraw: pool total not enough"); _updatePool(_pid); payOrLockupPendingFlare(_pid); if (_amount > 0) { user.amount -= _amount; if (address(pool.lpToken) == address(flare)) { totalFlareInPools -= _amount; } pool.lpToken.safeTransfer(msg.sender, _amount); } user.rewardDebt = (user.amount * pool.accFlarePerShare) / ACC_TOKEN_PRECISION; for ( uint256 rewarderId = 0; rewarderId < pool.rewarders.length; ++rewarderId ) { pool.rewarders[rewarderId].onFlareReward( _pid, msg.sender, user.amount ); } if (_amount > 0) { pool.totalLp -= _amount; } emit Withdraw(msg.sender, _pid, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) public nonReentrant { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 amount = user.amount; //Cannot withdraw more than pool's balance require( pool.totalLp >= amount, "emergency withdraw: pool total not enough" ); user.amount = 0; user.rewardDebt = 0; user.rewardLockedUp = 0; user.nextHarvestUntil = 0; pool.totalLp -= amount; for ( uint256 rewarderId = 0; rewarderId < pool.rewarders.length; ++rewarderId ) { pool.rewarders[rewarderId].onFlareReward(_pid, msg.sender, 0); } if (address(pool.lpToken) == address(flare)) { totalFlareInPools -= amount; } pool.lpToken.safeTransfer(msg.sender, amount); emit EmergencyWithdraw(msg.sender, _pid, amount); } // Pay or lockup pending FLARE. function payOrLockupPendingFlare(uint256 _pid) internal { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; if (user.nextHarvestUntil == 0 && block.timestamp >= startTimestamp) { user.nextHarvestUntil = block.timestamp + pool.harvestInterval; } uint256 pending = ((user.amount * pool.accFlarePerShare) / ACC_TOKEN_PRECISION) - user.rewardDebt; if (canHarvest(_pid, msg.sender)) { if (pending > 0 || user.rewardLockedUp > 0) { uint256 pendingRewards = pending + user.rewardLockedUp; // reset lockup totalLockedUpRewards -= user.rewardLockedUp; user.rewardLockedUp = 0; user.nextHarvestUntil = block.timestamp + pool.harvestInterval; // send rewards safeFlareTransfer(msg.sender, pendingRewards); } } else if (pending > 0) { totalLockedUpRewards += pending; user.rewardLockedUp += pending; emit RewardLockedUp(msg.sender, _pid, pending); } } // Safe FLARE transfer function, just in case if rounding error causes pool do not have enough FLARE. function safeFlareTransfer(address _to, uint256 _amount) internal { if (flare.balanceOf(address(this)) > totalFlareInPools) { //flareBal = total FLARE in FlareDistributor - total FLARE in FLARE pools, this will make sure that FlareDistributor never transfer rewards from deposited FLARE pools uint256 flareBal = flare.balanceOf(address(this)) - totalFlareInPools; if (_amount >= flareBal) { flare.safeTransfer(_to, flareBal); } else if (_amount > 0) { flare.safeTransfer(_to, _amount); } } } function updateEmissionRate(uint256 _flarePerSec) public onlyOwner { _massUpdatePools(); emit EmissionRateUpdated(msg.sender, flarePerSec, _flarePerSec); flarePerSec = _flarePerSec; } function updateAllocPoint(uint256 _pid, uint256 _allocPoint) public onlyOwner { _massUpdatePools(); emit AllocPointsUpdated( msg.sender, poolInfo[_pid].allocPoint, _allocPoint ); totalAllocPoint = totalAllocPoint - poolInfo[_pid].allocPoint + _allocPoint; poolInfo[_pid].allocPoint = _allocPoint; } function poolTotalLp(uint256 pid) external view returns (uint256) { return poolInfo[pid].totalLp; } // Function to harvest many pools in a single transaction function harvestMany(uint256[] calldata _pids) public nonReentrant { require(_pids.length <= 30, "harvest many: too many pool ids"); for (uint256 index = 0; index < _pids.length; ++index) { _deposit(_pids[index], 0); } } // Update team address by the previous team address. function setTeamAddress(address _teamAddress) public { require( msg.sender == teamAddress, "set team address: only previous team address can call this method" ); require( _teamAddress != address(0), "set team address: invalid new team address" ); teamAddress = _teamAddress; emit SetTeamAddress(msg.sender, _teamAddress); } function setTeamPercent(uint256 _newTeamPercent) public onlyOwner { require( _newTeamPercent <= 1000, "set team percent: invalid percent value" ); require( treasuryPercent + _newTeamPercent + investorPercent <= 1000, "set team percent: total percent over max" ); emit SetTeamPercent(teamPercent, _newTeamPercent); teamPercent = _newTeamPercent; } // Update treasury address by the previous treasury. function setTreasuryAddress(address _treasuryAddress) public { require( msg.sender == treasuryAddress, "set treasury address: only previous treasury address can call this method" ); require( _treasuryAddress != address(0), "set treasury address: invalid new treasury address" ); treasuryAddress = _treasuryAddress; emit SetTreasuryAddress(msg.sender, _treasuryAddress); } function setTreasuryPercent(uint256 _newTreasuryPercent) public onlyOwner { require( _newTreasuryPercent <= 1000, "set treasury percent: invalid percent value" ); require( teamPercent + _newTreasuryPercent + investorPercent <= 1000, "set treasury percent: total percent over max" ); emit SetTreasuryPercent(treasuryPercent, _newTreasuryPercent); treasuryPercent = _newTreasuryPercent; } // Update the investor address by the previous investor. function setInvestorAddress(address _investorAddress) public { require( msg.sender == investorAddress, "set investor address: only previous investor can call this method" ); require( _investorAddress != address(0), "set investor address: invalid new investor address" ); investorAddress = _investorAddress; emit SetInvestorAddress(msg.sender, _investorAddress); } function setInvestorPercent(uint256 _newInvestorPercent) public onlyOwner { require( _newInvestorPercent <= 1000, "set investor percent: invalid percent value" ); require( teamPercent + _newInvestorPercent + treasuryPercent <= 1000, "set investor percent: total percent over max" ); emit SetInvestorPercent(investorPercent, _newInvestorPercent); investorPercent = _newInvestorPercent; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IBoringERC20","name":"_flare","type":"address"},{"internalType":"uint256","name":"_flarePerSec","type":"uint256"},{"internalType":"address","name":"_teamAddress","type":"address"},{"internalType":"address","name":"_treasuryAddress","type":"address"},{"internalType":"address","name":"_investorAddress","type":"address"},{"internalType":"uint256","name":"_teamPercent","type":"uint256"},{"internalType":"uint256","name":"_treasuryPercent","type":"uint256"},{"internalType":"uint256","name":"_investorPercent","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IBoringERC20","name":"lpToken","type":"address"},{"indexed":false,"internalType":"uint16","name":"depositFeeBP","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"harvestInterval","type":"uint256"},{"indexed":true,"internalType":"contract IRewarder[]","name":"rewarders","type":"address[]"}],"name":"Add","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"AllocPointsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"EmissionRateUpdated","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":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountLockedUp","type":"uint256"}],"name":"RewardLockedUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"depositFeeBP","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"harvestInterval","type":"uint256"},{"indexed":true,"internalType":"contract IRewarder[]","name":"rewarders","type":"address[]"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetInvestorAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"SetInvestorPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetTeamAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"SetTeamPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetTreasuryAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPercent","type":"uint256"}],"name":"SetTreasuryPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accFlarePerShare","type":"uint256"}],"name":"UpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MAXIMUM_DEPOSIT_FEE_RATE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_HARVEST_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IBoringERC20","name":"_lpToken","type":"address"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"_harvestInterval","type":"uint256"},{"internalType":"contract IRewarder[]","name":"_rewarders","type":"address[]"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"canHarvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"depositWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flare","outputs":[{"internalType":"contract IBoringERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flarePerSec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_pids","type":"uint256[]"}],"name":"harvestMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investorPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingTokens","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"string[]","name":"symbols","type":"string[]"},{"internalType":"uint256[]","name":"decimals","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IBoringERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"internalType":"uint256","name":"accFlarePerShare","type":"uint256"},{"internalType":"uint16","name":"depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"harvestInterval","type":"uint256"},{"internalType":"uint256","name":"totalLp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"poolRewarders","outputs":[{"internalType":"address[]","name":"rewarders","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"poolRewardsPerSec","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"string[]","name":"symbols","type":"string[]"},{"internalType":"uint256[]","name":"decimals","type":"uint256[]"},{"internalType":"uint256[]","name":"rewardsPerSec","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"poolTotalLp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"_harvestInterval","type":"uint256"},{"internalType":"contract IRewarder[]","name":"_rewarders","type":"address[]"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_investorAddress","type":"address"}],"name":"setInvestorAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newInvestorPercent","type":"uint256"}],"name":"setInvestorPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_teamAddress","type":"address"}],"name":"setTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTeamPercent","type":"uint256"}],"name":"setTeamPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTreasuryPercent","type":"uint256"}],"name":"setTreasuryPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startFarming","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFlareInPools","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLockedUpRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"updateAllocPoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_flarePerSec","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"rewardLockedUp","type":"uint256"},{"internalType":"uint256","name":"nextHarvestUntil","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040526000600681905560095564e8d4a510006080523480156200002457600080fd5b5060405162005f2e38038062005f2e8339810160408190526200004791620002cf565b62000052336200027f565b600180556103e8831115620000be5760405162461bcd60e51b815260206004820152602760248201527f636f6e7374727563746f723a20696e76616c6964207465616d2070657263656e604482015266742076616c756560c81b60648201526084015b60405180910390fd5b6103e8821115620001265760405162461bcd60e51b815260206004820152602b60248201527f636f6e7374727563746f723a20696e76616c696420747265617375727920706560448201526a7263656e742076616c756560a81b6064820152608401620000b5565b6103e88111156200018e5760405162461bcd60e51b815260206004820152602b60248201527f636f6e7374727563746f723a20696e76616c696420696e766573746f7220706560448201526a7263656e742076616c756560a81b6064820152608401620000b5565b6103e8816200019e84866200035e565b620001aa91906200035e565b1115620002065760405162461bcd60e51b815260206004820152602360248201527f636f6e7374727563746f723a20746f74616c2070657263656e74206f766572206044820152620dac2f60eb1b6064820152608401620000b5565b62000216426301e133806200035e565b600755600280546001600160a01b03199081166001600160a01b039a8b1617909155600397909755600a8054881696891696909617909555600b8054871694881694909417909355600c80549095169190951617909255600d92909255600e55600f556200039e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080600080600080600080610100898b031215620002ed57600080fd5b8851620002fa8162000385565b60208a015160408b01519199509750620003148162000385565b60608a0151909650620003278162000385565b60808a01519095506200033a8162000385565b60a08a015160c08b015160e0909b0151999c989b5096999598909790945092505050565b600082198211156200038057634e487b7160e01b600052601160045260246000fd5b500190565b6001600160a01b03811681146200039b57600080fd5b50565b608051615b51620003dd600039600081816111ad01528181613897015281816138e50152818161429a015281816143c10152614bf10152615b516000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c80636605bfda11610191578063c196ca8c116100e3578063e2bbb15811610097578063eff8976b11610071578063eff8976b146106a0578063f2fde38b146106c0578063ffcd4263146106d357600080fd5b8063e2bbb15814610671578063e6fd48bc14610684578063eddf96521461068d57600080fd5b8063dc640ac9116100c8578063dc640ac91461064b578063de73149d1461065e578063e164ac501461066857600080fd5b8063c196ca8c1461060b578063c5f956af1461062b57600080fd5b806389a2bc2511610145578063949e63021161011f578063949e6302146105e7578063acfdf41e146105fa578063afbcfea11461060357600080fd5b806389a2bc25146105565780638da5cb5b1461056957806393f1a40b1461058757600080fd5b8063715018a611610176578063715018a61461051f578063812c64f114610527578063876d3c9c1461054357600080fd5b80636605bfda146104f95780636690864e1461050c57600080fd5b806342602f1e1161024a578063515bc323116101fe5780635415d1ea116101d85780635415d1ea146104d5578063630b5ba1146104de578063654c9ece146104e657600080fd5b8063515bc3231461049c57806351eb05a6146104af5780635312ea8e146104c257600080fd5b8063465e81ec1161022f578063465e81ec1461045d578063474fa63014610480578063508593ab1461048957600080fd5b806342602f1e14610437578063441a3e701461044a57600080fd5b80631526fe27116102a15780631c75f085116102865780631c75f085146103e15780632081ccc4146104015780632e6c998d1461041457600080fd5b80631526fe271461037557806317caf6f1146103d857600080fd5b8063081e3eda116102d2578063081e3eda146103135780630ba84cd21461031b57806312e228fd1461033057600080fd5b806304ef9d58146102ee5780630735b2081461030a575b600080fd5b6102f7600e5481565b6040519081526020015b60405180910390f35b6102f7600f5481565b6004546102f7565b61032e6103293660046155cf565b6106e6565b005b600c546103509073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b6103886103833660046155cf565b6107b7565b6040805173ffffffffffffffffffffffffffffffffffffffff9098168852602088019690965294860193909352606085019190915261ffff16608084015260a083015260c082015260e001610301565b6102f760065481565b600a546103509073ffffffffffffffffffffffffffffffffffffffff1681565b61032e61040f3660046156cd565b610821565b610427610422366004615601565b610c7f565b6040519015158152602001610301565b61032e610445366004615466565b610d3d565b61032e6104583660046156ab565b610f1e565b61047061046b3660046155cf565b61131a565b604051610301949392919061586c565b6102f760085481565b61032e610497366004615631565b611a86565b61032e6104aa3660046156fd565b611fab565b61032e6104bd3660046155cf565b612178565b61032e6104d03660046155cf565b6121fa565b6102f760095481565b61032e6124e7565b6102f76104f43660046155cf565b612567565b61032e610507366004615466565b612595565b61032e61051a366004615466565b612776565b61032e612957565b6105306103e881565b60405161ffff9091168152602001610301565b61032e6105513660046155cf565b6129e4565b61032e6105643660046155cf565b612be4565b60005473ffffffffffffffffffffffffffffffffffffffff16610350565b6105c7610595366004615601565b600560209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610301565b61032e6105f53660046155cf565b612de4565b6102f760035481565b61032e612fe4565b6002546103509073ffffffffffffffffffffffffffffffffffffffff1681565b600b546103509073ffffffffffffffffffffffffffffffffffffffff1681565b61032e610659366004615483565b61314c565b6102f76212750081565b6102f7600d5481565b61032e61067f3660046156ab565b613270565b6102f760075481565b61032e61069b3660046156ab565b6132f4565b6106b36106ae3660046155cf565b61346a565b6040516103019190615859565b61032e6106ce366004615466565b6135e9565b6104706106e1366004615601565b613719565b60005473ffffffffffffffffffffffffffffffffffffffff16331461076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610774613e24565b600354604080519182526020820183905233917feedc6338c9c1ad8f3cd6c90dd09dbe98dbd57e610d3e59a17996d07acb0d9511910160405180910390a2600355565b600481815481106107c757600080fd5b6000918252602090912060089091020180546001820154600283015460038401546004850154600586015460069096015473ffffffffffffffffffffffffffffffffffffffff909516965092949193909261ffff16919087565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6004548690811061090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b600a82111561097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f7365743a20746f6f206d616e79207265776172646572730000000000000000006044820152606401610763565b6103e861ffff861611156109ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f7365743a206465706f7369742066656520746f6f2068696768000000000000006044820152606401610763565b62127500841115610a57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f7365743a20696e76616c6964206861727665737420696e74657276616c0000006044820152606401610763565b60005b82811015610b0857610a92848483818110610a7757610a77615a8c565b9050602002016020810190610a8c9190615466565b3b151590565b610af8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f7365743a207265776172646572206d75737420626520636f6e747261637400006044820152606401610763565b610b0181615a04565b9050610a5a565b50610b11613e24565b8560048881548110610b2557610b25615a8c565b906000526020600020906008020160010154600654610b4491906159c1565b610b4e9190615931565b6006819055508560048881548110610b6857610b68615a8c565b9060005260206000209060080201600101819055508460048881548110610b9157610b91615a8c565b906000526020600020906008020160040160006101000a81548161ffff021916908361ffff1602179055508360048881548110610bd057610bd0615a8c565b906000526020600020906008020160050181905550828260048981548110610bfa57610bfa615a8c565b90600052602060002090600802016007019190610c189291906152f1565b508282604051610c299291906157ee565b6040805191829003822088835261ffff881660208401529082018690529088907f5ed6f0deef9ab49d02900b40d596df4cd637a2a7fbfa56bbcb377389d3ce8d289060600160405180910390a350505050505050565b60045460009083908110610cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b600084815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290206007544210801590610d34575080600301544210155b95945050505050565b600c5473ffffffffffffffffffffffffffffffffffffffff163314610e0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f73657420696e766573746f7220616464726573733a206f6e6c7920707265766960448201527f6f757320696e766573746f722063616e2063616c6c2074686973206d6574686f60648201527f6400000000000000000000000000000000000000000000000000000000000000608482015260a401610763565b73ffffffffffffffffffffffffffffffffffffffff8116610ead576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f73657420696e766573746f7220616464726573733a20696e76616c6964206e6560448201527f7720696e766573746f72206164647265737300000000000000000000000000006064820152608401610763565b600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f6260cb34f06b782e83bde168f7d74ab2133041cb53b63ce22b127822a92b679190600090a350565b60026001541415610f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b600260015560045482908110610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b60006004848154811061101257611012615a8c565b6000918252602080832087845260058252604080852033865290925292208054600890920290920192508411156110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f77697468647261773a207573657220616d6f756e74206e6f7420656e6f7567686044820152606401610763565b8382600601541015611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f77697468647261773a20706f6f6c20746f74616c206e6f7420656e6f756768006044820152606401610763565b61111c85613e4a565b6111258561434d565b83156111a4578381600001600082825461113f91906159c1565b9091555050600254825473ffffffffffffffffffffffffffffffffffffffff9081169116141561118157836009600082825461117b91906159c1565b90915550505b81546111a49073ffffffffffffffffffffffffffffffffffffffff163386614502565b600382015481547f0000000000000000000000000000000000000000000000000000000000000000916111d691615984565b6111e09190615949565b600182015560005b60078301548110156112b75782600701818154811061120957611209615a8c565b60009182526020909120015482546040517fc6a7112800000000000000000000000000000000000000000000000000000000815260048101899052336024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063c6a7112890606401600060405180830381600087803b15801561128e57600080fd5b505af11580156112a2573d6000803e3d6000fd5b50505050806112b090615a04565b90506111e8565b5083156112d857838260060160008282546112d291906159c1565b90915550505b604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a3505060018055505050565b60608060608084600480549050811061138f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b6000600487815481106113a4576113a4615a8c565b90600052602060002090600802019050806007018054905060016113c89190615931565b67ffffffffffffffff8111156113e0576113e0615abb565b604051908082528060200260200182016040528015611409578160200160208202803683370190505b50600782015490965061141d906001615931565b67ffffffffffffffff81111561143557611435615abb565b60405190808252806020026020018201604052801561146857816020015b60608152602001906001900390816114535790505b50600782015490955061147c906001615931565b67ffffffffffffffff81111561149457611494615abb565b6040519080825280602002602001820160405280156114bd578160200160208202803683370190505b5060078201549094506114d1906001615931565b67ffffffffffffffff8111156114e9576114e9615abb565b604051908082528060200260200182016040528015611512578160200160208202803683370190505b50600254875191945073ffffffffffffffffffffffffffffffffffffffff1690879060009061154357611543615a8c565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526002546115739116614672565b8560008151811061158657611586615a8c565b60209081029190910101526002546115b39073ffffffffffffffffffffffffffffffffffffffff1661478a565b60ff16846000815181106115c9576115c9615a8c565b60200260200101818152505060006103e890506000600f54600e54600d54846115f291906159c1565b6115fc91906159c1565b61160691906159c1565b90508160065482600354866001015461161f9190615984565b6116299190615984565b6116339190615949565b61163d9190615949565b8560008151811061165057611650615a8c565b60200260200101818152505060005b6007840154811015611a7a5783600701818154811061168057611680615a8c565b60009182526020918290200154604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263f7c618c192600480840193829003018186803b1580156116ef57600080fd5b505afa158015611703573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172791906154e7565b89611733836001615931565b8151811061174357611743615a8c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061185784600701828154811061179557611795615a8c565b60009182526020918290200154604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263f7c618c192600480840193829003018186803b15801561180457600080fd5b505afa158015611818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183c91906154e7565b73ffffffffffffffffffffffffffffffffffffffff16614672565b88611863836001615931565b8151811061187357611873615a8c565b602002602001018190525061195884600701828154811061189657611896615a8c565b60009182526020918290200154604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263f7c618c192600480840193829003018186803b15801561190557600080fd5b505afa158015611919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193d91906154e7565b73ffffffffffffffffffffffffffffffffffffffff1661478a565b60ff1687611967836001615931565b8151811061197757611977615a8c565b60200260200101818152505083600701818154811061199857611998615a8c565b6000918252602090912001546040517f465e81ec000000000000000000000000000000000000000000000000000000008152600481018c905273ffffffffffffffffffffffffffffffffffffffff9091169063465e81ec9060240160206040518083038186803b158015611a0b57600080fd5b505afa158015611a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4391906155e8565b86611a4f836001615931565b81518110611a5f57611a5f615a8c565b6020908102919091010152611a7381615a04565b905061165f565b50505050509193509193565b60005473ffffffffffffffffffffffffffffffffffffffff163314611b07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b600a811115611b72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f6164643a20746f6f206d616e79207265776172646572730000000000000000006044820152606401610763565b6103e861ffff85161115611be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6164643a206465706f7369742066656520746f6f2068696768000000000000006044820152606401610763565b62127500831115611c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6164643a20696e76616c6964206861727665737420696e74657276616c0000006044820152606401610763565b843b611cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f6164643a204c5020746f6b656e206d75737420626520612076616c696420636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610763565b60005b81811015611d7357611cfd838383818110610a7757610a77615a8c565b611d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6164643a207265776172646572206d75737420626520636f6e747261637400006044820152606401610763565b611d6c81615a04565b9050611ce0565b50611d7c613e24565b60006007544211611d8f57600754611d91565b425b90508660066000828254611da59190615931565b9250508190555060046040518061010001604052808873ffffffffffffffffffffffffffffffffffffffff168152602001898152602001838152602001600081526020018761ffff168152602001868152602001600081526020018585808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250939094525050835460018082018655948252602091829020845160089092020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911781558382015194810194909455604083015160028501556060830151600385015560808301516004850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90921691909117905560a0830151600585015560c0830151600685015560e08301518051939493611f1b935060078501929190910190615379565b5050508282604051611f2e9291906157ee565b60405190819003902060045473ffffffffffffffffffffffffffffffffffffffff881690611f5e906001906159c1565b604080518b815261ffff8a1660208201529081018890527f5ed295c4f5af5aeb1ccd905e1cd55a86ab3bb9fc1fe2346ff64ac47dbef366619060600160405180910390a450505050505050565b60026001541415612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b60026001556004548690811061208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b60006004888154811061209f5761209f615a8c565b6000918252602090912060089091020180546040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018a90526064810189905260ff8816608482015260a4810187905260c4810186905291925073ffffffffffffffffffffffffffffffffffffffff1690819063d505accf9060e401600060405180830381600087803b15801561214757600080fd5b505af115801561215b573d6000803e3d6000fd5b50505050612169898961487d565b50506001805550505050505050565b600260015414156121e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b60026001556121f381613e4a565b5060018055565b60026001541415612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b600260018190555060006004828154811061228457612284615a8c565b60009182526020808320858452600582526040808520338652909252922080546008929092029092016006810154909350811115612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f656d657267656e63792077697468647261773a20706f6f6c20746f74616c206e60448201527f6f7420656e6f75676800000000000000000000000000000000000000000000006064820152608401610763565b60008083556001830181905560028301819055600383018190556006840180548392906123729084906159c1565b90915550600090505b60078401548110156124455783600701818154811061239c5761239c615a8c565b60009182526020822001546040517fc6a7112800000000000000000000000000000000000000000000000000000000815260048101889052336024820152604481019290925273ffffffffffffffffffffffffffffffffffffffff169063c6a7112890606401600060405180830381600087803b15801561241c57600080fd5b505af1158015612430573d6000803e3d6000fd5b505050508061243e90615a04565b905061237b565b50600254835473ffffffffffffffffffffffffffffffffffffffff9081169116141561248357806009600082825461247d91906159c1565b90915550505b82546124a69073ffffffffffffffffffffffffffffffffffffffff163383614502565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200160405180910390a35050600180555050565b60026001541415612554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b6002600155612561613e24565b60018055565b60006004828154811061257c5761257c615a8c565b9060005260206000209060080201600601549050919050565b600b5473ffffffffffffffffffffffffffffffffffffffff163314612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f73657420747265617375727920616464726573733a206f6e6c7920707265766960448201527f6f757320747265617375727920616464726573732063616e2063616c6c20746860648201527f6973206d6574686f640000000000000000000000000000000000000000000000608482015260a401610763565b73ffffffffffffffffffffffffffffffffffffffff8116612705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f73657420747265617375727920616464726573733a20696e76616c6964206e6560448201527f77207472656173757279206164647265737300000000000000000000000000006064820152608401610763565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f61885cdba916be748ff3e3f6f15e4206153b8ea3b7acabade9d04b4063a8351090600090a350565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f736574207465616d20616464726573733a206f6e6c792070726576696f75732060448201527f7465616d20616464726573732063616e2063616c6c2074686973206d6574686f60648201527f6400000000000000000000000000000000000000000000000000000000000000608482015260a401610763565b73ffffffffffffffffffffffffffffffffffffffff81166128e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f736574207465616d20616464726573733a20696e76616c6964206e657720746560448201527f616d2061646472657373000000000000000000000000000000000000000000006064820152608401610763565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f42fbc17d847fdc3e5c82da842a5ef3979c64f3b94cd4e7382310fd5525c6ee0f90600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1633146129d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6129e26000614d5a565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314612a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6103e8811115612af7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f73657420696e766573746f722070657263656e743a20696e76616c696420706560448201527f7263656e742076616c75650000000000000000000000000000000000000000006064820152608401610763565b6103e8600e5482600d54612b0b9190615931565b612b159190615931565b1115612ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f73657420696e766573746f722070657263656e743a20746f74616c207065726360448201527f656e74206f766572206d617800000000000000000000000000000000000000006064820152608401610763565b600f5460408051918252602082018390527f905b464403a98b455243c8b4d30c545b8fbd70cda670142b9326425b2c039f3b910160405180910390a1600f55565b60005473ffffffffffffffffffffffffffffffffffffffff163314612c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6103e8811115612cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f7365742074726561737572792070657263656e743a20696e76616c696420706560448201527f7263656e742076616c75650000000000000000000000000000000000000000006064820152608401610763565b6103e8600f5482600d54612d0b9190615931565b612d159190615931565b1115612da3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f7365742074726561737572792070657263656e743a20746f74616c207065726360448201527f656e74206f766572206d617800000000000000000000000000000000000000006064820152608401610763565b600e5460408051918252602082018390527fa565895c0101fca10e6a7b85742e56cf52ac5f58b09ce030425d3555b47069fd910160405180910390a1600e55565b60005473ffffffffffffffffffffffffffffffffffffffff163314612e65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6103e8811115612ef7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f736574207465616d2070657263656e743a20696e76616c69642070657263656e60448201527f742076616c7565000000000000000000000000000000000000000000000000006064820152608401610763565b6103e8600f5482600e54612f0b9190615931565b612f159190615931565b1115612fa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f736574207465616d2070657263656e743a20746f74616c2070657263656e742060448201527f6f766572206d61780000000000000000000000000000000000000000000000006064820152608401610763565b600d5460408051918252602082018390527f204a076f4a2e4e5e646bb8841cc285306bf747e277f40dbfd5750e782e17b7a6910160405180910390a1600d55565b60005473ffffffffffffffffffffffffffffffffffffffff163314613065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b60075442106130f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f7374617274206661726d696e673a206661726d207374617274656420616c726560448201527f61647900000000000000000000000000000000000000000000000000000000006064820152608401610763565b60045460005b818110156131445760006004828154811061311957613119615a8c565b90600052602060002090600802019050428160020181905550508061313d90615a04565b90506130fc565b505042600755565b600260015414156131b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b6002600155601e811115613229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f68617276657374206d616e793a20746f6f206d616e7920706f6f6c20696473006044820152606401610763565b60005b818110156132675761325783838381811061324957613249615a8c565b90506020020135600061487d565b61326081615a04565b905061322c565b50506001805550565b600260015414156132dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b60026001556132ec828261487d565b505060018055565b60005473ffffffffffffffffffffffffffffffffffffffff163314613375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b61337d613e24565b3373ffffffffffffffffffffffffffffffffffffffff167f802633c8d26237616d81bdac01bc40fcdf36e098832601582ec19d7e431c5ef3600484815481106133c8576133c8615a8c565b906000526020600020906008020160010154836040516133f2929190918252602082015260400190565b60405180910390a2806004838154811061340e5761340e615a8c565b90600052602060002090600802016001015460065461342d91906159c1565b6134379190615931565b600681905550806004838154811061345157613451615a8c565b9060005260206000209060080201600101819055505050565b600454606090829081106134da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b6000600484815481106134ef576134ef615a8c565b90600052602060002090600802019050806007018054905067ffffffffffffffff81111561351f5761351f615abb565b604051908082528060200260200182016040528015613548578160200160208202803683370190505b50925060005b60078201548110156135e15781600701818154811061356f5761356f615a8c565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168482815181106135ac576135ac615a8c565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526135da81615a04565b905061354e565b505050919050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461366a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b73ffffffffffffffffffffffffffffffffffffffff811661370d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610763565b61371681614d5a565b50565b60608060608085600480549050811061378e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b6000600488815481106137a3576137a3615a8c565b600091825260208083208b845260058252604080852073ffffffffffffffffffffffffffffffffffffffff8d168652909252922060036008909202909201908101546006820154600283015492945090914211801561380157508015155b156138d757600084600201544261381891906159c1565b905060006103e890506000600f54600e54600d548461383791906159c1565b61384191906159c1565b61384b91906159c1565b9050600082600654838a60010154600354886138679190615984565b6138719190615984565b61387b9190615984565b6138859190615949565b61388f9190615949565b9050846138bc7f000000000000000000000000000000000000000000000000000000000000000083615984565b6138c69190615949565b6138d09087615931565b9550505050505b6000836002015484600101547f00000000000000000000000000000000000000000000000000000000000000008587600001546139149190615984565b61391e9190615949565b61392891906159c1565b6139329190615931565b6007860154909150613945906001615931565b67ffffffffffffffff81111561395d5761395d615abb565b604051908082528060200260200182016040528015613986578160200160208202803683370190505b506007860154909a5061399a906001615931565b67ffffffffffffffff8111156139b2576139b2615abb565b6040519080825280602002602001820160405280156139e557816020015b60608152602001906001900390816139d05790505b5060078601549099506139f9906001615931565b67ffffffffffffffff811115613a1157613a11615abb565b604051908082528060200260200182016040528015613a3a578160200160208202803683370190505b506007860154909750613a4e906001615931565b67ffffffffffffffff811115613a6657613a66615abb565b604051908082528060200260200182016040528015613a8f578160200160208202803683370190505b506002548b5191995073ffffffffffffffffffffffffffffffffffffffff16908b90600090613ac057613ac0615a8c565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600254613af09116614672565b89600081518110613b0357613b03615a8c565b6020908102919091010152600254613b309073ffffffffffffffffffffffffffffffffffffffff1661478a565b60ff1688600081518110613b4657613b46615a8c565b6020026020010181815250508087600081518110613b6657613b66615a8c565b60200260200101818152505060005b6007860154811015613e1457856007018181548110613b9657613b96615a8c565b60009182526020918290200154604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263f7c618c192600480840193829003018186803b158015613c0557600080fd5b505afa158015613c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c3d91906154e7565b8b613c49836001615931565b81518110613c5957613c59615a8c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cab86600701828154811061179557611795615a8c565b8a613cb7836001615931565b81518110613cc757613cc7615a8c565b6020026020010181905250613cea86600701828154811061189657611896615a8c565b60ff1689613cf9836001615931565b81518110613d0957613d09615a8c565b602002602001018181525050856007018181548110613d2a57613d2a615a8c565b6000918252602090912001546040517fffcd4263000000000000000000000000000000000000000000000000000000008152600481018f905273ffffffffffffffffffffffffffffffffffffffff8e811660248301529091169063ffcd42639060440160206040518083038186803b158015613da557600080fd5b505afa158015613db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ddd91906155e8565b88613de9836001615931565b81518110613df957613df9615a8c565b6020908102919091010152613e0d81615a04565b9050613b75565b5050505050505092959194509250565b60005b60045481101561371657613e3a81613e4a565b613e4381615a04565b9050613e27565b60045481908110613eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b600060048381548110613ecc57613ecc615a8c565b9060005260206000209060080201905080600201544211613eec57505050565b6006810154801580613f0057506001820154155b15613f115750426002909101555050565b6000826002015442613f2391906159c1565b90506000600654846001015460035484613f3d9190615984565b613f479190615984565b613f519190615949565b905060006103e890506000600f54600e54600d5484613f7091906159c1565b613f7a91906159c1565b613f8491906159c1565b600254600a54600d5492935073ffffffffffffffffffffffffffffffffffffffff918216926340c10f1992909116908590613fbf9088615984565b613fc99190615949565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561403457600080fd5b505af1158015614048573d6000803e3d6000fd5b5050600254600b54600e5473ffffffffffffffffffffffffffffffffffffffff92831694506340c10f19935091169085906140839088615984565b61408d9190615949565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1580156140f857600080fd5b505af115801561410c573d6000803e3d6000fd5b5050600254600c54600f5473ffffffffffffffffffffffffffffffffffffffff92831694506340c10f19935091169085906141479088615984565b6141519190615949565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1580156141bc57600080fd5b505af11580156141d0573d6000803e3d6000fd5b505060025473ffffffffffffffffffffffffffffffffffffffff1691506340c10f19905030846142008588615984565b61420a9190615949565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561427557600080fd5b505af1158015614289573d6000803e3d6000fd5b5050506006870154839150826142bf7f000000000000000000000000000000000000000000000000000000000000000087615984565b6142c99190615984565b6142d39190615949565b6142dd9190615949565b8660030160008282546142f09190615931565b909155505042600287018190556003870154604080519283526020830188905282015288907f3be3541fc42237d611b30329040bfa4569541d156560acdbbae57640d20b8f469060600160405180910390a25050505050505b5050565b60006004828154811061436257614362615a8c565b60009182526020808320858452600582526040808520338652909252922060038101546008909202909201925015801561439e57506007544210155b156143b85760058201546143b29042615931565b60038201555b600081600101547f0000000000000000000000000000000000000000000000000000000000000000846003015484600001546143f49190615984565b6143fe9190615949565b61440891906159c1565b90506144148433610c7f565b1561448c57600081118061442c575060008260020154115b156144875760008260020154826144439190615931565b905082600201546008600082825461445b91906159c1565b90915550506000600284015560058401546144769042615931565b60038401556144853382614dcf565b505b6144fc565b80156144fc5780600860008282546144a49190615931565b92505081905550808260020160008282546144bf9190615931565b9091555050604051818152849033907fee470483107f579a55c754fa00613c45a9a3b617a418b39cb0be97e5381ba7c19060200160405180910390a35b50505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691614599919061583d565b6000604051808303816000865af19150503d80600081146145d6576040519150601f19603f3d011682016040523d82523d6000602084013e6145db565b606091505b509150915081801561460557508051158061460557508080602001905181019061460591906154c5565b61466b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f426f72696e6745524332303a205472616e73666572206661696c6564000000006044820152606401610763565b5050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff8616916146f4919061583d565b600060405180830381855afa9150503d806000811461472f576040519150601f19603f3d011682016040523d82523d6000602084013e614734565b606091505b509150915081614779576040518060400160405280600381526020017f3f3f3f0000000000000000000000000000000000000000000000000000000000815250614782565b61478281614f85565b949350505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff86169161480b919061583d565b600060405180830381855afa9150503d8060008114614846576040519150601f19603f3d011682016040523d82523d6000602084013e61484b565b606091505b509150915081801561485e575080516020145b614869576012614782565b808060200190518101906147829190615750565b600454829081106148ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b600754421015614956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6465706f7369743a206661726d696e67206e6f742073746172746564000000006044820152606401610763565b60006004848154811061496b5761496b615a8c565b6000918252602080832087845260058252604080852033865290925292206008909102909101915061499c85613e4a565b6149a58561434d565b8315614be85781546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b158015614a1457600080fd5b505afa158015614a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a4c91906155e8565b8354909150614a739073ffffffffffffffffffffffffffffffffffffffff16333088615178565b82546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b158015614adc57600080fd5b505afa158015614af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b1491906155e8565b9050614b2082826159c1565b600485015490965061ffff1615614b8f57600484015460009061271090614b4b9061ffff1689615984565b614b559190615949565b600b548654919250614b819173ffffffffffffffffffffffffffffffffffffffff908116911683614502565b614b8b81886159c1565b9650505b85836000016000828254614ba39190615931565b9091555050600254845473ffffffffffffffffffffffffffffffffffffffff90811691161415614be5578560096000828254614bdf9190615931565b90915550505b50505b600382015481547f000000000000000000000000000000000000000000000000000000000000000091614c1a91615984565b614c249190615949565b600182015560005b6007830154811015614cfb57826007018181548110614c4d57614c4d615a8c565b60009182526020909120015482546040517fc6a7112800000000000000000000000000000000000000000000000000000000815260048101899052336024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063c6a7112890606401600060405180830381600087803b158015614cd257600080fd5b505af1158015614ce6573d6000803e3d6000fd5b5050505080614cf490615a04565b9050614c2c565b508315614d1c5783826006016000828254614d169190615931565b90915550505b604051848152859033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a35050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009546002546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a082319060240160206040518083038186803b158015614e3b57600080fd5b505afa158015614e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e7391906155e8565b1115614349576009546002546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000929173ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b158015614ee757600080fd5b505afa158015614efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f1f91906155e8565b614f2991906159c1565b9050808210614f5b57600254614f569073ffffffffffffffffffffffffffffffffffffffff168483614502565b505050565b8115614f5657600254614f569073ffffffffffffffffffffffffffffffffffffffff168484614502565b60606040825110614faa5781806020019051810190614fa49190615504565b92915050565b81516020141561513a5760005b60208160ff161080156150045750828160ff1681518110614fda57614fda615a8c565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b1561501b578061501381615a3d565b915050614fb7565b60008160ff1667ffffffffffffffff81111561503957615039615abb565b6040519080825280601f01601f191660200182016040528015615063576020820181803683370190505b509050600091505b60208260ff161080156150b85750838260ff168151811061508e5761508e615a8c565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b1561513357838260ff16815181106150d2576150d2615a8c565b602001015160f81c60f81b818360ff16815181106150f2576150f2615a8c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508161512b81615a3d565b92505061506b565b9392505050565b505060408051808201909152600381527f3f3f3f0000000000000000000000000000000000000000000000000000000000602082015290565b919050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790529151600092839290881691615217919061583d565b6000604051808303816000865af19150503d8060008114615254576040519150601f19603f3d011682016040523d82523d6000602084013e615259565b606091505b509150915081801561528357508051158061528357508080602001905181019061528391906154c5565b6152e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f426f72696e6745524332303a205472616e7366657246726f6d206661696c65646044820152606401610763565b505050505050565b828054828255906000526020600020908101928215615369579160200282015b828111156153695781547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff843516178255602090920191600190910190615311565b506153759291506153f3565b5090565b828054828255906000526020600020908101928215615369579160200282015b8281111561536957825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190615399565b5b8082111561537557600081556001016153f4565b60008083601f84011261541a57600080fd5b50813567ffffffffffffffff81111561543257600080fd5b6020830191508360208260051b850101111561544d57600080fd5b9250929050565b803561ffff8116811461517357600080fd5b60006020828403121561547857600080fd5b813561513381615aea565b6000806020838503121561549657600080fd5b823567ffffffffffffffff8111156154ad57600080fd5b6154b985828601615408565b90969095509350505050565b6000602082840312156154d757600080fd5b8151801515811461513357600080fd5b6000602082840312156154f957600080fd5b815161513381615aea565b60006020828403121561551657600080fd5b815167ffffffffffffffff8082111561552e57600080fd5b818401915084601f83011261554257600080fd5b81518181111561555457615554615abb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561559a5761559a615abb565b816040528281528760208487010111156155b357600080fd5b6155c48360208301602088016159d8565b979650505050505050565b6000602082840312156155e157600080fd5b5035919050565b6000602082840312156155fa57600080fd5b5051919050565b6000806040838503121561561457600080fd5b82359150602083013561562681615aea565b809150509250929050565b60008060008060008060a0878903121561564a57600080fd5b86359550602087013561565c81615aea565b945061566a60408801615454565b935060608701359250608087013567ffffffffffffffff81111561568d57600080fd5b61569989828a01615408565b979a9699509497509295939492505050565b600080604083850312156156be57600080fd5b50508035926020909101359150565b60008060008060008060a087890312156156e657600080fd5b863595506020870135945061566a60408801615454565b60008060008060008060c0878903121561571657600080fd5b863595506020870135945060408701359350606087013561573681615b0c565b9598949750929560808101359460a0909101359350915050565b60006020828403121561576257600080fd5b815161513381615b0c565b600081518084526020808501945080840160005b838110156157b357815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101615781565b509495945050505050565b600081518084526020808501945080840160005b838110156157b3578151875295820195908201906001016157d2565b60008184825b8581101561583257813561580781615aea565b73ffffffffffffffffffffffffffffffffffffffff16835260209283019291909101906001016157f4565b509095945050505050565b6000825161584f8184602087016159d8565b9190910192915050565b602081526000615133602083018461576d565b60808152600061587f608083018761576d565b6020838203818501528187518084528284019150828160051b850101838a0160005b83811015615905577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080888503018652825180518086526158e7818a88018b85016159d8565b96880196601f019091169390930186019250908501906001016158a1565b50508681036040880152615919818a6157be565b94505050505082810360608401526155c481856157be565b6000821982111561594457615944615a5d565b500190565b60008261597f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156159bc576159bc615a5d565b500290565b6000828210156159d3576159d3615a5d565b500390565b60005b838110156159f35781810151838201526020016159db565b838111156144fc5750506000910152565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615a3657615a36615a5d565b5060010190565b600060ff821660ff811415615a5457615a54615a5d565b60010192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461371657600080fd5b60ff8116811461371657600080fdfea264697066735822122059a7eb1fea2e75d6a2615da073451a52d915f10c8fabcf78334fdf5e90b9ac6e64736f6c63430008070033000000000000000000000000e3e43888fa7803cdc7bea478ab327cf1a0dc11a7000000000000000000000000000000000000000000000000e0e02c25c46e0000000000000000000000000000d637506a7cadb8fd22d29192677444a88afda89100000000000000000000000068cab49f2846f9fe6ea0461cfc9dc9660ee12466000000000000000000000000e3f205ab0c931f8229a30f350934a745384063ea000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102e95760003560e01c80636605bfda11610191578063c196ca8c116100e3578063e2bbb15811610097578063eff8976b11610071578063eff8976b146106a0578063f2fde38b146106c0578063ffcd4263146106d357600080fd5b8063e2bbb15814610671578063e6fd48bc14610684578063eddf96521461068d57600080fd5b8063dc640ac9116100c8578063dc640ac91461064b578063de73149d1461065e578063e164ac501461066857600080fd5b8063c196ca8c1461060b578063c5f956af1461062b57600080fd5b806389a2bc2511610145578063949e63021161011f578063949e6302146105e7578063acfdf41e146105fa578063afbcfea11461060357600080fd5b806389a2bc25146105565780638da5cb5b1461056957806393f1a40b1461058757600080fd5b8063715018a611610176578063715018a61461051f578063812c64f114610527578063876d3c9c1461054357600080fd5b80636605bfda146104f95780636690864e1461050c57600080fd5b806342602f1e1161024a578063515bc323116101fe5780635415d1ea116101d85780635415d1ea146104d5578063630b5ba1146104de578063654c9ece146104e657600080fd5b8063515bc3231461049c57806351eb05a6146104af5780635312ea8e146104c257600080fd5b8063465e81ec1161022f578063465e81ec1461045d578063474fa63014610480578063508593ab1461048957600080fd5b806342602f1e14610437578063441a3e701461044a57600080fd5b80631526fe27116102a15780631c75f085116102865780631c75f085146103e15780632081ccc4146104015780632e6c998d1461041457600080fd5b80631526fe271461037557806317caf6f1146103d857600080fd5b8063081e3eda116102d2578063081e3eda146103135780630ba84cd21461031b57806312e228fd1461033057600080fd5b806304ef9d58146102ee5780630735b2081461030a575b600080fd5b6102f7600e5481565b6040519081526020015b60405180910390f35b6102f7600f5481565b6004546102f7565b61032e6103293660046155cf565b6106e6565b005b600c546103509073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b6103886103833660046155cf565b6107b7565b6040805173ffffffffffffffffffffffffffffffffffffffff9098168852602088019690965294860193909352606085019190915261ffff16608084015260a083015260c082015260e001610301565b6102f760065481565b600a546103509073ffffffffffffffffffffffffffffffffffffffff1681565b61032e61040f3660046156cd565b610821565b610427610422366004615601565b610c7f565b6040519015158152602001610301565b61032e610445366004615466565b610d3d565b61032e6104583660046156ab565b610f1e565b61047061046b3660046155cf565b61131a565b604051610301949392919061586c565b6102f760085481565b61032e610497366004615631565b611a86565b61032e6104aa3660046156fd565b611fab565b61032e6104bd3660046155cf565b612178565b61032e6104d03660046155cf565b6121fa565b6102f760095481565b61032e6124e7565b6102f76104f43660046155cf565b612567565b61032e610507366004615466565b612595565b61032e61051a366004615466565b612776565b61032e612957565b6105306103e881565b60405161ffff9091168152602001610301565b61032e6105513660046155cf565b6129e4565b61032e6105643660046155cf565b612be4565b60005473ffffffffffffffffffffffffffffffffffffffff16610350565b6105c7610595366004615601565b600560209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610301565b61032e6105f53660046155cf565b612de4565b6102f760035481565b61032e612fe4565b6002546103509073ffffffffffffffffffffffffffffffffffffffff1681565b600b546103509073ffffffffffffffffffffffffffffffffffffffff1681565b61032e610659366004615483565b61314c565b6102f76212750081565b6102f7600d5481565b61032e61067f3660046156ab565b613270565b6102f760075481565b61032e61069b3660046156ab565b6132f4565b6106b36106ae3660046155cf565b61346a565b6040516103019190615859565b61032e6106ce366004615466565b6135e9565b6104706106e1366004615601565b613719565b60005473ffffffffffffffffffffffffffffffffffffffff16331461076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610774613e24565b600354604080519182526020820183905233917feedc6338c9c1ad8f3cd6c90dd09dbe98dbd57e610d3e59a17996d07acb0d9511910160405180910390a2600355565b600481815481106107c757600080fd5b6000918252602090912060089091020180546001820154600283015460038401546004850154600586015460069096015473ffffffffffffffffffffffffffffffffffffffff909516965092949193909261ffff16919087565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6004548690811061090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b600a82111561097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f7365743a20746f6f206d616e79207265776172646572730000000000000000006044820152606401610763565b6103e861ffff861611156109ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f7365743a206465706f7369742066656520746f6f2068696768000000000000006044820152606401610763565b62127500841115610a57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f7365743a20696e76616c6964206861727665737420696e74657276616c0000006044820152606401610763565b60005b82811015610b0857610a92848483818110610a7757610a77615a8c565b9050602002016020810190610a8c9190615466565b3b151590565b610af8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f7365743a207265776172646572206d75737420626520636f6e747261637400006044820152606401610763565b610b0181615a04565b9050610a5a565b50610b11613e24565b8560048881548110610b2557610b25615a8c565b906000526020600020906008020160010154600654610b4491906159c1565b610b4e9190615931565b6006819055508560048881548110610b6857610b68615a8c565b9060005260206000209060080201600101819055508460048881548110610b9157610b91615a8c565b906000526020600020906008020160040160006101000a81548161ffff021916908361ffff1602179055508360048881548110610bd057610bd0615a8c565b906000526020600020906008020160050181905550828260048981548110610bfa57610bfa615a8c565b90600052602060002090600802016007019190610c189291906152f1565b508282604051610c299291906157ee565b6040805191829003822088835261ffff881660208401529082018690529088907f5ed6f0deef9ab49d02900b40d596df4cd637a2a7fbfa56bbcb377389d3ce8d289060600160405180910390a350505050505050565b60045460009083908110610cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b600084815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290206007544210801590610d34575080600301544210155b95945050505050565b600c5473ffffffffffffffffffffffffffffffffffffffff163314610e0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f73657420696e766573746f7220616464726573733a206f6e6c7920707265766960448201527f6f757320696e766573746f722063616e2063616c6c2074686973206d6574686f60648201527f6400000000000000000000000000000000000000000000000000000000000000608482015260a401610763565b73ffffffffffffffffffffffffffffffffffffffff8116610ead576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f73657420696e766573746f7220616464726573733a20696e76616c6964206e6560448201527f7720696e766573746f72206164647265737300000000000000000000000000006064820152608401610763565b600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f6260cb34f06b782e83bde168f7d74ab2133041cb53b63ce22b127822a92b679190600090a350565b60026001541415610f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b600260015560045482908110610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b60006004848154811061101257611012615a8c565b6000918252602080832087845260058252604080852033865290925292208054600890920290920192508411156110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f77697468647261773a207573657220616d6f756e74206e6f7420656e6f7567686044820152606401610763565b8382600601541015611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f77697468647261773a20706f6f6c20746f74616c206e6f7420656e6f756768006044820152606401610763565b61111c85613e4a565b6111258561434d565b83156111a4578381600001600082825461113f91906159c1565b9091555050600254825473ffffffffffffffffffffffffffffffffffffffff9081169116141561118157836009600082825461117b91906159c1565b90915550505b81546111a49073ffffffffffffffffffffffffffffffffffffffff163386614502565b600382015481547f000000000000000000000000000000000000000000000000000000e8d4a51000916111d691615984565b6111e09190615949565b600182015560005b60078301548110156112b75782600701818154811061120957611209615a8c565b60009182526020909120015482546040517fc6a7112800000000000000000000000000000000000000000000000000000000815260048101899052336024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063c6a7112890606401600060405180830381600087803b15801561128e57600080fd5b505af11580156112a2573d6000803e3d6000fd5b50505050806112b090615a04565b90506111e8565b5083156112d857838260060160008282546112d291906159c1565b90915550505b604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a3505060018055505050565b60608060608084600480549050811061138f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b6000600487815481106113a4576113a4615a8c565b90600052602060002090600802019050806007018054905060016113c89190615931565b67ffffffffffffffff8111156113e0576113e0615abb565b604051908082528060200260200182016040528015611409578160200160208202803683370190505b50600782015490965061141d906001615931565b67ffffffffffffffff81111561143557611435615abb565b60405190808252806020026020018201604052801561146857816020015b60608152602001906001900390816114535790505b50600782015490955061147c906001615931565b67ffffffffffffffff81111561149457611494615abb565b6040519080825280602002602001820160405280156114bd578160200160208202803683370190505b5060078201549094506114d1906001615931565b67ffffffffffffffff8111156114e9576114e9615abb565b604051908082528060200260200182016040528015611512578160200160208202803683370190505b50600254875191945073ffffffffffffffffffffffffffffffffffffffff1690879060009061154357611543615a8c565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526002546115739116614672565b8560008151811061158657611586615a8c565b60209081029190910101526002546115b39073ffffffffffffffffffffffffffffffffffffffff1661478a565b60ff16846000815181106115c9576115c9615a8c565b60200260200101818152505060006103e890506000600f54600e54600d54846115f291906159c1565b6115fc91906159c1565b61160691906159c1565b90508160065482600354866001015461161f9190615984565b6116299190615984565b6116339190615949565b61163d9190615949565b8560008151811061165057611650615a8c565b60200260200101818152505060005b6007840154811015611a7a5783600701818154811061168057611680615a8c565b60009182526020918290200154604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263f7c618c192600480840193829003018186803b1580156116ef57600080fd5b505afa158015611703573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172791906154e7565b89611733836001615931565b8151811061174357611743615a8c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061185784600701828154811061179557611795615a8c565b60009182526020918290200154604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263f7c618c192600480840193829003018186803b15801561180457600080fd5b505afa158015611818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183c91906154e7565b73ffffffffffffffffffffffffffffffffffffffff16614672565b88611863836001615931565b8151811061187357611873615a8c565b602002602001018190525061195884600701828154811061189657611896615a8c565b60009182526020918290200154604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263f7c618c192600480840193829003018186803b15801561190557600080fd5b505afa158015611919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193d91906154e7565b73ffffffffffffffffffffffffffffffffffffffff1661478a565b60ff1687611967836001615931565b8151811061197757611977615a8c565b60200260200101818152505083600701818154811061199857611998615a8c565b6000918252602090912001546040517f465e81ec000000000000000000000000000000000000000000000000000000008152600481018c905273ffffffffffffffffffffffffffffffffffffffff9091169063465e81ec9060240160206040518083038186803b158015611a0b57600080fd5b505afa158015611a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4391906155e8565b86611a4f836001615931565b81518110611a5f57611a5f615a8c565b6020908102919091010152611a7381615a04565b905061165f565b50505050509193509193565b60005473ffffffffffffffffffffffffffffffffffffffff163314611b07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b600a811115611b72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f6164643a20746f6f206d616e79207265776172646572730000000000000000006044820152606401610763565b6103e861ffff85161115611be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6164643a206465706f7369742066656520746f6f2068696768000000000000006044820152606401610763565b62127500831115611c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6164643a20696e76616c6964206861727665737420696e74657276616c0000006044820152606401610763565b843b611cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f6164643a204c5020746f6b656e206d75737420626520612076616c696420636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610763565b60005b81811015611d7357611cfd838383818110610a7757610a77615a8c565b611d63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f6164643a207265776172646572206d75737420626520636f6e747261637400006044820152606401610763565b611d6c81615a04565b9050611ce0565b50611d7c613e24565b60006007544211611d8f57600754611d91565b425b90508660066000828254611da59190615931565b9250508190555060046040518061010001604052808873ffffffffffffffffffffffffffffffffffffffff168152602001898152602001838152602001600081526020018761ffff168152602001868152602001600081526020018585808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250939094525050835460018082018655948252602091829020845160089092020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911781558382015194810194909455604083015160028501556060830151600385015560808301516004850180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90921691909117905560a0830151600585015560c0830151600685015560e08301518051939493611f1b935060078501929190910190615379565b5050508282604051611f2e9291906157ee565b60405190819003902060045473ffffffffffffffffffffffffffffffffffffffff881690611f5e906001906159c1565b604080518b815261ffff8a1660208201529081018890527f5ed295c4f5af5aeb1ccd905e1cd55a86ab3bb9fc1fe2346ff64ac47dbef366619060600160405180910390a450505050505050565b60026001541415612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b60026001556004548690811061208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b60006004888154811061209f5761209f615a8c565b6000918252602090912060089091020180546040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018a90526064810189905260ff8816608482015260a4810187905260c4810186905291925073ffffffffffffffffffffffffffffffffffffffff1690819063d505accf9060e401600060405180830381600087803b15801561214757600080fd5b505af115801561215b573d6000803e3d6000fd5b50505050612169898961487d565b50506001805550505050505050565b600260015414156121e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b60026001556121f381613e4a565b5060018055565b60026001541415612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b600260018190555060006004828154811061228457612284615a8c565b60009182526020808320858452600582526040808520338652909252922080546008929092029092016006810154909350811115612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f656d657267656e63792077697468647261773a20706f6f6c20746f74616c206e60448201527f6f7420656e6f75676800000000000000000000000000000000000000000000006064820152608401610763565b60008083556001830181905560028301819055600383018190556006840180548392906123729084906159c1565b90915550600090505b60078401548110156124455783600701818154811061239c5761239c615a8c565b60009182526020822001546040517fc6a7112800000000000000000000000000000000000000000000000000000000815260048101889052336024820152604481019290925273ffffffffffffffffffffffffffffffffffffffff169063c6a7112890606401600060405180830381600087803b15801561241c57600080fd5b505af1158015612430573d6000803e3d6000fd5b505050508061243e90615a04565b905061237b565b50600254835473ffffffffffffffffffffffffffffffffffffffff9081169116141561248357806009600082825461247d91906159c1565b90915550505b82546124a69073ffffffffffffffffffffffffffffffffffffffff163383614502565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200160405180910390a35050600180555050565b60026001541415612554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b6002600155612561613e24565b60018055565b60006004828154811061257c5761257c615a8c565b9060005260206000209060080201600601549050919050565b600b5473ffffffffffffffffffffffffffffffffffffffff163314612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f73657420747265617375727920616464726573733a206f6e6c7920707265766960448201527f6f757320747265617375727920616464726573732063616e2063616c6c20746860648201527f6973206d6574686f640000000000000000000000000000000000000000000000608482015260a401610763565b73ffffffffffffffffffffffffffffffffffffffff8116612705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f73657420747265617375727920616464726573733a20696e76616c6964206e6560448201527f77207472656173757279206164647265737300000000000000000000000000006064820152608401610763565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f61885cdba916be748ff3e3f6f15e4206153b8ea3b7acabade9d04b4063a8351090600090a350565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f736574207465616d20616464726573733a206f6e6c792070726576696f75732060448201527f7465616d20616464726573732063616e2063616c6c2074686973206d6574686f60648201527f6400000000000000000000000000000000000000000000000000000000000000608482015260a401610763565b73ffffffffffffffffffffffffffffffffffffffff81166128e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f736574207465616d20616464726573733a20696e76616c6964206e657720746560448201527f616d2061646472657373000000000000000000000000000000000000000000006064820152608401610763565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f42fbc17d847fdc3e5c82da842a5ef3979c64f3b94cd4e7382310fd5525c6ee0f90600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1633146129d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6129e26000614d5a565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314612a65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6103e8811115612af7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f73657420696e766573746f722070657263656e743a20696e76616c696420706560448201527f7263656e742076616c75650000000000000000000000000000000000000000006064820152608401610763565b6103e8600e5482600d54612b0b9190615931565b612b159190615931565b1115612ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f73657420696e766573746f722070657263656e743a20746f74616c207065726360448201527f656e74206f766572206d617800000000000000000000000000000000000000006064820152608401610763565b600f5460408051918252602082018390527f905b464403a98b455243c8b4d30c545b8fbd70cda670142b9326425b2c039f3b910160405180910390a1600f55565b60005473ffffffffffffffffffffffffffffffffffffffff163314612c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6103e8811115612cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f7365742074726561737572792070657263656e743a20696e76616c696420706560448201527f7263656e742076616c75650000000000000000000000000000000000000000006064820152608401610763565b6103e8600f5482600d54612d0b9190615931565b612d159190615931565b1115612da3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f7365742074726561737572792070657263656e743a20746f74616c207065726360448201527f656e74206f766572206d617800000000000000000000000000000000000000006064820152608401610763565b600e5460408051918252602082018390527fa565895c0101fca10e6a7b85742e56cf52ac5f58b09ce030425d3555b47069fd910160405180910390a1600e55565b60005473ffffffffffffffffffffffffffffffffffffffff163314612e65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b6103e8811115612ef7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f736574207465616d2070657263656e743a20696e76616c69642070657263656e60448201527f742076616c7565000000000000000000000000000000000000000000000000006064820152608401610763565b6103e8600f5482600e54612f0b9190615931565b612f159190615931565b1115612fa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f736574207465616d2070657263656e743a20746f74616c2070657263656e742060448201527f6f766572206d61780000000000000000000000000000000000000000000000006064820152608401610763565b600d5460408051918252602082018390527f204a076f4a2e4e5e646bb8841cc285306bf747e277f40dbfd5750e782e17b7a6910160405180910390a1600d55565b60005473ffffffffffffffffffffffffffffffffffffffff163314613065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b60075442106130f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f7374617274206661726d696e673a206661726d207374617274656420616c726560448201527f61647900000000000000000000000000000000000000000000000000000000006064820152608401610763565b60045460005b818110156131445760006004828154811061311957613119615a8c565b90600052602060002090600802019050428160020181905550508061313d90615a04565b90506130fc565b505042600755565b600260015414156131b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b6002600155601e811115613229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f68617276657374206d616e793a20746f6f206d616e7920706f6f6c20696473006044820152606401610763565b60005b818110156132675761325783838381811061324957613249615a8c565b90506020020135600061487d565b61326081615a04565b905061322c565b50506001805550565b600260015414156132dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610763565b60026001556132ec828261487d565b505060018055565b60005473ffffffffffffffffffffffffffffffffffffffff163314613375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b61337d613e24565b3373ffffffffffffffffffffffffffffffffffffffff167f802633c8d26237616d81bdac01bc40fcdf36e098832601582ec19d7e431c5ef3600484815481106133c8576133c8615a8c565b906000526020600020906008020160010154836040516133f2929190918252602082015260400190565b60405180910390a2806004838154811061340e5761340e615a8c565b90600052602060002090600802016001015460065461342d91906159c1565b6134379190615931565b600681905550806004838154811061345157613451615a8c565b9060005260206000209060080201600101819055505050565b600454606090829081106134da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b6000600484815481106134ef576134ef615a8c565b90600052602060002090600802019050806007018054905067ffffffffffffffff81111561351f5761351f615abb565b604051908082528060200260200182016040528015613548578160200160208202803683370190505b50925060005b60078201548110156135e15781600701818154811061356f5761356f615a8c565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168482815181106135ac576135ac615a8c565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526135da81615a04565b905061354e565b505050919050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461366a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610763565b73ffffffffffffffffffffffffffffffffffffffff811661370d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610763565b61371681614d5a565b50565b60608060608085600480549050811061378e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b6000600488815481106137a3576137a3615a8c565b600091825260208083208b845260058252604080852073ffffffffffffffffffffffffffffffffffffffff8d168652909252922060036008909202909201908101546006820154600283015492945090914211801561380157508015155b156138d757600084600201544261381891906159c1565b905060006103e890506000600f54600e54600d548461383791906159c1565b61384191906159c1565b61384b91906159c1565b9050600082600654838a60010154600354886138679190615984565b6138719190615984565b61387b9190615984565b6138859190615949565b61388f9190615949565b9050846138bc7f000000000000000000000000000000000000000000000000000000e8d4a5100083615984565b6138c69190615949565b6138d09087615931565b9550505050505b6000836002015484600101547f000000000000000000000000000000000000000000000000000000e8d4a510008587600001546139149190615984565b61391e9190615949565b61392891906159c1565b6139329190615931565b6007860154909150613945906001615931565b67ffffffffffffffff81111561395d5761395d615abb565b604051908082528060200260200182016040528015613986578160200160208202803683370190505b506007860154909a5061399a906001615931565b67ffffffffffffffff8111156139b2576139b2615abb565b6040519080825280602002602001820160405280156139e557816020015b60608152602001906001900390816139d05790505b5060078601549099506139f9906001615931565b67ffffffffffffffff811115613a1157613a11615abb565b604051908082528060200260200182016040528015613a3a578160200160208202803683370190505b506007860154909750613a4e906001615931565b67ffffffffffffffff811115613a6657613a66615abb565b604051908082528060200260200182016040528015613a8f578160200160208202803683370190505b506002548b5191995073ffffffffffffffffffffffffffffffffffffffff16908b90600090613ac057613ac0615a8c565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152600254613af09116614672565b89600081518110613b0357613b03615a8c565b6020908102919091010152600254613b309073ffffffffffffffffffffffffffffffffffffffff1661478a565b60ff1688600081518110613b4657613b46615a8c565b6020026020010181815250508087600081518110613b6657613b66615a8c565b60200260200101818152505060005b6007860154811015613e1457856007018181548110613b9657613b96615a8c565b60009182526020918290200154604080517ff7c618c1000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263f7c618c192600480840193829003018186803b158015613c0557600080fd5b505afa158015613c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c3d91906154e7565b8b613c49836001615931565b81518110613c5957613c59615a8c565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cab86600701828154811061179557611795615a8c565b8a613cb7836001615931565b81518110613cc757613cc7615a8c565b6020026020010181905250613cea86600701828154811061189657611896615a8c565b60ff1689613cf9836001615931565b81518110613d0957613d09615a8c565b602002602001018181525050856007018181548110613d2a57613d2a615a8c565b6000918252602090912001546040517fffcd4263000000000000000000000000000000000000000000000000000000008152600481018f905273ffffffffffffffffffffffffffffffffffffffff8e811660248301529091169063ffcd42639060440160206040518083038186803b158015613da557600080fd5b505afa158015613db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ddd91906155e8565b88613de9836001615931565b81518110613df957613df9615a8c565b6020908102919091010152613e0d81615a04565b9050613b75565b5050505050505092959194509250565b60005b60045481101561371657613e3a81613e4a565b613e4381615a04565b9050613e27565b60045481908110613eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b600060048381548110613ecc57613ecc615a8c565b9060005260206000209060080201905080600201544211613eec57505050565b6006810154801580613f0057506001820154155b15613f115750426002909101555050565b6000826002015442613f2391906159c1565b90506000600654846001015460035484613f3d9190615984565b613f479190615984565b613f519190615949565b905060006103e890506000600f54600e54600d5484613f7091906159c1565b613f7a91906159c1565b613f8491906159c1565b600254600a54600d5492935073ffffffffffffffffffffffffffffffffffffffff918216926340c10f1992909116908590613fbf9088615984565b613fc99190615949565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561403457600080fd5b505af1158015614048573d6000803e3d6000fd5b5050600254600b54600e5473ffffffffffffffffffffffffffffffffffffffff92831694506340c10f19935091169085906140839088615984565b61408d9190615949565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1580156140f857600080fd5b505af115801561410c573d6000803e3d6000fd5b5050600254600c54600f5473ffffffffffffffffffffffffffffffffffffffff92831694506340c10f19935091169085906141479088615984565b6141519190615949565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b1580156141bc57600080fd5b505af11580156141d0573d6000803e3d6000fd5b505060025473ffffffffffffffffffffffffffffffffffffffff1691506340c10f19905030846142008588615984565b61420a9190615949565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561427557600080fd5b505af1158015614289573d6000803e3d6000fd5b5050506006870154839150826142bf7f000000000000000000000000000000000000000000000000000000e8d4a5100087615984565b6142c99190615984565b6142d39190615949565b6142dd9190615949565b8660030160008282546142f09190615931565b909155505042600287018190556003870154604080519283526020830188905282015288907f3be3541fc42237d611b30329040bfa4569541d156560acdbbae57640d20b8f469060600160405180910390a25050505050505b5050565b60006004828154811061436257614362615a8c565b60009182526020808320858452600582526040808520338652909252922060038101546008909202909201925015801561439e57506007544210155b156143b85760058201546143b29042615931565b60038201555b600081600101547f000000000000000000000000000000000000000000000000000000e8d4a51000846003015484600001546143f49190615984565b6143fe9190615949565b61440891906159c1565b90506144148433610c7f565b1561448c57600081118061442c575060008260020154115b156144875760008260020154826144439190615931565b905082600201546008600082825461445b91906159c1565b90915550506000600284015560058401546144769042615931565b60038401556144853382614dcf565b505b6144fc565b80156144fc5780600860008282546144a49190615931565b92505081905550808260020160008282546144bf9190615931565b9091555050604051818152849033907fee470483107f579a55c754fa00613c45a9a3b617a418b39cb0be97e5381ba7c19060200160405180910390a35b50505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691614599919061583d565b6000604051808303816000865af19150503d80600081146145d6576040519150601f19603f3d011682016040523d82523d6000602084013e6145db565b606091505b509150915081801561460557508051158061460557508080602001905181019061460591906154c5565b61466b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f426f72696e6745524332303a205472616e73666572206661696c6564000000006044820152606401610763565b5050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f95d89b41000000000000000000000000000000000000000000000000000000001790529051606091600091829173ffffffffffffffffffffffffffffffffffffffff8616916146f4919061583d565b600060405180830381855afa9150503d806000811461472f576040519150601f19603f3d011682016040523d82523d6000602084013e614734565b606091505b509150915081614779576040518060400160405280600381526020017f3f3f3f0000000000000000000000000000000000000000000000000000000000815250614782565b61478281614f85565b949350505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829173ffffffffffffffffffffffffffffffffffffffff86169161480b919061583d565b600060405180830381855afa9150503d8060008114614846576040519150601f19603f3d011682016040523d82523d6000602084013e61484b565b606091505b509150915081801561485e575080516020145b614869576012614782565b808060200190518101906147829190615750565b600454829081106148ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f506f6f6c20646f6573206e6f74206578697374000000000000000000000000006044820152606401610763565b600754421015614956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6465706f7369743a206661726d696e67206e6f742073746172746564000000006044820152606401610763565b60006004848154811061496b5761496b615a8c565b6000918252602080832087845260058252604080852033865290925292206008909102909101915061499c85613e4a565b6149a58561434d565b8315614be85781546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b158015614a1457600080fd5b505afa158015614a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a4c91906155e8565b8354909150614a739073ffffffffffffffffffffffffffffffffffffffff16333088615178565b82546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b158015614adc57600080fd5b505afa158015614af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b1491906155e8565b9050614b2082826159c1565b600485015490965061ffff1615614b8f57600484015460009061271090614b4b9061ffff1689615984565b614b559190615949565b600b548654919250614b819173ffffffffffffffffffffffffffffffffffffffff908116911683614502565b614b8b81886159c1565b9650505b85836000016000828254614ba39190615931565b9091555050600254845473ffffffffffffffffffffffffffffffffffffffff90811691161415614be5578560096000828254614bdf9190615931565b90915550505b50505b600382015481547f000000000000000000000000000000000000000000000000000000e8d4a5100091614c1a91615984565b614c249190615949565b600182015560005b6007830154811015614cfb57826007018181548110614c4d57614c4d615a8c565b60009182526020909120015482546040517fc6a7112800000000000000000000000000000000000000000000000000000000815260048101899052336024820152604481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063c6a7112890606401600060405180830381600087803b158015614cd257600080fd5b505af1158015614ce6573d6000803e3d6000fd5b5050505080614cf490615a04565b9050614c2c565b508315614d1c5783826006016000828254614d169190615931565b90915550505b604051848152859033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a35050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009546002546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a082319060240160206040518083038186803b158015614e3b57600080fd5b505afa158015614e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e7391906155e8565b1115614349576009546002546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000929173ffffffffffffffffffffffffffffffffffffffff16906370a082319060240160206040518083038186803b158015614ee757600080fd5b505afa158015614efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f1f91906155e8565b614f2991906159c1565b9050808210614f5b57600254614f569073ffffffffffffffffffffffffffffffffffffffff168483614502565b505050565b8115614f5657600254614f569073ffffffffffffffffffffffffffffffffffffffff168484614502565b60606040825110614faa5781806020019051810190614fa49190615504565b92915050565b81516020141561513a5760005b60208160ff161080156150045750828160ff1681518110614fda57614fda615a8c565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b1561501b578061501381615a3d565b915050614fb7565b60008160ff1667ffffffffffffffff81111561503957615039615abb565b6040519080825280601f01601f191660200182016040528015615063576020820181803683370190505b509050600091505b60208260ff161080156150b85750838260ff168151811061508e5761508e615a8c565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615155b1561513357838260ff16815181106150d2576150d2615a8c565b602001015160f81c60f81b818360ff16815181106150f2576150f2615a8c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508161512b81615a3d565b92505061506b565b9392505050565b505060408051808201909152600381527f3f3f3f0000000000000000000000000000000000000000000000000000000000602082015290565b919050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790529151600092839290881691615217919061583d565b6000604051808303816000865af19150503d8060008114615254576040519150601f19603f3d011682016040523d82523d6000602084013e615259565b606091505b509150915081801561528357508051158061528357508080602001905181019061528391906154c5565b6152e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f426f72696e6745524332303a205472616e7366657246726f6d206661696c65646044820152606401610763565b505050505050565b828054828255906000526020600020908101928215615369579160200282015b828111156153695781547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff843516178255602090920191600190910190615311565b506153759291506153f3565b5090565b828054828255906000526020600020908101928215615369579160200282015b8281111561536957825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190615399565b5b8082111561537557600081556001016153f4565b60008083601f84011261541a57600080fd5b50813567ffffffffffffffff81111561543257600080fd5b6020830191508360208260051b850101111561544d57600080fd5b9250929050565b803561ffff8116811461517357600080fd5b60006020828403121561547857600080fd5b813561513381615aea565b6000806020838503121561549657600080fd5b823567ffffffffffffffff8111156154ad57600080fd5b6154b985828601615408565b90969095509350505050565b6000602082840312156154d757600080fd5b8151801515811461513357600080fd5b6000602082840312156154f957600080fd5b815161513381615aea565b60006020828403121561551657600080fd5b815167ffffffffffffffff8082111561552e57600080fd5b818401915084601f83011261554257600080fd5b81518181111561555457615554615abb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561559a5761559a615abb565b816040528281528760208487010111156155b357600080fd5b6155c48360208301602088016159d8565b979650505050505050565b6000602082840312156155e157600080fd5b5035919050565b6000602082840312156155fa57600080fd5b5051919050565b6000806040838503121561561457600080fd5b82359150602083013561562681615aea565b809150509250929050565b60008060008060008060a0878903121561564a57600080fd5b86359550602087013561565c81615aea565b945061566a60408801615454565b935060608701359250608087013567ffffffffffffffff81111561568d57600080fd5b61569989828a01615408565b979a9699509497509295939492505050565b600080604083850312156156be57600080fd5b50508035926020909101359150565b60008060008060008060a087890312156156e657600080fd5b863595506020870135945061566a60408801615454565b60008060008060008060c0878903121561571657600080fd5b863595506020870135945060408701359350606087013561573681615b0c565b9598949750929560808101359460a0909101359350915050565b60006020828403121561576257600080fd5b815161513381615b0c565b600081518084526020808501945080840160005b838110156157b357815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101615781565b509495945050505050565b600081518084526020808501945080840160005b838110156157b3578151875295820195908201906001016157d2565b60008184825b8581101561583257813561580781615aea565b73ffffffffffffffffffffffffffffffffffffffff16835260209283019291909101906001016157f4565b509095945050505050565b6000825161584f8184602087016159d8565b9190910192915050565b602081526000615133602083018461576d565b60808152600061587f608083018761576d565b6020838203818501528187518084528284019150828160051b850101838a0160005b83811015615905577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080888503018652825180518086526158e7818a88018b85016159d8565b96880196601f019091169390930186019250908501906001016158a1565b50508681036040880152615919818a6157be565b94505050505082810360608401526155c481856157be565b6000821982111561594457615944615a5d565b500190565b60008261597f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156159bc576159bc615a5d565b500290565b6000828210156159d3576159d3615a5d565b500390565b60005b838110156159f35781810151838201526020016159db565b838111156144fc5750506000910152565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615a3657615a36615a5d565b5060010190565b600060ff821660ff811415615a5457615a54615a5d565b60010192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461371657600080fd5b60ff8116811461371657600080fdfea264697066735822122059a7eb1fea2e75d6a2615da073451a52d915f10c8fabcf78334fdf5e90b9ac6e64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e3e43888fa7803cdc7bea478ab327cf1a0dc11a7000000000000000000000000000000000000000000000000e0e02c25c46e0000000000000000000000000000d637506a7cadb8fd22d29192677444a88afda89100000000000000000000000068cab49f2846f9fe6ea0461cfc9dc9660ee12466000000000000000000000000e3f205ab0c931f8229a30f350934a745384063ea000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064
-----Decoded View---------------
Arg [0] : _flare (address): 0xE3e43888fa7803cDC7BEA478aB327cF1A0dc11a7
Arg [1] : _flarePerSec (uint256): 16204000000000000000
Arg [2] : _teamAddress (address): 0xd637506A7cADb8fd22d29192677444a88aFda891
Arg [3] : _treasuryAddress (address): 0x68cAB49F2846f9fE6EA0461cfC9DC9660EE12466
Arg [4] : _investorAddress (address): 0xE3f205Ab0c931f8229A30f350934a745384063Ea
Arg [5] : _teamPercent (uint256): 100
Arg [6] : _treasuryPercent (uint256): 100
Arg [7] : _investorPercent (uint256): 100
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000e3e43888fa7803cdc7bea478ab327cf1a0dc11a7
Arg [1] : 000000000000000000000000000000000000000000000000e0e02c25c46e0000
Arg [2] : 000000000000000000000000d637506a7cadb8fd22d29192677444a88afda891
Arg [3] : 00000000000000000000000068cab49f2846f9fe6ea0461cfc9dc9660ee12466
Arg [4] : 000000000000000000000000e3f205ab0c931f8229a30f350934a745384063ea
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode Sourcemap
17283:21994:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19383:30;;;;;;;;;26138:25:1;;;26126:2;26111:18;19383:30:0;;;;;;;;19476;;;;;;22558:83;22622:8;:15;22558:83;;35938:191;;;;;;:::i;:::-;;:::i;:::-;;19208:30;;;;;;;;;;;;8463:42:1;8451:55;;;8433:74;;8421:2;8406:18;19208:30:0;8287:226:1;18570:26:0;;;;;;:::i;:::-;;:::i;:::-;;;;12625:42:1;12613:55;;;12595:74;;12700:2;12685:18;;12678:34;;;;12728:18;;;12721:34;;;;12786:2;12771:18;;12764:34;;;;12847:6;12835:19;12829:3;12814:19;;12807:48;12886:3;12871:19;;12864:35;12930:3;12915:19;;12908:35;12582:3;12567:19;18570:26:0;12262:687:1;18799:34:0;;;;;;19098:26;;;;;;;;;24168:991;;;;;;:::i;:::-;;:::i;28845:246::-;;;;;;:::i;:::-;;:::i;:::-;;;11984:14:1;;11977:22;11959:41;;11947:2;11932:18;28845:246:0;11819:187:1;38499:374:0;;;;;;:::i;:::-;;:::i;32489:1038::-;;;;;;:::i;:::-;;:::i;27084:1289::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;18944:35::-;;;;;;22842:1221;;;;;;:::i;:::-;;:::i;30692:351::-;;;;;;:::i;:::-;;:::i;29470:80::-;;;;;;:::i;:::-;;:::i;33590:784::-;;;;;;:::i;:::-;;:::i;19039:36::-;;;;;;29166:74;;;:::i;36454:101::-;;;;;;:::i;:::-;;:::i;37654:382::-;;;;;;:::i;:::-;;:::i;36901:334::-;;;;;;:::i;:::-;;:::i;2422:91::-;;;:::i;18489:54::-;;18539:4;18489:54;;;;;25973:6:1;25961:19;;;25943:38;;25931:2;25916:18;18489:54:0;25799:188:1;38877:397:0;;;;;;:::i;:::-;;:::i;38040:::-;;;;;;:::i;:::-;;:::i;1827:75::-;1873:7;1892:6;;;1827:75;;18646:64;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28373:25:1;;;28429:2;28414:18;;28407:34;;;;28457:18;;;28450:34;28515:2;28500:18;;28493:34;28360:3;28345:19;18646:64:0;28142:391:1;37239:357:0;;;;;;:::i;:::-;;:::i;18327:26::-;;;;;;22213:341;;;:::i;18261:25::-;;;;;;;;;19151:30;;;;;;;;;36618:225;;;;;;:::i;:::-;;:::i;18392:58::-;;18443:7;18392:58;;19294:26;;;;;;31088:98;;;;;;:::i;:::-;;:::i;18882:29::-;;;;;;36133:317;;;;;;:::i;:::-;;:::i;28423:366::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2656:181::-;;;;;;:::i;:::-;;:::i;25217:1808::-;;;;;;:::i;:::-;;:::i;35938:191::-;1873:7;1892:6;2015:23;1892:6;836:10;2015:23;2007:68;;;;;;;22566:2:1;2007:68:0;;;22548:21:1;;;22585:18;;;22578:30;22644:34;22624:18;;;22617:62;22696:18;;2007:68:0;;;;;;;;;36008:18:::1;:16;:18::i;:::-;36068:11;::::0;36036:58:::1;::::0;;27739:25:1;;;27795:2;27780:18;;27773:34;;;36056:10:0::1;::::0;36036:58:::1;::::0;27712:18:1;36036:58:0::1;;;;;;;36099:11;:26:::0;35938:191::o;18570:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18570:26:0;;;;;;;;;;;:::o;24168:991::-;1873:7;1892:6;2015:23;1892:6;836:10;2015:23;2007:68;;;;;;;22566:2:1;2007:68:0;;;22548:21:1;;;22585:18;;;22578:30;22644:34;22624:18;;;22617:62;22696:18;;2007:68:0;22364:356:1;2007:68:0;19652:8:::1;:15:::0;24340:4;;19645:22;::::1;19637:54;;;::::0;::::1;::::0;;17250:2:1;19637:54:0::1;::::0;::::1;17232:21:1::0;17289:2;17269:18;;;17262:30;17328:21;17308:18;;;17301:49;17367:18;;19637:54:0::1;17048:343:1::0;19637:54:0::1;24378:2:::2;24357:23:::0;::::2;;24349:59;;;::::0;::::2;::::0;;14286:2:1;24349:59:0::2;::::0;::::2;14268:21:1::0;14325:2;14305:18;;;14298:30;14364:25;14344:18;;;14337:53;14407:18;;24349:59:0::2;14084:347:1::0;24349:59:0::2;18539:4;24423:41;::::0;::::2;;;24413:84;;;::::0;::::2;::::0;;13156:2:1;24413:84:0::2;::::0;::::2;13138:21:1::0;13195:2;13175:18;;;13168:30;13234:27;13214:18;;;13207:55;13279:18;;24413:84:0::2;12954:349:1::0;24413:84:0::2;18443:7;24510:16;:44;;24500:91;;;::::0;::::2;::::0;;22927:2:1;24500:91:0::2;::::0;::::2;22909:21:1::0;22966:2;22946:18;;;22939:30;23005:31;22985:18;;;22978:59;23054:18;;24500:91:0::2;22725:353:1::0;24500:91:0::2;24603:18;24596:187;24628:30:::0;;::::2;24596:187;;;24690:51;24717:10;;24728;24717:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6553:20:::0;6585:8;;;6282:315;24690:51:::2;24680:99;;;::::0;::::2;::::0;;16891:2:1;24680:99:0::2;::::0;::::2;16873:21:1::0;16930:2;16910:18;;;16903:30;16969:32;16949:18;;;16942:60;17019:18;;24680:99:0::2;16689:354:1::0;24680:99:0::2;24661:12;::::0;::::2;:::i;:::-;;;24596:187;;;;24787:18;:16;:18::i;:::-;24877:11;24848:8;24857:4;24848:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;24829:15;;:44;;;;:::i;:::-;:59;;;;:::i;:::-;24810:15;:78;;;;24921:11;24893:8;24902:4;24893:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;:39;;;;24965:13;24935:8;24944:4;24935:14;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;25014:16;24981:8;24990:4;24981:14;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;:49;;;;25060:10;;25033:8;25042:4;25033:14;;;;;;;;:::i;:::-;;;;;;;;;;;:24;;:37;;;;;;;:::i;:::-;;25142:10;;25080:75;;;;;;;:::i;:::-;;::::0;;;;;::::2;::::0;;27430:25:1;;;27503:6;27491:19;;27486:2;27471:18;;27464:47;27527:18;;;27520:34;;;25080:75:0;25086:4;;25080:75:::2;::::0;27418:2:1;27403:18;25080:75:0::2;;;;;;;2078:1:::1;24168:991:::0;;;;;;:::o;28845:246::-;19652:8;:15;28943:4;;28927;;19645:22;;19637:54;;;;;;;17250:2:1;19637:54:0;;;17232:21:1;17289:2;17269:18;;;17262:30;17328:21;17308:18;;;17301:49;17367:18;;19637:54:0;17048:343:1;19637:54:0;28953:21:::1;28977:14:::0;;;:8:::1;:14;::::0;;;;;;;:21:::1;::::0;::::1;::::0;;;;;;;29028:14:::1;::::0;29009:15:::1;:33;::::0;::::1;::::0;:78:::1;;;29066:4;:21;;;29047:15;:40;;29009:78;29001:86:::0;28845:246;-1:-1:-1;;;;;28845:246:0:o;38499:374::-;38587:15;;;;38573:10;:29;38563:112;;;;;;;18372:2:1;38563:112:0;;;18354:21:1;18411:2;18391:18;;;18384:30;18450:34;18430:18;;;18423:62;18521:34;18501:18;;;18494:62;18593:3;18572:19;;;18565:32;18614:19;;38563:112:0;18170:469:1;38563:112:0;38688:30;;;38678:98;;;;;;;13510:2:1;38678:98:0;;;13492:21:1;13549:2;13529:18;;;13522:30;13588:34;13568:18;;;13561:62;13659:20;13639:18;;;13632:48;13697:19;;38678:98:0;13308:414:1;38678:98:0;38779:15;:34;;;;;;;;;;;;;38821:48;;38840:10;;38821:48;;-1:-1:-1;;38821:48:0;38499:374;:::o;32489:1038::-;4762:1;5312:7;;:19;;5304:63;;;;;;;24816:2:1;5304:63:0;;;24798:21:1;24855:2;24835:18;;;24828:30;24894:33;24874:18;;;24867:61;24945:18;;5304:63:0;24614:355:1;5304:63:0;4762:1;5429:7;:18;19652:8:::1;:15:::0;32579:4;;19645:22;::::1;19637:54;;;::::0;::::1;::::0;;17250:2:1;19637:54:0::1;::::0;::::1;17232:21:1::0;17289:2;17269:18;;;17262:30;17328:21;17308:18;;;17301:49;17367:18;;19637:54:0::1;17048:343:1::0;19637:54:0::1;32589:21:::2;32613:8;32622:4;32613:14;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;32654;;;:8:::2;:14:::0;;;;;;32669:10:::2;32654:26:::0;;;;;;;32758:11;;32613:14:::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;32758:22:0;-1:-1:-1;32758:22:0::2;32750:67;;;::::0;::::2;::::0;;18011:2:1;32750:67:0::2;::::0;::::2;17993:21:1::0;;;18030:18;;;18023:30;18089:34;18069:18;;;18062:62;18141:18;;32750:67:0::2;17809:356:1::0;32750:67:0::2;32890:7;32874:4;:12;;;:23;;32866:67;;;::::0;::::2;::::0;;16120:2:1;32866:67:0::2;::::0;::::2;16102:21:1::0;16159:2;16139:18;;;16132:30;16198:33;16178:18;;;16171:61;16249:18;;32866:67:0::2;15918:355:1::0;32866:67:0::2;32938:17;32950:4;32938:11;:17::i;:::-;32960:29;32984:4;32960:23;:29::i;:::-;32998:11:::0;;32994:177:::2;;33029:7;33014:4;:11;;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;33076:5:0::2;::::0;33051:12;;33076:5:::2;33051:12:::0;;::::2;33076:5:::0;::::2;33043:39;33039:80;;;33108:7;33087:17;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;33039:80:0::2;33121:12:::0;;:46:::2;::::0;:12:::2;;33147:10;33159:7:::0;33121:25:::2;:46::i;:::-;33209:21;::::0;::::2;::::0;33195:11;;33235:19:::2;::::0;33195:35:::2;::::0;::::2;:::i;:::-;33194:60;;;;:::i;:::-;33175:15;::::0;::::2;:79:::0;33266:18:::2;33259:169;33304:14;::::0;::::2;:21:::0;33291:34;::::2;33259:169;;;33347:4;:14;;33362:10;33347:26;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;::::2;::::0;33410:11;;33347:77:::2;::::0;;;;::::2;::::0;::::2;26686:25:1::0;;;33397:10:0::2;26727:18:1::0;;;26720:83;26819:18;;;26812:34;;;;33347:26:0::2;::::0;;::::2;::::0;:40:::2;::::0;26659:18:1;;33347:77:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;33328:12;;;;:::i;:::-;;;33259:169;;;-1:-1:-1::0;33436:11:0;;33432:47:::2;;33468:7;33452:4;:12;;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;33432:47:0::2;33488:35;::::0;26138:25:1;;;33509:4:0;;33497:10:::2;::::0;33488:35:::2;::::0;26126:2:1;26111:18;33488:35:0::2;;;;;;;-1:-1:-1::0;;4722:1:0;5576:22;;-1:-1:-1;;;32489:1038:0:o;27084:1289::-;27178:26;27207:23;27233:25;27261:30;27160:4;19652:8;:15;;;;19645:4;:22;19637:54;;;;;;;17250:2:1;19637:54:0;;;17232:21:1;17289:2;17269:18;;;17262:30;17328:21;17308:18;;;17301:49;17367:18;;19637:54:0;17048:343:1;19637:54:0;27299:21:::1;27323:8;27332:4;27323:14;;;;;;;;:::i;:::-;;;;;;;;;;;27299:38;;27368:4;:14;;:21;;;;27392:1;27368:25;;;;:::i;:::-;27354:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;27354:40:0::1;-1:-1:-1::0;27420:14:0::1;::::0;::::1;:21:::0;27342:52;;-1:-1:-1;27420:25:0::1;::::0;27444:1:::1;27420:25;:::i;:::-;27407:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27474:14:0::1;::::0;::::1;:21:::0;27397:49;;-1:-1:-1;27474:25:0::1;::::0;27498:1:::1;27474:25;:::i;:::-;27460:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;27460:40:0::1;-1:-1:-1::0;27533:14:0::1;::::0;::::1;:21:::0;27449:51;;-1:-1:-1;27533:25:0::1;::::0;27557:1:::1;27533:25;:::i;:::-;27519:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;27519:40:0::1;-1:-1:-1::0;27587:5:0::1;::::0;27564:12;;27503:56;;-1:-1:-1;27587:5:0::1;;::::0;27564:9;;27587:5:::1;::::0;27564:12:::1;;;;:::i;:::-;:29;::::0;;::::1;:12;::::0;;::::1;::::0;;;;;:29;27622:5:::1;::::0;27609:32:::1;::::0;27622:5:::1;27609:30;:32::i;:::-;27596:7;27604:1;27596:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:45;27671:5:::1;::::0;27658:34:::1;::::0;27671:5:::1;;27658:32;:34::i;:::-;27644:48;;:8;27653:1;27644:11;;;;;;;;:::i;:::-;;;;;;:48;;;::::0;::::1;27697:13;27713:4;27697:20;;27720:17;27783:15;;27764;;27749:11;;27740:5;:20;;;;:::i;:::-;:39;;;;:::i;:::-;:58;;;;:::i;:::-;27720:78;;27889:5;27870:15;;27856:9;27842:11;;27824:4;:15;;;:29;;;;:::i;:::-;:41;;;;:::i;:::-;27823:62;;;;:::i;:::-;:71;;;;:::i;:::-;27803:13;27817:1;27803:16;;;;;;;;:::i;:::-;;;;;;:91;;;::::0;::::1;27906:18;27899:471;27944:14;::::0;::::1;:21:::0;27931:34;::::1;27899:471;;;28025:4;:14;;28040:10;28025:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;:40:::1;::::0;;;;;;;:26:::1;::::0;;::::1;::::0;:38:::1;::::0;:40:::1;::::0;;::::1;::::0;;;;;;:26;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27987:9:::0;27997:14:::1;:10:::0;28010:1:::1;27997:14;:::i;:::-;27987:25;;;;;;;;:::i;:::-;;;;;;:81;;;;;;;;;::::0;::::1;28099:71;28114:4;:14;;28129:10;28114:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;:40:::1;::::0;;;;;;;:26:::1;::::0;;::::1;::::0;:38:::1;::::0;:40:::1;::::0;;::::1;::::0;;;;;;:26;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28099:69;;;:71::i;:::-;28073:7:::0;28081:14:::1;:10:::0;28094:1:::1;28081:14;:::i;:::-;28073:23;;;;;;;;:::i;:::-;;;;;;:97;;;;28202:73;28217:4;:14;;28232:10;28217:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;:40:::1;::::0;;;;;;;:26:::1;::::0;;::::1;::::0;:38:::1;::::0;:40:::1;::::0;;::::1;::::0;;;;;;:26;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28202:71;;;:73::i;:::-;28175:100;;:8:::0;28184:14:::1;:10:::0;28197:1:::1;28184:14;:::i;:::-;28175:24;;;;;;;;:::i;:::-;;;;;;:100;;;::::0;::::1;28312:4;:16;;28329:10;28312:28;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;:54:::1;::::0;;;;::::1;::::0;::::1;26138:25:1::0;;;28312:28:0::1;::::0;;::::1;::::0;:48:::1;::::0;26111:18:1;;28312:54:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28280:13:::0;28294:14:::1;:10:::0;28307:1:::1;28294:14;:::i;:::-;28280:29;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:86;27968:12:::1;::::0;::::1;:::i;:::-;;;27899:471;;;;27296:1077;;;27084:1289:::0;;;;;;:::o;22842:1221::-;1873:7;1892:6;2015:23;1892:6;836:10;2015:23;2007:68;;;;;;;22566:2:1;2007:68:0;;;22548:21:1;;;22585:18;;;22578:30;22644:34;22624:18;;;22617:62;22696:18;;2007:68:0;22364:356:1;2007:68:0;23037:2:::1;23016:23:::0;::::1;;23008:59;;;::::0;::::1;::::0;;18846:2:1;23008:59:0::1;::::0;::::1;18828:21:1::0;18885:2;18865:18;;;18858:30;18924:25;18904:18;;;18897:53;18967:18;;23008:59:0::1;18644:347:1::0;23008:59:0::1;18539:4;23080:41;::::0;::::1;;;23070:84;;;::::0;::::1;::::0;;24462:2:1;23070:84:0::1;::::0;::::1;24444:21:1::0;24501:2;24481:18;;;24474:30;24540:27;24520:18;;;24513:55;24585:18;;23070:84:0::1;24260:349:1::0;23070:84:0::1;18443:7;23167:16;:44;;23157:91;;;::::0;::::1;::::0;;15762:2:1;23157:91:0::1;::::0;::::1;15744:21:1::0;15801:2;15781:18;;;15774:30;15840:31;15820:18;;;15813:59;15889:18;;23157:91:0::1;15560:353:1::0;23157:91:0::1;6553:20:::0;;23251:93:::1;;;::::0;::::1;::::0;;23285:2:1;23251:93:0::1;::::0;::::1;23267:21:1::0;23324:2;23304:18;;;23297:30;23363:34;23343:18;;;23336:62;23434:8;23414:18;;;23407:36;23460:19;;23251:93:0::1;23083:402:1::0;23251:93:0::1;23356:18;23349:187;23381:30:::0;;::::1;23349:187;;;23443:51;23470:10;;23481;23470:22;;;;;;;:::i;23443:51::-;23433:99;;;::::0;::::1;::::0;;19198:2:1;23433:99:0::1;::::0;::::1;19180:21:1::0;19237:2;19217:18;;;19210:30;19276:32;19256:18;;;19249:60;19326:18;;23433:99:0::1;18996:354:1::0;23433:99:0::1;23414:12;::::0;::::1;:::i;:::-;;;23349:187;;;;23540:18;:16;:18::i;:::-;23563:27;23611:14;;23593:15;:32;:69;;23648:14;;23593:69;;;23629:15;23593:69;23563:99;;23686:11;23667:15;;:30;;;;;;;:::i;:::-;;;;;;;;23702:8;23718:227;;;;;;;;23739:8;23718:227;;;;;;23762:11;23718:227;;;;23797:19;23718:227;;;;23837:1;23718:227;;;;23855:13;23718:227;;;;;;23888:16;23718:227;;;;23916:1;23718:227;;;;23931:10;;23718:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;23718:227:0;;;;-1:-1:-1;;23702:246:0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;23702:246:0::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;:::i;:::-;;;;24046:10;;23958:101;;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;23964:8:::1;:15:::0;23958:101:::1;::::0;::::1;::::0;23964:19:::1;::::0;23982:1:::1;::::0;23964:19:::1;:::i;:::-;23958:101;::::0;;27430:25:1;;;27503:6;27491:19;;27486:2;27471:18;;27464:47;27527:18;;;27520:34;;;23958:101:0::1;::::0;27418:2:1;27403:18;23958:101:0::1;;;;;;;23005:1058;22842:1221:::0;;;;;;:::o;30692:351::-;4762:1;5312:7;;:19;;5304:63;;;;;;;24816:2:1;5304:63:0;;;24798:21:1;24855:2;24835:18;;;24828:30;24894:33;24874:18;;;24867:61;24945:18;;5304:63:0;24614:355:1;5304:63:0;4762:1;5429:7;:18;19652:8:::1;:15:::0;30844:3;;19645:22;::::1;19637:54;;;::::0;::::1;::::0;;17250:2:1;19637:54:0::1;::::0;::::1;17232:21:1::0;17289:2;17269:18;;;17262:30;17328:21;17308:18;;;17301:49;17367:18;;19637:54:0::1;17048:343:1::0;19637:54:0::1;30852:21:::2;30876:8;30885:3;30876:13;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;30933:12:::0;;30950:65:::2;::::0;;;;30962:10:::2;30950:65;::::0;::::2;9293:34:1::0;30982:4:0::2;9343:18:1::0;;;9336:43;9395:18;;;9388:34;;;9438:18;;;9431:34;;;9514:4;9502:17;;9481:19;;;9474:46;9536:19;;;9529:35;;;9580:19;;;9573:35;;;30876:13:0;;-1:-1:-1;30933:12:0::2;;::::0;;;30950:11:::2;::::0;9204:19:1;;30950:65:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;31018:21;31027:3;31032:6;31018:8;:21::i;:::-;-1:-1:-1::0;;4722:1:0;5576:22;;-1:-1:-1;;;;;;;30692:351:0:o;29470:80::-;4762:1;5312:7;;:19;;5304:63;;;;;;;24816:2:1;5304:63:0;;;24798:21:1;24855:2;24835:18;;;24828:30;24894:33;24874:18;;;24867:61;24945:18;;5304:63:0;24614:355:1;5304:63:0;4762:1;5429:7;:18;29529:17:::1;29541:4:::0;29529:11:::1;:17::i;:::-;-1:-1:-1::0;4722:1:0;5576:22;;29470:80::o;33590:784::-;4762:1;5312:7;;:19;;5304:63;;;;;;;24816:2:1;5304:63:0;;;24798:21:1;24855:2;24835:18;;;24828:30;24894:33;24874:18;;;24867:61;24945:18;;5304:63:0;24614:355:1;5304:63:0;4762:1;5429:7;:18;;;;33654:21:::1;33678:8;33687:4;33678:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;33719;;;:8:::1;:14:::0;;;;;;33734:10:::1;33719:26:::0;;;;;;;33765:11;;33678:14:::1;::::0;;;::::1;::::0;;::::1;33835:12;::::0;::::1;::::0;33678:14;;-1:-1:-1;;;33835:22:0::1;33825:81;;;::::0;::::1;::::0;;19557:2:1;33825:81:0::1;::::0;::::1;19539:21:1::0;19596:2;19576:18;;;19569:30;19635:34;19615:18;;;19608:62;19706:11;19686:18;;;19679:39;19735:19;;33825:81:0::1;19355:405:1::0;33825:81:0::1;33925:1;33911:15:::0;;;33929::::1;::::0;::::1;:19:::0;;;33951::::1;::::0;::::1;:23:::0;;;33977:21:::1;::::0;::::1;:25:::0;;;34005:12:::1;::::0;::::1;:22:::0;;34021:6;;33925:1;34005:22:::1;::::0;34021:6;;34005:22:::1;:::i;:::-;::::0;;;-1:-1:-1;34039:18:0::1;::::0;-1:-1:-1;34032:153:0::1;34077:14;::::0;::::1;:21:::0;34064:34;::::1;34032:153;;;34120:4;:14;;34135:10;34120:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;:61:::1;::::0;;;;::::1;::::0;::::1;26686:25:1::0;;;34167:10:0::1;26727:18:1::0;;;26720:83;26819:18;;;26812:34;;;;34120:26:0::1;;::::0;:40:::1;::::0;26659:18:1;;34120:61:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34101:12;;;;:::i;:::-;;;34032:153;;;-1:-1:-1::0;34226:5:0::1;::::0;34201:12;;34226:5:::1;34201:12:::0;;::::1;34226:5:::0;::::1;34193:39;34189:79;;;34258:6;34237:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;34189:79:0::1;34272:12:::0;;:45:::1;::::0;:12:::1;;34298:10;34310:6:::0;34272:25:::1;:45::i;:::-;34327:43;::::0;26138:25:1;;;34357:4:0;;34345:10:::1;::::0;34327:43:::1;::::0;26126:2:1;26111:18;34327:43:0::1;;;;;;;-1:-1:-1::0;;4722:1:0;5576:22;;-1:-1:-1;;33590:784:0:o;29166:74::-;4762:1;5312:7;;:19;;5304:63;;;;;;;24816:2:1;5304:63:0;;;24798:21:1;24855:2;24835:18;;;24828:30;24894:33;24874:18;;;24867:61;24945:18;;5304:63:0;24614:355:1;5304:63:0;4762:1;5429:7;:18;29218::::1;:16;:18::i;:::-;4722:1:::0;5576:22;;29166:74::o;36454:101::-;36511:7;36530:8;36539:3;36530:13;;;;;;;;:::i;:::-;;;;;;;;;;;:21;;;36523:28;;36454:101;;;:::o;37654:382::-;37742:15;;;;37728:10;:29;37718:120;;;;;;;21676:2:1;37718:120:0;;;21658:21:1;21715:2;21695:18;;;21688:30;21754:34;21734:18;;;21727:62;21825:34;21805:18;;;21798:62;21897:11;21876:19;;;21869:40;21926:19;;37718:120:0;21474:477:1;37718:120:0;37851:30;;;37841:98;;;;;;;19967:2:1;37841:98:0;;;19949:21:1;20006:2;19986:18;;;19979:30;20045:34;20025:18;;;20018:62;20116:20;20096:18;;;20089:48;20154:19;;37841:98:0;19765:414:1;37841:98:0;37942:15;:34;;;;;;;;;;;;;37984:48;;38003:10;;37984:48;;-1:-1:-1;;37984:48:0;37654:382;:::o;36901:334::-;36981:11;;;;36967:10;:25;36957:108;;;;;;;21202:2:1;36957:108:0;;;21184:21:1;21241:2;21221:18;;;21214:30;21280:34;21260:18;;;21253:62;21351:34;21331:18;;;21324:62;21423:3;21402:19;;;21395:32;21444:19;;36957:108:0;21000:469:1;36957:108:0;37078:26;;;37068:86;;;;;;;16480:2:1;37068:86:0;;;16462:21:1;16519:2;16499:18;;;16492:30;16558:34;16538:18;;;16531:62;16629:12;16609:18;;;16602:40;16659:19;;37068:86:0;16278:406:1;37068:86:0;37157:11;:26;;;;;;;;;;;;;37191:40;;37206:10;;37191:40;;-1:-1:-1;;37191:40:0;36901:334;:::o;2422:91::-;1873:7;1892:6;2015:23;1892:6;836:10;2015:23;2007:68;;;;;;;22566:2:1;2007:68:0;;;22548:21:1;;;22585:18;;;22578:30;22644:34;22624:18;;;22617:62;22696:18;;2007:68:0;22364:356:1;2007:68:0;2479:30:::1;2506:1;2479:18;:30::i;:::-;2422:91::o:0;38877:397::-;1873:7;1892:6;2015:23;1892:6;836:10;2015:23;2007:68;;;;;;;22566:2:1;2007:68:0;;;22548:21:1;;;22585:18;;;22578:30;22644:34;22624:18;;;22617:62;22696:18;;2007:68:0;22364:356:1;2007:68:0;38987:4:::1;38964:19;:27;;38954:88;;;::::0;::::1;::::0;;25176:2:1;38954:88:0::1;::::0;::::1;25158:21:1::0;25215:2;25195:18;;;25188:30;25254:34;25234:18;;;25227:62;25325:13;25305:18;;;25298:41;25356:19;;38954:88:0::1;24974:407:1::0;38954:88:0::1;39110:4;39091:15;;39069:19;39055:11;;:33;;;;:::i;:::-;:51;;;;:::i;:::-;:59;;39045:121;;;::::0;::::1;::::0;;17598:2:1;39045:121:0::1;::::0;::::1;17580:21:1::0;17637:2;17617:18;;;17610:30;17676:34;17656:18;;;17649:62;17747:14;17727:18;;;17720:42;17779:19;;39045:121:0::1;17396:408:1::0;39045:121:0::1;39193:15;::::0;39174:56:::1;::::0;;27739:25:1;;;27795:2;27780:18;;27773:34;;;39174:56:0::1;::::0;27712:18:1;39174:56:0::1;;;;;;;39233:15;:37:::0;38877:397::o;38040:::-;1873:7;1892:6;2015:23;1892:6;836:10;2015:23;2007:68;;;;;;;22566:2:1;2007:68:0;;;22548:21:1;;;22585:18;;;22578:30;22644:34;22624:18;;;22617:62;22696:18;;2007:68:0;22364:356:1;2007:68:0;38150:4:::1;38127:19;:27;;38117:88;;;::::0;::::1;::::0;;20790:2:1;38117:88:0::1;::::0;::::1;20772:21:1::0;20829:2;20809:18;;;20802:30;20868:34;20848:18;;;20841:62;20939:13;20919:18;;;20912:41;20970:19;;38117:88:0::1;20588:407:1::0;38117:88:0::1;38273:4;38254:15;;38232:19;38218:11;;:33;;;;:::i;:::-;:51;;;;:::i;:::-;:59;;38208:121;;;::::0;::::1;::::0;;25588:2:1;38208:121:0::1;::::0;::::1;25570:21:1::0;25627:2;25607:18;;;25600:30;25666:34;25646:18;;;25639:62;25737:14;25717:18;;;25710:42;25769:19;;38208:121:0::1;25386:408:1::0;38208:121:0::1;38356:15;::::0;38337:56:::1;::::0;;27739:25:1;;;27795:2;27780:18;;27773:34;;;38337:56:0::1;::::0;27712:18:1;38337:56:0::1;;;;;;;38396:15;:37:::0;38040:397::o;37239:357::-;1873:7;1892:6;2015:23;1892:6;836:10;2015:23;2007:68;;;;;;;22566:2:1;2007:68:0;;;22548:21:1;;;22585:18;;;22578:30;22644:34;22624:18;;;22617:62;22696:18;;2007:68:0;22364:356:1;2007:68:0;37337:4:::1;37318:15;:23;;37308:80;;;::::0;::::1;::::0;;22158:2:1;37308:80:0::1;::::0;::::1;22140:21:1::0;22197:2;22177:18;;;22170:30;22236:34;22216:18;;;22209:62;22307:9;22287:18;;;22280:37;22334:19;;37308:80:0::1;21956:403:1::0;37308:80:0::1;37456:4;37437:15;;37419;37401;;:33;;;;:::i;:::-;:51;;;;:::i;:::-;:59;;37391:117;;;::::0;::::1;::::0;;23692:2:1;37391:117:0::1;::::0;::::1;23674:21:1::0;23731:2;23711:18;;;23704:30;23770:34;23750:18;;;23743:62;23841:10;23821:18;;;23814:38;23869:19;;37391:117:0::1;23490:404:1::0;37391:117:0::1;37531:11;::::0;37516:44:::1;::::0;;27739:25:1;;;27795:2;27780:18;;27773:34;;;37516:44:0::1;::::0;27712:18:1;37516:44:0::1;;;;;;;37563:11;:29:::0;37239:357::o;22213:341::-;1873:7;1892:6;2015:23;1892:6;836:10;2015:23;2007:68;;;;;;;22566:2:1;2007:68:0;;;22548:21:1;;;22585:18;;;22578:30;22644:34;22624:18;;;22617:62;22696:18;;2007:68:0;22364:356:1;2007:68:0;22285:14:::1;;22267:15;:32;22257:85;;;::::0;::::1;::::0;;20386:2:1;22257:85:0::1;::::0;::::1;20368:21:1::0;20425:2;20405:18;;;20398:30;20464:34;20444:18;;;20437:62;20535:5;20515:18;;;20508:33;20558:19;;22257:85:0::1;20184:399:1::0;22257:85:0::1;22364:8;:15:::0;22347:14:::1;22382:132;22410:6;22404:3;:12;22382:132;;;22428:21;22452:8;22461:3;22452:13;;;;;;;;:::i;:::-;;;;;;;;;;;22428:37;;22495:15;22468:4;:24;;:42;;;;22425:89;22418:5;;;;:::i;:::-;;;22382:132;;;-1:-1:-1::0;;22535:15:0::1;22518:14;:32:::0;22213:341::o;36618:225::-;4762:1;5312:7;;:19;;5304:63;;;;;;;24816:2:1;5304:63:0;;;24798:21:1;24855:2;24835:18;;;24828:30;24894:33;24874:18;;;24867:61;24945:18;;5304:63:0;24614:355:1;5304:63:0;4762:1;5429:7;:18;36712:2:::1;36696:18:::0;::::1;;36688:62;;;::::0;::::1;::::0;;15045:2:1;36688:62:0::1;::::0;::::1;15027:21:1::0;15084:2;15064:18;;;15057:30;15123:33;15103:18;;;15096:61;15174:18;;36688:62:0::1;14843:355:1::0;36688:62:0::1;36758:13;36753:87;36777:20:::0;;::::1;36753:87;;;36811:25;36820:5;;36826;36820:12;;;;;;;:::i;:::-;;;;;;;36834:1;36811:8;:25::i;:::-;36799:7;::::0;::::1;:::i;:::-;;;36753:87;;;-1:-1:-1::0;;4722:1:0;5576:22;;-1:-1:-1;36618:225:0:o;31088:98::-;4762:1;5312:7;;:19;;5304:63;;;;;;;24816:2:1;5304:63:0;;;24798:21:1;24855:2;24835:18;;;24828:30;24894:33;24874:18;;;24867:61;24945:18;;5304:63:0;24614:355:1;5304:63:0;4762:1;5429:7;:18;31159:23:::1;31168:4:::0;31174:7;31159:8:::1;:23::i;:::-;-1:-1:-1::0;;4722:1:0;5576:22;;31088:98::o;36133:317::-;1873:7;1892:6;2015:23;1892:6;836:10;2015:23;2007:68;;;;;;;22566:2:1;2007:68:0;;;22548:21:1;;;22585:18;;;22578:30;22644:34;22624:18;;;22617:62;22696:18;;2007:68:0;22364:356:1;2007:68:0;36217:18:::1;:16;:18::i;:::-;36266:10;36245:76;;;36279:8;36288:4;36279:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;36307:11;36245:76;;;;;;27739:25:1::0;;;27795:2;27780:18;;27773:34;27727:2;27712:18;;27565:248;36245:76:0::1;;;;;;;;36393:11;36364:8;36373:4;36364:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;36345:15;;:44;;;;:::i;:::-;:59;;;;:::i;:::-;36326:15;:78;;;;36435:11;36407:8;36416:4;36407:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;:39;;;;36133:317:::0;;:::o;28423:366::-;19652:8;:15;28511:26;;28495:4;;19645:22;;19637:54;;;;;;;17250:2:1;19637:54:0;;;17232:21:1;17289:2;17269:18;;;17262:30;17328:21;17308:18;;;17301:49;17367:18;;19637:54:0;17048:343:1;19637:54:0;28543:21:::1;28567:8;28576:4;28567:14;;;;;;;;:::i;:::-;;;;;;;;;;;28543:38;;28610:4;:14;;:21;;;;28596:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;28596:36:0::1;;28584:48;;28642:18;28635:151;28680:14;::::0;::::1;:21:::0;28667:34;::::1;28635:151;;;28755:4;:14;;28770:10;28755:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;28723:9;28733:10;28723:21;;;;;;;;:::i;:::-;:59;::::0;;::::1;:21;::::0;;::::1;::::0;;;;;;;:59;28704:12:::1;::::0;::::1;:::i;:::-;;;28635:151;;;;28540:249;28423:366:::0;;;;:::o;2656:181::-;1873:7;1892:6;2015:23;1892:6;836:10;2015:23;2007:68;;;;;;;22566:2:1;2007:68:0;;;22548:21:1;;;22585:18;;;22578:30;22644:34;22624:18;;;22617:62;22696:18;;2007:68:0;22364:356:1;2007:68:0;2737:22:::1;::::0;::::1;2729:73;;;::::0;::::1;::::0;;14638:2:1;2729:73:0::1;::::0;::::1;14620:21:1::0;14677:2;14657:18;;;14650:30;14716:34;14696:18;;;14689:62;14787:8;14767:18;;;14760:36;14813:19;;2729:73:0::1;14436:402:1::0;2729:73:0::1;2805:28;2824:8;2805:18;:28::i;:::-;2656:181:::0;:::o;25217:1808::-;25322:26;25351:23;25377:25;25405:24;25304:4;19652:8;:15;;;;19645:4;:22;19637:54;;;;;;;17250:2:1;19637:54:0;;;17232:21:1;17289:2;17269:18;;;17262:30;17328:21;17308:18;;;17301:49;17367:18;;19637:54:0;17048:343:1;19637:54:0;25437:21:::1;25461:8;25470:4;25461:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;25502;;;:8:::1;:14:::0;;;;;;:21:::1;::::0;::::1;::::0;;;;;;;25553::::1;25461:14;::::0;;::::1;::::0;;::::1;25553:21:::0;;::::1;::::0;25596:12:::1;::::0;::::1;::::0;25635:24:::1;::::0;::::1;::::0;25461:14;;-1:-1:-1;25553:21:0;;25617:15:::1;:42;:59:::0;::::1;;;-1:-1:-1::0;25663:13:0;;::::1;25617:59;25613:432;;;25681:18;25720:4;:24;;;25702:15;:42;;;;:::i;:::-;25681:63;;25747:13;25763:4;25747:20;;25770:17;25833:15;;25814;;25799:11;;25790:5;:20;;;;:::i;:::-;:39;;;;:::i;:::-;:58;;;;:::i;:::-;25770:78;;25853:19;25957:5;25938:15;;25924:9;25905:4;:15;;;25890:11;;25876:10;:25;;;;:::i;:::-;:44;;;;:::i;:::-;:57;;;;:::i;:::-;25875:78;;;;:::i;:::-;:87;;;;:::i;:::-;25853:109:::0;-1:-1:-1;26029:8:0;25992:33:::1;26006:19;25853:109:::0;25992:33:::1;:::i;:::-;25991:46;;;;:::i;:::-;25967:74;::::0;;::::1;:::i;:::-;;;25678:367;;;;25613:432;26049:20;26152:4;:19;;;26133:4;:15;;;26110:19;26089:16;26075:4;:11;;;:30;;;;:::i;:::-;26074:55;;;;:::i;:::-;26073:75;;;;:::i;:::-;26072:99;;;;:::i;:::-;26202:14;::::0;::::1;:21:::0;26049:122;;-1:-1:-1;26202:25:0::1;::::0;26226:1:::1;26202:25;:::i;:::-;26188:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;26188:40:0::1;-1:-1:-1::0;26254:14:0::1;::::0;::::1;:21:::0;26176:52;;-1:-1:-1;26254:25:0::1;::::0;26278:1:::1;26254:25;:::i;:::-;26241:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;26307:14:0::1;::::0;::::1;:21:::0;26231:49;;-1:-1:-1;26307:25:0::1;::::0;26331:1:::1;26307:25;:::i;:::-;26293:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;26293:40:0::1;-1:-1:-1::0;26361:14:0::1;::::0;::::1;:21:::0;26283:50;;-1:-1:-1;26361:25:0::1;::::0;26385:1:::1;26361:25;:::i;:::-;26347:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;26347:40:0::1;-1:-1:-1::0;26415:5:0::1;::::0;26392:12;;26336:51;;-1:-1:-1;26415:5:0::1;;::::0;26392:9;;26415:5:::1;::::0;26392:12:::1;;;;:::i;:::-;:29;::::0;;::::1;:12;::::0;;::::1;::::0;;;;;:29;26450:5:::1;::::0;26437:32:::1;::::0;26450:5:::1;26437:30;:32::i;:::-;26424:7;26432:1;26424:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:45;26499:5:::1;::::0;26486:34:::1;::::0;26499:5:::1;;26486:32;:34::i;:::-;26472:48;;:8;26481:1;26472:11;;;;;;;;:::i;:::-;;;;;;:48;;;::::0;::::1;26536:12;26523:7;26531:1;26523:10;;;;;;;;:::i;:::-;;;;;;:25;;;::::0;::::1;26560:18;26553:469;26598:14;::::0;::::1;:21:::0;26585:34;::::1;26553:469;;;26679:4;:14;;26694:10;26679:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;:40:::1;::::0;;;;;;;:26:::1;::::0;;::::1;::::0;:38:::1;::::0;:40:::1;::::0;;::::1;::::0;;;;;;:26;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26641:9:::0;26651:14:::1;:10:::0;26664:1:::1;26651:14;:::i;:::-;26641:25;;;;;;;;:::i;:::-;;;;;;:81;;;;;;;;;::::0;::::1;26753:71;26768:4;:14;;26783:10;26768:26;;;;;;;;:::i;26753:71::-;26727:7:::0;26735:14:::1;:10:::0;26748:1:::1;26735:14;:::i;:::-;26727:23;;;;;;;;:::i;:::-;;;;;;:97;;;;26856:73;26871:4;:14;;26886:10;26871:26;;;;;;;;:::i;26856:73::-;26829:100;;:8:::0;26838:14:::1;:10:::0;26851:1:::1;26838:14;:::i;:::-;26829:24;;;;;;;;:::i;:::-;;;;;;:100;;;::::0;::::1;26960:4;:14;;26975:10;26960:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;:58:::1;::::0;;;;::::1;::::0;::::1;26348:25:1::0;;;26960:26:0::1;26409:55:1::0;;;26389:18;;;26382:83;26960:26:0;;::::1;::::0;:40:::1;::::0;26321:18:1;;26960:58:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26934:7:::0;26942:14:::1;:10:::0;26955:1:::1;26942:14;:::i;:::-;26934:23;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:84;26622:12:::1;::::0;::::1;:::i;:::-;;;26553:469;;;;25434:1591;;;;;25217:1808:::0;;;;;;;;:::o;29284:118::-;29329:11;29324:75;29352:8;:15;29346:21;;29324:75;;;29379:16;29391:3;29379:11;:16::i;:::-;29369:5;;;:::i;:::-;;;29324:75;;29590:1098;19652:8;:15;29652:4;;19645:22;;19637:54;;;;;;;17250:2:1;19637:54:0;;;17232:21:1;17289:2;17269:18;;;17262:30;17328:21;17308:18;;;17301:49;17367:18;;19637:54:0;17048:343:1;19637:54:0;29661:21:::1;29685:8;29694:4;29685:14;;;;;;;;:::i;:::-;;;;;;;;;;;29661:38;;29727:4;:24;;;29708:15;:43;29704:62;;29756:7;29590:1098:::0;;:::o;29704:62::-:1;29789:12;::::0;::::1;::::0;29810:13;;;:37:::1;;-1:-1:-1::0;29827:15:0::1;::::0;::::1;::::0;:20;29810:37:::1;29806:101;;;-1:-1:-1::0;29879:15:0::1;29852:24;::::0;;::::1;:42:::0;29590:1098;;:::o;29806:101::-:1;29911:18;29950:4;:24;;;29932:15;:42;;;;:::i;:::-;29911:63;;29979:19;30051:15;;30031:4;:15;;;30016:11;;30003:10;:24;;;;:::i;:::-;30002:44;;;;:::i;:::-;30001:65;;;;:::i;:::-;29979:87;;30071:13;30087:4;30071:20;;30094:17;30157:15;;30138;;30123:11;;30114:5;:20;;;;:::i;:::-;:39;;;;:::i;:::-;:58;;;;:::i;:::-;30177:5;::::0;30188:11:::1;::::0;30216::::1;::::0;30094:78;;-1:-1:-1;30177:5:0::1;::::0;;::::1;::::0;:10:::1;::::0;30188:11;;::::1;::::0;30231:5;;30202:25:::1;::::0;:11;:25:::1;:::i;:::-;30201:35;;;;:::i;:::-;30177:60;::::0;;::::1;::::0;;;;;;9823:42:1;9811:55;;;30177:60:0::1;::::0;::::1;9793:74:1::0;9883:18;;;9876:34;9766:18;;30177:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30240:5:0::1;::::0;30251:15:::1;::::0;30283::::1;::::0;30240:5:::1;::::0;;::::1;::::0;-1:-1:-1;30240:10:0::1;::::0;-1:-1:-1;30251:15:0;::::1;::::0;30302:5;;30269:29:::1;::::0;:11;:29:::1;:::i;:::-;30268:39;;;;:::i;:::-;30240:68;::::0;;::::1;::::0;;;;;;9823:42:1;9811:55;;;30240:68:0::1;::::0;::::1;9793:74:1::0;9883:18;;;9876:34;9766:18;;30240:68:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30311:5:0::1;::::0;30322:15:::1;::::0;30354::::1;::::0;30311:5:::1;::::0;;::::1;::::0;-1:-1:-1;30311:10:0::1;::::0;-1:-1:-1;30322:15:0;::::1;::::0;30373:5;;30340:29:::1;::::0;:11;:29:::1;:::i;:::-;30339:39;;;;:::i;:::-;30311:68;::::0;;::::1;::::0;;;;;;9823:42:1;9811:55;;;30311:68:0::1;::::0;::::1;9793:74:1::0;9883:18;;;9876:34;9766:18;;30311:68:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30382:5:0::1;::::0;::::1;;::::0;-1:-1:-1;30382:10:0::1;::::0;-1:-1:-1;30401:4:0::1;30436:5:::0;30409:23:::1;30423:9:::0;30409:11;:23:::1;:::i;:::-;30408:33;;;;:::i;:::-;30382:60;::::0;;::::1;::::0;;;;;;9823:42:1;9811:55;;;30382:60:0::1;::::0;::::1;9793:74:1::0;9883:18;;;9876:34;9766:18;;30382:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;30524:12:0::1;::::0;::::1;::::0;30540:5;;-1:-1:-1;30510:9:0;30474:33:::1;30488:19;30474:11:::0;:33:::1;:::i;:::-;:45;;;;:::i;:::-;30473:63;;;;:::i;:::-;:72;;;;:::i;:::-;30447:4;:21;;;:98;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;30577:15:0::1;30550:24;::::0;::::1;:42:::0;;;30660:21:::1;::::0;::::1;::::0;30602:82:::1;::::0;;28020:25:1;;;28076:2;28061:18;;28054:34;;;28104:18;;28097:34;30615:4:0;;30602:82:::1;::::0;28008:2:1;27993:18;30602:82:0::1;;;;;;;29658:1030;;;;;;19694:1;29590:1098:::0;;:::o;34411:914::-;34470:21;34494:8;34503:4;34494:14;;;;;;;;:::i;:::-;;;;;;;;;34535;;;:8;:14;;;;;;34550:10;34535:26;;;;;;;34570:21;;;;34494:14;;;;;;;;-1:-1:-1;34570:26:0;:63;;;;;34619:14;;34600:15;:33;;34570:63;34566:138;;;34680:20;;;;34662:38;;:15;:38;:::i;:::-;34638:21;;;:62;34566:138;34708:15;34791:4;:15;;;34768:19;34742:4;:21;;;34728:4;:11;;;:35;;;;:::i;:::-;34727:60;;;;:::i;:::-;34726:80;;;;:::i;:::-;34708:98;;34815:28;34826:4;34832:10;34815;:28::i;:::-;34811:511;;;34862:1;34852:7;:11;:38;;;;34889:1;34867:4;:19;;;:23;34852:38;34848:328;;;34895:22;34930:4;:19;;;34920:7;:29;;;;:::i;:::-;34895:54;;34995:4;:19;;;34971:20;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;;35039:1:0;35017:19;;;:23;35085:20;;;;35067:38;;:15;:38;:::i;:::-;35043:21;;;:62;35127:45;35145:10;35157:14;35127:17;:45::i;:::-;34892:284;34848:328;34811:511;;;35189:11;;35185:137;;35229:7;35205:20;;:31;;;;;;;:::i;:::-;;;;;;;;35262:7;35239:4;:19;;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;35277:41:0;;26138:25:1;;;35304:4:0;;35292:10;;35277:41;;26126:2:1;26111:18;35277:41:0;;;;;;;35185:137;34467:858;;;34411:914;:::o;16333:307::-;16479:48;;;16457:19;9811:55:1;;;16479:48:0;;;9793:74:1;9883:18;;;;9876:34;;;16479:48:0;;;;;;;;;;9766:18:1;;;;16479:48:0;;;;;;;;;16502:12;16479:48;;;16457:73;;-1:-1:-1;;;;16457:19:0;;;;:73;;16479:48;16457:73;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16421:109;;;;16543:7;:57;;;;-1:-1:-1;16555:11:0;;:16;;:44;;;16586:4;16575:24;;;;;;;;;;;;:::i;:::-;16533:103;;;;;;;13929:2:1;16533:103:0;;;13911:21:1;13968:2;13948:18;;;13941:30;14007;13987:18;;;13980:58;14055:18;;16533:103:0;13727:352:1;16533:103:0;16418:222;;16333:307;;;:::o;14971:242::-;15120:34;;;;;;;;;;;;;;;;;;15143:10;15120:34;;;15092:65;;15037:13;;15057:12;;;;15092:25;;;;:65;;15120:34;15092:65;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15056:101;;;;15167:7;:42;;;;;;;;;;;;;;;;;;;;;;15177:24;15196:4;15177:18;:24::i;:::-;15160:49;14971:242;-1:-1:-1;;;;14971:242:0:o;15828:253::-;15967:36;;;;;;;;;;;;;;;;;;15990:12;15967:36;;;15939:67;;15893:5;;;;;;15939:25;;;;:67;;15967:36;15939:67;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15903:103;;;;16016:7;:28;;;;;16027:4;:11;16042:2;16027:17;16016:28;:61;;16075:2;16016:61;;;16058:4;16047:25;;;;;;;;;;;;:::i;31231:1235::-;19652:8;:15;31309:4;;19645:22;;19637:54;;;;;;;17250:2:1;19637:54:0;;;17232:21:1;17289:2;17269:18;;;17262:30;17328:21;17308:18;;;17301:49;17367:18;;19637:54:0;17048:343:1;19637:54:0;31348:14:::1;;31329:15;:33;;31319:79;;;::::0;::::1;::::0;;15405:2:1;31319:79:0::1;::::0;::::1;15387:21:1::0;15444:2;15424:18;;;15417:30;15483;15463:18;;;15456:58;15531:18;;31319:79:0::1;15203:352:1::0;31319:79:0::1;31403:21;31427:8;31436:4;31427:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;31468;;;:8:::1;:14:::0;;;;;;31483:10:::1;31468:26:::0;;;;;;;31427:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;31499:17:0::1;31477:4:::0;31499:11:::1;:17::i;:::-;31521:29;31545:4;31521:23;:29::i;:::-;31559:11:::0;;31555:558:::1;;31599:12:::0;;:37:::1;::::0;;;;31630:4:::1;31599:37;::::0;::::1;8433:74:1::0;31575:21:0::1;::::0;31599:12:::1;;::::0;:22:::1;::::0;8406:18:1;;31599:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31639:12:::0;;31575:61;;-1:-1:-1;31639:65:0::1;::::0;:12:::1;;31669:10;31689:4;31696:7:::0;31639:29:::1;:65::i;:::-;31730:12:::0;;:37:::1;::::0;;;;31761:4:::1;31730:37;::::0;::::1;8433:74:1::0;31707:20:0::1;::::0;31730:12:::1;;::::0;:22:::1;::::0;8406:18:1;;31730:37:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31707:60:::0;-1:-1:-1;31782:28:0::1;31797:13:::0;31707:60;31782:28:::1;:::i;:::-;31819:17;::::0;::::1;::::0;31772:38;;-1:-1:-1;31819:17:0::1;;:21:::0;31815:184:::1;;31877:17;::::0;::::1;::::0;31845:18:::1;::::0;31898:5:::1;::::0;31867:27:::1;::::0;31877:17:::1;;31867:7:::0;:27:::1;:::i;:::-;31866:37;;;;:::i;:::-;31932:15;::::0;31906:12;;31845:58;;-1:-1:-1;31906:54:0::1;::::0;31932:15:::1;31906:12:::0;;::::1;::::0;31932:15:::1;31845:58:::0;31906:25:::1;:54::i;:::-;31975:20;31985:10:::0;31975:7;:20:::1;:::i;:::-;31965:30;;31842:157;31815:184;32018:7;32003:4;:11;;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;32067:5:0::1;::::0;32042:12;;32067:5:::1;32042:12:::0;;::::1;32067:5:::0;::::1;32034:39;32030:80;;;32099:7;32078:17;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;32030:80:0::1;31572:541;;31555:558;32149:21;::::0;::::1;::::0;32135:11;;32175:19:::1;::::0;32135:35:::1;::::0;::::1;:::i;:::-;32134:60;;;;:::i;:::-;32115:15;::::0;::::1;:79:::0;32206:18:::1;32199:169;32244:14;::::0;::::1;:21:::0;32231:34;::::1;32199:169;;;32287:4;:14;;32302:10;32287:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32350:11;;32287:77:::1;::::0;;;;::::1;::::0;::::1;26686:25:1::0;;;32337:10:0::1;26727:18:1::0;;;26720:83;26819:18;;;26812:34;;;;32287:26:0::1;::::0;;::::1;::::0;:40:::1;::::0;26659:18:1;;32287:77:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32268:12;;;;:::i;:::-;;;32199:169;;;-1:-1:-1::0;32376:11:0;;32372:47:::1;;32408:7;32392:4;:12;;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;32372:47:0::1;32428:34;::::0;26138:25:1;;;32448:4:0;;32436:10:::1;::::0;32428:34:::1;::::0;26126:2:1;26111:18;32428:34:0::1;;;;;;;31316:1150;;31231:1235:::0;;;:::o;2985:163::-;3051:16;3070:6;;;3079:17;;;;;;;;;;3104:40;;3070:6;;;;;;;3104:40;;3051:16;3104:40;3048:100;2985:163;:::o;35432:502::-;35538:17;;35505:5;;:30;;;;;35529:4;35505:30;;;8433:74:1;35505:5:0;;;;;:15;;8406:18:1;;35505:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;35501:430;;;35781:17;;35747:5;;:30;;;;;35771:4;35747:30;;;8433:74:1;35728:16:0;;35781:17;35747:5;;;:15;;8406:18:1;;35747:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;35728:70;;35816:8;35805:7;:19;35801:127;;35829:5;;:33;;:5;;35848:3;35853:8;35829:18;:33::i;:::-;35557:374;35432:502;;:::o;35801:127::-;35876:11;;35872:56;;35892:5;;:32;;:5;;35911:3;35916:7;35892:18;:32::i;14366:415::-;14439:13;14477:2;14462:4;:11;:17;14458:320;;14502:4;14491:26;;;;;;;;;;;;:::i;:::-;14484:33;14366:415;-1:-1:-1;;14366:415:0:o;14458:320::-;14531:4;:11;14546:2;14531:17;14527:251;;;14553:7;14567:41;14578:2;14574:1;:6;;;:22;;;;;14584:4;14589:1;14584:7;;;;;;;;;;:::i;:::-;;;;;;;:12;;14574:22;14567:41;;;14601:3;;;;:::i;:::-;;;;14567:41;;;14610:23;14646:1;14636:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14636:12:0;;14610:38;;14660:1;14656:5;;14651:71;14667:2;14663:1;:6;;;:22;;;;;14673:4;14678:1;14673:7;;;;;;;;;;:::i;:::-;;;;;;;:12;;14663:22;14651:71;;;14711:4;14716:1;14711:7;;;;;;;;;;:::i;:::-;;;;;;;;;14695:10;14706:1;14695:13;;;;;;;;;;:::i;:::-;;;;:23;;;;;;;;;;-1:-1:-1;14687:3:0;;;;:::i;:::-;;;;14651:71;;;14738:10;14366:415;-1:-1:-1;;;14366:415:0:o;14527:251::-;-1:-1:-1;;14762:12:0;;;;;;;;;;;;;;;;;;14366:415::o;14527:251::-;14366:415;;;:::o;16935:341::-;17100:59;;;17078:19;8799:15:1;;;17100:59:0;;;8781:34:1;8851:15;;;8831:18;;;8824:43;8883:18;;;;8876:34;;;17100:59:0;;;;;;;;;;8693:18:1;;;;17100:59:0;;;;;;;;;17123:17;17100:59;;;17078:84;;-1:-1:-1;;;;17078:19:0;;;;:84;;17100:59;17078:84;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17042:120;;;;17175:7;:57;;;;-1:-1:-1;17187:11:0;;:16;;:44;;;17218:4;17207:24;;;;;;;;;;;;:::i;:::-;17165:107;;;;;;;24101:2:1;17165:107:0;;;24083:21:1;;;24120:18;;;24113:30;24179:34;24159:18;;;24152:62;24231:18;;17165:107:0;23899:356:1;17165:107:0;17039:237;;16935:341;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:378:1;88:8;98:6;152:3;145:4;137:6;133:17;129:27;119:55;;170:1;167;160:12;119:55;-1:-1:-1;193:20:1;;236:18;225:30;;222:50;;;268:1;265;258:12;222:50;305:4;297:6;293:17;281:29;;365:3;358:4;348:6;345:1;341:14;333:6;329:27;325:38;322:47;319:67;;;382:1;379;372:12;319:67;14:378;;;;;:::o;397:159::-;464:20;;524:6;513:18;;503:29;;493:57;;546:1;543;536:12;561:247;620:6;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:31;772:5;747:31;:::i;813:448::-;899:6;907;960:2;948:9;939:7;935:23;931:32;928:52;;;976:1;973;966:12;928:52;1016:9;1003:23;1049:18;1041:6;1038:30;1035:50;;;1081:1;1078;1071:12;1035:50;1120:81;1193:7;1184:6;1173:9;1169:22;1120:81;:::i;:::-;1220:8;;1094:107;;-1:-1:-1;813:448:1;-1:-1:-1;;;;813:448:1:o;1266:277::-;1333:6;1386:2;1374:9;1365:7;1361:23;1357:32;1354:52;;;1402:1;1399;1392:12;1354:52;1434:9;1428:16;1487:5;1480:13;1473:21;1466:5;1463:32;1453:60;;1509:1;1506;1499:12;1548:271;1638:6;1691:2;1679:9;1670:7;1666:23;1662:32;1659:52;;;1707:1;1704;1697:12;1659:52;1739:9;1733:16;1758:31;1783:5;1758:31;:::i;2093:943::-;2173:6;2226:2;2214:9;2205:7;2201:23;2197:32;2194:52;;;2242:1;2239;2232:12;2194:52;2275:9;2269:16;2304:18;2345:2;2337:6;2334:14;2331:34;;;2361:1;2358;2351:12;2331:34;2399:6;2388:9;2384:22;2374:32;;2444:7;2437:4;2433:2;2429:13;2425:27;2415:55;;2466:1;2463;2456:12;2415:55;2495:2;2489:9;2517:2;2513;2510:10;2507:36;;;2523:18;;:::i;:::-;2657:2;2651:9;2719:4;2711:13;;2562:66;2707:22;;;2731:2;2703:31;2699:40;2687:53;;;2755:18;;;2775:22;;;2752:46;2749:72;;;2801:18;;:::i;:::-;2841:10;2837:2;2830:22;2876:2;2868:6;2861:18;2916:7;2911:2;2906;2902;2898:11;2894:20;2891:33;2888:53;;;2937:1;2934;2927:12;2888:53;2950:55;3002:2;2997;2989:6;2985:15;2980:2;2976;2972:11;2950:55;:::i;:::-;3024:6;2093:943;-1:-1:-1;;;;;;;2093:943:1:o;3041:180::-;3100:6;3153:2;3141:9;3132:7;3128:23;3124:32;3121:52;;;3169:1;3166;3159:12;3121:52;-1:-1:-1;3192:23:1;;3041:180;-1:-1:-1;3041:180:1:o;3226:184::-;3296:6;3349:2;3337:9;3328:7;3324:23;3320:32;3317:52;;;3365:1;3362;3355:12;3317:52;-1:-1:-1;3388:16:1;;3226:184;-1:-1:-1;3226:184:1:o;3415:315::-;3483:6;3491;3544:2;3532:9;3523:7;3519:23;3515:32;3512:52;;;3560:1;3557;3550:12;3512:52;3596:9;3583:23;3573:33;;3656:2;3645:9;3641:18;3628:32;3669:31;3694:5;3669:31;:::i;:::-;3719:5;3709:15;;;3415:315;;;;;:::o;3735:830::-;3893:6;3901;3909;3917;3925;3933;3986:3;3974:9;3965:7;3961:23;3957:33;3954:53;;;4003:1;4000;3993:12;3954:53;4039:9;4026:23;4016:33;;4099:2;4088:9;4084:18;4071:32;4112:31;4137:5;4112:31;:::i;:::-;4162:5;-1:-1:-1;4186:37:1;4219:2;4204:18;;4186:37;:::i;:::-;4176:47;;4270:2;4259:9;4255:18;4242:32;4232:42;;4325:3;4314:9;4310:19;4297:33;4353:18;4345:6;4342:30;4339:50;;;4385:1;4382;4375:12;4339:50;4424:81;4497:7;4488:6;4477:9;4473:22;4424:81;:::i;:::-;3735:830;;;;-1:-1:-1;3735:830:1;;-1:-1:-1;3735:830:1;;4524:8;;3735:830;-1:-1:-1;;;3735:830:1:o;4570:248::-;4638:6;4646;4699:2;4687:9;4678:7;4674:23;4670:32;4667:52;;;4715:1;4712;4705:12;4667:52;-1:-1:-1;;4738:23:1;;;4808:2;4793:18;;;4780:32;;-1:-1:-1;4570:248:1:o;4823:743::-;4961:6;4969;4977;4985;4993;5001;5054:3;5042:9;5033:7;5029:23;5025:33;5022:53;;;5071:1;5068;5061:12;5022:53;5107:9;5094:23;5084:33;;5164:2;5153:9;5149:18;5136:32;5126:42;;5187:37;5220:2;5209:9;5205:18;5187:37;:::i;5571:586::-;5673:6;5681;5689;5697;5705;5713;5766:3;5754:9;5745:7;5741:23;5737:33;5734:53;;;5783:1;5780;5773:12;5734:53;5819:9;5806:23;5796:33;;5876:2;5865:9;5861:18;5848:32;5838:42;;5927:2;5916:9;5912:18;5899:32;5889:42;;5981:2;5970:9;5966:18;5953:32;5994:29;6017:5;5994:29;:::i;:::-;5571:586;;;;-1:-1:-1;5571:586:1;;6094:3;6079:19;;6066:33;;6146:3;6131:19;;;6118:33;;-1:-1:-1;5571:586:1;-1:-1:-1;;5571:586:1:o;6162:247::-;6230:6;6283:2;6271:9;6262:7;6258:23;6254:32;6251:52;;;6299:1;6296;6289:12;6251:52;6331:9;6325:16;6350:29;6373:5;6350:29;:::i;6414:484::-;6467:3;6505:5;6499:12;6532:6;6527:3;6520:19;6558:4;6587:2;6582:3;6578:12;6571:19;;6624:2;6617:5;6613:14;6645:1;6655:218;6669:6;6666:1;6663:13;6655:218;;;6734:13;;6749:42;6730:62;6718:75;;6813:12;;;;6848:15;;;;6691:1;6684:9;6655:218;;;-1:-1:-1;6889:3:1;;6414:484;-1:-1:-1;;;;;6414:484:1:o;6903:435::-;6956:3;6994:5;6988:12;7021:6;7016:3;7009:19;7047:4;7076:2;7071:3;7067:12;7060:19;;7113:2;7106:5;7102:14;7134:1;7144:169;7158:6;7155:1;7152:13;7144:169;;;7219:13;;7207:26;;7253:12;;;;7288:15;;;;7180:1;7173:9;7144:169;;7343:660;7531:3;7562;7609:6;7531:3;7643:333;7657:6;7654:1;7651:13;7643:333;;;7732:6;7719:20;7752:31;7777:5;7752:31;:::i;:::-;7821:42;7810:54;7796:69;;7888:4;7914:14;;;;7951:15;;;;;7679:1;7672:9;7643:333;;;-1:-1:-1;7992:5:1;;7343:660;-1:-1:-1;;;;;7343:660:1:o;8008:274::-;8137:3;8175:6;8169:13;8191:53;8237:6;8232:3;8225:4;8217:6;8213:17;8191:53;:::i;:::-;8260:16;;;;;8008:274;-1:-1:-1;;8008:274:1:o;9921:261::-;10100:2;10089:9;10082:21;10063:4;10120:56;10172:2;10161:9;10157:18;10149:6;10120:56;:::i;10187:1627::-;10620:3;10609:9;10602:22;10583:4;10647:57;10699:3;10688:9;10684:19;10676:6;10647:57;:::i;:::-;10723:2;10773:9;10765:6;10761:22;10756:2;10745:9;10741:18;10734:50;10804:6;10839;10833:13;10870:6;10862;10855:22;10905:2;10897:6;10893:15;10886:22;;10964:2;10954:6;10951:1;10947:14;10939:6;10935:27;10931:36;11002:2;10994:6;10990:15;11023:1;11033:529;11047:6;11044:1;11041:13;11033:529;;;11106:66;11222:2;11213:6;11205;11201:19;11197:28;11192:3;11185:41;11255:6;11249:13;11297:2;11291:9;11328:8;11320:6;11313:24;11350:61;11402:8;11397:2;11389:6;11385:15;11380:2;11376;11372:11;11350:61;:::i;:::-;11540:12;;;;11468:2;11454:17;11450:26;;;11438:39;;;;11434:48;;;-1:-1:-1;11505:15:1;;;;11069:1;11062:9;11033:529;;;11037:3;;11610:9;11602:6;11598:22;11593:2;11582:9;11578:18;11571:50;11644:44;11681:6;11673;11644:44;:::i;:::-;11630:58;;;;;;11736:9;11728:6;11724:22;11719:2;11708:9;11704:18;11697:50;11764:44;11801:6;11793;11764:44;:::i;28538:128::-;28578:3;28609:1;28605:6;28602:1;28599:13;28596:39;;;28615:18;;:::i;:::-;-1:-1:-1;28651:9:1;;28538:128::o;28671:274::-;28711:1;28737;28727:189;;28772:77;28769:1;28762:88;28873:4;28870:1;28863:15;28901:4;28898:1;28891:15;28727:189;-1:-1:-1;28930:9:1;;28671:274::o;28950:228::-;28990:7;29116:1;29048:66;29044:74;29041:1;29038:81;29033:1;29026:9;29019:17;29015:105;29012:131;;;29123:18;;:::i;:::-;-1:-1:-1;29163:9:1;;28950:228::o;29183:125::-;29223:4;29251:1;29248;29245:8;29242:34;;;29256:18;;:::i;:::-;-1:-1:-1;29293:9:1;;29183:125::o;29313:258::-;29385:1;29395:113;29409:6;29406:1;29403:13;29395:113;;;29485:11;;;29479:18;29466:11;;;29459:39;29431:2;29424:10;29395:113;;;29526:6;29523:1;29520:13;29517:48;;;-1:-1:-1;;29561:1:1;29543:16;;29536:27;29313:258::o;29576:195::-;29615:3;29646:66;29639:5;29636:77;29633:103;;;29716:18;;:::i;:::-;-1:-1:-1;29763:1:1;29752:13;;29576:195::o;29776:175::-;29813:3;29857:4;29850:5;29846:16;29886:4;29877:7;29874:17;29871:43;;;29894:18;;:::i;:::-;29943:1;29930:15;;29776:175;-1:-1:-1;;29776:175:1:o;29956:184::-;30008:77;30005:1;29998:88;30105:4;30102:1;30095:15;30129:4;30126:1;30119:15;30145:184;30197:77;30194:1;30187:88;30294:4;30291:1;30284:15;30318:4;30315:1;30308:15;30334:184;30386:77;30383:1;30376:88;30483:4;30480:1;30473:15;30507:4;30504:1;30497:15;30523:154;30609:42;30602:5;30598:54;30591:5;30588:65;30578:93;;30667:1;30664;30657:12;30682:114;30766:4;30759:5;30755:16;30748:5;30745:27;30735:55;;30786:1;30783;30776:12
Swarm Source
ipfs://59a7eb1fea2e75d6a2615da073451a52d915f10c8fabcf78334fdf5e90b9ac6e
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.