BEP-20
Overview
Max Total Supply
100,000,000,000BST
Holders
438
Market
Price
$0.00 @ 0.000000 BNB
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
95 BSTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
BST
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2021-09-04 */ pragma solidity ^0.7.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/Context.sol pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: contracts/IUniswapV2Router01.sol pragma solidity >=0.6.2; 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); } // File: contracts/IUniswapV2Router02.sol pragma solidity >=0.6.2; 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; } // File: contracts/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: contracts/IUniswapV2Pair.sol pragma solidity >=0.5.0; 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 Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function 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; } // File: contracts/IterableMapping.sol pragma solidity ^0.7.6; library IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) public view returns (int) { if(!map.inserted[key]) { return -1; } return int(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint) { return map.keys.length; } function set(Map storage map, address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } // File: contracts/Ownable.sol pragma solidity ^0.7.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/IDividendPayingTokenOptional.sol pragma solidity ^0.7.6; /// @title Dividend-Paying Token Optional Interface /// @author Roger Wu (https://github.com/roger-wu) /// @dev OPTIONAL functions for a dividend-paying token contract. interface IDividendPayingTokenOptional { /// @notice View the amount of dividend in wei that an address can withdraw. /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` can withdraw. function withdrawableDividendOf(address _owner) external view returns(uint256); /// @notice View the amount of dividend in wei that an address has withdrawn. /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` has withdrawn. function withdrawnDividendOf(address _owner) external view returns(uint256); /// @notice View the amount of dividend in wei that an address has earned in total. /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner) /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` has earned in total. function accumulativeDividendOf(address _owner) external view returns(uint256); } // File: contracts/IDividendPayingToken.sol pragma solidity ^0.7.6; /// @title Dividend-Paying Token Interface /// @author Roger Wu (https://github.com/roger-wu) /// @dev An interface for a dividend-paying token contract. interface IDividendPayingToken { /// @notice View the amount of dividend in wei that an address can withdraw. /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` can withdraw. function dividendOf(address _owner) external view returns(uint256); /// @notice Distributes ether to token holders as dividends. /// @dev SHOULD distribute the paid ether to token holders as dividends. /// SHOULD NOT directly transfer ether to token holders in this function. /// MUST emit a `DividendsDistributed` event when the amount of distributed ether is greater than 0. function distributeDividends() external payable; /// @notice Withdraws the ether distributed to the sender. /// @dev SHOULD transfer `dividendOf(msg.sender)` wei to `msg.sender`, and `dividendOf(msg.sender)` SHOULD be 0 after the transfer. /// MUST emit a `DividendWithdrawn` event if the amount of ether transferred is greater than 0. function withdrawDividend() external; /// @dev This event MUST emit when ether is distributed to token holders. /// @param from The address which sends ether to this contract. /// @param weiAmount The amount of distributed ether in wei. event DividendsDistributed( address indexed from, uint256 weiAmount ); /// @dev This event MUST emit when an address withdraws their dividend. /// @param to The address which withdraws ether from this contract. /// @param weiAmount The amount of withdrawn ether in wei. event DividendWithdrawn( address indexed to, uint256 weiAmount, address indexed tokenWithdrawn ); } // File: contracts/SafeMathInt.sol pragma solidity ^0.7.6; /** * @title SafeMathInt * @dev Math operations with safety checks that revert on error * @dev SafeMath adapted for int256 * Based on code of https://github.com/RequestNetwork/requestNetwork/blob/master/packages/requestNetworkSmartContracts/contracts/base/math/SafeMathInt.sol */ library SafeMathInt { function mul(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when multiplying INT256_MIN with -1 // https://github.com/RequestNetwork/requestNetwork/issues/43 require(!(a == - 2**255 && b == -1) && !(b == - 2**255 && a == -1)); int256 c = a * b; require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing INT256_MIN by -1 // https://github.com/RequestNetwork/requestNetwork/issues/43 require(!(a == - 2**255 && b == -1) && (b > 0)); return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { require((b >= 0 && a - b <= a) || (b < 0 && a - b > a)); return a - b; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } // File: contracts/SafeMathUint.sol pragma solidity ^0.7.6; /** * @title SafeMathUint * @dev Math operations with safety checks that revert on error */ library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } // File: contracts/ERC20.sol pragma solidity ^0.7.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ 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; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { 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); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File: contracts/SafeMath.sol pragma solidity ^0.7.0; /** * @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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @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) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * 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); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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; } } // File: contracts/BSTDividendPayingToken.sol pragma solidity ^0.7.6; /// @title Dividend-Paying Token /// @author Roger Wu (https://github.com/roger-wu) /// @dev A mintable ERC20 token that allows anyone to pay and distribute ether /// to token holders as dividends and allows token holders to withdraw their dividends. /// Reference: the source code of PoWH3D: https://etherscan.io/address/0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe#code contract DividendPayingToken is ERC20, IDividendPayingToken, IDividendPayingTokenOptional { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; // With `magnitude`, we can properly distribute dividends even if the amount of received ether is small. // For more discussion about choosing the value of `magnitude`, // see https://github.com/ethereum/EIPs/issues/1726#issuecomment-472352728 uint256 constant internal magnitude = 2**128; uint256 internal magnifiedDividendPerShare; uint256 internal lastAmount; address public DividendToken = address(0); address public masterContract; modifier onlyMaster() { require(masterContract == msg.sender, "Ownable: caller is not the master contract"); _; } // About dividendCorrection: // If the token balance of a `_user` is never changed, the dividend of `_user` can be computed with: // `dividendOf(_user) = dividendPerShare * balanceOf(_user)`. // When `balanceOf(_user)` is changed (via minting/burning/transferring tokens), // `dividendOf(_user)` should not be changed, // but the computed value of `dividendPerShare * balanceOf(_user)` is changed. // To keep the `dividendOf(_user)` unchanged, we add a correction term: // `dividendOf(_user) = dividendPerShare * balanceOf(_user) + dividendCorrectionOf(_user)`, // where `dividendCorrectionOf(_user)` is updated whenever `balanceOf(_user)` is changed: // `dividendCorrectionOf(_user) = dividendPerShare * (old balanceOf(_user)) - (new balanceOf(_user))`. // So now `dividendOf(_user)` returns the same value before and after `balanceOf(_user)` is changed. mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; uint256 public totalDividendsDistributed; constructor(string memory _name, string memory _symbol) public ERC20(_name, _symbol) { masterContract = msg.sender; } receive() external payable { } /// @notice Distributes ether to token holders as dividends. /// @dev It reverts if the total supply of tokens is 0. /// It emits the `DividendsDistributed` event if the amount of received ether is greater than 0. /// About undistributed ether: /// In each distribution, there is a small amount of ether not distributed, /// the magnified amount of which is /// `(msg.value * magnitude) % totalSupply()`. /// With a well-chosen `magnitude`, the amount of undistributed ether /// (de-magnified) in a distribution can be less than 1 wei. /// We can actually keep track of the undistributed ether in a distribution /// and try to distribute it in the next distribution, /// but keeping track of such data on-chain costs much more than /// the saved ether, so we don't do that. function updateMasterContract(address newAddress) public onlyMaster { masterContract = newAddress; } function distributeDividends() public override payable { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (msg.value).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add(msg.value); } } function distributeTokenDividends(uint256 amount) public onlyMaster{ require(totalSupply() > 0); if (amount > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (amount).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, amount); totalDividendsDistributed = totalDividendsDistributed.add(amount); } } /// @notice Withdraws the ether distributed to the sender. /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0. function withdrawDividend() public virtual override { _withdrawDividendOfUser(msg.sender); } /// @notice Withdraws the ether distributed to the sender. /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0. /// modified to support BNB dividend function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); bool success = false; if(DividendToken == address(0)){ (bool sent,) = user.call{value: _withdrawableDividend}(""); success = sent; emit DividendWithdrawn(user, _withdrawableDividend, DividendToken); }else{ success = IERC20(DividendToken).transfer(user, _withdrawableDividend); emit DividendWithdrawn(user, _withdrawableDividend, DividendToken); } if(!success) { withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend); return 0; } return _withdrawableDividend; } return 0; } /// @notice View the amount of dividend in wei that an address can withdraw. /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` can withdraw. function dividendOf(address _owner) public view override returns(uint256) { return withdrawableDividendOf(_owner); } /// @notice View the amount of dividend in wei that an address can withdraw. /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` can withdraw. function withdrawableDividendOf(address _owner) public view override returns(uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } /// @notice View the amount of dividend in wei that an address has withdrawn. /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` has withdrawn. function withdrawnDividendOf(address _owner) public view override returns(uint256) { return withdrawnDividends[_owner]; } /// @notice View the amount of dividend in wei that an address has earned in total. /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner) /// = (magnifiedDividendPerShare * balanceOf(_owner) + magnifiedDividendCorrections[_owner]) / magnitude /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` has earned in total. function accumulativeDividendOf(address _owner) public view override returns(uint256) { return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe() .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude; } /// @dev Internal function that transfer tokens from one address to another. /// Update magnifiedDividendCorrections to keep dividends unchanged. /// @param from The address to transfer from. /// @param to The address to transfer to. /// @param value The amount to be transferred. function _transfer(address from, address to, uint256 value) internal virtual override { require(false); int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe(); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection); magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection); } /// @dev Internal function that mints tokens to an account. /// Update magnifiedDividendCorrections to keep dividends unchanged. /// @param account The account that will receive the created tokens. /// @param value The amount that will be created. function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } /// @dev Internal function that burns an amount of the token of a given account. /// Update magnifiedDividendCorrections to keep dividends unchanged. /// @param account The account whose tokens will be burnt. /// @param value The amount that will be burnt. function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if(newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if(newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } } // File: contracts/BST.sol pragma solidity ^0.7.6; contract BST is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; address public DividendToken = address(0); bool private swapping; BSTDividendTracker public dividendTracker; address public burnAddress; uint256 public maxBuyTransactionAmount = 100000000000 * (10**18); uint256 public maxSellTransactionAmount = 100000000000 * (10**18); uint256 public swapTokensAtAmount = 20000000 * (10**18); uint256 public _maxWalletToken = 100000000000 * (10**18); uint256 public sellLimitTime = 86400; mapping(address => uint256) public buycooldown; mapping(address => uint256) public sellcooldown; mapping(address => uint256) public firstsell; mapping(address => uint256) public sellnumber; address payable public marketAddress; address payable public charityAddress; address payable public buyBackAddress; address public marketTokenAddressForFee; address public charityTokenAddressForFee; address public buyBackTokenAddressForFee; // transfer fees uint256 public marketFee = 0; uint256 public charityFee = 0; uint256 public buyBackFee = 0; uint256 public tokenRewardsFee = 5; uint256 public liquidityFee = 5; uint256 public burnFee = 0; uint256 public totalFees = tokenRewardsFee.add(liquidityFee).add(marketFee).add(charityFee).add(buyBackFee).add(burnFee); // buy fees uint256 public buyMarketFee = 0; uint256 public buyCharityFee = 0; uint256 public buyBuyBackFee = 0; uint256 public buyTokenRewardsFee = 5; uint256 public buyLiquidityFee = 5; uint256 public buyBurnFee = 0; uint256 public buyTotalFees = buyTokenRewardsFee.add(buyLiquidityFee).add(buyMarketFee).add(buyCharityFee).add(buyBuyBackFee).add(buyBurnFee); // sell fees uint256 public sellMarketFee = 0; uint256 public sellCharityFee = 0; uint256 public sellBuyBackFee = 0; uint256 public sellTokenRewardsFee = 5; uint256 public sellLiquidityFee = 5; uint256 public sellBurnFee = 0; uint256 public sellTotalFees = sellTokenRewardsFee.add(sellLiquidityFee).add(sellMarketFee).add(sellCharityFee).add(sellBuyBackFee).add(sellBurnFee); // fee tracker uint256 private previousMarketFee = marketFee; uint256 private previousCharityFee = charityFee; uint256 private previousBuyBackFee = buyBackFee; uint256 private previousTokenRewardsFee = tokenRewardsFee; uint256 private previousLiquidityFee = liquidityFee; uint256 private previousBurnFee = burnFee; uint256 private previousTotalFees = totalFees; // uint256 public processDividendTime; uint256 public dividendTime = 3600; // bool public isBuyBackActive = true; bool public isTransferFeesDisabled = true; // use by default 300,000 gas to process auto-claiming dividends uint256 public gasForProcessing = 350000; address public presaleAddress = address(0); // timestamp for when the token can be traded freely on PanackeSwap uint256 public tradingEnabledTimestamp = 1626399138; // blacklisted from all transfers mapping (address => bool) private _isBlacklisted; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) private _isExcludedFromLimits; // addresses that can make transfers before presale is over mapping (address => bool) private canTransferBeforeTradingIsEnabled; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateDividendTracker(address indexed newAddress, address indexed oldAddress); event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event UpdateDividendToken(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event ExcludedMaxSellTransactionAmount(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event BurnWalletUpdated(address indexed newBurnWallet, address indexed oldBurnWallet); event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SendDividends( uint256 tokensSwapped, uint256 amount ); event ProcessedDividendTracker( uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor ); constructor() public ERC20("Binance Smart Token", "BST") { // LP burn address burnAddress = address(0xdead); uint256 _processDividendTime = block.timestamp; processDividendTime = _processDividendTime; dividendTracker = new BSTDividendTracker(); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from receiving dividends dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends(address(_uniswapV2Router)); dividendTracker.excludeFromDividends(owner()); _isExcludedFromLimits[address(dividendTracker)]; _isExcludedFromLimits[address(this)]; _isExcludedFromLimits[address(_uniswapV2Router)]; _isExcludedFromLimits[owner()]; _isExcludedFromLimits[_uniswapV2Pair]; // exclude from paying fees excludeFromFees(burnAddress, true); excludeFromFees(address(this), true); excludeFromFees(owner(), true); // enable owner and fixed-sale wallet to send tokens before presales are over canTransferBeforeTradingIsEnabled[owner()] = true; /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), 100000000000 * (10**decimals())); } receive() external payable { } function swapAndLiquifyOwner(uint256 _tokens) external onlyOwner { swapAndLiquify(_tokens); } function swapAndSendDividendsOwner(uint256 _tokens) external onlyOwner { swapAndSendDividends(_tokens); } function restoreFees() internal { marketFee = previousMarketFee; charityFee = previousCharityFee; buyBackFee = previousBuyBackFee; tokenRewardsFee = previousTokenRewardsFee; liquidityFee = previousLiquidityFee; burnFee = previousBurnFee; totalFees = previousTotalFees; } function updateMaxSellTx(uint256 _newAmountNoDecimals) external onlyOwner { maxSellTransactionAmount = _newAmountNoDecimals * (10**decimals()); } function updateMaxWalletAmount(uint256 newAmountNoDecimials) external onlyOwner { _maxWalletToken = newAmountNoDecimials * (10**decimals()); } function updateSwapAtAmount(uint256 newAmountNoDecimials) external onlyOwner { swapTokensAtAmount = newAmountNoDecimials * (10**decimals()); } function updateMaxBuyTx(uint256 _newAmountNoDecimals) external onlyOwner { maxBuyTransactionAmount = _newAmountNoDecimals * (10**decimals()); } function updatedividendTime(uint256 _dividendTime) external onlyOwner { dividendTime = _dividendTime; } function updateBuyBackMode(bool _isBuyBackActive) external onlyOwner { isBuyBackActive = _isBuyBackActive; } function updateisTransferDisabled(bool _isTransferDisabled) external onlyOwner { isTransferFeesDisabled = _isTransferDisabled; } function updateTradingEnabledTime (uint256 newTimeInEpoch) external onlyOwner { tradingEnabledTimestamp = newTimeInEpoch; } function updateMinimumBalanceForDividends (uint256 newAmountNoDecimials) external onlyOwner { dividendTracker.updateMinimumBalanceForDividends(newAmountNoDecimials); } function updateTokenForDividend(address newAddress) external onlyOwner { dividendTracker.updateTokenForDividend(newAddress); DividendToken = newAddress; emit UpdateDividendToken(newAddress, address(DividendToken)); } function updateMarketAddress(address payable newAddress) external onlyOwner { marketAddress = newAddress; _isExcludedFromFees[newAddress] = true; //dividendTracker.excludeFromDividends(marketAddress); } function updateCharityAddress(address payable newAddress) external onlyOwner { charityAddress = newAddress; _isExcludedFromFees[newAddress] = true; //dividendTracker.excludeFromDividends(charityAddress); } function updateBuyBackAddress(address payable newAddress) external onlyOwner { buyBackAddress = newAddress; _isExcludedFromFees[newAddress] = true; //dividendTracker.excludeFromDividends(buyBackAddress); } function updateMarketTokenFeeAddress(address newAddress) external onlyOwner { marketTokenAddressForFee = newAddress; } function updateCharityTokenFeeAddress(address newAddress) external onlyOwner { charityTokenAddressForFee = newAddress; } function updateBuyBackTokenFeeAddress(address newAddress) external onlyOwner { buyBackTokenAddressForFee = newAddress; } function burnTokens(uint256 amountNoDecimals) external onlyOwner { uint256 sendAmount = amountNoDecimals * (10**decimals()); super._transfer(address(this), burnAddress, sendAmount); } function updateFees(uint256 _tokenRewardsFee, uint256 _liquidityFee, uint256 _marketFee, uint256 _charityFee, uint256 _buyBackFee, uint256 _burnFee) external onlyOwner { tokenRewardsFee = _tokenRewardsFee; liquidityFee = _liquidityFee; marketFee = _marketFee; charityFee = _charityFee; buyBackFee = _buyBackFee; burnFee = _burnFee; totalFees = _tokenRewardsFee.add(_liquidityFee).add(_marketFee).add(_charityFee).add(_buyBackFee).add(_burnFee); } function updateBuyFees(uint256 _tokenRewardsFee, uint256 _liquidityFee, uint256 _marketFee, uint256 _charityFee, uint256 _buyBackFee, uint256 _burnFee) external onlyOwner { buyTokenRewardsFee = _tokenRewardsFee; buyLiquidityFee = _liquidityFee; buyMarketFee = _marketFee; buyCharityFee = _charityFee; buyBuyBackFee = _buyBackFee; buyBurnFee = _burnFee; buyTotalFees = _tokenRewardsFee.add(_liquidityFee).add(_marketFee).add(_charityFee).add(_buyBackFee).add(_burnFee); } function updateSellFees(uint256 _tokenRewardsFee, uint256 _liquidityFee, uint256 _marketFee, uint256 _charityFee, uint256 _buyBackFee, uint256 _burnFee) external onlyOwner { sellTokenRewardsFee = _tokenRewardsFee; sellLiquidityFee = _liquidityFee; sellMarketFee = _marketFee; sellCharityFee = _charityFee; sellBuyBackFee = _buyBackFee; sellBurnFee = _burnFee; sellTotalFees = _tokenRewardsFee.add(_liquidityFee).add(_marketFee).add(_charityFee).add(_buyBackFee).add(_burnFee); } function whitelistDxSale(address _presaleAddress, address _routerAddress) external onlyOwner { presaleAddress = _presaleAddress; canTransferBeforeTradingIsEnabled[presaleAddress] = true; dividendTracker.excludeFromDividends(_presaleAddress); excludeFromFees(_presaleAddress, true); canTransferBeforeTradingIsEnabled[_routerAddress] = true; dividendTracker.excludeFromDividends(_routerAddress); excludeFromFees(_routerAddress, true); } function updateDividendTracker(address newAddress) external onlyOwner { require(newAddress != address(dividendTracker), "BST: The dividend tracker already has that address"); BSTDividendTracker newDividendTracker = BSTDividendTracker(payable(newAddress)); require(newDividendTracker.owner() == address(this), "BST: The new dividend tracker must be owned by the BST token contract"); newDividendTracker.excludeFromDividends(address(newDividendTracker)); newDividendTracker.excludeFromDividends(address(this)); newDividendTracker.excludeFromDividends(address(uniswapV2Router)); emit UpdateDividendTracker(newAddress, address(dividendTracker)); dividendTracker = newDividendTracker; } function updateUniswapV2Router(address newAddress) external onlyOwner { require(newAddress != address(uniswapV2Router), "BST: The router already has that address"); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newAddress); } function excludeFromFees(address account, bool excluded) public onlyOwner { //require(_isExcludedFromFees[account] != excluded, "BST: Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; //dividendTracker.excludeFromDividends(account); //emit ExcludeFromFees(account, excluded); } function excludeFromLimits(address account, bool excluded) public onlyOwner { //require(_isExcludedFromFees[account] != excluded, "BST: Account is already the value of 'excluded'"); _isExcludedFromLimits[account] = excluded; //dividendTracker.excludeFromDividends(account); //emit ExcludeFromFees(account, excluded); } function blacklistAddress(address account, bool excluded) public onlyOwner { //require(_isExcludedFromFees[account] != excluded, "BST: Account is already the value of 'excluded'"); _isBlacklisted[account] = excluded; dividendTracker.excludeFromDividends(account); //emit ExcludeFromFees(account, excluded); } function excludeFromDividends(address account) public onlyOwner { //require(_isExcludedFromFees[account] != excluded, "BST: Account is already the value of 'excluded'"); dividendTracker.excludeFromDividends(account); //emit ExcludeFromFees(account, excluded); } function enableDividends(address account) public onlyOwner { //require(_isExcludedFromFees[account] != excluded, "BST: Account is already the value of 'excluded'"); dividendTracker.enableDividends(account); //emit ExcludeFromFees(account, excluded); } function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) external onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFees[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require(pair != uniswapV2Pair, "BST: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "BST: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; if(value) { dividendTracker.excludeFromDividends(pair); } emit SetAutomatedMarketMakerPair(pair, value); } function updateGasForProcessing(uint256 newValue) public onlyOwner { require(newValue >= 200000 && newValue <= 500000, "BST: gasForProcessing must be between 200,000 and 500,000"); require(newValue != gasForProcessing, "BST: Cannot update gasForProcessing to same value"); emit GasForProcessingUpdated(newValue, gasForProcessing); gasForProcessing = newValue; } function updateClaimWait(uint256 claimWait) external onlyOwner { dividendTracker.updateClaimWait(claimWait); } function getClaimWait() external view returns(uint256) { return dividendTracker.claimWait(); } function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function isExcludedFromLimits(address account) public view returns(bool) { return _isExcludedFromLimits[account]; } function withdrawableDividendOf(address account) public view returns(uint256) { return dividendTracker.withdrawableDividendOf(account); } function dividendTokenBalanceOf(address account) public view returns (uint256) { return dividendTracker.balanceOf(account); } function getAccountDividendsInfo(address account) external view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256) { return dividendTracker.getAccount(account); } function getAccountDividendsInfoAtIndex(uint256 index) external view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256) { return dividendTracker.getAccountAtIndex(index); } function processDividendTracker(uint256 gas) external { (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) = dividendTracker.process(gas); emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, false, gas, tx.origin); } function claim() external { dividendTracker.processAccount(msg.sender, false); } function getLastProcessedIndex() external view returns(uint256) { return dividendTracker.getLastProcessedIndex(); } function getNumberOfDividendTokenHolders() external view returns(uint256) { return dividendTracker.getNumberOfTokenHolders(); } function getTradingIsEnabled() public view returns (bool) { return block.timestamp >= tradingEnabledTimestamp; } function swapAndLiquify(uint256 tokens) private { uint256 marketFeeFull; uint256 charityFeeFull; uint256 buyBackFeeFull; if(marketFee != 0){ marketFeeFull = tokens.mul(marketFee).div(100); } if(charityFee != 0){ charityFeeFull = tokens.mul(charityFee).div(100); } if(buyBackFee != 0){ buyBackFeeFull = tokens.mul(buyBackFee).div(100); } uint256 tokensAfterFee = tokens - marketFeeFull - charityFeeFull - buyBackFeeFull; // split the contract balance into halves uint256 initHalf = tokens.div(2); uint256 half = tokensAfterFee.div(2); uint256 otherHalf = tokensAfterFee.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(initHalf); // <- 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); uint256 marketFeeBalance; uint256 charityFeeBalance; uint256 buyBackFeeBalance; if(marketFee != 0){ marketFeeBalance = newBalance.mul(marketFee).div(100); } if(charityFee != 0){ charityFeeBalance = newBalance.mul(charityFee).div(100); } if(buyBackFee != 0){ buyBackFeeBalance = newBalance.mul(buyBackFee).div(100); } uint256 finalBalance = newBalance - marketFeeBalance - charityFeeBalance - buyBackFeeBalance; uint256 finalHalf = otherHalf; if(marketFeeBalance != 0){ if(marketTokenAddressForFee != address(0)){ swapEthForTokens(marketFeeBalance, marketTokenAddressForFee, marketAddress); }else{ (bool sent,) = marketAddress.call{value: marketFeeBalance}(""); }} if(charityFeeBalance != 0){ if(charityTokenAddressForFee != address(0)){ swapEthForTokens(charityFeeBalance, charityTokenAddressForFee, charityAddress); }else{ (bool sent,) = charityAddress.call{value: charityFeeBalance}(""); }} if(buyBackFeeBalance != 0){ if(isBuyBackActive){ swapEthForTokens(buyBackFeeBalance, address(this), buyBackAddress); }else{ (bool sent,) = buyBackAddress.call{value: buyBackFeeBalance}(""); }} // add liquidity to uniswap addLiquidity(finalHalf, finalBalance); emit SwapAndLiquify(half, finalBalance, otherHalf); } // modified to support BNB dividend function swapAndSendDividends(uint256 tokens) private { address payable diviTracker = address(dividendTracker); bool success = false; uint256 dividends; if(DividendToken != address(0)){ swapTokensForTokens(tokens, address(this)); dividends = IERC20(DividendToken).balanceOf(address(this)); success = IERC20(DividendToken).transfer(address(dividendTracker), dividends); }else{ uint256 initialBalance = address(this).balance; swapTokensForEth(tokens); uint256 newBalance = address(this).balance.sub(initialBalance); dividends = newBalance; (bool sent,) = diviTracker.call{value: newBalance}(""); success = sent; } if (success) { dividendTracker.distributeTokenDividends(dividends); emit SendDividends(tokens, dividends); } } function swapEthForTokens(uint256 ethAmount, address tokenAddress, address receiver) private { // generate the uniswap pair path of weth -> token address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = tokenAddress; // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}( 0, // accept any amount of ETH path, receiver, block.timestamp ); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapTokensForTokens(uint256 tokenAmount, address recipient) private { // generate the uniswap pair path of weth -> busd address[] memory path = new address[](3); path[0] = address(this); path[1] = uniswapV2Router.WETH(); path[2] = DividendToken; _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of BUSD path, recipient, block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable burnAddress, block.timestamp ); } function _transfer( address from, address to, uint256 amount ) internal override { require(!_isBlacklisted[from], "Blacklisted address cannot transfer!"); require(!_isBlacklisted[to], "Blacklisted address cannot transfer!"); require(from != address(0), "ERC20: transfer to the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } bool buyOrSell = false; if ( from != owner() && to != address(0) && to != address(0xdead) && automatedMarketMakerPairs[from] ) { if(!_isExcludedFromLimits[from]){ require( amount <= maxBuyTransactionAmount, "Transfer amount exceeds the maxTxAmount." ); } previousMarketFee = marketFee; previousCharityFee = charityFee; previousBuyBackFee = buyBackFee; previousTokenRewardsFee = tokenRewardsFee; previousLiquidityFee = liquidityFee; previousBurnFee = liquidityFee; previousTotalFees = totalFees; marketFee = buyMarketFee; charityFee = buyCharityFee; buyBackFee = buyBuyBackFee; tokenRewardsFee = buyTokenRewardsFee; liquidityFee = buyLiquidityFee; burnFee = buyBurnFee; totalFees = buyTotalFees; buyOrSell = true; } bool tradingIsEnabled = getTradingIsEnabled(); // only whitelisted addresses can make transfers after the fixed-sale has started // and before the public presale is over if(!tradingIsEnabled) { require(canTransferBeforeTradingIsEnabled[from], "BST: This account cannot send tokens until trading is enabled"); } if( from != owner() && !swapping && tradingIsEnabled && automatedMarketMakerPairs[to] && // sells only by detecting transfer to automated market maker pair from != address(uniswapV2Router) && //router -> pair is removing liquidity which shouldn't have max !_isExcludedFromFees[to] //no max for those excluded from fees ) { // sets reset if(firstsell[from] + sellLimitTime < block.timestamp){ sellnumber[from] = 0; } if(!_isExcludedFromLimits[from]){ require(amount + sellnumber[from] <= maxSellTransactionAmount, "Sell transfer amount exceeds the maxSellAmount for the given time."); //require(sellcooldown[from] < block.timestamp, "Wait for sell cooldown!"); } // increment existing amount or restart if (sellnumber[from] > 0) { sellnumber[from] += amount; }else{ firstsell[from] = block.timestamp; //sellcooldown[from] = block.timestamp + sellLimitTime; sellnumber[from] += amount; } // previousMarketFee = marketFee; previousCharityFee = charityFee; previousBuyBackFee = buyBackFee; previousTokenRewardsFee = tokenRewardsFee; previousLiquidityFee = liquidityFee; previousBurnFee = burnFee; previousTotalFees = totalFees; marketFee = sellMarketFee; charityFee = sellCharityFee; buyBackFee = sellBuyBackFee; tokenRewardsFee = sellTokenRewardsFee; liquidityFee = sellLiquidityFee; burnFee = sellBurnFee; totalFees = sellTotalFees; buyOrSell = true; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( tradingIsEnabled && canSwap && !swapping && !automatedMarketMakerPairs[from] && from != burnAddress && to != burnAddress ) { swapping = true; // added to sell this amount set instead of just trigger //contractTokenBalance = swapTokensAtAmount; //uint256 swapTokens = contractTokenBalance.mul(liquidityFee).div(totalFees); swapAndLiquify(swapTokensAtAmount); uint256 sellTokens = balanceOf(address(this)); swapAndSendDividends(sellTokens); swapping = false; } bool takeFee = tradingIsEnabled && !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || isTransferFeesDisabled) { takeFee = false; } if(takeFee || buyOrSell ) { if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){ // exclude fees from those excluded from fees in case of buy or sell }else{ uint256 calcFee = totalFees.sub(burnFee); uint256 feeAmount = amount.mul(calcFee).div(100); uint burnAmount = amount.mul(burnFee).div(100); amount = amount.sub(feeAmount).sub(burnAmount); super._transfer(from, address(this), feeAmount); super._transfer(from, burnAddress, burnAmount); } }else{ if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){ // exclude burn from those excluded from fees }else{ uint burnAmount = amount.mul(burnFee).div(100); amount = amount.sub(burnAmount); super._transfer(from, burnAddress, burnAmount); } } super._transfer(from, to, amount); if(buyOrSell){ restoreFees(); } try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {} try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {} bool canDividend = block.timestamp >= processDividendTime; if(!swapping && canDividend) { uint256 gas = gasForProcessing; processDividendTime += dividendTime; try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) { emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin); } catch { } } } } contract BSTDividendTracker is DividendPayingToken, Ownable { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; uint256 public lastProcessedIndex; mapping (address => bool) public excludedFromDividends; mapping (address => uint256) public lastClaimTimes; uint256 public claimWait; uint256 public minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); constructor() public DividendPayingToken("BST_Dividend_Tracker", "BST_Dividend_Tracker") { claimWait = 3600; minimumTokenBalanceForDividends = 1 * (10**18); } function updateMinimumBalanceForDividends(uint256 newAmountNoDecimials) external onlyOwner{ minimumTokenBalanceForDividends = newAmountNoDecimials * (10**18); } function updateTokenForDividend(address newAddress) external onlyOwner { DividendToken = newAddress; } function _transfer(address, address, uint256) internal override { require(false, "BST_Dividend_Tracker: No transfers allowed"); } function withdrawDividend() public override { require(false, "BST_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main BST contract."); } function excludeFromDividends(address account) external onlyOwner { //require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); //emit ExcludeFromDividends(account); } function enableDividends(address account) external onlyOwner { //require(!excludedFromDividends[account]); excludedFromDividends[account] = false; //emit ExcludeFromDividends(account); } function updateClaimWait(uint256 newClaimWait) external onlyOwner { require(newClaimWait >= 3600 && newClaimWait <= 86400, "BST_Dividend_Tracker: claimWait must be updated to between 1 and 24 hours"); require(newClaimWait != claimWait, "BST_Dividend_Tracker: Cannot update claimWait to same value"); emit ClaimWaitUpdated(newClaimWait, claimWait); claimWait = newClaimWait; } function getLastProcessedIndex() external view returns(uint256) { return lastProcessedIndex; } function getNumberOfTokenHolders() external view returns(uint256) { return tokenHoldersMap.keys.length; } function getAccount(address _account) public view returns ( address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime, uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = -1; if(index >= 0) { if(uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub(int256(lastProcessedIndex)); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ? tokenHoldersMap.keys.length.sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray)); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0; secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0; } function getAccountAtIndex(uint256 index) public view returns ( address, int256, int256, uint256, uint256, uint256, uint256, uint256) { if(index >= tokenHoldersMap.size()) { return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0); } address account = tokenHoldersMap.getKeyAtIndex(index); return getAccount(account); } function canAutoClaim(uint256 lastClaimTime) private view returns (bool) { if(lastClaimTime > block.timestamp) { return false; } return block.timestamp.sub(lastClaimTime) >= claimWait; } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if(excludedFromDividends[account]) { return; } if(newBalance >= minimumTokenBalanceForDividends) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } processAccount(account, true); } function process(uint256 gas) public returns (uint256, uint256, uint256) { uint256 numberOfTokenHolders = tokenHoldersMap.keys.length; if(numberOfTokenHolders == 0) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while(gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if(_lastProcessedIndex >= tokenHoldersMap.keys.length) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.keys[_lastProcessedIndex]; if(canAutoClaim(lastClaimTimes[account])) { if(processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if(gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if(amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } }
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":true,"internalType":"address","name":"newBurnWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldBurnWallet","type":"address"}],"name":"BurnWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedMaxSellTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","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":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"DividendToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountNoDecimals","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackTokenAddressForFee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buycooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityTokenAddressForFee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract BSTDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"enableDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"firstsell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTradingIsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isBuyBackActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTransferFeesDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketTokenAddressForFee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processDividendTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLimitTime","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":"sellMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sellcooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sellnumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"swapAndLiquifyOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"swapAndSendDividendsOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"tradingEnabledTimestamp","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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateBuyBackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isBuyBackActive","type":"bool"}],"name":"updateBuyBackMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateBuyBackTokenFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenRewardsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateCharityTokenFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenRewardsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateMarketAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateMarketTokenFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmountNoDecimals","type":"uint256"}],"name":"updateMaxBuyTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmountNoDecimals","type":"uint256"}],"name":"updateMaxSellTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmountNoDecimials","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmountNoDecimials","type":"uint256"}],"name":"updateMinimumBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenRewardsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmountNoDecimials","type":"uint256"}],"name":"updateSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateTokenForDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTimeInEpoch","type":"uint256"}],"name":"updateTradingEnabledTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dividendTime","type":"uint256"}],"name":"updatedividendTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTransferDisabled","type":"bool"}],"name":"updateisTransferDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleAddress","type":"address"},{"internalType":"address","name":"_routerAddress","type":"address"}],"name":"whitelistDxSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a0604052600780546001600160a01b03191690556c01431e0fae6d7217caa0000000600a819055600b8190556a108b2a2c28029094000000600c55600d5562015180600e5560006019819055601a819055601b8190556005601c819055601d819055601e829055620000a5919062000091908290829082908290829082908062000780602090811b62003bf417901c565b6200078060201b62003bf41790919060201c565b601f5560006020556000602155600060225560056023556005602455600060255562000100602554620000916022546200009160215462000091602054620000916024546023546200078060201b62003bf41790919060201c565b6026556000602755600060285560006029556005602a556005602b556000602c556200015b602c5462000091602954620000916028546200009160275462000091602b54602a546200078060201b62003bf41790919060201c565b602d55601954602e55601a54602f55601b54603055601c54603155601d54603255601e54603355601f54603455610e106036556037805461ff001960ff199091166001171661010017905562055730603855603980546001600160a01b03191690556360f0e1a2603a55348015620001d257600080fd5b506040518060400160405280601381526020017f42696e616e636520536d61727420546f6b656e00000000000000000000000000815250604051806040016040528060038152602001621094d560ea1b81525081600390805190602001906200023d92919062000aee565b5080516200025390600490602084019062000aee565b50506005805460ff191660121790555060006200026f620007e2565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600980546001600160a01b03191661dead179055426035819055604051620002ed9062000b83565b604051809103906000f0801580156200030a573d6000803e3d6000fd5b50600860006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060007310ed43c718714eb63d5aa57b78b54704e256024e90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200038657600080fd5b505afa1580156200039b573d6000803e3d6000fd5b505050506040513d6020811015620003b257600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929187169163ad5c464891600480820192602092909190829003018186803b1580156200040357600080fd5b505afa15801562000418573d6000803e3d6000fd5b505050506040513d60208110156200042f57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200048257600080fd5b505af115801562000497573d6000803e3d6000fd5b505050506040513d6020811015620004ae57600080fd5b5051600680546001600160a01b0319166001600160a01b038516179055606081901b6001600160601b0319166080529050620004ec816001620007e6565b6008546040805163031e79db60e41b81526001600160a01b0390921660048301819052905190916331e79db091602480830192600092919082900301818387803b1580156200053a57600080fd5b505af11580156200054f573d6000803e3d6000fd5b50506008546040805163031e79db60e41b815230600482015290516001600160a01b0390921693506331e79db0925060248082019260009290919082900301818387803b158015620005a057600080fd5b505af1158015620005b5573d6000803e3d6000fd5b50506008546040805163031e79db60e41b81526001600160a01b03878116600483015291519190921693506331e79db09250602480830192600092919082900301818387803b1580156200060857600080fd5b505af11580156200061d573d6000803e3d6000fd5b50506008546001600160a01b031691506331e79db090506200063e62000919565b6040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156200067e57600080fd5b505af115801562000693573d6000803e3d6000fd5b5050603d60208190526001600160a01b03851660009081529092509050620006ba62000919565b6001600160a01b039081168252602091820192909252828216600052603d9052600954620006eb911660016200092d565b620006f83060016200092d565b6200070e6200070662000919565b60016200092d565b6001603e60006200071e62000919565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620007776200075462000919565b6200075e620009d1565b60ff16600a0a64174876e80002620009da60201b60201c565b50505062000ba8565b600082820183811015620007db576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0382166000908152603f602052604090205460ff1615158115151415620008465760405162461bcd60e51b815260040180806020018281038252603d81526020018062008fa8603d913960400191505060405180910390fd5b6001600160a01b0382166000908152603f60205260409020805460ff19168215801591909117909155620008dd576008546040805163031e79db60e41b81526001600160a01b038581166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015620008c357600080fd5b505af1158015620008d8573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60055461010090046001600160a01b031690565b62000937620007e2565b6001600160a01b03166200094a62000919565b6001600160a01b031614620009a6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03919091166000908152603c60205260409020805460ff1916911515919091179055565b60055460ff1690565b6001600160a01b03821662000a36576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b62000a446000838362000ae9565b62000a60816002546200078060201b62003bf41790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000a9391839062003bf462000780821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000b26576000855562000b71565b82601f1062000b4157805160ff191683800117855562000b71565b8280016001018555821562000b71579182015b8281111562000b7157825182559160200191906001019062000b54565b5062000b7f92915062000b91565b5090565b6128ef80620066b983390190565b5b8082111562000b7f576000815560010162000b92565b60805160601c615aee62000bcb60003980611f4d5280612ef85250615aee6000f3fe6080604052600436106106a15760003560e01c80637a41865b1161035f578063c0246668116101d1578063e708a0f911610102578063f11a24d3116100a0578063f63743421161007a578063f6374342146116fa578063f7822e091461170f578063fa280d4414611739578063fce589d814611763576106a8565b8063f11a24d314611688578063f27fd2541461169d578063f2fde38b146116c7576106a8565b8063e7841ec0116100dc578063e7841ec01461160a578063e98030c71461161f578063e9d3d61e14611649578063ecfca89914611673576106a8565b8063e708a0f9146115cb578063e71dc3f5146115e0578063e76ed0e3146115f5576106a8565b8063d4d90c251161016f578063dd62ed3e11610149578063dd62ed3e1461153a578063e2f4560514611575578063e371f7cf1461158a578063e4a1b95f146115b6576106a8565b8063d4d90c25146114dd578063d644c365146114f2578063d85ba06314611525576106a8565b8063c492f046116101ab578063c492f046146113ec578063c55d22871461146b578063c9fa039614611495578063d2630cc3146114aa576106a8565b8063c02466681461134c578063c0a904a214611387578063c18bc195146113c2576106a8565b8063992c58e4116102ab578063a8b9d24011610249578063adb873bd11610223578063adb873bd146112bc578063ae5a17a7146112d1578063afcf2fc414611304578063b62496f514611319576106a8565b8063a8b9d240146111d2578063a9059cbb14611205578063ad56c13c1461123e576106a8565b8063a1dc92bc11610285578063a1dc92bc1461113c578063a26579ad14611151578063a457c2d714611166578063a5afbcb81461119f576106a8565b8063992c58e4146110a45780639a7a23d6146110ec5780639c1b8af514611127576106a8565b80638f7142601161031857806395d89b41116102f257806395d89b4114611032578063974d628c1461104757806398118cb41461105c57806398eac15614611071576106a8565b80638f71426014610fde57806394305f4e14611008578063956236411461101d576106a8565b80637a41865b14610ed357806381dcc26614610f06578063871c128d14610f3957806388bdd9be14610f635780638ae1cf2214610f965780638da5cb5b14610fc9576106a8565b80633d0c8963116105135780635cce86cd11610444578063700bb191116103e2578063715018a6116103bc578063715018a614610e4c57806378109e5414610e61578063783478ad14610e7657806379e02b4414610e8b576106a8565b8063700bb19114610dda57806370a0823114610e0457806370d5ae0514610e37576106a8565b806365b8dbc01161041e57806365b8dbc014610d355780636843cd8414610d685780636a486a8e14610d9b5780636d1b229d14610db0576106a8565b80635cce86cd14610cc3578063616c594614610cf657806364b0f65314610d20576106a8565b80634be8f8b1116104b15780634e83ff6f1161048b5780634e83ff6f14610c145780634fbee19314610c4f57806354503bf714610c825780635aa821a914610cae576106a8565b80634be8f8b114610bd55780634d33b1ef14610bea5780634e71d92d14610bff576106a8565b8063425b682e116104ed578063425b682e14610b5b578063455a439614610b70578063486b6d8614610bab57806349bd5a5e14610bc0576106a8565b80633d0c896314610acb5780633fe9092214610afe578063407e378714610b31576106a8565b80631bc8b18f116105ed57806330bb4cff1161058b57806335b5fb631161056557806335b5fb6314610a3e57806338b7692314610a535780633950935114610a685780633b364da814610aa1576106a8565b806330bb4cff146109cb578063313ce567146109e057806331e79db014610a0b576106a8565b806323b872dd116105c757806323b872dd14610949578063255e9d0a1461098c57806325b61703146109a15780632c1f5216146109b6576106a8565b80631bc8b18f146108b75780631fe70a98146108ea57806322d3e2aa146108ff576106a8565b80630d7f14411161065a57806313114a9d1161063457806313114a9d146108635780631694505e1461087857806318160ddd1461088d5780631a221dbb146108a2576106a8565b80630d7f1441146107ea578063122fe685146107ff5780631283f1ca14610830576106a8565b806302259e9e146106ad57806302df64d6146106d457806306fdde03146106e957806308b2a12c14610773578063095ea7b3146107885780630ccf2156146107d5576106a8565b366106a857005b600080fd5b3480156106b957600080fd5b506106c2611778565b60408051918252519081900360200190f35b3480156106e057600080fd5b506106c261177e565b3480156106f557600080fd5b506106fe611784565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610738578181015183820152602001610720565b50505050905090810190601f1680156107655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561077f57600080fd5b506106c261181a565b34801561079457600080fd5b506107c1600480360360408110156107ab57600080fd5b506001600160a01b038135169060200135611820565b604080519115158252519081900360200190f35b3480156107e157600080fd5b506106c261183e565b3480156107f657600080fd5b506106c2611844565b34801561080b57600080fd5b5061081461184a565b604080516001600160a01b039092168252519081900360200190f35b34801561083c57600080fd5b506106c26004803603602081101561085357600080fd5b50356001600160a01b0316611859565b34801561086f57600080fd5b506106c261186b565b34801561088457600080fd5b50610814611871565b34801561089957600080fd5b506106c2611880565b3480156108ae57600080fd5b506106c2611886565b3480156108c357600080fd5b506106c2600480360360208110156108da57600080fd5b50356001600160a01b031661188c565b3480156108f657600080fd5b506106c261189e565b34801561090b57600080fd5b50610947600480360360c081101561092257600080fd5b5080359060208101359060408101359060608101359060808101359060a001356118a4565b005b34801561095557600080fd5b506107c16004803603606081101561096c57600080fd5b506001600160a01b03813581169160208101359091169060400135611949565b34801561099857600080fd5b506106c26119d0565b3480156109ad57600080fd5b506106c26119d6565b3480156109c257600080fd5b506108146119dc565b3480156109d757600080fd5b506106c26119eb565b3480156109ec57600080fd5b506109f5611a61565b6040805160ff9092168252519081900360200190f35b348015610a1757600080fd5b5061094760048036036020811015610a2e57600080fd5b50356001600160a01b0316611a6a565b348015610a4a57600080fd5b506106c2611b35565b348015610a5f57600080fd5b50610814611b3b565b348015610a7457600080fd5b506107c160048036036040811015610a8b57600080fd5b506001600160a01b038135169060200135611b4a565b348015610aad57600080fd5b5061094760048036036020811015610ac457600080fd5b5035611b98565b348015610ad757600080fd5b5061094760048036036020811015610aee57600080fd5b50356001600160a01b0316611c47565b348015610b0a57600080fd5b5061094760048036036020811015610b2157600080fd5b50356001600160a01b0316611d5f565b348015610b3d57600080fd5b5061094760048036036020811015610b5457600080fd5b5035611de3565b348015610b6757600080fd5b506107c1611e51565b348015610b7c57600080fd5b5061094760048036036040811015610b9357600080fd5b506001600160a01b0381351690602001351515611e5a565b348015610bb757600080fd5b506107c1611f3d565b348015610bcc57600080fd5b50610814611f4b565b348015610be157600080fd5b506106c2611f6f565b348015610bf657600080fd5b506107c1611f75565b348015610c0b57600080fd5b50610947611f7e565b348015610c2057600080fd5b5061094760048036036040811015610c3757600080fd5b506001600160a01b0381358116916020013516612003565b348015610c5b57600080fd5b506107c160048036036020811015610c7257600080fd5b50356001600160a01b031661218b565b348015610c8e57600080fd5b5061094760048036036020811015610ca557600080fd5b503515156121a9565b348015610cba57600080fd5b506106c261221e565b348015610ccf57600080fd5b506107c160048036036020811015610ce657600080fd5b50356001600160a01b0316612224565b348015610d0257600080fd5b5061094760048036036020811015610d1957600080fd5b5035612242565b348015610d2c57600080fd5b506106c26122a9565b348015610d4157600080fd5b5061094760048036036020811015610d5857600080fd5b50356001600160a01b03166122ee565b348015610d7457600080fd5b506106c260048036036020811015610d8b57600080fd5b50356001600160a01b03166123fa565b348015610da757600080fd5b506106c261247d565b348015610dbc57600080fd5b5061094760048036036020811015610dd357600080fd5b5035612483565b348015610de657600080fd5b5061094760048036036020811015610dfd57600080fd5b5035612514565b348015610e1057600080fd5b506106c260048036036020811015610e2757600080fd5b50356001600160a01b03166125fb565b348015610e4357600080fd5b50610814612616565b348015610e5857600080fd5b50610947612625565b348015610e6d57600080fd5b506106c26126d7565b348015610e8257600080fd5b506108146126dd565b348015610e9757600080fd5b50610947600480360360c0811015610eae57600080fd5b5080359060208101359060408101359060608101359060808101359060a001356126ec565b348015610edf57600080fd5b506106c260048036036020811015610ef657600080fd5b50356001600160a01b031661278b565b348015610f1257600080fd5b506106c260048036036020811015610f2957600080fd5b50356001600160a01b031661279d565b348015610f4557600080fd5b5061094760048036036020811015610f5c57600080fd5b50356127af565b348015610f6f57600080fd5b5061094760048036036020811015610f8657600080fd5b50356001600160a01b03166128d6565b348015610fa257600080fd5b5061094760048036036020811015610fb957600080fd5b50356001600160a01b0316612bc9565b348015610fd557600080fd5b50610814612c65565b348015610fea57600080fd5b506109476004803603602081101561100157600080fd5b5035612c79565b34801561101457600080fd5b506106c2612cef565b34801561102957600080fd5b50610814612cf5565b34801561103e57600080fd5b506106fe612d04565b34801561105357600080fd5b506106c2612d65565b34801561106857600080fd5b506106c2612d6b565b34801561107d57600080fd5b506109476004803603602081101561109457600080fd5b50356001600160a01b0316612d71565b3480156110b057600080fd5b50610947600480360360c08110156110c757600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612df5565b3480156110f857600080fd5b506109476004803603604081101561110f57600080fd5b506001600160a01b0381351690602001351515612e94565b34801561113357600080fd5b506106c2612f71565b34801561114857600080fd5b506106c2612f77565b34801561115d57600080fd5b506106c2612f7d565b34801561117257600080fd5b506107c16004803603604081101561118957600080fd5b506001600160a01b038135169060200135612fc2565b3480156111ab57600080fd5b50610947600480360360208110156111c257600080fd5b50356001600160a01b031661302a565b3480156111de57600080fd5b506106c2600480360360208110156111f557600080fd5b50356001600160a01b03166130c6565b34801561121157600080fd5b506107c16004803603604081101561122857600080fd5b506001600160a01b038135169060200135613117565b34801561124a57600080fd5b506112716004803603602081101561126157600080fd5b50356001600160a01b031661312b565b604080516001600160a01b0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b3480156112c857600080fd5b506106c261320b565b3480156112dd57600080fd5b50610947600480360360208110156112f457600080fd5b50356001600160a01b0316613211565b34801561131057600080fd5b506108146132ad565b34801561132557600080fd5b506107c16004803603602081101561133c57600080fd5b50356001600160a01b03166132bc565b34801561135857600080fd5b506109476004803603604081101561136f57600080fd5b506001600160a01b03813516906020013515156132d1565b34801561139357600080fd5b50610947600480360360408110156113aa57600080fd5b506001600160a01b038135169060200135151561335e565b3480156113ce57600080fd5b50610947600480360360208110156113e557600080fd5b50356133eb565b3480156113f857600080fd5b506109476004803603604081101561140f57600080fd5b81019060208101813564010000000081111561142a57600080fd5b82018360208201111561143c57600080fd5b8035906020019184602083028401116401000000008311171561145e57600080fd5b9193509150351515613461565b34801561147757600080fd5b506109476004803603602081101561148e57600080fd5b503561358b565b3480156114a157600080fd5b50610814613601565b3480156114b657600080fd5b50610947600480360360208110156114cd57600080fd5b50356001600160a01b0316613610565b3480156114e957600080fd5b50610814613694565b3480156114fe57600080fd5b506109476004803603602081101561151557600080fd5b50356001600160a01b03166136a3565b34801561153157600080fd5b506106c2613753565b34801561154657600080fd5b506106c26004803603604081101561155d57600080fd5b506001600160a01b0381358116916020013516613759565b34801561158157600080fd5b506106c2613784565b34801561159657600080fd5b50610947600480360360208110156115ad57600080fd5b5035151561378a565b3480156115c257600080fd5b506106c2613806565b3480156115d757600080fd5b506106c261380c565b3480156115ec57600080fd5b506106c2613812565b34801561160157600080fd5b50610814613818565b34801561161657600080fd5b506106c2613827565b34801561162b57600080fd5b506109476004803603602081101561164257600080fd5b503561386c565b34801561165557600080fd5b506109476004803603602081101561166c57600080fd5b503561391b565b34801561167f57600080fd5b506106c2613986565b34801561169457600080fd5b506106c261398c565b3480156116a957600080fd5b50611271600480360360208110156116c057600080fd5b5035613992565b3480156116d357600080fd5b50610947600480360360208110156116ea57600080fd5b50356001600160a01b03166139f8565b34801561170657600080fd5b506106c2613b06565b34801561171b57600080fd5b506109476004803603602081101561173257600080fd5b5035613b0c565b34801561174557600080fd5b506109476004803603602081101561175c57600080fd5b5035613b73565b34801561176f57600080fd5b506106c2613bee565b600b5481565b60235481565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118105780601f106117e557610100808354040283529160200191611810565b820191906000526020600020905b8154815290600101906020018083116117f357829003601f168201915b5050505050905090565b602a5481565b600061183461182d613c55565b8484613c59565b5060015b92915050565b60195481565b60285481565b6039546001600160a01b031681565b600f6020526000908152604090205481565b601f5481565b6006546001600160a01b031681565b60025490565b60295481565b60116020526000908152604090205481565b60225481565b6118ac613c55565b6001600160a01b03166118bd612c65565b6001600160a01b031614611906576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b602a869055602b859055602784905560288390556029829055602c81905561193e81611938848187818a818e8e613bf4565b90613bf4565b602d55505050505050565b6000611956848484613d45565b6119c684611962613c55565b6119c18560405180606001604052806028815260200161594f602891396001600160a01b038a166000908152600160205260408120906119a0613c55565b6001600160a01b031681526020810191909152604001600020549190614737565b613c59565b5060019392505050565b60365481565b603a5481565b6008546001600160a01b031681565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015611a3057600080fd5b505afa158015611a44573d6000803e3d6000fd5b505050506040513d6020811015611a5a57600080fd5b5051905090565b60055460ff1690565b611a72613c55565b6001600160a01b0316611a83612c65565b6001600160a01b031614611acc576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6008546040805163031e79db60e41b81526001600160a01b038481166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015611b1a57600080fd5b505af1158015611b2e573d6000803e3d6000fd5b5050505050565b60275481565b6018546001600160a01b031681565b6000611834611b57613c55565b846119c18560016000611b68613c55565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613bf4565b611ba0613c55565b6001600160a01b0316611bb1612c65565b6001600160a01b031614611bfa576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b60085460408051630766c9b560e31b81526004810184905290516001600160a01b0390921691633b364da89160248082019260009290919082900301818387803b158015611b1a57600080fd5b611c4f613c55565b6001600160a01b0316611c60612c65565b6001600160a01b031614611ca9576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b60085460408051633d0c896360e01b81526001600160a01b03848116600483015291519190921691633d0c896391602480830192600092919082900301818387803b158015611cf757600080fd5b505af1158015611d0b573d6000803e3d6000fd5b5050600780546001600160a01b0319166001600160a01b03858116918217928390556040519216935091507fc50953975bfb7dc05da466bc18236bf737c11097c9cc7ef9d079bc7ed96f03ae90600090a350565b611d67613c55565b6001600160a01b0316611d78612c65565b6001600160a01b031614611dc1576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601780546001600160a01b0319166001600160a01b0392909216919091179055565b611deb613c55565b6001600160a01b0316611dfc612c65565b6001600160a01b031614611e45576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b611e4e816147ce565b50565b60375460ff1681565b611e62613c55565b6001600160a01b0316611e73612c65565b6001600160a01b031614611ebc576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6001600160a01b038281166000818152603b6020526040808220805460ff1916861515179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b158015611f2157600080fd5b505af1158015611f35573d6000803e3d6000fd5b505050505050565b603754610100900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b601b5481565b603a5442101590565b6008546040805163bc4c4b3760e01b815233600482015260006024820181905291516001600160a01b039093169263bc4c4b3792604480840193602093929083900390910190829087803b158015611fd557600080fd5b505af1158015611fe9573d6000803e3d6000fd5b505050506040513d6020811015611fff57600080fd5b5050565b61200b613c55565b6001600160a01b031661201c612c65565b6001600160a01b031614612065576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b603980546001600160a01b0319166001600160a01b03848116918217928390559182166000908152603e6020526040808220805460ff19166001179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b1580156120e157600080fd5b505af11580156120f5573d6000803e3d6000fd5b505050506121048260016132d1565b6001600160a01b038082166000818152603e6020526040808220805460ff19166001179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b15801561216857600080fd5b505af115801561217c573d6000803e3d6000fd5b50505050611fff8160016132d1565b6001600160a01b03166000908152603c602052604090205460ff1690565b6121b1613c55565b6001600160a01b03166121c2612c65565b6001600160a01b03161461220b576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6037805460ff1916911515919091179055565b600a5481565b6001600160a01b03166000908152603d602052604090205460ff1690565b61224a613c55565b6001600160a01b031661225b612c65565b6001600160a01b0316146122a4576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b603a55565b600854604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015611a3057600080fd5b6122f6613c55565b6001600160a01b0316612307612c65565b6001600160a01b031614612350576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6006546001600160a01b038281169116141561239d5760405162461bcd60e51b81526004018080602001828103825260288152602001806157cb6028913960400191505060405180910390fd5b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600854604080516370a0823160e01b81526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561244b57600080fd5b505afa15801561245f573d6000803e3d6000fd5b505050506040513d602081101561247557600080fd5b505192915050565b602d5481565b61248b613c55565b6001600160a01b031661249c612c65565b6001600160a01b0316146124e5576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b60006124ef611a61565b60095460ff91909116600a0a83029150611fff9030906001600160a01b031683614b14565b600854604080516001624d3b8760e01b03198152600481018490529051600092839283926001600160a01b039092169163ffb2c4799160248082019260609290919082900301818787803b15801561256b57600080fd5b505af115801561257f573d6000803e3d6000fd5b505050506040513d606081101561259557600080fd5b5080516020808301516040938401518451848152928301829052828501819052606083018990529351929650945091925032916000917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a350505050565b6001600160a01b031660009081526020819052604090205490565b6009546001600160a01b031681565b61262d613c55565b6001600160a01b031661263e612c65565b6001600160a01b031614612687576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b600d5481565b6015546001600160a01b031681565b6126f4613c55565b6001600160a01b0316612705612c65565b6001600160a01b03161461274e576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b60238690556024859055602084905560218390556022829055602581905561278081611938848187818a818e8e613bf4565b602655505050505050565b60106020526000908152604090205481565b60126020526000908152604090205481565b6127b7613c55565b6001600160a01b03166127c8612c65565b6001600160a01b031614612811576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b62030d40811015801561282757506207a1208111155b6128625760405162461bcd60e51b81526004018080602001828103825260398152602001806157926039913960400191505060405180910390fd5b6038548114156128a35760405162461bcd60e51b81526004018080602001828103825260318152602001806157616031913960400191505060405180910390fd5b60385460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3603855565b6128de613c55565b6001600160a01b03166128ef612c65565b6001600160a01b031614612938576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6008546001600160a01b03828116911614156129855760405162461bcd60e51b8152600401808060200182810382526032815260200180615a016032913960400191505060405180910390fd5b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129cd57600080fd5b505afa1580156129e1573d6000803e3d6000fd5b505050506040513d60208110156129f757600080fd5b50516001600160a01b031614612a3e5760405162461bcd60e51b81526004018080602001828103825260458152602001806159976045913960600191505060405180910390fd5b806001600160a01b03166331e79db0826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015612a8d57600080fd5b505af1158015612aa1573d6000803e3d6000fd5b50506040805163031e79db60e41b815230600482015290516001600160a01b03851693506331e79db09250602480830192600092919082900301818387803b158015612aec57600080fd5b505af1158015612b00573d6000803e3d6000fd5b50506006546040805163031e79db60e41b81526001600160a01b039283166004820152905191851693506331e79db0925060248082019260009290919082900301818387803b158015612b5257600080fd5b505af1158015612b66573d6000803e3d6000fd5b50506008546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b612bd1613c55565b6001600160a01b0316612be2612c65565b6001600160a01b031614612c2b576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601580546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b60055461010090046001600160a01b031690565b612c81613c55565b6001600160a01b0316612c92612c65565b6001600160a01b031614612cdb576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b612ce3611a61565b60ff16600a0a02600b55565b600e5481565b6013546001600160a01b031681565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118105780601f106117e557610100808354040283529160200191611810565b60355481565b601d5481565b612d79613c55565b6001600160a01b0316612d8a612c65565b6001600160a01b031614612dd3576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601680546001600160a01b0319166001600160a01b0392909216919091179055565b612dfd613c55565b6001600160a01b0316612e0e612c65565b6001600160a01b031614612e57576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601c869055601d8590556019849055601a839055601b829055601e819055612e8981611938848187818a818e8e613bf4565b601f55505050505050565b612e9c613c55565b6001600160a01b0316612ead612c65565b6001600160a01b031614612ef6576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415612f675760405162461bcd60e51b815260040180806020018281038252604a815260200180615819604a913960600191505060405180910390fd5b611fff8282614c6f565b60385481565b60215481565b60085460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec916004808301926020929190829003018186803b158015611a3057600080fd5b6000611834612fcf613c55565b846119c185604051806060016040528060258152602001615a946025913960016000612ff9613c55565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190614737565b613032613c55565b6001600160a01b0316613043612c65565b6001600160a01b03161461308c576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601380546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b600854604080516302a2e74960e61b81526001600160a01b0384811660048301529151600093929092169163a8b9d24091602480820192602092909190829003018186803b15801561244b57600080fd5b6000611834613124613c55565b8484613d45565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b031663fbcbc0f18a6040518263ffffffff1660e01b815260040180826001600160a01b031681526020019150506101006040518083038186803b15801561319a57600080fd5b505afa1580156131ae573d6000803e3d6000fd5b505050506040513d6101008110156131c557600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e090970151959e50939c50919a509850965094509092509050919395975091939597565b602c5481565b613219613c55565b6001600160a01b031661322a612c65565b6001600160a01b031614613273576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601480546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b6014546001600160a01b031681565b603f6020526000908152604090205460ff1681565b6132d9613c55565b6001600160a01b03166132ea612c65565b6001600160a01b031614613333576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152603c60205260409020805460ff1916911515919091179055565b613366613c55565b6001600160a01b0316613377612c65565b6001600160a01b0316146133c0576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152603d60205260409020805460ff1916911515919091179055565b6133f3613c55565b6001600160a01b0316613404612c65565b6001600160a01b03161461344d576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b613455611a61565b60ff16600a0a02600d55565b613469613c55565b6001600160a01b031661347a612c65565b6001600160a01b0316146134c3576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b60005b828110156135185781603c60008686858181106134df57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016134c6565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051808060200183151581526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b613593613c55565b6001600160a01b03166135a4612c65565b6001600160a01b0316146135ed576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6135f5611a61565b60ff16600a0a02600c55565b6017546001600160a01b031681565b613618613c55565b6001600160a01b0316613629612c65565b6001600160a01b031614613672576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6016546001600160a01b031681565b6136ab613c55565b6001600160a01b03166136bc612c65565b6001600160a01b031614613705576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6008546040805163d644c36560e01b81526001600160a01b0384811660048301529151919092169163d644c36591602480830192600092919082900301818387803b158015611b1a57600080fd5b60265481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600c5481565b613792613c55565b6001600160a01b03166137a3612c65565b6001600160a01b0316146137ec576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b603780549115156101000261ff0019909216919091179055565b60205481565b601c5481565b60255481565b6007546001600160a01b031681565b6008546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec0916004808301926020929190829003018186803b158015611a3057600080fd5b613874613c55565b6001600160a01b0316613885612c65565b6001600160a01b0316146138ce576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6008546040805163e98030c760e01b81526004810184905290516001600160a01b039092169163e98030c79160248082019260009290919082900301818387803b158015611b1a57600080fd5b613923613c55565b6001600160a01b0316613934612c65565b6001600160a01b03161461397d576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b611e4e81614d9d565b601a5481565b60245481565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b0316635183d6fd8a6040518263ffffffff1660e01b8152600401808281526020019150506101006040518083038186803b15801561319a57600080fd5b613a00613c55565b6001600160a01b0316613a11612c65565b6001600160a01b031614613a5a576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6001600160a01b038116613a9f5760405162461bcd60e51b81526004018080602001828103825260268152602001806157196026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b602b5481565b613b14613c55565b6001600160a01b0316613b25612c65565b6001600160a01b031614613b6e576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b603655565b613b7b613c55565b6001600160a01b0316613b8c612c65565b6001600160a01b031614613bd5576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b613bdd611a61565b60ff16600a0a8102600a8190555050565b601e5481565b600082820183811015613c4e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b038316613c9e5760405162461bcd60e51b8152600401808060200182810382526024815260200180615a336024913960400191505060405180910390fd5b6001600160a01b038216613ce35760405162461bcd60e51b815260040180806020018281038252602281526020018061573f6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166000908152603b602052604090205460ff1615613d9d5760405162461bcd60e51b81526004018080602001828103825260248152602001806158a06024913960400191505060405180910390fd5b6001600160a01b0382166000908152603b602052604090205460ff1615613df55760405162461bcd60e51b81526004018080602001828103825260248152602001806158a06024913960400191505060405180910390fd5b6001600160a01b038316613e3a5760405162461bcd60e51b81526004018080602001828103825260238152602001806156f66023913960400191505060405180910390fd5b6001600160a01b038216613e7f5760405162461bcd60e51b81526004018080602001828103825260238152602001806156f66023913960400191505060405180910390fd5b80613e9557613e9083836000614b14565b614732565b6000613e9f612c65565b6001600160a01b0316846001600160a01b031614158015613ec857506001600160a01b03831615155b8015613edf57506001600160a01b03831661dead14155b8015613f0357506001600160a01b0384166000908152603f602052604090205460ff165b15613fc3576001600160a01b0384166000908152603d602052604090205460ff16613f6957600a54821115613f695760405162461bcd60e51b81526004018080602001828103825260288152602001806158c46028913960400191505060405180910390fd5b5060198054602e55601a8054602f55601b8054603055601c8054603155601d80546032819055603355601f805460345560205490955560215490935560225490915560235490556024549055602554601e55602654905560015b6000613fcd611f75565b90508061402b576001600160a01b0385166000908152603e602052604090205460ff1661402b5760405162461bcd60e51b815260040180806020018281038252603d815260200180615a57603d913960400191505060405180910390fd5b614033612c65565b6001600160a01b0316856001600160a01b03161415801561405e5750600754600160a01b900460ff16155b80156140675750805b801561408b57506001600160a01b0384166000908152603f602052604090205460ff165b80156140a557506006546001600160a01b03868116911614155b80156140ca57506001600160a01b0384166000908152603c602052604090205460ff16155b1561425257600e546001600160a01b038616600090815260116020526040902054429101101561410e576001600160a01b0385166000908152601260205260408120555b6001600160a01b0385166000908152603d602052604090205460ff1661418957600b546001600160a01b038616600090815260126020526040902054840111156141895760405162461bcd60e51b81526004018080602001828103825260428152602001806158ec6042913960600191505060405180910390fd5b6001600160a01b038516600090815260126020526040902054156141ca576001600160a01b03851660009081526012602052604090208054840190556141f6565b6001600160a01b0385166000908152601160209081526040808320429055601290915290208054840190555b60198054602e55601a8054602f55601b8054603055601c8054603155601d8054603255601e8054603355601f8054603455602754909655602854909455602954909255602a549055602b549055602c549055602d549055600191505b600061425d306125fb565b600c549091508110158280156142705750805b80156142865750600754600160a01b900460ff16155b80156142ab57506001600160a01b0387166000908152603f602052604090205460ff16155b80156142c557506009546001600160a01b03888116911614155b80156142df57506009546001600160a01b03878116911614155b15614328576007805460ff60a01b1916600160a01b179055600c54614303906147ce565b600061430e306125fb565b905061431981614d9d565b506007805460ff60a01b191690555b60008380156143415750600754600160a01b900460ff16155b6001600160a01b0389166000908152603c602052604090205490915060ff168061438357506001600160a01b0387166000908152603c602052604090205460ff165b806143955750603754610100900460ff165b1561439e575060005b80806143a75750845b15614489576001600160a01b0388166000908152603c602052604090205460ff16806143eb57506001600160a01b0387166000908152603c602052604090205460ff165b156143f557614484565b600061440e601e54601f54614feb90919063ffffffff16565b9050600061442760646144218a85615048565b906150a1565b905060006144456064614421601e548c61504890919063ffffffff16565b905061445b816144558b85614feb565b90614feb565b98506144688b3084614b14565b600954614480908c906001600160a01b031683614b14565b5050505b614517565b6001600160a01b0388166000908152603c602052604090205460ff16806144c857506001600160a01b0387166000908152603c602052604090205460ff165b156144d257614517565b60006144ee6064614421601e548a61504890919063ffffffff16565b90506144fa8782614feb565b600954909750614515908a906001600160a01b031683614b14565b505b614522888888614b14565b841561453057614530615108565b6008546001600160a01b031663e30443bc8961454b816125fb565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561459157600080fd5b505af19250505080156145a2575060015b506008546001600160a01b031663e30443bc886145be816125fb565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561460457600080fd5b505af1925050508015614615575060015b5060355460075442919091101590600160a01b900460ff161580156146375750805b1561472b57603854603654603580549091019055600854604080516001624d3b8760e01b031981526004810184905290516001600160a01b039092169163ffb2c479916024808201926060929091908290030181600087803b15801561469c57600080fd5b505af19250505080156146d057506040513d60608110156146bc57600080fd5b508051602082015160409092015190919060015b6146d957614729565b604080518481526020810184905280820183905260608101869052905132916001917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a35050505b505b5050505050505b505050565b600081848411156147c65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561478b578181015183820152602001614773565b50505050905090810190601f1680156147b85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006019546000146147fa576147f760646144216019548761504890919063ffffffff16565b92505b601a541561481f5761481c6064614421601a548761504890919063ffffffff16565b91505b601b5415614844576148416064614421601b548761504890919063ffffffff16565b90505b828403829003819003600061485a8660026150a1565b905060006148698360026150a1565b905060006148778483614feb565b90504761488384615134565b600061488f4783614feb565b905060008060006019546000146148bd576148ba60646144216019548761504890919063ffffffff16565b92505b601a54156148e2576148df6064614421601a548761504890919063ffffffff16565b91505b601b5415614907576149046064614421601b548761504890919063ffffffff16565b90505b8284038290038190038684156149a2576016546001600160a01b03161561494b576016546013546149469187916001600160a01b0391821691166152c7565b6149a2565b6013546040516000916001600160a01b03169087908381818185875af1925050503d8060008114614998576040519150601f19603f3d011682016040523d82523d6000602084013e61499d565b606091505b505050505b8315614a33576017546001600160a01b0316156149dc576017546014546149d79186916001600160a01b0391821691166152c7565b614a33565b6014546040516000916001600160a01b03169086908381818185875af1925050503d8060008114614a29576040519150601f19603f3d011682016040523d82523d6000602084013e614a2e565b606091505b505050505b8215614ab95760375460ff1615614a6257601554614a5d90849030906001600160a01b03166152c7565b614ab9565b6015546040516000916001600160a01b03169085908381818185875af1925050503d8060008114614aaf576040519150601f19603f3d011682016040523d82523d6000602084013e614ab4565b606091505b505050505b614ac38183615460565b604080518a8152602081018490528082018a905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1505050505050505050505050505050565b6001600160a01b038316614b595760405162461bcd60e51b81526004018080602001828103825260258152602001806159dc6025913960400191505060405180910390fd5b6001600160a01b038216614b9e5760405162461bcd60e51b81526004018080602001828103825260238152602001806156f66023913960400191505060405180910390fd5b614ba9838383614732565b614be6816040518060600160405280602681526020016157f3602691396001600160a01b0386166000908152602081905260409020549190614737565b6001600160a01b038085166000908152602081905260408082209390935590841681522054614c159082613bf4565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b0382166000908152603f602052604090205460ff1615158115151415614ccd5760405162461bcd60e51b815260040180806020018281038252603d815260200180615863603d913960400191505060405180910390fd5b6001600160a01b0382166000908152603f60205260409020805460ff19168215801591909117909155614d61576008546040805163031e79db60e41b81526001600160a01b038581166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015614d4857600080fd5b505af1158015614d5c573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6008546007546001600160a01b039182169160009182911615614ec957614dc48430615518565b600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015614e0f57600080fd5b505afa158015614e23573d6000803e3d6000fd5b505050506040513d6020811015614e3957600080fd5b50516007546008546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193945091169163a9059cbb916044808201926020929091908290030181600087803b158015614e9657600080fd5b505af1158015614eaa573d6000803e3d6000fd5b505050506040513d6020811015614ec057600080fd5b50519150614f3e565b47614ed385615134565b6000614edf4783614feb565b6040519093508391506000906001600160a01b0387169083908381818185875af1925050503d8060008114614f30576040519150601f19603f3d011682016040523d82523d6000602084013e614f35565b606091505b50909550505050505b8115614fe5576008546040805163b0c7ce3760e01b81526004810184905290516001600160a01b039092169163b0c7ce379160248082019260009290919082900301818387803b158015614f9157600080fd5b505af1158015614fa5573d6000803e3d6000fd5b5050604080518781526020810185905281517f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc39450908190039091019150a15b50505050565b600082821115615042576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008261505757506000611838565b8282028284828161506457fe5b0414613c4e5760405162461bcd60e51b815260040180806020018281038252602181526020018061592e6021913960400191505060405180910390fd5b60008082116150f7576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161510057fe5b049392505050565b602e54601955602f54601a55603054601b55603154601c55603254601d55603354601e55603454601f55565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061516357fe5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156151b757600080fd5b505afa1580156151cb573d6000803e3d6000fd5b505050506040513d60208110156151e157600080fd5b50518151829060019081106151f257fe5b6001600160a01b0392831660209182029290920101526006546152189130911684613c59565b60065460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561529e578181015183820152602001615286565b505050509050019650505050505050600060405180830381600087803b158015611f2157600080fd5b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561532c57600080fd5b505afa158015615340573d6000803e3d6000fd5b505050506040513d602081101561535657600080fd5b50518151829060009061536557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061539357fe5b6001600160a01b0392831660209182029290920181019190915260065460405163b6f9de9560e01b815260006004820181815287861660448401524260648401819052608060248501908152885160848601528851959097169663b6f9de95968c9694958a958c95939260a49092019187810191028083838b5b8381101561542557818101518382015260200161540d565b50505050905001955050505050506000604051808303818588803b15801561544c57600080fd5b505af115801561472b573d6000803e3d6000fd5b6006546154789030906001600160a01b031684613c59565b6006546009546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156154ed57600080fd5b505af1158015615501573d6000803e3d6000fd5b50505050506040513d6060811015614fe557600080fd5b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061554957fe5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561559d57600080fd5b505afa1580156155b1573d6000803e3d6000fd5b505050506040513d60208110156155c757600080fd5b50518151829060019081106155d857fe5b6001600160a01b03928316602091820292909201015260075482519116908290600290811061560357fe5b6001600160a01b0392831660209182029290920101526006546156299130911685613c59565b600654604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b038681166064850152426084850181905260a060448601908152875160a487015287519290961695635c11d795958a9589948b9493919260c40190602080880191028083838b5b838110156156af578181015183820152602001615697565b505050509050019650505050505050600060405180830381600087803b1580156156d857600080fd5b505af11580156156ec573d6000803e3d6000fd5b5050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734253543a2043616e6e6f742075706461746520676173466f7250726f63657373696e6720746f2073616d652076616c75654253543a20676173466f7250726f63657373696e67206d757374206265206265747765656e203230302c30303020616e64203530302c3030304253543a2054686520726f7574657220616c7265616479206861732074686174206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654253543a205468652050616e63616b655377617020706169722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657250616972734253543a204175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c7565426c61636b6c697374656420616464726573732063616e6e6f74207472616e73666572215472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e53656c6c207472616e7366657220616d6f756e74206578636565647320746865206d617853656c6c416d6f756e7420666f722074686520676976656e2074696d652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724253543a20546865206e6577206469766964656e6420747261636b6572206d757374206265206f776e6564206279207468652042535420746f6b656e20636f6e747261637445524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734253543a20546865206469766964656e6420747261636b657220616c7265616479206861732074686174206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734253543a2054686973206163636f756e742063616e6e6f742073656e6420746f6b656e7320756e74696c2074726164696e6720697320656e61626c656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ed2f5182efa2c7fa5c8b64e10a7967c8dab04fedfe41df1aee673128b9cea0af64736f6c634300070600336080604052600880546001600160a01b03191690553480156200002157600080fd5b5060408051808201825260148082527f4253545f4469766964656e645f547261636b6572000000000000000000000000602080840182815285518087019096529285528401528151919291839183916200007e916003916200012e565b508051620000949060049060208401906200012e565b50506005805460ff191660121790555050600980546001600160a01b03191633179055506000620000c46200012a565b600d80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610e10601555670de0b6b3a7640000601655620001da565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620001665760008555620001b1565b82601f106200018157805160ff1916838001178555620001b1565b82800160010185558215620001b1579182015b82811115620001b157825182559160200191906001019062000194565b50620001bf929150620001c3565b5090565b5b80821115620001bf5760008155600101620001c4565b61270580620001ea6000396000f3fe6080604052600436106102555760003560e01c806385a6b3ae11610139578063be10b614116100b6578063e76ed0e31161007a578063e76ed0e314610919578063e7841ec01461092e578063e98030c714610943578063f2fde38b1461096d578063fbcbc0f1146109a0578063ffb2c479146109d35761025c565b8063be10b61414610848578063cd446e221461085d578063d644c36514610872578063dd62ed3e146108a5578063e30443bc146108e05761025c565b8063a8b9d240116100fd578063a8b9d24014610744578063a9059cbb14610777578063aafd847a146107b0578063b0c7ce37146107e3578063bc4c4b371461080d5761025c565b806385a6b3ae1461067d5780638da5cb5b1461069257806391b89fba146106c357806395d89b41146106f6578063a457c2d71461070b5761025c565b8063313ce567116101d25780634e7b827f116101965780634e7b827f146105635780635183d6fd146105965780636a4740021461060b5780636f2789ec1461062057806370a0823114610635578063715018a6146106685761025c565b8063313ce5671461046f57806331e79db01461049a57806339509351146104cd5780633b364da8146105065780633d0c8963146105305761025c565b8063226cfa3d11610219578063226cfa3d1461037e57806323b872dd146103b157806327ce0147146103f45780632a150127146104275780633009a6091461045a5761025c565b806303c833021461026157806306fdde031461026b578063095ea7b3146102f557806309bbedde1461034257806318160ddd146103695761025c565b3661025c57005b600080fd5b610269610a1b565b005b34801561027757600080fd5b50610280610aac565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102ba5781810151838201526020016102a2565b50505050905090810190601f1680156102e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030157600080fd5b5061032e6004803603604081101561031857600080fd5b506001600160a01b038135169060200135610b42565b604080519115158252519081900360200190f35b34801561034e57600080fd5b50610357610b60565b60408051918252519081900360200190f35b34801561037557600080fd5b50610357610b66565b34801561038a57600080fd5b50610357600480360360208110156103a157600080fd5b50356001600160a01b0316610b6c565b3480156103bd57600080fd5b5061032e600480360360608110156103d457600080fd5b506001600160a01b03813581169160208101359091169060400135610b7e565b34801561040057600080fd5b506103576004803603602081101561041757600080fd5b50356001600160a01b0316610c05565b34801561043357600080fd5b506102696004803603602081101561044a57600080fd5b50356001600160a01b0316610c64565b34801561046657600080fd5b50610357610ccf565b34801561047b57600080fd5b50610484610cd5565b6040805160ff9092168252519081900360200190f35b3480156104a657600080fd5b50610269600480360360208110156104bd57600080fd5b50356001600160a01b0316610cde565b3480156104d957600080fd5b5061032e600480360360408110156104f057600080fd5b506001600160a01b038135169060200135610dea565b34801561051257600080fd5b506102696004803603602081101561052957600080fd5b5035610e38565b34801561053c57600080fd5b506102696004803603602081101561055357600080fd5b50356001600160a01b0316610ea9565b34801561056f57600080fd5b5061032e6004803603602081101561058657600080fd5b50356001600160a01b0316610f2d565b3480156105a257600080fd5b506105c0600480360360208110156105b957600080fd5b5035610f42565b604080516001600160a01b0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561061757600080fd5b506102696110a1565b34801561062c57600080fd5b506103576110d8565b34801561064157600080fd5b506103576004803603602081101561065857600080fd5b50356001600160a01b03166110de565b34801561067457600080fd5b506102696110f9565b34801561068957600080fd5b506103576111a5565b34801561069e57600080fd5b506106a76111ab565b604080516001600160a01b039092168252519081900360200190f35b3480156106cf57600080fd5b50610357600480360360208110156106e657600080fd5b50356001600160a01b03166111ba565b34801561070257600080fd5b506102806111c5565b34801561071757600080fd5b5061032e6004803603604081101561072e57600080fd5b506001600160a01b038135169060200135611226565b34801561075057600080fd5b506103576004803603602081101561076757600080fd5b50356001600160a01b031661128e565b34801561078357600080fd5b5061032e6004803603604081101561079a57600080fd5b506001600160a01b0381351690602001356112ba565b3480156107bc57600080fd5b50610357600480360360208110156107d357600080fd5b50356001600160a01b03166112ce565b3480156107ef57600080fd5b506102696004803603602081101561080657600080fd5b50356112e9565b34801561081957600080fd5b5061032e6004803603604081101561083057600080fd5b506001600160a01b03813516906020013515156113b2565b34801561085457600080fd5b50610357611491565b34801561086957600080fd5b506106a7611497565b34801561087e57600080fd5b506102696004803603602081101561089557600080fd5b50356001600160a01b03166114a6565b3480156108b157600080fd5b50610357600480360360408110156108c857600080fd5b506001600160a01b0381358116916020013516611529565b3480156108ec57600080fd5b506102696004803603604081101561090357600080fd5b506001600160a01b038135169060200135611554565b34801561092557600080fd5b506106a761170a565b34801561093a57600080fd5b50610357611719565b34801561094f57600080fd5b506102696004803603602081101561096657600080fd5b503561171f565b34801561097957600080fd5b506102696004803603602081101561099057600080fd5b50356001600160a01b0316611845565b3480156109ac57600080fd5b506105c0600480360360208110156109c357600080fd5b50356001600160a01b0316611948565b3480156109df57600080fd5b506109fd600480360360208110156109f657600080fd5b5035611abb565b60408051938452602084019290925282820152519081900360600190f35b6000610a25610b66565b11610a2f57600080fd5b3415610aaa57610a60610a40610b66565b610a4e34600160801b611bb9565b81610a5557fe5b600654919004611c19565b60065560408051348152905133917fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d78454116511919081900360200190a2600c54610aa69034611c19565b600c555b565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b385780601f10610b0d57610100808354040283529160200191610b38565b820191906000526020600020905b815481529060010190602001808311610b1b57829003601f168201915b5050505050905090565b6000610b56610b4f611c73565b8484611c77565b5060015b92915050565b600e5490565b60025490565b60146020526000908152604090205481565b6000610b8b848484611d63565b610bfb84610b97611c73565b610bf6856040518060600160405280602881526020016125bb602891396001600160a01b038a16600090815260016020526040812090610bd5611c73565b6001600160a01b031681526020810191909152604001600020549190611d9a565b611c77565b5060019392505050565b6001600160a01b0381166000908152600a6020526040812054600160801b90610c5490610c4f90610c49610c44610c3b886110de565b60065490611bb9565b611e31565b90611e41565b611e74565b81610c5b57fe5b0490505b919050565b6009546001600160a01b03163314610cad5760405162461bcd60e51b815260040180806020018281038252602a815260200180612570602a913960400191505060405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60125481565b60055460ff1690565b610ce6611c73565b6001600160a01b0316610cf76111ab565b6001600160a01b031614610d40576040805162461bcd60e51b815260206004820181905260248201526000805160206125e3833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152601360205260408120805460ff19166001179055610d6e908290611e87565b6040805163131836e760e21b8152600e60048201526001600160a01b0383166024820152905173839138075084fdb98e88e89112fea3699e04016791634c60db9c916044808301926000929190829003018186803b158015610dcf57600080fd5b505af4158015610de3573d6000803e3d6000fd5b5050505050565b6000610b56610df7611c73565b84610bf68560016000610e08611c73565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611c19565b610e40611c73565b6001600160a01b0316610e516111ab565b6001600160a01b031614610e9a576040805162461bcd60e51b815260206004820181905260248201526000805160206125e3833981519152604482015290519081900360640190fd5b670de0b6b3a764000002601655565b610eb1611c73565b6001600160a01b0316610ec26111ab565b6001600160a01b031614610f0b576040805162461bcd60e51b815260206004820181905260248201526000805160206125e3833981519152604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60136020526000908152604090205460ff1681565b600080600080600080600080600e73839138075084fdb98e88e89112fea3699e04016763deb3d89690916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610fa057600080fd5b505af4158015610fb4573d6000803e3d6000fd5b505050506040513d6020811015610fca57600080fd5b50518910610ff1575060009650600019955085945086935083925082915081905080611096565b6000600e73839138075084fdb98e88e89112fea3699e04016763d1aa9e7e90918c6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561104d57600080fd5b505af4158015611061573d6000803e3d6000fd5b505050506040513d602081101561107757600080fd5b5051905061108481611948565b98509850985098509850985098509850505b919395975091939597565b60405162461bcd60e51b81526004018080602001828103825260638152602001806126246063913960800191505060405180910390fd5b60155481565b6001600160a01b031660009081526020819052604090205490565b611101611c73565b6001600160a01b03166111126111ab565b6001600160a01b03161461115b576040805162461bcd60e51b815260206004820181905260248201526000805160206125e3833981519152604482015290519081900360640190fd5b600d546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600d80546001600160a01b0319169055565b600c5481565b600d546001600160a01b031690565b6000610b5a8261128e565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b385780601f10610b0d57610100808354040283529160200191610b38565b6000610b56611233611c73565b84610bf6856040518060600160405280602581526020016126ab602591396001600061125d611c73565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611d9a565b6001600160a01b0381166000908152600b6020526040812054610b5a906112b484610c05565b90611ee0565b6000610b566112c7611c73565b8484611d63565b6001600160a01b03166000908152600b602052604090205490565b6009546001600160a01b031633146113325760405162461bcd60e51b815260040180806020018281038252602a815260200180612570602a913960400191505060405180910390fd5b600061133c610b66565b1161134657600080fd5b80156113af57611365611357610b66565b610a4e83600160801b611bb9565b60065560408051828152905133917fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d78454116511919081900360200190a2600c546113ab9082611c19565b600c555b50565b60006113bc611c73565b6001600160a01b03166113cd6111ab565b6001600160a01b031614611416576040805162461bcd60e51b815260206004820181905260248201526000805160206125e3833981519152604482015290519081900360640190fd5b600061142184611f3d565b90508015611487576001600160a01b0384166000818152601460209081526040918290204290558151848152915186151593927fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09292908290030190a36001915050610b5a565b5060009392505050565b60165481565b6009546001600160a01b031681565b6114ae611c73565b6001600160a01b03166114bf6111ab565b6001600160a01b031614611508576040805162461bcd60e51b815260206004820181905260248201526000805160206125e3833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601360205260409020805460ff19169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61155c611c73565b6001600160a01b031661156d6111ab565b6001600160a01b0316146115b6576040805162461bcd60e51b815260206004820181905260248201526000805160206125e3833981519152604482015290519081900360640190fd5b6001600160a01b03821660009081526013602052604090205460ff16156115dc57611706565b6016548110611674576115ef8282611e87565b60408051632f0ad01760e21b8152600e60048201526001600160a01b038416602482015260448101839052905173839138075084fdb98e88e89112fea3699e0401679163bc2b405c916064808301926000929190829003018186803b15801561165757600080fd5b505af415801561166b573d6000803e3d6000fd5b505050506116f9565b61167f826000611e87565b6040805163131836e760e21b8152600e60048201526001600160a01b0384166024820152905173839138075084fdb98e88e89112fea3699e04016791634c60db9c916044808301926000929190829003018186803b1580156116e057600080fd5b505af41580156116f4573d6000803e3d6000fd5b505050505b6117048260016113b2565b505b5050565b6008546001600160a01b031681565b60125490565b611727611c73565b6001600160a01b03166117386111ab565b6001600160a01b031614611781576040805162461bcd60e51b815260206004820181905260248201526000805160206125e3833981519152604482015290519081900360640190fd5b610e1081101580156117965750620151808111155b6117d15760405162461bcd60e51b81526004018080602001828103825260498152602001806124586049913960600191505060405180910390fd5b6015548114156118125760405162461bcd60e51b815260040180806020018281038252603b8152602001806124c3603b913960400191505060405180910390fd5b60155460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601555565b61184d611c73565b6001600160a01b031661185e6111ab565b6001600160a01b0316146118a7576040805162461bcd60e51b815260206004820181905260248201526000805160206125e3833981519152604482015290519081900360640190fd5b6001600160a01b0381166118ec5760405162461bcd60e51b81526004018080602001828103825260268152602001806124fe6026913960400191505060405180910390fd5b600d546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080600080600080889750600e73839138075084fdb98e88e89112fea3699e0401676317e142d190918a6040518363ffffffff1660e01b815260040180838152602001826001600160a01b031681526020019250505060206040518083038186803b1580156119ba57600080fd5b505af41580156119ce573d6000803e3d6000fd5b505050506040513d60208110156119e457600080fd5b50519650600019955060008712611a4857601254871115611a1457601254611a0d908890612168565b9550611a48565b601254600e5460009110611a29576000611a38565b601254600e54611a3891611ee0565b9050611a448882611e41565b9650505b611a518861128e565b9450611a5c88610c05565b6001600160a01b038916600090815260146020526040902054909450925082611a86576000611a94565b601554611a94908490611c19565b9150428211611aa4576000611aae565b611aae8242611ee0565b9050919395975091939597565b600e546000908190819080611adb57505060125460009250829150611bb2565b6012546000805a90506000805b8984108015611af657508582105b15611ba157600e546001909501948510611b0f57600094505b6000600e6000018681548110611b2157fe5b60009182526020808320909101546001600160a01b03168083526014909152604090912054909150611b529061219c565b15611b6e57611b628160016113b2565b15611b6e576001909101905b60019092019160005a905080851115611b9857611b95611b8e8683611ee0565b8790611c19565b95505b9350611ae89050565b601285905590975095509193505050505b9193909250565b600082611bc857506000610b5a565b82820282848281611bd557fe5b0414611c125760405162461bcd60e51b815260040180806020018281038252602181526020018061259a6021913960400191505060405180910390fd5b9392505050565b600082820183811015611c12576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6001600160a01b038316611cbc5760405162461bcd60e51b81526004018080602001828103825260248152602001806126876024913960400191505060405180910390fd5b6001600160a01b038216611d015760405162461bcd60e51b81526004018080602001828103825260228152602001806125246022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60405162461bcd60e51b815260040180806020018281038252602a815260200180612546602a913960400191505060405180910390fd5b60008184841115611e295760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611dee578181015183820152602001611dd6565b50505050905090810190601f168015611e1b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008181811215610b5a57600080fd5b6000828201818312801590611e565750838112155b80611e6b5750600083128015611e6b57508381125b611c1257600080fd5b600080821215611e8357600080fd5b5090565b6000611e92836110de565b905080821115611eba576000611ea88383611ee0565b9050611eb484826121c3565b50611704565b80821015611704576000611ece8284611ee0565b9050611eda8482612227565b50505050565b600082821115611f37576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080611f498361128e565b9050801561215f576001600160a01b0383166000908152600b6020526040902054611f749082611c19565b6001600160a01b038085166000908152600b60205260408120929092556008541661203d576040516000906001600160a01b0386169084908381818185875af1925050503d8060008114611fe4576040519150601f19603f3d011682016040523d82523d6000602084013e611fe9565b606091505b50506008546040805186815290519294508493506001600160a01b0391821692918816917feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b69181900360200190a350612109565b6008546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561209357600080fd5b505af11580156120a7573d6000803e3d6000fd5b505050506040513d60208110156120bd57600080fd5b50516008546040805185815290519293506001600160a01b0391821692918716917feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b69181900360200190a35b80612157576001600160a01b0384166000908152600b60205260409020546121319083611ee0565b6001600160a01b0385166000908152600b60205260408120919091559250610c5f915050565b509050610c5f565b50600092915050565b600080821215801561217c57508282840313155b806121935750600082128015612193575082828403135b611f3757600080fd5b6000428211156121ae57506000610c5f565b6015546121bb4284611ee0565b101592915050565b6121cd828261226b565b6122076121e8610c4483600654611bb990919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490612168565b6001600160a01b039092166000908152600a602052604090209190915550565b612231828261235b565b61220761224c610c4483600654611bb990919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611e41565b6001600160a01b0382166122c6576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6122d260008383611704565b6002546122df9082611c19565b6002556001600160a01b0382166000908152602081905260409020546123059082611c19565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166123a05760405162461bcd60e51b81526004018080602001828103825260218152602001806126036021913960400191505060405180910390fd5b6123ac82600083611704565b6123e9816040518060600160405280602281526020016124a1602291396001600160a01b0385166000908152602081905260409020549190611d9a565b6001600160a01b03831660009081526020819052604090205560025461240f9082611ee0565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505056fe4253545f4469766964656e645f547261636b65723a20636c61696d57616974206d757374206265207570646174656420746f206265747765656e203120616e6420323420686f75727345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654253545f4469766964656e645f547261636b65723a2043616e6e6f742075706461746520636c61696d5761697420746f2073616d652076616c75654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734253545f4469766964656e645f547261636b65723a204e6f207472616e736665727320616c6c6f7765644f776e61626c653a2063616c6c6572206973206e6f7420746865206d617374657220636f6e7472616374536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e2066726f6d20746865207a65726f20616464726573734253545f4469766964656e645f547261636b65723a2077697468647261774469766964656e642064697361626c65642e20557365207468652027636c61696d272066756e6374696f6e206f6e20746865206d61696e2042535420636f6e74726163742e45524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204469fd47da36ab3b2456197cb8ed70e40643984947fd62417d77a7a7fc6bb08a64736f6c634300070600334253543a204175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c7565
Deployed Bytecode
0x6080604052600436106106a15760003560e01c80637a41865b1161035f578063c0246668116101d1578063e708a0f911610102578063f11a24d3116100a0578063f63743421161007a578063f6374342146116fa578063f7822e091461170f578063fa280d4414611739578063fce589d814611763576106a8565b8063f11a24d314611688578063f27fd2541461169d578063f2fde38b146116c7576106a8565b8063e7841ec0116100dc578063e7841ec01461160a578063e98030c71461161f578063e9d3d61e14611649578063ecfca89914611673576106a8565b8063e708a0f9146115cb578063e71dc3f5146115e0578063e76ed0e3146115f5576106a8565b8063d4d90c251161016f578063dd62ed3e11610149578063dd62ed3e1461153a578063e2f4560514611575578063e371f7cf1461158a578063e4a1b95f146115b6576106a8565b8063d4d90c25146114dd578063d644c365146114f2578063d85ba06314611525576106a8565b8063c492f046116101ab578063c492f046146113ec578063c55d22871461146b578063c9fa039614611495578063d2630cc3146114aa576106a8565b8063c02466681461134c578063c0a904a214611387578063c18bc195146113c2576106a8565b8063992c58e4116102ab578063a8b9d24011610249578063adb873bd11610223578063adb873bd146112bc578063ae5a17a7146112d1578063afcf2fc414611304578063b62496f514611319576106a8565b8063a8b9d240146111d2578063a9059cbb14611205578063ad56c13c1461123e576106a8565b8063a1dc92bc11610285578063a1dc92bc1461113c578063a26579ad14611151578063a457c2d714611166578063a5afbcb81461119f576106a8565b8063992c58e4146110a45780639a7a23d6146110ec5780639c1b8af514611127576106a8565b80638f7142601161031857806395d89b41116102f257806395d89b4114611032578063974d628c1461104757806398118cb41461105c57806398eac15614611071576106a8565b80638f71426014610fde57806394305f4e14611008578063956236411461101d576106a8565b80637a41865b14610ed357806381dcc26614610f06578063871c128d14610f3957806388bdd9be14610f635780638ae1cf2214610f965780638da5cb5b14610fc9576106a8565b80633d0c8963116105135780635cce86cd11610444578063700bb191116103e2578063715018a6116103bc578063715018a614610e4c57806378109e5414610e61578063783478ad14610e7657806379e02b4414610e8b576106a8565b8063700bb19114610dda57806370a0823114610e0457806370d5ae0514610e37576106a8565b806365b8dbc01161041e57806365b8dbc014610d355780636843cd8414610d685780636a486a8e14610d9b5780636d1b229d14610db0576106a8565b80635cce86cd14610cc3578063616c594614610cf657806364b0f65314610d20576106a8565b80634be8f8b1116104b15780634e83ff6f1161048b5780634e83ff6f14610c145780634fbee19314610c4f57806354503bf714610c825780635aa821a914610cae576106a8565b80634be8f8b114610bd55780634d33b1ef14610bea5780634e71d92d14610bff576106a8565b8063425b682e116104ed578063425b682e14610b5b578063455a439614610b70578063486b6d8614610bab57806349bd5a5e14610bc0576106a8565b80633d0c896314610acb5780633fe9092214610afe578063407e378714610b31576106a8565b80631bc8b18f116105ed57806330bb4cff1161058b57806335b5fb631161056557806335b5fb6314610a3e57806338b7692314610a535780633950935114610a685780633b364da814610aa1576106a8565b806330bb4cff146109cb578063313ce567146109e057806331e79db014610a0b576106a8565b806323b872dd116105c757806323b872dd14610949578063255e9d0a1461098c57806325b61703146109a15780632c1f5216146109b6576106a8565b80631bc8b18f146108b75780631fe70a98146108ea57806322d3e2aa146108ff576106a8565b80630d7f14411161065a57806313114a9d1161063457806313114a9d146108635780631694505e1461087857806318160ddd1461088d5780631a221dbb146108a2576106a8565b80630d7f1441146107ea578063122fe685146107ff5780631283f1ca14610830576106a8565b806302259e9e146106ad57806302df64d6146106d457806306fdde03146106e957806308b2a12c14610773578063095ea7b3146107885780630ccf2156146107d5576106a8565b366106a857005b600080fd5b3480156106b957600080fd5b506106c2611778565b60408051918252519081900360200190f35b3480156106e057600080fd5b506106c261177e565b3480156106f557600080fd5b506106fe611784565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610738578181015183820152602001610720565b50505050905090810190601f1680156107655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561077f57600080fd5b506106c261181a565b34801561079457600080fd5b506107c1600480360360408110156107ab57600080fd5b506001600160a01b038135169060200135611820565b604080519115158252519081900360200190f35b3480156107e157600080fd5b506106c261183e565b3480156107f657600080fd5b506106c2611844565b34801561080b57600080fd5b5061081461184a565b604080516001600160a01b039092168252519081900360200190f35b34801561083c57600080fd5b506106c26004803603602081101561085357600080fd5b50356001600160a01b0316611859565b34801561086f57600080fd5b506106c261186b565b34801561088457600080fd5b50610814611871565b34801561089957600080fd5b506106c2611880565b3480156108ae57600080fd5b506106c2611886565b3480156108c357600080fd5b506106c2600480360360208110156108da57600080fd5b50356001600160a01b031661188c565b3480156108f657600080fd5b506106c261189e565b34801561090b57600080fd5b50610947600480360360c081101561092257600080fd5b5080359060208101359060408101359060608101359060808101359060a001356118a4565b005b34801561095557600080fd5b506107c16004803603606081101561096c57600080fd5b506001600160a01b03813581169160208101359091169060400135611949565b34801561099857600080fd5b506106c26119d0565b3480156109ad57600080fd5b506106c26119d6565b3480156109c257600080fd5b506108146119dc565b3480156109d757600080fd5b506106c26119eb565b3480156109ec57600080fd5b506109f5611a61565b6040805160ff9092168252519081900360200190f35b348015610a1757600080fd5b5061094760048036036020811015610a2e57600080fd5b50356001600160a01b0316611a6a565b348015610a4a57600080fd5b506106c2611b35565b348015610a5f57600080fd5b50610814611b3b565b348015610a7457600080fd5b506107c160048036036040811015610a8b57600080fd5b506001600160a01b038135169060200135611b4a565b348015610aad57600080fd5b5061094760048036036020811015610ac457600080fd5b5035611b98565b348015610ad757600080fd5b5061094760048036036020811015610aee57600080fd5b50356001600160a01b0316611c47565b348015610b0a57600080fd5b5061094760048036036020811015610b2157600080fd5b50356001600160a01b0316611d5f565b348015610b3d57600080fd5b5061094760048036036020811015610b5457600080fd5b5035611de3565b348015610b6757600080fd5b506107c1611e51565b348015610b7c57600080fd5b5061094760048036036040811015610b9357600080fd5b506001600160a01b0381351690602001351515611e5a565b348015610bb757600080fd5b506107c1611f3d565b348015610bcc57600080fd5b50610814611f4b565b348015610be157600080fd5b506106c2611f6f565b348015610bf657600080fd5b506107c1611f75565b348015610c0b57600080fd5b50610947611f7e565b348015610c2057600080fd5b5061094760048036036040811015610c3757600080fd5b506001600160a01b0381358116916020013516612003565b348015610c5b57600080fd5b506107c160048036036020811015610c7257600080fd5b50356001600160a01b031661218b565b348015610c8e57600080fd5b5061094760048036036020811015610ca557600080fd5b503515156121a9565b348015610cba57600080fd5b506106c261221e565b348015610ccf57600080fd5b506107c160048036036020811015610ce657600080fd5b50356001600160a01b0316612224565b348015610d0257600080fd5b5061094760048036036020811015610d1957600080fd5b5035612242565b348015610d2c57600080fd5b506106c26122a9565b348015610d4157600080fd5b5061094760048036036020811015610d5857600080fd5b50356001600160a01b03166122ee565b348015610d7457600080fd5b506106c260048036036020811015610d8b57600080fd5b50356001600160a01b03166123fa565b348015610da757600080fd5b506106c261247d565b348015610dbc57600080fd5b5061094760048036036020811015610dd357600080fd5b5035612483565b348015610de657600080fd5b5061094760048036036020811015610dfd57600080fd5b5035612514565b348015610e1057600080fd5b506106c260048036036020811015610e2757600080fd5b50356001600160a01b03166125fb565b348015610e4357600080fd5b50610814612616565b348015610e5857600080fd5b50610947612625565b348015610e6d57600080fd5b506106c26126d7565b348015610e8257600080fd5b506108146126dd565b348015610e9757600080fd5b50610947600480360360c0811015610eae57600080fd5b5080359060208101359060408101359060608101359060808101359060a001356126ec565b348015610edf57600080fd5b506106c260048036036020811015610ef657600080fd5b50356001600160a01b031661278b565b348015610f1257600080fd5b506106c260048036036020811015610f2957600080fd5b50356001600160a01b031661279d565b348015610f4557600080fd5b5061094760048036036020811015610f5c57600080fd5b50356127af565b348015610f6f57600080fd5b5061094760048036036020811015610f8657600080fd5b50356001600160a01b03166128d6565b348015610fa257600080fd5b5061094760048036036020811015610fb957600080fd5b50356001600160a01b0316612bc9565b348015610fd557600080fd5b50610814612c65565b348015610fea57600080fd5b506109476004803603602081101561100157600080fd5b5035612c79565b34801561101457600080fd5b506106c2612cef565b34801561102957600080fd5b50610814612cf5565b34801561103e57600080fd5b506106fe612d04565b34801561105357600080fd5b506106c2612d65565b34801561106857600080fd5b506106c2612d6b565b34801561107d57600080fd5b506109476004803603602081101561109457600080fd5b50356001600160a01b0316612d71565b3480156110b057600080fd5b50610947600480360360c08110156110c757600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612df5565b3480156110f857600080fd5b506109476004803603604081101561110f57600080fd5b506001600160a01b0381351690602001351515612e94565b34801561113357600080fd5b506106c2612f71565b34801561114857600080fd5b506106c2612f77565b34801561115d57600080fd5b506106c2612f7d565b34801561117257600080fd5b506107c16004803603604081101561118957600080fd5b506001600160a01b038135169060200135612fc2565b3480156111ab57600080fd5b50610947600480360360208110156111c257600080fd5b50356001600160a01b031661302a565b3480156111de57600080fd5b506106c2600480360360208110156111f557600080fd5b50356001600160a01b03166130c6565b34801561121157600080fd5b506107c16004803603604081101561122857600080fd5b506001600160a01b038135169060200135613117565b34801561124a57600080fd5b506112716004803603602081101561126157600080fd5b50356001600160a01b031661312b565b604080516001600160a01b0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b3480156112c857600080fd5b506106c261320b565b3480156112dd57600080fd5b50610947600480360360208110156112f457600080fd5b50356001600160a01b0316613211565b34801561131057600080fd5b506108146132ad565b34801561132557600080fd5b506107c16004803603602081101561133c57600080fd5b50356001600160a01b03166132bc565b34801561135857600080fd5b506109476004803603604081101561136f57600080fd5b506001600160a01b03813516906020013515156132d1565b34801561139357600080fd5b50610947600480360360408110156113aa57600080fd5b506001600160a01b038135169060200135151561335e565b3480156113ce57600080fd5b50610947600480360360208110156113e557600080fd5b50356133eb565b3480156113f857600080fd5b506109476004803603604081101561140f57600080fd5b81019060208101813564010000000081111561142a57600080fd5b82018360208201111561143c57600080fd5b8035906020019184602083028401116401000000008311171561145e57600080fd5b9193509150351515613461565b34801561147757600080fd5b506109476004803603602081101561148e57600080fd5b503561358b565b3480156114a157600080fd5b50610814613601565b3480156114b657600080fd5b50610947600480360360208110156114cd57600080fd5b50356001600160a01b0316613610565b3480156114e957600080fd5b50610814613694565b3480156114fe57600080fd5b506109476004803603602081101561151557600080fd5b50356001600160a01b03166136a3565b34801561153157600080fd5b506106c2613753565b34801561154657600080fd5b506106c26004803603604081101561155d57600080fd5b506001600160a01b0381358116916020013516613759565b34801561158157600080fd5b506106c2613784565b34801561159657600080fd5b50610947600480360360208110156115ad57600080fd5b5035151561378a565b3480156115c257600080fd5b506106c2613806565b3480156115d757600080fd5b506106c261380c565b3480156115ec57600080fd5b506106c2613812565b34801561160157600080fd5b50610814613818565b34801561161657600080fd5b506106c2613827565b34801561162b57600080fd5b506109476004803603602081101561164257600080fd5b503561386c565b34801561165557600080fd5b506109476004803603602081101561166c57600080fd5b503561391b565b34801561167f57600080fd5b506106c2613986565b34801561169457600080fd5b506106c261398c565b3480156116a957600080fd5b50611271600480360360208110156116c057600080fd5b5035613992565b3480156116d357600080fd5b50610947600480360360208110156116ea57600080fd5b50356001600160a01b03166139f8565b34801561170657600080fd5b506106c2613b06565b34801561171b57600080fd5b506109476004803603602081101561173257600080fd5b5035613b0c565b34801561174557600080fd5b506109476004803603602081101561175c57600080fd5b5035613b73565b34801561176f57600080fd5b506106c2613bee565b600b5481565b60235481565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118105780601f106117e557610100808354040283529160200191611810565b820191906000526020600020905b8154815290600101906020018083116117f357829003601f168201915b5050505050905090565b602a5481565b600061183461182d613c55565b8484613c59565b5060015b92915050565b60195481565b60285481565b6039546001600160a01b031681565b600f6020526000908152604090205481565b601f5481565b6006546001600160a01b031681565b60025490565b60295481565b60116020526000908152604090205481565b60225481565b6118ac613c55565b6001600160a01b03166118bd612c65565b6001600160a01b031614611906576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b602a869055602b859055602784905560288390556029829055602c81905561193e81611938848187818a818e8e613bf4565b90613bf4565b602d55505050505050565b6000611956848484613d45565b6119c684611962613c55565b6119c18560405180606001604052806028815260200161594f602891396001600160a01b038a166000908152600160205260408120906119a0613c55565b6001600160a01b031681526020810191909152604001600020549190614737565b613c59565b5060019392505050565b60365481565b603a5481565b6008546001600160a01b031681565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015611a3057600080fd5b505afa158015611a44573d6000803e3d6000fd5b505050506040513d6020811015611a5a57600080fd5b5051905090565b60055460ff1690565b611a72613c55565b6001600160a01b0316611a83612c65565b6001600160a01b031614611acc576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6008546040805163031e79db60e41b81526001600160a01b038481166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015611b1a57600080fd5b505af1158015611b2e573d6000803e3d6000fd5b5050505050565b60275481565b6018546001600160a01b031681565b6000611834611b57613c55565b846119c18560016000611b68613c55565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613bf4565b611ba0613c55565b6001600160a01b0316611bb1612c65565b6001600160a01b031614611bfa576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b60085460408051630766c9b560e31b81526004810184905290516001600160a01b0390921691633b364da89160248082019260009290919082900301818387803b158015611b1a57600080fd5b611c4f613c55565b6001600160a01b0316611c60612c65565b6001600160a01b031614611ca9576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b60085460408051633d0c896360e01b81526001600160a01b03848116600483015291519190921691633d0c896391602480830192600092919082900301818387803b158015611cf757600080fd5b505af1158015611d0b573d6000803e3d6000fd5b5050600780546001600160a01b0319166001600160a01b03858116918217928390556040519216935091507fc50953975bfb7dc05da466bc18236bf737c11097c9cc7ef9d079bc7ed96f03ae90600090a350565b611d67613c55565b6001600160a01b0316611d78612c65565b6001600160a01b031614611dc1576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601780546001600160a01b0319166001600160a01b0392909216919091179055565b611deb613c55565b6001600160a01b0316611dfc612c65565b6001600160a01b031614611e45576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b611e4e816147ce565b50565b60375460ff1681565b611e62613c55565b6001600160a01b0316611e73612c65565b6001600160a01b031614611ebc576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6001600160a01b038281166000818152603b6020526040808220805460ff1916861515179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b158015611f2157600080fd5b505af1158015611f35573d6000803e3d6000fd5b505050505050565b603754610100900460ff1681565b7f00000000000000000000000049bd97a1d6ac987bb0250150e641bad59c18de8c81565b601b5481565b603a5442101590565b6008546040805163bc4c4b3760e01b815233600482015260006024820181905291516001600160a01b039093169263bc4c4b3792604480840193602093929083900390910190829087803b158015611fd557600080fd5b505af1158015611fe9573d6000803e3d6000fd5b505050506040513d6020811015611fff57600080fd5b5050565b61200b613c55565b6001600160a01b031661201c612c65565b6001600160a01b031614612065576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b603980546001600160a01b0319166001600160a01b03848116918217928390559182166000908152603e6020526040808220805460ff19166001179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b1580156120e157600080fd5b505af11580156120f5573d6000803e3d6000fd5b505050506121048260016132d1565b6001600160a01b038082166000818152603e6020526040808220805460ff19166001179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b15801561216857600080fd5b505af115801561217c573d6000803e3d6000fd5b50505050611fff8160016132d1565b6001600160a01b03166000908152603c602052604090205460ff1690565b6121b1613c55565b6001600160a01b03166121c2612c65565b6001600160a01b03161461220b576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6037805460ff1916911515919091179055565b600a5481565b6001600160a01b03166000908152603d602052604090205460ff1690565b61224a613c55565b6001600160a01b031661225b612c65565b6001600160a01b0316146122a4576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b603a55565b600854604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015611a3057600080fd5b6122f6613c55565b6001600160a01b0316612307612c65565b6001600160a01b031614612350576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6006546001600160a01b038281169116141561239d5760405162461bcd60e51b81526004018080602001828103825260288152602001806157cb6028913960400191505060405180910390fd5b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600854604080516370a0823160e01b81526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561244b57600080fd5b505afa15801561245f573d6000803e3d6000fd5b505050506040513d602081101561247557600080fd5b505192915050565b602d5481565b61248b613c55565b6001600160a01b031661249c612c65565b6001600160a01b0316146124e5576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b60006124ef611a61565b60095460ff91909116600a0a83029150611fff9030906001600160a01b031683614b14565b600854604080516001624d3b8760e01b03198152600481018490529051600092839283926001600160a01b039092169163ffb2c4799160248082019260609290919082900301818787803b15801561256b57600080fd5b505af115801561257f573d6000803e3d6000fd5b505050506040513d606081101561259557600080fd5b5080516020808301516040938401518451848152928301829052828501819052606083018990529351929650945091925032916000917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a350505050565b6001600160a01b031660009081526020819052604090205490565b6009546001600160a01b031681565b61262d613c55565b6001600160a01b031661263e612c65565b6001600160a01b031614612687576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b600d5481565b6015546001600160a01b031681565b6126f4613c55565b6001600160a01b0316612705612c65565b6001600160a01b03161461274e576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b60238690556024859055602084905560218390556022829055602581905561278081611938848187818a818e8e613bf4565b602655505050505050565b60106020526000908152604090205481565b60126020526000908152604090205481565b6127b7613c55565b6001600160a01b03166127c8612c65565b6001600160a01b031614612811576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b62030d40811015801561282757506207a1208111155b6128625760405162461bcd60e51b81526004018080602001828103825260398152602001806157926039913960400191505060405180910390fd5b6038548114156128a35760405162461bcd60e51b81526004018080602001828103825260318152602001806157616031913960400191505060405180910390fd5b60385460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3603855565b6128de613c55565b6001600160a01b03166128ef612c65565b6001600160a01b031614612938576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6008546001600160a01b03828116911614156129855760405162461bcd60e51b8152600401808060200182810382526032815260200180615a016032913960400191505060405180910390fd5b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129cd57600080fd5b505afa1580156129e1573d6000803e3d6000fd5b505050506040513d60208110156129f757600080fd5b50516001600160a01b031614612a3e5760405162461bcd60e51b81526004018080602001828103825260458152602001806159976045913960600191505060405180910390fd5b806001600160a01b03166331e79db0826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015612a8d57600080fd5b505af1158015612aa1573d6000803e3d6000fd5b50506040805163031e79db60e41b815230600482015290516001600160a01b03851693506331e79db09250602480830192600092919082900301818387803b158015612aec57600080fd5b505af1158015612b00573d6000803e3d6000fd5b50506006546040805163031e79db60e41b81526001600160a01b039283166004820152905191851693506331e79db0925060248082019260009290919082900301818387803b158015612b5257600080fd5b505af1158015612b66573d6000803e3d6000fd5b50506008546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b612bd1613c55565b6001600160a01b0316612be2612c65565b6001600160a01b031614612c2b576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601580546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b60055461010090046001600160a01b031690565b612c81613c55565b6001600160a01b0316612c92612c65565b6001600160a01b031614612cdb576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b612ce3611a61565b60ff16600a0a02600b55565b600e5481565b6013546001600160a01b031681565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118105780601f106117e557610100808354040283529160200191611810565b60355481565b601d5481565b612d79613c55565b6001600160a01b0316612d8a612c65565b6001600160a01b031614612dd3576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601680546001600160a01b0319166001600160a01b0392909216919091179055565b612dfd613c55565b6001600160a01b0316612e0e612c65565b6001600160a01b031614612e57576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601c869055601d8590556019849055601a839055601b829055601e819055612e8981611938848187818a818e8e613bf4565b601f55505050505050565b612e9c613c55565b6001600160a01b0316612ead612c65565b6001600160a01b031614612ef6576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b7f00000000000000000000000049bd97a1d6ac987bb0250150e641bad59c18de8c6001600160a01b0316826001600160a01b03161415612f675760405162461bcd60e51b815260040180806020018281038252604a815260200180615819604a913960600191505060405180910390fd5b611fff8282614c6f565b60385481565b60215481565b60085460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec916004808301926020929190829003018186803b158015611a3057600080fd5b6000611834612fcf613c55565b846119c185604051806060016040528060258152602001615a946025913960016000612ff9613c55565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190614737565b613032613c55565b6001600160a01b0316613043612c65565b6001600160a01b03161461308c576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601380546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b600854604080516302a2e74960e61b81526001600160a01b0384811660048301529151600093929092169163a8b9d24091602480820192602092909190829003018186803b15801561244b57600080fd5b6000611834613124613c55565b8484613d45565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b031663fbcbc0f18a6040518263ffffffff1660e01b815260040180826001600160a01b031681526020019150506101006040518083038186803b15801561319a57600080fd5b505afa1580156131ae573d6000803e3d6000fd5b505050506040513d6101008110156131c557600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e090970151959e50939c50919a509850965094509092509050919395975091939597565b602c5481565b613219613c55565b6001600160a01b031661322a612c65565b6001600160a01b031614613273576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601480546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b6014546001600160a01b031681565b603f6020526000908152604090205460ff1681565b6132d9613c55565b6001600160a01b03166132ea612c65565b6001600160a01b031614613333576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152603c60205260409020805460ff1916911515919091179055565b613366613c55565b6001600160a01b0316613377612c65565b6001600160a01b0316146133c0576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152603d60205260409020805460ff1916911515919091179055565b6133f3613c55565b6001600160a01b0316613404612c65565b6001600160a01b03161461344d576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b613455611a61565b60ff16600a0a02600d55565b613469613c55565b6001600160a01b031661347a612c65565b6001600160a01b0316146134c3576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b60005b828110156135185781603c60008686858181106134df57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016134c6565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051808060200183151581526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b613593613c55565b6001600160a01b03166135a4612c65565b6001600160a01b0316146135ed576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6135f5611a61565b60ff16600a0a02600c55565b6017546001600160a01b031681565b613618613c55565b6001600160a01b0316613629612c65565b6001600160a01b031614613672576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6016546001600160a01b031681565b6136ab613c55565b6001600160a01b03166136bc612c65565b6001600160a01b031614613705576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6008546040805163d644c36560e01b81526001600160a01b0384811660048301529151919092169163d644c36591602480830192600092919082900301818387803b158015611b1a57600080fd5b60265481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600c5481565b613792613c55565b6001600160a01b03166137a3612c65565b6001600160a01b0316146137ec576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b603780549115156101000261ff0019909216919091179055565b60205481565b601c5481565b60255481565b6007546001600160a01b031681565b6008546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec0916004808301926020929190829003018186803b158015611a3057600080fd5b613874613c55565b6001600160a01b0316613885612c65565b6001600160a01b0316146138ce576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6008546040805163e98030c760e01b81526004810184905290516001600160a01b039092169163e98030c79160248082019260009290919082900301818387803b158015611b1a57600080fd5b613923613c55565b6001600160a01b0316613934612c65565b6001600160a01b03161461397d576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b611e4e81614d9d565b601a5481565b60245481565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b0316635183d6fd8a6040518263ffffffff1660e01b8152600401808281526020019150506101006040518083038186803b15801561319a57600080fd5b613a00613c55565b6001600160a01b0316613a11612c65565b6001600160a01b031614613a5a576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b6001600160a01b038116613a9f5760405162461bcd60e51b81526004018080602001828103825260268152602001806157196026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b602b5481565b613b14613c55565b6001600160a01b0316613b25612c65565b6001600160a01b031614613b6e576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b603655565b613b7b613c55565b6001600160a01b0316613b8c612c65565b6001600160a01b031614613bd5576040805162461bcd60e51b81526020600482018190526024820152600080516020615977833981519152604482015290519081900360640190fd5b613bdd611a61565b60ff16600a0a8102600a8190555050565b601e5481565b600082820183811015613c4e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b038316613c9e5760405162461bcd60e51b8152600401808060200182810382526024815260200180615a336024913960400191505060405180910390fd5b6001600160a01b038216613ce35760405162461bcd60e51b815260040180806020018281038252602281526020018061573f6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166000908152603b602052604090205460ff1615613d9d5760405162461bcd60e51b81526004018080602001828103825260248152602001806158a06024913960400191505060405180910390fd5b6001600160a01b0382166000908152603b602052604090205460ff1615613df55760405162461bcd60e51b81526004018080602001828103825260248152602001806158a06024913960400191505060405180910390fd5b6001600160a01b038316613e3a5760405162461bcd60e51b81526004018080602001828103825260238152602001806156f66023913960400191505060405180910390fd5b6001600160a01b038216613e7f5760405162461bcd60e51b81526004018080602001828103825260238152602001806156f66023913960400191505060405180910390fd5b80613e9557613e9083836000614b14565b614732565b6000613e9f612c65565b6001600160a01b0316846001600160a01b031614158015613ec857506001600160a01b03831615155b8015613edf57506001600160a01b03831661dead14155b8015613f0357506001600160a01b0384166000908152603f602052604090205460ff165b15613fc3576001600160a01b0384166000908152603d602052604090205460ff16613f6957600a54821115613f695760405162461bcd60e51b81526004018080602001828103825260288152602001806158c46028913960400191505060405180910390fd5b5060198054602e55601a8054602f55601b8054603055601c8054603155601d80546032819055603355601f805460345560205490955560215490935560225490915560235490556024549055602554601e55602654905560015b6000613fcd611f75565b90508061402b576001600160a01b0385166000908152603e602052604090205460ff1661402b5760405162461bcd60e51b815260040180806020018281038252603d815260200180615a57603d913960400191505060405180910390fd5b614033612c65565b6001600160a01b0316856001600160a01b03161415801561405e5750600754600160a01b900460ff16155b80156140675750805b801561408b57506001600160a01b0384166000908152603f602052604090205460ff165b80156140a557506006546001600160a01b03868116911614155b80156140ca57506001600160a01b0384166000908152603c602052604090205460ff16155b1561425257600e546001600160a01b038616600090815260116020526040902054429101101561410e576001600160a01b0385166000908152601260205260408120555b6001600160a01b0385166000908152603d602052604090205460ff1661418957600b546001600160a01b038616600090815260126020526040902054840111156141895760405162461bcd60e51b81526004018080602001828103825260428152602001806158ec6042913960600191505060405180910390fd5b6001600160a01b038516600090815260126020526040902054156141ca576001600160a01b03851660009081526012602052604090208054840190556141f6565b6001600160a01b0385166000908152601160209081526040808320429055601290915290208054840190555b60198054602e55601a8054602f55601b8054603055601c8054603155601d8054603255601e8054603355601f8054603455602754909655602854909455602954909255602a549055602b549055602c549055602d549055600191505b600061425d306125fb565b600c549091508110158280156142705750805b80156142865750600754600160a01b900460ff16155b80156142ab57506001600160a01b0387166000908152603f602052604090205460ff16155b80156142c557506009546001600160a01b03888116911614155b80156142df57506009546001600160a01b03878116911614155b15614328576007805460ff60a01b1916600160a01b179055600c54614303906147ce565b600061430e306125fb565b905061431981614d9d565b506007805460ff60a01b191690555b60008380156143415750600754600160a01b900460ff16155b6001600160a01b0389166000908152603c602052604090205490915060ff168061438357506001600160a01b0387166000908152603c602052604090205460ff165b806143955750603754610100900460ff165b1561439e575060005b80806143a75750845b15614489576001600160a01b0388166000908152603c602052604090205460ff16806143eb57506001600160a01b0387166000908152603c602052604090205460ff165b156143f557614484565b600061440e601e54601f54614feb90919063ffffffff16565b9050600061442760646144218a85615048565b906150a1565b905060006144456064614421601e548c61504890919063ffffffff16565b905061445b816144558b85614feb565b90614feb565b98506144688b3084614b14565b600954614480908c906001600160a01b031683614b14565b5050505b614517565b6001600160a01b0388166000908152603c602052604090205460ff16806144c857506001600160a01b0387166000908152603c602052604090205460ff165b156144d257614517565b60006144ee6064614421601e548a61504890919063ffffffff16565b90506144fa8782614feb565b600954909750614515908a906001600160a01b031683614b14565b505b614522888888614b14565b841561453057614530615108565b6008546001600160a01b031663e30443bc8961454b816125fb565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561459157600080fd5b505af19250505080156145a2575060015b506008546001600160a01b031663e30443bc886145be816125fb565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561460457600080fd5b505af1925050508015614615575060015b5060355460075442919091101590600160a01b900460ff161580156146375750805b1561472b57603854603654603580549091019055600854604080516001624d3b8760e01b031981526004810184905290516001600160a01b039092169163ffb2c479916024808201926060929091908290030181600087803b15801561469c57600080fd5b505af19250505080156146d057506040513d60608110156146bc57600080fd5b508051602082015160409092015190919060015b6146d957614729565b604080518481526020810184905280820183905260608101869052905132916001917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a35050505b505b5050505050505b505050565b600081848411156147c65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561478b578181015183820152602001614773565b50505050905090810190601f1680156147b85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006019546000146147fa576147f760646144216019548761504890919063ffffffff16565b92505b601a541561481f5761481c6064614421601a548761504890919063ffffffff16565b91505b601b5415614844576148416064614421601b548761504890919063ffffffff16565b90505b828403829003819003600061485a8660026150a1565b905060006148698360026150a1565b905060006148778483614feb565b90504761488384615134565b600061488f4783614feb565b905060008060006019546000146148bd576148ba60646144216019548761504890919063ffffffff16565b92505b601a54156148e2576148df6064614421601a548761504890919063ffffffff16565b91505b601b5415614907576149046064614421601b548761504890919063ffffffff16565b90505b8284038290038190038684156149a2576016546001600160a01b03161561494b576016546013546149469187916001600160a01b0391821691166152c7565b6149a2565b6013546040516000916001600160a01b03169087908381818185875af1925050503d8060008114614998576040519150601f19603f3d011682016040523d82523d6000602084013e61499d565b606091505b505050505b8315614a33576017546001600160a01b0316156149dc576017546014546149d79186916001600160a01b0391821691166152c7565b614a33565b6014546040516000916001600160a01b03169086908381818185875af1925050503d8060008114614a29576040519150601f19603f3d011682016040523d82523d6000602084013e614a2e565b606091505b505050505b8215614ab95760375460ff1615614a6257601554614a5d90849030906001600160a01b03166152c7565b614ab9565b6015546040516000916001600160a01b03169085908381818185875af1925050503d8060008114614aaf576040519150601f19603f3d011682016040523d82523d6000602084013e614ab4565b606091505b505050505b614ac38183615460565b604080518a8152602081018490528082018a905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1505050505050505050505050505050565b6001600160a01b038316614b595760405162461bcd60e51b81526004018080602001828103825260258152602001806159dc6025913960400191505060405180910390fd5b6001600160a01b038216614b9e5760405162461bcd60e51b81526004018080602001828103825260238152602001806156f66023913960400191505060405180910390fd5b614ba9838383614732565b614be6816040518060600160405280602681526020016157f3602691396001600160a01b0386166000908152602081905260409020549190614737565b6001600160a01b038085166000908152602081905260408082209390935590841681522054614c159082613bf4565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b0382166000908152603f602052604090205460ff1615158115151415614ccd5760405162461bcd60e51b815260040180806020018281038252603d815260200180615863603d913960400191505060405180910390fd5b6001600160a01b0382166000908152603f60205260409020805460ff19168215801591909117909155614d61576008546040805163031e79db60e41b81526001600160a01b038581166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015614d4857600080fd5b505af1158015614d5c573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6008546007546001600160a01b039182169160009182911615614ec957614dc48430615518565b600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015614e0f57600080fd5b505afa158015614e23573d6000803e3d6000fd5b505050506040513d6020811015614e3957600080fd5b50516007546008546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193945091169163a9059cbb916044808201926020929091908290030181600087803b158015614e9657600080fd5b505af1158015614eaa573d6000803e3d6000fd5b505050506040513d6020811015614ec057600080fd5b50519150614f3e565b47614ed385615134565b6000614edf4783614feb565b6040519093508391506000906001600160a01b0387169083908381818185875af1925050503d8060008114614f30576040519150601f19603f3d011682016040523d82523d6000602084013e614f35565b606091505b50909550505050505b8115614fe5576008546040805163b0c7ce3760e01b81526004810184905290516001600160a01b039092169163b0c7ce379160248082019260009290919082900301818387803b158015614f9157600080fd5b505af1158015614fa5573d6000803e3d6000fd5b5050604080518781526020810185905281517f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc39450908190039091019150a15b50505050565b600082821115615042576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008261505757506000611838565b8282028284828161506457fe5b0414613c4e5760405162461bcd60e51b815260040180806020018281038252602181526020018061592e6021913960400191505060405180910390fd5b60008082116150f7576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161510057fe5b049392505050565b602e54601955602f54601a55603054601b55603154601c55603254601d55603354601e55603454601f55565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061516357fe5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156151b757600080fd5b505afa1580156151cb573d6000803e3d6000fd5b505050506040513d60208110156151e157600080fd5b50518151829060019081106151f257fe5b6001600160a01b0392831660209182029290920101526006546152189130911684613c59565b60065460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561529e578181015183820152602001615286565b505050509050019650505050505050600060405180830381600087803b158015611f2157600080fd5b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561532c57600080fd5b505afa158015615340573d6000803e3d6000fd5b505050506040513d602081101561535657600080fd5b50518151829060009061536557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061539357fe5b6001600160a01b0392831660209182029290920181019190915260065460405163b6f9de9560e01b815260006004820181815287861660448401524260648401819052608060248501908152885160848601528851959097169663b6f9de95968c9694958a958c95939260a49092019187810191028083838b5b8381101561542557818101518382015260200161540d565b50505050905001955050505050506000604051808303818588803b15801561544c57600080fd5b505af115801561472b573d6000803e3d6000fd5b6006546154789030906001600160a01b031684613c59565b6006546009546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156154ed57600080fd5b505af1158015615501573d6000803e3d6000fd5b50505050506040513d6060811015614fe557600080fd5b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061554957fe5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561559d57600080fd5b505afa1580156155b1573d6000803e3d6000fd5b505050506040513d60208110156155c757600080fd5b50518151829060019081106155d857fe5b6001600160a01b03928316602091820292909201015260075482519116908290600290811061560357fe5b6001600160a01b0392831660209182029290920101526006546156299130911685613c59565b600654604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b038681166064850152426084850181905260a060448601908152875160a487015287519290961695635c11d795958a9589948b9493919260c40190602080880191028083838b5b838110156156af578181015183820152602001615697565b505050509050019650505050505050600060405180830381600087803b1580156156d857600080fd5b505af11580156156ec573d6000803e3d6000fd5b5050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734253543a2043616e6e6f742075706461746520676173466f7250726f63657373696e6720746f2073616d652076616c75654253543a20676173466f7250726f63657373696e67206d757374206265206265747765656e203230302c30303020616e64203530302c3030304253543a2054686520726f7574657220616c7265616479206861732074686174206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654253543a205468652050616e63616b655377617020706169722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657250616972734253543a204175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c7565426c61636b6c697374656420616464726573732063616e6e6f74207472616e73666572215472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e53656c6c207472616e7366657220616d6f756e74206578636565647320746865206d617853656c6c416d6f756e7420666f722074686520676976656e2074696d652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724253543a20546865206e6577206469766964656e6420747261636b6572206d757374206265206f776e6564206279207468652042535420746f6b656e20636f6e747261637445524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734253543a20546865206469766964656e6420747261636b657220616c7265616479206861732074686174206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734253543a2054686973206163636f756e742063616e6e6f742073656e6420746f6b656e7320756e74696c2074726164696e6720697320656e61626c656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ed2f5182efa2c7fa5c8b64e10a7967c8dab04fedfe41df1aee673128b9cea0af64736f6c63430007060033
Deployed Bytecode Sourcemap
48954:32691:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49362:65;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;50586:37;;;;;;;;;;;;;:::i;22999:91::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50992:38;;;;;;;;;;;;;:::i;25145:169::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25145:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;50107:28;;;;;;;;;;;;;:::i;50912:33::-;;;;;;;;;;;;;:::i;51985:42::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;51985:42:0;;;;;;;;;;;;;;49604:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49604:46:0;-1:-1:-1;;;;;49604:46:0;;:::i;50326:120::-;;;;;;;;;;;;;:::i;49027:41::-;;;;;;;;;;;;;:::i;24098:108::-;;;;;;;;;;;;;:::i;50952:33::-;;;;;;;;;;;;;:::i;49711:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49711:44:0;-1:-1:-1;;;;;49711:44:0;;:::i;50547:32::-;;;;;;;;;;;;;:::i;60795:546::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60795:546:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25796:321;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25796:321:0;;;;;;;;;;;;;;;;;:::i;51722:34::-;;;;;;;;;;;;;:::i;52109:51::-;;;;;;;;;;;;;:::i;49202:41::-;;;;;;;;;;;;;:::i;66327:141::-;;;;;;;;;;;;;:::i;23942:91::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;64076:293;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;64076:293:0;-1:-1:-1;;;;;64076:293:0;;:::i;50873:32::-;;;;;;;;;;;;;:::i;50038:40::-;;;;;;;;;;;;;:::i;26526:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26526:218:0;;;;;;;;:::i;57854:181::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57854:181:0;;:::i;58051:248::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58051:248:0;-1:-1:-1;;;;;58051:248:0;;:::i;59207:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59207:134:0;-1:-1:-1;;;;;59207:134:0;;:::i;55964:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55964:107:0;;:::i;51771:34::-;;;;;;;;;;;;;:::i;63715:349::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;63715:349:0;;;;;;;;;;:::i;51812:41::-;;;;;;;;;;;;;:::i;49075:38::-;;;;;;;;;;;;;:::i;50178:29::-;;;;;;;;;;;;;:::i;68389:126::-;;;;;;;;;;;;;:::i;68001:94::-;;;;;;;;;;;;;:::i;61353:504::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;61353:504:0;;;;;;;;;;:::i;66476:125::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;66476:125:0;-1:-1:-1;;;;;66476:125:0;;:::i;57411:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57411:122:0;;;;:::i;49291:64::-;;;;;;;;;;;;;:::i;66617:129::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;66617:129:0;-1:-1:-1;;;;;66617:129:0;;:::i;57704:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57704:137:0;;:::i;68240:141::-;;;;;;;;;;;;;:::i;62641:314::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62641:314:0;-1:-1:-1;;;;;62641:314:0;;:::i;66913:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;66913:139:0;-1:-1:-1;;;;;66913:139:0;;:::i;51116:148::-;;;;;;;;;;;;;:::i;59499:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59499:206:0;;:::i;67722:271::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67722:271:0;;:::i;24269:127::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24269:127:0;-1:-1:-1;;;;;24269:127:0;;:::i;49252:26::-;;;;;;;;;;;;;:::i;15368:148::-;;;;;;;;;;;;;:::i;49496:56::-;;;;;;;;;;;;;:::i;49901:37::-;;;;;;;;;;;;;:::i;60241:538::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60241:538:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;49657:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49657:47:0;-1:-1:-1;;;;;49657:47:0;;:::i;49762:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49762:45:0;-1:-1:-1;;;;;49762:45:0;;:::i;65669:402::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;65669:402:0;;:::i;61865:768::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61865:768:0;-1:-1:-1;;;;;61865:768:0;;:::i;58814:237::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58814:237:0;-1:-1:-1;;;;;58814:237:0;;:::i;14717:87::-;;;;;;;;;;;;;:::i;56603:159::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56603:159:0;;:::i;49561:36::-;;;;;;;;;;;;;:::i;49814:::-;;;;;;;;;;;;;:::i;23209:95::-;;;;;;;;;;;;;:::i;51681:34::-;;;;;;;;;;;;;:::i;50255:31::-;;;;;;;;;;;;;:::i;59063:132::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59063:132:0;-1:-1:-1;;;;;59063:132:0;;:::i;59711:514::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59711:514:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;64986:263::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;64986:263:0;;;;;;;;;;:::i;51932:40::-;;;;;;;;;;;;;:::i;50508:32::-;;;;;;;;;;;;;:::i;66211:108::-;;;;;;;;;;;;;:::i;27247:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27247:269:0;;;;;;;;:::i;58311:239::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58311:239:0;-1:-1:-1;;;;;58311:239:0;;:::i;66754:151::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;66754:151:0;-1:-1:-1;;;;;66754:151:0;;:::i;24609:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24609:175:0;;;;;;;;:::i;67060:318::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67060:318:0;-1:-1:-1;;;;;67060:318:0;;:::i;:::-;;;;-1:-1:-1;;;;;67060:318:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51079:30;;;;;;;;;;;;;:::i;58562:237::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58562:237:0;-1:-1:-1;;;;;58562:237:0;;:::i;49857:37::-;;;;;;;;;;;;;:::i;52734:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52734:58:0;-1:-1:-1;;;;;52734:58:0;;:::i;62963:355::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;62963:355:0;;;;;;;;;;:::i;63341:359::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;63341:359:0;;;;;;;;;;:::i;56773:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56773:156:0;;:::i;64672:306::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;64672:306:0;-1:-1:-1;64672:306:0;;;;:::i;56942:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56942:156:0;;:::i;49991:40::-;;;;;;;;;;;;;:::i;59353:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59353:134:0;-1:-1:-1;;;;;59353:134:0;;:::i;49945:39::-;;;;;;;;;;;;;:::i;64381:283::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;64381:283:0;-1:-1:-1;;;;;64381:283:0;;:::i;50707:141::-;;;;;;;;;;;;;:::i;24847:151::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24847:151:0;;;;;;;;;;:::i;49434:55::-;;;;;;;;;;;;;:::i;57549:142::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57549:142:0;;;;:::i;50470:31::-;;;;;;;;;;;;;:::i;50214:34::-;;;;;;;;;;;;;:::i;50671:29::-;;;;;;;;;;;;;:::i;49122:41::-;;;;;;;;;;;;;:::i;68103:129::-;;;;;;;;;;;;;:::i;66079:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;66079:124:0;;:::i;56087:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56087:119:0;;:::i;50142:29::-;;;;;;;;;;;;;:::i;50630:34::-;;;;;;;;;;;;;:::i;67386:328::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67386:328:0;;:::i;15671:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15671:244:0;-1:-1:-1;;;;;15671:244:0;;:::i;51037:35::-;;;;;;;;;;;;;:::i;57276:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57276:117:0;;:::i;57111:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57111:157:0;;:::i;50293:26::-;;;;;;;;;;;;;:::i;49362:65::-;;;;:::o;50586:37::-;;;;:::o;22999:91::-;23077:5;23070:12;;;;;;;;-1:-1:-1;;23070:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23044:13;;23070:12;;23077:5;;23070:12;;23077:5;23070:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22999:91;:::o;50992:38::-;;;;:::o;25145:169::-;25228:4;25245:39;25254:12;:10;:12::i;:::-;25268:7;25277:6;25245:8;:39::i;:::-;-1:-1:-1;25302:4:0;25145:169;;;;;:::o;50107:28::-;;;;:::o;50912:33::-;;;;:::o;51985:42::-;;;-1:-1:-1;;;;;51985:42:0;;:::o;49604:46::-;;;;;;;;;;;;;:::o;50326:120::-;;;;:::o;49027:41::-;;;-1:-1:-1;;;;;49027:41:0;;:::o;24098:108::-;24186:12;;24098:108;:::o;50952:33::-;;;;:::o;49711:44::-;;;;;;;;;;;;;:::o;50547:32::-;;;;:::o;60795:546::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;60978:19:::1;:38:::0;;;61027:16:::1;:32:::0;;;61070:13:::1;:26:::0;;;61107:14:::1;:28:::0;;;61146:14:::1;:28:::0;;;61185:11:::1;:22:::0;;;61234:99:::1;61199:8:::0;61234:85:::1;61163:11:::0;61234:85;61124:11;61234:85;61086:10;61234:85;61000:16;61046:13;61234:20:::1;:35::i;:::-;:39:::0;::::1;:51::i;:99::-;61218:13;:115:::0;-1:-1:-1;;;;;;60795:546:0:o;25796:321::-;25902:4;25919:36;25929:6;25937:9;25948:6;25919:9;:36::i;:::-;25966:121;25975:6;25983:12;:10;:12::i;:::-;25997:89;26035:6;25997:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25997:19:0;;;;;;:11;:19;;;;;;26017:12;:10;:12::i;:::-;-1:-1:-1;;;;;25997:33:0;;;;;;;;;;;;-1:-1:-1;25997:33:0;;;:89;:37;:89::i;:::-;25966:8;:121::i;:::-;-1:-1:-1;26105:4:0;25796:321;;;;;:::o;51722:34::-;;;;:::o;52109:51::-;;;;:::o;49202:41::-;;;-1:-1:-1;;;;;49202:41:0;;:::o;66327:141::-;66417:15;;:43;;;-1:-1:-1;;;66417:43:0;;;;66390:7;;-1:-1:-1;;;;;66417:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;66417:43:0;;-1:-1:-1;66327:141:0;:::o;23942:91::-;24016:9;;;;23942:91;:::o;64076:293::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;64264:15:::1;::::0;:45:::1;::::0;;-1:-1:-1;;;64264:45:0;;-1:-1:-1;;;;;64264:45:0;;::::1;;::::0;::::1;::::0;;;:15;;;::::1;::::0;:36:::1;::::0;:45;;;;;:15:::1;::::0;:45;;;;;;;:15;;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;64076:293:::0;:::o;50873:32::-;;;;:::o;50038:40::-;;;-1:-1:-1;;;;;50038:40:0;;:::o;26526:218::-;26614:4;26631:83;26640:12;:10;:12::i;:::-;26654:7;26663:50;26702:10;26663:11;:25;26675:12;:10;:12::i;:::-;-1:-1:-1;;;;;26663:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;26663:25:0;;;:34;;;;;;;;;;;:38;:50::i;57854:181::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;57957:15:::1;::::0;:70:::1;::::0;;-1:-1:-1;;;57957:70:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;57957:15:0;;::::1;::::0;:48:::1;::::0;:70;;;;;:15:::1;::::0;:70;;;;;;;;:15;;:70;::::1;;::::0;::::1;;;;::::0;::::1;58051:248:::0;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;58133:15:::1;::::0;:50:::1;::::0;;-1:-1:-1;;;58133:50:0;;-1:-1:-1;;;;;58133:50:0;;::::1;;::::0;::::1;::::0;;;:15;;;::::1;::::0;:38:::1;::::0;:50;;;;;:15:::1;::::0;:50;;;;;;;:15;;:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;58194:13:0::1;:26:::0;;-1:-1:-1;;;;;;58194:26:0::1;-1:-1:-1::0;;;;;58194:26:0;;::::1;::::0;;::::1;::::0;;;;58236:55:::1;::::0;58276:13;::::1;::::0;-1:-1:-1;58194:26:0;-1:-1:-1;58236:55:0::1;::::0;-1:-1:-1;;58236:55:0::1;58051:248:::0;:::o;59207:134::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;59295:25:::1;:38:::0;;-1:-1:-1;;;;;;59295:38:0::1;-1:-1:-1::0;;;;;59295:38:0;;;::::1;::::0;;;::::1;::::0;;59207:134::o;55964:107::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;56040:23:::1;56055:7;56040:14;:23::i;:::-;55964:107:::0;:::o;51771:34::-;;;;;;:::o;63715:349::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;63914:23:0;;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:34;;-1:-1:-1;;63914:34:0::1;::::0;::::1;;;::::0;;63959:15:::1;::::0;:45;;-1:-1:-1;;;63959:45:0;;::::1;::::0;::::1;::::0;;;;;;:15;::::1;::::0;:36:::1;::::0;:45;;;;;63914:23;63959:45;;;;;;63914:23;63959:15;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;63715:349:::0;;:::o;51812:41::-;;;;;;;;;:::o;49075:38::-;;;:::o;50178:29::-;;;;:::o;68389:126::-;68484:23;;68465:15;:42;;68389:126;:::o;68001:94::-;68038:15;;:49;;;-1:-1:-1;;;68038:49:0;;68069:10;68038:49;;;;:15;:49;;;;;;;;-1:-1:-1;;;;;68038:15:0;;;;:30;;:49;;;;;;;;;;;;;;;;;;:15;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;68001:94:0:o;61353:504::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;61457:14:::1;:32:::0;;-1:-1:-1;;;;;;61457:32:0::1;-1:-1:-1::0;;;;;61457:32:0;;::::1;::::0;;::::1;::::0;;;;61534:14;;::::1;-1:-1:-1::0;61500:49:0;;;:33:::1;:49;::::0;;;;;:56;;-1:-1:-1;;61500:56:0::1;-1:-1:-1::0;61500:56:0::1;::::0;;61567:15:::1;::::0;:53;;-1:-1:-1;;;61567:53:0;;::::1;::::0;::::1;::::0;;;;;;:15;::::1;::::0;:36:::1;::::0;:53;;;;;-1:-1:-1;61567:53:0;;;;;;-1:-1:-1;61567:15:0;:53;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;61631:38;61647:15;61664:4;61631:15;:38::i;:::-;-1:-1:-1::0;;;;;61682:49:0;;::::1;;::::0;;;:33:::1;:49;::::0;;;;;:56;;-1:-1:-1;;61682:56:0::1;61734:4;61682:56;::::0;;61749:15:::1;::::0;:52;;-1:-1:-1;;;61749:52:0;;::::1;::::0;::::1;::::0;;;;;;:15;::::1;::::0;:36:::1;::::0;:52;;;;;61682:49;61749:52;;;;;;61682:49;61749:15;:52;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;61812:37;61828:14;61844:4;61812:15;:37::i;66476:125::-:0;-1:-1:-1;;;;;66565:28:0;66541:4;66565:28;;;:19;:28;;;;;;;;;66476:125::o;57411:122::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;57491:15:::1;:34:::0;;-1:-1:-1;;57491:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;57411:122::o;49291:64::-;;;;:::o;66617:129::-;-1:-1:-1;;;;;66708:30:0;66684:4;66708:30;;;:21;:30;;;;;;;;;66617:129::o;57704:137::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;57793:23:::1;:40:::0;57704:137::o;68240:141::-;68332:15;;:41;;;-1:-1:-1;;;68332:41:0;;;;68305:7;;-1:-1:-1;;;;;68332:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;62641:314;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;62752:15:::1;::::0;-1:-1:-1;;;;;62730:38:0;;::::1;62752:15:::0;::::1;62730:38;;62722:91;;;;-1:-1:-1::0;;;62722:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62871:15;::::0;62829:59:::1;::::0;-1:-1:-1;;;;;62871:15:0;;::::1;::::0;62829:59;::::1;::::0;::::1;::::0;62871:15:::1;::::0;62829:59:::1;62899:15;:48:::0;;-1:-1:-1;;;;;;62899:48:0::1;-1:-1:-1::0;;;;;62899:48:0;;;::::1;::::0;;;::::1;::::0;;62641:314::o;66913:139::-;67010:15;;:34;;;-1:-1:-1;;;67010:34:0;;-1:-1:-1;;;;;67010:34:0;;;;;;;;;66983:7;;67010:15;;;;;:25;;:34;;;;;;;;;;;;;;;:15;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67010:34:0;;66913:139;-1:-1:-1;;66913:139:0:o;51116:148::-;;;;:::o;59499:206::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;59575:18:::1;59620:10;:8;:10::i;:::-;59673:11;::::0;59616:14:::1;::::0;;;::::1;:2;:14;59596:35:::0;::::1;::::0;-1:-1:-1;59642:55:0::1;::::0;59666:4:::1;::::0;-1:-1:-1;;;;;59673:11:0::1;59596:35:::0;59642:15:::1;:55::i;67722:271::-:0;67854:15;;:28;;;-1:-1:-1;;;;;;67854:28:0;;;;;;;;;;67788:18;;;;;;-1:-1:-1;;;;;67854:15:0;;;;:23;;:28;;;;;;;;;;;;;;;67788:18;67854:15;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67854:28:0;;;;;;;;;;;;67898:87;;;;;;;;;;;;;;;;;67854:28;67898:87;;;;;;;67854:28;;-1:-1:-1;67854:28:0;-1:-1:-1;67854:28:0;;-1:-1:-1;67975:9:0;;67963:5;;67898:87;;;;;;;;;67722:271;;;;:::o;24269:127::-;-1:-1:-1;;;;;24370:18:0;24343:7;24370:18;;;;;;;;;;;;24269:127::o;49252:26::-;;;-1:-1:-1;;;;;49252:26:0;;:::o;15368:148::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;15459:6:::1;::::0;15438:40:::1;::::0;15475:1:::1;::::0;15459:6:::1;::::0;::::1;-1:-1:-1::0;;;;;15459:6:0::1;::::0;15438:40:::1;::::0;15475:1;;15438:40:::1;15489:6;:19:::0;;-1:-1:-1;;;;;;15489:19:0::1;::::0;;15368:148::o;49496:56::-;;;;:::o;49901:37::-;;;-1:-1:-1;;;;;49901:37:0;;:::o;60241:538::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;60423:18:::1;:37:::0;;;60471:15:::1;:31:::0;;;60513:12:::1;:25:::0;;;60549:13:::1;:27:::0;;;60587:13:::1;:27:::0;;;60625:10:::1;:21:::0;;;60672:99:::1;60638:8:::0;60672:85:::1;60603:11:::0;60672:85;60565:11;60672:85;60528:10;60672:85;60444:16;60489:13;60672:20:::1;:35::i;:99::-;60657:12;:114:::0;-1:-1:-1;;;;;;60241:538:0:o;49657:47::-;;;;;;;;;;;;;:::o;49762:45::-;;;;;;;;;;;;;:::o;65669:402::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;65767:6:::1;65755:8;:18;;:40;;;;;65789:6;65777:8;:18;;65755:40;65747:110;;;;-1:-1:-1::0;;;65747:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65888:16;;65876:8;:28;;65868:90;;;;-1:-1:-1::0;;;65868:90:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66008:16;::::0;65974:51:::1;::::0;65998:8;;65974:51:::1;::::0;;;::::1;66036:16;:27:::0;65669:402::o;61865:768::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;61976:15:::1;::::0;-1:-1:-1;;;;;61954:38:0;;::::1;61976:15:::0;::::1;61954:38;;61946:101;;;;-1:-1:-1::0;;;61946:101:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62060:37;62127:10;62060:79;;62198:4;-1:-1:-1::0;;;;;62160:43:0::1;:18;-1:-1:-1::0;;;;;62160:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;62160:26:0;-1:-1:-1;;;;;62160:43:0::1;;62152:125;;;;-1:-1:-1::0;;;62152:125:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62290:18;-1:-1:-1::0;;;;;62290:39:0::1;;62338:18;62290:68;;;;;;;;;;;;;-1:-1:-1::0;;;;;62290:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;62369:54:0::1;::::0;;-1:-1:-1;;;62369:54:0;;62417:4:::1;62369:54;::::0;::::1;::::0;;;-1:-1:-1;;;;;62369:39:0;::::1;::::0;-1:-1:-1;62369:39:0::1;::::0;-1:-1:-1;62369:54:0;;;;;-1:-1:-1;;62369:54:0;;;;;;;-1:-1:-1;62369:39:0;:54;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;62482:15:0::1;::::0;62434:65:::1;::::0;;-1:-1:-1;;;62434:65:0;;-1:-1:-1;;;;;62482:15:0;;::::1;62434:65;::::0;::::1;::::0;;;:39;;::::1;::::0;-1:-1:-1;62434:39:0::1;::::0;-1:-1:-1;62434:65:0;;;;;62482:15:::1;::::0;62434:65;;;;;;;;62482:15;62434:39;:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;62559:15:0::1;::::0;62517:59:::1;::::0;-1:-1:-1;;;;;62559:15:0;;::::1;::::0;-1:-1:-1;62517:59:0;;::::1;::::0;-1:-1:-1;62517:59:0::1;::::0;62559:15:::1;::::0;62517:59:::1;62589:15;:36:::0;;-1:-1:-1;;;;;;62589:36:0::1;-1:-1:-1::0;;;;;62589:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;61865:768:0:o;58814:237::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;58902:14:::1;:27:::0;;-1:-1:-1;;;;;58902:27:0;;::::1;-1:-1:-1::0;;;;;;58902:27:0;;::::1;::::0;::::1;::::0;;:14:::1;58940:31:::0;;;:19:::1;:31;::::0;;;;:38;;-1:-1:-1;;58940:38:0::1;58902:27:::0;58940:38:::1;::::0;;58814:237::o;14717:87::-;14790:6;;;;;-1:-1:-1;;;;;14790:6:0;;14717:87::o;56603:159::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;56743:10:::1;:8;:10::i;:::-;56739:14;;:2;:14;56715:39;56688:24;:66:::0;56603:159::o;49561:36::-;;;;:::o;49814:::-;;;-1:-1:-1;;;;;49814:36:0;;:::o;23209:95::-;23289:7;23282:14;;;;;;;;-1:-1:-1;;23282:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23256:13;;23282:14;;23289:7;;23282:14;;23289:7;23282:14;;;;;;;;;;;;;;;;;;;;;;;;51681:34;;;;:::o;50255:31::-;;;;:::o;59063:132::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;59150:24:::1;:37:::0;;-1:-1:-1;;;;;;59150:37:0::1;-1:-1:-1::0;;;;;59150:37:0;;;::::1;::::0;;;::::1;::::0;;59063:132::o;59711:514::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;59890:15:::1;:34:::0;;;59935:12:::1;:28:::0;;;59974:9:::1;:22:::0;;;60007:10:::1;:24:::0;;;60042:10:::1;:24:::0;;;60077:7:::1;:18:::0;;;60118:99:::1;60087:8:::0;60118:85:::1;60055:11:::0;60118:85;60020:11;60118:85;59986:10;60118:85;59908:16;59950:13;60118:20:::1;:35::i;:99::-;60106:9;:111:::0;-1:-1:-1;;;;;;59711:514:0:o;64986:263::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;65095:13:::1;-1:-1:-1::0;;;;;65087:21:0::1;:4;-1:-1:-1::0;;;;;65087:21:0::1;;;65079:108;;;;-1:-1:-1::0;;;65079:108:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65200:41;65229:4;65235:5;65200:28;:41::i;51932:40::-:0;;;;:::o;50508:32::-;;;;:::o;66211:108::-;66284:15;;:27;;;-1:-1:-1;;;66284:27:0;;;;66257:7;;-1:-1:-1;;;;;66284:15:0;;:25;;:27;;;;;;;;;;;;;;:15;:27;;;;;;;;;;27247:269;27340:4;27357:129;27366:12;:10;:12::i;:::-;27380:7;27389:96;27428:15;27389:96;;;;;;;;;;;;;;;;;:11;:25;27401:12;:10;:12::i;:::-;-1:-1:-1;;;;;27389:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;27389:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;58311:239::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;58398:13:::1;:26:::0;;-1:-1:-1;;;;;58398:26:0;;::::1;-1:-1:-1::0;;;;;;58398:26:0;;::::1;::::0;::::1;::::0;;:13:::1;58435:31:::0;;;:19:::1;:31;::::0;;;;:38;;-1:-1:-1;;58435:38:0::1;58398:26:::0;58435:38:::1;::::0;;58311:239::o;66754:151::-;66850:15;;:47;;;-1:-1:-1;;;66850:47:0;;-1:-1:-1;;;;;66850:47:0;;;;;;;;;66823:7;;66850:15;;;;;:38;;:47;;;;;;;;;;;;;;;:15;:47;;;;;;;;;;24609:175;24695:4;24712:42;24722:12;:10;:12::i;:::-;24736:9;24747:6;24712:9;:42::i;67060:318::-;67156:7;67178:6;67199;67220:7;67242;67264;67286;67308;67335:15;;;;;;;;;-1:-1:-1;;;;;67335:15:0;-1:-1:-1;;;;;67335:26:0;;67362:7;67335:35;;;;;;;;;;;;;-1:-1:-1;;;;;67335:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67335:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67335:35:0;;-1:-1:-1;67335:35:0;;-1:-1:-1;67335:35:0;-1:-1:-1;67335:35:0;-1:-1:-1;67335:35:0;-1:-1:-1;67335:35:0;;-1:-1:-1;67335:35:0;-1:-1:-1;67060:318:0;;;;;;;;;:::o;51079:30::-;;;;:::o;58562:237::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;58650:14:::1;:27:::0;;-1:-1:-1;;;;;58650:27:0;;::::1;-1:-1:-1::0;;;;;;58650:27:0;;::::1;::::0;::::1;::::0;;:14:::1;58688:31:::0;;;:19:::1;:31;::::0;;;;:38;;-1:-1:-1;;58688:38:0::1;58650:27:::0;58688:38:::1;::::0;;58562:237::o;49857:37::-;;;-1:-1:-1;;;;;49857:37:0;;:::o;52734:58::-;;;;;;;;;;;;;;;:::o;62963:355::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;63161:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;63161:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;62963:355::o;63341:359::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;63541:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:41;;-1:-1:-1;;63541:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;63341:359::o;56773:156::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;56910:10:::1;:8;:10::i;:::-;56906:14;;:2;:14;56882:39;56864:15;:57:::0;56773:156::o;64672:306::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;64791:9:::1;64787:115;64806:19:::0;;::::1;64787:115;;;64882:8;64847:19;:32;64867:8;;64876:1;64867:11;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;64867:11:0::1;64847:32:::0;;-1:-1:-1;64847:32:0;::::1;::::0;;;;;;-1:-1:-1;64847:32:0;:43;;-1:-1:-1;;64847:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;64827:3:0::1;64787:115;;;;64919:51;64951:8;;64961;64919:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;64919:51:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;64919:51:0;;-1:-1:-1;;;;;64919:51:0::1;64672:306:::0;;;:::o;56942:156::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;57079:10:::1;:8;:10::i;:::-;57075:14;;:2;:14;57051:39;57030:18;:60:::0;56942:156::o;49991:40::-;;;-1:-1:-1;;;;;49991:40:0;;:::o;59353:134::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;59441:25:::1;:38:::0;;-1:-1:-1;;;;;;59441:38:0::1;-1:-1:-1::0;;;;;59441:38:0;;;::::1;::::0;;;::::1;::::0;;59353:134::o;49945:39::-;;;-1:-1:-1;;;;;49945:39:0;;:::o;64381:283::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;64564:15:::1;::::0;:40:::1;::::0;;-1:-1:-1;;;64564:40:0;;-1:-1:-1;;;;;64564:40:0;;::::1;;::::0;::::1;::::0;;;:15;;;::::1;::::0;:31:::1;::::0;:40;;;;;:15:::1;::::0;:40;;;;;;;:15;;:40;::::1;;::::0;::::1;;;;::::0;::::1;50707:141:::0;;;;:::o;24847:151::-;-1:-1:-1;;;;;24963:18:0;;;24936:7;24963:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24847:151::o;49434:55::-;;;;:::o;57549:142::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;57639:22:::1;:44:::0;;;::::1;;;;-1:-1:-1::0;;57639:44:0;;::::1;::::0;;;::::1;::::0;;57549:142::o;50470:31::-;;;;:::o;50214:34::-;;;;:::o;50671:29::-;;;;:::o;49122:41::-;;;-1:-1:-1;;;;;49122:41:0;;:::o;68103:129::-;68185:15;;:39;;;-1:-1:-1;;;68185:39:0;;;;68158:7;;-1:-1:-1;;;;;68185:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;66079:124;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;66153:15:::1;::::0;:42:::1;::::0;;-1:-1:-1;;;66153:42:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;66153:15:0;;::::1;::::0;:31:::1;::::0;:42;;;;;:15:::1;::::0;:42;;;;;;;;:15;;:42;::::1;;::::0;::::1;;;;::::0;::::1;56087:119:::0;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;56169:29:::1;56190:7;56169:20;:29::i;50142:::-:0;;;;:::o;50630:34::-;;;;:::o;67386:328::-;67487:7;67509:6;67530;67551:7;67573;67595;67617;67639;67666:15;;;;;;;;;-1:-1:-1;;;;;67666:15:0;-1:-1:-1;;;;;67666:33:0;;67700:5;67666:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15671:244;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15760:22:0;::::1;15752:73;;;;-1:-1:-1::0;;;15752:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15862:6;::::0;15841:38:::1;::::0;-1:-1:-1;;;;;15841:38:0;;::::1;::::0;15862:6:::1;::::0;::::1;;::::0;15841:38:::1;::::0;;;::::1;15890:6;:17:::0;;-1:-1:-1;;;;;15890:17:0;;::::1;;;-1:-1:-1::0;;;;;;15890:17:0;;::::1;::::0;;;::::1;::::0;;15671:244::o;51037:35::-;;;;:::o;57276:117::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;57357:12:::1;:28:::0;57276:117::o;57111:157::-;14948:12;:10;:12::i;:::-;-1:-1:-1;;;;;14937:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14937:23:0;;14929:68;;;;;-1:-1:-1;;;14929:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14929:68:0;;;;;;;;;;;;;;;57249:10:::1;:8;:10::i;:::-;57245:14;;:2;:14;57221:20;:39;57195:23;:65;;;;57111:157:::0;:::o;50293:26::-;;;;:::o;34632:179::-;34690:7;34722:5;;;34746:6;;;;34738:46;;;;;-1:-1:-1;;;34738:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34802:1;34632:179;-1:-1:-1;;;34632:179:0:o;3352:106::-;3440:10;3352:106;:::o;30394:346::-;-1:-1:-1;;;;;30496:19:0;;30488:68;;;;-1:-1:-1;;;30488:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30575:21:0;;30567:68;;;;-1:-1:-1;;;30567:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30648:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30700:32;;;;;;;;;;;;;;;;;30394:346;;;:::o;74838:6798::-;-1:-1:-1;;;;;74971:20:0;;;;;;:14;:20;;;;;;;;74970:21;74962:70;;;;-1:-1:-1;;;74962:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;75052:18:0;;;;;;:14;:18;;;;;;;;75051:19;75043:68;;;;-1:-1:-1;;;75043:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;75130:18:0;;75122:66;;;;-1:-1:-1;;;75122:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;75207:16:0;;75199:64;;;;-1:-1:-1;;;75199:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75277:11;75274:92;;75305:28;75321:4;75327:2;75331:1;75305:15;:28::i;:::-;75348:7;;75274:92;75378:14;75437:7;:5;:7::i;:::-;-1:-1:-1;;;;;75429:15:0;:4;-1:-1:-1;;;;;75429:15:0;;;:48;;;;-1:-1:-1;;;;;;75461:16:0;;;;75429:48;:86;;;;-1:-1:-1;;;;;;75494:21:0;;75508:6;75494:21;;75429:86;:134;;;;-1:-1:-1;;;;;;75532:31:0;;;;;;:25;:31;;;;;;;;75429:134;75411:1043;;;-1:-1:-1;;;;;75594:27:0;;;;;;:21;:27;;;;;;;;75590:198;;75673:23;;75663:6;:33;;75637:135;;;;-1:-1:-1;;;75637:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;75824:9:0;;;75804:17;:29;75869:10;;;75848:18;:31;75915:10;;;75894:18;:31;75966:15;;;75940:23;:41;76019:12;;;75996:20;:35;;;76046:15;:30;76111:9;;;76091:17;:29;76147:12;;76135:24;;;76187:13;;76174:26;;;76228:13;;76215:26;;;76274:18;;76256:36;;76322:15;;76307:30;;76362:10;;76352:7;:20;76399:12;;76387:24;;-1:-1:-1;75411:1043:0;76494:21;76518;:19;:21::i;:::-;76494:45;;76707:16;76703:162;;-1:-1:-1;;;;;76748:39:0;;;;;;:33;:39;;;;;;;;76740:113;;;;-1:-1:-1;;;76740:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;76903:7;:5;:7::i;:::-;-1:-1:-1;;;;;76895:15:0;:4;-1:-1:-1;;;;;76895:15:0;;;:41;;;;-1:-1:-1;76928:8:0;;-1:-1:-1;;;76928:8:0;;;;76927:9;76895:41;:74;;;;;76953:16;76895:74;:120;;;;-1:-1:-1;;;;;;76986:29:0;;;;;;:25;:29;;;;;;;;76895:120;:236;;;;-1:-1:-1;77115:15:0;;-1:-1:-1;;;;;77099:32:0;;;77115:15;;77099:32;;76895:236;:341;;;;-1:-1:-1;;;;;;77213:23:0;;;;;;:19;:23;;;;;;;;77212:24;76895:341;76877:1909;;;77351:13;;-1:-1:-1;;;;;77333:15:0;;;;;;:9;:15;;;;;;77367;77333:31;;:49;77330:108;;;-1:-1:-1;;;;;77402:16:0;;77421:1;77402:16;;;:10;:16;;;;;:20;77330:108;-1:-1:-1;;;;;77458:27:0;;;;;;:21;:27;;;;;;;;77454:292;;77542:24;;-1:-1:-1;;;;;77522:16:0;;;;;;:10;:16;;;;;;77513:25;;:53;;77505:132;;;;-1:-1:-1;;;77505:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;77817:16:0;;77836:1;77817:16;;;:10;:16;;;;;;:20;77813:277;;-1:-1:-1;;;;;77858:16:0;;;;;;:10;:16;;;;;:26;;;;;;77813:277;;;-1:-1:-1;;;;;77923:15:0;;;;;;:9;:15;;;;;;;;77941;77923:33;;78048:10;:16;;;;;:26;;;;;;77813:277;78140:9;;;78120:17;:29;78185:10;;;78164:18;:31;78231:10;;;78210:18;:31;78282:15;;;78256:23;:41;78335:12;;;78312:20;:35;78380:7;;;78362:15;:25;78422:9;;;78402:17;:29;78458:13;;78446:25;;;78499:14;;78486:27;;;78541:14;;78528:27;;;78588:19;;78570:37;;78637:16;;78622:31;;78678:11;;78668:21;;78716:13;;78704:25;;-1:-1:-1;;;76877:1909:0;78798:28;78829:24;78847:4;78829:9;:24::i;:::-;78913:18;;78798:55;;-1:-1:-1;78889:42:0;;;78961:16;:41;;;;;78995:7;78961:41;:67;;;;-1:-1:-1;79020:8:0;;-1:-1:-1;;;79020:8:0;;;;79019:9;78961:67;:116;;;;-1:-1:-1;;;;;;79046:31:0;;;;;;:25;:31;;;;;;;;79045:32;78961:116;:152;;;;-1:-1:-1;79102:11:0;;-1:-1:-1;;;;;79094:19:0;;;79102:11;;79094:19;;78961:152;:186;;;;-1:-1:-1;79136:11:0;;-1:-1:-1;;;;;79130:17:0;;;79136:11;;79130:17;;78961:186;78944:667;;;79174:8;:15;;-1:-1:-1;;;;79174:15:0;-1:-1:-1;;;79174:15:0;;;79438:18;;79423:34;;:14;:34::i;:::-;79474:18;79495:24;79513:4;79495:9;:24::i;:::-;79474:45;;79534:32;79555:10;79534:20;:32::i;:::-;-1:-1:-1;79583:8:0;:16;;-1:-1:-1;;;;79583:16:0;;;78944:667;79625:12;79640:16;:29;;;;-1:-1:-1;79661:8:0;;-1:-1:-1;;;79661:8:0;;;;79660:9;79640:29;-1:-1:-1;;;;;79770:25:0;;;;;;:19;:25;;;;;;79625:44;;-1:-1:-1;79770:25:0;;;:52;;-1:-1:-1;;;;;;79799:23:0;;;;;;:19;:23;;;;;;;;79770:52;:78;;;-1:-1:-1;79826:22:0;;;;;;;79770:78;79767:125;;;-1:-1:-1;79875:5:0;79767:125;79907:7;:20;;;;79918:9;79907:20;79904:940;;;-1:-1:-1;;;;;79948:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;79977:23:0;;;;;;:19;:23;;;;;;;;79948:52;79945:538;;;;;;80119:15;80137:22;80151:7;;80137:9;;:13;;:22;;;;:::i;:::-;80119:40;-1:-1:-1;80174:17:0;80194:28;80218:3;80194:19;:6;80119:40;80194:10;:19::i;:::-;:23;;:28::i;:::-;80174:48;;80237:15;80255:28;80279:3;80255:19;80266:7;;80255:6;:10;;:19;;;;:::i;:28::-;80237:46;-1:-1:-1;80307:37:0;80237:46;80307:21;:6;80318:9;80307:10;:21::i;:::-;:25;;:37::i;:::-;80298:46;;80359:47;80375:4;80389;80396:9;80359:15;:47::i;:::-;80443:11;;80421:46;;80437:4;;-1:-1:-1;;;;;80443:11:0;80456:10;80421:15;:46::i;:::-;79945:538;;;;79904:940;;;-1:-1:-1;;;;;80516:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;80545:23:0;;;;;;:19;:23;;;;;;;;80516:52;80513:320;;;;;;80664:15;80682:28;80706:3;80682:19;80693:7;;80682:6;:10;;:19;;;;:::i;:28::-;80664:46;-1:-1:-1;80734:22:0;:6;80664:46;80734:10;:22::i;:::-;80793:11;;80725:31;;-1:-1:-1;80771:46:0;;80787:4;;-1:-1:-1;;;;;80793:11:0;80806:10;80771:15;:46::i;:::-;80513:320;;80866:33;80882:4;80888:2;80892:6;80866:15;:33::i;:::-;80915:9;80912:49;;;80936:13;:11;:13::i;:::-;80977:15;;-1:-1:-1;;;;;80977:15:0;:26;81012:4;81019:15;81012:4;81019:9;:15::i;:::-;80977:58;;;;;;;;;;;;;-1:-1:-1;;;;;80977:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;80973:74;81061:15;;-1:-1:-1;;;;;81061:15:0;:26;81096:2;81101:13;81096:2;81101:9;:13::i;:::-;81061:54;;;;;;;;;;;;;-1:-1:-1;;;;;81061:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;81057:70;81177:19;;81213:8;;81158:15;:38;;;;;;-1:-1:-1;;;81213:8:0;;;;81212:9;:24;;;;;81225:11;81212:24;81209:420;;;81267:16;;81321:12;;81298:19;:35;;;;;;;81352:15;;:28;;;-1:-1:-1;;;;;;81352:28:0;;;;;;;;;;-1:-1:-1;;;;;81352:15:0;;;;:23;;:28;;;;;;;;;;;;;;;81253:11;81352:15;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;81352:28:0;;;;;;;;;;;;;;;;81348:270;;;;;81478:86;;;;;;;;;;;;;;;;;;;;;;;;;;81554:9;;81543:4;;81478:86;;;;;;;;;81381:199;;;81348:270;81209:420;;74838:6798;;;;;;;;;;:::o;37459:166::-;37545:7;37581:12;37573:6;;;;37565:29;;;;-1:-1:-1;;;37565:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37612:5:0;;;37459:166::o;68523:2952::-;68583:21;68615:22;68648;68694:9;;68707:1;68694:14;68691:91;;68740:30;68766:3;68740:21;68751:9;;68740:6;:10;;:21;;;;:::i;:30::-;68724:46;;68691:91;68795:10;;:15;68792:94;;68843:31;68870:3;68843:22;68854:10;;68843:6;:10;;:22;;;;:::i;:31::-;68826:48;;68792:94;68899:10;;:15;68896:94;;68947:31;68974:3;68947:22;68958:10;;68947:6;:10;;:22;;;;:::i;:31::-;68930:48;;68896:94;69027:22;;;:39;;;:56;;;69002:22;69164:13;69027:6;69175:1;69164:10;:13::i;:::-;69145:32;-1:-1:-1;69188:12:0;69203:21;:14;69222:1;69203:18;:21::i;:::-;69188:36;-1:-1:-1;69235:17:0;69255:24;:14;69188:36;69255:18;:24::i;:::-;69235:44;-1:-1:-1;69582:21:0;69648:26;69665:8;69648:16;:26::i;:::-;69803:18;69824:41;:21;69850:14;69824:25;:41::i;:::-;69803:62;;69878:24;69913:25;69949;69990:9;;70003:1;69990:14;69987:98;;70039:34;70069:3;70039:25;70054:9;;70039:10;:14;;:25;;;;:::i;:34::-;70020:53;;69987:98;70098:10;;:15;70095:101;;70149:35;70180:3;70149:26;70164:10;;70149;:14;;:26;;;;:::i;:35::-;70129:55;;70095:101;70209:10;;:15;70206:101;;70260:35;70291:3;70260:26;70275:10;;70260;:14;;:26;;;;:::i;:35::-;70240:55;;70206:101;70350:29;;;:49;;;:69;;;70450:9;70475:21;;70472:274;;70511:24;;-1:-1:-1;;;;;70511:24:0;:38;70508:237;;70600:24;;70626:13;;70565:75;;70582:16;;-1:-1:-1;;;;;70600:24:0;;;;70626:13;70565:16;:75::i;:::-;70508:237;;;70686:13;;:47;;70672:9;;-1:-1:-1;;;;;70686:13:0;;70712:16;;70672:9;70686:47;70672:9;70686:47;70712:16;70686:13;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;70508:237:0;70761:22;;70758:289;;70806:25;;-1:-1:-1;;;;;70806:25:0;:39;70803:243;;70897:25;;70924:14;;70861:78;;70878:17;;-1:-1:-1;;;;;70897:25:0;;;;70924:14;70861:16;:78::i;:::-;70803:243;;;70985:14;;:49;;70971:9;;-1:-1:-1;;;;;70985:14:0;;71012:17;;70971:9;70985:49;70971:9;70985:49;71012:17;70985:14;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;70803:243:0;71070:22;;71067:253;;71115:15;;;;71112:207;;;71197:14;;71146:66;;71163:17;;71190:4;;-1:-1:-1;;;;;71197:14:0;71146:16;:66::i;:::-;71112:207;;;71258:14;;:49;;71244:9;;-1:-1:-1;;;;;71258:14:0;;71285:17;;71244:9;71258:49;71244:9;71258:49;71285:17;71258:14;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;71112:207:0;71369:37;71382:9;71393:12;71369;:37::i;:::-;71422:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68523:2952;;;;;;;;;;;;;;;:::o;28006:539::-;-1:-1:-1;;;;;28112:20:0;;28104:70;;;;-1:-1:-1;;;28104:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28193:23:0;;28185:71;;;;-1:-1:-1;;;28185:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28269:47;28290:6;28298:9;28309:6;28269:20;:47::i;:::-;28349:71;28371:6;28349:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28349:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;28329:17:0;;;:9;:17;;;;;;;;;;;:91;;;;28454:20;;;;;;;:32;;28479:6;28454:24;:32::i;:::-;-1:-1:-1;;;;;28431:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;28502:35;;;;;;;28431:20;;28502:35;;;;;;;;;;;;;28006:539;;;:::o;65257:404::-;-1:-1:-1;;;;;65348:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;65340:114;;;;-1:-1:-1;;;65340:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;65465:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;65465:39:0;;;;;;;;;;;;65517:79;;65542:15;;:42;;;-1:-1:-1;;;65542:42:0;;-1:-1:-1;;;;;65542:42:0;;;;;;;;;:15;;;;;:36;;:42;;;;;:15;;:42;;;;;;;:15;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65517:79;65613:40;;;;;;-1:-1:-1;;;;;65613:40:0;;;;;;;;65257:404;;:::o;71522:942::-;71625:15;;71714:13;;-1:-1:-1;;;;;71625:15:0;;;;71587:27;;;;71714:13;:27;71711:593;;71757:42;71777:6;71793:4;71757:19;:42::i;:::-;71833:13;;71826:46;;;-1:-1:-1;;;71826:46:0;;71866:4;71826:46;;;;;;-1:-1:-1;;;;;71833:13:0;;;;71826:31;;:46;;;;;;;;;;;;;;;71833:13;71826:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;71826:46:0;71904:13;;71936:15;;71897:67;;;-1:-1:-1;;;71897:67:0;;-1:-1:-1;;;;;71936:15:0;;;71897:67;;;;;;;;;;;;71826:46;;-1:-1:-1;71904:13:0;;;71897:30;;:67;;;;;71826:46;;71897:67;;;;;;;;71904:13;;71897:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;71897:67:0;;-1:-1:-1;71711:593:0;;;72020:21;72056:24;72073:6;72056:16;:24::i;:::-;72095:18;72116:41;:21;72142:14;72116:25;:41::i;:::-;72224:39;;72095:62;;-1:-1:-1;72095:62:0;;-1:-1:-1;72210:9:0;;-1:-1:-1;;;;;72224:16:0;;;72095:62;;72210:9;72224:39;72210:9;72224:39;72095:62;72224:16;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;72209:54:0;;-1:-1:-1;;;;;71711:593:0;72318:7;72314:143;;;72342:15;;:51;;;-1:-1:-1;;;72342:51:0;;;;;;;;;;-1:-1:-1;;;;;72342:15:0;;;;:40;;:51;;;;;:15;;:51;;;;;;;;:15;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;72413:32:0;;;;;;;;;;;;;;;;-1:-1:-1;72413:32:0;;;;;;;;-1:-1:-1;72413:32:0;72314:143;71522:942;;;;:::o;35094:158::-;35152:7;35185:1;35180;:6;;35172:49;;;;;-1:-1:-1;;;35172:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35239:5:0;;;35094:158::o;35511:220::-;35569:7;35593:6;35589:20;;-1:-1:-1;35608:1:0;35601:8;;35589:20;35632:5;;;35636:1;35632;:5;:1;35656:5;;;;;:10;35648:56;;;;-1:-1:-1;;;35648:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36209:153;36267:7;36299:1;36295;:5;36287:44;;;;;-1:-1:-1;;;36287:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36353:1;36349;:5;;;;;;;36209:153;-1:-1:-1;;;36209:153:0:o;56212:372::-;56271:17;;56259:9;:29;56316:18;;56303:10;:31;56362:18;;56349:10;:31;56413:23;;56395:15;:41;56466:20;;56451:12;:35;56511:15;;56501:7;:25;56553:17;;56541:9;:29;56212:372::o;73015:603::-;73169:16;;;73183:1;73169:16;;;;;;;;73145:21;;73169:16;;;;;;;;;;-1:-1:-1;73169:16:0;73145:40;;73214:4;73196;73201:1;73196:7;;;;;;;;-1:-1:-1;;;;;73196:23:0;;;:7;;;;;;;;;;:23;;;;73240:15;;:22;;;-1:-1:-1;;;73240:22:0;;;;:15;;;;;:20;;:22;;;;;73196:7;;73240:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;73240:22:0;73230:7;;:4;;73235:1;;73230:7;;;;;;-1:-1:-1;;;;;73230:32:0;;;:7;;;;;;;;;:32;73307:15;;73275:62;;73292:4;;73307:15;73325:11;73275:8;:62::i;:::-;73376:15;;:224;;-1:-1:-1;;;73376:224:0;;;;;;;;:15;:224;;;;;;73554:4;73376:224;;;;;;73574:15;73376:224;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;73376:15:0;;;;:66;;73457:11;;73527:4;;73554;73574:15;73376:224;;;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;72471:538;72659:16;;;72673:1;72659:16;;;;;;;;72635:21;;72659:16;;;;;;;;-1:-1:-1;;72696:15:0;;:22;;;-1:-1:-1;;;72696:22:0;;;;72635:40;;-1:-1:-1;;;;;;72696:15:0;;;;:20;;-1:-1:-1;72696:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;72696:22:0;72686:7;;:4;;72691:1;;72686:7;;;;;;;;;:32;-1:-1:-1;;;;;72686:32:0;;;-1:-1:-1;;;;;72686:32:0;;;;;72739:12;72729:4;72734:1;72729:7;;;;;;;;-1:-1:-1;;;;;72729:22:0;;;:7;;;;;;;;;;:22;;;;72790:15;;:211;;-1:-1:-1;;;72790:211:0;;:15;:211;;;;;;;;;;;;;72975:15;72790:211;;;;;;;;;;;;;;;;;;;;;:15;;;;;:66;;72864:9;;72790:15;;72933:4;;72952:8;;72790:211;;;;;;;;;;;;;;;:15;:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;74293:537;74484:15;;74452:62;;74469:4;;-1:-1:-1;;;;;74484:15:0;74502:11;74452:8;:62::i;:::-;74556:15;;74760:11;;74556:256;;;-1:-1:-1;;;74556:256:0;;74628:4;74556:256;;;;;;;;;;:15;:256;;;;;;;;;;-1:-1:-1;;;;;74760:11:0;;;74556:256;;;;74786:15;74556:256;;;;;;:15;;;;;:31;;74595:9;;74556:256;;;;;;;;;;;;;;;74595:9;74556:15;:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;73624:663;73804:16;;;73818:1;73804:16;;;;;;;;;73780:21;;73804:16;;;;;;;;;;-1:-1:-1;73804:16:0;73780:40;;73849:4;73831;73836:1;73831:7;;;;;;;;-1:-1:-1;;;;;73831:23:0;;;:7;;;;;;;;;;:23;;;;73875:15;;:22;;;-1:-1:-1;;;73875:22:0;;;;:15;;;;;:20;;:22;;;;;73831:7;;73875:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;73875:22:0;73865:7;;:4;;73870:1;;73865:7;;;;;;-1:-1:-1;;;;;73865:32:0;;;:7;;;;;;;;;:32;73918:13;;73908:7;;73918:13;;;73908:4;;73913:1;;73908:7;;;;;;-1:-1:-1;;;;;73908:23:0;;;:7;;;;;;;;;:23;73976:15;;73944:62;;73961:4;;73976:15;73994:11;73944:8;:62::i;:::-;74045:15;;:224;;-1:-1:-1;;;74045:224:0;;;;;;;;:15;:224;;;;;;-1:-1:-1;;;;;74045:224:0;;;;;;;74243:15;74045:224;;;;;;;;;;;;;;;;;;;;;:15;;;;;:69;;74129:11;;74200:4;;74219:9;;74243:15;74045:224;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;73624:663;;;:::o
Swarm Source
ipfs://4469fd47da36ab3b2456197cb8ed70e40643984947fd62417d77a7a7fc6bb08a
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.