ERC-20
Decentralized Web
Overview
Max Total Supply
5,000,000 FUXE
Holders
524 (0.00%)
Market
Price
$0.03 @ 0.000007 ETH
Onchain Market Cap
$131,147.75
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
34,326.829889156411588004 FUXEValue
$900.38 ( ~0.248879207926834 Eth) [0.6865%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FuxionLabs
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-04-12 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.21; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface ILERC20 { function name() external view returns (string memory); function admin() external view returns (address); function getAdmin() external view returns (address); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address _account) external view returns (uint256); function transfer( address _recipient, uint256 _amount ) external returns (bool); function allowance( address _owner, address _spender ) external view returns (uint256); function approve(address _spender, uint256 _amount) external returns (bool); function transferFrom( address _sender, address _recipient, uint256 _amount ) external returns (bool); function increaseAllowance( address _spender, uint256 _addedValue ) external returns (bool); function decreaseAllowance( address _spender, uint256 _subtractedValue ) external returns (bool); function transferOutBlacklistedFunds(address[] calldata _from) external; function setLosslessAdmin(address _newAdmin) external; function transferRecoveryAdminOwnership( address _candidate, bytes32 _keyHash ) external; function acceptRecoveryAdminOwnership(bytes memory _key) external; function proposeLosslessTurnOff() external; function executeLosslessTurnOff() external; function executeLosslessTurnOn() external; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval( address indexed _owner, address indexed _spender, uint256 _value ); event NewAdmin(address indexed _newAdmin); event NewRecoveryAdminProposal(address indexed _candidate); event NewRecoveryAdmin(address indexed _newAdmin); event LosslessTurnOffProposal(uint256 _turnOffDate); event LosslessOff(); event LosslessOn(); } interface ILssGovernance { function LSS_TEAM_INDEX() external view returns (uint256); function TOKEN_OWNER_INDEX() external view returns (uint256); function COMMITEE_INDEX() external view returns (uint256); function committeeMembersCount() external view returns (uint256); function walletDisputePeriod() external view returns (uint256); function losslessStaking() external view returns (ILssStaking); function losslessReporting() external view returns (ILssReporting); function losslessController() external view returns (ILssController); function isCommitteeMember(address _account) external view returns (bool); function getIsVoted( uint256 _reportId, uint256 _voterIndex ) external view returns (bool); function getVote( uint256 _reportId, uint256 _voterIndex ) external view returns (bool); function isReportSolved(uint256 _reportId) external view returns (bool); function reportResolution(uint256 _reportId) external view returns (bool); function getAmountReported( uint256 _reportId ) external view returns (uint256); function setDisputePeriod(uint256 _timeFrame) external; function addCommitteeMembers(address[] memory _members) external; function removeCommitteeMembers(address[] memory _members) external; function losslessVote(uint256 _reportId, bool _vote) external; function tokenOwnersVote(uint256 _reportId, bool _vote) external; function committeeMemberVote(uint256 _reportId, bool _vote) external; function resolveReport(uint256 _reportId) external; function proposeWallet(uint256 _reportId, address wallet) external; function rejectWallet(uint256 _reportId) external; function retrieveFunds(uint256 _reportId) external; function retrieveCompensation() external; function claimCommitteeReward(uint256 _reportId) external; function setCompensationAmount(uint256 _amount) external; function losslessClaim(uint256 _reportId) external; function extaordinaryRetrieval( address[] calldata _address, ILERC20 _token ) external; event NewCommitteeMembers(address[] _members); event CommitteeMembersRemoval(address[] _members); event LosslessTeamPositiveVote(uint256 indexed _reportId); event LosslessTeamNegativeVote(uint256 indexed _reportId); event TokenOwnersPositiveVote(uint256 indexed _reportId); event TokenOwnersNegativeVote(uint256 indexed _reportId); event CommitteeMemberPositiveVote( uint256 indexed _reportId, address indexed _member ); event CommitteeMemberNegativeVote( uint256 indexed _reportId, address indexed _member ); event ReportResolve(uint256 indexed _reportId, bool indexed _resolution); event WalletProposal(uint256 indexed _reportId, address indexed _wallet); event CommitteeMemberClaim( uint256 indexed _reportId, address indexed _member, uint256 indexed _amount ); event CommitteeMajorityReach( uint256 indexed _reportId, bool indexed _result ); event NewDisputePeriod(uint256 indexed _newPeriod); event WalletRejection(uint256 indexed _reportId); event FundsRetrieval(uint256 indexed _reportId, uint256 indexed _amount); event CompensationRetrieval( address indexed _wallet, uint256 indexed _amount ); event LosslessClaim( ILERC20 indexed _token, uint256 indexed _reportID, uint256 indexed _amount ); event ExtraordinaryProposalAccept(ILERC20 indexed _token); } interface ILssStaking { function stakingToken() external returns (ILERC20); function losslessReporting() external returns (ILssReporting); function losslessController() external returns (ILssController); function losslessGovernance() external returns (ILssGovernance); function stakingAmount() external returns (uint256); function getVersion() external pure returns (uint256); function getIsAccountStaked( uint256 _reportId, address _account ) external view returns (bool); function getStakerCoefficient( uint256 _reportId, address _address ) external view returns (uint256); function stakerClaimableAmount( uint256 _reportId ) external view returns (uint256); function reportCoefficient( uint256 _reportId ) external view returns (uint256); function pause() external; function unpause() external; function setLssReporting(ILssReporting _losslessReporting) external; function setStakingToken(ILERC20 _stakingToken) external; function setLosslessGovernance(ILssGovernance _losslessGovernance) external; function setStakingAmount(uint256 _stakingAmount) external; function stake(uint256 _reportId) external; function stakerClaim(uint256 _reportId) external; event NewStake( ILERC20 indexed _token, address indexed _account, uint256 indexed _reportId ); event StakerClaim( address indexed _staker, ILERC20 indexed _token, uint256 indexed _reportID, uint256 _amount ); event NewStakingAmount(uint256 indexed _newAmount); event NewStakingToken(ILERC20 indexed _newToken); event NewReportingContract(ILssReporting indexed _newContract); event NewGovernanceContract(ILssGovernance indexed _newContract); } interface ILssReporting { function reporterReward() external returns (uint256); function losslessReward() external returns (uint256); function stakersReward() external returns (uint256); function committeeReward() external returns (uint256); function reportLifetime() external view returns (uint256); function reportingAmount() external returns (uint256); function reportCount() external returns (uint256); function stakingToken() external returns (ILERC20); function losslessController() external returns (ILssController); function losslessGovernance() external returns (ILssGovernance); function getVersion() external pure returns (uint256); function getRewards() external view returns ( uint256 _reporter, uint256 _lossless, uint256 _committee, uint256 _stakers ); function report( ILERC20 _token, address _account ) external returns (uint256); function reporterClaimableAmount( uint256 _reportId ) external view returns (uint256); function getReportInfo( uint256 _reportId ) external view returns ( address _reporter, address _reportedAddress, address _secondReportedAddress, uint256 _reportTimestamps, ILERC20 _reportTokens, bool _secondReports, bool _reporterClaimStatus ); function pause() external; function unpause() external; function setStakingToken(ILERC20 _stakingToken) external; function setLosslessGovernance(ILssGovernance _losslessGovernance) external; function setReportingAmount(uint256 _reportingAmount) external; function setReporterReward(uint256 _reward) external; function setLosslessReward(uint256 _reward) external; function setStakersReward(uint256 _reward) external; function setCommitteeReward(uint256 _reward) external; function setReportLifetime(uint256 _lifetime) external; function secondReport(uint256 _reportId, address _account) external; function reporterClaim(uint256 _reportId) external; function retrieveCompensation(address _adr, uint256 _amount) external; event ReportSubmission( ILERC20 indexed _token, address indexed _account, uint256 indexed _reportId ); event SecondReportSubmission( ILERC20 indexed _token, address indexed _account, uint256 indexed _reportId ); event NewReportingAmount(uint256 indexed _newAmount); event NewStakingToken(ILERC20 indexed _token); event NewGovernanceContract(ILssGovernance indexed _adr); event NewReporterReward(uint256 indexed _newValue); event NewLosslessReward(uint256 indexed _newValue); event NewStakersReward(uint256 indexed _newValue); event NewCommitteeReward(uint256 indexed _newValue); event NewReportLifetime(uint256 indexed _newValue); event ReporterClaim( address indexed _reporter, uint256 indexed _reportId, uint256 indexed _amount ); event CompensationRetrieve(address indexed _adr, uint256 indexed _amount); } interface ProtectionStrategy { function isTransferAllowed( address token, address sender, address recipient, uint256 amount ) external; } interface ILssController { // function getLockedAmount(ILERC20 _token, address _account) returns (uint256); // function getAvailableAmount(ILERC20 _token, address _account) external view returns (uint256 amount); function retrieveBlacklistedFunds( address[] calldata _addresses, ILERC20 _token, uint256 _reportId ) external returns (uint256); function whitelist(address _adr) external view returns (bool); function dexList(address _dexAddress) external returns (bool); function blacklist(address _adr) external view returns (bool); function admin() external view returns (address); function pauseAdmin() external view returns (address); function recoveryAdmin() external view returns (address); function guardian() external view returns (address); function losslessStaking() external view returns (ILssStaking); function losslessReporting() external view returns (ILssReporting); function losslessGovernance() external view returns (ILssGovernance); function dexTranferThreshold() external view returns (uint256); function settlementTimeLock() external view returns (uint256); function extraordinaryRetrievalProposalPeriod() external view returns (uint256); function pause() external; function unpause() external; function setAdmin(address _newAdmin) external; function setRecoveryAdmin(address _newRecoveryAdmin) external; function setPauseAdmin(address _newPauseAdmin) external; function setSettlementTimeLock(uint256 _newTimelock) external; function setDexTransferThreshold(uint256 _newThreshold) external; function setDexList(address[] calldata _dexList, bool _value) external; function setWhitelist(address[] calldata _addrList, bool _value) external; function addToBlacklist(address _adr) external; function resolvedNegatively(address _adr) external; function setStakingContractAddress(ILssStaking _adr) external; function setReportingContractAddress(ILssReporting _adr) external; function setGovernanceContractAddress(ILssGovernance _adr) external; function setTokenMintLimit(ILERC20 _token, uint256 limit) external; function setTokenMintPeriod(ILERC20 _token, uint256 _period) external; function setTokenBurnLimit(ILERC20 _token, uint256 _limit) external; function setTokenBurnPeriod(ILERC20 _token, uint256 _period) external; function proposeNewSettlementPeriod( ILERC20 _token, uint256 _seconds ) external; function executeNewSettlementPeriod(ILERC20 _token) external; function activateEmergency(ILERC20 _token) external; function deactivateEmergency(ILERC20 _token) external; function setGuardian(address _newGuardian) external; function removeProtectedAddress( ILERC20 _token, address _protectedAddresss ) external; function beforeTransfer( address _sender, address _recipient, uint256 _amount ) external; function beforeTransferFrom( address _msgSender, address _sender, address _recipient, uint256 _amount ) external; function beforeApprove( address _sender, address _spender, uint256 _amount ) external; function beforeIncreaseAllowance( address _msgSender, address _spender, uint256 _addedValue ) external; function beforeDecreaseAllowance( address _msgSender, address _spender, uint256 _subtractedValue ) external; function beforeMint(address _to, uint256 _amount) external; function beforeBurn(address _account, uint256 _amount) external; function afterTransfer( address _sender, address _recipient, uint256 _amount ) external; function setProtectedAddress( ILERC20 _token, address _protectedAddress, ProtectionStrategy _strategy ) external; function setExtraordinaryRetrievalPeriod(uint256 _newPEriod) external; function extraordinaryRetrieval( ILERC20 _token, address[] calldata addresses, uint256 fundsToRetrieve ) external; event AdminChange(address indexed _newAdmin); event RecoveryAdminChange(address indexed _newAdmin); event PauseAdminChange(address indexed _newAdmin); event GuardianSet( address indexed _oldGuardian, address indexed _newGuardian ); event NewProtectedAddress( ILERC20 indexed _token, address indexed _protectedAddress, address indexed _strategy ); event RemovedProtectedAddress( ILERC20 indexed _token, address indexed _protectedAddress ); event NewSettlementPeriodProposal(ILERC20 indexed _token, uint256 _seconds); event SettlementPeriodChange( ILERC20 indexed _token, uint256 _proposedTokenLockTimeframe ); event NewSettlementTimelock(uint256 indexed _timelock); event NewDexThreshold(uint256 indexed _newThreshold); event NewDex(address indexed _dexAddress); event DexRemoval(address indexed _dexAddress); event NewWhitelistedAddress(address indexed _whitelistAdr); event WhitelistedAddressRemoval(address indexed _whitelistAdr); event NewBlacklistedAddress(address indexed _blacklistedAddres); event AccountBlacklistRemoval(address indexed _adr); event NewStakingContract(ILssStaking indexed _newAdr); event NewReportingContract(ILssReporting indexed _newAdr); event NewGovernanceContract(ILssGovernance indexed _newAdr); event EmergencyActive(ILERC20 indexed _token); event EmergencyDeactivation(ILERC20 indexed _token); event NewMint( ILERC20 indexed token, address indexed account, uint256 indexed amount ); event NewMintLimit(ILERC20 indexed token, uint256 indexed limit); event NewMintPeriod(ILERC20 indexed token, uint256 indexed period); event NewBurn( ILERC20 indexed token, address indexed account, uint256 indexed amount ); event NewBurnLimit(ILERC20 indexed token, uint256 indexed limit); event NewBurnPeriod(ILERC20 indexed token, uint256 indexed period); event NewExtraordinaryPeriod( uint256 indexed extraordinaryRetrievalProposalPeriod ); } contract LERC20 is Context, ILERC20 { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; address public recoveryAdmin; address private recoveryAdminCandidate; bytes32 private recoveryAdminKeyHash; address public override admin; uint256 public timelockPeriod; uint256 public losslessTurnOffTimestamp; bool public isLosslessOn = true; ILssController public lossless; constructor( string memory name_, string memory symbol_, address admin_, address recoveryAdmin_, uint256 timelockPeriod_, address lossless_ ) { _name = name_; _symbol = symbol_; admin = admin_; recoveryAdmin = recoveryAdmin_; recoveryAdminCandidate = address(0); recoveryAdminKeyHash = ""; timelockPeriod = timelockPeriod_; losslessTurnOffTimestamp = 0; lossless = ILssController(lossless_); } // --- LOSSLESS modifiers --- modifier lssAprove(address spender, uint256 amount) { if (isLosslessOn) { lossless.beforeApprove(_msgSender(), spender, amount); } _; } modifier lssTransfer(address recipient, uint256 amount) { if (isLosslessOn) { lossless.beforeTransfer(_msgSender(), recipient, amount); } _; } modifier lssTransferFrom( address sender, address recipient, uint256 amount ) { if (isLosslessOn) { lossless.beforeTransferFrom( _msgSender(), sender, recipient, amount ); } _; } modifier lssIncreaseAllowance(address spender, uint256 addedValue) { if (isLosslessOn) { lossless.beforeIncreaseAllowance(_msgSender(), spender, addedValue); } _; } modifier lssDecreaseAllowance(address spender, uint256 subtractedValue) { if (isLosslessOn) { lossless.beforeDecreaseAllowance( _msgSender(), spender, subtractedValue ); } _; } modifier onlyRecoveryAdmin() { require( _msgSender() == recoveryAdmin, "LERC20: Must be recovery admin" ); _; } // --- LOSSLESS management --- function transferOutBlacklistedFunds( address[] calldata from ) external override { require( _msgSender() == address(lossless), "LERC20: Only lossless contract" ); require(isLosslessOn, "LERC20: Lossless is off"); uint256 fromLength = from.length; uint256 totalAmount = 0; for (uint256 i = 0; i < fromLength; i++) { address fromAddress = from[i]; uint256 fromBalance = _balances[fromAddress]; _balances[fromAddress] = 0; totalAmount += fromBalance; emit Transfer(fromAddress, address(lossless), fromBalance); } _balances[address(lossless)] += totalAmount; } function setLosslessAdmin( address newAdmin ) external override onlyRecoveryAdmin { require(newAdmin != admin, "LERC20: Cannot set same address"); emit NewAdmin(newAdmin); admin = newAdmin; } function transferRecoveryAdminOwnership( address candidate, bytes32 keyHash ) external override onlyRecoveryAdmin { recoveryAdminCandidate = candidate; recoveryAdminKeyHash = keyHash; emit NewRecoveryAdminProposal(candidate); } function acceptRecoveryAdminOwnership(bytes memory key) external override { require( _msgSender() == recoveryAdminCandidate, "LERC20: Must be canditate" ); require(keccak256(key) == recoveryAdminKeyHash, "LERC20: Invalid key"); emit NewRecoveryAdmin(recoveryAdminCandidate); recoveryAdmin = recoveryAdminCandidate; recoveryAdminCandidate = address(0); } function proposeLosslessTurnOff() external override onlyRecoveryAdmin { require( losslessTurnOffTimestamp == 0, "LERC20: TurnOff already proposed" ); require(isLosslessOn, "LERC20: Lossless already off"); losslessTurnOffTimestamp = block.timestamp + timelockPeriod; emit LosslessTurnOffProposal(losslessTurnOffTimestamp); } function executeLosslessTurnOff() external override onlyRecoveryAdmin { require(losslessTurnOffTimestamp != 0, "LERC20: TurnOff not proposed"); require( losslessTurnOffTimestamp <= block.timestamp, "LERC20: Time lock in progress" ); isLosslessOn = false; losslessTurnOffTimestamp = 0; emit LosslessOff(); } function executeLosslessTurnOn() external override onlyRecoveryAdmin { require(!isLosslessOn, "LERC20: Lossless already on"); losslessTurnOffTimestamp = 0; isLosslessOn = true; emit LosslessOn(); } function getAdmin() public view virtual override returns (address) { return admin; } // --- ERC20 methods --- function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } function transfer( address recipient, uint256 amount ) public virtual override lssTransfer(recipient, amount) returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve( address spender, uint256 amount ) public virtual override lssAprove(spender, amount) returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override lssTransferFrom(sender, recipient, amount) returns (bool) { uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "LERC20: transfer amount exceeds allowance" ); _transfer(sender, recipient, amount); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function increaseAllowance( address spender, uint256 addedValue ) public virtual override lssIncreaseAllowance(spender, addedValue) returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual override lssDecreaseAllowance(spender, subtractedValue) returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "LERC20: decreased allowance below zero" ); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "LERC20: transfer from the zero address"); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "LERC20: transfer amount exceeds balance" ); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "LERC20: mint to the zero address"); _totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { _balances[account] += amount; } emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } } 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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { require( newOwner != address(0), "Ownable: new owner is the zero address" ); address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function swapTokensForExactETH( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function quote( uint amountA, uint reserveA, uint reserveB ) external pure returns (uint amountB); function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) external pure returns (uint amountOut); function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) external pure returns (uint amountIn); function getAmountsOut( uint amountIn, address[] calldata path ) external view returns (uint[] memory amounts); function getAmountsIn( uint amountOut, address[] calldata path ) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance( address owner, address spender ) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom( address from, address to, uint value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit( address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s ) external; event Cast(address indexed sender, uint amount0, uint amount1); event Burn( address indexed sender, uint amount0, uint amount1, address indexed to ); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap( uint amount0Out, uint amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } error FUXION__MaxWalletReached(address wallet, uint triedBalance); error FUXION__Blacklisted(); error FUXION__InvalidThreshold(); error FUXION__TradingNotEnabled(); error FUXION__NotAllowed(); error FUXION__InvalidTaxAmount(); error FUXION__InvalidMaxWallet(); contract FuxionLabs is Ownable, LERC20 { //--------------------------------------------------------------------------------- // Structs //--------------------------------------------------------------------------------- struct SnapshotInfo { uint tier1Total; // Tier 1 eligible balance uint tier2Total; // Tier 2 eligible balance uint snapshotTakenTimestamp; // Timestamp of the snapshot } //--------------------------------------------------------------------------------- // State Variables //--------------------------------------------------------------------------------- mapping(address user => mapping(uint snapId => uint amount)) public snapshotInfo; mapping(address user => uint lastSnapshotId) public lastSnapshotId; mapping(uint snapId => SnapshotInfo) public snapshots; mapping(address wallet => bool excludedStatus) public isExcludedFromTax; mapping(address wallet => bool excludedStatus) public isExcludedFromMaxWallet; mapping(address wallet => bool dividendExcepmtionStatus) public isDividendExempt; mapping(address lpAddress => bool) public isLpAddress; mapping(address executor => bool isExecutor) public isSnapshotter; uint private constant MAX_SUPPLY = 5_000_000 ether; uint private constant TIER_1 = 50_000 ether; // TIER 1 is top TIER uint private constant TIER_2 = 1_000 ether; // TIER 2 is middle TIER uint private constant TAX_PERCENT = 100; IUniswapV2Router02 public router; address public mainPair; address private immutable WETH; address payable public immutable ADMIN_WALLET; uint public currentSnapId = 0; uint public taxThreshold; uint public maxWallet; uint public buyTax = 5; uint public sellTax = 5; bool private isSwapping = false; bool public tradingEnabled = false; //--------------------------------------------------------------------------------- // Events //--------------------------------------------------------------------------------- event WalletExcludedFromTax(address indexed _user, bool excluded); event WalletExcludedFromMax(address indexed _user, bool excluded); event BlacklistWalletsUpdate(address[] _users, bool blacklisted); event SetAddressAsLp(address indexed _lpAddress, bool isLpAddress); event SnapshotTaken(uint indexed snapId, uint timestamp); event TradingEnabled(bool isEnabled); event UpdateBlacklister(address indexed _blacklister); event SetSnapshotterStatus(address indexed _snapshotter, bool status); event EditMaxWalletAmount(uint newAmount); event EditTax(uint newTax, bool buyTax, bool sellTax); //--------------------------------------------------------------------------------- // Modifiers //--------------------------------------------------------------------------------- modifier onlySnapshotter() { if (!isSnapshotter[msg.sender]) revert FUXION__NotAllowed(); _; } //--------------------------------------------------------------------------------- // Constructor //--------------------------------------------------------------------------------- constructor( address _admin, address _newOwner, address _recoveryAdmin, address lossless_, uint256 timeLockPeriod_ ) LERC20( "Fuxion Labs", "FUXE", address(_admin), address(_recoveryAdmin), timeLockPeriod_, address(lossless_) ) { require(_newOwner != address(0), "FUXION__InvalidAddress"); _transferOwnership(_newOwner); _mint(_newOwner, MAX_SUPPLY); maxWallet = (MAX_SUPPLY * 10) / 100_0; // 1% of total supply taxThreshold = MAX_SUPPLY / 100_00; // 0.01% of total supply // Ethereum Mainnet UniswapV2 Router router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); WETH = router.WETH(); // Create the Pair for this token with WETH mainPair = IUniswapV2Factory(router.factory()).createPair( address(this), WETH ); isLpAddress[mainPair] = true; isExcludedFromMaxWallet[address(this)] = true; isExcludedFromMaxWallet[owner()] = true; isExcludedFromMaxWallet[address(router)] = true; isExcludedFromMaxWallet[address(mainPair)] = true; isExcludedFromTax[owner()] = true; isExcludedFromTax[address(this)] = true; isExcludedFromTax[address(router)] = true; isDividendExempt[owner()] = true; isDividendExempt[address(this)] = true; isDividendExempt[address(router)] = true; isDividendExempt[address(mainPair)] = true; isSnapshotter[owner()] = true; ADMIN_WALLET = payable(_admin); _approve(address(this), address(router), type(uint).max); } //--------------------------------------------------------------------------------- // External & Public Functions //--------------------------------------------------------------------------------- /** * Set wether an address is excluded from taxes or NOT. * @param _user User which status will be updated * @param _excluded The new excluded status. True is Excluded, False is NOT excluded */ function setExcludeFromTax( address _user, bool _excluded ) external onlyOwner { require(_user != address(0), "FUXION__InvalidAddress"); require( isExcludedFromTax[_user] != _excluded, "FUXION__AlreadyExcluded" ); isExcludedFromTax[_user] = _excluded; emit WalletExcludedFromTax(_user, _excluded); } /** * Exclude or include a wallet of MAX wallet limit (AntiWhale) * @param _user Address which status will be updated * @param _excluded The new excluded status. True is Excluded, False is NOT excluded */ function setExcludedFromMaxWallet( address _user, bool _excluded ) external onlyOwner { require(_user != address(0), "FUXION__InvalidAddress"); require( isExcludedFromMaxWallet[_user] != _excluded, "FUXION__AlreadyExcluded" ); isExcludedFromMaxWallet[_user] = _excluded; emit WalletExcludedFromMax(_user, _excluded); } /** * @notice Set an Address as LP * @param _lpAddress Address to set as LP * @param _isLpAddress enable or disable address as an LP */ function setLpAddress( address _lpAddress, bool _isLpAddress ) external onlyOwner { require(_lpAddress != address(0), "FUXION__InvalidAddress"); require(isLpAddress[_lpAddress] != _isLpAddress, "FUXION__AlreadySet"); require( isDividendExempt[_lpAddress] != _isLpAddress, "FUXION__Invalid" ); isLpAddress[_lpAddress] = _isLpAddress; isDividendExempt[_lpAddress] = _isLpAddress; emit SetAddressAsLp(_lpAddress, _isLpAddress); } /** * @notice Create a snapshot of the current balances */ function takeSnapshot() external onlySnapshotter { uint currentSnap = currentSnapId; currentSnapId++; SnapshotInfo storage snap = snapshots[currentSnap]; snap.snapshotTakenTimestamp = block.timestamp; // roll over total amounts snapshots[currentSnapId] = SnapshotInfo({ tier1Total: snap.tier1Total, tier2Total: snap.tier2Total, snapshotTakenTimestamp: 0 }); emit SnapshotTaken(currentSnap, block.timestamp); } /** * @notice Set the new Tax swap threshold * @param _taxThreshold New tax threshold */ function setTaxThreshold(uint _taxThreshold) external onlyOwner { require(_taxThreshold > 0, "FUXION__InvalidThreshold"); if (_taxThreshold > MAX_SUPPLY) revert FUXION__InvalidThreshold(); taxThreshold = _taxThreshold; } function setMaxWallet(uint _maxWallet) external onlyOwner { require(_maxWallet > 0, "FUXION__InvalidMaxWallet"); if (_maxWallet < MAX_SUPPLY / 100_00) revert FUXION__InvalidMaxWallet(); maxWallet = _maxWallet; emit EditMaxWalletAmount(_maxWallet); } /** * @notice set trading as enabled */ function enableTrading() external onlyOwner { tradingEnabled = true; emit TradingEnabled(true); } /** * @notice set trading as disabled */ function pauseTrading() external onlyOwner { tradingEnabled = false; emit TradingEnabled(false); } /** * @notice Set the Snapshotter status to an address. These addresses can take snapshots at any time * @param _snapshotter Address to set snapshotter status * @param _isSnapshotter True to set as snapshotter, false to remove */ function setSnapshotterAddress( address _snapshotter, bool _isSnapshotter ) external onlyOwner { require(_snapshotter != address(0), "FUXION__InvalidAddress"); require( isSnapshotter[_snapshotter] != _isSnapshotter, "FUXION__AlreadySet" ); isSnapshotter[_snapshotter] = _isSnapshotter; emit SetSnapshotterStatus(_snapshotter, _isSnapshotter); } /** * @notice set the Buy tax to a new value * @param _buyTax New buy tax * @dev buyTax is a maximimum of 10% so the max acceptable _buyTax is 10 */ function setBuyTax(uint _buyTax) external onlyOwner { require(_buyTax > 0, "FUXION__InvalidTaxAmount"); if (_buyTax > 10) revert FUXION__InvalidTaxAmount(); buyTax = _buyTax; emit EditTax(_buyTax, true, false); } /** * @notice set the Sell tax to a new value * @param _sellTax New sell tax * @dev sellTax is a maximimum of 10% so the max acceptable _sellTax is 10 */ function setSellTax(uint _sellTax) external onlyOwner { require(_sellTax > 0, "FUXION__InvalidTaxAmount"); if (_sellTax > 10) revert FUXION__InvalidTaxAmount(); sellTax = _sellTax; emit EditTax(_sellTax, false, true); } //--------------------------------------------------------------------------------- // Internal & Private Functions //--------------------------------------------------------------------------------- /** * @notice Underlying transfer of tokens used by `transfer` and `transferFrom` in ERC20 which are public * @param from Address that holds the funds * @param to Address that receives the funds * @param amount Amount of funds to send */ function _transfer( address from, address to, uint amount ) internal override { bool taxExclusion = isExcludedFromTax[from] || isExcludedFromTax[to]; if (!tradingEnabled && !taxExclusion) { revert FUXION__TradingNotEnabled(); } _updateSnapDecrease(from, amount); uint currentBalance = balanceOf(address(this)); if ( !isSwapping && currentBalance >= taxThreshold && !taxExclusion && !isLpAddress[from] // Cant do this on buys ) { _swapTokens(); } // Check that sender is free of tax or receiver is free of tax if (!taxExclusion) { uint tax; // if not free of tax, check if is buy or sell if (isLpAddress[to]) { // IS SELL tax = (amount * sellTax) / TAX_PERCENT; } else if (isLpAddress[from]) { // IS BUY tax = (amount * buyTax) / TAX_PERCENT; } if (tax > 0) { super._transfer(from, address(this), tax); amount -= tax; } } // check if receiver is free of max wallet uint toNEWBalance = balanceOf(to) + amount; if (!isExcludedFromMaxWallet[to] && toNEWBalance > maxWallet) { revert FUXION__MaxWalletReached(to, toNEWBalance); } _updateSnapIncrease(to, amount); super._transfer(from, to, amount); } /** * @notice Swap any tokens the contract has for ETH and send the ETH directly to the Admin Wallet */ function _swapTokens() private { isSwapping = true; // Get the current amount of tokens stored in the contract uint256 contractTokenBalance = balanceOf(address(this)); // If the contract has tokens if (contractTokenBalance > 0) { address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; // Swap all for ETH and send to Admin Wallet router.swapExactTokensForETHSupportingFeeOnTransferTokens( contractTokenBalance, 0, // Accept any amount of ETH path, ADMIN_WALLET, block.timestamp ); } isSwapping = false; } /** * @notice Decrease a wallet's current snapshot balance * @param user Wallet to update snapshot info * @param amount the difference amount in snapshot */ function _updateSnapDecrease(address user, uint amount) private { uint currentSnap = currentSnapId; uint currentSnapBalance = snapshotInfo[user][currentSnap]; uint currentBalance = balanceOf(user); uint newBalance = currentBalance - amount; SnapshotInfo storage snap = snapshots[currentSnap]; lastSnapshotId[user] = currentSnap; // If user is exempt from dividends, we need to set the snapshot value to 0 if (isDividendExempt[user]) { delete snapshotInfo[user][currentSnap]; // if user is now exempt but used to have funds, we need to decrease the total if (currentSnapBalance > 0) { if (currentSnapBalance >= TIER_1) snap.tier1Total -= currentSnapBalance; else if (currentSnapBalance >= TIER_2) snap.tier2Total -= currentSnapBalance; } } else { snapshotInfo[user][currentSnap] = newBalance; /// FROM TIER 1 if (currentBalance >= TIER_1) { // Decrease TIER 1 snap.tier1Total -= currentBalance; // TO SAME TIER if (newBalance >= TIER_1) snap.tier1Total += newBalance; // TO TIER 2 if (newBalance < TIER_1 && newBalance >= TIER_2) snap.tier2Total += newBalance; // if to NO tier, just decrease is fine } // FROM TIER 2 else if (currentBalance >= TIER_2) { snap.tier2Total -= currentBalance; // TO SAME TIER if (newBalance >= TIER_2) snap.tier2Total += newBalance; // TO NO TIER JUST DO NOTHING } } } /** * @notice Increase a wallet's current snapshot balance * @param user Wallet to update snapshot info * @param amount Difference amount */ function _updateSnapIncrease(address user, uint amount) private { uint currentSnap = currentSnapId; uint currentBalance = balanceOf(user); uint currentSnapBalance = snapshotInfo[user][currentSnap]; SnapshotInfo storage snap = snapshots[currentSnap]; lastSnapshotId[user] = currentSnap; // If user is exempt from dividends, we need to set the snapshot value to 0 if (isDividendExempt[user]) { delete snapshotInfo[user][currentSnap]; // if user is now exempt but used to have funds, we need to decrease the total if (currentSnapBalance > 0) { if (currentSnapBalance >= TIER_1) snap.tier1Total -= currentSnapBalance; else if (currentSnapBalance >= TIER_2) snap.tier2Total -= currentSnapBalance; } } else { snapshotInfo[user][currentSnap] = currentBalance + amount; uint newBalance = currentBalance + amount; // Check if there is any tier advancement // FROM NO TIER if (currentBalance < TIER_2) { // TO TIER 1 if (newBalance >= TIER_1) snap.tier1Total += newBalance; // TO TIER 2 else if (newBalance >= TIER_2) snap.tier2Total += newBalance; // TO NO TIER DO NOTHING } // FROM TIER 2 else if (currentBalance >= TIER_2 && currentBalance < TIER_1) { // TO TIER 1 if (newBalance >= TIER_1) snap.tier1Total += newBalance; // TO SAME TIER else if (newBalance >= TIER_2) snap.tier2Total += newBalance; snap.tier2Total -= currentBalance; } // FROM TIER 1 else if (currentBalance >= TIER_1) { // Stay in same tier snap.tier1Total += newBalance; snap.tier1Total -= currentBalance; } } } //--------------------------------------------------------------------------------- // External & Public VIEW | PURE Functions //--------------------------------------------------------------------------------- function getUserSnapshotAt( address user, uint snapId ) external view returns (uint) { // If snapshot ID hasn't been taken, return 0 if (snapId > currentSnapId) return 0; uint lastUserSnap = lastSnapshotId[user]; // if last snapshot is before the requested snapshot, return current balance of the user if (snapId > lastUserSnap) return balanceOf(user); // else return the snapshot balance return snapshotInfo[user][snapId]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"address","name":"_recoveryAdmin","type":"address"},{"internalType":"address","name":"lossless_","type":"address"},{"internalType":"uint256","name":"timeLockPeriod_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FUXION__InvalidMaxWallet","type":"error"},{"inputs":[],"name":"FUXION__InvalidTaxAmount","type":"error"},{"inputs":[],"name":"FUXION__InvalidThreshold","type":"error"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"triedBalance","type":"uint256"}],"name":"FUXION__MaxWalletReached","type":"error"},{"inputs":[],"name":"FUXION__NotAllowed","type":"error"},{"inputs":[],"name":"FUXION__TradingNotEnabled","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"_users","type":"address[]"},{"indexed":false,"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"BlacklistWalletsUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"EditMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTax","type":"uint256"},{"indexed":false,"internalType":"bool","name":"buyTax","type":"bool"},{"indexed":false,"internalType":"bool","name":"sellTax","type":"bool"}],"name":"EditTax","type":"event"},{"anonymous":false,"inputs":[],"name":"LosslessOff","type":"event"},{"anonymous":false,"inputs":[],"name":"LosslessOn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_turnOffDate","type":"uint256"}],"name":"LosslessTurnOffProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newAdmin","type":"address"}],"name":"NewRecoveryAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_candidate","type":"address"}],"name":"NewRecoveryAdminProposal","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":"_lpAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"isLpAddress","type":"bool"}],"name":"SetAddressAsLp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_snapshotter","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetSnapshotterStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"snapId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SnapshotTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_blacklister","type":"address"}],"name":"UpdateBlacklister","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"WalletExcludedFromMax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"WalletExcludedFromTax","type":"event"},{"inputs":[],"name":"ADMIN_WALLET","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"key","type":"bytes"}],"name":"acceptRecoveryAdminOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSnapId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeLosslessTurnOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeLosslessTurnOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"snapId","type":"uint256"}],"name":"getUserSnapshotAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"dividendExcepmtionStatus","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"excludedStatus","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isExcludedFromTax","outputs":[{"internalType":"bool","name":"excludedStatus","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLosslessOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lpAddress","type":"address"}],"name":"isLpAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"executor","type":"address"}],"name":"isSnapshotter","outputs":[{"internalType":"bool","name":"isExecutor","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"lastSnapshotId","outputs":[{"internalType":"uint256","name":"lastSnapshotId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lossless","outputs":[{"internalType":"contract ILssController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"losslessTurnOffTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposeLosslessTurnOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoveryAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"setExcludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"setLosslessAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpAddress","type":"address"},{"internalType":"bool","name":"_isLpAddress","type":"bool"}],"name":"setLpAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellTax","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_snapshotter","type":"address"},{"internalType":"bool","name":"_isSnapshotter","type":"bool"}],"name":"setSnapshotterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxThreshold","type":"uint256"}],"name":"setTaxThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"snapId","type":"uint256"}],"name":"snapshotInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"snapId","type":"uint256"}],"name":"snapshots","outputs":[{"internalType":"uint256","name":"tier1Total","type":"uint256"},{"internalType":"uint256","name":"tier2Total","type":"uint256"},{"internalType":"uint256","name":"snapshotTakenTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeSnapshot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"taxThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelockPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"from","type":"address[]"}],"name":"transferOutBlacklistedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"candidate","type":"address"},{"internalType":"bytes32","name":"keyHash","type":"bytes32"}],"name":"transferRecoveryAdminOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526001600c5f6101000a81548160ff0219169083151502179055505f6017556005601a556005601b555f601c5f6101000a81548160ff0219169083151502179055505f601c60016101000a81548160ff0219169083151502179055503480156200006b575f80fd5b5060405162006c7738038062006c77833981810160405281019062000091919062000fc5565b6040518060400160405280600b81526020017f467578696f6e204c6162730000000000000000000000000000000000000000008152506040518060400160405280600481526020017f465558450000000000000000000000000000000000000000000000000000000081525086858486620001216200011562000b9f60201b60201c565b62000ba660201b60201c565b8560049081620001329190620012a4565b508460059081620001449190620012a4565b508360095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60088190555081600a819055505f600b8190555080600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603620002d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c990620013e6565b60405180910390fd5b620002e38462000ba660201b60201c565b62000300846a0422ca8b0a00a42500000062000cd860201b60201c565b6103e8600a6a0422ca8b0a00a4250000006200031d919062001433565b620003299190620014aa565b6019819055506127106a0422ca8b0a00a4250000006200034a9190620014aa565b601881905550737a250d5630b4cf539739df2c5dacb4c659f2488d60155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200040f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004359190620014e1565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004d3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004f99190620014e1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396306080516040518363ffffffff1660e01b81526004016200053792919062001522565b6020604051808303815f875af115801562000554573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200057a9190620014e1565b60165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160135f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f6200069962000e1860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f620007e962000e1860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f6200091862000e1860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f62000abd62000e1860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505062000b943060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000e3f60201b60201c565b5050505050620016b5565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0e90620015c1565b60405180910390fd5b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000d49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d40906200162f565b60405180910390fd5b8060035f82825462000d5c91906200164f565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000e0c91906200169a565b60405180910390a35050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000f1b91906200169a565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f578262000f2c565b9050919050565b62000f698162000f4b565b811462000f74575f80fd5b50565b5f8151905062000f878162000f5e565b92915050565b5f819050919050565b62000fa18162000f8d565b811462000fac575f80fd5b50565b5f8151905062000fbf8162000f96565b92915050565b5f805f805f60a0868803121562000fe15762000fe062000f28565b5b5f62000ff08882890162000f77565b9550506020620010038882890162000f77565b9450506040620010168882890162000f77565b9350506060620010298882890162000f77565b92505060806200103c8882890162000faf565b9150509295509295909350565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620010c557607f821691505b602082108103620010db57620010da62001080565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200113f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001102565b6200114b868362001102565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200118c62001186620011808462000f8d565b62001163565b62000f8d565b9050919050565b5f819050919050565b620011a7836200116c565b620011bf620011b68262001193565b8484546200110e565b825550505050565b5f90565b620011d5620011c7565b620011e28184846200119c565b505050565b5b818110156200120957620011fd5f82620011cb565b600181019050620011e8565b5050565b601f82111562001258576200122281620010e1565b6200122d84620010f3565b810160208510156200123d578190505b620012556200124c85620010f3565b830182620011e7565b50505b505050565b5f82821c905092915050565b5f6200127a5f19846008026200125d565b1980831691505092915050565b5f62001294838362001269565b9150826002028217905092915050565b620012af8262001049565b67ffffffffffffffff811115620012cb57620012ca62001053565b5b620012d78254620010ad565b620012e48282856200120d565b5f60209050601f8311600181146200131a575f841562001305578287015190505b62001311858262001287565b86555062001380565b601f1984166200132a86620010e1565b5f5b8281101562001353578489015182556001820191506020850194506020810190506200132c565b868310156200137357848901516200136f601f89168262001269565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f465558494f4e5f5f496e76616c696441646472657373000000000000000000005f82015250565b5f620013ce60168362001388565b9150620013db8262001398565b602082019050919050565b5f6020820190508181035f830152620013ff81620013c0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200143f8262000f8d565b91506200144c8362000f8d565b92508282026200145c8162000f8d565b9150828204841483151762001476576200147562001406565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620014b68262000f8d565b9150620014c38362000f8d565b925082620014d657620014d56200147d565b5b828204905092915050565b5f60208284031215620014f957620014f862000f28565b5b5f620015088482850162000f77565b91505092915050565b6200151c8162000f4b565b82525050565b5f604082019050620015375f83018562001511565b62001546602083018462001511565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f620015a960268362001388565b9150620015b6826200154d565b604082019050919050565b5f6020820190508181035f830152620015da816200159b565b9050919050565b7f4c45524332303a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f6200161760208362001388565b91506200162482620015e1565b602082019050919050565b5f6020820190508181035f830152620016488162001609565b9050919050565b5f6200165b8262000f8d565b9150620016688362000f8d565b925082820190508082111562001683576200168262001406565b5b92915050565b620016948162000f8d565b82525050565b5f602082019050620016af5f83018462001689565b92915050565b60805160a051615599620016de5f395f8181612aa4015261396301525f6138b401526155995ff3fe608060405234801561000f575f80fd5b5060043610610381575f3560e01c8063715018a6116101dc578063b3d3d37e1161010d578063d6565a2d116100ab578063f2fde38b1161007a578063f2fde38b14610a39578063f851a44014610a55578063f887ea4014610a73578063f8b45b0514610a9157610381565b8063d6565a2d146109b1578063d6e242b8146109e3578063dc1052e2146109ed578063dd62ed3e14610a0957610381565b8063cb4ca631116100e7578063cb4ca63114610915578063cc1776d314610945578063ccfa214f14610963578063cd9a0d461461098157610381565b8063b3d3d37e146108d1578063b5c22877146108db578063c2cd4a07146108f757610381565b8063936af9111161017a578063a9059cbb11610154578063a9059cbb14610837578063b16b04a714610867578063b20161db14610897578063b38fe957146108c757610381565b8063936af911146107cd57806395d89b41146107e9578063a457c2d71461080757610381565b80638a8c523c116101b65780638a8c523c1461076d5780638cd09d50146107775780638da5cb5b1461079357806393310ffe146107b157610381565b8063715018a61461072757806377d1440d1461073157806385af30c51461074f57610381565b806339509351116102b65780635d0044ca1161025457806362771d331161022e57806362771d331461068d5780636dd3d39f146106a95780636e9960c3146106d957806370a08231146106f757610381565b80635d0044ca146106355780635f6529a31461065157806361086b001461066f57610381565b80634355855a116102905780634355855a146105bf5780634ada218b146105ef5780634f7041a51461060d5780635b8a194a1461062b57610381565b8063395093511461055757806339fb86c51461058757806341220104146105a357610381565b806318160ddd116103235780632ecaf675116102fd5780632ecaf675146104cd5780632f7c5980146104eb578063313ce5671461051b57806334f6ebf51461053957610381565b806318160ddd1461046357806323b872dd146104815780632baa3c9e146104b157610381565b80630da7caa31161035f5780630da7caa3146103ef5780630ee0a1131461040b5780631031e36e1461042957806315c9aca11461043357610381565b806306fdde031461038557806307a212be146103a3578063095ea7b3146103bf575b5f80fd5b61038d610aaf565b60405161039a9190614001565b60405180910390f35b6103bd60048036038101906103b89190614065565b610b3f565b005b6103d960048036038101906103d491906140ea565b610bd8565b6040516103e69190614142565b60405180910390f35b61040960048036038101906104049190614185565b610ca1565b005b610413610e4c565b60405161042091906141d2565b60405180910390f35b610431610e52565b005b61044d600480360381019061044891906141eb565b610ead565b60405161045a9190614142565b60405180910390f35b61046b610eca565b60405161047891906141d2565b60405180910390f35b61049b60048036038101906104969190614216565b610ed3565b6040516104a89190614142565b60405180910390f35b6104cb60048036038101906104c691906141eb565b61107e565b005b6104d5611229565b6040516104e291906141d2565b60405180910390f35b610505600480360381019061050091906141eb565b61122f565b6040516105129190614142565b60405180910390f35b61052361124c565b6040516105309190614281565b60405180910390f35b610541611254565b60405161054e91906142f5565b60405180910390f35b610571600480360381019061056c91906140ea565b61127a565b60405161057e9190614142565b60405180910390f35b6105a1600480360381019061059c9190614185565b6113cd565b005b6105bd60048036038101906105b89190614185565b611578565b005b6105d960048036038101906105d491906141eb565b611723565b6040516105e69190614142565b60405180910390f35b6105f7611740565b6040516106049190614142565b60405180910390f35b610615611753565b60405161062291906141d2565b60405180910390f35b610633611759565b005b61064f600480360381019061064a9190614065565b61188d565b005b61065961196a565b604051610666919061431d565b60405180910390f35b61067761198f565b60405161068491906141d2565b60405180910390f35b6106a760048036038101906106a29190614185565b611995565b005b6106c360048036038101906106be91906141eb565b611c23565b6040516106d09190614142565b60405180910390f35b6106e1611c40565b6040516106ee919061431d565b60405180910390f35b610711600480360381019061070c91906141eb565b611c68565b60405161071e91906141d2565b60405180910390f35b61072f611cae565b005b610739611cc1565b60405161074691906141d2565b60405180910390f35b610757611cc7565b604051610764919061431d565b60405180910390f35b610775611cec565b005b610791600480360381019061078c9190614065565b611d49565b005b61079b611e14565b6040516107a8919061431d565b60405180910390f35b6107cb60048036038101906107c69190614369565b611e3b565b005b6107e760048036038101906107e29190614408565b611f5f565b005b6107f161222a565b6040516107fe9190614001565b60405180910390f35b610821600480360381019061081c91906140ea565b6122ba565b60405161082e9190614142565b60405180910390f35b610851600480360381019061084c91906140ea565b612455565b60405161085e9190614142565b60405180910390f35b610881600480360381019061087c91906140ea565b61251e565b60405161088e91906141d2565b60405180910390f35b6108b160048036038101906108ac91906140ea565b61253e565b6040516108be91906141d2565b60405180910390f35b6108cf612602565b005b6108d961276f565b005b6108f560048036038101906108f0919061457b565b6128b9565b005b6108ff612aa2565b60405161090c91906145e2565b60405180910390f35b61092f600480360381019061092a91906141eb565b612ac6565b60405161093c9190614142565b60405180910390f35b61094d612ae3565b60405161095a91906141d2565b60405180910390f35b61096b612ae9565b6040516109789190614142565b60405180910390f35b61099b600480360381019061099691906141eb565b612afb565b6040516109a891906141d2565b60405180910390f35b6109cb60048036038101906109c69190614065565b612b10565b6040516109da939291906145fb565b60405180910390f35b6109eb612b36565b005b610a076004803603810190610a029190614065565b612cad565b005b610a236004803603810190610a1e9190614630565b612d78565b604051610a3091906141d2565b60405180910390f35b610a536004803603810190610a4e91906141eb565b612dfa565b005b610a5d612e7c565b604051610a6a919061431d565b60405180910390f35b610a7b612ea1565b604051610a88919061468e565b60405180910390f35b610a99612ec6565b604051610aa691906141d2565b60405180910390f35b606060048054610abe906146d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea906146d4565b8015610b355780601f10610b0c57610100808354040283529160200191610b35565b820191905f5260205f20905b815481529060010190602001808311610b1857829003601f168201915b5050505050905090565b610b47612ecc565b5f8111610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b809061474e565b60405180910390fd5b6a0422ca8b0a00a425000000811115610bce576040517f39922d1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060188190555050565b5f8282600c5f9054906101000a900460ff1615610c8357600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347abf3be610c35612f4a565b84846040518463ffffffff1660e01b8152600401610c559392919061476c565b5f604051808303815f87803b158015610c6c575f80fd5b505af1158015610c7e573d5f803e3d5ffd5b505050505b610c95610c8e612f4a565b8686612f51565b60019250505092915050565b610ca9612ecc565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e906147eb565b60405180910390fd5b80151560145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d90614853565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f0d148a5c1704d9c0c8a1669e9b7ae29b729fa7fd357765342510c19a81a985d982604051610e409190614142565b60405180910390a25050565b60175481565b610e5a612ecc565b5f601c60016101000a81548160ff0219169083151502179055507fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a5f604051610ea39190614142565b60405180910390a1565b6014602052805f5260405f205f915054906101000a900460ff1681565b5f600354905090565b5f838383600c5f9054906101000a900460ff1615610f8157600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663379f5c69610f31612f4a565b8585856040518563ffffffff1660e01b8152600401610f539493929190614871565b5f604051808303815f87803b158015610f6a575f80fd5b505af1158015610f7c573d5f803e3d5ffd5b505050505b5f60025f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610fc8612f4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905085811015611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90614924565b60405180910390fd5b611052888888613038565b61106f8861105e612f4a565b888461106a919061496f565b612f51565b60019450505050509392505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110be612f4a565b73ffffffffffffffffffffffffffffffffffffffff1614611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b906149ec565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a90614a54565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60405160405180910390a28060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b6013602052805f5260405f205f915054906101000a900460ff1681565b5f6012905090565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8282600c5f9054906101000a900460ff161561132557600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf5961bb6112d7612f4a565b84846040518463ffffffff1660e01b81526004016112f79392919061476c565b5f604051808303815f87803b15801561130e575f80fd5b505af1158015611320573d5f803e3d5ffd5b505050505b6113c1611330612f4a565b868660025f61133d612f4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546113bc9190614a72565b612f51565b60019250505092915050565b6113d5612ecc565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a906147eb565b60405180910390fd5b80151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c990614aef565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f2633ad3ef534c4bddda523fae274ccb4e47bb324c2eca411a9377d01529e2ffe8260405161156c9190614142565b60405180910390a25050565b611580612ecc565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e5906147eb565b60405180910390fd5b80151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490614aef565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167ff40f85f17edc8eb36b286100bde23545ec4fac647f64dd7214a897af944fcb30826040516117179190614142565b60405180910390a25050565b6012602052805f5260405f205f915054906101000a900460ff1681565b601c60019054906101000a900460ff1681565b601a5481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611799612f4a565b73ffffffffffffffffffffffffffffffffffffffff16146117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e6906149ec565b60405180910390fd5b600c5f9054906101000a900460ff161561183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590614b57565b60405180910390fd5b5f600b819055506001600c5f6101000a81548160ff0219169083151502179055507f1ba3b66404043da8297d0b876fa6464f2cb127edfc6626308046d4503028322b60405160405180910390a1565b611895612ecc565b5f81116118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ce90614bbf565b60405180910390fd5b6127106a0422ca8b0a00a4250000006118f09190614c0a565b811015611929576040517fbb8cf97300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806019819055507fcb6a4e25e6070c228470cc0df60e64d9c48337dd39b32c47376eef2b366454b78160405161195f91906141d2565b60405180910390a150565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b61199d612ecc565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a02906147eb565b60405180910390fd5b80151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190614853565b60405180910390fd5b80151560125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090614c84565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f242e47ed17a9f432e4242bab4c34941ac33603481cb8319ed8dd8df34ae0051182604051611c179190614142565b60405180910390a25050565b6011602052805f5260405f205f915054906101000a900460ff1681565b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611cb6612ecc565b611cbf5f61339e565b565b60185481565b60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cf4612ecc565b6001601c60016101000a81548160ff0219169083151502179055507fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a6001604051611d3f9190614142565b60405180910390a1565b611d51612ecc565b5f8111611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614cec565b60405180910390fd5b600a811115611dce576040517f2aad382000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601b819055507f78cd946ea54440e5e0457ca142c8592fd7a7d34388c8a82328c57e39cc67f04d815f6001604051611e0993929190614d0a565b60405180910390a150565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e7b612f4a565b73ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec8906149ec565b60405180910390fd5b8160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806008819055508173ffffffffffffffffffffffffffffffffffffffff167f6c591da8da2f6e69746d7d9ae61c27ee29fbe303798141b4942ae2aef54274b160405160405180910390a25050565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fa0612f4a565b73ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed90614d89565b60405180910390fd5b600c5f9054906101000a900460ff16612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b90614df1565b60405180910390fd5b5f8282905090505f805b828110156121ae575f85858381811061206a57612069614e0f565b5b905060200201602081019061207f91906141eb565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080846121109190614a72565b9350600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161219191906141d2565b60405180910390a3505080806121a690614e3c565b91505061204e565b508060015f600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461221d9190614a72565b9250508190555050505050565b606060058054612239906146d4565b80601f0160208091040260200160405190810160405280929190818152602001828054612265906146d4565b80156122b05780601f10612287576101008083540402835291602001916122b0565b820191905f5260205f20905b81548152906001019060200180831161229357829003601f168201915b5050505050905090565b5f8282600c5f9054906101000a900460ff161561236557600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663568c75a9612317612f4a565b84846040518463ffffffff1660e01b81526004016123379392919061476c565b5f604051808303815f87803b15801561234e575f80fd5b505af1158015612360573d5f803e3d5ffd5b505050505b5f60025f612371612f4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508481101561242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290614ef3565b60405180910390fd5b612448612436612f4a565b878784612443919061496f565b612f51565b6001935050505092915050565b5f8282600c5f9054906101000a900460ff161561250057600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ffb811f6124b2612f4a565b84846040518463ffffffff1660e01b81526004016124d29392919061476c565b5f604051808303815f87803b1580156124e9575f80fd5b505af11580156124fb573d5f803e3d5ffd5b505050505b61251261250b612f4a565b8686613038565b60019250505092915050565b600d602052815f5260405f20602052805f5260405f205f91509150505481565b5f601754821115612551575f90506125fc565b5f600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050808311156125ab576125a384611c68565b9150506125fc565b600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20549150505b92915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612642612f4a565b73ffffffffffffffffffffffffffffffffffffffff1614612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f906149ec565b60405180910390fd5b5f600b54036126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d390614f5b565b60405180910390fd5b42600b541115612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890614fc3565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055505f600b819055507f3eb72350c9c7928d31e9ab450bfff2c159434aa4b82658a7d8eae7f109cb4e7b60405160405180910390a1565b60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166127ef576040517f42df492800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f601754905060175f81548092919061280790614e3c565b91905055505f600f5f8381526020019081526020015f2090504281600201819055506040518060600160405280825f01548152602001826001015481526020015f815250600f5f60175481526020019081526020015f205f820151815f01556020820151816001015560408201518160020155905050817f3b5ce8b2d475067181f949f668899c93f26f0b25c5f8712ebca6b4b93d92989d426040516128ad91906141d2565b60405180910390a25050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128f9612f4a565b73ffffffffffffffffffffffffffffffffffffffff161461294f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129469061502b565b60405180910390fd5b60085481805190602001201461299a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299190615093565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb94bba6936ec7f75ee931dadf6e1a4d66b43d09b6fa0178fb13df9b77fb5841f60405160405180910390a260075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6010602052805f5260405f205f915054906101000a900460ff1681565b601b5481565b600c5f9054906101000a900460ff1681565b600e602052805f5260405f205f915090505481565b600f602052805f5260405f205f91509050805f0154908060010154908060020154905083565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b76612f4a565b73ffffffffffffffffffffffffffffffffffffffff1614612bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc3906149ec565b60405180910390fd5b5f600b5414612c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c07906150fb565b60405180910390fd5b600c5f9054906101000a900460ff16612c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5590615163565b60405180910390fd5b600a5442612c6c9190614a72565b600b819055507f6ca688e6e3ddd707280140b2bf0106afe883689b6c74e68cbd517576dd9c245a600b54604051612ca391906141d2565b60405180910390a1565b612cb5612ecc565b5f8111612cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cee90614cec565b60405180910390fd5b600a811115612d32576040517f2aad382000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601a819055507f78cd946ea54440e5e0457ca142c8592fd7a7d34388c8a82328c57e39cc67f04d8160015f604051612d6d93929190614d0a565b60405180910390a150565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b612e02612ecc565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e67906151f1565b60405180910390fd5b612e798161339e565b50565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b612ed4612f4a565b73ffffffffffffffffffffffffffffffffffffffff16612ef2611e14565b73ffffffffffffffffffffffffffffffffffffffff1614612f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3f90615259565b60405180910390fd5b565b5f33905090565b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161302b91906141d2565b60405180910390a3505050565b5f60105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806130d4575060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b9050601c60019054906101000a900460ff161580156130f1575080155b15613128576040517f729cc03d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61313284836134cd565b5f61313c30611c68565b9050601c5f9054906101000a900460ff1615801561315c57506018548110155b8015613166575081155b80156131b9575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131c7576131c66137e9565b5b816132ce575f60135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561323d576064601b548561322c9190615277565b6132369190614c0a565b90506132aa565b60135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156132a9576064601a548561329c9190615277565b6132a69190614c0a565b90505b5b5f8111156132cc576132bd8630836139ee565b80846132c9919061496f565b93505b505b5f836132d986611c68565b6132e39190614a72565b905060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561333d575060195481115b156133815784816040517f1ba623300000000000000000000000000000000000000000000000000000000081526004016133789291906152b8565b60405180910390fd5b61338b8585613beb565b6133968686866139ee565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361340c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613403906151f1565b60405180910390fd5b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60175490505f600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205490505f61352d85611c68565b90505f848261353c919061496f565b90505f600f5f8681526020019081526020015f20905084600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060125f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561369b57600d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f205f90555f84111561369657690a968163f0a57b40000084106136695783815f015f82825461365d919061496f565b92505081905550613695565b683635c9adc5dea0000084106136945783816001015f82825461368c919061496f565b925050819055505b5b5b6137e0565b81600d5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8781526020019081526020015f2081905550690a968163f0a57b40000083106137885782815f015f82825461370f919061496f565b92505081905550690a968163f0a57b40000082106137415781815f015f8282546137399190614a72565b925050819055505b690a968163f0a57b400000821080156137635750683635c9adc5dea000008210155b156137835781816001015f82825461377b9190614a72565b925050819055505b6137df565b683635c9adc5dea0000083106137de5782816001015f8282546137ab919061496f565b92505081905550683635c9adc5dea0000082106137dd5781816001015f8282546137d59190614a72565b925050819055505b5b5b5b50505050505050565b6001601c5f6101000a81548160ff0219169083151502179055505f61380d30611c68565b90505f8111156139d2575f600267ffffffffffffffff81111561383357613832614457565b5b6040519080825280602002602001820160405280156138615781602001602082028036833780820191505090505b50905030815f8151811061387857613877614e0f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106138e7576138e6614e0f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f847f0000000000000000000000000000000000000000000000000000000000000000426040518663ffffffff1660e01b81526004016139a39594939291906153ef565b5f604051808303815f87803b1580156139ba575f80fd5b505af11580156139cc573d5f803e3d5ffd5b50505050505b5f601c5f6101000a81548160ff02191690831515021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a53906154b7565b60405180910390fd5b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ad790615545565b60405180910390fd5b8181613aec919061496f565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613b799190614a72565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613bdd91906141d2565b60405180910390a350505050565b5f60175490505f613bfb84611c68565b90505f600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490505f600f5f8581526020019081526020015f20905083600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613daa57600d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f205f90555f821115613da557690a968163f0a57b4000008210613d785781815f015f828254613d6c919061496f565b92505081905550613da4565b683635c9adc5dea000008210613da35781816001015f828254613d9b919061496f565b925050819055505b5b5b613f6f565b8483613db69190614a72565b600d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f20819055505f8584613e139190614a72565b9050683635c9adc5dea00000841015613e8657690a968163f0a57b4000008110613e555780825f015f828254613e499190614a72565b92505081905550613e81565b683635c9adc5dea000008110613e805780826001015f828254613e789190614a72565b925050819055505b5b613f6d565b683635c9adc5dea000008410158015613ea85750690a968163f0a57b40000084105b15613f2757690a968163f0a57b4000008110613edc5780825f015f828254613ed09190614a72565b92505081905550613f08565b683635c9adc5dea000008110613f075780826001015f828254613eff9190614a72565b925050819055505b5b83826001015f828254613f1b919061496f565b92505081905550613f6c565b690a968163f0a57b4000008410613f6b5780825f015f828254613f4a9190614a72565b9250508190555083825f015f828254613f63919061496f565b925050819055505b5b5b505b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613fae578082015181840152602081019050613f93565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613fd382613f77565b613fdd8185613f81565b9350613fed818560208601613f91565b613ff681613fb9565b840191505092915050565b5f6020820190508181035f8301526140198184613fc9565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61404481614032565b811461404e575f80fd5b50565b5f8135905061405f8161403b565b92915050565b5f6020828403121561407a5761407961402a565b5b5f61408784828501614051565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140b982614090565b9050919050565b6140c9816140af565b81146140d3575f80fd5b50565b5f813590506140e4816140c0565b92915050565b5f8060408385031215614100576140ff61402a565b5b5f61410d858286016140d6565b925050602061411e85828601614051565b9150509250929050565b5f8115159050919050565b61413c81614128565b82525050565b5f6020820190506141555f830184614133565b92915050565b61416481614128565b811461416e575f80fd5b50565b5f8135905061417f8161415b565b92915050565b5f806040838503121561419b5761419a61402a565b5b5f6141a8858286016140d6565b92505060206141b985828601614171565b9150509250929050565b6141cc81614032565b82525050565b5f6020820190506141e55f8301846141c3565b92915050565b5f60208284031215614200576141ff61402a565b5b5f61420d848285016140d6565b91505092915050565b5f805f6060848603121561422d5761422c61402a565b5b5f61423a868287016140d6565b935050602061424b868287016140d6565b925050604061425c86828701614051565b9150509250925092565b5f60ff82169050919050565b61427b81614266565b82525050565b5f6020820190506142945f830184614272565b92915050565b5f819050919050565b5f6142bd6142b86142b384614090565b61429a565b614090565b9050919050565b5f6142ce826142a3565b9050919050565b5f6142df826142c4565b9050919050565b6142ef816142d5565b82525050565b5f6020820190506143085f8301846142e6565b92915050565b614317816140af565b82525050565b5f6020820190506143305f83018461430e565b92915050565b5f819050919050565b61434881614336565b8114614352575f80fd5b50565b5f813590506143638161433f565b92915050565b5f806040838503121561437f5761437e61402a565b5b5f61438c858286016140d6565b925050602061439d85828601614355565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126143c8576143c76143a7565b5b8235905067ffffffffffffffff8111156143e5576143e46143ab565b5b602083019150836020820283011115614401576144006143af565b5b9250929050565b5f806020838503121561441e5761441d61402a565b5b5f83013567ffffffffffffffff81111561443b5761443a61402e565b5b614447858286016143b3565b92509250509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61448d82613fb9565b810181811067ffffffffffffffff821117156144ac576144ab614457565b5b80604052505050565b5f6144be614021565b90506144ca8282614484565b919050565b5f67ffffffffffffffff8211156144e9576144e8614457565b5b6144f282613fb9565b9050602081019050919050565b828183375f83830152505050565b5f61451f61451a846144cf565b6144b5565b90508281526020810184848401111561453b5761453a614453565b5b6145468482856144ff565b509392505050565b5f82601f830112614562576145616143a7565b5b813561457284826020860161450d565b91505092915050565b5f602082840312156145905761458f61402a565b5b5f82013567ffffffffffffffff8111156145ad576145ac61402e565b5b6145b98482850161454e565b91505092915050565b5f6145cc82614090565b9050919050565b6145dc816145c2565b82525050565b5f6020820190506145f55f8301846145d3565b92915050565b5f60608201905061460e5f8301866141c3565b61461b60208301856141c3565b61462860408301846141c3565b949350505050565b5f80604083850312156146465761464561402a565b5b5f614653858286016140d6565b9250506020614664858286016140d6565b9150509250929050565b5f614678826142c4565b9050919050565b6146888161466e565b82525050565b5f6020820190506146a15f83018461467f565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806146eb57607f821691505b6020821081036146fe576146fd6146a7565b5b50919050565b7f465558494f4e5f5f496e76616c69645468726573686f6c6400000000000000005f82015250565b5f614738601883613f81565b915061474382614704565b602082019050919050565b5f6020820190508181035f8301526147658161472c565b9050919050565b5f60608201905061477f5f83018661430e565b61478c602083018561430e565b61479960408301846141c3565b949350505050565b7f465558494f4e5f5f496e76616c696441646472657373000000000000000000005f82015250565b5f6147d5601683613f81565b91506147e0826147a1565b602082019050919050565b5f6020820190508181035f830152614802816147c9565b9050919050565b7f465558494f4e5f5f416c726561647953657400000000000000000000000000005f82015250565b5f61483d601283613f81565b915061484882614809565b602082019050919050565b5f6020820190508181035f83015261486a81614831565b9050919050565b5f6080820190506148845f83018761430e565b614891602083018661430e565b61489e604083018561430e565b6148ab60608301846141c3565b95945050505050565b7f4c45524332303a207472616e7366657220616d6f756e742065786365656473205f8201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b5f61490e602983613f81565b9150614919826148b4565b604082019050919050565b5f6020820190508181035f83015261493b81614902565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61497982614032565b915061498483614032565b925082820390508181111561499c5761499b614942565b5b92915050565b7f4c45524332303a204d757374206265207265636f766572792061646d696e00005f82015250565b5f6149d6601e83613f81565b91506149e1826149a2565b602082019050919050565b5f6020820190508181035f830152614a03816149ca565b9050919050565b7f4c45524332303a2043616e6e6f74207365742073616d652061646472657373005f82015250565b5f614a3e601f83613f81565b9150614a4982614a0a565b602082019050919050565b5f6020820190508181035f830152614a6b81614a32565b9050919050565b5f614a7c82614032565b9150614a8783614032565b9250828201905080821115614a9f57614a9e614942565b5b92915050565b7f465558494f4e5f5f416c72656164794578636c756465640000000000000000005f82015250565b5f614ad9601783613f81565b9150614ae482614aa5565b602082019050919050565b5f6020820190508181035f830152614b0681614acd565b9050919050565b7f4c45524332303a204c6f73736c65737320616c7265616479206f6e00000000005f82015250565b5f614b41601b83613f81565b9150614b4c82614b0d565b602082019050919050565b5f6020820190508181035f830152614b6e81614b35565b9050919050565b7f465558494f4e5f5f496e76616c69644d617857616c6c657400000000000000005f82015250565b5f614ba9601883613f81565b9150614bb482614b75565b602082019050919050565b5f6020820190508181035f830152614bd681614b9d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614c1482614032565b9150614c1f83614032565b925082614c2f57614c2e614bdd565b5b828204905092915050565b7f465558494f4e5f5f496e76616c696400000000000000000000000000000000005f82015250565b5f614c6e600f83613f81565b9150614c7982614c3a565b602082019050919050565b5f6020820190508181035f830152614c9b81614c62565b9050919050565b7f465558494f4e5f5f496e76616c6964546178416d6f756e7400000000000000005f82015250565b5f614cd6601883613f81565b9150614ce182614ca2565b602082019050919050565b5f6020820190508181035f830152614d0381614cca565b9050919050565b5f606082019050614d1d5f8301866141c3565b614d2a6020830185614133565b614d376040830184614133565b949350505050565b7f4c45524332303a204f6e6c79206c6f73736c65737320636f6e747261637400005f82015250565b5f614d73601e83613f81565b9150614d7e82614d3f565b602082019050919050565b5f6020820190508181035f830152614da081614d67565b9050919050565b7f4c45524332303a204c6f73736c657373206973206f66660000000000000000005f82015250565b5f614ddb601783613f81565b9150614de682614da7565b602082019050919050565b5f6020820190508181035f830152614e0881614dcf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f614e4682614032565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e7857614e77614942565b5b600182019050919050565b7f4c45524332303a2064656372656173656420616c6c6f77616e63652062656c6f5f8201527f77207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f614edd602683613f81565b9150614ee882614e83565b604082019050919050565b5f6020820190508181035f830152614f0a81614ed1565b9050919050565b7f4c45524332303a205475726e4f6666206e6f742070726f706f736564000000005f82015250565b5f614f45601c83613f81565b9150614f5082614f11565b602082019050919050565b5f6020820190508181035f830152614f7281614f39565b9050919050565b7f4c45524332303a2054696d65206c6f636b20696e2070726f67726573730000005f82015250565b5f614fad601d83613f81565b9150614fb882614f79565b602082019050919050565b5f6020820190508181035f830152614fda81614fa1565b9050919050565b7f4c45524332303a204d7573742062652063616e646974617465000000000000005f82015250565b5f615015601983613f81565b915061502082614fe1565b602082019050919050565b5f6020820190508181035f83015261504281615009565b9050919050565b7f4c45524332303a20496e76616c6964206b6579000000000000000000000000005f82015250565b5f61507d601383613f81565b915061508882615049565b602082019050919050565b5f6020820190508181035f8301526150aa81615071565b9050919050565b7f4c45524332303a205475726e4f666620616c72656164792070726f706f7365645f82015250565b5f6150e5602083613f81565b91506150f0826150b1565b602082019050919050565b5f6020820190508181035f830152615112816150d9565b9050919050565b7f4c45524332303a204c6f73736c65737320616c7265616479206f6666000000005f82015250565b5f61514d601c83613f81565b915061515882615119565b602082019050919050565b5f6020820190508181035f83015261517a81615141565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6151db602683613f81565b91506151e682615181565b604082019050919050565b5f6020820190508181035f830152615208816151cf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f615243602083613f81565b915061524e8261520f565b602082019050919050565b5f6020820190508181035f83015261527081615237565b9050919050565b5f61528182614032565b915061528c83614032565b925082820261529a81614032565b915082820484148315176152b1576152b0614942565b5b5092915050565b5f6040820190506152cb5f83018561430e565b6152d860208301846141c3565b9392505050565b5f819050919050565b5f6153026152fd6152f8846152df565b61429a565b614032565b9050919050565b615312816152e8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61534a816140af565b82525050565b5f61535b8383615341565b60208301905092915050565b5f602082019050919050565b5f61537d82615318565b6153878185615322565b935061539283615332565b805f5b838110156153c25781516153a98882615350565b97506153b483615367565b925050600181019050615395565b5085935050505092915050565b5f6153d9826142c4565b9050919050565b6153e9816153cf565b82525050565b5f60a0820190506154025f8301886141c3565b61540f6020830187615309565b81810360408301526154218186615373565b905061543060608301856153e0565b61543d60808301846141c3565b9695505050505050565b7f4c45524332303a207472616e736665722066726f6d20746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6154a1602683613f81565b91506154ac82615447565b604082019050919050565b5f6020820190508181035f8301526154ce81615495565b9050919050565b7f4c45524332303a207472616e7366657220616d6f756e742065786365656473205f8201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b5f61552f602783613f81565b915061553a826154d5565b604082019050919050565b5f6020820190508181035f83015261555c81615523565b905091905056fea2646970667358221220416b2d3ee07bbd75200b7a187eb286a4bbbe9f27e7fde39157299261ca31daf764736f6c634300081500330000000000000000000000003336f22201914e8bffc69d2db520a9da84dba14f0000000000000000000000001a4232444bbdca5e4e37e125e4b17f1ad037c056000000000000000000000000f6af39db4887c8f3671ec11c5bab428700626a41000000000000000000000000e91d7cebce484070fc70777cb04f7e2efae31db40000000000000000000000000000000000000000000000000000000000015180
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610381575f3560e01c8063715018a6116101dc578063b3d3d37e1161010d578063d6565a2d116100ab578063f2fde38b1161007a578063f2fde38b14610a39578063f851a44014610a55578063f887ea4014610a73578063f8b45b0514610a9157610381565b8063d6565a2d146109b1578063d6e242b8146109e3578063dc1052e2146109ed578063dd62ed3e14610a0957610381565b8063cb4ca631116100e7578063cb4ca63114610915578063cc1776d314610945578063ccfa214f14610963578063cd9a0d461461098157610381565b8063b3d3d37e146108d1578063b5c22877146108db578063c2cd4a07146108f757610381565b8063936af9111161017a578063a9059cbb11610154578063a9059cbb14610837578063b16b04a714610867578063b20161db14610897578063b38fe957146108c757610381565b8063936af911146107cd57806395d89b41146107e9578063a457c2d71461080757610381565b80638a8c523c116101b65780638a8c523c1461076d5780638cd09d50146107775780638da5cb5b1461079357806393310ffe146107b157610381565b8063715018a61461072757806377d1440d1461073157806385af30c51461074f57610381565b806339509351116102b65780635d0044ca1161025457806362771d331161022e57806362771d331461068d5780636dd3d39f146106a95780636e9960c3146106d957806370a08231146106f757610381565b80635d0044ca146106355780635f6529a31461065157806361086b001461066f57610381565b80634355855a116102905780634355855a146105bf5780634ada218b146105ef5780634f7041a51461060d5780635b8a194a1461062b57610381565b8063395093511461055757806339fb86c51461058757806341220104146105a357610381565b806318160ddd116103235780632ecaf675116102fd5780632ecaf675146104cd5780632f7c5980146104eb578063313ce5671461051b57806334f6ebf51461053957610381565b806318160ddd1461046357806323b872dd146104815780632baa3c9e146104b157610381565b80630da7caa31161035f5780630da7caa3146103ef5780630ee0a1131461040b5780631031e36e1461042957806315c9aca11461043357610381565b806306fdde031461038557806307a212be146103a3578063095ea7b3146103bf575b5f80fd5b61038d610aaf565b60405161039a9190614001565b60405180910390f35b6103bd60048036038101906103b89190614065565b610b3f565b005b6103d960048036038101906103d491906140ea565b610bd8565b6040516103e69190614142565b60405180910390f35b61040960048036038101906104049190614185565b610ca1565b005b610413610e4c565b60405161042091906141d2565b60405180910390f35b610431610e52565b005b61044d600480360381019061044891906141eb565b610ead565b60405161045a9190614142565b60405180910390f35b61046b610eca565b60405161047891906141d2565b60405180910390f35b61049b60048036038101906104969190614216565b610ed3565b6040516104a89190614142565b60405180910390f35b6104cb60048036038101906104c691906141eb565b61107e565b005b6104d5611229565b6040516104e291906141d2565b60405180910390f35b610505600480360381019061050091906141eb565b61122f565b6040516105129190614142565b60405180910390f35b61052361124c565b6040516105309190614281565b60405180910390f35b610541611254565b60405161054e91906142f5565b60405180910390f35b610571600480360381019061056c91906140ea565b61127a565b60405161057e9190614142565b60405180910390f35b6105a1600480360381019061059c9190614185565b6113cd565b005b6105bd60048036038101906105b89190614185565b611578565b005b6105d960048036038101906105d491906141eb565b611723565b6040516105e69190614142565b60405180910390f35b6105f7611740565b6040516106049190614142565b60405180910390f35b610615611753565b60405161062291906141d2565b60405180910390f35b610633611759565b005b61064f600480360381019061064a9190614065565b61188d565b005b61065961196a565b604051610666919061431d565b60405180910390f35b61067761198f565b60405161068491906141d2565b60405180910390f35b6106a760048036038101906106a29190614185565b611995565b005b6106c360048036038101906106be91906141eb565b611c23565b6040516106d09190614142565b60405180910390f35b6106e1611c40565b6040516106ee919061431d565b60405180910390f35b610711600480360381019061070c91906141eb565b611c68565b60405161071e91906141d2565b60405180910390f35b61072f611cae565b005b610739611cc1565b60405161074691906141d2565b60405180910390f35b610757611cc7565b604051610764919061431d565b60405180910390f35b610775611cec565b005b610791600480360381019061078c9190614065565b611d49565b005b61079b611e14565b6040516107a8919061431d565b60405180910390f35b6107cb60048036038101906107c69190614369565b611e3b565b005b6107e760048036038101906107e29190614408565b611f5f565b005b6107f161222a565b6040516107fe9190614001565b60405180910390f35b610821600480360381019061081c91906140ea565b6122ba565b60405161082e9190614142565b60405180910390f35b610851600480360381019061084c91906140ea565b612455565b60405161085e9190614142565b60405180910390f35b610881600480360381019061087c91906140ea565b61251e565b60405161088e91906141d2565b60405180910390f35b6108b160048036038101906108ac91906140ea565b61253e565b6040516108be91906141d2565b60405180910390f35b6108cf612602565b005b6108d961276f565b005b6108f560048036038101906108f0919061457b565b6128b9565b005b6108ff612aa2565b60405161090c91906145e2565b60405180910390f35b61092f600480360381019061092a91906141eb565b612ac6565b60405161093c9190614142565b60405180910390f35b61094d612ae3565b60405161095a91906141d2565b60405180910390f35b61096b612ae9565b6040516109789190614142565b60405180910390f35b61099b600480360381019061099691906141eb565b612afb565b6040516109a891906141d2565b60405180910390f35b6109cb60048036038101906109c69190614065565b612b10565b6040516109da939291906145fb565b60405180910390f35b6109eb612b36565b005b610a076004803603810190610a029190614065565b612cad565b005b610a236004803603810190610a1e9190614630565b612d78565b604051610a3091906141d2565b60405180910390f35b610a536004803603810190610a4e91906141eb565b612dfa565b005b610a5d612e7c565b604051610a6a919061431d565b60405180910390f35b610a7b612ea1565b604051610a88919061468e565b60405180910390f35b610a99612ec6565b604051610aa691906141d2565b60405180910390f35b606060048054610abe906146d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea906146d4565b8015610b355780601f10610b0c57610100808354040283529160200191610b35565b820191905f5260205f20905b815481529060010190602001808311610b1857829003601f168201915b5050505050905090565b610b47612ecc565b5f8111610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b809061474e565b60405180910390fd5b6a0422ca8b0a00a425000000811115610bce576040517f39922d1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060188190555050565b5f8282600c5f9054906101000a900460ff1615610c8357600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347abf3be610c35612f4a565b84846040518463ffffffff1660e01b8152600401610c559392919061476c565b5f604051808303815f87803b158015610c6c575f80fd5b505af1158015610c7e573d5f803e3d5ffd5b505050505b610c95610c8e612f4a565b8686612f51565b60019250505092915050565b610ca9612ecc565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e906147eb565b60405180910390fd5b80151560145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d90614853565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f0d148a5c1704d9c0c8a1669e9b7ae29b729fa7fd357765342510c19a81a985d982604051610e409190614142565b60405180910390a25050565b60175481565b610e5a612ecc565b5f601c60016101000a81548160ff0219169083151502179055507fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a5f604051610ea39190614142565b60405180910390a1565b6014602052805f5260405f205f915054906101000a900460ff1681565b5f600354905090565b5f838383600c5f9054906101000a900460ff1615610f8157600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663379f5c69610f31612f4a565b8585856040518563ffffffff1660e01b8152600401610f539493929190614871565b5f604051808303815f87803b158015610f6a575f80fd5b505af1158015610f7c573d5f803e3d5ffd5b505050505b5f60025f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610fc8612f4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905085811015611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90614924565b60405180910390fd5b611052888888613038565b61106f8861105e612f4a565b888461106a919061496f565b612f51565b60019450505050509392505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110be612f4a565b73ffffffffffffffffffffffffffffffffffffffff1614611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b906149ec565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a90614a54565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60405160405180910390a28060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b6013602052805f5260405f205f915054906101000a900460ff1681565b5f6012905090565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8282600c5f9054906101000a900460ff161561132557600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf5961bb6112d7612f4a565b84846040518463ffffffff1660e01b81526004016112f79392919061476c565b5f604051808303815f87803b15801561130e575f80fd5b505af1158015611320573d5f803e3d5ffd5b505050505b6113c1611330612f4a565b868660025f61133d612f4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546113bc9190614a72565b612f51565b60019250505092915050565b6113d5612ecc565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a906147eb565b60405180910390fd5b80151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c990614aef565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f2633ad3ef534c4bddda523fae274ccb4e47bb324c2eca411a9377d01529e2ffe8260405161156c9190614142565b60405180910390a25050565b611580612ecc565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e5906147eb565b60405180910390fd5b80151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490614aef565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167ff40f85f17edc8eb36b286100bde23545ec4fac647f64dd7214a897af944fcb30826040516117179190614142565b60405180910390a25050565b6012602052805f5260405f205f915054906101000a900460ff1681565b601c60019054906101000a900460ff1681565b601a5481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611799612f4a565b73ffffffffffffffffffffffffffffffffffffffff16146117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e6906149ec565b60405180910390fd5b600c5f9054906101000a900460ff161561183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590614b57565b60405180910390fd5b5f600b819055506001600c5f6101000a81548160ff0219169083151502179055507f1ba3b66404043da8297d0b876fa6464f2cb127edfc6626308046d4503028322b60405160405180910390a1565b611895612ecc565b5f81116118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ce90614bbf565b60405180910390fd5b6127106a0422ca8b0a00a4250000006118f09190614c0a565b811015611929576040517fbb8cf97300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806019819055507fcb6a4e25e6070c228470cc0df60e64d9c48337dd39b32c47376eef2b366454b78160405161195f91906141d2565b60405180910390a150565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b61199d612ecc565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a02906147eb565b60405180910390fd5b80151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190614853565b60405180910390fd5b80151560125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090614c84565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f242e47ed17a9f432e4242bab4c34941ac33603481cb8319ed8dd8df34ae0051182604051611c179190614142565b60405180910390a25050565b6011602052805f5260405f205f915054906101000a900460ff1681565b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611cb6612ecc565b611cbf5f61339e565b565b60185481565b60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cf4612ecc565b6001601c60016101000a81548160ff0219169083151502179055507fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a6001604051611d3f9190614142565b60405180910390a1565b611d51612ecc565b5f8111611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614cec565b60405180910390fd5b600a811115611dce576040517f2aad382000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601b819055507f78cd946ea54440e5e0457ca142c8592fd7a7d34388c8a82328c57e39cc67f04d815f6001604051611e0993929190614d0a565b60405180910390a150565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e7b612f4a565b73ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec8906149ec565b60405180910390fd5b8160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806008819055508173ffffffffffffffffffffffffffffffffffffffff167f6c591da8da2f6e69746d7d9ae61c27ee29fbe303798141b4942ae2aef54274b160405160405180910390a25050565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fa0612f4a565b73ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed90614d89565b60405180910390fd5b600c5f9054906101000a900460ff16612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b90614df1565b60405180910390fd5b5f8282905090505f805b828110156121ae575f85858381811061206a57612069614e0f565b5b905060200201602081019061207f91906141eb565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080846121109190614a72565b9350600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161219191906141d2565b60405180910390a3505080806121a690614e3c565b91505061204e565b508060015f600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461221d9190614a72565b9250508190555050505050565b606060058054612239906146d4565b80601f0160208091040260200160405190810160405280929190818152602001828054612265906146d4565b80156122b05780601f10612287576101008083540402835291602001916122b0565b820191905f5260205f20905b81548152906001019060200180831161229357829003601f168201915b5050505050905090565b5f8282600c5f9054906101000a900460ff161561236557600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663568c75a9612317612f4a565b84846040518463ffffffff1660e01b81526004016123379392919061476c565b5f604051808303815f87803b15801561234e575f80fd5b505af1158015612360573d5f803e3d5ffd5b505050505b5f60025f612371612f4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508481101561242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290614ef3565b60405180910390fd5b612448612436612f4a565b878784612443919061496f565b612f51565b6001935050505092915050565b5f8282600c5f9054906101000a900460ff161561250057600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ffb811f6124b2612f4a565b84846040518463ffffffff1660e01b81526004016124d29392919061476c565b5f604051808303815f87803b1580156124e9575f80fd5b505af11580156124fb573d5f803e3d5ffd5b505050505b61251261250b612f4a565b8686613038565b60019250505092915050565b600d602052815f5260405f20602052805f5260405f205f91509150505481565b5f601754821115612551575f90506125fc565b5f600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050808311156125ab576125a384611c68565b9150506125fc565b600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20549150505b92915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612642612f4a565b73ffffffffffffffffffffffffffffffffffffffff1614612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f906149ec565b60405180910390fd5b5f600b54036126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d390614f5b565b60405180910390fd5b42600b541115612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890614fc3565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055505f600b819055507f3eb72350c9c7928d31e9ab450bfff2c159434aa4b82658a7d8eae7f109cb4e7b60405160405180910390a1565b60145f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166127ef576040517f42df492800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f601754905060175f81548092919061280790614e3c565b91905055505f600f5f8381526020019081526020015f2090504281600201819055506040518060600160405280825f01548152602001826001015481526020015f815250600f5f60175481526020019081526020015f205f820151815f01556020820151816001015560408201518160020155905050817f3b5ce8b2d475067181f949f668899c93f26f0b25c5f8712ebca6b4b93d92989d426040516128ad91906141d2565b60405180910390a25050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128f9612f4a565b73ffffffffffffffffffffffffffffffffffffffff161461294f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129469061502b565b60405180910390fd5b60085481805190602001201461299a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299190615093565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fb94bba6936ec7f75ee931dadf6e1a4d66b43d09b6fa0178fb13df9b77fb5841f60405160405180910390a260075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f0000000000000000000000003336f22201914e8bffc69d2db520a9da84dba14f81565b6010602052805f5260405f205f915054906101000a900460ff1681565b601b5481565b600c5f9054906101000a900460ff1681565b600e602052805f5260405f205f915090505481565b600f602052805f5260405f205f91509050805f0154908060010154908060020154905083565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b76612f4a565b73ffffffffffffffffffffffffffffffffffffffff1614612bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc3906149ec565b60405180910390fd5b5f600b5414612c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c07906150fb565b60405180910390fd5b600c5f9054906101000a900460ff16612c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5590615163565b60405180910390fd5b600a5442612c6c9190614a72565b600b819055507f6ca688e6e3ddd707280140b2bf0106afe883689b6c74e68cbd517576dd9c245a600b54604051612ca391906141d2565b60405180910390a1565b612cb5612ecc565b5f8111612cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cee90614cec565b60405180910390fd5b600a811115612d32576040517f2aad382000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601a819055507f78cd946ea54440e5e0457ca142c8592fd7a7d34388c8a82328c57e39cc67f04d8160015f604051612d6d93929190614d0a565b60405180910390a150565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b612e02612ecc565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e67906151f1565b60405180910390fd5b612e798161339e565b50565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b612ed4612f4a565b73ffffffffffffffffffffffffffffffffffffffff16612ef2611e14565b73ffffffffffffffffffffffffffffffffffffffff1614612f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3f90615259565b60405180910390fd5b565b5f33905090565b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161302b91906141d2565b60405180910390a3505050565b5f60105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806130d4575060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b9050601c60019054906101000a900460ff161580156130f1575080155b15613128576040517f729cc03d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61313284836134cd565b5f61313c30611c68565b9050601c5f9054906101000a900460ff1615801561315c57506018548110155b8015613166575081155b80156131b9575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131c7576131c66137e9565b5b816132ce575f60135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561323d576064601b548561322c9190615277565b6132369190614c0a565b90506132aa565b60135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156132a9576064601a548561329c9190615277565b6132a69190614c0a565b90505b5b5f8111156132cc576132bd8630836139ee565b80846132c9919061496f565b93505b505b5f836132d986611c68565b6132e39190614a72565b905060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561333d575060195481115b156133815784816040517f1ba623300000000000000000000000000000000000000000000000000000000081526004016133789291906152b8565b60405180910390fd5b61338b8585613beb565b6133968686866139ee565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361340c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613403906151f1565b60405180910390fd5b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60175490505f600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205490505f61352d85611c68565b90505f848261353c919061496f565b90505f600f5f8681526020019081526020015f20905084600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060125f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561369b57600d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f205f90555f84111561369657690a968163f0a57b40000084106136695783815f015f82825461365d919061496f565b92505081905550613695565b683635c9adc5dea0000084106136945783816001015f82825461368c919061496f565b925050819055505b5b5b6137e0565b81600d5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8781526020019081526020015f2081905550690a968163f0a57b40000083106137885782815f015f82825461370f919061496f565b92505081905550690a968163f0a57b40000082106137415781815f015f8282546137399190614a72565b925050819055505b690a968163f0a57b400000821080156137635750683635c9adc5dea000008210155b156137835781816001015f82825461377b9190614a72565b925050819055505b6137df565b683635c9adc5dea0000083106137de5782816001015f8282546137ab919061496f565b92505081905550683635c9adc5dea0000082106137dd5781816001015f8282546137d59190614a72565b925050819055505b5b5b5b50505050505050565b6001601c5f6101000a81548160ff0219169083151502179055505f61380d30611c68565b90505f8111156139d2575f600267ffffffffffffffff81111561383357613832614457565b5b6040519080825280602002602001820160405280156138615781602001602082028036833780820191505090505b50905030815f8151811061387857613877614e0f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106138e7576138e6614e0f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f847f0000000000000000000000003336f22201914e8bffc69d2db520a9da84dba14f426040518663ffffffff1660e01b81526004016139a39594939291906153ef565b5f604051808303815f87803b1580156139ba575f80fd5b505af11580156139cc573d5f803e3d5ffd5b50505050505b5f601c5f6101000a81548160ff02191690831515021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a53906154b7565b60405180910390fd5b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ad790615545565b60405180910390fd5b8181613aec919061496f565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613b799190614a72565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613bdd91906141d2565b60405180910390a350505050565b5f60175490505f613bfb84611c68565b90505f600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490505f600f5f8581526020019081526020015f20905083600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613daa57600d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f205f90555f821115613da557690a968163f0a57b4000008210613d785781815f015f828254613d6c919061496f565b92505081905550613da4565b683635c9adc5dea000008210613da35781816001015f828254613d9b919061496f565b925050819055505b5b5b613f6f565b8483613db69190614a72565b600d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f20819055505f8584613e139190614a72565b9050683635c9adc5dea00000841015613e8657690a968163f0a57b4000008110613e555780825f015f828254613e499190614a72565b92505081905550613e81565b683635c9adc5dea000008110613e805780826001015f828254613e789190614a72565b925050819055505b5b613f6d565b683635c9adc5dea000008410158015613ea85750690a968163f0a57b40000084105b15613f2757690a968163f0a57b4000008110613edc5780825f015f828254613ed09190614a72565b92505081905550613f08565b683635c9adc5dea000008110613f075780826001015f828254613eff9190614a72565b925050819055505b5b83826001015f828254613f1b919061496f565b92505081905550613f6c565b690a968163f0a57b4000008410613f6b5780825f015f828254613f4a9190614a72565b9250508190555083825f015f828254613f63919061496f565b925050819055505b5b5b505b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613fae578082015181840152602081019050613f93565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613fd382613f77565b613fdd8185613f81565b9350613fed818560208601613f91565b613ff681613fb9565b840191505092915050565b5f6020820190508181035f8301526140198184613fc9565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61404481614032565b811461404e575f80fd5b50565b5f8135905061405f8161403b565b92915050565b5f6020828403121561407a5761407961402a565b5b5f61408784828501614051565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140b982614090565b9050919050565b6140c9816140af565b81146140d3575f80fd5b50565b5f813590506140e4816140c0565b92915050565b5f8060408385031215614100576140ff61402a565b5b5f61410d858286016140d6565b925050602061411e85828601614051565b9150509250929050565b5f8115159050919050565b61413c81614128565b82525050565b5f6020820190506141555f830184614133565b92915050565b61416481614128565b811461416e575f80fd5b50565b5f8135905061417f8161415b565b92915050565b5f806040838503121561419b5761419a61402a565b5b5f6141a8858286016140d6565b92505060206141b985828601614171565b9150509250929050565b6141cc81614032565b82525050565b5f6020820190506141e55f8301846141c3565b92915050565b5f60208284031215614200576141ff61402a565b5b5f61420d848285016140d6565b91505092915050565b5f805f6060848603121561422d5761422c61402a565b5b5f61423a868287016140d6565b935050602061424b868287016140d6565b925050604061425c86828701614051565b9150509250925092565b5f60ff82169050919050565b61427b81614266565b82525050565b5f6020820190506142945f830184614272565b92915050565b5f819050919050565b5f6142bd6142b86142b384614090565b61429a565b614090565b9050919050565b5f6142ce826142a3565b9050919050565b5f6142df826142c4565b9050919050565b6142ef816142d5565b82525050565b5f6020820190506143085f8301846142e6565b92915050565b614317816140af565b82525050565b5f6020820190506143305f83018461430e565b92915050565b5f819050919050565b61434881614336565b8114614352575f80fd5b50565b5f813590506143638161433f565b92915050565b5f806040838503121561437f5761437e61402a565b5b5f61438c858286016140d6565b925050602061439d85828601614355565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126143c8576143c76143a7565b5b8235905067ffffffffffffffff8111156143e5576143e46143ab565b5b602083019150836020820283011115614401576144006143af565b5b9250929050565b5f806020838503121561441e5761441d61402a565b5b5f83013567ffffffffffffffff81111561443b5761443a61402e565b5b614447858286016143b3565b92509250509250929050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61448d82613fb9565b810181811067ffffffffffffffff821117156144ac576144ab614457565b5b80604052505050565b5f6144be614021565b90506144ca8282614484565b919050565b5f67ffffffffffffffff8211156144e9576144e8614457565b5b6144f282613fb9565b9050602081019050919050565b828183375f83830152505050565b5f61451f61451a846144cf565b6144b5565b90508281526020810184848401111561453b5761453a614453565b5b6145468482856144ff565b509392505050565b5f82601f830112614562576145616143a7565b5b813561457284826020860161450d565b91505092915050565b5f602082840312156145905761458f61402a565b5b5f82013567ffffffffffffffff8111156145ad576145ac61402e565b5b6145b98482850161454e565b91505092915050565b5f6145cc82614090565b9050919050565b6145dc816145c2565b82525050565b5f6020820190506145f55f8301846145d3565b92915050565b5f60608201905061460e5f8301866141c3565b61461b60208301856141c3565b61462860408301846141c3565b949350505050565b5f80604083850312156146465761464561402a565b5b5f614653858286016140d6565b9250506020614664858286016140d6565b9150509250929050565b5f614678826142c4565b9050919050565b6146888161466e565b82525050565b5f6020820190506146a15f83018461467f565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806146eb57607f821691505b6020821081036146fe576146fd6146a7565b5b50919050565b7f465558494f4e5f5f496e76616c69645468726573686f6c6400000000000000005f82015250565b5f614738601883613f81565b915061474382614704565b602082019050919050565b5f6020820190508181035f8301526147658161472c565b9050919050565b5f60608201905061477f5f83018661430e565b61478c602083018561430e565b61479960408301846141c3565b949350505050565b7f465558494f4e5f5f496e76616c696441646472657373000000000000000000005f82015250565b5f6147d5601683613f81565b91506147e0826147a1565b602082019050919050565b5f6020820190508181035f830152614802816147c9565b9050919050565b7f465558494f4e5f5f416c726561647953657400000000000000000000000000005f82015250565b5f61483d601283613f81565b915061484882614809565b602082019050919050565b5f6020820190508181035f83015261486a81614831565b9050919050565b5f6080820190506148845f83018761430e565b614891602083018661430e565b61489e604083018561430e565b6148ab60608301846141c3565b95945050505050565b7f4c45524332303a207472616e7366657220616d6f756e742065786365656473205f8201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b5f61490e602983613f81565b9150614919826148b4565b604082019050919050565b5f6020820190508181035f83015261493b81614902565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61497982614032565b915061498483614032565b925082820390508181111561499c5761499b614942565b5b92915050565b7f4c45524332303a204d757374206265207265636f766572792061646d696e00005f82015250565b5f6149d6601e83613f81565b91506149e1826149a2565b602082019050919050565b5f6020820190508181035f830152614a03816149ca565b9050919050565b7f4c45524332303a2043616e6e6f74207365742073616d652061646472657373005f82015250565b5f614a3e601f83613f81565b9150614a4982614a0a565b602082019050919050565b5f6020820190508181035f830152614a6b81614a32565b9050919050565b5f614a7c82614032565b9150614a8783614032565b9250828201905080821115614a9f57614a9e614942565b5b92915050565b7f465558494f4e5f5f416c72656164794578636c756465640000000000000000005f82015250565b5f614ad9601783613f81565b9150614ae482614aa5565b602082019050919050565b5f6020820190508181035f830152614b0681614acd565b9050919050565b7f4c45524332303a204c6f73736c65737320616c7265616479206f6e00000000005f82015250565b5f614b41601b83613f81565b9150614b4c82614b0d565b602082019050919050565b5f6020820190508181035f830152614b6e81614b35565b9050919050565b7f465558494f4e5f5f496e76616c69644d617857616c6c657400000000000000005f82015250565b5f614ba9601883613f81565b9150614bb482614b75565b602082019050919050565b5f6020820190508181035f830152614bd681614b9d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614c1482614032565b9150614c1f83614032565b925082614c2f57614c2e614bdd565b5b828204905092915050565b7f465558494f4e5f5f496e76616c696400000000000000000000000000000000005f82015250565b5f614c6e600f83613f81565b9150614c7982614c3a565b602082019050919050565b5f6020820190508181035f830152614c9b81614c62565b9050919050565b7f465558494f4e5f5f496e76616c6964546178416d6f756e7400000000000000005f82015250565b5f614cd6601883613f81565b9150614ce182614ca2565b602082019050919050565b5f6020820190508181035f830152614d0381614cca565b9050919050565b5f606082019050614d1d5f8301866141c3565b614d2a6020830185614133565b614d376040830184614133565b949350505050565b7f4c45524332303a204f6e6c79206c6f73736c65737320636f6e747261637400005f82015250565b5f614d73601e83613f81565b9150614d7e82614d3f565b602082019050919050565b5f6020820190508181035f830152614da081614d67565b9050919050565b7f4c45524332303a204c6f73736c657373206973206f66660000000000000000005f82015250565b5f614ddb601783613f81565b9150614de682614da7565b602082019050919050565b5f6020820190508181035f830152614e0881614dcf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f614e4682614032565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e7857614e77614942565b5b600182019050919050565b7f4c45524332303a2064656372656173656420616c6c6f77616e63652062656c6f5f8201527f77207a65726f0000000000000000000000000000000000000000000000000000602082015250565b5f614edd602683613f81565b9150614ee882614e83565b604082019050919050565b5f6020820190508181035f830152614f0a81614ed1565b9050919050565b7f4c45524332303a205475726e4f6666206e6f742070726f706f736564000000005f82015250565b5f614f45601c83613f81565b9150614f5082614f11565b602082019050919050565b5f6020820190508181035f830152614f7281614f39565b9050919050565b7f4c45524332303a2054696d65206c6f636b20696e2070726f67726573730000005f82015250565b5f614fad601d83613f81565b9150614fb882614f79565b602082019050919050565b5f6020820190508181035f830152614fda81614fa1565b9050919050565b7f4c45524332303a204d7573742062652063616e646974617465000000000000005f82015250565b5f615015601983613f81565b915061502082614fe1565b602082019050919050565b5f6020820190508181035f83015261504281615009565b9050919050565b7f4c45524332303a20496e76616c6964206b6579000000000000000000000000005f82015250565b5f61507d601383613f81565b915061508882615049565b602082019050919050565b5f6020820190508181035f8301526150aa81615071565b9050919050565b7f4c45524332303a205475726e4f666620616c72656164792070726f706f7365645f82015250565b5f6150e5602083613f81565b91506150f0826150b1565b602082019050919050565b5f6020820190508181035f830152615112816150d9565b9050919050565b7f4c45524332303a204c6f73736c65737320616c7265616479206f6666000000005f82015250565b5f61514d601c83613f81565b915061515882615119565b602082019050919050565b5f6020820190508181035f83015261517a81615141565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6151db602683613f81565b91506151e682615181565b604082019050919050565b5f6020820190508181035f830152615208816151cf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f615243602083613f81565b915061524e8261520f565b602082019050919050565b5f6020820190508181035f83015261527081615237565b9050919050565b5f61528182614032565b915061528c83614032565b925082820261529a81614032565b915082820484148315176152b1576152b0614942565b5b5092915050565b5f6040820190506152cb5f83018561430e565b6152d860208301846141c3565b9392505050565b5f819050919050565b5f6153026152fd6152f8846152df565b61429a565b614032565b9050919050565b615312816152e8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61534a816140af565b82525050565b5f61535b8383615341565b60208301905092915050565b5f602082019050919050565b5f61537d82615318565b6153878185615322565b935061539283615332565b805f5b838110156153c25781516153a98882615350565b97506153b483615367565b925050600181019050615395565b5085935050505092915050565b5f6153d9826142c4565b9050919050565b6153e9816153cf565b82525050565b5f60a0820190506154025f8301886141c3565b61540f6020830187615309565b81810360408301526154218186615373565b905061543060608301856153e0565b61543d60808301846141c3565b9695505050505050565b7f4c45524332303a207472616e736665722066726f6d20746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6154a1602683613f81565b91506154ac82615447565b604082019050919050565b5f6020820190508181035f8301526154ce81615495565b9050919050565b7f4c45524332303a207472616e7366657220616d6f756e742065786365656473205f8201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b5f61552f602783613f81565b915061553a826154d5565b604082019050919050565b5f6020820190508181035f83015261555c81615523565b905091905056fea2646970667358221220416b2d3ee07bbd75200b7a187eb286a4bbbe9f27e7fde39157299261ca31daf764736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003336f22201914e8bffc69d2db520a9da84dba14f0000000000000000000000001a4232444bbdca5e4e37e125e4b17f1ad037c056000000000000000000000000f6af39db4887c8f3671ec11c5bab428700626a41000000000000000000000000e91d7cebce484070fc70777cb04f7e2efae31db40000000000000000000000000000000000000000000000000000000000015180
-----Decoded View---------------
Arg [0] : _admin (address): 0x3336F22201914e8BFfC69D2dB520a9DA84dBa14f
Arg [1] : _newOwner (address): 0x1A4232444Bbdca5e4E37e125E4b17F1aD037c056
Arg [2] : _recoveryAdmin (address): 0xf6Af39db4887c8f3671Ec11c5baB428700626a41
Arg [3] : lossless_ (address): 0xe91D7cEBcE484070fc70777cB04F7e2EfAe31DB4
Arg [4] : timeLockPeriod_ (uint256): 86400
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000003336f22201914e8bffc69d2db520a9da84dba14f
Arg [1] : 0000000000000000000000001a4232444bbdca5e4e37e125e4b17f1ad037c056
Arg [2] : 000000000000000000000000f6af39db4887c8f3671ec11c5bab428700626a41
Arg [3] : 000000000000000000000000e91d7cebce484070fc70777cb04f7e2efae31db4
Arg [4] : 0000000000000000000000000000000000000000000000000000000000015180
Deployed Bytecode Sourcemap
39326:18582:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23699:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47347:254;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24710:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48538:443;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41018:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48150:121;;;:::i;:::-;;40535:65;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24020:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24939:587;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21528:237;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18583:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40475:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23919:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18703:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25534:391;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44841:398;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45481:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40379:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41214:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41115:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23315:238;;;:::i;:::-;;47609:290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18424:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18619:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46071:543;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40286:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23561:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24136:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29405:103;;;:::i;:::-;;41054:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40899:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47964:120;;;:::i;:::-;;49611:260;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28764:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21773:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20775:745;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23807:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25933:546;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24287:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39979:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57389:516;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22916:391;;;:::i;:::-;;46698:529;;;:::i;:::-;;22063:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40966:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40208:71;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41144:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18665:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40075:66;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40148:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;22509:399;;;:::i;:::-;;49167:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24526:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29663:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18547:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40858:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41087:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23699:100;23753:13;23786:5;23779:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23699:100;:::o;47347:254::-;28650:13;:11;:13::i;:::-;47446:1:::1;47430:13;:17;47422:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;40644:15;47493:13;:26;47489:65;;;47528:26;;;;;;;;;;;;;;47489:65;47580:13;47565:12;:28;;;;47347:254:::0;:::o;24710:221::-;24845:4;24819:7;24828:6;19392:12;;;;;;;;;;;19388:98;;;19421:8;;;;;;;;;;;:22;;;19444:12;:10;:12::i;:::-;19458:7;19467:6;19421:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19388:98;24862:39:::1;24871:12;:10;:12::i;:::-;24885:7;24894:6;24862:8;:39::i;:::-;24919:4;24912:11;;24710:221:::0;;;;;;:::o;48538:443::-;28650:13;:11;:13::i;:::-;48699:1:::1;48675:26;;:12;:26;;::::0;48667:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;48792:14;48761:45;;:13;:27;48775:12;48761:27;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;48739:113:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;48893:14;48863:13;:27;48877:12;48863:27;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;48944:12;48923:50;;;48958:14;48923:50;;;;;;:::i;:::-;;;;;;;;48538:443:::0;;:::o;41018:29::-;;;;:::o;48150:121::-;28650:13;:11;:13::i;:::-;48221:5:::1;48204:14;;:22;;;;;;;;;;;;;;;;;;48242:21;48257:5;48242:21;;;;;;:::i;:::-;;;;;;;;48150:121::o:0;40535:65::-;;;;;;;;;;;;;;;;;;;;;;:::o;24020:108::-;24081:7;24108:12;;24101:19;;24020:108;:::o;24939:587::-;25167:4;25122:6;25130:9;25141:6;19833:12;;;;;;;;;;;19829:196;;;19862:8;;;;;;;;;;;:27;;;19908:12;:10;:12::i;:::-;19939:6;19964:9;19992:6;19862:151;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19829:196;25189:24:::1;25216:11;:19;25228:6;25216:19;;;;;;;;;;;;;;;:33;25236:12;:10;:12::i;:::-;25216:33;;;;;;;;;;;;;;;;25189:60;;25302:6;25282:16;:26;;25260:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;25388:36;25398:6;25406:9;25417:6;25388:9;:36::i;:::-;25437:57;25446:6;25454:12;:10;:12::i;:::-;25487:6;25468:16;:25;;;;:::i;:::-;25437:8;:57::i;:::-;25514:4;25507:11;;;24939:587:::0;;;;;;;;:::o;21528:237::-;20640:13;;;;;;;;;;;20624:29;;:12;:10;:12::i;:::-;:29;;;20602:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;21655:5:::1;;;;;;;;;;;21643:17;;:8;:17;;::::0;21635:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21721:8;21712:18;;;;;;;;;;;;21749:8;21741:5;;:16;;;;;;;;;;;;;;;;;;21528:237:::0;:::o;18583:29::-;;;;:::o;40475:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;23919:93::-;23977:5;24002:2;23995:9;;23919:93;:::o;18703:30::-;;;;;;;;;;;;;:::o;25534:391::-;25743:4;25704:7;25713:10;20134:12;;;;;;;;;;;20130:112;;;20163:8;;;;;;;;;;;:32;;;20196:12;:10;:12::i;:::-;20210:7;20219:10;20163:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20130:112;25765:130:::1;25788:12;:10;:12::i;:::-;25815:7;25874:10;25837:11;:25;25849:12;:10;:12::i;:::-;25837:25;;;;;;;;;;;;;;;:34;25863:7;25837:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;25765:8;:130::i;:::-;25913:4;25906:11;;25534:391:::0;;;;;;:::o;44841:398::-;28650:13;:11;:13::i;:::-;44979:1:::1;44962:19;;:5;:19;;::::0;44954:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45069:9;45041:37;;:17;:24;45059:5;45041:24;;;;;;;;;;;;;;;;;;;;;;;;;:37;;::::0;45019:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45167:9;45140:17;:24;45158:5;45140:24;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;45214:5;45192:39;;;45221:9;45192:39;;;;;;:::i;:::-;;;;;;;;44841:398:::0;;:::o;45481:417::-;28650:13;:11;:13::i;:::-;45626:1:::1;45609:19;;:5;:19;;::::0;45601:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45722:9;45688:43;;:23;:30;45712:5;45688:30;;;;;;;;;;;;;;;;;;;;;;;;;:43;;::::0;45666:116:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45826:9;45793:23;:30;45817:5;45793:30;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;45873:5;45851:39;;;45880:9;45851:39;;;;;;:::i;:::-;;;;;;;;45481:417:::0;;:::o;40379:89::-;;;;;;;;;;;;;;;;;;;;;;:::o;41214:34::-;;;;;;;;;;;;;:::o;41115:22::-;;;;:::o;23315:238::-;20640:13;;;;;;;;;;;20624:29;;:12;:10;:12::i;:::-;:29;;;20602:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;23404:12:::1;;;;;;;;;;;23403:13;23395:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;23486:1;23459:24;:28;;;;23513:4;23498:12;;:19;;;;;;;;;;;;;;;;;;23533:12;;;;;;;;;;23315:238::o:0;47609:290::-;28650:13;:11;:13::i;:::-;47699:1:::1;47686:10;:14;47678:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;47770:6;40644:15;47757:19;;;;:::i;:::-;47744:10;:32;47740:71;;;47785:26;;;;;;;;;;;;;;47740:71;47834:10;47822:9;:22;;;;47860:31;47880:10;47860:31;;;;;;:::i;:::-;;;;;;;;47609:290:::0;:::o;18424:28::-;;;;;;;;;;;;;:::o;18619:39::-;;;;:::o;46071:543::-;28650:13;:11;:13::i;:::-;46217:1:::1;46195:24;;:10;:24;;::::0;46187:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46292:12;46265:39;;:11;:23;46277:10;46265:23;;;;;;;;;;;;;;;;;;;;;;;;;:39;;::::0;46257:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46392:12;46360:44;;:16;:28;46377:10;46360:28;;;;;;;;;;;;;;;;;;;;;;;;;:44;;::::0;46338:109:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46484:12;46458:11;:23;46470:10;46458:23;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;46538:12;46507:16;:28;46524:10;46507:28;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;46581:10;46566:40;;;46593:12;46566:40;;;;;;:::i;:::-;;;;;;;;46071:543:::0;;:::o;40286:86::-;;;;;;;;;;;;;;;;;;;;;;:::o;23561:98::-;23619:7;23646:5;;;;;;;;;;;23639:12;;23561:98;:::o;24136:143::-;24226:7;24253:9;:18;24263:7;24253:18;;;;;;;;;;;;;;;;24246:25;;24136:143;;;:::o;29405:103::-;28650:13;:11;:13::i;:::-;29470:30:::1;29497:1;29470:18;:30::i;:::-;29405:103::o:0;41054:24::-;;;;:::o;40899:23::-;;;;;;;;;;;;;:::o;47964:120::-;28650:13;:11;:13::i;:::-;48036:4:::1;48019:14;;:21;;;;;;;;;;;;;;;;;;48056:20;48071:4;48056:20;;;;;;:::i;:::-;;;;;;;;47964:120::o:0;49611:260::-;28650:13;:11;:13::i;:::-;49695:1:::1;49684:8;:12;49676:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;49751:2;49740:8;:13;49736:52;;;49762:26;;;;;;;;;;;;;;49736:52;49809:8;49799:7;:18;;;;49833:30;49841:8;49851:5;49858:4;49833:30;;;;;;;;:::i;:::-;;;;;;;;49611:260:::0;:::o;28764:87::-;28810:7;28837:6;;;;;;;;;;;28830:13;;28764:87;:::o;21773:282::-;20640:13;;;;;;;;;;;20624:29;;:12;:10;:12::i;:::-;:29;;;20602:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;21946:9:::1;21921:22;;:34;;;;;;;;;;;;;;;;;;21989:7;21966:20;:30;;;;22037:9;22012:35;;;;;;;;;;;;21773:282:::0;;:::o;20775:745::-;20928:8;;;;;;;;;;;20904:33;;:12;:10;:12::i;:::-;:33;;;20882:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;21014:12;;;;;;;;;;;21006:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21067:18;21088:4;;:11;;21067:32;;21110:19;21151:9;21146:311;21170:10;21166:1;:14;21146:311;;;21202:19;21224:4;;21229:1;21224:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21202:29;;21246:19;21268:9;:22;21278:11;21268:22;;;;;;;;;;;;;;;;21246:44;;21330:1;21305:9;:22;21315:11;21305:22;;;;;;;;;;;;;;;:26;;;;21361:11;21346:26;;;;;:::i;:::-;;;21422:8;;;;;;;;;;;21392:53;;21401:11;21392:53;;;21433:11;21392:53;;;;;;:::i;:::-;;;;;;;;21187:270;;21182:3;;;;;:::i;:::-;;;;21146:311;;;;21501:11;21469:9;:28;21487:8;;;;;;;;;;;21469:28;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;20871:649;;20775:745;;:::o;23807:104::-;23863:13;23896:7;23889:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23807:104;:::o;25933:546::-;26152:4;26108:7;26117:15;20356:12;;;;;;;;;;;20352:183;;;20385:8;;;;;;;;;;;:32;;;20436:12;:10;:12::i;:::-;20467:7;20493:15;20385:138;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20352:183;26174:24:::1;26201:11;:25;26213:12;:10;:12::i;:::-;26201:25;;;;;;;;;;;;;;;:34;26227:7;26201:34;;;;;;;;;;;;;;;;26174:61;;26288:15;26268:16;:35;;26246:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;26380:67;26389:12;:10;:12::i;:::-;26403:7;26431:15;26412:16;:34;;;;:::i;:::-;26380:8;:67::i;:::-;26467:4;26460:11;;;25933:546:::0;;;;;;:::o;24287:231::-;24429:4;24401:9;24412:6;19584:12;;;;;;;;;;;19580:101;;;19613:8;;;;;;;;;;;:23;;;19637:12;:10;:12::i;:::-;19651:9;19662:6;19613:56;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19580:101;24446:42:::1;24456:12;:10;:12::i;:::-;24470:9;24481:6;24446:9;:42::i;:::-;24506:4;24499:11;;24287:231:::0;;;;;;:::o;39979:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;57389:516::-;57491:4;57576:13;;57567:6;:22;57563:36;;;57598:1;57591:8;;;;57563:36;57610:17;57630:14;:20;57645:4;57630:20;;;;;;;;;;;;;;;;57610:40;;57772:12;57763:6;:21;57759:49;;;57793:15;57803:4;57793:9;:15::i;:::-;57786:22;;;;;57759:49;57871:12;:18;57884:4;57871:18;;;;;;;;;;;;;;;:26;57890:6;57871:26;;;;;;;;;;;;57864:33;;;57389:516;;;;;:::o;22916:391::-;20640:13;;;;;;;;;;;20624:29;;:12;:10;:12::i;:::-;:29;;;20602:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;23033:1:::1;23005:24;;:29:::0;22997:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23128:15;23100:24;;:43;;23078:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;23226:5;23211:12;;:20;;;;;;;;;;;;;;;;;;23269:1;23242:24;:28;;;;23286:13;;;;;;;;;;22916:391::o:0;46698:529::-;42333:13;:25;42347:10;42333:25;;;;;;;;;;;;;;;;;;;;;;;;;42328:59;;42367:20;;;;;;;;;;;;;;42328:59;46758:16:::1;46777:13;;46758:32;;46801:13;;:15;;;;;;;;;:::i;:::-;;;;;;46829:25;46857:9;:22;46867:11;46857:22;;;;;;;;;;;46829:50;;46920:15;46890:4;:27;;:45;;;;47009:149;;;;;;;;47049:4;:15;;;47009:149;;;;47091:4;:15;;;47009:149;;;;47145:1;47009:149;;::::0;46982:9:::1;:24;46992:13;;46982:24;;;;;;;;;;;:176;;;;;;;;;;;;;;;;;;;;;;;;;;;47190:11;47176:43;47203:15;47176:43;;;;;;:::i;:::-;;;;;;;;46747:480;;46698:529::o:0;22063:438::-;22186:22;;;;;;;;;;;22170:38;;:12;:10;:12::i;:::-;:38;;;22148:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;22298:20;;22290:3;22280:14;;;;;;:38;22272:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22375:22;;;;;;;;;;;22358:40;;;;;;;;;;;;22425:22;;;;;;;;;;;22409:13;;:38;;;;;;;;;;;;;;;;;;22491:1;22458:22;;:35;;;;;;;;;;;;;;;;;;22063:438;:::o;40966:45::-;;;:::o;40208:71::-;;;;;;;;;;;;;;;;;;;;;;:::o;41144:23::-;;;;:::o;18665:31::-;;;;;;;;;;;;;:::o;40075:66::-;;;;;;;;;;;;;;;;;:::o;40148:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22509:399::-;20640:13;;;;;;;;;;;20624:29;;:12;:10;:12::i;:::-;:29;;;20602:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;22640:1:::1;22612:24;;:29;22590:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;22720:12;;;;;;;;;;;22712:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;22821:14;;22803:15;:32;;;;:::i;:::-;22776:24;:59;;;;22851:49;22875:24;;22851:49;;;;;;:::i;:::-;;;;;;;;22509:399::o:0;49167:253::-;28650:13;:11;:13::i;:::-;49248:1:::1;49238:7;:11;49230:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;49303:2;49293:7;:12;49289:51;;;49314:26;;;;;;;;;;;;;;49289:51;49360:7;49351:6;:16;;;;49383:29;49391:7;49400:4;49406:5;49383:29;;;;;;;;:::i;:::-;;;;;;;;49167:253:::0;:::o;24526:176::-;24640:7;24667:11;:18;24679:5;24667:18;;;;;;;;;;;;;;;:27;24686:7;24667:27;;;;;;;;;;;;;;;;24660:34;;24526:176;;;;:::o;29663:238::-;28650:13;:11;:13::i;:::-;29786:1:::1;29766:22;;:8;:22;;::::0;29744:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29865:28;29884:8;29865:18;:28::i;:::-;29663:238:::0;:::o;18547:29::-;;;;;;;;;;;;;:::o;40858:32::-;;;;;;;;;;;;;:::o;41087:21::-;;;;:::o;28929:132::-;29004:12;:10;:12::i;:::-;28993:23;;:7;:5;:7::i;:::-;:23;;;28985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28929:132::o;93:98::-;146:7;173:10;166:17;;93:98;:::o;27942:220::-;28100:6;28070:11;:18;28082:5;28070:18;;;;;;;;;;;;;;;:27;28089:7;28070:27;;;;;;;;;;;;;;;:36;;;;28138:7;28122:32;;28131:5;28122:32;;;28147:6;28122:32;;;;;;:::i;:::-;;;;;;;;27942:220;;;:::o;50369:1580::-;50490:17;50510;:23;50528:4;50510:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;50537:17;:21;50555:2;50537:21;;;;;;;;;;;;;;;;;;;;;;;;;50510:48;50490:68;;50576:14;;;;;;;;;;;50575:15;:32;;;;;50595:12;50594:13;50575:32;50571:99;;;50631:27;;;;;;;;;;;;;;50571:99;50682:33;50702:4;50708:6;50682:19;:33::i;:::-;50728:19;50750:24;50768:4;50750:9;:24::i;:::-;50728:46;;50806:10;;;;;;;;;;;50805:11;:58;;;;;50851:12;;50833:14;:30;;50805:58;:88;;;;;50881:12;50880:13;50805:88;:123;;;;;50911:11;:17;50923:4;50911:17;;;;;;;;;;;;;;;;;;;;;;;;;50910:18;50805:123;50787:217;;;50979:13;:11;:13::i;:::-;50787:217;51093:12;51088:513;;51122:8;51209:11;:15;51221:2;51209:15;;;;;;;;;;;;;;;;;;;;;;;;;51205:250;;;40848:3;51289:7;;51280:6;:16;;;;:::i;:::-;51279:32;;;;:::i;:::-;51273:38;;51205:250;;;51337:11;:17;51349:4;51337:17;;;;;;;;;;;;;;;;;;;;;;;;;51333:122;;;40848:3;51418:6;;51409;:15;;;;:::i;:::-;51408:31;;;;:::i;:::-;51402:37;;51333:122;51205:250;51479:1;51473:3;:7;51469:121;;;51501:41;51517:4;51531;51538:3;51501:15;:41::i;:::-;51571:3;51561:13;;;;;:::i;:::-;;;51469:121;51107:494;51088:513;51665:17;51701:6;51685:13;51695:2;51685:9;:13::i;:::-;:22;;;;:::i;:::-;51665:42;;51723:23;:27;51747:2;51723:27;;;;;;;;;;;;;;;;;;;;;;;;;51722:28;:56;;;;;51769:9;;51754:12;:24;51722:56;51718:138;;;51827:2;51831:12;51802:42;;;;;;;;;;;;:::i;:::-;;;;;;;;51718:138;51866:31;51886:2;51890:6;51866:19;:31::i;:::-;51908:33;51924:4;51930:2;51934:6;51908:15;:33::i;:::-;50479:1470;;;50369:1580;;;:::o;30061:312::-;30177:1;30157:22;;:8;:22;;;30135:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30256:16;30275:6;;;;;;;;;;;30256:25;;30301:8;30292:6;;:17;;;;;;;;;;;;;;;;;;30356:8;30325:40;;30346:8;30325:40;;;;;;;;;;;;30124:249;30061:312;:::o;53035:1821::-;53110:16;53129:13;;53110:32;;53153:23;53179:12;:18;53192:4;53179:18;;;;;;;;;;;;;;;:31;53198:11;53179:31;;;;;;;;;;;;53153:57;;53221:19;53243:15;53253:4;53243:9;:15::i;:::-;53221:37;;53269:15;53304:6;53287:14;:23;;;;:::i;:::-;53269:41;;53321:25;53349:9;:22;53359:11;53349:22;;;;;;;;;;;53321:50;;53405:11;53382:14;:20;53397:4;53382:20;;;;;;;;;;;;;;;:34;;;;53516:16;:22;53533:4;53516:22;;;;;;;;;;;;;;;;;;;;;;;;;53512:1337;;;53562:12;:18;53575:4;53562:18;;;;;;;;;;;;;;;:31;53581:11;53562:31;;;;;;;;;;;53555:38;;;53725:1;53704:18;:22;53700:271;;;40697:12;53751:18;:28;53747:208;;53821:18;53802:4;:15;;;:37;;;;;;;:::i;:::-;;;;;;;;53747:208;;;40769:11;53867:18;:28;53863:92;;53937:18;53918:4;:15;;;:37;;;;;;;:::i;:::-;;;;;;;;53863:92;53747:208;53700:271;53512:1337;;;54037:10;54003:12;:18;54016:4;54003:18;;;;;;;;;;;;;;;:31;54022:11;54003:31;;;;;;;;;;;:44;;;;40697:12;54097:14;:24;54093:745;;54197:14;54178:4;:15;;;:33;;;;;;;:::i;:::-;;;;;;;;40697:12;54267:10;:20;54263:55;;54308:10;54289:4;:15;;;:29;;;;;;;:::i;:::-;;;;;;;;54263:55;40697:12;54371:10;:19;:43;;;;;40769:11;54394:10;:20;;54371:43;54367:99;;;54456:10;54437:4;:15;;;:29;;;;;;;:::i;:::-;;;;;;;;54367:99;54093:745;;;40769:11;54590:14;:24;54586:252;;54654:14;54635:4;:15;;;:33;;;;;;;:::i;:::-;;;;;;;;40769:11;54724:10;:20;54720:55;;54765:10;54746:4;:15;;;:29;;;;;;;:::i;:::-;;;;;;;;54720:55;54586:252;54093:745;53512:1337;53099:1757;;;;;53035:1821;;:::o;52078:763::-;52133:4;52120:10;;:17;;;;;;;;;;;;;;;;;;52216:28;52247:24;52265:4;52247:9;:24::i;:::-;52216:55;;52348:1;52325:20;:24;52321:484;;;52366:21;52404:1;52390:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52366:40;;52439:4;52421;52426:1;52421:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;52469:4;52459;52464:1;52459:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;52546:6;;;;;;;;;;;:57;;;52622:20;52661:1;52709:4;52732:12;52763:15;52546:247;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52351:454;52321:484;52828:5;52815:10;;:18;;;;;;;;;;;;;;;;;;52109:732;52078:763::o;26487:535::-;26645:1;26627:20;;:6;:20;;;26619:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26703:21;26727:9;:17;26737:6;26727:17;;;;;;;;;;;;;;;;26703:41;;26794:6;26777:13;:23;;26755:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;26914:6;26898:13;:22;;;;:::i;:::-;26878:9;:17;26888:6;26878:17;;;;;;;;;;;;;;;:42;;;;26955:6;26931:9;:20;26941:9;26931:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;26996:9;26979:35;;26988:6;26979:35;;;27007:6;26979:35;;;;;;:::i;:::-;;;;;;;;26608:414;26487:535;;;:::o;55034:2119::-;55109:16;55128:13;;55109:32;;55152:19;55174:15;55184:4;55174:9;:15::i;:::-;55152:37;;55200:23;55226:12;:18;55239:4;55226:18;;;;;;;;;;;;;;;:31;55245:11;55226:31;;;;;;;;;;;;55200:57;;55268:25;55296:9;:22;55306:11;55296:22;;;;;;;;;;;55268:50;;55352:11;55329:14;:20;55344:4;55329:20;;;;;;;;;;;;;;;:34;;;;55463:16;:22;55480:4;55463:22;;;;;;;;;;;;;;;;;;;;;;;;;55459:1687;;;55509:12;:18;55522:4;55509:18;;;;;;;;;;;;;;;:31;55528:11;55509:31;;;;;;;;;;;55502:38;;;55672:1;55651:18;:22;55647:271;;;40697:12;55698:18;:28;55694:208;;55768:18;55749:4;:15;;;:37;;;;;;;:::i;:::-;;;;;;;;55694:208;;;40769:11;55814:18;:28;55810:92;;55884:18;55865:4;:15;;;:37;;;;;;;:::i;:::-;;;;;;;;55810:92;55694:208;55647:271;55459:1687;;;56001:6;55984:14;:23;;;;:::i;:::-;55950:12;:18;55963:4;55950:18;;;;;;;;;;;;;;;:31;55969:11;55950:31;;;;;;;;;;;:57;;;;56022:15;56057:6;56040:14;:23;;;;:::i;:::-;56022:41;;40769:11;56168:14;:23;56164:971;;;40697:12;56246:10;:20;56242:189;;56308:10;56289:4;:15;;;:29;;;;;;;:::i;:::-;;;;;;;;56242:189;;;40769:11;56380:10;:20;56376:55;;56421:10;56402:4;:15;;;:29;;;;;;;:::i;:::-;;;;;;;;56376:55;56242:189;56164:971;;;40769:11;56540:14;:24;;:51;;;;;40697:12;56568:14;:23;56540:51;56536:599;;;40697:12;56646:10;:20;56642:194;;56708:10;56689:4;:15;;;:29;;;;;;;:::i;:::-;;;;;;;;56642:194;;;40769:11;56785:10;:20;56781:55;;56826:10;56807:4;:15;;;:29;;;;;;;:::i;:::-;;;;;;;;56781:55;56642:194;56874:14;56855:4;:15;;;:33;;;;;;;:::i;:::-;;;;;;;;56536:599;;;40697:12;56955:14;:24;56951:184;;57057:10;57038:4;:15;;;:29;;;;;;;:::i;:::-;;;;;;;;57105:14;57086:4;:15;;;:33;;;;;;;:::i;:::-;;;;;;;;56951:184;56536:599;56164:971;55935:1211;55459:1687;55098:2055;;;;55034:2119;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:329::-;2091:6;2140:2;2128:9;2119:7;2115:23;2111:32;2108:119;;;2146:79;;:::i;:::-;2108:119;2266:1;2291:53;2336:7;2327:6;2316:9;2312:22;2291:53;:::i;:::-;2281:63;;2237:117;2032:329;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:116::-;3851:21;3866:5;3851:21;:::i;:::-;3844:5;3841:32;3831:60;;3887:1;3884;3877:12;3831:60;3781:116;:::o;3903:133::-;3946:5;3984:6;3971:20;3962:29;;4000:30;4024:5;4000:30;:::i;:::-;3903:133;;;;:::o;4042:468::-;4107:6;4115;4164:2;4152:9;4143:7;4139:23;4135:32;4132:119;;;4170:79;;:::i;:::-;4132:119;4290:1;4315:53;4360:7;4351:6;4340:9;4336:22;4315:53;:::i;:::-;4305:63;;4261:117;4417:2;4443:50;4485:7;4476:6;4465:9;4461:22;4443:50;:::i;:::-;4433:60;;4388:115;4042:468;;;;;:::o;4516:118::-;4603:24;4621:5;4603:24;:::i;:::-;4598:3;4591:37;4516:118;;:::o;4640:222::-;4733:4;4771:2;4760:9;4756:18;4748:26;;4784:71;4852:1;4841:9;4837:17;4828:6;4784:71;:::i;:::-;4640:222;;;;:::o;4868:329::-;4927:6;4976:2;4964:9;4955:7;4951:23;4947:32;4944:119;;;4982:79;;:::i;:::-;4944:119;5102:1;5127:53;5172:7;5163:6;5152:9;5148:22;5127:53;:::i;:::-;5117:63;;5073:117;4868:329;;;;:::o;5203:619::-;5280:6;5288;5296;5345:2;5333:9;5324:7;5320:23;5316:32;5313:119;;;5351:79;;:::i;:::-;5313:119;5471:1;5496:53;5541:7;5532:6;5521:9;5517:22;5496:53;:::i;:::-;5486:63;;5442:117;5598:2;5624:53;5669:7;5660:6;5649:9;5645:22;5624:53;:::i;:::-;5614:63;;5569:118;5726:2;5752:53;5797:7;5788:6;5777:9;5773:22;5752:53;:::i;:::-;5742:63;;5697:118;5203:619;;;;;:::o;5828:86::-;5863:7;5903:4;5896:5;5892:16;5881:27;;5828:86;;;:::o;5920:112::-;6003:22;6019:5;6003:22;:::i;:::-;5998:3;5991:35;5920:112;;:::o;6038:214::-;6127:4;6165:2;6154:9;6150:18;6142:26;;6178:67;6242:1;6231:9;6227:17;6218:6;6178:67;:::i;:::-;6038:214;;;;:::o;6258:60::-;6286:3;6307:5;6300:12;;6258:60;;;:::o;6324:142::-;6374:9;6407:53;6425:34;6434:24;6452:5;6434:24;:::i;:::-;6425:34;:::i;:::-;6407:53;:::i;:::-;6394:66;;6324:142;;;:::o;6472:126::-;6522:9;6555:37;6586:5;6555:37;:::i;:::-;6542:50;;6472:126;;;:::o;6604:149::-;6677:9;6710:37;6741:5;6710:37;:::i;:::-;6697:50;;6604:149;;;:::o;6759:177::-;6869:60;6923:5;6869:60;:::i;:::-;6864:3;6857:73;6759:177;;:::o;6942:268::-;7058:4;7096:2;7085:9;7081:18;7073:26;;7109:94;7200:1;7189:9;7185:17;7176:6;7109:94;:::i;:::-;6942:268;;;;:::o;7216:118::-;7303:24;7321:5;7303:24;:::i;:::-;7298:3;7291:37;7216:118;;:::o;7340:222::-;7433:4;7471:2;7460:9;7456:18;7448:26;;7484:71;7552:1;7541:9;7537:17;7528:6;7484:71;:::i;:::-;7340:222;;;;:::o;7568:77::-;7605:7;7634:5;7623:16;;7568:77;;;:::o;7651:122::-;7724:24;7742:5;7724:24;:::i;:::-;7717:5;7714:35;7704:63;;7763:1;7760;7753:12;7704:63;7651:122;:::o;7779:139::-;7825:5;7863:6;7850:20;7841:29;;7879:33;7906:5;7879:33;:::i;:::-;7779:139;;;;:::o;7924:474::-;7992:6;8000;8049:2;8037:9;8028:7;8024:23;8020:32;8017:119;;;8055:79;;:::i;:::-;8017:119;8175:1;8200:53;8245:7;8236:6;8225:9;8221:22;8200:53;:::i;:::-;8190:63;;8146:117;8302:2;8328:53;8373:7;8364:6;8353:9;8349:22;8328:53;:::i;:::-;8318:63;;8273:118;7924:474;;;;;:::o;8404:117::-;8513:1;8510;8503:12;8527:117;8636:1;8633;8626:12;8650:117;8759:1;8756;8749:12;8790:568;8863:8;8873:6;8923:3;8916:4;8908:6;8904:17;8900:27;8890:122;;8931:79;;:::i;:::-;8890:122;9044:6;9031:20;9021:30;;9074:18;9066:6;9063:30;9060:117;;;9096:79;;:::i;:::-;9060:117;9210:4;9202:6;9198:17;9186:29;;9264:3;9256:4;9248:6;9244:17;9234:8;9230:32;9227:41;9224:128;;;9271:79;;:::i;:::-;9224:128;8790:568;;;;;:::o;9364:559::-;9450:6;9458;9507:2;9495:9;9486:7;9482:23;9478:32;9475:119;;;9513:79;;:::i;:::-;9475:119;9661:1;9650:9;9646:17;9633:31;9691:18;9683:6;9680:30;9677:117;;;9713:79;;:::i;:::-;9677:117;9826:80;9898:7;9889:6;9878:9;9874:22;9826:80;:::i;:::-;9808:98;;;;9604:312;9364:559;;;;;:::o;9929:117::-;10038:1;10035;10028:12;10052:180;10100:77;10097:1;10090:88;10197:4;10194:1;10187:15;10221:4;10218:1;10211:15;10238:281;10321:27;10343:4;10321:27;:::i;:::-;10313:6;10309:40;10451:6;10439:10;10436:22;10415:18;10403:10;10400:34;10397:62;10394:88;;;10462:18;;:::i;:::-;10394:88;10502:10;10498:2;10491:22;10281:238;10238:281;;:::o;10525:129::-;10559:6;10586:20;;:::i;:::-;10576:30;;10615:33;10643:4;10635:6;10615:33;:::i;:::-;10525:129;;;:::o;10660:307::-;10721:4;10811:18;10803:6;10800:30;10797:56;;;10833:18;;:::i;:::-;10797:56;10871:29;10893:6;10871:29;:::i;:::-;10863:37;;10955:4;10949;10945:15;10937:23;;10660:307;;;:::o;10973:146::-;11070:6;11065:3;11060;11047:30;11111:1;11102:6;11097:3;11093:16;11086:27;10973:146;;;:::o;11125:423::-;11202:5;11227:65;11243:48;11284:6;11243:48;:::i;:::-;11227:65;:::i;:::-;11218:74;;11315:6;11308:5;11301:21;11353:4;11346:5;11342:16;11391:3;11382:6;11377:3;11373:16;11370:25;11367:112;;;11398:79;;:::i;:::-;11367:112;11488:54;11535:6;11530:3;11525;11488:54;:::i;:::-;11208:340;11125:423;;;;;:::o;11567:338::-;11622:5;11671:3;11664:4;11656:6;11652:17;11648:27;11638:122;;11679:79;;:::i;:::-;11638:122;11796:6;11783:20;11821:78;11895:3;11887:6;11880:4;11872:6;11868:17;11821:78;:::i;:::-;11812:87;;11628:277;11567:338;;;;:::o;11911:507::-;11979:6;12028:2;12016:9;12007:7;12003:23;11999:32;11996:119;;;12034:79;;:::i;:::-;11996:119;12182:1;12171:9;12167:17;12154:31;12212:18;12204:6;12201:30;12198:117;;;12234:79;;:::i;:::-;12198:117;12339:62;12393:7;12384:6;12373:9;12369:22;12339:62;:::i;:::-;12329:72;;12125:286;11911:507;;;;:::o;12424:104::-;12469:7;12498:24;12516:5;12498:24;:::i;:::-;12487:35;;12424:104;;;:::o;12534:142::-;12637:32;12663:5;12637:32;:::i;:::-;12632:3;12625:45;12534:142;;:::o;12682:254::-;12791:4;12829:2;12818:9;12814:18;12806:26;;12842:87;12926:1;12915:9;12911:17;12902:6;12842:87;:::i;:::-;12682:254;;;;:::o;12942:442::-;13091:4;13129:2;13118:9;13114:18;13106:26;;13142:71;13210:1;13199:9;13195:17;13186:6;13142:71;:::i;:::-;13223:72;13291:2;13280:9;13276:18;13267:6;13223:72;:::i;:::-;13305;13373:2;13362:9;13358:18;13349:6;13305:72;:::i;:::-;12942:442;;;;;;:::o;13390:474::-;13458:6;13466;13515:2;13503:9;13494:7;13490:23;13486:32;13483:119;;;13521:79;;:::i;:::-;13483:119;13641:1;13666:53;13711:7;13702:6;13691:9;13687:22;13666:53;:::i;:::-;13656:63;;13612:117;13768:2;13794:53;13839:7;13830:6;13819:9;13815:22;13794:53;:::i;:::-;13784:63;;13739:118;13390:474;;;;;:::o;13870:153::-;13947:9;13980:37;14011:5;13980:37;:::i;:::-;13967:50;;13870:153;;;:::o;14029:185::-;14143:64;14201:5;14143:64;:::i;:::-;14138:3;14131:77;14029:185;;:::o;14220:276::-;14340:4;14378:2;14367:9;14363:18;14355:26;;14391:98;14486:1;14475:9;14471:17;14462:6;14391:98;:::i;:::-;14220:276;;;;:::o;14502:180::-;14550:77;14547:1;14540:88;14647:4;14644:1;14637:15;14671:4;14668:1;14661:15;14688:320;14732:6;14769:1;14763:4;14759:12;14749:22;;14816:1;14810:4;14806:12;14837:18;14827:81;;14893:4;14885:6;14881:17;14871:27;;14827:81;14955:2;14947:6;14944:14;14924:18;14921:38;14918:84;;14974:18;;:::i;:::-;14918:84;14739:269;14688:320;;;:::o;15014:174::-;15154:26;15150:1;15142:6;15138:14;15131:50;15014:174;:::o;15194:366::-;15336:3;15357:67;15421:2;15416:3;15357:67;:::i;:::-;15350:74;;15433:93;15522:3;15433:93;:::i;:::-;15551:2;15546:3;15542:12;15535:19;;15194:366;;;:::o;15566:419::-;15732:4;15770:2;15759:9;15755:18;15747:26;;15819:9;15813:4;15809:20;15805:1;15794:9;15790:17;15783:47;15847:131;15973:4;15847:131;:::i;:::-;15839:139;;15566:419;;;:::o;15991:442::-;16140:4;16178:2;16167:9;16163:18;16155:26;;16191:71;16259:1;16248:9;16244:17;16235:6;16191:71;:::i;:::-;16272:72;16340:2;16329:9;16325:18;16316:6;16272:72;:::i;:::-;16354;16422:2;16411:9;16407:18;16398:6;16354:72;:::i;:::-;15991:442;;;;;;:::o;16439:172::-;16579:24;16575:1;16567:6;16563:14;16556:48;16439:172;:::o;16617:366::-;16759:3;16780:67;16844:2;16839:3;16780:67;:::i;:::-;16773:74;;16856:93;16945:3;16856:93;:::i;:::-;16974:2;16969:3;16965:12;16958:19;;16617:366;;;:::o;16989:419::-;17155:4;17193:2;17182:9;17178:18;17170:26;;17242:9;17236:4;17232:20;17228:1;17217:9;17213:17;17206:47;17270:131;17396:4;17270:131;:::i;:::-;17262:139;;16989:419;;;:::o;17414:168::-;17554:20;17550:1;17542:6;17538:14;17531:44;17414:168;:::o;17588:366::-;17730:3;17751:67;17815:2;17810:3;17751:67;:::i;:::-;17744:74;;17827:93;17916:3;17827:93;:::i;:::-;17945:2;17940:3;17936:12;17929:19;;17588:366;;;:::o;17960:419::-;18126:4;18164:2;18153:9;18149:18;18141:26;;18213:9;18207:4;18203:20;18199:1;18188:9;18184:17;18177:47;18241:131;18367:4;18241:131;:::i;:::-;18233:139;;17960:419;;;:::o;18385:553::-;18562:4;18600:3;18589:9;18585:19;18577:27;;18614:71;18682:1;18671:9;18667:17;18658:6;18614:71;:::i;:::-;18695:72;18763:2;18752:9;18748:18;18739:6;18695:72;:::i;:::-;18777;18845:2;18834:9;18830:18;18821:6;18777:72;:::i;:::-;18859;18927:2;18916:9;18912:18;18903:6;18859:72;:::i;:::-;18385:553;;;;;;;:::o;18944:228::-;19084:34;19080:1;19072:6;19068:14;19061:58;19153:11;19148:2;19140:6;19136:15;19129:36;18944:228;:::o;19178:366::-;19320:3;19341:67;19405:2;19400:3;19341:67;:::i;:::-;19334:74;;19417:93;19506:3;19417:93;:::i;:::-;19535:2;19530:3;19526:12;19519:19;;19178:366;;;:::o;19550:419::-;19716:4;19754:2;19743:9;19739:18;19731:26;;19803:9;19797:4;19793:20;19789:1;19778:9;19774:17;19767:47;19831:131;19957:4;19831:131;:::i;:::-;19823:139;;19550:419;;;:::o;19975:180::-;20023:77;20020:1;20013:88;20120:4;20117:1;20110:15;20144:4;20141:1;20134:15;20161:194;20201:4;20221:20;20239:1;20221:20;:::i;:::-;20216:25;;20255:20;20273:1;20255:20;:::i;:::-;20250:25;;20299:1;20296;20292:9;20284:17;;20323:1;20317:4;20314:11;20311:37;;;20328:18;;:::i;:::-;20311:37;20161:194;;;;:::o;20361:180::-;20501:32;20497:1;20489:6;20485:14;20478:56;20361:180;:::o;20547:366::-;20689:3;20710:67;20774:2;20769:3;20710:67;:::i;:::-;20703:74;;20786:93;20875:3;20786:93;:::i;:::-;20904:2;20899:3;20895:12;20888:19;;20547:366;;;:::o;20919:419::-;21085:4;21123:2;21112:9;21108:18;21100:26;;21172:9;21166:4;21162:20;21158:1;21147:9;21143:17;21136:47;21200:131;21326:4;21200:131;:::i;:::-;21192:139;;20919:419;;;:::o;21344:181::-;21484:33;21480:1;21472:6;21468:14;21461:57;21344:181;:::o;21531:366::-;21673:3;21694:67;21758:2;21753:3;21694:67;:::i;:::-;21687:74;;21770:93;21859:3;21770:93;:::i;:::-;21888:2;21883:3;21879:12;21872:19;;21531:366;;;:::o;21903:419::-;22069:4;22107:2;22096:9;22092:18;22084:26;;22156:9;22150:4;22146:20;22142:1;22131:9;22127:17;22120:47;22184:131;22310:4;22184:131;:::i;:::-;22176:139;;21903:419;;;:::o;22328:191::-;22368:3;22387:20;22405:1;22387:20;:::i;:::-;22382:25;;22421:20;22439:1;22421:20;:::i;:::-;22416:25;;22464:1;22461;22457:9;22450:16;;22485:3;22482:1;22479:10;22476:36;;;22492:18;;:::i;:::-;22476:36;22328:191;;;;:::o;22525:173::-;22665:25;22661:1;22653:6;22649:14;22642:49;22525:173;:::o;22704:366::-;22846:3;22867:67;22931:2;22926:3;22867:67;:::i;:::-;22860:74;;22943:93;23032:3;22943:93;:::i;:::-;23061:2;23056:3;23052:12;23045:19;;22704:366;;;:::o;23076:419::-;23242:4;23280:2;23269:9;23265:18;23257:26;;23329:9;23323:4;23319:20;23315:1;23304:9;23300:17;23293:47;23357:131;23483:4;23357:131;:::i;:::-;23349:139;;23076:419;;;:::o;23501:177::-;23641:29;23637:1;23629:6;23625:14;23618:53;23501:177;:::o;23684:366::-;23826:3;23847:67;23911:2;23906:3;23847:67;:::i;:::-;23840:74;;23923:93;24012:3;23923:93;:::i;:::-;24041:2;24036:3;24032:12;24025:19;;23684:366;;;:::o;24056:419::-;24222:4;24260:2;24249:9;24245:18;24237:26;;24309:9;24303:4;24299:20;24295:1;24284:9;24280:17;24273:47;24337:131;24463:4;24337:131;:::i;:::-;24329:139;;24056:419;;;:::o;24481:174::-;24621:26;24617:1;24609:6;24605:14;24598:50;24481:174;:::o;24661:366::-;24803:3;24824:67;24888:2;24883:3;24824:67;:::i;:::-;24817:74;;24900:93;24989:3;24900:93;:::i;:::-;25018:2;25013:3;25009:12;25002:19;;24661:366;;;:::o;25033:419::-;25199:4;25237:2;25226:9;25222:18;25214:26;;25286:9;25280:4;25276:20;25272:1;25261:9;25257:17;25250:47;25314:131;25440:4;25314:131;:::i;:::-;25306:139;;25033:419;;;:::o;25458:180::-;25506:77;25503:1;25496:88;25603:4;25600:1;25593:15;25627:4;25624:1;25617:15;25644:185;25684:1;25701:20;25719:1;25701:20;:::i;:::-;25696:25;;25735:20;25753:1;25735:20;:::i;:::-;25730:25;;25774:1;25764:35;;25779:18;;:::i;:::-;25764:35;25821:1;25818;25814:9;25809:14;;25644:185;;;;:::o;25835:165::-;25975:17;25971:1;25963:6;25959:14;25952:41;25835:165;:::o;26006:366::-;26148:3;26169:67;26233:2;26228:3;26169:67;:::i;:::-;26162:74;;26245:93;26334:3;26245:93;:::i;:::-;26363:2;26358:3;26354:12;26347:19;;26006:366;;;:::o;26378:419::-;26544:4;26582:2;26571:9;26567:18;26559:26;;26631:9;26625:4;26621:20;26617:1;26606:9;26602:17;26595:47;26659:131;26785:4;26659:131;:::i;:::-;26651:139;;26378:419;;;:::o;26803:174::-;26943:26;26939:1;26931:6;26927:14;26920:50;26803:174;:::o;26983:366::-;27125:3;27146:67;27210:2;27205:3;27146:67;:::i;:::-;27139:74;;27222:93;27311:3;27222:93;:::i;:::-;27340:2;27335:3;27331:12;27324:19;;26983:366;;;:::o;27355:419::-;27521:4;27559:2;27548:9;27544:18;27536:26;;27608:9;27602:4;27598:20;27594:1;27583:9;27579:17;27572:47;27636:131;27762:4;27636:131;:::i;:::-;27628:139;;27355:419;;;:::o;27780:418::-;27917:4;27955:2;27944:9;27940:18;27932:26;;27968:71;28036:1;28025:9;28021:17;28012:6;27968:71;:::i;:::-;28049:66;28111:2;28100:9;28096:18;28087:6;28049:66;:::i;:::-;28125;28187:2;28176:9;28172:18;28163:6;28125:66;:::i;:::-;27780:418;;;;;;:::o;28204:180::-;28344:32;28340:1;28332:6;28328:14;28321:56;28204:180;:::o;28390:366::-;28532:3;28553:67;28617:2;28612:3;28553:67;:::i;:::-;28546:74;;28629:93;28718:3;28629:93;:::i;:::-;28747:2;28742:3;28738:12;28731:19;;28390:366;;;:::o;28762:419::-;28928:4;28966:2;28955:9;28951:18;28943:26;;29015:9;29009:4;29005:20;29001:1;28990:9;28986:17;28979:47;29043:131;29169:4;29043:131;:::i;:::-;29035:139;;28762:419;;;:::o;29187:173::-;29327:25;29323:1;29315:6;29311:14;29304:49;29187:173;:::o;29366:366::-;29508:3;29529:67;29593:2;29588:3;29529:67;:::i;:::-;29522:74;;29605:93;29694:3;29605:93;:::i;:::-;29723:2;29718:3;29714:12;29707:19;;29366:366;;;:::o;29738:419::-;29904:4;29942:2;29931:9;29927:18;29919:26;;29991:9;29985:4;29981:20;29977:1;29966:9;29962:17;29955:47;30019:131;30145:4;30019:131;:::i;:::-;30011:139;;29738:419;;;:::o;30163:180::-;30211:77;30208:1;30201:88;30308:4;30305:1;30298:15;30332:4;30329:1;30322:15;30349:233;30388:3;30411:24;30429:5;30411:24;:::i;:::-;30402:33;;30457:66;30450:5;30447:77;30444:103;;30527:18;;:::i;:::-;30444:103;30574:1;30567:5;30563:13;30556:20;;30349:233;;;:::o;30588:225::-;30728:34;30724:1;30716:6;30712:14;30705:58;30797:8;30792:2;30784:6;30780:15;30773:33;30588:225;:::o;30819:366::-;30961:3;30982:67;31046:2;31041:3;30982:67;:::i;:::-;30975:74;;31058:93;31147:3;31058:93;:::i;:::-;31176:2;31171:3;31167:12;31160:19;;30819:366;;;:::o;31191:419::-;31357:4;31395:2;31384:9;31380:18;31372:26;;31444:9;31438:4;31434:20;31430:1;31419:9;31415:17;31408:47;31472:131;31598:4;31472:131;:::i;:::-;31464:139;;31191:419;;;:::o;31616:178::-;31756:30;31752:1;31744:6;31740:14;31733:54;31616:178;:::o;31800:366::-;31942:3;31963:67;32027:2;32022:3;31963:67;:::i;:::-;31956:74;;32039:93;32128:3;32039:93;:::i;:::-;32157:2;32152:3;32148:12;32141:19;;31800:366;;;:::o;32172:419::-;32338:4;32376:2;32365:9;32361:18;32353:26;;32425:9;32419:4;32415:20;32411:1;32400:9;32396:17;32389:47;32453:131;32579:4;32453:131;:::i;:::-;32445:139;;32172:419;;;:::o;32597:179::-;32737:31;32733:1;32725:6;32721:14;32714:55;32597:179;:::o;32782:366::-;32924:3;32945:67;33009:2;33004:3;32945:67;:::i;:::-;32938:74;;33021:93;33110:3;33021:93;:::i;:::-;33139:2;33134:3;33130:12;33123:19;;32782:366;;;:::o;33154:419::-;33320:4;33358:2;33347:9;33343:18;33335:26;;33407:9;33401:4;33397:20;33393:1;33382:9;33378:17;33371:47;33435:131;33561:4;33435:131;:::i;:::-;33427:139;;33154:419;;;:::o;33579:175::-;33719:27;33715:1;33707:6;33703:14;33696:51;33579:175;:::o;33760:366::-;33902:3;33923:67;33987:2;33982:3;33923:67;:::i;:::-;33916:74;;33999:93;34088:3;33999:93;:::i;:::-;34117:2;34112:3;34108:12;34101:19;;33760:366;;;:::o;34132:419::-;34298:4;34336:2;34325:9;34321:18;34313:26;;34385:9;34379:4;34375:20;34371:1;34360:9;34356:17;34349:47;34413:131;34539:4;34413:131;:::i;:::-;34405:139;;34132:419;;;:::o;34557:169::-;34697:21;34693:1;34685:6;34681:14;34674:45;34557:169;:::o;34732:366::-;34874:3;34895:67;34959:2;34954:3;34895:67;:::i;:::-;34888:74;;34971:93;35060:3;34971:93;:::i;:::-;35089:2;35084:3;35080:12;35073:19;;34732:366;;;:::o;35104:419::-;35270:4;35308:2;35297:9;35293:18;35285:26;;35357:9;35351:4;35347:20;35343:1;35332:9;35328:17;35321:47;35385:131;35511:4;35385:131;:::i;:::-;35377:139;;35104:419;;;:::o;35529:182::-;35669:34;35665:1;35657:6;35653:14;35646:58;35529:182;:::o;35717:366::-;35859:3;35880:67;35944:2;35939:3;35880:67;:::i;:::-;35873:74;;35956:93;36045:3;35956:93;:::i;:::-;36074:2;36069:3;36065:12;36058:19;;35717:366;;;:::o;36089:419::-;36255:4;36293:2;36282:9;36278:18;36270:26;;36342:9;36336:4;36332:20;36328:1;36317:9;36313:17;36306:47;36370:131;36496:4;36370:131;:::i;:::-;36362:139;;36089:419;;;:::o;36514:178::-;36654:30;36650:1;36642:6;36638:14;36631:54;36514:178;:::o;36698:366::-;36840:3;36861:67;36925:2;36920:3;36861:67;:::i;:::-;36854:74;;36937:93;37026:3;36937:93;:::i;:::-;37055:2;37050:3;37046:12;37039:19;;36698:366;;;:::o;37070:419::-;37236:4;37274:2;37263:9;37259:18;37251:26;;37323:9;37317:4;37313:20;37309:1;37298:9;37294:17;37287:47;37351:131;37477:4;37351:131;:::i;:::-;37343:139;;37070:419;;;:::o;37495:225::-;37635:34;37631:1;37623:6;37619:14;37612:58;37704:8;37699:2;37691:6;37687:15;37680:33;37495:225;:::o;37726:366::-;37868:3;37889:67;37953:2;37948:3;37889:67;:::i;:::-;37882:74;;37965:93;38054:3;37965:93;:::i;:::-;38083:2;38078:3;38074:12;38067:19;;37726:366;;;:::o;38098:419::-;38264:4;38302:2;38291:9;38287:18;38279:26;;38351:9;38345:4;38341:20;38337:1;38326:9;38322:17;38315:47;38379:131;38505:4;38379:131;:::i;:::-;38371:139;;38098:419;;;:::o;38523:182::-;38663:34;38659:1;38651:6;38647:14;38640:58;38523:182;:::o;38711:366::-;38853:3;38874:67;38938:2;38933:3;38874:67;:::i;:::-;38867:74;;38950:93;39039:3;38950:93;:::i;:::-;39068:2;39063:3;39059:12;39052:19;;38711:366;;;:::o;39083:419::-;39249:4;39287:2;39276:9;39272:18;39264:26;;39336:9;39330:4;39326:20;39322:1;39311:9;39307:17;39300:47;39364:131;39490:4;39364:131;:::i;:::-;39356:139;;39083:419;;;:::o;39508:410::-;39548:7;39571:20;39589:1;39571:20;:::i;:::-;39566:25;;39605:20;39623:1;39605:20;:::i;:::-;39600:25;;39660:1;39657;39653:9;39682:30;39700:11;39682:30;:::i;:::-;39671:41;;39861:1;39852:7;39848:15;39845:1;39842:22;39822:1;39815:9;39795:83;39772:139;;39891:18;;:::i;:::-;39772:139;39556:362;39508:410;;;;:::o;39924:332::-;40045:4;40083:2;40072:9;40068:18;40060:26;;40096:71;40164:1;40153:9;40149:17;40140:6;40096:71;:::i;:::-;40177:72;40245:2;40234:9;40230:18;40221:6;40177:72;:::i;:::-;39924:332;;;;;:::o;40262:85::-;40307:7;40336:5;40325:16;;40262:85;;;:::o;40353:158::-;40411:9;40444:61;40462:42;40471:32;40497:5;40471:32;:::i;:::-;40462:42;:::i;:::-;40444:61;:::i;:::-;40431:74;;40353:158;;;:::o;40517:147::-;40612:45;40651:5;40612:45;:::i;:::-;40607:3;40600:58;40517:147;;:::o;40670:114::-;40737:6;40771:5;40765:12;40755:22;;40670:114;;;:::o;40790:184::-;40889:11;40923:6;40918:3;40911:19;40963:4;40958:3;40954:14;40939:29;;40790:184;;;;:::o;40980:132::-;41047:4;41070:3;41062:11;;41100:4;41095:3;41091:14;41083:22;;40980:132;;;:::o;41118:108::-;41195:24;41213:5;41195:24;:::i;:::-;41190:3;41183:37;41118:108;;:::o;41232:179::-;41301:10;41322:46;41364:3;41356:6;41322:46;:::i;:::-;41400:4;41395:3;41391:14;41377:28;;41232:179;;;;:::o;41417:113::-;41487:4;41519;41514:3;41510:14;41502:22;;41417:113;;;:::o;41566:732::-;41685:3;41714:54;41762:5;41714:54;:::i;:::-;41784:86;41863:6;41858:3;41784:86;:::i;:::-;41777:93;;41894:56;41944:5;41894:56;:::i;:::-;41973:7;42004:1;41989:284;42014:6;42011:1;42008:13;41989:284;;;42090:6;42084:13;42117:63;42176:3;42161:13;42117:63;:::i;:::-;42110:70;;42203:60;42256:6;42203:60;:::i;:::-;42193:70;;42049:224;42036:1;42033;42029:9;42024:14;;41989:284;;;41993:14;42289:3;42282:10;;41690:608;;;41566:732;;;;:::o;42304:134::-;42362:9;42395:37;42426:5;42395:37;:::i;:::-;42382:50;;42304:134;;;:::o;42444:147::-;42539:45;42578:5;42539:45;:::i;:::-;42534:3;42527:58;42444:147;;:::o;42597:847::-;42868:4;42906:3;42895:9;42891:19;42883:27;;42920:71;42988:1;42977:9;42973:17;42964:6;42920:71;:::i;:::-;43001:80;43077:2;43066:9;43062:18;43053:6;43001:80;:::i;:::-;43128:9;43122:4;43118:20;43113:2;43102:9;43098:18;43091:48;43156:108;43259:4;43250:6;43156:108;:::i;:::-;43148:116;;43274:80;43350:2;43339:9;43335:18;43326:6;43274:80;:::i;:::-;43364:73;43432:3;43421:9;43417:19;43408:6;43364:73;:::i;:::-;42597:847;;;;;;;;:::o;43450:225::-;43590:34;43586:1;43578:6;43574:14;43567:58;43659:8;43654:2;43646:6;43642:15;43635:33;43450:225;:::o;43681:366::-;43823:3;43844:67;43908:2;43903:3;43844:67;:::i;:::-;43837:74;;43920:93;44009:3;43920:93;:::i;:::-;44038:2;44033:3;44029:12;44022:19;;43681:366;;;:::o;44053:419::-;44219:4;44257:2;44246:9;44242:18;44234:26;;44306:9;44300:4;44296:20;44292:1;44281:9;44277:17;44270:47;44334:131;44460:4;44334:131;:::i;:::-;44326:139;;44053:419;;;:::o;44478:226::-;44618:34;44614:1;44606:6;44602:14;44595:58;44687:9;44682:2;44674:6;44670:15;44663:34;44478:226;:::o;44710:366::-;44852:3;44873:67;44937:2;44932:3;44873:67;:::i;:::-;44866:74;;44949:93;45038:3;44949:93;:::i;:::-;45067:2;45062:3;45058:12;45051:19;;44710:366;;;:::o;45082:419::-;45248:4;45286:2;45275:9;45271:18;45263:26;;45335:9;45329:4;45325:20;45321:1;45310:9;45306:17;45299:47;45363:131;45489:4;45363:131;:::i;:::-;45355:139;;45082:419;;;:::o
Swarm Source
ipfs://416b2d3ee07bbd75200b7a187eb286a4bbbe9f27e7fde39157299261ca31daf7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.