Overview
FTM Balance
0 FTM
FTM Value
$0.00More Info
Private Name Tags
ContractCreator:
TokenTracker
Sponsored
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
6033800 | 1052 days ago | Contract Creation | 0 FTM |
Loading...
Loading
Contract Name:
CASAC
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2021-05-11 */ /** *Submitted for verification at BscScan.com on 2021-03-27 */ // CASAC COIN : A FTM solidarity token // // Telegram: https://t.me/casac_token // SPDX-License-Identifier: MIT pragma solidity ^0.8.2; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(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; } } /** * @dev Interface of the BEP20 standard as defined in the EIP. */ interface IBEP20 { /** * @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); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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. */ 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 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; } } contract CASAC is Context, IBEP20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcluded; mapping (address => bool) private _isCharity; address[] private _excluded; address[] private _charity; string private constant _NAME = 'CASAC Token'; string private constant _SYMBOL = 'CASAC'; uint8 private constant _DECIMALS = 9; uint256 private constant _MAX = ~uint256(0); uint256 private constant _DECIMALFACTOR = 10 ** uint256(_DECIMALS); uint256 private constant _GRANULARITY = 100; uint256 private _tTotal = 333333333 * _DECIMALFACTOR; uint256 private _rTotal = (_MAX - (_MAX % _tTotal)); uint256 private _tFeeTotal; uint256 private _tBurnTotal; uint256 private _tCharityTotal; uint256 private _TAX_FEE = 300; // 3% BACK TO HOLDERS uint256 private _BURN_FEE = 300; // 3% BURNED uint256 private _CHARITY_FEE = 300; // 3% TO CHARITY WALLET uint256 private constant _MAX_TX_SIZE = 3333333330 * _DECIMALFACTOR; // Track original fees to bypass fees for charity account uint256 private ORIG_TAX_FEE = _TAX_FEE; uint256 private ORIG_BURN_FEE = _BURN_FEE; uint256 private ORIG_CHARITY_FEE = _CHARITY_FEE; constructor () { _rOwned[_msgSender()] = _rTotal; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public pure returns (string memory) { return _NAME; } function symbol() public pure returns (string memory) { return _SYMBOL; } function decimals() public pure returns (uint8) { return _DECIMALS; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero")); return true; } function isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function isCharity(address account) public view returns (bool) { return _isCharity[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function totalBurn() public view returns (uint256) { return _tBurnTotal; } function totalCharity() public view returns (uint256) { return _tCharityTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeAccount(address account) external onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function setAsCharityAccount(address account) external onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'The Uniswap router can not be the charity account.'); require(!_isCharity[account], "Account is already charity account"); _isCharity[account] = true; _charity.push(account); } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "BEP20: approve from the zero address"); require(spender != address(0), "BEP20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address sender, address recipient, uint256 amount) private { require(sender != address(0), "BEP20: transfer from the zero address"); require(recipient != address(0), "BEP20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); // Remove fees for transfers to and from charity account or to excluded account bool takeFee = true; if (_isCharity[sender] || _isCharity[recipient] || _isExcluded[recipient]) { takeFee = false; } if (!takeFee) removeAllFee(); if (sender != owner() && recipient != owner()) require(amount <= _MAX_TX_SIZE, "Transfer amount exceeds the maxTxAmount."); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount); uint256 rBurn = tBurn.mul(currentRate); uint256 rCharity = tCharity.mul(currentRate); _standardTransferContent(sender, recipient, rAmount, rTransferAmount); _sendToCharity(tCharity, sender); _reflectFee(rFee, rBurn, rCharity, tFee, tBurn, tCharity); emit Transfer(sender, recipient, tTransferAmount); } function _standardTransferContent(address sender, address recipient, uint256 rAmount, uint256 rTransferAmount) private { _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount); uint256 rBurn = tBurn.mul(currentRate); uint256 rCharity = tCharity.mul(currentRate); _excludedFromTransferContent(sender, recipient, tTransferAmount, rAmount, rTransferAmount); _sendToCharity(tCharity, sender); _reflectFee(rFee, rBurn, rCharity, tFee, tBurn, tCharity); emit Transfer(sender, recipient, tTransferAmount); } function _excludedFromTransferContent(address sender, address recipient, uint256 tTransferAmount, uint256 rAmount, uint256 rTransferAmount) private { _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount); uint256 rBurn = tBurn.mul(currentRate); uint256 rCharity = tCharity.mul(currentRate); _excludedToTransferContent(sender, recipient, tAmount, rAmount, rTransferAmount); _sendToCharity(tCharity, sender); _reflectFee(rFee, rBurn, rCharity, tFee, tBurn, tCharity); emit Transfer(sender, recipient, tTransferAmount); } function _excludedToTransferContent(address sender, address recipient, uint256 tAmount, uint256 rAmount, uint256 rTransferAmount) private { _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount); uint256 rBurn = tBurn.mul(currentRate); uint256 rCharity = tCharity.mul(currentRate); _bothTransferContent(sender, recipient, tAmount, rAmount, tTransferAmount, rTransferAmount); _sendToCharity(tCharity, sender); _reflectFee(rFee, rBurn, rCharity, tFee, tBurn, tCharity); emit Transfer(sender, recipient, tTransferAmount); } function _bothTransferContent(address sender, address recipient, uint256 tAmount, uint256 rAmount, uint256 tTransferAmount, uint256 rTransferAmount) private { _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); } function _reflectFee(uint256 rFee, uint256 rBurn, uint256 rCharity, uint256 tFee, uint256 tBurn, uint256 tCharity) private { _rTotal = _rTotal.sub(rFee).sub(rBurn).sub(rCharity); _tFeeTotal = _tFeeTotal.add(tFee); _tBurnTotal = _tBurnTotal.add(tBurn); _tCharityTotal = _tCharityTotal.add(tCharity); _tTotal = _tTotal.sub(tBurn); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tFee, uint256 tBurn, uint256 tCharity) = _getTBasics(tAmount, _TAX_FEE, _BURN_FEE, _CHARITY_FEE); uint256 tTransferAmount = getTTransferAmount(tAmount, tFee, tBurn, tCharity); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rFee) = _getRBasics(tAmount, tFee, currentRate); uint256 rTransferAmount = _getRTransferAmount(rAmount, rFee, tBurn, tCharity, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tBurn, tCharity); } function _getTBasics(uint256 tAmount, uint256 taxFee, uint256 burnFee, uint256 charityFee) private pure returns (uint256, uint256, uint256) { uint256 tFee = ((tAmount.mul(taxFee)).div(_GRANULARITY)).div(100); uint256 tBurn = ((tAmount.mul(burnFee)).div(_GRANULARITY)).div(100); uint256 tCharity = ((tAmount.mul(charityFee)).div(_GRANULARITY)).div(100); return (tFee, tBurn, tCharity); } function getTTransferAmount(uint256 tAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) private pure returns (uint256) { return tAmount.sub(tFee).sub(tBurn).sub(tCharity); } function _getRBasics(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); return (rAmount, rFee); } function _getRTransferAmount(uint256 rAmount, uint256 rFee, uint256 tBurn, uint256 tCharity, uint256 currentRate) private pure returns (uint256) { uint256 rBurn = tBurn.mul(currentRate); uint256 rCharity = tCharity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rBurn).sub(rCharity); return rTransferAmount; } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _sendToCharity(uint256 tCharity, address sender) private { uint256 currentRate = _getRate(); uint256 rCharity = tCharity.mul(currentRate); address currentCharity = _charity[0]; _rOwned[currentCharity] = _rOwned[currentCharity].add(rCharity); _tOwned[currentCharity] = _tOwned[currentCharity].add(tCharity); emit Transfer(sender, currentCharity, tCharity); } function removeAllFee() private { if(_TAX_FEE == 0 && _BURN_FEE == 0 && _CHARITY_FEE == 0) return; ORIG_TAX_FEE = _TAX_FEE; ORIG_BURN_FEE = _BURN_FEE; ORIG_CHARITY_FEE = _CHARITY_FEE; _TAX_FEE = 0; _BURN_FEE = 0; _CHARITY_FEE = 0; } function restoreAllFee() private { _TAX_FEE = ORIG_TAX_FEE; _BURN_FEE = ORIG_BURN_FEE; _CHARITY_FEE = ORIG_CHARITY_FEE; } function _getTaxFee() private view returns(uint256) { return _TAX_FEE; } function _getMaxTxAmount() private pure returns(uint256) { return _MAX_TX_SIZE; } }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isCharity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setAsCharityAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCharity","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":[{"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"}]
Contract Creation Code
6080604052620000126009600a62000158565b62000022906313de435562000223565b600881905562000035906000196200025f565b620000439060001962000245565b60095561012c600d5561012c600e5561012c600f55600d54601055600e54601155600f546012553480156200007757600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600954336000818152600160209081526040808320949094556008549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000296565b600181815b808511156200015057816000190482111562000134576200013462000280565b808516156200014257918102915b93841c939080029062000114565b509250929050565b60006200016683836200016d565b9392505050565b6000826200017e575060016200021d565b816200018d575060006200021d565b8160018114620001a65760028114620001b157620001d1565b60019150506200021d565b60ff841115620001c557620001c562000280565b50506001821b6200021d565b5060208310610133831016604e8410600b8410161715620001f6575081810a6200021d565b6200020283836200010f565b806000190482111562000219576200021962000280565b0290505b92915050565b600081600019048311821515161562000240576200024062000280565b500290565b6000828210156200025a576200025a62000280565b500390565b6000826200027b57634e487b7160e01b81526012600452602481fd5b500690565b634e487b7160e01b600052601160045260246000fd5b61219380620002a66000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063cba0e99611610097578063e81ffbef11610071578063e81ffbef14610363578063f2cc0c181461038f578063f2fde38b146103a2578063f84354f1146103b557600080fd5b8063cba0e996146102f6578063d608b3b214610322578063dd62ed3e1461032a57600080fd5b806370a0823114610279578063715018a61461028c5780638da5cb5b1461029457806395d89b41146102af578063a457c2d7146102d0578063a9059cbb146102e357600080fd5b8063313ce56711610130578063313ce5671461021457806339509351146102235780633bd5d173146102365780633c9f861d1461024b5780634549b03914610253578063457bdf6c1461026657600080fd5b806306fdde0314610178578063095ea7b3146101b157806313114a9d146101d457806318160ddd146101e657806323b872dd146101ee5780632d83811914610201575b600080fd5b60408051808201909152600b81526a21a0a9a0a1902a37b5b2b760a91b60208201525b6040516101a89190611efe565b60405180910390f35b6101c46101bf366004611e8a565b6103c8565b60405190151581526020016101a8565b600a545b6040519081526020016101a8565b6008546101d8565b6101c46101fc366004611e4f565b6103df565b6101d861020f366004611eb3565b610448565b604051600981526020016101a8565b6101c4610231366004611e8a565b6104d1565b610249610244366004611eb3565b610507565b005b600b546101d8565b6101d8610261366004611ecb565b6105f3565b610249610274366004611e03565b610682565b6101d8610287366004611e03565b61080e565b61024961086d565b6000546040516001600160a01b0390911681526020016101a8565b604080518082019091526005815264434153414360d81b602082015261019b565b6101c46102de366004611e8a565b6108e1565b6101c46102f1366004611e8a565b610930565b6101c4610304366004611e03565b6001600160a01b031660009081526004602052604090205460ff1690565b600c546101d8565b6101d8610338366004611e1d565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101c4610371366004611e03565b6001600160a01b031660009081526005602052604090205460ff1690565b61024961039d366004611e03565b61093d565b6102496103b0366004611e03565b610b08565b6102496103c3366004611e03565b610bf2565b60006103d5338484610de1565b5060015b92915050565b60006103ec848484610f05565b61043e843361043985604051806060016040528060288152602001612111602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906112c9565b610de1565b5060019392505050565b60006009548211156104b45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b60006104be611303565b90506104ca8382611326565b9392505050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916103d59185906104399086611368565b3360008181526004602052604090205460ff161561057c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016104ab565b6000610587836113c7565b5050506001600160a01b0386166000908152600160205260409020549394506105b59392508491505061144b565b6001600160a01b0383166000908152600160205260409020556009546105db908261144b565b600955600a546105eb9084611368565b600a55505050565b60006008548311156106475760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016104ab565b81610667576000610657846113c7565b509496506103d995505050505050565b6000610672846113c7565b509396506103d995505050505050565b6000546001600160a01b031633146106ac5760405162461bcd60e51b81526004016104ab90611f51565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156107345760405162461bcd60e51b815260206004820152603260248201527f54686520556e697377617020726f757465722063616e206e6f74206265207468604482015271329031b430b934ba3c9030b1b1b7bab73a1760711b60648201526084016104ab565b6001600160a01b03811660009081526005602052604090205460ff16156107a85760405162461bcd60e51b815260206004820152602260248201527f4163636f756e7420697320616c72656164792063686172697479206163636f756044820152611b9d60f21b60648201526084016104ab565b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b03811660009081526004602052604081205460ff161561084b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546103d990610448565b6000546001600160a01b031633146108975760405162461bcd60e51b81526004016104ab90611f51565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006103d5338461043985604051806060016040528060258152602001612139602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906112c9565b60006103d5338484610f05565b6000546001600160a01b031633146109675760405162461bcd60e51b81526004016104ab90611f51565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156109df5760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b60648201526084016104ab565b6001600160a01b03811660009081526004602052604090205460ff1615610a485760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016104ab565b6001600160a01b03811660009081526001602052604090205415610aa2576001600160a01b038116600090815260016020526040902054610a8890610448565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610b325760405162461bcd60e51b81526004016104ab90611f51565b6001600160a01b038116610b975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ab565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c1c5760405162461bcd60e51b81526004016104ab90611f51565b6001600160a01b03811660009081526004602052604090205460ff16610c845760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016104ab565b60005b600654811015610ddd57816001600160a01b031660068281548110610cbc57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610dcb5760068054610ce7906001906120c8565b81548110610d0557634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169183908110610d3f57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff191690556006805480610da557634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dd5816120df565b915050610c87565b5050565b6001600160a01b038316610e435760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104ab565b6001600160a01b038216610ea45760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104ab565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610f695760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104ab565b6001600160a01b038216610fcb5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104ab565b6000811161102d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016104ab565b6001600160a01b03831660009081526005602052604090205460019060ff168061106f57506001600160a01b03831660009081526005602052604090205460ff165b8061109257506001600160a01b03831660009081526004602052604090205460ff165b1561109b575060005b806110a8576110a861148d565b6000546001600160a01b038581169116148015906110d457506000546001600160a01b03848116911614155b15611153576110e56009600a612001565b6110f39063c6aea1526120a9565b8211156111535760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016104ab565b6001600160a01b03841660009081526004602052604090205460ff16801561119457506001600160a01b03831660009081526004602052604090205460ff16155b156111a9576111a48484846114d2565b6112a7565b6001600160a01b03841660009081526004602052604090205460ff161580156111ea57506001600160a01b03831660009081526004602052604090205460ff165b156111fa576111a48484846115a6565b6001600160a01b03841660009081526004602052604090205460ff1615801561123c57506001600160a01b03831660009081526004602052604090205460ff16155b1561124c576111a4848484611606565b6001600160a01b03841660009081526004602052604090205460ff16801561128c57506001600160a01b03831660009081526004602052604090205460ff165b1561129c576111a4848484611665565b6112a7848484611606565b806112c3576112c3601054600d55601154600e55601254600f55565b50505050565b600081848411156112ed5760405162461bcd60e51b81526004016104ab9190611efe565b5060006112fa84866120c8565b95945050505050565b60008060006113106116c6565b909250905061131f8282611326565b9250505090565b60006104ca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611880565b6000806113758385611f86565b9050838110156104ca5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104ab565b6000806000806000806000806000806113e88b600d54600e54600f546118ae565b92509250925060006113fc8c858585611905565b90506000611408611303565b90506000806114188f888561191d565b91509150600061142b8383898988611947565b929e50919c509a5091985093965091945092505050919395979092949650565b60006104ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112c9565b600d5415801561149d5750600e54155b80156114a95750600f54155b156114b057565b600d8054601055600e8054601155600f80546012556000928390559082905555565b60006114dc611303565b905060008060008060008060006114f2896113c7565b96509650965096509650965096506000611515898461198390919063ffffffff16565b90506000611523838b611983565b90506115328d8d8d8c8c611a02565b61153c838e611aa6565b61154a878383888888611ba8565b8b6001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161158f91815260200190565b60405180910390a350505050505050505050505050565b60006115b0611303565b905060008060008060008060006115c6896113c7565b965096509650965096509650965060006115e9898461198390919063ffffffff16565b905060006115f7838b611983565b90506115328d8d888c8c611c10565b6000611610611303565b90506000806000806000806000611626896113c7565b96509650965096509650965096506000611649898461198390919063ffffffff16565b90506000611657838b611983565b90506115328d8d8b8b611c98565b600061166f611303565b90506000806000806000806000611685896113c7565b965096509650965096509650965060006116a8898461198390919063ffffffff16565b905060006116b6838b611983565b90506115328d8d8d8c8a8d611d0c565b6009546008546000918291825b6006548110156118505782600160006006848154811061170357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061177c575081600260006006848154811061175557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561179257600954600854945094505050509091565b6117e660016000600684815481106117ba57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061144b565b925061183c600260006006848154811061181057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061144b565b915080611848816120df565b9150506116d3565b5060085460095461186091611326565b821015611877576009546008549350935050509091565b90939092509050565b600081836118a15760405162461bcd60e51b81526004016104ab9190611efe565b5060006112fa8486611f9e565b60008080806118ca60646118c481818c8c611983565b90611326565b905060006118df60646118c481818d8c611983565b905060006118f460646118c481818e8c611983565b929a91995091975095505050505050565b60006112fa826119178581898961144b565b9061144b565b6000808061192b8685611983565b905060006119398686611983565b919791965090945050505050565b6000806119548584611983565b905060006119628585611983565b905060006119768261191785818d8d61144b565b9998505050505050505050565b600082611992575060006103d9565b600061199e83856120a9565b9050826119ab8583611f9e565b146104ca5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104ab565b6001600160a01b038516600090815260026020526040902054611a25908461144b565b6001600160a01b038616600090815260026020908152604080832093909355600190522054611a54908361144b565b6001600160a01b038087166000908152600160205260408082209390935590861681522054611a839082611368565b6001600160a01b0390941660009081526001602052604090209390935550505050565b6000611ab0611303565b90506000611abe8483611983565b905060006007600081548110611ae457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168083526001909152604090912054909150611b169083611368565b6001600160a01b038216600090815260016020908152604080832093909355600290522054611b459086611368565b6001600160a01b0380831660008181526002602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b999089815260200190565b60405180910390a35050505050565b611bc584611917876119178a60095461144b90919063ffffffff16565b600955600a54611bd59084611368565b600a55600b54611be59083611368565b600b55600c54611bf59082611368565b600c55600854611c05908361144b565b600855505050505050565b6001600160a01b038516600090815260016020526040902054611c33908361144b565b6001600160a01b03808716600090815260016020908152604080832094909455918716815260029091522054611c699084611368565b6001600160a01b038516600090815260026020908152604080832093909355600190522054611a839082611368565b6001600160a01b038416600090815260016020526040902054611cbb908361144b565b6001600160a01b038086166000908152600160205260408082209390935590851681522054611cea9082611368565b6001600160a01b03909316600090815260016020526040902092909255505050565b6001600160a01b038616600090815260026020526040902054611d2f908561144b565b6001600160a01b038716600090815260026020908152604080832093909355600190522054611d5e908461144b565b6001600160a01b03808816600090815260016020908152604080832094909455918816815260029091522054611d949083611368565b6001600160a01b038616600090815260026020908152604080832093909355600190522054611dc39082611368565b6001600160a01b039095166000908152600160205260409020949094555050505050565b80356001600160a01b0381168114611dfe57600080fd5b919050565b600060208284031215611e14578081fd5b6104ca82611de7565b60008060408385031215611e2f578081fd5b611e3883611de7565b9150611e4660208401611de7565b90509250929050565b600080600060608486031215611e63578081fd5b611e6c84611de7565b9250611e7a60208501611de7565b9150604084013590509250925092565b60008060408385031215611e9c578182fd5b611ea583611de7565b946020939093013593505050565b600060208284031215611ec4578081fd5b5035919050565b60008060408385031215611edd578182fd5b8235915060208301358015158114611ef3578182fd5b809150509250929050565b6000602080835283518082850152825b81811015611f2a57858101830151858201604001528201611f0e565b81811115611f3b5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115611f9957611f996120fa565b500190565b600082611fb957634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115611ff9578160001904821115611fdf57611fdf6120fa565b80851615611fec57918102915b93841c9390800290611fc3565b509250929050565b60006104ca8383600082612017575060016103d9565b81612024575060006103d9565b816001811461203a576002811461204457612060565b60019150506103d9565b60ff841115612055576120556120fa565b50506001821b6103d9565b5060208310610133831016604e8410600b8410161715612083575081810a6103d9565b61208d8383611fbe565b80600019048211156120a1576120a16120fa565b029392505050565b60008160001904831182151516156120c3576120c36120fa565b500290565b6000828210156120da576120da6120fa565b500390565b60006000198214156120f3576120f36120fa565b5060010190565b634e487b7160e01b600052601160045260246000fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d116b5b09a65ba28abb76723355cb0bfb23c913a0cf1bf9b43e81625165ecce664736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063cba0e99611610097578063e81ffbef11610071578063e81ffbef14610363578063f2cc0c181461038f578063f2fde38b146103a2578063f84354f1146103b557600080fd5b8063cba0e996146102f6578063d608b3b214610322578063dd62ed3e1461032a57600080fd5b806370a0823114610279578063715018a61461028c5780638da5cb5b1461029457806395d89b41146102af578063a457c2d7146102d0578063a9059cbb146102e357600080fd5b8063313ce56711610130578063313ce5671461021457806339509351146102235780633bd5d173146102365780633c9f861d1461024b5780634549b03914610253578063457bdf6c1461026657600080fd5b806306fdde0314610178578063095ea7b3146101b157806313114a9d146101d457806318160ddd146101e657806323b872dd146101ee5780632d83811914610201575b600080fd5b60408051808201909152600b81526a21a0a9a0a1902a37b5b2b760a91b60208201525b6040516101a89190611efe565b60405180910390f35b6101c46101bf366004611e8a565b6103c8565b60405190151581526020016101a8565b600a545b6040519081526020016101a8565b6008546101d8565b6101c46101fc366004611e4f565b6103df565b6101d861020f366004611eb3565b610448565b604051600981526020016101a8565b6101c4610231366004611e8a565b6104d1565b610249610244366004611eb3565b610507565b005b600b546101d8565b6101d8610261366004611ecb565b6105f3565b610249610274366004611e03565b610682565b6101d8610287366004611e03565b61080e565b61024961086d565b6000546040516001600160a01b0390911681526020016101a8565b604080518082019091526005815264434153414360d81b602082015261019b565b6101c46102de366004611e8a565b6108e1565b6101c46102f1366004611e8a565b610930565b6101c4610304366004611e03565b6001600160a01b031660009081526004602052604090205460ff1690565b600c546101d8565b6101d8610338366004611e1d565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101c4610371366004611e03565b6001600160a01b031660009081526005602052604090205460ff1690565b61024961039d366004611e03565b61093d565b6102496103b0366004611e03565b610b08565b6102496103c3366004611e03565b610bf2565b60006103d5338484610de1565b5060015b92915050565b60006103ec848484610f05565b61043e843361043985604051806060016040528060288152602001612111602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906112c9565b610de1565b5060019392505050565b60006009548211156104b45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b60006104be611303565b90506104ca8382611326565b9392505050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916103d59185906104399086611368565b3360008181526004602052604090205460ff161561057c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016104ab565b6000610587836113c7565b5050506001600160a01b0386166000908152600160205260409020549394506105b59392508491505061144b565b6001600160a01b0383166000908152600160205260409020556009546105db908261144b565b600955600a546105eb9084611368565b600a55505050565b60006008548311156106475760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016104ab565b81610667576000610657846113c7565b509496506103d995505050505050565b6000610672846113c7565b509396506103d995505050505050565b6000546001600160a01b031633146106ac5760405162461bcd60e51b81526004016104ab90611f51565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156107345760405162461bcd60e51b815260206004820152603260248201527f54686520556e697377617020726f757465722063616e206e6f74206265207468604482015271329031b430b934ba3c9030b1b1b7bab73a1760711b60648201526084016104ab565b6001600160a01b03811660009081526005602052604090205460ff16156107a85760405162461bcd60e51b815260206004820152602260248201527f4163636f756e7420697320616c72656164792063686172697479206163636f756044820152611b9d60f21b60648201526084016104ab565b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b03811660009081526004602052604081205460ff161561084b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546103d990610448565b6000546001600160a01b031633146108975760405162461bcd60e51b81526004016104ab90611f51565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006103d5338461043985604051806060016040528060258152602001612139602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906112c9565b60006103d5338484610f05565b6000546001600160a01b031633146109675760405162461bcd60e51b81526004016104ab90611f51565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156109df5760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b60648201526084016104ab565b6001600160a01b03811660009081526004602052604090205460ff1615610a485760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016104ab565b6001600160a01b03811660009081526001602052604090205415610aa2576001600160a01b038116600090815260016020526040902054610a8890610448565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610b325760405162461bcd60e51b81526004016104ab90611f51565b6001600160a01b038116610b975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ab565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c1c5760405162461bcd60e51b81526004016104ab90611f51565b6001600160a01b03811660009081526004602052604090205460ff16610c845760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016104ab565b60005b600654811015610ddd57816001600160a01b031660068281548110610cbc57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610dcb5760068054610ce7906001906120c8565b81548110610d0557634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169183908110610d3f57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff191690556006805480610da557634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dd5816120df565b915050610c87565b5050565b6001600160a01b038316610e435760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104ab565b6001600160a01b038216610ea45760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104ab565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610f695760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104ab565b6001600160a01b038216610fcb5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104ab565b6000811161102d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016104ab565b6001600160a01b03831660009081526005602052604090205460019060ff168061106f57506001600160a01b03831660009081526005602052604090205460ff165b8061109257506001600160a01b03831660009081526004602052604090205460ff165b1561109b575060005b806110a8576110a861148d565b6000546001600160a01b038581169116148015906110d457506000546001600160a01b03848116911614155b15611153576110e56009600a612001565b6110f39063c6aea1526120a9565b8211156111535760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016104ab565b6001600160a01b03841660009081526004602052604090205460ff16801561119457506001600160a01b03831660009081526004602052604090205460ff16155b156111a9576111a48484846114d2565b6112a7565b6001600160a01b03841660009081526004602052604090205460ff161580156111ea57506001600160a01b03831660009081526004602052604090205460ff165b156111fa576111a48484846115a6565b6001600160a01b03841660009081526004602052604090205460ff1615801561123c57506001600160a01b03831660009081526004602052604090205460ff16155b1561124c576111a4848484611606565b6001600160a01b03841660009081526004602052604090205460ff16801561128c57506001600160a01b03831660009081526004602052604090205460ff165b1561129c576111a4848484611665565b6112a7848484611606565b806112c3576112c3601054600d55601154600e55601254600f55565b50505050565b600081848411156112ed5760405162461bcd60e51b81526004016104ab9190611efe565b5060006112fa84866120c8565b95945050505050565b60008060006113106116c6565b909250905061131f8282611326565b9250505090565b60006104ca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611880565b6000806113758385611f86565b9050838110156104ca5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104ab565b6000806000806000806000806000806113e88b600d54600e54600f546118ae565b92509250925060006113fc8c858585611905565b90506000611408611303565b90506000806114188f888561191d565b91509150600061142b8383898988611947565b929e50919c509a5091985093965091945092505050919395979092949650565b60006104ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112c9565b600d5415801561149d5750600e54155b80156114a95750600f54155b156114b057565b600d8054601055600e8054601155600f80546012556000928390559082905555565b60006114dc611303565b905060008060008060008060006114f2896113c7565b96509650965096509650965096506000611515898461198390919063ffffffff16565b90506000611523838b611983565b90506115328d8d8d8c8c611a02565b61153c838e611aa6565b61154a878383888888611ba8565b8b6001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161158f91815260200190565b60405180910390a350505050505050505050505050565b60006115b0611303565b905060008060008060008060006115c6896113c7565b965096509650965096509650965060006115e9898461198390919063ffffffff16565b905060006115f7838b611983565b90506115328d8d888c8c611c10565b6000611610611303565b90506000806000806000806000611626896113c7565b96509650965096509650965096506000611649898461198390919063ffffffff16565b90506000611657838b611983565b90506115328d8d8b8b611c98565b600061166f611303565b90506000806000806000806000611685896113c7565b965096509650965096509650965060006116a8898461198390919063ffffffff16565b905060006116b6838b611983565b90506115328d8d8d8c8a8d611d0c565b6009546008546000918291825b6006548110156118505782600160006006848154811061170357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061177c575081600260006006848154811061175557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561179257600954600854945094505050509091565b6117e660016000600684815481106117ba57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061144b565b925061183c600260006006848154811061181057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061144b565b915080611848816120df565b9150506116d3565b5060085460095461186091611326565b821015611877576009546008549350935050509091565b90939092509050565b600081836118a15760405162461bcd60e51b81526004016104ab9190611efe565b5060006112fa8486611f9e565b60008080806118ca60646118c481818c8c611983565b90611326565b905060006118df60646118c481818d8c611983565b905060006118f460646118c481818e8c611983565b929a91995091975095505050505050565b60006112fa826119178581898961144b565b9061144b565b6000808061192b8685611983565b905060006119398686611983565b919791965090945050505050565b6000806119548584611983565b905060006119628585611983565b905060006119768261191785818d8d61144b565b9998505050505050505050565b600082611992575060006103d9565b600061199e83856120a9565b9050826119ab8583611f9e565b146104ca5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104ab565b6001600160a01b038516600090815260026020526040902054611a25908461144b565b6001600160a01b038616600090815260026020908152604080832093909355600190522054611a54908361144b565b6001600160a01b038087166000908152600160205260408082209390935590861681522054611a839082611368565b6001600160a01b0390941660009081526001602052604090209390935550505050565b6000611ab0611303565b90506000611abe8483611983565b905060006007600081548110611ae457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168083526001909152604090912054909150611b169083611368565b6001600160a01b038216600090815260016020908152604080832093909355600290522054611b459086611368565b6001600160a01b0380831660008181526002602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b999089815260200190565b60405180910390a35050505050565b611bc584611917876119178a60095461144b90919063ffffffff16565b600955600a54611bd59084611368565b600a55600b54611be59083611368565b600b55600c54611bf59082611368565b600c55600854611c05908361144b565b600855505050505050565b6001600160a01b038516600090815260016020526040902054611c33908361144b565b6001600160a01b03808716600090815260016020908152604080832094909455918716815260029091522054611c699084611368565b6001600160a01b038516600090815260026020908152604080832093909355600190522054611a839082611368565b6001600160a01b038416600090815260016020526040902054611cbb908361144b565b6001600160a01b038086166000908152600160205260408082209390935590851681522054611cea9082611368565b6001600160a01b03909316600090815260016020526040902092909255505050565b6001600160a01b038616600090815260026020526040902054611d2f908561144b565b6001600160a01b038716600090815260026020908152604080832093909355600190522054611d5e908461144b565b6001600160a01b03808816600090815260016020908152604080832094909455918816815260029091522054611d949083611368565b6001600160a01b038616600090815260026020908152604080832093909355600190522054611dc39082611368565b6001600160a01b039095166000908152600160205260409020949094555050505050565b80356001600160a01b0381168114611dfe57600080fd5b919050565b600060208284031215611e14578081fd5b6104ca82611de7565b60008060408385031215611e2f578081fd5b611e3883611de7565b9150611e4660208401611de7565b90509250929050565b600080600060608486031215611e63578081fd5b611e6c84611de7565b9250611e7a60208501611de7565b9150604084013590509250925092565b60008060408385031215611e9c578182fd5b611ea583611de7565b946020939093013593505050565b600060208284031215611ec4578081fd5b5035919050565b60008060408385031215611edd578182fd5b8235915060208301358015158114611ef3578182fd5b809150509250929050565b6000602080835283518082850152825b81811015611f2a57858101830151858201604001528201611f0e565b81811115611f3b5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115611f9957611f996120fa565b500190565b600082611fb957634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115611ff9578160001904821115611fdf57611fdf6120fa565b80851615611fec57918102915b93841c9390800290611fc3565b509250929050565b60006104ca8383600082612017575060016103d9565b81612024575060006103d9565b816001811461203a576002811461204457612060565b60019150506103d9565b60ff841115612055576120556120fa565b50506001821b6103d9565b5060208310610133831016604e8410600b8410161715612083575081810a6103d9565b61208d8383611fbe565b80600019048211156120a1576120a16120fa565b029392505050565b60008160001904831182151516156120c3576120c36120fa565b500290565b6000828210156120da576120da6120fa565b500390565b60006000198214156120f3576120f36120fa565b5060010190565b634e487b7160e01b600052601160045260246000fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d116b5b09a65ba28abb76723355cb0bfb23c913a0cf1bf9b43e81625165ecce664736f6c63430008040033
Deployed Bytecode Sourcemap
17029:16631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18669:83;18739:5;;;;;;;;;;;;-1:-1:-1;;;18739:5:0;;;;18669:83;;;;;;;:::i;:::-;;;;;;;;19581:161;;;;;;:::i;:::-;;:::i;:::-;;;2214:14:1;;2207:22;2189:41;;2177:2;2162:18;19581:161:0;2144:92:1;20812:87:0;20881:10;;20812:87;;;9723:25:1;;;9711:2;9696:18;20812:87:0;9678:76:1;18946:95:0;19026:7;;18946:95;;19750:313;;;;;;:::i;:::-;;:::i;21945:253::-;;;;;;:::i;:::-;;:::i;18855:83::-;;;17641:1;9901:36:1;;9889:2;9874:18;18855:83:0;9856:87:1;20071:218:0;;;;;;:::i;:::-;;:::i;21113:378::-;;;;;;:::i;:::-;;:::i;:::-;;20911:88;20980:11;;20911:88;;21499:438;;;;;;:::i;:::-;;:::i;23143:350::-;;;;;;:::i;:::-;;:::i;19049:198::-;;;;;;:::i;:::-;;:::i;16475:148::-;;;:::i;15833:79::-;15871:7;15898:6;15833:79;;-1:-1:-1;;;;;15898:6:0;;;1987:51:1;;1975:2;1960:18;15833:79:0;1942:102:1;18760:87:0;18832:7;;;;;;;;;;;;-1:-1:-1;;;18832:7:0;;;;18760:87;;20297:269;;;;;;:::i;:::-;;:::i;19255:167::-;;;;;;:::i;:::-;;:::i;20574:110::-;;;;;;:::i;:::-;-1:-1:-1;;;;;20656:20:0;20632:4;20656:20;;;:11;:20;;;;;;;;;20574:110;21011:94;21083:14;;21011:94;;19430:143;;;;;;:::i;:::-;-1:-1:-1;;;;;19538:18:0;;;19511:7;19538:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19430:143;20696:108;;;;;;:::i;:::-;-1:-1:-1;;;;;20777:19:0;20753:4;20777:19;;;:10;:19;;;;;;;;;20696:108;22206:443;;;;;;:::i;:::-;;:::i;16778:244::-;;;;;;:::i;:::-;;:::i;22657:478::-;;;;;;:::i;:::-;;:::i;19581:161::-;19656:4;19673:39;395:10;19696:7;19705:6;19673:8;:39::i;:::-;-1:-1:-1;19730:4:0;19581:161;;;;;:::o;19750:313::-;19848:4;19865:36;19875:6;19883:9;19894:6;19865:9;:36::i;:::-;19912:121;19921:6;395:10;19943:89;19981:6;19943:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19943:19:0;;;;;;:11;:19;;;;;;;;395:10;19943:33;;;;;;;;;;:37;:89::i;:::-;19912:8;:121::i;:::-;-1:-1:-1;20051:4:0;19750:313;;;;;:::o;21945:253::-;22011:7;22050;;22039;:18;;22031:73;;;;-1:-1:-1;;;22031:73:0;;3862:2:1;22031:73:0;;;3844:21:1;3901:2;3881:18;;;3874:30;3940:34;3920:18;;;3913:62;-1:-1:-1;;;3991:18:1;;;3984:40;4041:19;;22031:73:0;;;;;;;;;22115:19;22138:10;:8;:10::i;:::-;22115:33;-1:-1:-1;22166:24:0;:7;22115:33;22166:11;:24::i;:::-;22159:31;21945:253;-1:-1:-1;;;21945:253:0:o;20071:218::-;395:10;20159:4;20208:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20208:34:0;;;;;;;;;;20159:4;;20176:83;;20199:7;;20208:50;;20247:10;20208:38;:50::i;21113:378::-;395:10;21165:14;21214:19;;;:11;:19;;;;;;;;21213:20;21205:77;;;;-1:-1:-1;;;21205:77:0;;8544:2:1;21205:77:0;;;8526:21:1;8583:2;8563:18;;;8556:30;8622:34;8602:18;;;8595:62;-1:-1:-1;;;8673:18:1;;;8666:42;8725:19;;21205:77:0;8516:234:1;21205:77:0;21294:15;21319:19;21330:7;21319:10;:19::i;:::-;-1:-1:-1;;;;;;;;21367:15:0;;;;;;:7;:15;;;;;;21293:45;;-1:-1:-1;21367:28:0;;:15;-1:-1:-1;21293:45:0;;-1:-1:-1;;21367:19:0;:28::i;:::-;-1:-1:-1;;;;;21349:15:0;;;;;;:7;:15;;;;;:46;21416:7;;:20;;21428:7;21416:11;:20::i;:::-;21406:7;:30;21460:10;;:23;;21475:7;21460:14;:23::i;:::-;21447:10;:36;-1:-1:-1;;;21113:378:0:o;21499:438::-;21589:7;21628;;21617;:18;;21609:62;;;;-1:-1:-1;;;21609:62:0;;5795:2:1;21609:62:0;;;5777:21:1;5834:2;5814:18;;;5807:30;5873:33;5853:18;;;5846:61;5924:18;;21609:62:0;5767:181:1;21609:62:0;21687:17;21682:248;;21722:15;21747:19;21758:7;21747:10;:19::i;:::-;-1:-1:-1;21721:45:0;;-1:-1:-1;21781:14:0;;-1:-1:-1;;;;;;21781:14:0;21682:248;21830:23;21862:19;21873:7;21862:10;:19::i;:::-;-1:-1:-1;21828:53:0;;-1:-1:-1;21896:22:0;;-1:-1:-1;;;;;;21896:22:0;23143:350;16045:6;;-1:-1:-1;;;;;16045:6:0;395:10;16045:22;16037:67;;;;-1:-1:-1;;;16037:67:0;;;;;;;:::i;:::-;23240:42:::1;-1:-1:-1::0;;;;;23229:53:0;::::1;;;23221:116;;;::::0;-1:-1:-1;;;23221:116:0;;9360:2:1;23221:116:0::1;::::0;::::1;9342:21:1::0;9399:2;9379:18;;;9372:30;9438:34;9418:18;;;9411:62;-1:-1:-1;;;9489:18:1;;;9482:48;9547:19;;23221:116:0::1;9332:240:1::0;23221:116:0::1;-1:-1:-1::0;;;;;23357:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;23356:20;23348:67;;;::::0;-1:-1:-1;;;23348:67:0;;5392:2:1;23348:67:0::1;::::0;::::1;5374:21:1::0;5431:2;5411:18;;;5404:30;5470:34;5450:18;;;5443:62;-1:-1:-1;;;5521:18:1;;;5514:32;5563:19;;23348:67:0::1;5364:224:1::0;23348:67:0::1;-1:-1:-1::0;;;;;23426:19:0::1;;::::0;;;:10:::1;:19;::::0;;;;:26;;-1:-1:-1;;23426:26:0::1;23448:4;23426:26:::0;;::::1;::::0;;;23463:8:::1;:22:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;23463:22:0::1;::::0;;::::1;::::0;;23143:350::o;19049:198::-;-1:-1:-1;;;;;19139:20:0;;19115:7;19139:20;;;:11;:20;;;;;;;;19135:49;;;-1:-1:-1;;;;;;19168:16:0;;;;;:7;:16;;;;;;;19049:198::o;19135:49::-;-1:-1:-1;;;;;19222:16:0;;;;;;:7;:16;;;;;;19202:37;;:19;:37::i;16475:148::-;16045:6;;-1:-1:-1;;;;;16045:6:0;395:10;16045:22;16037:67;;;;-1:-1:-1;;;16037:67:0;;;;;;;:::i;:::-;16582:1:::1;16566:6:::0;;16545:40:::1;::::0;-1:-1:-1;;;;;16566:6:0;;::::1;::::0;16545:40:::1;::::0;16582:1;;16545:40:::1;16613:1;16596:19:::0;;-1:-1:-1;;;;;;16596:19:0::1;::::0;;16475:148::o;20297:269::-;20390:4;20407:129;395:10;20430:7;20439:96;20478:15;20439:96;;;;;;;;;;;;;;;;;395:10;20439:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20439:34:0;;;;;;;;;;;;:38;:96::i;19255:167::-;19333:4;19350:42;395:10;19374:9;19385:6;19350:9;:42::i;22206:443::-;16045:6;;-1:-1:-1;;;;;16045:6:0;395:10;16045:22;16037:67;;;;-1:-1:-1;;;16037:67:0;;;;;;;:::i;:::-;22298:42:::1;-1:-1:-1::0;;;;;22287:53:0;::::1;;;22279:100;;;::::0;-1:-1:-1;;;22279:100:0;;8141:2:1;22279:100:0::1;::::0;::::1;8123:21:1::0;8180:2;8160:18;;;8153:30;8219:34;8199:18;;;8192:62;-1:-1:-1;;;8270:18:1;;;8263:32;8312:19;;22279:100:0::1;8113:224:1::0;22279:100:0::1;-1:-1:-1::0;;;;;22399:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22398:21;22390:61;;;::::0;-1:-1:-1;;;22390:61:0;;5036:2:1;22390:61:0::1;::::0;::::1;5018:21:1::0;5075:2;5055:18;;;5048:30;5114:29;5094:18;;;5087:57;5161:18;;22390:61:0::1;5008:177:1::0;22390:61:0::1;-1:-1:-1::0;;;;;22465:16:0;::::1;22484:1;22465:16:::0;;;:7:::1;:16;::::0;;;;;:20;22462:108:::1;;-1:-1:-1::0;;;;;22541:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22521:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22502:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22462:108:::1;-1:-1:-1::0;;;;;22580:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22580:27:0::1;22603:4;22580:27:::0;;::::1;::::0;;;22618:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22618:23:0::1;::::0;;::::1;::::0;;22206:443::o;16778:244::-;16045:6;;-1:-1:-1;;;;;16045:6:0;395:10;16045:22;16037:67;;;;-1:-1:-1;;;16037:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16867:22:0;::::1;16859:73;;;::::0;-1:-1:-1;;;16859:73:0;;4273:2:1;16859:73:0::1;::::0;::::1;4255:21:1::0;4312:2;4292:18;;;4285:30;4351:34;4331:18;;;4324:62;-1:-1:-1;;;4402:18:1;;;4395:36;4448:19;;16859:73:0::1;4245:228:1::0;16859:73:0::1;16969:6;::::0;;16948:38:::1;::::0;-1:-1:-1;;;;;16948:38:0;;::::1;::::0;16969:6;::::1;::::0;16948:38:::1;::::0;::::1;16997:6;:17:::0;;-1:-1:-1;;;;;;16997:17:0::1;-1:-1:-1::0;;;;;16997:17:0;;;::::1;::::0;;;::::1;::::0;;16778:244::o;22657:478::-;16045:6;;-1:-1:-1;;;;;16045:6:0;395:10;16045:22;16037:67;;;;-1:-1:-1;;;16037:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22738:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22730:60;;;::::0;-1:-1:-1;;;22730:60:0;;5036:2:1;22730:60:0::1;::::0;::::1;5018:21:1::0;5075:2;5055:18;;;5048:30;5114:29;5094:18;;;5087:57;5161:18;;22730:60:0::1;5008:177:1::0;22730:60:0::1;22806:9;22801:327;22825:9;:16:::0;22821:20;::::1;22801:327;;;22883:7;-1:-1:-1::0;;;;;22867:23:0::1;:9;22877:1;22867:12;;;;;;-1:-1:-1::0;;;22867:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22867:12:0::1;:23;22863:254;;;22926:9;22936:16:::0;;:20:::1;::::0;22955:1:::1;::::0;22936:20:::1;:::i;:::-;22926:31;;;;;;-1:-1:-1::0;;;22926:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22911:9:::1;:12:::0;;-1:-1:-1;;;;;22926:31:0;;::::1;::::0;22921:1;;22911:12;::::1;;;-1:-1:-1::0;;;22911:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22911:46:0::1;-1:-1:-1::0;;;;;22911:46:0;;::::1;;::::0;;22976:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23015:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23015:28:0::1;::::0;;23062:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;23062:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23062:15:0;;;;;-1:-1:-1;;;;;;23062:15:0::1;::::0;;;;;22801:327:::1;22657:478:::0;:::o;22863:254::-:1;22843:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22801:327;;;;22657:478:::0;:::o;23501:337::-;-1:-1:-1;;;;;23594:19:0;;23586:68;;;;-1:-1:-1;;;23586:68:0;;3457:2:1;23586:68:0;;;3439:21:1;3496:2;3476:18;;;3469:30;3535:34;3515:18;;;3508:62;-1:-1:-1;;;3586:18:1;;;3579:34;3630:19;;23586:68:0;3429:226:1;23586:68:0;-1:-1:-1;;;;;23673:21:0;;23665:68;;;;-1:-1:-1;;;23665:68:0;;8957:2:1;23665:68:0;;;8939:21:1;8996:2;8976:18;;;8969:30;9035:34;9015:18;;;9008:62;-1:-1:-1;;;9086:18:1;;;9079:32;9128:19;;23665:68:0;8929:224:1;23665:68:0;-1:-1:-1;;;;;23746:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23798:32;;9723:25:1;;;23798:32:0;;9696:18:1;23798:32:0;;;;;;;23501:337;;;:::o;23846:1428::-;-1:-1:-1;;;;;23943:20:0;;23935:70;;;;-1:-1:-1;;;23935:70:0;;3051:2:1;23935:70:0;;;3033:21:1;3090:2;3070:18;;;3063:30;3129:34;3109:18;;;3102:62;-1:-1:-1;;;3180:18:1;;;3173:35;3225:19;;23935:70:0;3023:227:1;23935:70:0;-1:-1:-1;;;;;24024:23:0;;24016:71;;;;-1:-1:-1;;;24016:71:0;;7737:2:1;24016:71:0;;;7719:21:1;7776:2;7756:18;;;7749:30;7815:34;7795:18;;;7788:62;-1:-1:-1;;;7866:18:1;;;7859:33;7909:19;;24016:71:0;7709:225:1;24016:71:0;24115:1;24106:6;:10;24098:64;;;;-1:-1:-1;;;24098:64:0;;7327:2:1;24098:64:0;;;7309:21:1;7366:2;7346:18;;;7339:30;7405:34;7385:18;;;7378:62;-1:-1:-1;;;7456:18:1;;;7449:39;7505:19;;24098:64:0;7299:231:1;24098:64:0;-1:-1:-1;;;;;24298:18:0;;24264:12;24298:18;;;:10;:18;;;;;;24279:4;;24298:18;;;:43;;-1:-1:-1;;;;;;24320:21:0;;;;;;:10;:21;;;;;;;;24298:43;:69;;;-1:-1:-1;;;;;;24345:22:0;;;;;;:11;:22;;;;;;;;24298:69;24294:117;;;-1:-1:-1;24394:5:0;24294:117;24428:7;24423:28;;24437:14;:12;:14::i;:::-;15871:7;15898:6;-1:-1:-1;;;;;24476:17:0;;;15898:6;;24476:17;;;;:41;;-1:-1:-1;15871:7:0;15898:6;-1:-1:-1;;;;;24497:20:0;;;15898:6;;24497:20;;24476:41;24472:135;;;17746:24;17641:1;17746:2;:24;:::i;:::-;18288:27;;:10;:27;:::i;:::-;24540:6;:22;;24532:75;;;;-1:-1:-1;;;24532:75:0;;6155:2:1;24532:75:0;;;6137:21:1;6194:2;6174:18;;;6167:30;6233:34;6213:18;;;6206:62;-1:-1:-1;;;6284:18:1;;;6277:38;6332:19;;24532:75:0;6127:230:1;24532:75:0;-1:-1:-1;;;;;24632:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;24656:22:0;;;;;;:11;:22;;;;;;;;24655:23;24632:46;24628:597;;;24695:48;24717:6;24725:9;24736:6;24695:21;:48::i;:::-;24628:597;;;-1:-1:-1;;;;;24766:19:0;;;;;;:11;:19;;;;;;;;24765:20;:46;;;;-1:-1:-1;;;;;;24789:22:0;;;;;;:11;:22;;;;;;;;24765:46;24761:464;;;24828:46;24848:6;24856:9;24867:6;24828:19;:46::i;24761:464::-;-1:-1:-1;;;;;24897:19:0;;;;;;:11;:19;;;;;;;;24896:20;:47;;;;-1:-1:-1;;;;;;24921:22:0;;;;;;:11;:22;;;;;;;;24920:23;24896:47;24892:333;;;24960:44;24978:6;24986:9;24997:6;24960:17;:44::i;24892:333::-;-1:-1:-1;;;;;25026:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;25049:22:0;;;;;;:11;:22;;;;;;;;25026:45;25022:203;;;25088:48;25110:6;25118:9;25129:6;25088:21;:48::i;25022:203::-;25169:44;25187:6;25195:9;25206:6;25169:17;:44::i;:::-;25242:7;25237:29;;25251:15;33352:12;;33341:8;:23;33387:13;;33375:9;:25;33426:16;;33411:12;:31;33297:153;25251:15;23846:1428;;;;:::o;5118:192::-;5204:7;5240:12;5232:6;;;;5224:29;;;;-1:-1:-1;;;5224:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5264:9:0;5276:5;5280:1;5276;:5;:::i;:::-;5264:17;5118:192;-1:-1:-1;;;;;5118:192:0:o;31792:163::-;31833:7;31854:15;31871;31890:19;:17;:19::i;:::-;31853:56;;-1:-1:-1;31853:56:0;-1:-1:-1;31927:20:0;31853:56;;31927:11;:20::i;:::-;31920:27;;;;31792:163;:::o;6516:132::-;6574:7;6601:39;6605:1;6608;6601:39;;;;;;;;;;;;;;;;;:3;:39::i;4215:181::-;4273:7;;4305:5;4309:1;4305;:5;:::i;:::-;4293:17;;4334:1;4329;:6;;4321:46;;;;-1:-1:-1;;;4321:46:0;;4680:2:1;4321:46:0;;;4662:21:1;4719:2;4699:18;;;4692:30;4758:29;4738:18;;;4731:57;4805:18;;4321:46:0;4652:177:1;29843:652:0;29902:7;29911;29920;29929;29938;29947;29956;29977:12;29991:13;30006:16;30026:55;30038:7;30047:8;;30057:9;;30068:12;;30026:11;:55::i;:::-;29976:105;;;;;;30092:23;30118:50;30137:7;30146:4;30152:5;30159:8;30118:18;:50::i;:::-;30092:76;;30179:19;30202:10;:8;:10::i;:::-;30179:33;;30224:15;30241:12;30257:39;30269:7;30278:4;30284:11;30257;:39::i;:::-;30223:73;;;;30307:23;30333:64;30353:7;30362:4;30368:5;30375:8;30385:11;30333:19;:64::i;:::-;30416:7;;-1:-1:-1;30307:90:0;;-1:-1:-1;30442:4:0;-1:-1:-1;30448:15:0;;-1:-1:-1;30465:4:0;;-1:-1:-1;30471:5:0;;-1:-1:-1;30478:8:0;-1:-1:-1;;;29843:652:0;;;;;;;;;:::o;4679:136::-;4737:7;4764:43;4768:1;4771;4764:43;;;;;;;;;;;;;;;;;:3;:43::i;32965:320::-;33011:8;;:13;:31;;;;-1:-1:-1;33028:9:0;;:14;33011:31;:52;;;;-1:-1:-1;33046:12:0;;:17;33011:52;33008:64;;;32965:320::o;33008:64::-;33107:8;;;33092:12;:23;33142:9;;;33126:13;:25;33181:12;;;33162:16;:31;-1:-1:-1;33214:12:0;;;;33237:13;;;;33261:16;32965:320::o;27294:671::-;27396:19;27419:10;:8;:10::i;:::-;27396:33;;27441:15;27458:23;27483:12;27497:23;27522:12;27536:13;27551:16;27571:19;27582:7;27571:10;:19::i;:::-;27440:150;;;;;;;;;;;;;;27601:13;27618:22;27628:11;27618:5;:9;;:22;;;;:::i;:::-;27601:39;-1:-1:-1;27651:16:0;27670:25;:8;27683:11;27670:12;:25::i;:::-;27651:44;;27706:80;27733:6;27741:9;27752:7;27761;27770:15;27706:26;:80::i;:::-;27797:32;27812:8;27822:6;27797:14;:32::i;:::-;27840:57;27852:4;27858:5;27865:8;27875:4;27881:5;27888:8;27840:11;:57::i;:::-;27930:9;-1:-1:-1;;;;;27913:44:0;27922:6;-1:-1:-1;;;;;27913:44:0;;27941:15;27913:44;;;;9723:25:1;;9711:2;9696:18;;9678:76;27913:44:0;;;;;;;;27294:671;;;;;;;;;;;;;:::o;26222:687::-;26322:19;26345:10;:8;:10::i;:::-;26322:33;;26367:15;26384:23;26409:12;26423:23;26448:12;26462:13;26477:16;26497:19;26508:7;26497:10;:19::i;:::-;26366:150;;;;;;;;;;;;;;26527:13;26544:22;26554:11;26544:5;:9;;:22;;;;:::i;:::-;26527:39;-1:-1:-1;26577:16:0;26596:25;:8;26609:11;26596:12;:25::i;:::-;26577:44;;26632:90;26661:6;26669:9;26680:15;26697:7;26706:15;26632:28;:90::i;25282:661::-;25380:19;25403:10;:8;:10::i;:::-;25380:33;;25425:15;25442:23;25467:12;25481:23;25506:12;25520:13;25535:16;25555:19;25566:7;25555:10;:19::i;:::-;25424:150;;;;;;;;;;;;;;25585:13;25602:22;25612:11;25602:5;:9;;:22;;;;:::i;:::-;25585:39;-1:-1:-1;25635:16:0;25654:25;:8;25667:11;25654:12;:25::i;:::-;25635:44;;25695:69;25720:6;25728:9;25739:7;25748:15;25695:24;:69::i;28318:688::-;28420:19;28443:10;:8;:10::i;:::-;28420:33;;28465:15;28482:23;28507:12;28521:23;28546:12;28560:13;28575:16;28595:19;28606:7;28595:10;:19::i;:::-;28464:150;;;;;;;;;;;;;;28625:13;28642:22;28652:11;28642:5;:9;;:22;;;;:::i;:::-;28625:39;-1:-1:-1;28675:16:0;28694:25;:8;28707:11;28694:12;:25::i;:::-;28675:44;;28734:91;28755:6;28763:9;28774:7;28783;28792:15;28809;28734:20;:91::i;31963:561::-;32060:7;;32096;;32013;;;;;32120:289;32144:9;:16;32140:20;;32120:289;;;32210:7;32186;:21;32194:9;32204:1;32194:12;;;;;;-1:-1:-1;;;32194:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32194:12:0;32186:21;;;;;;;;;;;;;:31;;:66;;;32245:7;32221;:21;32229:9;32239:1;32229:12;;;;;;-1:-1:-1;;;32229:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32229:12:0;32221:21;;;;;;;;;;;;;:31;32186:66;32182:97;;;32262:7;;32271;;32254:25;;;;;;;31963:561;;:::o;32182:97::-;32304:34;32316:7;:21;32324:9;32334:1;32324:12;;;;;;-1:-1:-1;;;32324:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32324:12:0;32316:21;;;;;;;;;;;;;32304:7;;:11;:34::i;:::-;32294:44;;32363:34;32375:7;:21;32383:9;32393:1;32383:12;;;;;;-1:-1:-1;;;32383:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32383:12:0;32375:21;;;;;;;;;;;;;32363:7;;:11;:34::i;:::-;32353:44;-1:-1:-1;32162:3:0;;;;:::i;:::-;;;;32120:289;;;-1:-1:-1;32445:7:0;;32433;;:20;;:11;:20::i;:::-;32423:7;:30;32419:61;;;32463:7;;32472;;32455:25;;;;;;31963:561;;:::o;32419:61::-;32499:7;;32508;;-1:-1:-1;31963:561:0;-1:-1:-1;31963:561:0:o;7144:278::-;7230:7;7265:12;7258:5;7250:28;;;;-1:-1:-1;;;7250:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7289:9:0;7301:5;7305:1;7301;:5;:::i;30507:427::-;30620:7;;;;30673:50;30719:3;30674:39;30719:3;30674:39;30675:7;30687:6;30675:11;:19::i;:::-;30674:25;;:39::i;30673:50::-;30658:65;-1:-1:-1;30734:13:0;30750:51;30797:3;30751:40;30797:3;30751:40;30752:7;30764;30752:11;:20::i;30750:51::-;30734:67;-1:-1:-1;30812:16:0;30831:54;30881:3;30832:43;30881:3;30832:43;30833:7;30845:10;30833:11;:23::i;30831:54::-;30904:4;;30910:5;;-1:-1:-1;30904:4:0;;-1:-1:-1;30507:427:0;-1:-1:-1;;;;;;30507:427:0:o;30946:191::-;31060:7;31087:42;31120:8;31087:28;31109:5;31087:28;:7;31099:4;31087:11;:17::i;:::-;:21;;:28::i;31149:254::-;31244:7;;;31291:24;:7;31303:11;31291;:24::i;:::-;31273:42;-1:-1:-1;31326:12:0;31341:21;:4;31350:11;31341:8;:21::i;:::-;31381:7;;;;-1:-1:-1;31149:254:0;;-1:-1:-1;;;;;31149:254:0:o;31415:369::-;31551:7;;31587:22;:5;31597:11;31587:9;:22::i;:::-;31571:38;-1:-1:-1;31620:16:0;31639:25;:8;31652:11;31639:12;:25::i;:::-;31620:44;-1:-1:-1;31675:23:0;31701:42;31620:44;31701:28;31723:5;31701:28;:7;31713:4;31701:11;:17::i;:42::-;31675:68;31415:369;-1:-1:-1;;;;;;;;;31415:369:0:o;5569:471::-;5627:7;5872:6;5868:47;;-1:-1:-1;5902:1:0;5895:8;;5868:47;5927:9;5939:5;5943:1;5939;:5;:::i;:::-;5927:17;-1:-1:-1;5972:1:0;5963:5;5967:1;5927:17;5963:5;:::i;:::-;:10;5955:56;;;;-1:-1:-1;;;5955:56:0;;6564:2:1;5955:56:0;;;6546:21:1;6603:2;6583:18;;;6576:30;6642:34;6622:18;;;6615:62;-1:-1:-1;;;6693:18:1;;;6686:31;6734:19;;5955:56:0;6536:223:1;27977:333:0;-1:-1:-1;;;;;28144:15:0;;;;;;:7;:15;;;;;;:28;;28164:7;28144:19;:28::i;:::-;-1:-1:-1;;;;;28126:15:0;;;;;;:7;:15;;;;;;;;:46;;;;28201:7;:15;;;;:28;;28221:7;28201:19;:28::i;:::-;-1:-1:-1;;;;;28183:15:0;;;;;;;:7;:15;;;;;;:46;;;;28261:18;;;;;;;:39;;28284:15;28261:22;:39::i;:::-;-1:-1:-1;;;;;28240:18:0;;;;;;;:7;:18;;;;;:60;;;;-1:-1:-1;;;;27977:333:0:o;32532:425::-;32609:19;32631:10;:8;:10::i;:::-;32609:32;-1:-1:-1;32652:16:0;32671:25;:8;32609:32;32671:12;:25::i;:::-;32652:44;;32707:22;32732:8;32741:1;32732:11;;;;;;-1:-1:-1;;;32732:11:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32732:11:0;32780:23;;;32732:11;32780:23;;;;;;;;32732:11;;-1:-1:-1;32780:37:0;;32808:8;32780:27;:37::i;:::-;-1:-1:-1;;;;;32754:23:0;;;;;;:7;:23;;;;;;;;:63;;;;32854:7;:23;;;;:37;;32882:8;32854:27;:37::i;:::-;-1:-1:-1;;;;;32828:23:0;;;;;;;:7;:23;;;;;;;:63;;;;32907:42;;;;;;;;;;32940:8;9723:25:1;;9711:2;9696:18;;9678:76;32907:42:0;;;;;;;;32532:425;;;;;:::o;29449:380::-;29593:42;29626:8;29593:28;29615:5;29593:17;29605:4;29593:7;;:11;;:17;;;;:::i;:42::-;29583:7;:52;29659:10;;:20;;29674:4;29659:14;:20::i;:::-;29646:10;:33;29704:11;;:22;;29720:5;29704:15;:22::i;:::-;29690:11;:36;29754:14;;:28;;29773:8;29754:18;:28::i;:::-;29737:14;:45;29803:7;;:18;;29815:5;29803:11;:18::i;:::-;29793:7;:28;-1:-1:-1;;;;;;29449:380:0:o;26921:359::-;-1:-1:-1;;;;;27098:15:0;;;;;;:7;:15;;;;;;:28;;27118:7;27098:19;:28::i;:::-;-1:-1:-1;;;;;27080:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;27158:18;;;;;:7;:18;;;;;:39;;27181:15;27158:22;:39::i;:::-;-1:-1:-1;;;;;27137:18:0;;;;;;:7;:18;;;;;;;;:60;;;;27229:7;:18;;;;:39;;27252:15;27229:22;:39::i;25955:255::-;-1:-1:-1;;;;;26103:15:0;;;;;;:7;:15;;;;;;:28;;26123:7;26103:19;:28::i;:::-;-1:-1:-1;;;;;26085:15:0;;;;;;;:7;:15;;;;;;:46;;;;26163:18;;;;;;;:39;;26186:15;26163:22;:39::i;:::-;-1:-1:-1;;;;;26142:18:0;;;;;;;:7;:18;;;;;:60;;;;-1:-1:-1;;;25955:255:0:o;29018:423::-;-1:-1:-1;;;;;29204:15:0;;;;;;:7;:15;;;;;;:28;;29224:7;29204:19;:28::i;:::-;-1:-1:-1;;;;;29186:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29261:7;:15;;;;:28;;29281:7;29261:19;:28::i;:::-;-1:-1:-1;;;;;29243:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;29321:18;;;;;:7;:18;;;;;:39;;29344:15;29321:22;:39::i;:::-;-1:-1:-1;;;;;29300:18:0;;;;;;:7;:18;;;;;;;;:60;;;;29392:7;:18;;;;:39;;29415:15;29392:22;:39::i;:::-;-1:-1:-1;;;;;29371:18:0;;;;;;;:7;:18;;;;;:60;;;;-1:-1:-1;;;;;29018:423:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:196::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:270::-;461:6;469;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;;619:38;653:2;642:9;638:18;619:38;:::i;:::-;609:48;;480:183;;;;;:::o;668:338::-;745:6;753;761;814:2;802:9;793:7;789:23;785:32;782:2;;;835:6;827;820:22;782:2;863:29;882:9;863:29;:::i;:::-;853:39;;911:38;945:2;934:9;930:18;911:38;:::i;:::-;901:48;;996:2;985:9;981:18;968:32;958:42;;772:234;;;;;:::o;1011:264::-;1079:6;1087;1140:2;1128:9;1119:7;1115:23;1111:32;1108:2;;;1161:6;1153;1146:22;1108:2;1189:29;1208:9;1189:29;:::i;:::-;1179:39;1265:2;1250:18;;;;1237:32;;-1:-1:-1;;;1098:177:1:o;1280:190::-;1339:6;1392:2;1380:9;1371:7;1367:23;1363:32;1360:2;;;1413:6;1405;1398:22;1360:2;-1:-1:-1;1441:23:1;;1350:120;-1:-1:-1;1350:120:1:o;1475:361::-;1540:6;1548;1601:2;1589:9;1580:7;1576:23;1572:32;1569:2;;;1622:6;1614;1607:22;1569:2;1663:9;1650:23;1640:33;;1723:2;1712:9;1708:18;1695:32;1770:5;1763:13;1756:21;1749:5;1746:32;1736:2;;1797:6;1789;1782:22;1736:2;1825:5;1815:15;;;1559:277;;;;;:::o;2241:603::-;2353:4;2382:2;2411;2400:9;2393:21;2443:6;2437:13;2486:6;2481:2;2470:9;2466:18;2459:34;2511:4;2524:140;2538:6;2535:1;2532:13;2524:140;;;2633:14;;;2629:23;;2623:30;2599:17;;;2618:2;2595:26;2588:66;2553:10;;2524:140;;;2682:6;2679:1;2676:13;2673:2;;;2752:4;2747:2;2738:6;2727:9;2723:22;2719:31;2712:45;2673:2;-1:-1:-1;2828:2:1;2807:15;-1:-1:-1;;2803:29:1;2788:45;;;;2835:2;2784:54;;2362:482;-1:-1:-1;;;2362:482:1:o;6764:356::-;6966:2;6948:21;;;6985:18;;;6978:30;7044:34;7039:2;7024:18;;7017:62;7111:2;7096:18;;6938:182::o;9948:128::-;9988:3;10019:1;10015:6;10012:1;10009:13;10006:2;;;10025:18;;:::i;:::-;-1:-1:-1;10061:9:1;;9996:80::o;10081:217::-;10121:1;10147;10137:2;;-1:-1:-1;;;10172:31:1;;10226:4;10223:1;10216:15;10254:4;10179:1;10244:15;10137:2;-1:-1:-1;10283:9:1;;10127:171::o;10303:422::-;10392:1;10435:5;10392:1;10449:270;10470:7;10460:8;10457:21;10449:270;;;10529:4;10525:1;10521:6;10517:17;10511:4;10508:27;10505:2;;;10538:18;;:::i;:::-;10588:7;10578:8;10574:22;10571:2;;;10608:16;;;;10571:2;10687:22;;;;10647:15;;;;10449:270;;;10453:3;10367:358;;;;;:::o;10730:131::-;10790:5;10819:36;10846:8;10840:4;10915:5;10945:8;10935:2;;-1:-1:-1;10986:1:1;11000:5;;10935:2;11034:4;11024:2;;-1:-1:-1;11071:1:1;11085:5;;11024:2;11116:4;11134:1;11129:59;;;;11202:1;11197:130;;;;11109:218;;11129:59;11159:1;11150:10;;11173:5;;;11197:130;11234:3;11224:8;11221:17;11218:2;;;11241:18;;:::i;:::-;-1:-1:-1;;11297:1:1;11283:16;;11312:5;;11109:218;;11411:2;11401:8;11398:16;11392:3;11386:4;11383:13;11379:36;11373:2;11363:8;11360:16;11355:2;11349:4;11346:12;11342:35;11339:77;11336:2;;;-1:-1:-1;11448:19:1;;;11480:5;;11336:2;11527:34;11552:8;11546:4;11527:34;:::i;:::-;11597:6;11593:1;11589:6;11585:19;11576:7;11573:32;11570:2;;;11608:18;;:::i;:::-;11646:20;;10925:747;-1:-1:-1;;;10925:747:1:o;11677:168::-;11717:7;11783:1;11779;11775:6;11771:14;11768:1;11765:21;11760:1;11753:9;11746:17;11742:45;11739:2;;;11790:18;;:::i;:::-;-1:-1:-1;11830:9:1;;11729:116::o;11850:125::-;11890:4;11918:1;11915;11912:8;11909:2;;;11923:18;;:::i;:::-;-1:-1:-1;11960:9:1;;11899:76::o;11980:135::-;12019:3;-1:-1:-1;;12040:17:1;;12037:2;;;12060:18;;:::i;:::-;-1:-1:-1;12107:1:1;12096:13;;12027:88::o;12120:127::-;12181:10;12176:3;12172:20;12169:1;12162:31;12212:4;12209:1;12202:15;12236:4;12233:1;12226:15
Swarm Source
ipfs://d116b5b09a65ba28abb76723355cb0bfb23c913a0cf1bf9b43e81625165ecce6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.