More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 131 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 20803005 | 127 days ago | IN | 0 ETH | 0.00033676 | ||||
Transfer | 20799063 | 128 days ago | IN | 0 ETH | 0.00124579 | ||||
Approve | 20552538 | 162 days ago | IN | 0 ETH | 0.00003708 | ||||
Approve | 20552478 | 162 days ago | IN | 0 ETH | 0.00002606 | ||||
Approve | 20551888 | 162 days ago | IN | 0 ETH | 0.00005078 | ||||
Approve | 20462978 | 175 days ago | IN | 0 ETH | 0.00313283 | ||||
Approve | 20462709 | 175 days ago | IN | 0 ETH | 0.00308742 | ||||
Approve | 20448588 | 177 days ago | IN | 0 ETH | 0.00016609 | ||||
Approve | 20448480 | 177 days ago | IN | 0 ETH | 0.00014357 | ||||
Transfer | 20448423 | 177 days ago | IN | 0 ETH | 0.000171 | ||||
Approve | 20448032 | 177 days ago | IN | 0 ETH | 0.00011867 | ||||
Transfer | 20447634 | 177 days ago | IN | 0 ETH | 0.00026506 | ||||
Approve | 20217212 | 209 days ago | IN | 0 ETH | 0.00008275 | ||||
Approve | 20217210 | 209 days ago | IN | 0 ETH | 0.00013623 | ||||
Approve | 20214535 | 209 days ago | IN | 0 ETH | 0.00015198 | ||||
Approve | 20214524 | 209 days ago | IN | 0 ETH | 0.00027055 | ||||
Approve | 20081669 | 228 days ago | IN | 0 ETH | 0.00055884 | ||||
Approve | 19992543 | 240 days ago | IN | 0 ETH | 0.00025846 | ||||
Approve | 19992531 | 240 days ago | IN | 0 ETH | 0.00039111 | ||||
Approve | 19930863 | 249 days ago | IN | 0 ETH | 0.00026106 | ||||
Approve | 19882570 | 256 days ago | IN | 0 ETH | 0.0002378 | ||||
Approve | 19882295 | 256 days ago | IN | 0 ETH | 0.00024298 | ||||
Transfer | 19875367 | 257 days ago | IN | 0 ETH | 0.00064418 | ||||
Transfer | 19875282 | 257 days ago | IN | 0 ETH | 0.00048378 | ||||
Transfer | 19875272 | 257 days ago | IN | 0 ETH | 0.00058596 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
19251168 | 344 days ago | 0.01245032 ETH | ||||
19251168 | 344 days ago | 0.01245032 ETH | ||||
19249093 | 345 days ago | 0.01388636 ETH | ||||
19249093 | 345 days ago | 0.01388636 ETH | ||||
18478315 | 453 days ago | 0.00970604 ETH | ||||
18478315 | 453 days ago | 0.00970604 ETH | ||||
18477952 | 453 days ago | 0.01010715 ETH | ||||
18477952 | 453 days ago | 0.01010715 ETH | ||||
18477682 | 453 days ago | 0.01053436 ETH | ||||
18477682 | 453 days ago | 0.01053436 ETH | ||||
18473309 | 453 days ago | 0.01084672 ETH | ||||
18473309 | 453 days ago | 0.01084672 ETH | ||||
18473044 | 453 days ago | 0.01147696 ETH | ||||
18473044 | 453 days ago | 0.01147696 ETH | ||||
18472945 | 453 days ago | 0.01183375 ETH | ||||
18472945 | 453 days ago | 0.01183375 ETH | ||||
17516556 | 587 days ago | 0.010805 ETH | ||||
17516556 | 587 days ago | 0.010805 ETH | ||||
17374957 | 607 days ago | 0.01080517 ETH | ||||
17374957 | 607 days ago | 0.01080517 ETH | ||||
17374956 | 607 days ago | 0.01206605 ETH | ||||
17374956 | 607 days ago | 0.01206605 ETH | ||||
17374949 | 607 days ago | 0.01543998 ETH | ||||
17374949 | 607 days ago | 0.01543998 ETH | ||||
17292745 | 619 days ago | 0.00629107 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Digipolis
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-12 */ /** *Submitted for verification at Etherscan.io on 2022-04-08 */ // SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; abstract contract Context { function _msgSender() internal view returns (address payable) { return payable(msg.sender); } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address _owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * b̵a̷b̴y̷p̶l̵u̵t̸o̸ ̶o̴r̵i̷g̸i̷n̵a̶l̵ * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzepb̷a̷b̶y̴ ̶p̷l̴u̶t̷o̴acts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * b̴a̸b̶y̷p̴l̸u̶t̵o̷ ̵c̷o̵p̷y̶ * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2b̴a̴b̶y̸p̵l̸u̷t̴o̶ ̵d̸u̵p̸e̵53ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address lpPair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address lpPair); function allPairs(uint) external view returns (address lpPair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address lpPair); 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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } 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; } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract Digipolis is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; mapping (address => bool) private presaleAddresses; mapping (address => bool) private _liquidityHolders; uint private startingSupply = 1000000000; //1 Billion uint256 private constant MAX = ~uint256(0); uint8 private _decimals = 9; uint256 private _decimalsMul = _decimals; uint256 private _tTotal = startingSupply * 10**_decimalsMul; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Digipolis"; string private _symbol = "DIGI"; uint256 private _liquidityFee = 0; // Set dynamically uint256 public _buyLiquidityFee = 2; uint256 public _sellLiquidityFee = 5; uint256 private maxLiquidityFee = 7; uint256 private _treasuryFee = 0; // Set dynamically uint256 public _buyTreasuryFee = 3; uint256 public _sellTreasuryFee = 5; uint256 private maxTreasuryFee = 8; uint256 private masterTaxDivisor = 100; // All tax calculations are divided by this number. IUniswapV2Router02 public dexRouter; address public lpPair; //uniswap router v2 address: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address public TreasuryWallet = 0x6E9eaC03b3a0F812a52f6B454Af95ca71ACDB470; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 private numTokensSellToAddToLiquidity = (_tTotal * 5) / 10000; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _tOwned[_msgSender()] = _tTotal; _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _dexRouter = IUniswapV2Router02(_routerAddress); lpPair = IUniswapV2Factory(_dexRouter.factory()) .createPair(address(this), _dexRouter.WETH()); dexRouter = _dexRouter; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _liquidityHolders[owner()] = true; _isExcluded[address(this)] = true; _excluded.push(address(this)); _isExcluded[owner()] = true; _excluded.push(owner()); _isExcluded[TreasuryWallet] = true; _excluded.push(TreasuryWallet); _isExcluded[lpPair] = true; _excluded.push(lpPair); // Approve the owner for PancakeSwap, timesaver. _approve(_msgSender(), _routerAddress, _tTotal); emit Transfer(address(0), _msgSender(), _tTotal); } function totalSupply() external view override returns (uint256) { return _tTotal; } function decimals() external view override returns (uint8) { return _decimals; } function symbol() external view override returns (string memory) { return _symbol; } function name() external view override returns (string memory) { return _name; } function getOwner() external view override returns (address) { return owner(); } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function setNewRouter(address newRouter) public onlyOwner() { IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter); address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH()); if (get_pair == address(0)) { lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH()); } else { lpPair = get_pair; } dexRouter = _newRouter; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function setBuyTaxes(uint256 liquidityFee, uint256 treasuryFee) external onlyOwner() { require(liquidityFee <= maxLiquidityFee); // Prevents owner from abusing fees. require(treasuryFee <= maxTreasuryFee); // Prevents owner from abusing fees. _buyLiquidityFee = liquidityFee; _buyTreasuryFee = treasuryFee; } function setSellTaxes( uint256 liquidityFee, uint256 treasuryFee) external onlyOwner() { require(liquidityFee <= maxLiquidityFee); // Prevents owner from abusing fees. require(treasuryFee <= maxTreasuryFee); // Prevents owner from abusing fees. _sellLiquidityFee = liquidityFee; _sellTreasuryFee = treasuryFee; } function setTreasuryWallet(address newWallet) external onlyOwner { require(TreasuryWallet != newWallet, "Wallet already set!"); TreasuryWallet = newWallet; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function excludePresaleAddresses(address router, address presale) external onlyOwner { _liquidityHolders[router] = true; _liquidityHolders[presale] = true; presaleAddresses[router] = true; presaleAddresses[presale] = true; excludeFromFee(router); excludeFromFee(presale); } function _hasLimits(address from, address to) private view returns (bool) { return from != owner() && to != owner() && !_liquidityHolders[to] && !_liquidityHolders[from] && to != address(0); } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) private view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) private view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } //to recieve ETH from dexRouter when swaping receive() external payable {} function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if (!inSwapAndLiquify && to == lpPair && swapAndLiquifyEnabled && !presaleAddresses[to] && !presaleAddresses[from] ) { if (overMinTokenBalance) { contractTokenBalance = numTokensSellToAddToLiquidity; swapAndLiquify(contractTokenBalance); } } bool takeFee = true; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap lpPair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(dexRouter), tokenAmount); // add the liquidity dexRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { adjustTaxes(sender, recipient, amount, takeFee); _finalizeTransfer(sender, recipient, amount); } function _finalizeTransfer(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tTreasury) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); if (_isExcluded[sender] && !_isExcluded[recipient]) { _tOwned[sender] = _tOwned[sender].sub(tAmount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _tOwned[sender] = _tOwned[sender].sub(tAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); } if (tLiquidity > 0) _takeLiquidity(sender, tLiquidity); if (rFee > 0 || tFee > 0) _takeReflect(rFee, tFee); if (tTreasury > 0) _takeTreasury(sender, tTreasury); emit Transfer(sender, recipient, tTransferAmount); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tTreasury) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tTreasury, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tTreasury); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = 0; uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTreasury = calculateTreasuryFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tTreasury); return (tTransferAmount, tFee, tLiquidity, tTreasury); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tTreasury, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTreasury = tTreasury.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rTreasury); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeReflect(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _takeLiquidity(address sender, uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success. } function _takeTreasury(address sender, uint256 tTreasury) private { uint256 currentRate = _getRate(); uint256 rTreasury = tTreasury.mul(currentRate); _rOwned[TreasuryWallet] = _rOwned[TreasuryWallet].add(rTreasury); if(_isExcluded[TreasuryWallet]) _tOwned[TreasuryWallet] = _tOwned[TreasuryWallet].add(tTreasury); emit Transfer(sender, TreasuryWallet, tTreasury); // Transparency is the key to success. } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(masterTaxDivisor); } function calculateTreasuryFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_treasuryFee).div(masterTaxDivisor); } function adjustTaxes(address from, address to, uint256 amount, bool takeFee) internal { if (!takeFee) { _liquidityFee = 0; _treasuryFee = 0; } else if (from == lpPair) { _liquidityFee = _buyLiquidityFee; _treasuryFee = _buyTreasuryFee; } else if (to == lpPair) { if (amount >= (_tTotal / 100)) { _liquidityFee = _sellLiquidityFee * 2; _treasuryFee = _sellTreasuryFee * 2; } else { _liquidityFee = _sellLiquidityFee; _treasuryFee = _sellTreasuryFee; } } else { _liquidityFee = 0; _treasuryFee = 0; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"TreasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052633b9aca006009908155600a805460ff191682178155600b8290556200002b91906200083a565b6009546200003a9190620008f8565b600c8190556200004d9060001962000971565b6200005b906000196200091a565b600d556040805180820190915260098082526844696769706f6c697360b81b60209092019182526200009091600f9162000702565b50604080518082019091526004808252634449474960e01b6020909201918252620000be9160109162000702565b506000601181905560026012556005601381905560076014556015919091556003601655601781905560086018556064601955601c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055601d80547501006e9eac03b3a0f812a52f6b454af95ca71acdb470600161ff0160a01b0319909116179055600c5461271091620001559190620008f8565b620001619190620007da565b601e553480156200017157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c5433600090815260026020908152604080832093909355600d54600182529183902091909155601c54825163c45a015560e01b815292516001600160a01b0390911692839263c45a015592600480840193829003018186803b1580156200021b57600080fd5b505afa15801562000230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002569190620007a8565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029f57600080fd5b505afa158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da9190620007a8565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200032357600080fd5b505af115801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e9190620007a8565b601b80546001600160a01b03199081166001600160a01b0393841617909155601a8054909116918316919091179055600160046000620003a66000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252812080549092166001908117909255600890620003ff6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553080825260059384905291812080549094166001908117909455600680548086018255908252600080516020620030658339815191520180546001600160a01b031916909217909155620004876000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556006620004c46000546001600160a01b031690565b8154600181810184556000938452602080852090920180546001600160a01b039485166001600160a01b031991821617909155601d80548516865260059093526040808620805460ff1990811685179091559354600680548086018255600080516020620030658339815191529081018054861693891693909317909255601b8054881689529288208054909616851790955590548454938401855593909552930180549093169116179055620005946200057c3390565b601c54600c546001600160a01b0390911690620005d6565b600c5460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350620009b4565b6001600160a01b0383166200063e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620006a15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000635565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b828054620007109062000934565b90600052602060002090601f0160209004810192826200073457600085556200077f565b82601f106200074f57805160ff19168380011785556200077f565b828001600101855582156200077f579182015b828111156200077f57825182559160200191906001019062000762565b506200078d92915062000791565b5090565b5b808211156200078d576000815560010162000792565b600060208284031215620007bb57600080fd5b81516001600160a01b0381168114620007d357600080fd5b9392505050565b600082620007ec57620007ec6200099e565b500490565b600181815b808511156200083257816000190482111562000816576200081662000988565b808516156200082457918102915b93841c9390800290620007f6565b509250929050565b6000620007d383836000826200085357506001620008f2565b816200086257506000620008f2565b81600181146200087b57600281146200088657620008a6565b6001915050620008f2565b60ff8411156200089a576200089a62000988565b50506001821b620008f2565b5060208310610133831016604e8410600b8410161715620008cb575081810a620008f2565b620008d78383620007f1565b8060001904821115620008ee57620008ee62000988565b0290505b92915050565b600081600019048311821515161562000915576200091562000988565b500290565b6000828210156200092f576200092f62000988565b500390565b600181811c908216806200094957607f821691505b602082108114156200096b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200098357620009836200099e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6126a180620009c46000396000f3fe6080604052600436106102085760003560e01c8063715018a611610118578063a9059cbb116100a0578063dc44b6a01161006f578063dc44b6a0146105dc578063dd62ed3e146105f2578063ea2f0b3714610638578063eafb5a3c14610658578063f2fde38b1461067857600080fd5b8063a9059cbb14610566578063aa35822c14610586578063c49b9a80146105a6578063d628df9c146105c657600080fd5b80638da5cb5b116100e75780638da5cb5b146104d357806395d89b41146104f1578063a11a168214610506578063a457c2d714610526578063a8602fea1461054657600080fd5b8063715018a61461046f57806388790a681461048457806388f820201461049a578063893d20e8146104d357600080fd5b806324fcf8cf1161019b578063437823ec1161016a578063437823ec146103b5578063452ed4f1146103d55780634a74bb02146103f55780635342acb41461041657806370a082311461044f57600080fd5b806324fcf8cf1461033d578063313ce5671461035357806339509351146103755780633bd5d1731461039557600080fd5b806313114a9d116101d757806313114a9d146102c757806313b4a7f4146102e657806318160ddd1461030857806323b872dd1461031d57600080fd5b806306fdde03146102145780630758d9241461023f578063095ea7b31461027757806311ffeaf2146102a757600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b50610229610698565b6040516102369190612419565b60405180910390f35b34801561024b57600080fd5b50601a5461025f906001600160a01b031681565b6040516001600160a01b039091168152602001610236565b34801561028357600080fd5b50610297610292366004612362565b61072a565b6040519015158152602001610236565b3480156102b357600080fd5b50601d5461025f906001600160a01b031681565b3480156102d357600080fd5b50600e545b604051908152602001610236565b3480156102f257600080fd5b506103066103013660046122e8565b610741565b005b34801561031457600080fd5b50600c546102d8565b34801561032957600080fd5b50610297610338366004612321565b6107e7565b34801561034957600080fd5b506102d860175481565b34801561035f57600080fd5b50600a5460405160ff9091168152602001610236565b34801561038157600080fd5b50610297610390366004612362565b610850565b3480156103a157600080fd5b506103066103b03660046123b0565b610886565b3480156103c157600080fd5b506103066103d03660046122ae565b610972565b3480156103e157600080fd5b50601b5461025f906001600160a01b031681565b34801561040157600080fd5b50601d5461029790600160a81b900460ff1681565b34801561042257600080fd5b506102976104313660046122ae565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561045b57600080fd5b506102d861046a3660046122ae565b6109c0565b34801561047b57600080fd5b50610306610a1f565b34801561049057600080fd5b506102d860135481565b3480156104a657600080fd5b506102976104b53660046122ae565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156104df57600080fd5b506000546001600160a01b031661025f565b3480156104fd57600080fd5b50610229610a93565b34801561051257600080fd5b506103066105213660046123c9565b610aa2565b34801561053257600080fd5b50610297610541366004612362565b610af5565b34801561055257600080fd5b506103066105613660046122ae565b610b44565b34801561057257600080fd5b50610297610581366004612362565b610be4565b34801561059257600080fd5b506103066105a13660046123c9565b610bf1565b3480156105b257600080fd5b506103066105c136600461238e565b610c44565b3480156105d257600080fd5b506102d860165481565b3480156105e857600080fd5b506102d860125481565b3480156105fe57600080fd5b506102d861060d3660046122e8565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561064457600080fd5b506103066106533660046122ae565b610cc6565b34801561066457600080fd5b506103066106733660046122ae565b610d11565b34801561068457600080fd5b506103066106933660046122ae565b611097565b6060600f80546106a790612584565b80601f01602080910402602001604051908101604052809291908181526020018280546106d390612584565b80156107205780601f106106f557610100808354040283529160200191610720565b820191906000526020600020905b81548152906001019060200180831161070357829003601f168201915b5050505050905090565b6000610737338484611181565b5060015b92915050565b6000546001600160a01b031633146107745760405162461bcd60e51b815260040161076b9061246e565b60405180910390fd5b6001600160a01b0382811660008181526008602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526007909252808320805486168317905592825291902080549092161790556107da82610972565b6107e381610972565b5050565b60006107f48484846112a5565b61084684336108418560405180606001604052806028815260200161261f602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906114e0565b611181565b5060019392505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610737918590610841908661151a565b3360008181526005602052604090205460ff16156108fb5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161076b565b600061090683611580565b5050506001600160a01b038616600090815260016020526040902054939450610934939250849150506115db565b6001600160a01b038316600090815260016020526040902055600d5461095a90826115db565b600d55600e5461096a908461151a565b600e55505050565b6000546001600160a01b0316331461099c5760405162461bcd60e51b815260040161076b9061246e565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6001600160a01b03811660009081526005602052604081205460ff16156109fd57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461073b9061161d565b6000546001600160a01b03163314610a495760405162461bcd60e51b815260040161076b9061246e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060601080546106a790612584565b6000546001600160a01b03163314610acc5760405162461bcd60e51b815260040161076b9061246e565b601454821115610adb57600080fd5b601854811115610aea57600080fd5b601391909155601755565b6000610737338461084185604051806060016040528060258152602001612647602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906114e0565b6000546001600160a01b03163314610b6e5760405162461bcd60e51b815260040161076b9061246e565b601d546001600160a01b0382811691161415610bc25760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b604482015260640161076b565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b60006107373384846112a5565b6000546001600160a01b03163314610c1b5760405162461bcd60e51b815260040161076b9061246e565b601454821115610c2a57600080fd5b601854811115610c3957600080fd5b601291909155601655565b6000546001600160a01b03163314610c6e5760405162461bcd60e51b815260040161076b9061246e565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610cbb90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610cf05760405162461bcd60e51b815260040161076b9061246e565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314610d3b5760405162461bcd60e51b815260040161076b9061246e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7b57600080fd5b505afa158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db391906122cb565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610dfb57600080fd5b505afa158015610e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3391906122cb565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015610e7957600080fd5b505afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb191906122cb565b90506001600160a01b03811661105757816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610efa57600080fd5b505afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3291906122cb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7a57600080fd5b505afa158015610f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb291906122cb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610ffa57600080fd5b505af115801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906122cb565b601b80546001600160a01b0319166001600160a01b0392909216919091179055611073565b601b80546001600160a01b0319166001600160a01b0383161790555b50601a80546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b031633146110c15760405162461bcd60e51b815260040161076b9061246e565b6001600160a01b0381166111265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076b565b6001600160a01b0382166112445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113095760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161076b565b6001600160a01b03821661136b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161076b565b600081116113cd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161076b565b60006113d8306109c0565b601e54601d5491925082101590600160a01b900460ff161580156114095750601b546001600160a01b038581169116145b801561141e5750601d54600160a81b900460ff165b801561144357506001600160a01b03841660009081526007602052604090205460ff16155b801561146857506001600160a01b03851660009081526007602052604090205460ff16155b1561148157801561148157601e5491506114818261169a565b6001600160a01b03851660009081526004602052604090205460019060ff16806114c357506001600160a01b03851660009081526004602052604090205460ff165b156114cc575060005b6114d886868684611741565b505050505050565b600081848411156115045760405162461bcd60e51b815260040161076b9190612419565b506000611511848661256d565b95945050505050565b6000806115278385612514565b9050838110156115795760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161076b565b9392505050565b600080600080600080600080600080600061159a8c61175e565b935093509350935060008060006115bb8f8787876115b66117a7565b6117ca565b919f509d509b509599509397509195509350505050919395979092949650565b600061157983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114e0565b6000600d548211156116845760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161076b565b600061168e6117a7565b9050611579838261182c565b601d805460ff60a01b1916600160a01b17905560006116ba82600261182c565b905060006116c883836115db565b9050476116d48361186e565b60006116e047836115db565b90506116ec83826119cf565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601d805460ff60a01b19169055505050565b61174d84848484611ab3565b611758848484611b61565b50505050565b60008060008060008061177087611e53565b9050600061177d88611e76565b905060006117978261179185818d896115db565b906115db565b9993985091965094509092505050565b60008060006117b4611e93565b90925090506117c3828261182c565b9250505090565b60008080806117d98986612015565b905060006117e78987612015565b905060006117f58988612015565b905060006118038989612015565b9050600061181782611791858189896115db565b949d949c50929a509298505050505050505050565b600061157983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612094565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106118a3576118a36125f0565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156118f757600080fd5b505afa15801561190b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192f91906122cb565b81600181518110611942576119426125f0565b6001600160a01b039283166020918202929092010152601a546119689130911684611181565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906119a19085906000908690309042906004016124a3565b600060405180830381600087803b1580156119bb57600080fd5b505af11580156114d8573d6000803e3d6000fd5b601a546119e79030906001600160a01b031684611181565b601a546001600160a01b031663f305d719823085600080611a106000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611a7357600080fd5b505af1158015611a87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611aac91906123eb565b5050505050565b80611ac75760006011819055601555611758565b601b546001600160a01b0385811691161415611aee57601254601155601654601555611758565b601b546001600160a01b0384811691161415611b51576064600c54611b13919061252c565b8210611b4057601354611b2790600261254e565b601155601754611b3890600261254e565b601555611758565b601354601155601754601555611758565b6000601181905560155550505050565b6000806000806000806000611b7588611580565b9650965096509650965096509650611bbb87600160008d6001600160a01b03166001600160a01b03168152602001908152602001600020546115db90919063ffffffff16565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054611bea908761151a565b6001600160a01b03808b16600090815260016020908152604080832094909455918d1681526005909152205460ff168015611c3e57506001600160a01b03891660009081526005602052604090205460ff16155b15611c84576001600160a01b038a16600090815260026020526040902054611c6690896115db565b6001600160a01b038b16600090815260026020526040902055611dbc565b6001600160a01b038a1660009081526005602052604090205460ff16158015611cc557506001600160a01b03891660009081526005602052604090205460ff165b15611d0b576001600160a01b038916600090815260026020526040902054611ced908561151a565b6001600160a01b038a16600090815260026020526040902055611dbc565b6001600160a01b038a1660009081526005602052604090205460ff168015611d4b57506001600160a01b03891660009081526005602052604090205460ff165b15611dbc576001600160a01b038a16600090815260026020526040902054611d7390896115db565b6001600160a01b03808c1660009081526002602052604080822093909355908b1681522054611da2908561151a565b6001600160a01b038a166000908152600260205260409020555b8115611dcc57611dcc8a836120c2565b6000851180611ddb5750600083115b15611dea57611dea858461218d565b8015611dfa57611dfa8a826121b1565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611e3f91815260200190565b60405180910390a350505050505050505050565b600061073b601954611e706011548561201590919063ffffffff16565b9061182c565b600061073b601954611e706015548561201590919063ffffffff16565b600d54600c546000918291825b600654811015611fe557826001600060068481548110611ec257611ec26125f0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611f2d5750816002600060068481548110611f0657611f066125f0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611f4357600d54600c54945094505050509091565b611f896001600060068481548110611f5d57611f5d6125f0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906115db565b9250611fd16002600060068481548110611fa557611fa56125f0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906115db565b915080611fdd816125bf565b915050611ea0565b50600c54600d54611ff59161182c565b82101561200c57600d54600c549350935050509091565b90939092509050565b6000826120245750600061073b565b6000612030838561254e565b90508261203d858361252c565b146115795760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161076b565b600081836120b55760405162461bcd60e51b815260040161076b9190612419565b506000611511848661252c565b60006120cc6117a7565b905060006120da8383612015565b306000908152600160205260409020549091506120f7908261151a565b3060009081526001602090815260408083209390935560059052205460ff16156121465730600090815260026020526040902054612135908461151a565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350505050565b600d5461219a90836115db565b600d55600e546121aa908261151a565b600e555050565b60006121bb6117a7565b905060006121c98383612015565b601d546001600160a01b03166000908152600160205260409020549091506121f1908261151a565b601d80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff161561226c57601d546001600160a01b0316600090815260026020526040902054612250908461151a565b601d546001600160a01b03166000908152600260205260409020555b601d546040518481526001600160a01b03918216918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161217f565b6000602082840312156122c057600080fd5b813561157981612606565b6000602082840312156122dd57600080fd5b815161157981612606565b600080604083850312156122fb57600080fd5b823561230681612606565b9150602083013561231681612606565b809150509250929050565b60008060006060848603121561233657600080fd5b833561234181612606565b9250602084013561235181612606565b929592945050506040919091013590565b6000806040838503121561237557600080fd5b823561238081612606565b946020939093013593505050565b6000602082840312156123a057600080fd5b8135801515811461157957600080fd5b6000602082840312156123c257600080fd5b5035919050565b600080604083850312156123dc57600080fd5b50508035926020909101359150565b60008060006060848603121561240057600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156124465785810183015185820160400152820161242a565b81811115612458576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124f35784516001600160a01b0316835293830193918301916001016124ce565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612527576125276125da565b500190565b60008261254957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612568576125686125da565b500290565b60008282101561257f5761257f6125da565b500390565b600181811c9082168061259857607f821691505b602082108114156125b957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125d3576125d36125da565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461261b57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b06672034f661b668b837e7a534e7d0b9a95e81d6ff1b28ab6d2ec82784ffc9564736f6c63430008070033f652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f
Deployed Bytecode
0x6080604052600436106102085760003560e01c8063715018a611610118578063a9059cbb116100a0578063dc44b6a01161006f578063dc44b6a0146105dc578063dd62ed3e146105f2578063ea2f0b3714610638578063eafb5a3c14610658578063f2fde38b1461067857600080fd5b8063a9059cbb14610566578063aa35822c14610586578063c49b9a80146105a6578063d628df9c146105c657600080fd5b80638da5cb5b116100e75780638da5cb5b146104d357806395d89b41146104f1578063a11a168214610506578063a457c2d714610526578063a8602fea1461054657600080fd5b8063715018a61461046f57806388790a681461048457806388f820201461049a578063893d20e8146104d357600080fd5b806324fcf8cf1161019b578063437823ec1161016a578063437823ec146103b5578063452ed4f1146103d55780634a74bb02146103f55780635342acb41461041657806370a082311461044f57600080fd5b806324fcf8cf1461033d578063313ce5671461035357806339509351146103755780633bd5d1731461039557600080fd5b806313114a9d116101d757806313114a9d146102c757806313b4a7f4146102e657806318160ddd1461030857806323b872dd1461031d57600080fd5b806306fdde03146102145780630758d9241461023f578063095ea7b31461027757806311ffeaf2146102a757600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b50610229610698565b6040516102369190612419565b60405180910390f35b34801561024b57600080fd5b50601a5461025f906001600160a01b031681565b6040516001600160a01b039091168152602001610236565b34801561028357600080fd5b50610297610292366004612362565b61072a565b6040519015158152602001610236565b3480156102b357600080fd5b50601d5461025f906001600160a01b031681565b3480156102d357600080fd5b50600e545b604051908152602001610236565b3480156102f257600080fd5b506103066103013660046122e8565b610741565b005b34801561031457600080fd5b50600c546102d8565b34801561032957600080fd5b50610297610338366004612321565b6107e7565b34801561034957600080fd5b506102d860175481565b34801561035f57600080fd5b50600a5460405160ff9091168152602001610236565b34801561038157600080fd5b50610297610390366004612362565b610850565b3480156103a157600080fd5b506103066103b03660046123b0565b610886565b3480156103c157600080fd5b506103066103d03660046122ae565b610972565b3480156103e157600080fd5b50601b5461025f906001600160a01b031681565b34801561040157600080fd5b50601d5461029790600160a81b900460ff1681565b34801561042257600080fd5b506102976104313660046122ae565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561045b57600080fd5b506102d861046a3660046122ae565b6109c0565b34801561047b57600080fd5b50610306610a1f565b34801561049057600080fd5b506102d860135481565b3480156104a657600080fd5b506102976104b53660046122ae565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156104df57600080fd5b506000546001600160a01b031661025f565b3480156104fd57600080fd5b50610229610a93565b34801561051257600080fd5b506103066105213660046123c9565b610aa2565b34801561053257600080fd5b50610297610541366004612362565b610af5565b34801561055257600080fd5b506103066105613660046122ae565b610b44565b34801561057257600080fd5b50610297610581366004612362565b610be4565b34801561059257600080fd5b506103066105a13660046123c9565b610bf1565b3480156105b257600080fd5b506103066105c136600461238e565b610c44565b3480156105d257600080fd5b506102d860165481565b3480156105e857600080fd5b506102d860125481565b3480156105fe57600080fd5b506102d861060d3660046122e8565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561064457600080fd5b506103066106533660046122ae565b610cc6565b34801561066457600080fd5b506103066106733660046122ae565b610d11565b34801561068457600080fd5b506103066106933660046122ae565b611097565b6060600f80546106a790612584565b80601f01602080910402602001604051908101604052809291908181526020018280546106d390612584565b80156107205780601f106106f557610100808354040283529160200191610720565b820191906000526020600020905b81548152906001019060200180831161070357829003601f168201915b5050505050905090565b6000610737338484611181565b5060015b92915050565b6000546001600160a01b031633146107745760405162461bcd60e51b815260040161076b9061246e565b60405180910390fd5b6001600160a01b0382811660008181526008602090815260408083208054600160ff19918216811790925595871680855282852080548816831790559484526007909252808320805486168317905592825291902080549092161790556107da82610972565b6107e381610972565b5050565b60006107f48484846112a5565b61084684336108418560405180606001604052806028815260200161261f602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906114e0565b611181565b5060019392505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610737918590610841908661151a565b3360008181526005602052604090205460ff16156108fb5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161076b565b600061090683611580565b5050506001600160a01b038616600090815260016020526040902054939450610934939250849150506115db565b6001600160a01b038316600090815260016020526040902055600d5461095a90826115db565b600d55600e5461096a908461151a565b600e55505050565b6000546001600160a01b0316331461099c5760405162461bcd60e51b815260040161076b9061246e565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6001600160a01b03811660009081526005602052604081205460ff16156109fd57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461073b9061161d565b6000546001600160a01b03163314610a495760405162461bcd60e51b815260040161076b9061246e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060601080546106a790612584565b6000546001600160a01b03163314610acc5760405162461bcd60e51b815260040161076b9061246e565b601454821115610adb57600080fd5b601854811115610aea57600080fd5b601391909155601755565b6000610737338461084185604051806060016040528060258152602001612647602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906114e0565b6000546001600160a01b03163314610b6e5760405162461bcd60e51b815260040161076b9061246e565b601d546001600160a01b0382811691161415610bc25760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b604482015260640161076b565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b60006107373384846112a5565b6000546001600160a01b03163314610c1b5760405162461bcd60e51b815260040161076b9061246e565b601454821115610c2a57600080fd5b601854811115610c3957600080fd5b601291909155601655565b6000546001600160a01b03163314610c6e5760405162461bcd60e51b815260040161076b9061246e565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610cbb90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610cf05760405162461bcd60e51b815260040161076b9061246e565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314610d3b5760405162461bcd60e51b815260040161076b9061246e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7b57600080fd5b505afa158015610d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db391906122cb565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610dfb57600080fd5b505afa158015610e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3391906122cb565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015610e7957600080fd5b505afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb191906122cb565b90506001600160a01b03811661105757816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610efa57600080fd5b505afa158015610f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3291906122cb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7a57600080fd5b505afa158015610f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb291906122cb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610ffa57600080fd5b505af115801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906122cb565b601b80546001600160a01b0319166001600160a01b0392909216919091179055611073565b601b80546001600160a01b0319166001600160a01b0383161790555b50601a80546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b031633146110c15760405162461bcd60e51b815260040161076b9061246e565b6001600160a01b0381166111265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076b565b6001600160a01b0382166112445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113095760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161076b565b6001600160a01b03821661136b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161076b565b600081116113cd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161076b565b60006113d8306109c0565b601e54601d5491925082101590600160a01b900460ff161580156114095750601b546001600160a01b038581169116145b801561141e5750601d54600160a81b900460ff165b801561144357506001600160a01b03841660009081526007602052604090205460ff16155b801561146857506001600160a01b03851660009081526007602052604090205460ff16155b1561148157801561148157601e5491506114818261169a565b6001600160a01b03851660009081526004602052604090205460019060ff16806114c357506001600160a01b03851660009081526004602052604090205460ff165b156114cc575060005b6114d886868684611741565b505050505050565b600081848411156115045760405162461bcd60e51b815260040161076b9190612419565b506000611511848661256d565b95945050505050565b6000806115278385612514565b9050838110156115795760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161076b565b9392505050565b600080600080600080600080600080600061159a8c61175e565b935093509350935060008060006115bb8f8787876115b66117a7565b6117ca565b919f509d509b509599509397509195509350505050919395979092949650565b600061157983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114e0565b6000600d548211156116845760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161076b565b600061168e6117a7565b9050611579838261182c565b601d805460ff60a01b1916600160a01b17905560006116ba82600261182c565b905060006116c883836115db565b9050476116d48361186e565b60006116e047836115db565b90506116ec83826119cf565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601d805460ff60a01b19169055505050565b61174d84848484611ab3565b611758848484611b61565b50505050565b60008060008060008061177087611e53565b9050600061177d88611e76565b905060006117978261179185818d896115db565b906115db565b9993985091965094509092505050565b60008060006117b4611e93565b90925090506117c3828261182c565b9250505090565b60008080806117d98986612015565b905060006117e78987612015565b905060006117f58988612015565b905060006118038989612015565b9050600061181782611791858189896115db565b949d949c50929a509298505050505050505050565b600061157983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612094565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106118a3576118a36125f0565b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156118f757600080fd5b505afa15801561190b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192f91906122cb565b81600181518110611942576119426125f0565b6001600160a01b039283166020918202929092010152601a546119689130911684611181565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac947906119a19085906000908690309042906004016124a3565b600060405180830381600087803b1580156119bb57600080fd5b505af11580156114d8573d6000803e3d6000fd5b601a546119e79030906001600160a01b031684611181565b601a546001600160a01b031663f305d719823085600080611a106000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611a7357600080fd5b505af1158015611a87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611aac91906123eb565b5050505050565b80611ac75760006011819055601555611758565b601b546001600160a01b0385811691161415611aee57601254601155601654601555611758565b601b546001600160a01b0384811691161415611b51576064600c54611b13919061252c565b8210611b4057601354611b2790600261254e565b601155601754611b3890600261254e565b601555611758565b601354601155601754601555611758565b6000601181905560155550505050565b6000806000806000806000611b7588611580565b9650965096509650965096509650611bbb87600160008d6001600160a01b03166001600160a01b03168152602001908152602001600020546115db90919063ffffffff16565b6001600160a01b03808c1660009081526001602052604080822093909355908b1681522054611bea908761151a565b6001600160a01b03808b16600090815260016020908152604080832094909455918d1681526005909152205460ff168015611c3e57506001600160a01b03891660009081526005602052604090205460ff16155b15611c84576001600160a01b038a16600090815260026020526040902054611c6690896115db565b6001600160a01b038b16600090815260026020526040902055611dbc565b6001600160a01b038a1660009081526005602052604090205460ff16158015611cc557506001600160a01b03891660009081526005602052604090205460ff165b15611d0b576001600160a01b038916600090815260026020526040902054611ced908561151a565b6001600160a01b038a16600090815260026020526040902055611dbc565b6001600160a01b038a1660009081526005602052604090205460ff168015611d4b57506001600160a01b03891660009081526005602052604090205460ff165b15611dbc576001600160a01b038a16600090815260026020526040902054611d7390896115db565b6001600160a01b03808c1660009081526002602052604080822093909355908b1681522054611da2908561151a565b6001600160a01b038a166000908152600260205260409020555b8115611dcc57611dcc8a836120c2565b6000851180611ddb5750600083115b15611dea57611dea858461218d565b8015611dfa57611dfa8a826121b1565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611e3f91815260200190565b60405180910390a350505050505050505050565b600061073b601954611e706011548561201590919063ffffffff16565b9061182c565b600061073b601954611e706015548561201590919063ffffffff16565b600d54600c546000918291825b600654811015611fe557826001600060068481548110611ec257611ec26125f0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611f2d5750816002600060068481548110611f0657611f066125f0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611f4357600d54600c54945094505050509091565b611f896001600060068481548110611f5d57611f5d6125f0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906115db565b9250611fd16002600060068481548110611fa557611fa56125f0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906115db565b915080611fdd816125bf565b915050611ea0565b50600c54600d54611ff59161182c565b82101561200c57600d54600c549350935050509091565b90939092509050565b6000826120245750600061073b565b6000612030838561254e565b90508261203d858361252c565b146115795760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161076b565b600081836120b55760405162461bcd60e51b815260040161076b9190612419565b506000611511848661252c565b60006120cc6117a7565b905060006120da8383612015565b306000908152600160205260409020549091506120f7908261151a565b3060009081526001602090815260408083209390935560059052205460ff16156121465730600090815260026020526040902054612135908461151a565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350505050565b600d5461219a90836115db565b600d55600e546121aa908261151a565b600e555050565b60006121bb6117a7565b905060006121c98383612015565b601d546001600160a01b03166000908152600160205260409020549091506121f1908261151a565b601d80546001600160a01b03908116600090815260016020908152604080832095909555925490911681526005909152205460ff161561226c57601d546001600160a01b0316600090815260026020526040902054612250908461151a565b601d546001600160a01b03166000908152600260205260409020555b601d546040518481526001600160a01b03918216918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161217f565b6000602082840312156122c057600080fd5b813561157981612606565b6000602082840312156122dd57600080fd5b815161157981612606565b600080604083850312156122fb57600080fd5b823561230681612606565b9150602083013561231681612606565b809150509250929050565b60008060006060848603121561233657600080fd5b833561234181612606565b9250602084013561235181612606565b929592945050506040919091013590565b6000806040838503121561237557600080fd5b823561238081612606565b946020939093013593505050565b6000602082840312156123a057600080fd5b8135801515811461157957600080fd5b6000602082840312156123c257600080fd5b5035919050565b600080604083850312156123dc57600080fd5b50508035926020909101359150565b60008060006060848603121561240057600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156124465785810183015185820160400152820161242a565b81811115612458576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124f35784516001600160a01b0316835293830193918301916001016124ce565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612527576125276125da565b500190565b60008261254957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612568576125686125da565b500290565b60008282101561257f5761257f6125da565b500390565b600181811c9082168061259857607f821691505b602082108114156125b957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125d3576125d36125da565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461261b57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b06672034f661b668b837e7a534e7d0b9a95e81d6ff1b28ab6d2ec82784ffc9564736f6c63430008070033
Deployed Bytecode Sourcemap
20717:18640:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24320:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22196:35;;;;;;;;;;-1:-1:-1;22196:35:0;;;;-1:-1:-1;;;;;22196:35:0;;;;;;-1:-1:-1;;;;;2887:32:1;;;2869:51;;2857:2;2842:18;22196:35:0;2723:203:1;25014:161:0;;;;;;;;;;-1:-1:-1;25014:161:0;;;;;:::i;:::-;;:::i;:::-;;;4017:14:1;;4010:22;3992:41;;3980:2;3965:18;25014:161:0;3852:187:1;22430:75:0;;;;;;;;;;-1:-1:-1;22430:75:0;;;;-1:-1:-1;;;;;22430:75:0;;;28113:87;;;;;;;;;;-1:-1:-1;28182:10:0;;28113:87;;;9753:25:1;;;9741:2;9726:18;28113:87:0;9607:177:1;28208:332:0;;;;;;;;;;-1:-1:-1;28208:332:0;;;;;:::i;:::-;;:::i;:::-;;24055:83;;;;;;;;;;-1:-1:-1;24128:7:0;;24055:83;;25183:313;;;;;;;;;;-1:-1:-1;25183:313:0;;;;;:::i;:::-;;:::i;22012:35::-;;;;;;;;;;;;;;;;24144:80;;;;;;;;;;-1:-1:-1;24212:9:0;;24144:80;;24212:9;;;;11240:36:1;;11228:2;11213:18;24144:80:0;11098:184:1;25504:218:0;;;;;;;;;;-1:-1:-1;25504:218:0;;;;;:::i;:::-;;:::i;28814:378::-;;;;;;;;;;-1:-1:-1;28814:378:0;;;;;:::i;:::-;;:::i;27870:111::-;;;;;;;;;;-1:-1:-1;27870:111:0;;;;;:::i;:::-;;:::i;22238:21::-;;;;;;;;;;-1:-1:-1;22238:21:0;;;;-1:-1:-1;;;;;22238:21:0;;;22546:40;;;;;;;;;;-1:-1:-1;22546:40:0;;;;-1:-1:-1;;;22546:40:0;;;;;;26644:123;;;;;;;;;;-1:-1:-1;26644:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;26732:27:0;26708:4;26732:27;;;:18;:27;;;;;;;;;26644:123;24633:198;;;;;;;;;;-1:-1:-1;24633:198:0;;;;;:::i;:::-;;:::i;20296:148::-;;;;;;;;;;;;;:::i;21826:36::-;;;;;;;;;;;;;;;;26516:120;;;;;;;;;;-1:-1:-1;26516:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;26608:20:0;26584:4;26608:20;;;:11;:20;;;;;;;;;26516:120;24406:80;;;;;;;;;;-1:-1:-1;24458:7:0;20147:6;-1:-1:-1;;;;;20147:6:0;24406:80;;24230:84;;;;;;;;;;;;;:::i;27141:353::-;;;;;;;;;;-1:-1:-1;27141:353:0;;;;;:::i;:::-;;:::i;25730:269::-;;;;;;;;;;-1:-1:-1;25730:269:0;;;;;:::i;:::-;;:::i;27502:181::-;;;;;;;;;;-1:-1:-1;27502:181:0;;;;;:::i;:::-;;:::i;24839:167::-;;;;;;;;;;-1:-1:-1;24839:167:0;;;;;:::i;:::-;;:::i;26779:350::-;;;;;;;;;;-1:-1:-1;26779:350:0;;;;;:::i;:::-;;:::i;27691:171::-;;;;;;;;;;-1:-1:-1;27691:171:0;;;;;:::i;:::-;;:::i;21971:34::-;;;;;;;;;;;;;;;;21784:35;;;;;;;;;;;;;;;;24492:133;;;;;;;;;;-1:-1:-1;24492:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;24594:19:0;;;24576:7;24594:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;24492:133;27993:112;;;;;;;;;;-1:-1:-1;27993:112:0;;;;;:::i;:::-;;:::i;26007:501::-;;;;;;;;;;-1:-1:-1;26007:501:0;;;;;:::i;:::-;;:::i;20452:254::-;;;;;;;;;;-1:-1:-1;20452:254:0;;;;;:::i;:::-;;:::i;24320:80::-;24368:13;24392:5;24385:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24320:80;:::o;25014:161::-;25089:4;25106:39;260:10;25129:7;25138:6;25106:8;:39::i;:::-;-1:-1:-1;25163:4:0;25014:161;;;;;:::o;28208:332::-;20209:6;;-1:-1:-1;;;;;20209:6:0;260:10;20209:22;20201:67;;;;-1:-1:-1;;;20201:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;28304:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;28332:4:::1;-1:-1:-1::0;;28304:32:0;;::::1;::::0;::::1;::::0;;;28347:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;28391:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;28433:25;;;;;;:32;;;;::::1;;::::0;;28476:22:::1;28304:25:::0;28476:14:::1;:22::i;:::-;28509:23;28524:7;28509:14;:23::i;:::-;28208:332:::0;;:::o;25183:313::-;25281:4;25298:36;25308:6;25316:9;25327:6;25298:9;:36::i;:::-;25345:121;25354:6;260:10;25376:89;25414:6;25376:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25376:19:0;;;;;;:11;:19;;;;;;;;260:10;25376:33;;;;;;;;;;:37;:89::i;:::-;25345:8;:121::i;:::-;-1:-1:-1;25484:4:0;25183:313;;;;;:::o;25504:218::-;260:10;25592:4;25641:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25641:34:0;;;;;;;;;;25592:4;;25609:83;;25632:7;;25641:50;;25680:10;25641:38;:50::i;28814:378::-;260:10;28866:14;28915:19;;;:11;:19;;;;;;;;28914:20;28906:77;;;;-1:-1:-1;;;28906:77:0;;9396:2:1;28906:77:0;;;9378:21:1;9435:2;9415:18;;;9408:30;9474:34;9454:18;;;9447:62;-1:-1:-1;;;9525:18:1;;;9518:42;9577:19;;28906:77:0;9194:408:1;28906:77:0;28995:15;29020:19;29031:7;29020:10;:19::i;:::-;-1:-1:-1;;;;;;;;29068:15:0;;;;;;:7;:15;;;;;;28994:45;;-1:-1:-1;29068:28:0;;:15;-1:-1:-1;28994:45:0;;-1:-1:-1;;29068:19:0;:28::i;:::-;-1:-1:-1;;;;;29050:15:0;;;;;;:7;:15;;;;;:46;29117:7;;:20;;29129:7;29117:11;:20::i;:::-;29107:7;:30;29161:10;;:23;;29176:7;29161:14;:23::i;:::-;29148:10;:36;-1:-1:-1;;;28814:378:0:o;27870:111::-;20209:6;;-1:-1:-1;;;;;20209:6:0;260:10;20209:22;20201:67;;;;-1:-1:-1;;;20201:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27939:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;27939:34:0::1;27969:4;27939:34;::::0;;27870:111::o;24633:198::-;-1:-1:-1;;;;;24723:20:0;;24699:7;24723:20;;;:11;:20;;;;;;;;24719:49;;;-1:-1:-1;;;;;;24752:16:0;;;;;:7;:16;;;;;;;24633:198::o;24719:49::-;-1:-1:-1;;;;;24806:16:0;;;;;;:7;:16;;;;;;24786:37;;:19;:37::i;20296:148::-;20209:6;;-1:-1:-1;;;;;20209:6:0;260:10;20209:22;20201:67;;;;-1:-1:-1;;;20201:67:0;;;;;;;:::i;:::-;20403:1:::1;20387:6:::0;;20366:40:::1;::::0;-1:-1:-1;;;;;20387:6:0;;::::1;::::0;20366:40:::1;::::0;20403:1;;20366:40:::1;20434:1;20417:19:::0;;-1:-1:-1;;;;;;20417:19:0::1;::::0;;20296:148::o;24230:84::-;24280:13;24304:7;24297:14;;;;;:::i;27141:353::-;20209:6;;-1:-1:-1;;;;;20209:6:0;260:10;20209:22;20201:67;;;;-1:-1:-1;;;20201:67:0;;;;;;;:::i;:::-;27263:15:::1;;27247:12;:31;;27239:40;;;::::0;::::1;;27350:14;;27335:11;:29;;27327:38;;;::::0;::::1;;27413:17;:32:::0;;;;27456:16:::1;:30:::0;27141:353::o;25730:269::-;25823:4;25840:129;260:10;25863:7;25872:96;25911:15;25872:96;;;;;;;;;;;;;;;;;260:10;25872:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25872:34:0;;;;;;;;;;;;:38;:96::i;27502:181::-;20209:6;;-1:-1:-1;;;;;20209:6:0;260:10;20209:22;20201:67;;;;-1:-1:-1;;;20201:67:0;;;;;;;:::i;:::-;27587:14:::1;::::0;-1:-1:-1;;;;;27587:27:0;;::::1;:14:::0;::::1;:27;;27579:59;;;::::0;-1:-1:-1;;;27579:59:0;;7064:2:1;27579:59:0::1;::::0;::::1;7046:21:1::0;7103:2;7083:18;;;7076:30;-1:-1:-1;;;7122:18:1;;;7115:49;7181:18;;27579:59:0::1;6862:343:1::0;27579:59:0::1;27649:14;:26:::0;;-1:-1:-1;;;;;;27649:26:0::1;-1:-1:-1::0;;;;;27649:26:0;;;::::1;::::0;;;::::1;::::0;;27502:181::o;24839:167::-;24917:4;24934:42;260:10;24958:9;24969:6;24934:9;:42::i;26779:350::-;20209:6;;-1:-1:-1;;;;;20209:6:0;260:10;20209:22;20201:67;;;;-1:-1:-1;;;20201:67:0;;;;;;;:::i;:::-;26900:15:::1;;26884:12;:31;;26876:40;;;::::0;::::1;;26987:14;;26972:11;:29;;26964:38;;;::::0;::::1;;27050:16;:31:::0;;;;27092:15:::1;:29:::0;26779:350::o;27691:171::-;20209:6;;-1:-1:-1;;;;;20209:6:0;260:10;20209:22;20201:67;;;;-1:-1:-1;;;20201:67:0;;;;;;;:::i;:::-;27768:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;27768:32:0::1;-1:-1:-1::0;;;;27768:32:0;;::::1;;::::0;;27816:38:::1;::::0;::::1;::::0;::::1;::::0;27792:8;4017:14:1;4010:22;3992:41;;3980:2;3965:18;;3852:187;27816:38:0::1;;;;;;;;27691:171:::0;:::o;27993:112::-;20209:6;;-1:-1:-1;;;;;20209:6:0;260:10;20209:22;20201:67;;;;-1:-1:-1;;;20201:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28062:27:0::1;28092:5;28062:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;28062:35:0::1;::::0;;27993:112::o;26007:501::-;20209:6;;-1:-1:-1;;;;;20209:6:0;260:10;20209:22;20201:67;;;;-1:-1:-1;;;20201:67:0;;;;;;;:::i;:::-;26078:29:::1;26129:9;26078:61;;26150:16;26187:10;-1:-1:-1::0;;;;;26187:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26169:47:0::1;;26225:4;26232:10;-1:-1:-1::0;;;;;26232:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26169:81;::::0;-1:-1:-1;;;;;;26169:81:0::1;::::0;;;;;;-1:-1:-1;;;;;3161:15:1;;;26169:81:0::1;::::0;::::1;3143:34:1::0;3213:15;;3193:18;;;3186:43;3078:18;;26169:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26150:100:::0;-1:-1:-1;;;;;;26265:22:0;::::1;26261:207;;26331:10;-1:-1:-1::0;;;;;26331:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26313:50:0::1;;26372:4;26379:10;-1:-1:-1::0;;;;;26379:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26313:84;::::0;-1:-1:-1;;;;;;26313:84:0::1;::::0;;;;;;-1:-1:-1;;;;;3161:15:1;;;26313:84:0::1;::::0;::::1;3143:34:1::0;3213:15;;3193:18;;;3186:43;3078:18;;26313:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26304:6;:93:::0;;-1:-1:-1;;;;;;26304:93:0::1;-1:-1:-1::0;;;;;26304:93:0;;;::::1;::::0;;;::::1;::::0;;26261:207:::1;;;26439:6;:17:::0;;-1:-1:-1;;;;;;26439:17:0::1;-1:-1:-1::0;;;;;26439:17:0;::::1;;::::0;;26261:207:::1;-1:-1:-1::0;26478:9:0::1;:22:::0;;-1:-1:-1;;;;;;26478:22:0::1;-1:-1:-1::0;;;;;26478:22:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;26007:501:0:o;20452:254::-;20209:6;;-1:-1:-1;;;;;20209:6:0;260:10;20209:22;20201:67;;;;-1:-1:-1;;;20201:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20541:22:0;::::1;20533:73;;;::::0;-1:-1:-1;;;20533:73:0;;5898:2:1;20533:73:0::1;::::0;::::1;5880:21:1::0;5937:2;5917:18;;;5910:30;5976:34;5956:18;;;5949:62;-1:-1:-1;;;6027:18:1;;;6020:36;6073:19;;20533:73:0::1;5696:402:1::0;20533:73:0::1;20653:6;::::0;;20632:38:::1;::::0;-1:-1:-1;;;;;20632:38:0;;::::1;::::0;20653:6;::::1;::::0;20632:38:::1;::::0;::::1;20681:6;:17:::0;;-1:-1:-1;;;;;;20681:17:0::1;-1:-1:-1::0;;;;;20681:17:0;;;::::1;::::0;;;::::1;::::0;;20452:254::o;30003:337::-;-1:-1:-1;;;;;30096:19:0;;30088:68;;;;-1:-1:-1;;;30088:68:0;;8991:2:1;30088:68:0;;;8973:21:1;9030:2;9010:18;;;9003:30;9069:34;9049:18;;;9042:62;-1:-1:-1;;;9120:18:1;;;9113:34;9164:19;;30088:68:0;8789:400:1;30088:68:0;-1:-1:-1;;;;;30175:21:0;;30167:68;;;;-1:-1:-1;;;30167:68:0;;6305:2:1;30167:68:0;;;6287:21:1;6344:2;6324:18;;;6317:30;6383:34;6363:18;;;6356:62;-1:-1:-1;;;6434:18:1;;;6427:32;6476:19;;30167:68:0;6103:398:1;30167:68:0;-1:-1:-1;;;;;30248:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30300:32;;9753:25:1;;;30300:32:0;;9726:18:1;30300:32:0;;;;;;;30003:337;;;:::o;30348:1091::-;-1:-1:-1;;;;;30446:18:0;;30438:68;;;;-1:-1:-1;;;30438:68:0;;8585:2:1;30438:68:0;;;8567:21:1;8624:2;8604:18;;;8597:30;8663:34;8643:18;;;8636:62;-1:-1:-1;;;8714:18:1;;;8707:35;8759:19;;30438:68:0;8383:401:1;30438:68:0;-1:-1:-1;;;;;30525:16:0;;30517:64;;;;-1:-1:-1;;;30517:64:0;;5083:2:1;30517:64:0;;;5065:21:1;5122:2;5102:18;;;5095:30;5161:34;5141:18;;;5134:62;-1:-1:-1;;;5212:18:1;;;5205:33;5255:19;;30517:64:0;4881:399:1;30517:64:0;30609:1;30600:6;:10;30592:64;;;;-1:-1:-1;;;30592:64:0;;8175:2:1;30592:64:0;;;8157:21:1;8214:2;8194:18;;;8187:30;8253:34;8233:18;;;8226:62;-1:-1:-1;;;8304:18:1;;;8297:39;8353:19;;30592:64:0;7973:405:1;30592:64:0;30669:28;30700:24;30718:4;30700:9;:24::i;:::-;30804:29;;30851:16;;30669:55;;-1:-1:-1;30780:53:0;;;;-1:-1:-1;;;30851:16:0;;;;30850:17;:46;;;;-1:-1:-1;30890:6:0;;-1:-1:-1;;;;;30884:12:0;;;30890:6;;30884:12;30850:46;:84;;;;-1:-1:-1;30913:21:0;;-1:-1:-1;;;30913:21:0;;;;30850:84;:122;;;;-1:-1:-1;;;;;;30952:20:0;;;;;;:16;:20;;;;;;;;30951:21;30850:122;:162;;;;-1:-1:-1;;;;;;30990:22:0;;;;;;:16;:22;;;;;;;;30989:23;30850:162;30846:371;;;31043:19;31039:167;;;31106:29;;31083:52;;31154:36;31169:20;31154:14;:36::i;:::-;-1:-1:-1;;;;;31280:24:0;;31237:12;31280:24;;;:18;:24;;;;;;31252:4;;31280:24;;;:50;;-1:-1:-1;;;;;;31308:22:0;;;;;;:18;:22;;;;;;;;31280:50;31277:96;;;-1:-1:-1;31356:5:0;31277:96;31393:38;31408:4;31413:2;31416:6;31423:7;31393:14;:38::i;:::-;30417:1022;;;30348:1091;;;:::o;5278:192::-;5364:7;5400:12;5392:6;;;;5384:29;;;;-1:-1:-1;;;5384:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5424:9:0;5436:5;5440:1;5436;:5;:::i;:::-;5424:17;5278:192;-1:-1:-1;;;;;5278:192:0:o;4320:181::-;4378:7;;4410:5;4414:1;4410;:5;:::i;:::-;4398:17;;4439:1;4434;:6;;4426:46;;;;-1:-1:-1;;;4426:46:0;;6708:2:1;4426:46:0;;;6690:21:1;6747:2;6727:18;;;6720:30;6786:29;6766:18;;;6759:57;6833:18;;4426:46:0;6506:351:1;4426:46:0;4492:1;4320:181;-1:-1:-1;;;4320:181:0:o;35023:469::-;35082:7;35091;35100;35109;35118;35127;35136;35157:23;35182:12;35196:18;35216:17;35237:20;35249:7;35237:11;:20::i;:::-;35156:101;;;;;;;;35269:15;35286:23;35311:12;35327:61;35339:7;35348:4;35354:10;35366:9;35377:10;:8;:10::i;:::-;35327:11;:61::i;:::-;35268:120;;-1:-1:-1;35268:120:0;-1:-1:-1;35268:120:0;-1:-1:-1;35439:15:0;;-1:-1:-1;35456:4:0;;-1:-1:-1;35462:10:0;;-1:-1:-1;35474:9:0;-1:-1:-1;;;;35023:469:0;;;;;;;;;:::o;4839:136::-;4897:7;4924:43;4928:1;4931;4924:43;;;;;;;;;;;;;;;;;:3;:43::i;29647:254::-;29714:7;29753;;29742;:18;;29734:73;;;;-1:-1:-1;;;29734:73:0;;5487:2:1;29734:73:0;;;5469:21:1;5526:2;5506:18;;;5499:30;5565:34;5545:18;;;5538:62;-1:-1:-1;;;5616:18:1;;;5609:40;5666:19;;29734:73:0;5285:406:1;29734:73:0;29818:19;29841:10;:8;:10::i;:::-;29818:33;-1:-1:-1;29869:24:0;:7;29818:33;29869:11;:24::i;31447:985::-;22975:16;:23;;-1:-1:-1;;;;22975:23:0;-1:-1:-1;;;22975:23:0;;;;31598:27:::1;:20:::0;31623:1:::1;31598:24;:27::i;:::-;31583:42:::0;-1:-1:-1;31636:17:0::1;31656:30;:20:::0;31583:42;31656:24:::1;:30::i;:::-;31636:50:::0;-1:-1:-1;31989:21:0::1;32055:22;32072:4:::0;32055:16:::1;:22::i;:::-;32208:18;32229:41;:21;32255:14:::0;32229:25:::1;:41::i;:::-;32208:62;;32320:35;32333:9;32344:10;32320:12;:35::i;:::-;32381:43;::::0;;10976:25:1;;;11032:2;11017:18;;11010:34;;;11060:18;;;11053:34;;;32381:43:0::1;::::0;10964:2:1;10949:18;32381:43:0::1;;;;;;;-1:-1:-1::0;;23021:16:0;:24;;-1:-1:-1;;;;23021:24:0;;;-1:-1:-1;;;31447:985:0:o;33603:232::-;33721:47;33733:6;33741:9;33752:6;33760:7;33721:11;:47::i;:::-;33781:44;33799:6;33807:9;33818:6;33781:17;:44::i;:::-;33603:232;;;;:::o;35500:402::-;35560:7;35569;35578;35587;35607:12;35634:18;35655:30;35677:7;35655:21;:30::i;:::-;35634:51;;35696:17;35716:29;35737:7;35716:20;:29::i;:::-;35696:49;-1:-1:-1;35756:23:0;35782:48;35696:49;35782:33;35804:10;35782:33;:7;35794:4;35782:11;:17::i;:::-;:21;;:33::i;:48::-;35756:74;35866:4;;-1:-1:-1;35872:10:0;;-1:-1:-1;35872:10:0;-1:-1:-1;35500:402:0;;-1:-1:-1;;;35500:402:0:o;36438:163::-;36479:7;36500:15;36517;36536:19;:17;:19::i;:::-;36499:56;;-1:-1:-1;36499:56:0;-1:-1:-1;36573:20:0;36499:56;;36573:11;:20::i;:::-;36566:27;;;;36438:163;:::o;35910:520::-;36044:7;;;;36100:24;:7;36112:11;36100;:24::i;:::-;36082:42;-1:-1:-1;36135:12:0;36150:21;:4;36159:11;36150:8;:21::i;:::-;36135:36;-1:-1:-1;36182:18:0;36203:27;:10;36218:11;36203:14;:27::i;:::-;36182:48;-1:-1:-1;36241:17:0;36261:26;:9;36275:11;36261:13;:26::i;:::-;36241:46;-1:-1:-1;36298:23:0;36324:48;36241:46;36324:33;36346:10;36324:33;:7;36336:4;36324:11;:17::i;:48::-;36391:7;;;;-1:-1:-1;36417:4:0;;-1:-1:-1;35910:520:0;;-1:-1:-1;;;;;;;;;35910:520:0:o;6695:132::-;6753:7;6780:39;6784:1;6787;6780:39;;;;;;;;;;;;;;;;;:3;:39::i;32440:573::-;32592:16;;;32606:1;32592:16;;;;;;;;32568:21;;32592:16;;;;;;;;;;-1:-1:-1;32592:16:0;32568:40;;32637:4;32619;32624:1;32619:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32619:23:0;;;:7;;;;;;;;;;:23;;;;32663:9;;:16;;;-1:-1:-1;;;32663:16:0;;;;:9;;;;;:14;;:16;;;;;32619:7;;32663:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32653:4;32658:1;32653:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32653:26:0;;;:7;;;;;;;;;:26;32724:9;;32692:56;;32709:4;;32724:9;32736:11;32692:8;:56::i;:::-;32787:9;;:218;;-1:-1:-1;;;32787:218:0;;-1:-1:-1;;;;;32787:9:0;;;;:60;;:218;;32862:11;;32787:9;;32932:4;;32959;;32979:15;;32787:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33021:501;33201:9;;33169:56;;33186:4;;-1:-1:-1;;;;;33201:9:0;33213:11;33169:8;:56::i;:::-;33268:9;;-1:-1:-1;;;;;33268:9:0;:25;33301:9;33334:4;33354:11;33268:9;;33466:7;20120;20147:6;-1:-1:-1;;;;;20147:6:0;;20082:79;33466:7;33268:246;;;;;;-1:-1:-1;;;;;;33268:246:0;;;-1:-1:-1;;;;;3599:15:1;;;33268:246:0;;;3581:34:1;3631:18;;;3624:34;;;;3674:18;;;3667:34;;;;3717:18;;;3710:34;3781:15;;;3760:19;;;3753:44;33488:15:0;3813:19:1;;;3806:35;3515:19;;33268:246:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33021:501;;:::o;38619:735::-;38721:7;38716:631;;38761:1;38745:13;:17;;;38777:12;:16;38716:631;;;38823:6;;-1:-1:-1;;;;;38815:14:0;;;38823:6;;38815:14;38811:536;;;38862:16;;38846:13;:32;38908:15;;38893:12;:30;38811:536;;;38951:6;;-1:-1:-1;;;;;38945:12:0;;;38951:6;;38945:12;38941:406;;;38999:3;38989:7;;:13;;;;:::i;:::-;38978:6;:25;38974:281;;39040:17;;:21;;39060:1;39040:21;:::i;:::-;39024:13;:37;39095:16;;:20;;39114:1;39095:20;:::i;:::-;39080:12;:35;38941:406;;38974:281;39172:17;;39156:13;:33;39223:16;;39208:12;:31;38941:406;;;39303:1;39287:13;:17;;;39319:12;:16;38619:735;;;;:::o;33843:1172::-;33942:15;33959:23;33984:12;33998:23;34023:12;34037:18;34057:17;34078:19;34089:7;34078:10;:19::i;:::-;33941:156;;;;;;;;;;;;;;34128:28;34148:7;34128;:15;34136:6;-1:-1:-1;;;;;34128:15:0;-1:-1:-1;;;;;34128:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;34110:15:0;;;;;;;:7;:15;;;;;;:46;;;;34188:18;;;;;;;:39;;34211:15;34188:22;:39::i;:::-;-1:-1:-1;;;;;34167:18:0;;;;;;;:7;:18;;;;;;;;:60;;;;34244:19;;;;;:11;:19;;;;;;;:46;;;;-1:-1:-1;;;;;;34268:22:0;;;;;;:11;:22;;;;;;;;34267:23;34244:46;34240:477;;;-1:-1:-1;;;;;34325:15:0;;;;;;:7;:15;;;;;;:28;;34345:7;34325:19;:28::i;:::-;-1:-1:-1;;;;;34307:15:0;;;;;;:7;:15;;;;;:46;34240:477;;;-1:-1:-1;;;;;34376:19:0;;;;;;:11;:19;;;;;;;;34375:20;:46;;;;-1:-1:-1;;;;;;34399:22:0;;;;;;:11;:22;;;;;;;;34375:46;34371:346;;;-1:-1:-1;;;;;34459:18:0;;;;;;:7;:18;;;;;;:39;;34482:15;34459:22;:39::i;:::-;-1:-1:-1;;;;;34438:18:0;;;;;;:7;:18;;;;;:60;34371:346;;;-1:-1:-1;;;;;34522:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;34545:22:0;;;;;;:11;:22;;;;;;;;34522:45;34518:199;;;-1:-1:-1;;;;;34602:15:0;;;;;;:7;:15;;;;;;:28;;34622:7;34602:19;:28::i;:::-;-1:-1:-1;;;;;34584:15:0;;;;;;;:7;:15;;;;;;:46;;;;34666:18;;;;;;;:39;;34689:15;34666:22;:39::i;:::-;-1:-1:-1;;;;;34645:18:0;;;;;;:7;:18;;;;;:60;34518:199;34733:14;;34729:67;;34762:34;34777:6;34785:10;34762:14;:34::i;:::-;34818:1;34811:4;:8;:20;;;;34830:1;34823:4;:8;34811:20;34807:63;;;34846:24;34859:4;34865;34846:12;:24::i;:::-;34885:13;;34881:64;;34913:32;34927:6;34935:9;34913:13;:32::i;:::-;34980:9;-1:-1:-1;;;;;34963:44:0;34972:6;-1:-1:-1;;;;;34963:44:0;;34991:15;34963:44;;;;9753:25:1;;9741:2;9726:18;;9607:177;34963:44:0;;;;;;;;33930:1085;;;;;;;33843:1172;;;:::o;38295:153::-;38365:7;38392:48;38423:16;;38392:26;38404:13;;38392:7;:11;;:26;;;;:::i;:::-;:30;;:48::i;38456:151::-;38525:7;38552:47;38582:16;;38552:25;38564:12;;38552:7;:11;;:25;;;;:::i;36609:561::-;36706:7;;36742;;36659;;;;;36766:289;36790:9;:16;36786:20;;36766:289;;;36856:7;36832;:21;36840:9;36850:1;36840:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;36840:12:0;36832:21;;;;;;;;;;;;;:31;;:66;;;36891:7;36867;:21;36875:9;36885:1;36875:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;36875:12:0;36867:21;;;;;;;;;;;;;:31;36832:66;36828:97;;;36908:7;;36917;;36900:25;;;;;;;36609:561;;:::o;36828:97::-;36950:34;36962:7;:21;36970:9;36980:1;36970:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;36970:12:0;36962:21;;;;;;;;;;;;;36950:7;;:11;:34::i;:::-;36940:44;;37009:34;37021:7;:21;37029:9;37039:1;37029:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37029:12:0;37021:21;;;;;;;;;;;;;37009:7;;:11;:34::i;:::-;36999:44;-1:-1:-1;36808:3:0;;;;:::i;:::-;;;;36766:289;;;-1:-1:-1;37091:7:0;;37079;;:20;;:11;:20::i;:::-;37069:7;:30;37065:61;;;37109:7;;37118;;37101:25;;;;;;36609:561;;:::o;37065:61::-;37145:7;;37154;;-1:-1:-1;36609:561:0;-1:-1:-1;36609:561:0:o;5729:490::-;5787:7;6051:6;6047:47;;-1:-1:-1;6081:1:0;6074:8;;6047:47;6106:9;6118:5;6122:1;6118;:5;:::i;:::-;6106:17;-1:-1:-1;6151:1:0;6142:5;6146:1;6106:17;6142:5;:::i;:::-;:10;6134:56;;;;-1:-1:-1;;;6134:56:0;;7412:2:1;6134:56:0;;;7394:21:1;7451:2;7431:18;;;7424:30;7490:34;7470:18;;;7463:62;-1:-1:-1;;;7541:18:1;;;7534:31;7582:19;;6134:56:0;7210:397:1;7366:278:0;7452:7;7487:12;7480:5;7472:28;;;;-1:-1:-1;;;7472:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7511:9:0;7523:5;7527:1;7523;:5;:::i;37342:469::-;37421:19;37444:10;:8;:10::i;:::-;37421:33;-1:-1:-1;37465:18:0;37486:27;:10;37421:33;37486:14;:27::i;:::-;37565:4;37549:22;;;;:7;:22;;;;;;37465:48;;-1:-1:-1;37549:38:0;;37465:48;37549:26;:38::i;:::-;37540:4;37524:22;;;;:7;:22;;;;;;;;:63;;;;37601:11;:26;;;;;;37598:107;;;37683:4;37667:22;;;;:7;:22;;;;;;:38;;37694:10;37667:26;:38::i;:::-;37658:4;37642:22;;;;:7;:22;;;;;:63;37598:107;37721:43;;9753:25:1;;;37746:4:0;;-1:-1:-1;;;;;37721:43:0;;;;;9741:2:1;9726:18;37721:43:0;;;;;;;;37410:401;;37342:469;;:::o;37182:148::-;37261:7;;:17;;37273:4;37261:11;:17::i;:::-;37251:7;:27;37302:10;;:20;;37317:4;37302:14;:20::i;:::-;37289:10;:33;-1:-1:-1;;37182:148:0:o;37819:468::-;37896:19;37919:10;:8;:10::i;:::-;37896:33;-1:-1:-1;37940:17:0;37960:26;:9;37896:33;37960:13;:26::i;:::-;38031:14;;-1:-1:-1;;;;;38031:14:0;38023:23;;;;:7;:23;;;;;;37940:46;;-1:-1:-1;38023:38:0;;37940:46;38023:27;:38::i;:::-;38005:14;;;-1:-1:-1;;;;;38005:14:0;;;37997:23;;;;:7;:23;;;;;;;;:64;;;;38087:14;;;;;38075:27;;:11;:27;;;;;;;38072:109;;;38151:14;;-1:-1:-1;;;;;38151:14:0;38143:23;;;;:7;:23;;;;;;:38;;38171:9;38143:27;:38::i;:::-;38125:14;;-1:-1:-1;;;;;38125:14:0;38117:23;;;;:7;:23;;;;;:64;38072:109;38214:14;;38197:43;;9753:25:1;;;-1:-1:-1;;;;;38214:14:0;;;;38197:43;;;;;9741:2:1;9726:18;38197:43:0;9607:177:1;14:247;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:315::-;1444:6;1452;1505:2;1493:9;1484:7;1480:23;1476:32;1473:52;;;1521:1;1518;1511:12;1473:52;1560:9;1547:23;1579:31;1604:5;1579:31;:::i;:::-;1629:5;1681:2;1666:18;;;;1653:32;;-1:-1:-1;;;1376:315:1:o;1696:273::-;1752:6;1805:2;1793:9;1784:7;1780:23;1776:32;1773:52;;;1821:1;1818;1811:12;1773:52;1860:9;1847:23;1913:5;1906:13;1899:21;1892:5;1889:32;1879:60;;1935:1;1932;1925:12;1974:180;2033:6;2086:2;2074:9;2065:7;2061:23;2057:32;2054:52;;;2102:1;2099;2092:12;2054:52;-1:-1:-1;2125:23:1;;1974:180;-1:-1:-1;1974:180:1:o;2159:248::-;2227:6;2235;2288:2;2276:9;2267:7;2263:23;2259:32;2256:52;;;2304:1;2301;2294:12;2256:52;-1:-1:-1;;2327:23:1;;;2397:2;2382:18;;;2369:32;;-1:-1:-1;2159:248:1:o;2412:306::-;2500:6;2508;2516;2569:2;2557:9;2548:7;2544:23;2540:32;2537:52;;;2585:1;2582;2575:12;2537:52;2614:9;2608:16;2598:26;;2664:2;2653:9;2649:18;2643:25;2633:35;;2708:2;2697:9;2693:18;2687:25;2677:35;;2412:306;;;;;:::o;4279:597::-;4391:4;4420:2;4449;4438:9;4431:21;4481:6;4475:13;4524:6;4519:2;4508:9;4504:18;4497:34;4549:1;4559:140;4573:6;4570:1;4567:13;4559:140;;;4668:14;;;4664:23;;4658:30;4634:17;;;4653:2;4630:26;4623:66;4588:10;;4559:140;;;4717:6;4714:1;4711:13;4708:91;;;4787:1;4782:2;4773:6;4762:9;4758:22;4754:31;4747:42;4708:91;-1:-1:-1;4860:2:1;4839:15;-1:-1:-1;;4835:29:1;4820:45;;;;4867:2;4816:54;;4279:597;-1:-1:-1;;;4279:597:1:o;7612:356::-;7814:2;7796:21;;;7833:18;;;7826:30;7892:34;7887:2;7872:18;;7865:62;7959:2;7944:18;;7612:356::o;9789:980::-;10051:4;10099:3;10088:9;10084:19;10130:6;10119:9;10112:25;10156:2;10194:6;10189:2;10178:9;10174:18;10167:34;10237:3;10232:2;10221:9;10217:18;10210:31;10261:6;10296;10290:13;10327:6;10319;10312:22;10365:3;10354:9;10350:19;10343:26;;10404:2;10396:6;10392:15;10378:29;;10425:1;10435:195;10449:6;10446:1;10443:13;10435:195;;;10514:13;;-1:-1:-1;;;;;10510:39:1;10498:52;;10605:15;;;;10570:12;;;;10546:1;10464:9;10435:195;;;-1:-1:-1;;;;;;;10686:32:1;;;;10681:2;10666:18;;10659:60;-1:-1:-1;;;10750:3:1;10735:19;10728:35;10647:3;9789:980;-1:-1:-1;;;9789:980:1:o;11287:128::-;11327:3;11358:1;11354:6;11351:1;11348:13;11345:39;;;11364:18;;:::i;:::-;-1:-1:-1;11400:9:1;;11287:128::o;11420:217::-;11460:1;11486;11476:132;;11530:10;11525:3;11521:20;11518:1;11511:31;11565:4;11562:1;11555:15;11593:4;11590:1;11583:15;11476:132;-1:-1:-1;11622:9:1;;11420:217::o;11642:168::-;11682:7;11748:1;11744;11740:6;11736:14;11733:1;11730:21;11725:1;11718:9;11711:17;11707:45;11704:71;;;11755:18;;:::i;:::-;-1:-1:-1;11795:9:1;;11642:168::o;11815:125::-;11855:4;11883:1;11880;11877:8;11874:34;;;11888:18;;:::i;:::-;-1:-1:-1;11925:9:1;;11815:125::o;11945:380::-;12024:1;12020:12;;;;12067;;;12088:61;;12142:4;12134:6;12130:17;12120:27;;12088:61;12195:2;12187:6;12184:14;12164:18;12161:38;12158:161;;;12241:10;12236:3;12232:20;12229:1;12222:31;12276:4;12273:1;12266:15;12304:4;12301:1;12294:15;12158:161;;11945:380;;;:::o;12330:135::-;12369:3;-1:-1:-1;;12390:17:1;;12387:43;;;12410:18;;:::i;:::-;-1:-1:-1;12457:1:1;12446:13;;12330:135::o;12470:127::-;12531:10;12526:3;12522:20;12519:1;12512:31;12562:4;12559:1;12552:15;12586:4;12583:1;12576:15;12602:127;12663:10;12658:3;12654:20;12651:1;12644:31;12694:4;12691:1;12684:15;12718:4;12715:1;12708:15;12866:131;-1:-1:-1;;;;;12941:31:1;;12931:42;;12921:70;;12987:1;12984;12977:12;12921:70;12866:131;:::o
Swarm Source
ipfs://b06672034f661b668b837e7a534e7d0b9a95e81d6ff1b28ab6d2ec82784ffc95
Loading...
Loading
Loading...
Loading
OVERVIEW
Digipolis revolutionizes remote virtual collaboration with digital offices, a democratic governance model, and a unique economic ecosystem anchored by $DIGI.Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.