ETH Price: $3,256.92 (+0.77%)
Gas: 36 Gwei

Contract

0xF1e345Ea7c33fd6c05F5512a780Eb5839EE31674
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Telefy (TELE) (@$0.001)

Multichain Info

Transaction Hash
Method
Block
From
To
Value
0x9bffa229d80450d34762b6e52634c2012003f34c12a1e75c6ed29b7ccf0c561fTransfer(pending)2024-02-25 4:27:063 days 2 hrs ago1708835226IN
Telefy: TELE Token
0 ETH(Pending)(Pending)
Transfer184772462023-11-01 12:27:11118 days 18 hrs ago1698841631IN
Telefy: TELE Token
0 ETH0.0007914323
Transfer184771832023-11-01 12:14:35118 days 18 hrs ago1698840875IN
Telefy: TELE Token
0 ETH0.0015430627.39719743
Transfer184456872023-10-28 2:21:23123 days 4 hrs ago1698459683IN
Telefy: TELE Token
0 ETH0.0005849717
Transfer184456192023-10-28 2:07:47123 days 4 hrs ago1698458867IN
Telefy: TELE Token
0 ETH0.0007075712.56309053
Transfer184441552023-10-27 21:13:59123 days 9 hrs ago1698441239IN
Telefy: TELE Token
0 ETH0.0007570222
Transfer184440952023-10-27 21:01:59123 days 9 hrs ago1698440519IN
Telefy: TELE Token
0 ETH0.0012538322.26184061
Transfer184334212023-10-26 9:11:59124 days 21 hrs ago1698311519IN
Telefy: TELE Token
0 ETH0.0006537919
Transfer184333802023-10-26 9:03:47124 days 21 hrs ago1698311027IN
Telefy: TELE Token
0 ETH0.0013180323.40171499
Transfer184304072023-10-25 23:05:23125 days 7 hrs ago1698275123IN
Telefy: TELE Token
0 ETH0.0009290727
Transfer184301962023-10-25 22:22:23125 days 8 hrs ago1698272543IN
Telefy: TELE Token
0 ETH0.0022539540.01913531
Transfer180102692023-08-28 2:50:23184 days 3 hrs ago1693191023IN
Telefy: TELE Token
0 ETH0.000721314
Transfer180102282023-08-28 2:42:11184 days 3 hrs ago1693190531IN
Telefy: TELE Token
0 ETH0.0007123412.6449758
Transfer175081222023-06-18 17:23:11254 days 13 hrs ago1687108991IN
Telefy: TELE Token
0 ETH0.0010277118.25099622
Transfer170671992023-04-17 14:51:47316 days 15 hrs ago1681743107IN
Telefy: TELE Token
0 ETH0.002985753
Transfer164577802023-01-21 21:10:59402 days 9 hrs ago1674335459IN
Telefy: TELE Token
0 ETH0.0012989753
Transfer164577522023-01-21 21:05:23402 days 9 hrs ago1674335123IN
Telefy: TELE Token
0 ETH0.0018243653
Transfer164577222023-01-21 20:59:23402 days 9 hrs ago1674334763IN
Telefy: TELE Token
0 ETH0.0009305916.522726
Transfer164569942023-01-21 18:33:23402 days 12 hrs ago1674326003IN
Telefy: TELE Token
0 ETH0.0018243653
Transfer164569582023-01-21 18:26:11402 days 12 hrs ago1674325571IN
Telefy: TELE Token
0 ETH0.0009359416.61769353
Transfer161862422022-12-14 23:32:47440 days 7 hrs ago1671060767IN
Telefy: TELE Token
0 ETH0.0018237353
Transfer161862172022-12-14 23:27:47440 days 7 hrs ago1671060467IN
Telefy: TELE Token
0 ETH0.0007243312.86336742
Transfer156869432022-10-06 5:21:35510 days 1 hr ago1665033695IN
Telefy: TELE Token
0 ETH0.000241454.6853417
Transfer155649792022-09-19 3:46:47527 days 2 hrs ago1663559207IN
Telefy: TELE Token
0 ETH0.00182553
Transfer155532152022-09-17 12:11:11528 days 18 hrs ago1663416671IN
Telefy: TELE Token
0 ETH0.0005389110.45737316
View all transactions

Advanced mode:
Parent Txn Hash Block From To Value
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TELEToken

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-14
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.12;

// ----------------------------------------------------------------------------
// 'TELE' token governance smart contract
//
// Symbol      : TELE
// Name        : Telefy
// Max Total Circulating supply: 1000000000
// Decimals    : 18
//
//
//
// (c) by Telefy Technologies Private Limited.
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// Safe maths
// ----------------------------------------------------------------------------
/**
 * @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.
 */
contract SafeMath {
	function safeAdd(uint256 a, uint256 b) internal pure returns (uint256 c) {
		c = a + b;
		require(c >= a, "SafeMath: addition overflow");
	}

	function safeSub(uint256 a, uint256 b) internal pure returns (uint256 c) {
		require(b <= a, "SafeMath: subtraction overflow");
		c = a - b;
	}

	function safeMul(uint256 a, uint256 b) internal pure returns (uint256 c) {
		if (a == 0) {
			c = 0;
		} else {
			c = a * b;
		}
		require((a == 0 || c / a == b), "SafeMath: multiplication overflow");
	}

	function safeDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {
		require(b > 0, "SafeMath: division by zero");
		c = a / b;
	}

	function safeMod(uint256 a, uint256 b) internal pure returns (uint256 c) {
		require(b != 0, "SafeMath: modulo by zero");
		c = a % b;
	}
}

// ----------------------------------------------------------------------------
// Information of context: Sender and Data
// ----------------------------------------------------------------------------
abstract contract Context {
	function _msgSender() internal view virtual returns (address) {
		return msg.sender;
	}

	function _msgData() internal view virtual returns (bytes memory) {
		this; // Warning: silence state mutability without generating bytecode
		return msg.data;
	}
}

// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// ----------------------------------------------------------------------------
abstract contract ERC20Interface {
	function totalSupply() public view virtual returns (uint256);

	function balanceOf(address tokenOwner) public view virtual returns (uint256 balance);

	function allowance(address tokenOwner, address spender)
		public
		view
		virtual
		returns (uint256 remaining);

	function transfer(address to, uint256 tokens) external virtual returns (bool success);

	function approve(address spender, uint256 tokens) public virtual returns (bool success);

	function transferFrom(
		address from,
		address to,
		uint256 tokens
	) external virtual returns (bool success);

	event Transfer(address indexed from, address indexed to, uint256 tokens);
	event Approval(address indexed tokenOwner, address indexed spender, uint256 tokens);
}

// ----------------------------------------------------------------------------
// Contract function to receive approval and execute function in one call
//
// Borrowed from MiniMeToken
// ----------------------------------------------------------------------------
abstract contract ApproveAndCallFallBack {
	function receiveApproval(
		address from,
		uint256 tokens,
		address token,
		bytes memory data
	) public virtual;
}

// ----------------------------------------------------------------------------
// Owned contract
// ----------------------------------------------------------------------------
contract Owned {
	address public owner;
	address public newOwner;

	event OwnershipTransferred(address indexed _from, address indexed _to);

	constructor() {
		owner = msg.sender;
	}

	modifier onlyOwner() {
		require(msg.sender == owner);
		_;
	}

	function transferOwnership(address _newOwner) external onlyOwner {
		newOwner = _newOwner;
	}

	function acceptOwnership() external {
		require(msg.sender == newOwner);
		emit OwnershipTransferred(owner, newOwner);
		owner = newOwner;
		newOwner = address(0);
	}
}

// ----------------------------------------------------------------------------
// @dev Collection of functions related to the address type
// @openzeppelin/contracts/utils/Address.sol
// ----------------------------------------------------------------------------
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`, TELEe 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`].
	// _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`.
	// _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);
			}
		}
	}
}

// ----------------------------------------------------------------------------
// TELE Token, with the addition of symbol, name and decimals and assisted
// token transfers
// TELE is Governance token for TELEFY
// ----------------------------------------------------------------------------
contract TELEToken is ERC20Interface, Owned, SafeMath, Context {
	using Address for address;

	string public symbol;
	string public name;
	uint8 public decimals;
	uint256 private _totalSupply;
	address private _minter;

	mapping(address => uint256) balances;
	mapping(address => mapping(address => uint256)) allowed;

	/// @notice The timestamp after which minting may occur
	uint256 public mintingAllowedAfter;

	/// @notice Minimum time between mints
	uint32 public constant minimumTimeBetweenMints = 1 days * 7;

	/// @notice Cap on the percentage of totalSupply that can be minted at each mint
	/// We are going to divide this by 1000. so below is 0.2 percent of totalSupply
	uint8 public constant mintCap = 2;

	/// @notice A record of each accounts delegate
	mapping(address => address) internal _delegates;

	/// @notice A checkpoint for marking number of votes from a given block
	struct Checkpoint {
		uint32 fromBlock;
		uint256 votes;
	}

	/// @notice A record of votes checkpoints for each account, by index
	mapping(address => mapping(uint32 => Checkpoint)) public checkpoints;

	/// @notice The number of checkpoints for each account
	mapping(address => uint32) public numCheckpoints;

	/// @notice The EIP-712 typehash for the contract's domain
	bytes32 public constant DOMAIN_TYPEHASH =
		keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

	/// @notice The EIP-712 typehash for the delegation struct used by the contract
	bytes32 public constant DELEGATION_TYPEHASH =
		keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

	/// @notice The EIP-712 typehash for the permit struct used by the contract
	bytes32 public constant PERMIT_TYPEHASH =
		keccak256(
			"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
		);

	/// @notice A record of states for signing / validating signatures
	mapping(address => uint256) public nonces;

	// @notice An event thats emitted when multiple transactions made
	event TransferMultiple(address indexed from, address[] indexed to, uint256[] tokens);

	/// @notice An event thats emitted when an account changes its delegate
	event DelegateChanged(
		address indexed delegator,
		address indexed fromDelegate,
		address indexed toDelegate
	);

	/// @notice An event thats emitted when a delegate account's vote balance changes
	event DelegateVotesChanged(
		address indexed delegate,
		uint256 previousBalance,
		uint256 newBalance
	);

	// @notice An event thats emitted when the minter address is changed
	event MinterChanged(address minter, address newMinter);

	// ------------------------------------------------------------------------
	// Constructor
	///**
     //* @notice Construct a new TELE token
     //* @param account The initial account to grant all the tokens
     //* @param minter_ The account with minting ability
     //* @param mintingAllowedAfter_ The timestamp after which minting may occur
     //*
	// ------------------------------------------------------------------------
	constructor() {
		symbol = "TELE";
		name = "Telefy";
		decimals = 18;
		_totalSupply = 600_000_000e18;
		balances[owner] = _totalSupply;
		emit Transfer(address(0), owner, _totalSupply);
		_minter = 0xa270dA3c3175ED9992c9Ad3B6Bb679Bf81c35BA8;
		mintingAllowedAfter = safeAdd(block.timestamp, minimumTimeBetweenMints);
	}

	// ------------------------------------------------------------------------
	// Total supply
	// ------------------------------------------------------------------------
	function totalSupply() public view override returns (uint256) {
		return safeSub(_totalSupply, balances[address(0)]);
	}

	// ------------------------------------------------------------------------
	// Get the token balance for account tokenOwner
	// ------------------------------------------------------------------------
	function balanceOf(address tokenOwner) public view override returns (uint256 balance) {
		return balances[tokenOwner];
	}

	// ------------------------------------------------------------------------
	// Transfer the balance from token owner's account to to account
	// - Owner's account must have sufficient balance to transfer
	// - 0 value transfers are allowed
	// ------------------------------------------------------------------------
	function transfer(address to, uint256 tokens) external override returns (bool success) {
		require(to != address(0), "TELE: transfer to the zero address");
		_transferTokens(to, tokens);
		emit Transfer(_msgSender(), to, tokens);
		return true;
	}

	// ------------------------------------------------------------------------
	// Transfer the balance from token owner's account to to multiple accounts
	// - Owner's account must have sufficient balance to transfer
	// - 0 value transfers are allowed
	// ------------------------------------------------------------------------
	function transferMultiple(address[] memory to, uint256[] memory tokens)
		external
		returns (bool success)
	{
		require(
			to.length == tokens.length,
			"TELE: number of receiver addresses and number of amounts should be equal"
		);
		for (uint256 i = 0; i < to.length; i++) {
			if (to[i] != address(0)) {
				_transferTokens(to[i], tokens[i]);
			}
		}
		emit TransferMultiple(_msgSender(), to, tokens);
		return true;
	}

	// ------------------------------------------------------------------------
	// Token owner can approve for spender to transferFrom(...) tokens
	// from the token owner's account
	//
	// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
	// recommends that there are no checks for the approval double-spend attack
	// as this should be implemented in user interfaces
	// ------------------------------------------------------------------------
	function approve(address spender, uint256 tokens) public override returns (bool success) {
		require(spender != address(0), "TELE: transfer to the zero address");
		allowed[_msgSender()][spender] = tokens;
		emit Approval(_msgSender(), spender, tokens);
		return true;
	}

	// ------------------------------------------------------------------------
	// @notice Triggers an approval from owner to spends
	// @param owner The address to approve from
	// @param spender The address to be approved
	// @param rawAmount The number of tokens that are approved (2^256-1 means infinite)
	// @param deadline The time at which to expire the signature
	// @param v The recovery byte of the signature
	// @param r Half of the ECDSA signature pair
	// @param s Half of the ECDSA signature pair
	// ------------------------------------------------------------------------
	function permit(
		address owner,
		address spender,
		uint256 rawAmount,
		uint256 deadline,
		uint8 v,
		bytes32 r,
		bytes32 s
	) external {
		bytes32 domainSeparator = keccak256(
			abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this))
		);
		bytes32 structHash = keccak256(
			abi.encode(PERMIT_TYPEHASH, owner, spender, rawAmount, nonces[owner]++, deadline)
		);
		bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
		address signatory = ecrecover(digest, v, r, s);
		require(signatory != address(0), "TELE::permit: invalid signature");
		require(signatory == owner, "TELE::permit: unauthorized");
		require(block.timestamp <= deadline, "TELE::permit: signature expired");

		allowed[owner][spender] = rawAmount;

		emit Approval(owner, spender, rawAmount);
	}

	// ------------------------------------------------------------------------
	// Transfer tokens from the from account to the to account
	//
	// The calling account must already have sufficient tokens approve(...)-d
	// for spending from the from account and
	// - From account must have sufficient balance to transfer
	// - Spender must have sufficient allowance to transfer
	// - 0 value transfers are allowed
	// ------------------------------------------------------------------------
	function transferFrom(
		address from,
		address to,
		uint256 tokens
	) external override returns (bool success) {
		balances[from] = safeSub(balances[from], tokens);
		allowed[from][_msgSender()] = safeSub(allowed[from][_msgSender()], tokens);
		emit Approval(from, to, tokens);
		balances[to] = safeAdd(balances[to], tokens);
		emit Transfer(from, to, tokens);
		_moveDelegates(_delegates[from], _delegates[to], tokens);
		return true;
	}

	// ------------------------------------------------------------------------
	// Returns the amount of tokens approved by the owner that can be
	// transferred to the spender's account
	// ------------------------------------------------------------------------
	function allowance(address tokenOwner, address spender)
		public
		view
		override
		returns (uint256 remaining)
	{
		return allowed[tokenOwner][spender];
	}

	// ------------------------------------------------------------------------
	// @dev Atomically increases the allowance granted to `spender` by the caller.
	// This is an alternative to {approve} that can be used as a mitigation for
	// problems described in {IERC20-approve}.
	// Emits an {Approval} event indicating the updated allowance.
	// ------------------------------------------------------------------------
	function increaseAllowance(address spender, uint256 addedValue)
		external
		virtual
		returns (bool)
	{
		approve(spender, safeAdd(allowed[_msgSender()][spender], addedValue));
		return true;
	}

	// ------------------------------------------------------------------------
	// @dev Atomically decreases the allowance granted to `spender` by the caller.
	// This is an alternative to {approve} that can be used as a mitigation for
	// problems described in {IERC20-approve}.
	// Emits an {Approval} event indicating the updated allowance.
	// ------------------------------------------------------------------------
	function decreaseAllowance(address spender, uint256 subtractedValue)
		external
		virtual
		returns (bool)
	{
		approve(spender, safeSub(allowed[_msgSender()][spender], subtractedValue));
		return true;
	}

	// ------------------------------------------------------------------------
	// Token owner can approve for spender to transferFrom(...) tokens
	// from the token owner's account. The spender contract function
	// receiveApproval(...) is then executed
	// ------------------------------------------------------------------------
	function approveAndCall(
		address spender,
		uint256 tokens,
		bytes memory data
	) external returns (bool success) {
		allowed[_msgSender()][spender] = tokens;
		emit Approval(_msgSender(), spender, tokens);
		ApproveAndCallFallBack(spender).receiveApproval(_msgSender(), tokens, address(this), data);
		return true;
	}

	// ------------------------------------------------------------------------
	// Owner can transfer out any accidentally sent ERC20 tokens
	// ------------------------------------------------------------------------
	function transferAnyERC20Token(address tokenAddress, uint256 tokens)
		external
		onlyOwner
		returns (bool success)
	{
		return ERC20Interface(tokenAddress).transfer(owner, tokens);
	}

	// ------------------------------------------------------------------------
	// @dev Destroys `amount` tokens from `account`'s allowance, reducing the
	// total supply which requires approval from user before this action can be performed.
	// Emits a {Transfer} event with `to` set to the zero address.
	// ------------------------------------------------------------------------
	function burn(address account, uint256 amount) external {
		require(_msgSender() == _minter, "TELE::burn: only the minter can mint");
		require(account != address(0), "TELE: burn from the zero address");

		_beforeTokenTransfer(account, address(0), amount);

		balances[account] = safeSub(balances[account], amount);

		// Sets `amount` as the allowance of `spender`
		allowed[account][_msgSender()] = safeSub(allowed[account][_msgSender()], amount);
		emit Approval(account, _msgSender(), amount);

		_totalSupply = safeSub(_totalSupply, amount);
		emit Transfer(account, address(0), amount);
		_moveDelegates(address(0), _delegates[account], amount);
	}

	// ------------------------------------------------------------------------
	// @dev Creates `amount` tokens and assigns them to `account`, increasing
	// the total supply.
	// Emits a {Transfer} event with `from` set to the zero address.
	// ------------------------------------------------------------------------
	function mint(address account, uint256 amount) external {
		require(_msgSender() == _minter, "TELE::mint: only the minter can mint");
		require(block.timestamp >= mintingAllowedAfter, "TELE::mint: minting not allowed yet");
		require(account != address(0), "TELE: mint to the zero address");

		// record the mint
		mintingAllowedAfter = safeAdd(block.timestamp, minimumTimeBetweenMints);

		_beforeTokenTransfer(address(0), account, amount);

		// mint amount should not exceed mint cap
		require(amount <= safeDiv(safeMul(_totalSupply, mintCap), 1000));
		_totalSupply = safeAdd(_totalSupply, amount);
		balances[account] = safeAdd(balances[account], amount);
		emit Transfer(address(0), account, amount);
		_moveDelegates(address(0), _delegates[account], amount);
	}

	// ------------------------------------------------------------------------
	// @notice Change the minter address
	// @param minter_ The address of the new minter
	// ------------------------------------------------------------------------
	function setMinter(address minter_) external {
		require(
			_msgSender() == _minter,
			"TELE::setMinter: only the minter can change the minter address"
		);
		emit MinterChanged(_minter, minter_);
		_minter = minter_;
	}

	// ------------------------------------------------------------------------
	// @notice Delegate votes from `msg.sender` to `delegatee`
	// @param delegator The address to get delegatee for
	// ------------------------------------------------------------------------
	function delegates(address delegator) external view returns (address) {
		return _delegates[delegator];
	}

	// ------------------------------------------------------------------------
	// @notice Delegate votes from `msg.sender` to `delegatee`
	// @param delegatee The address to delegate votes to
	// ------------------------------------------------------------------------
	function delegate(address delegatee) external {
		return _delegate(_msgSender(), delegatee);
	}

	// ------------------------------------------------------------------------
	// @notice Delegates votes from signatory to `delegatee`
	// @param delegatee The address to delegate votes to
	// @param nonce The contract state required to match the signature
	// @param expiry The time at which to expire the signature
	// @param v The recovery byte of the signature
	// @param r Half of the ECDSA signature pair
	// @param s Half of the ECDSA signature pair
	// ------------------------------------------------------------------------
	function delegateBySig(
		address delegatee,
		uint256 nonce,
		uint256 expiry,
		uint8 v,
		bytes32 r,
		bytes32 s
	) external {
		bytes32 domainSeparator = keccak256(
			abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this))
		);

		bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));

		bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));

		address signatory = ecrecover(digest, v, r, s);
		require(signatory != address(0), "TELE::delegateBySig: invalid signature");
		require(nonce == nonces[signatory]++, "TELE::delegateBySig: invalid nonce");
		require(block.timestamp <= expiry, "TELE::delegateBySig: signature expired");
		return _delegate(signatory, delegatee);
	}

	// ------------------------------------------------------------------------
	// @notice Gets the current votes balance for `account`
	// @param account The address to get votes balance
	// @return The number of current votes for `account`
	// ------------------------------------------------------------------------
	function getCurrentVotes(address account) external view returns (uint256) {
		uint32 nCheckpoints = numCheckpoints[account];
		return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
	}

	// ------------------------------------------------------------------------
	// @notice Determine the prior number of votes for an account as of a block number
	// @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
	// @param account The address of the account to check
	// @param blockNumber The block number to get the vote balance at
	// @return The number of votes the account had as of the given block
	// ------------------------------------------------------------------------
	function getPriorVotes(address account, uint256 blockNumber) external view returns (uint256) {
		require(blockNumber < block.number, "TELE::getPriorVotes: not yet determined");

		uint32 nCheckpoints = numCheckpoints[account];
		if (nCheckpoints == 0) {
			return 0;
		}

		// First check most recent balance
		if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
			return checkpoints[account][nCheckpoints - 1].votes;
		}

		// Next check implicit zero balance
		if (checkpoints[account][0].fromBlock > blockNumber) {
			return 0;
		}

		uint32 lower = 0;
		uint32 upper = nCheckpoints - 1;
		while (upper > lower) {
			uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
			Checkpoint memory cp = checkpoints[account][center];
			if (cp.fromBlock == blockNumber) {
				return cp.votes;
			} else if (cp.fromBlock < blockNumber) {
				lower = center;
			} else {
				upper = center - 1;
			}
		}
		return checkpoints[account][lower].votes;
	}

	function _transferTokens(address to, uint256 tokens) internal {
		balances[_msgSender()] = safeSub(balances[_msgSender()], tokens);
		balances[to] = safeAdd(balances[to], tokens);
		_moveDelegates(_delegates[_msgSender()], _delegates[to], tokens);
	}

	function _delegate(address delegator, address delegatee) internal {
		address currentDelegate = _delegates[delegator];
		uint256 delegatorBalance = balanceOf(delegator); // balance of underlying TELEs (not scaled);
		_delegates[delegator] = delegatee;

		emit DelegateChanged(delegator, currentDelegate, delegatee);

		_moveDelegates(currentDelegate, delegatee, delegatorBalance);
	}

	function _moveDelegates(
		address srcRep,
		address dstRep,
		uint256 amount
	) internal {
		if (srcRep != dstRep && amount > 0) {
			if (srcRep != address(0)) {
				// decrease old representative
				uint32 srcRepNum = numCheckpoints[srcRep];
				uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
				uint256 srcRepNew = safeSub(srcRepOld, amount);
				_writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
			}

			if (dstRep != address(0)) {
				// increase new representative
				uint32 dstRepNum = numCheckpoints[dstRep];
				uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
				uint256 dstRepNew = safeAdd(dstRepOld, amount);
				_writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
			}
		}
	}

	function _writeCheckpoint(
		address delegatee,
		uint32 nCheckpoints,
		uint256 oldVotes,
		uint256 newVotes
	) internal {
		uint32 blockNumber = safe32(
			block.number,
			"TELE::_writeCheckpoint: block number exceeds 32 bits"
		);

		if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
			checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
		} else {
			checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
			numCheckpoints[delegatee] = nCheckpoints + 1;
		}

		emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
	}

	function safe32(uint256 n, string memory errorMessage) internal pure returns (uint32) {
		require(n < 2**32, errorMessage);
		return uint32(n);
	}

	function getChainId() internal view returns (uint256) {
		uint256 chainId;
		assembly {
			chainId := chainid()
		}
		return chainId;
	}

	function _beforeTokenTransfer(
		address from,
		address to,
		uint256 amount
	) internal virtual {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"address","name":"newMinter","type":"address"}],"name":"MinterChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","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":"tokens","type":"uint256"}],"name":"Transfer","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":"tokens","type":"uint256[]"}],"name":"TransferMultiple","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumTimeBetweenMints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintCap","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingAllowedAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter_","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"transferMultiple","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50600080546001600160a01b031916331790556040805180820190915260048082526354454c4560e01b60209092019182526200005191600291620001a6565b506040805180820190915260068082526554656c65667960d01b60209092019182526200008191600391620001a6565b506004805460ff191660121790556b01f04ef12cb04cf1580000006005819055600080546001600160a01b03908116825260076020526040808320849055825490519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f591815260200190565b60405180910390a3600680546001600160a01b03191673a270da3c3175ed9992c9ad3b6bb679bf81c35ba8179055620001324262093a806200013b565b600955620002b0565b60006200014982846200024c565b905082811015620001a05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b92915050565b828054620001b49062000273565b90600052602060002090601f016020900481019282620001d8576000855562000223565b82601f10620001f357805160ff191683800117855562000223565b8280016001018555821562000223579182015b828111156200022357825182559160200191906001019062000206565b506200023192915062000235565b5090565b5b8082111562000231576000815560010162000236565b600082198211156200026e57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200028857607f821691505b60208210811415620002aa57634e487b7160e01b600052602260045260246000fd5b50919050565b61287380620002c06000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80637ecebe0011610125578063cae9ca51116100ad578063dd62ed3e1161007c578063dd62ed3e1461050a578063e7a324dc14610543578063f1127ed81461056a578063f2fde38b146105c1578063fca3b5aa146105d457600080fd5b8063cae9ca51146104be578063d4ee1d90146104d1578063d505accf146104e4578063dc39d06d146104f757600080fd5b8063a05fccef116100f4578063a05fccef1461045f578063a457c2d714610472578063a9059cbb14610485578063b4b5ea5714610498578063c3cda520146104ab57600080fd5b80637ecebe00146104115780638da5cb5b1461043157806395d89b41146104445780639dc29fac1461044c57600080fd5b806340c10f19116101a85780636fcfff45116101775780636fcfff451461039f57806370a08231146103c557806376c71ca1146103ee578063782d6fe1146103f657806379ba50971461040957600080fd5b806340c10f1914610314578063587cde1e146103295780635c11d62f1461036d5780635c19a95c1461038c57600080fd5b806323b872dd116101ef57806323b872dd1461029f57806330adf81f146102b257806330b36cef146102d9578063313ce567146102e2578063395093511461030157600080fd5b806306fdde0314610221578063095ea7b31461023f57806318160ddd1461026257806320606b7014610278575b600080fd5b6102296105e7565b6040516102369190612064565b60405180910390f35b61025261024d366004612093565b610675565b6040519015158152602001610236565b61026a6106fa565b604051908152602001610236565b61026a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6102526102ad3660046120bd565b610739565b61026a7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61026a60095481565b6004546102ef9060ff1681565b60405160ff9091168152602001610236565b61025261030f366004612093565b610888565b610327610322366004612093565b6108bc565b005b6103556103373660046120f9565b6001600160a01b039081166000908152600a60205260409020541690565b6040516001600160a01b039091168152602001610236565b61037762093a8081565b60405163ffffffff9091168152602001610236565b61032761039a3660046120f9565b610ab8565b6103776103ad3660046120f9565b600c6020526000908152604090205463ffffffff1681565b61026a6103d33660046120f9565b6001600160a01b031660009081526007602052604090205490565b6102ef600281565b61026a610404366004612093565b610ac5565b610327610d2a565b61026a61041f3660046120f9565b600d6020526000908152604090205481565b600054610355906001600160a01b031681565b610229610da5565b61032761045a366004612093565b610db2565b61025261046d3660046121ea565b610f72565b610252610480366004612093565b6110df565b610252610493366004612093565b611113565b61026a6104a63660046120f9565b611170565b6103276104b93660046122bb565b6111e5565b6102526104cc366004612313565b6114bb565b600154610355906001600160a01b031681565b6103276104f23660046123c2565b611575565b610252610505366004612093565b611891565b61026a61051836600461242c565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b61026a7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105a561057836600461245f565b600b6020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff9093168352602083019190915201610236565b6103276105cf3660046120f9565b611920565b6103276105e23660046120f9565b611959565b600380546105f49061249f565b80601f01602080910402602001604051908101604052809291908181526020018280546106209061249f565b801561066d5780601f106106425761010080835404028352916020019161066d565b820191906000526020600020905b81548152906001019060200180831161065057829003601f168201915b505050505081565b60006001600160a01b0383166106a65760405162461bcd60e51b815260040161069d906124da565b60405180910390fd5b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055518581529192916000805160206127ea83398151915291015b60405180910390a35060015b92915050565b600554600080805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df54909161073491611a4b565b905090565b6001600160a01b03831660009081526007602052604081205461075c9083611a4b565b6001600160a01b03851660009081526007602090815260408083209390935560088152828220338352905220546107939083611a4b565b6001600160a01b03858116600081815260086020908152604080832033845282529182902094909455518581529186169290916000805160206127ea833981519152910160405180910390a36001600160a01b0383166000908152600760205260409020546108029083611aa7565b6001600160a01b0380851660008181526007602052604090819020939093559151908616906000805160206127ca833981519152906108449086815260200190565b60405180910390a36001600160a01b038085166000908152600a602052604080822054868416835291205461087e92918216911684611b05565b5060019392505050565b3360009081526008602090815260408083206001600160a01b038616845290915281205461087e90849061024d9085611aa7565b6006546001600160a01b0316336001600160a01b03161461092b5760405162461bcd60e51b8152602060048201526024808201527f54454c453a3a6d696e743a206f6e6c7920746865206d696e7465722063616e206044820152631b5a5b9d60e21b606482015260840161069d565b6009544210156109895760405162461bcd60e51b815260206004820152602360248201527f54454c453a3a6d696e743a206d696e74696e67206e6f7420616c6c6f776564206044820152621e595d60ea1b606482015260840161069d565b6001600160a01b0382166109df5760405162461bcd60e51b815260206004820152601e60248201527f54454c453a206d696e7420746f20746865207a65726f20616464726573730000604482015260640161069d565b6109ec4262093a80611aa7565b600955610a0a610a02600554600260ff16611c69565b6103e8611cf0565b811115610a1657600080fd5b610a2260055482611aa7565b6005556001600160a01b038216600090815260076020526040902054610a489082611aa7565b6001600160a01b0383166000818152600760205260408082209390935591519091906000805160206127ca83398151915290610a879085815260200190565b60405180910390a36001600160a01b038083166000908152600a6020526040812054610ab4921683611b05565b5050565b610ac23382611d4b565b50565b6000438210610b265760405162461bcd60e51b815260206004820152602760248201527f54454c453a3a6765745072696f72566f7465733a206e6f742079657420646574604482015266195c9b5a5b995960ca1b606482015260840161069d565b6001600160a01b0383166000908152600c602052604090205463ffffffff1680610b545760009150506106f4565b6001600160a01b0384166000908152600b602052604081208491610b79600185612532565b63ffffffff90811682526020820192909252604001600020541611610be2576001600160a01b0384166000908152600b6020526040812090610bbc600184612532565b63ffffffff1663ffffffff168152602001908152602001600020600101549150506106f4565b6001600160a01b0384166000908152600b6020908152604080832083805290915290205463ffffffff16831015610c1d5760009150506106f4565b600080610c2b600184612532565b90505b8163ffffffff168163ffffffff161115610cf35760006002610c508484612532565b610c5a919061256d565b610c649083612532565b6001600160a01b0388166000908152600b6020908152604080832063ffffffff8086168552908352928190208151808301909252805490931680825260019093015491810191909152919250871415610cc7576020015194506106f49350505050565b805163ffffffff16871115610cde57819350610cec565b610ce9600183612532565b92505b5050610c2e565b506001600160a01b0385166000908152600b6020908152604080832063ffffffff9094168352929052206001015491505092915050565b6001546001600160a01b03163314610d4157600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b600280546105f49061249f565b6006546001600160a01b0316336001600160a01b031614610e215760405162461bcd60e51b8152602060048201526024808201527f54454c453a3a6275726e3a206f6e6c7920746865206d696e7465722063616e206044820152631b5a5b9d60e21b606482015260840161069d565b6001600160a01b038216610e775760405162461bcd60e51b815260206004820181905260248201527f54454c453a206275726e2066726f6d20746865207a65726f2061646472657373604482015260640161069d565b6001600160a01b038216600090815260076020526040902054610e9a9082611a4b565b6001600160a01b03831660009081526007602090815260408083209390935560089052908120610eed91335b6001600160a01b03166001600160a01b031681526020019081526020016000205482611a4b565b6001600160a01b0383166000818152600860209081526040808320338085529083529281902094909455925184815290926000805160206127ea833981519152910160405180910390a3610f4360055482611a4b565b6005556040518181526000906001600160a01b038416906000805160206127ca83398151915290602001610a87565b60008151835114610ffc5760405162461bcd60e51b815260206004820152604860248201527f54454c453a206e756d626572206f66207265636569766572206164647265737360448201527f657320616e64206e756d626572206f6620616d6f756e74732073686f756c6420606482015267189948195c5d585b60c21b608482015260a40161069d565b60005b83518110156110895760006001600160a01b031684828151811061102557611025612590565b60200260200101516001600160a01b0316146110775761107784828151811061105057611050612590565b602002602001015184838151811061106a5761106a612590565b6020026020010151611dcb565b80611081816125a6565b915050610fff565b508260405161109891906125c1565b60405180910390206110a73390565b6001600160a01b03167f5547f7300f7510fad9df5d36f90cbd1099aebd10d4dd65d3fa3ac7af89db29e9846040516106e89190612600565b3360009081526008602090815260408083206001600160a01b038616845290915281205461087e90849061024d9085611a4b565b60006001600160a01b03831661113b5760405162461bcd60e51b815260040161069d906124da565b6111458383611dcb565b6040518281526001600160a01b0384169033906000805160206127ca833981519152906020016106e8565b6001600160a01b0381166000908152600c602052604081205463ffffffff168061119b5760006111de565b6001600160a01b0383166000908152600b60205260408120906111bf600184612532565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86660036040516112179190612644565b60405180910390206112264690565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a90528251808503909101815261014084019092528151919093012061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611352573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113c45760405162461bcd60e51b815260206004820152602660248201527f54454c453a3a64656c656761746542795369673a20696e76616c6964207369676044820152656e617475726560d01b606482015260840161069d565b6001600160a01b0381166000908152600d602052604081208054916113e8836125a6565b9190505589146114455760405162461bcd60e51b815260206004820152602260248201527f54454c453a3a64656c656761746542795369673a20696e76616c6964206e6f6e604482015261636560f01b606482015260840161069d565b874211156114a45760405162461bcd60e51b815260206004820152602660248201527f54454c453a3a64656c656761746542795369673a207369676e617475726520656044820152651e1c1a5c995960d21b606482015260840161069d565b6114ae818b611d4b565b505050505b505050505050565b3360008181526008602090815260408083206001600160a01b03881680855290835281842087905590518681529293909290916000805160206127ea833981519152910160405180910390a3604051638f4ffcb160e01b81526001600160a01b03851690638f4ffcb1906115399033908790309088906004016126e0565b600060405180830381600087803b15801561155357600080fd5b505af1158015611567573d6000803e3d6000fd5b506001979650505050505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86660036040516115a79190612644565b60405180910390206115b64690565b604080516020810194909452830191909152606082015230608082015260a00160408051601f1981840301815291815281516020928301206001600160a01b038b166000908152600d90935290822080549193507f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b918661163c836125a6565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001209050600082826040516020016116bb92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611726573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166117895760405162461bcd60e51b815260206004820152601f60248201527f54454c453a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161069d565b8a6001600160a01b0316816001600160a01b0316146117ea5760405162461bcd60e51b815260206004820152601a60248201527f54454c453a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161069d565b8742111561183a5760405162461bcd60e51b815260206004820152601f60248201527f54454c453a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161069d565b6001600160a01b038b81166000818152600860209081526040808320948f16808452948252918290208d905590518c81526000805160206127ea833981519152910160405180910390a35050505050505050505050565b600080546001600160a01b031633146118a957600080fd5b60005460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb906044016020604051808303816000875af11580156118fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de919061271d565b6000546001600160a01b0316331461193757600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316336001600160a01b0316146119e25760405162461bcd60e51b815260206004820152603e60248201527f54454c453a3a7365744d696e7465723a206f6e6c7920746865206d696e74657260448201527f2063616e206368616e676520746865206d696e74657220616464726573730000606482015260840161069d565b600654604080516001600160a01b03928316815291831660208301527f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f6910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600082821115611a9d5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161069d565b6111de828461273f565b6000611ab38284612756565b9050828110156106f45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161069d565b816001600160a01b0316836001600160a01b031614158015611b275750600081115b15611c64576001600160a01b03831615611bca576001600160a01b0383166000908152600c602052604081205463ffffffff169081611b67576000611baa565b6001600160a01b0385166000908152600b6020526040812090611b8b600185612532565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000611bb88285611a4b565b9050611bc686848484611e45565b5050505b6001600160a01b03821615611c64576001600160a01b0382166000908152600c602052604081205463ffffffff169081611c05576000611c48565b6001600160a01b0384166000908152600b6020526040812090611c29600185612532565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000611c568285611aa7565b90506114b385848484611e45565b505050565b600082611c7857506000611c85565b611c82828461276e565b90505b821580611c9a575081611c98848361278d565b145b6106f45760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161069d565b6000808211611d415760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161069d565b6111de828461278d565b6001600160a01b038281166000818152600a6020818152604080842080546007845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611dc5828483611b05565b50505050565b611dd86007600033610ec6565b33600090815260076020526040808220929092556001600160a01b03841681522054611e049082611aa7565b6001600160a01b03838116600081815260076020908152604080832095909555338252600a9052838120549181529290922054610ab4928216911683611b05565b6000611e694360405180606001604052806034815260200161280a60349139611fe7565b905060008463ffffffff16118015611ec357506001600160a01b0385166000908152600b6020526040812063ffffffff831691611ea7600188612532565b63ffffffff908116825260208201929092526040016000205416145b15611f0c576001600160a01b0385166000908152600b602052604081208391611eed600188612532565b63ffffffff168152602081019190915260400160002060010155611f9c565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152600b83528581208a851682529092529390209151825463ffffffff191691161781559051600191820155611f6b9085906127a1565b6001600160a01b0386166000908152600c60205260409020805463ffffffff191663ffffffff929092169190911790555b60408051848152602081018490526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b600081640100000000841061200f5760405162461bcd60e51b815260040161069d9190612064565b509192915050565b6000815180845260005b8181101561203d57602081850181015186830182015201612021565b8181111561204f576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006111de6020830184612017565b80356001600160a01b038116811461208e57600080fd5b919050565b600080604083850312156120a657600080fd5b6120af83612077565b946020939093013593505050565b6000806000606084860312156120d257600080fd5b6120db84612077565b92506120e960208501612077565b9150604084013590509250925092565b60006020828403121561210b57600080fd5b6111de82612077565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561215357612153612114565b604052919050565b600067ffffffffffffffff82111561217557612175612114565b5060051b60200190565b600082601f83011261219057600080fd5b813560206121a56121a08361215b565b61212a565b82815260059290921b840181019181810190868411156121c457600080fd5b8286015b848110156121df57803583529183019183016121c8565b509695505050505050565b600080604083850312156121fd57600080fd5b823567ffffffffffffffff8082111561221557600080fd5b818501915085601f83011261222957600080fd5b813560206122396121a08361215b565b82815260059290921b8401810191818101908984111561225857600080fd5b948201945b8386101561227d5761226e86612077565b8252948201949082019061225d565b9650508601359250508082111561229357600080fd5b506122a08582860161217f565b9150509250929050565b803560ff8116811461208e57600080fd5b60008060008060008060c087890312156122d457600080fd5b6122dd87612077565b955060208701359450604087013593506122f9606088016122aa565b92506080870135915060a087013590509295509295509295565b60008060006060848603121561232857600080fd5b61233184612077565b92506020808501359250604085013567ffffffffffffffff8082111561235657600080fd5b818701915087601f83011261236a57600080fd5b81358181111561237c5761237c612114565b61238e601f8201601f1916850161212a565b915080825288848285010111156123a457600080fd5b80848401858401376000848284010152508093505050509250925092565b600080600080600080600060e0888a0312156123dd57600080fd5b6123e688612077565b96506123f460208901612077565b95506040880135945060608801359350612410608089016122aa565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561243f57600080fd5b61244883612077565b915061245660208401612077565b90509250929050565b6000806040838503121561247257600080fd5b61247b83612077565b9150602083013563ffffffff8116811461249457600080fd5b809150509250929050565b600181811c908216806124b357607f821691505b602082108114156124d457634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f54454c453a207472616e7366657220746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8381169083168181101561254f5761254f61251c565b039392505050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff8084168061258457612584612557565b92169190910492915050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156125ba576125ba61251c565b5060010190565b815160009082906020808601845b838110156125f45781516001600160a01b0316855293820193908201906001016125cf565b50929695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156126385783518352928401929184019160010161261c565b50909695505050505050565b600080835481600182811c91508083168061266057607f831692505b602080841082141561268057634e487b7160e01b86526022600452602486fd5b81801561269457600181146126a5576126d2565b60ff198616895284890196506126d2565b60008a81526020902060005b868110156126ca5781548b8201529085019083016126b1565b505084890196505b509498975050505050505050565b6001600160a01b038581168252602082018590528316604082015260806060820181905260009061271390830184612017565b9695505050505050565b60006020828403121561272f57600080fd5b815180151581146111de57600080fd5b6000828210156127515761275161251c565b500390565b600082198211156127695761276961251c565b500190565b60008160001904831182151516156127885761278861251c565b500290565b60008261279c5761279c612557565b500490565b600063ffffffff8083168185168083038211156127c0576127c061251c565b0194935050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92554454c453a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220d0e5c1c4f29130c4545892d49f0999fd6c7d78abdfd0da46f7e1dd0b952f2e8264736f6c634300080c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061021c5760003560e01c80637ecebe0011610125578063cae9ca51116100ad578063dd62ed3e1161007c578063dd62ed3e1461050a578063e7a324dc14610543578063f1127ed81461056a578063f2fde38b146105c1578063fca3b5aa146105d457600080fd5b8063cae9ca51146104be578063d4ee1d90146104d1578063d505accf146104e4578063dc39d06d146104f757600080fd5b8063a05fccef116100f4578063a05fccef1461045f578063a457c2d714610472578063a9059cbb14610485578063b4b5ea5714610498578063c3cda520146104ab57600080fd5b80637ecebe00146104115780638da5cb5b1461043157806395d89b41146104445780639dc29fac1461044c57600080fd5b806340c10f19116101a85780636fcfff45116101775780636fcfff451461039f57806370a08231146103c557806376c71ca1146103ee578063782d6fe1146103f657806379ba50971461040957600080fd5b806340c10f1914610314578063587cde1e146103295780635c11d62f1461036d5780635c19a95c1461038c57600080fd5b806323b872dd116101ef57806323b872dd1461029f57806330adf81f146102b257806330b36cef146102d9578063313ce567146102e2578063395093511461030157600080fd5b806306fdde0314610221578063095ea7b31461023f57806318160ddd1461026257806320606b7014610278575b600080fd5b6102296105e7565b6040516102369190612064565b60405180910390f35b61025261024d366004612093565b610675565b6040519015158152602001610236565b61026a6106fa565b604051908152602001610236565b61026a7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6102526102ad3660046120bd565b610739565b61026a7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61026a60095481565b6004546102ef9060ff1681565b60405160ff9091168152602001610236565b61025261030f366004612093565b610888565b610327610322366004612093565b6108bc565b005b6103556103373660046120f9565b6001600160a01b039081166000908152600a60205260409020541690565b6040516001600160a01b039091168152602001610236565b61037762093a8081565b60405163ffffffff9091168152602001610236565b61032761039a3660046120f9565b610ab8565b6103776103ad3660046120f9565b600c6020526000908152604090205463ffffffff1681565b61026a6103d33660046120f9565b6001600160a01b031660009081526007602052604090205490565b6102ef600281565b61026a610404366004612093565b610ac5565b610327610d2a565b61026a61041f3660046120f9565b600d6020526000908152604090205481565b600054610355906001600160a01b031681565b610229610da5565b61032761045a366004612093565b610db2565b61025261046d3660046121ea565b610f72565b610252610480366004612093565b6110df565b610252610493366004612093565b611113565b61026a6104a63660046120f9565b611170565b6103276104b93660046122bb565b6111e5565b6102526104cc366004612313565b6114bb565b600154610355906001600160a01b031681565b6103276104f23660046123c2565b611575565b610252610505366004612093565b611891565b61026a61051836600461242c565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b61026a7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105a561057836600461245f565b600b6020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff9093168352602083019190915201610236565b6103276105cf3660046120f9565b611920565b6103276105e23660046120f9565b611959565b600380546105f49061249f565b80601f01602080910402602001604051908101604052809291908181526020018280546106209061249f565b801561066d5780601f106106425761010080835404028352916020019161066d565b820191906000526020600020905b81548152906001019060200180831161065057829003601f168201915b505050505081565b60006001600160a01b0383166106a65760405162461bcd60e51b815260040161069d906124da565b60405180910390fd5b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055518581529192916000805160206127ea83398151915291015b60405180910390a35060015b92915050565b600554600080805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df54909161073491611a4b565b905090565b6001600160a01b03831660009081526007602052604081205461075c9083611a4b565b6001600160a01b03851660009081526007602090815260408083209390935560088152828220338352905220546107939083611a4b565b6001600160a01b03858116600081815260086020908152604080832033845282529182902094909455518581529186169290916000805160206127ea833981519152910160405180910390a36001600160a01b0383166000908152600760205260409020546108029083611aa7565b6001600160a01b0380851660008181526007602052604090819020939093559151908616906000805160206127ca833981519152906108449086815260200190565b60405180910390a36001600160a01b038085166000908152600a602052604080822054868416835291205461087e92918216911684611b05565b5060019392505050565b3360009081526008602090815260408083206001600160a01b038616845290915281205461087e90849061024d9085611aa7565b6006546001600160a01b0316336001600160a01b03161461092b5760405162461bcd60e51b8152602060048201526024808201527f54454c453a3a6d696e743a206f6e6c7920746865206d696e7465722063616e206044820152631b5a5b9d60e21b606482015260840161069d565b6009544210156109895760405162461bcd60e51b815260206004820152602360248201527f54454c453a3a6d696e743a206d696e74696e67206e6f7420616c6c6f776564206044820152621e595d60ea1b606482015260840161069d565b6001600160a01b0382166109df5760405162461bcd60e51b815260206004820152601e60248201527f54454c453a206d696e7420746f20746865207a65726f20616464726573730000604482015260640161069d565b6109ec4262093a80611aa7565b600955610a0a610a02600554600260ff16611c69565b6103e8611cf0565b811115610a1657600080fd5b610a2260055482611aa7565b6005556001600160a01b038216600090815260076020526040902054610a489082611aa7565b6001600160a01b0383166000818152600760205260408082209390935591519091906000805160206127ca83398151915290610a879085815260200190565b60405180910390a36001600160a01b038083166000908152600a6020526040812054610ab4921683611b05565b5050565b610ac23382611d4b565b50565b6000438210610b265760405162461bcd60e51b815260206004820152602760248201527f54454c453a3a6765745072696f72566f7465733a206e6f742079657420646574604482015266195c9b5a5b995960ca1b606482015260840161069d565b6001600160a01b0383166000908152600c602052604090205463ffffffff1680610b545760009150506106f4565b6001600160a01b0384166000908152600b602052604081208491610b79600185612532565b63ffffffff90811682526020820192909252604001600020541611610be2576001600160a01b0384166000908152600b6020526040812090610bbc600184612532565b63ffffffff1663ffffffff168152602001908152602001600020600101549150506106f4565b6001600160a01b0384166000908152600b6020908152604080832083805290915290205463ffffffff16831015610c1d5760009150506106f4565b600080610c2b600184612532565b90505b8163ffffffff168163ffffffff161115610cf35760006002610c508484612532565b610c5a919061256d565b610c649083612532565b6001600160a01b0388166000908152600b6020908152604080832063ffffffff8086168552908352928190208151808301909252805490931680825260019093015491810191909152919250871415610cc7576020015194506106f49350505050565b805163ffffffff16871115610cde57819350610cec565b610ce9600183612532565b92505b5050610c2e565b506001600160a01b0385166000908152600b6020908152604080832063ffffffff9094168352929052206001015491505092915050565b6001546001600160a01b03163314610d4157600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b600280546105f49061249f565b6006546001600160a01b0316336001600160a01b031614610e215760405162461bcd60e51b8152602060048201526024808201527f54454c453a3a6275726e3a206f6e6c7920746865206d696e7465722063616e206044820152631b5a5b9d60e21b606482015260840161069d565b6001600160a01b038216610e775760405162461bcd60e51b815260206004820181905260248201527f54454c453a206275726e2066726f6d20746865207a65726f2061646472657373604482015260640161069d565b6001600160a01b038216600090815260076020526040902054610e9a9082611a4b565b6001600160a01b03831660009081526007602090815260408083209390935560089052908120610eed91335b6001600160a01b03166001600160a01b031681526020019081526020016000205482611a4b565b6001600160a01b0383166000818152600860209081526040808320338085529083529281902094909455925184815290926000805160206127ea833981519152910160405180910390a3610f4360055482611a4b565b6005556040518181526000906001600160a01b038416906000805160206127ca83398151915290602001610a87565b60008151835114610ffc5760405162461bcd60e51b815260206004820152604860248201527f54454c453a206e756d626572206f66207265636569766572206164647265737360448201527f657320616e64206e756d626572206f6620616d6f756e74732073686f756c6420606482015267189948195c5d585b60c21b608482015260a40161069d565b60005b83518110156110895760006001600160a01b031684828151811061102557611025612590565b60200260200101516001600160a01b0316146110775761107784828151811061105057611050612590565b602002602001015184838151811061106a5761106a612590565b6020026020010151611dcb565b80611081816125a6565b915050610fff565b508260405161109891906125c1565b60405180910390206110a73390565b6001600160a01b03167f5547f7300f7510fad9df5d36f90cbd1099aebd10d4dd65d3fa3ac7af89db29e9846040516106e89190612600565b3360009081526008602090815260408083206001600160a01b038616845290915281205461087e90849061024d9085611a4b565b60006001600160a01b03831661113b5760405162461bcd60e51b815260040161069d906124da565b6111458383611dcb565b6040518281526001600160a01b0384169033906000805160206127ca833981519152906020016106e8565b6001600160a01b0381166000908152600c602052604081205463ffffffff168061119b5760006111de565b6001600160a01b0383166000908152600b60205260408120906111bf600184612532565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86660036040516112179190612644565b60405180910390206112264690565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a90528251808503909101815261014084019092528151919093012061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611352573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166113c45760405162461bcd60e51b815260206004820152602660248201527f54454c453a3a64656c656761746542795369673a20696e76616c6964207369676044820152656e617475726560d01b606482015260840161069d565b6001600160a01b0381166000908152600d602052604081208054916113e8836125a6565b9190505589146114455760405162461bcd60e51b815260206004820152602260248201527f54454c453a3a64656c656761746542795369673a20696e76616c6964206e6f6e604482015261636560f01b606482015260840161069d565b874211156114a45760405162461bcd60e51b815260206004820152602660248201527f54454c453a3a64656c656761746542795369673a207369676e617475726520656044820152651e1c1a5c995960d21b606482015260840161069d565b6114ae818b611d4b565b505050505b505050505050565b3360008181526008602090815260408083206001600160a01b03881680855290835281842087905590518681529293909290916000805160206127ea833981519152910160405180910390a3604051638f4ffcb160e01b81526001600160a01b03851690638f4ffcb1906115399033908790309088906004016126e0565b600060405180830381600087803b15801561155357600080fd5b505af1158015611567573d6000803e3d6000fd5b506001979650505050505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86660036040516115a79190612644565b60405180910390206115b64690565b604080516020810194909452830191909152606082015230608082015260a00160408051601f1981840301815291815281516020928301206001600160a01b038b166000908152600d90935290822080549193507f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b918661163c836125a6565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001209050600082826040516020016116bb92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015611726573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166117895760405162461bcd60e51b815260206004820152601f60248201527f54454c453a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161069d565b8a6001600160a01b0316816001600160a01b0316146117ea5760405162461bcd60e51b815260206004820152601a60248201527f54454c453a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161069d565b8742111561183a5760405162461bcd60e51b815260206004820152601f60248201527f54454c453a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161069d565b6001600160a01b038b81166000818152600860209081526040808320948f16808452948252918290208d905590518c81526000805160206127ea833981519152910160405180910390a35050505050505050505050565b600080546001600160a01b031633146118a957600080fd5b60005460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb906044016020604051808303816000875af11580156118fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de919061271d565b6000546001600160a01b0316331461193757600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316336001600160a01b0316146119e25760405162461bcd60e51b815260206004820152603e60248201527f54454c453a3a7365744d696e7465723a206f6e6c7920746865206d696e74657260448201527f2063616e206368616e676520746865206d696e74657220616464726573730000606482015260840161069d565b600654604080516001600160a01b03928316815291831660208301527f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f6910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600082821115611a9d5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161069d565b6111de828461273f565b6000611ab38284612756565b9050828110156106f45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161069d565b816001600160a01b0316836001600160a01b031614158015611b275750600081115b15611c64576001600160a01b03831615611bca576001600160a01b0383166000908152600c602052604081205463ffffffff169081611b67576000611baa565b6001600160a01b0385166000908152600b6020526040812090611b8b600185612532565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000611bb88285611a4b565b9050611bc686848484611e45565b5050505b6001600160a01b03821615611c64576001600160a01b0382166000908152600c602052604081205463ffffffff169081611c05576000611c48565b6001600160a01b0384166000908152600b6020526040812090611c29600185612532565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000611c568285611aa7565b90506114b385848484611e45565b505050565b600082611c7857506000611c85565b611c82828461276e565b90505b821580611c9a575081611c98848361278d565b145b6106f45760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161069d565b6000808211611d415760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161069d565b6111de828461278d565b6001600160a01b038281166000818152600a6020818152604080842080546007845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611dc5828483611b05565b50505050565b611dd86007600033610ec6565b33600090815260076020526040808220929092556001600160a01b03841681522054611e049082611aa7565b6001600160a01b03838116600081815260076020908152604080832095909555338252600a9052838120549181529290922054610ab4928216911683611b05565b6000611e694360405180606001604052806034815260200161280a60349139611fe7565b905060008463ffffffff16118015611ec357506001600160a01b0385166000908152600b6020526040812063ffffffff831691611ea7600188612532565b63ffffffff908116825260208201929092526040016000205416145b15611f0c576001600160a01b0385166000908152600b602052604081208391611eed600188612532565b63ffffffff168152602081019190915260400160002060010155611f9c565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152600b83528581208a851682529092529390209151825463ffffffff191691161781559051600191820155611f6b9085906127a1565b6001600160a01b0386166000908152600c60205260409020805463ffffffff191663ffffffff929092169190911790555b60408051848152602081018490526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b600081640100000000841061200f5760405162461bcd60e51b815260040161069d9190612064565b509192915050565b6000815180845260005b8181101561203d57602081850181015186830182015201612021565b8181111561204f576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006111de6020830184612017565b80356001600160a01b038116811461208e57600080fd5b919050565b600080604083850312156120a657600080fd5b6120af83612077565b946020939093013593505050565b6000806000606084860312156120d257600080fd5b6120db84612077565b92506120e960208501612077565b9150604084013590509250925092565b60006020828403121561210b57600080fd5b6111de82612077565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561215357612153612114565b604052919050565b600067ffffffffffffffff82111561217557612175612114565b5060051b60200190565b600082601f83011261219057600080fd5b813560206121a56121a08361215b565b61212a565b82815260059290921b840181019181810190868411156121c457600080fd5b8286015b848110156121df57803583529183019183016121c8565b509695505050505050565b600080604083850312156121fd57600080fd5b823567ffffffffffffffff8082111561221557600080fd5b818501915085601f83011261222957600080fd5b813560206122396121a08361215b565b82815260059290921b8401810191818101908984111561225857600080fd5b948201945b8386101561227d5761226e86612077565b8252948201949082019061225d565b9650508601359250508082111561229357600080fd5b506122a08582860161217f565b9150509250929050565b803560ff8116811461208e57600080fd5b60008060008060008060c087890312156122d457600080fd5b6122dd87612077565b955060208701359450604087013593506122f9606088016122aa565b92506080870135915060a087013590509295509295509295565b60008060006060848603121561232857600080fd5b61233184612077565b92506020808501359250604085013567ffffffffffffffff8082111561235657600080fd5b818701915087601f83011261236a57600080fd5b81358181111561237c5761237c612114565b61238e601f8201601f1916850161212a565b915080825288848285010111156123a457600080fd5b80848401858401376000848284010152508093505050509250925092565b600080600080600080600060e0888a0312156123dd57600080fd5b6123e688612077565b96506123f460208901612077565b95506040880135945060608801359350612410608089016122aa565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561243f57600080fd5b61244883612077565b915061245660208401612077565b90509250929050565b6000806040838503121561247257600080fd5b61247b83612077565b9150602083013563ffffffff8116811461249457600080fd5b809150509250929050565b600181811c908216806124b357607f821691505b602082108114156124d457634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f54454c453a207472616e7366657220746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8381169083168181101561254f5761254f61251c565b039392505050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff8084168061258457612584612557565b92169190910492915050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156125ba576125ba61251c565b5060010190565b815160009082906020808601845b838110156125f45781516001600160a01b0316855293820193908201906001016125cf565b50929695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156126385783518352928401929184019160010161261c565b50909695505050505050565b600080835481600182811c91508083168061266057607f831692505b602080841082141561268057634e487b7160e01b86526022600452602486fd5b81801561269457600181146126a5576126d2565b60ff198616895284890196506126d2565b60008a81526020902060005b868110156126ca5781548b8201529085019083016126b1565b505084890196505b509498975050505050505050565b6001600160a01b038581168252602082018590528316604082015260806060820181905260009061271390830184612017565b9695505050505050565b60006020828403121561272f57600080fd5b815180151581146111de57600080fd5b6000828210156127515761275161251c565b500390565b600082198211156127695761276961251c565b500190565b60008160001904831182151516156127885761278861251c565b500290565b60008261279c5761279c612557565b500490565b600063ffffffff8083168185168083038211156127c0576127c061251c565b0194935050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92554454c453a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220d0e5c1c4f29130c4545892d49f0999fd6c7d78abdfd0da46f7e1dd0b952f2e8264736f6c634300080c0033

Deployed Bytecode Sourcemap

11550:20756:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11672:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17479:276;;;;;;:::i;:::-;;:::i;:::-;;;1318:14:1;;1311:22;1293:41;;1281:2;1266:18;17479:276:0;1153:187:1;15179:122:0;;;:::i;:::-;;;1491:25:1;;;1479:2;1464:18;15179:122:0;1345:177:1;12849:125:0;;12894:80;12849:125;;19712:453;;;;;;:::i;:::-;;:::i;13266:149::-;;13311:104;13266:149;;11939:34;;;;;;11694:21;;;;;;;;;;;;2214:4:1;2202:17;;;2184:36;;2172:2;2157:18;11694:21:0;2042:184:1;21030:202:0;;;;;;:::i;:::-;;:::i;24347:785::-;;;;;;:::i;:::-;;:::i;:::-;;25888:108;;;;;;:::i;:::-;-1:-1:-1;;;;;25970:21:0;;;25949:7;25970:21;;;:10;:21;;;;;;;;25888:108;;;;-1:-1:-1;;;;;2586:32:1;;;2568:51;;2556:2;2541:18;25888:108:0;2422:203:1;12020:59:0;;12069:10;12020:59;;;;;2804:10:1;2792:23;;;2774:42;;2762:2;2747:18;12020:59:0;2630:192:1;26273:97:0;;;;;;:::i;:::-;;:::i;12734:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15512:123;;;;;;:::i;:::-;-1:-1:-1;;;;;15610:20:0;15581:15;15610:20;;;:8;:20;;;;;;;15512:123;12250:33;;12282:1;12250:33;;28799:1014;;;;;;:::i;:::-;;:::i;4586:171::-;;;:::i;13490:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;4240:20;;;;;-1:-1:-1;;;;;4240:20:0;;;11648;;;:::i;23350:670::-;;;;;;:::i;:::-;;:::i;16555:441::-;;;;;;:::i;:::-;;:::i;21662:212::-;;;;;;:::i;:::-;;:::i;15964:252::-;;;;;;:::i;:::-;;:::i;28040:208::-;;;;;;:::i;:::-;;:::i;26918:795::-;;;;;;:::i;:::-;;:::i;22214:330::-;;;;;;:::i;:::-;;:::i;4264:23::-;;;;;-1:-1:-1;;;;;4264:23:0;;;18356:853;;;;;;:::i;:::-;;:::i;22768:191::-;;;;;;:::i;:::-;;:::i;20436:164::-;;;;;;:::i;:::-;-1:-1:-1;;;;;20567:19:0;;;20534:17;20567:19;;;:7;:19;;;;;;;;:28;;;;;;;;;;;;;20436:164;13062:120;;13111:71;13062:120;;12603:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8285:10:1;8273:23;;;8255:42;;8328:2;8313:18;;8306:34;;;;8228:18;12603:68:0;8083:263:1;4486:95:0;;;;;;:::i;:::-;;:::i;25382:229::-;;;;;;:::i;:::-;;:::i;11672:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17479:276::-;17554:12;-1:-1:-1;;;;;17581:21:0;;17573:68;;;;-1:-1:-1;;;17573:68:0;;;;;;;:::i;:::-;;;;;;;;;2341:10;17646:21;;;;:7;:21;;;;;;;;-1:-1:-1;;;;;17646:30:0;;;;;;;;;;;;:39;;;17695;1491:25:1;;;17646:30:0;;2341:10;-1:-1:-1;;;;;;;;;;;17695:39:0;1464:18:1;17695:39:0;;;;;;;;-1:-1:-1;17746:4:0;17479:276;;;;;:::o;15179:122::-;15261:12;;15232:7;15275:20;;;:8;:20;;;;15232:7;;15253:43;;:7;:43::i;:::-;15246:50;;15179:122;:::o;19712:453::-;-1:-1:-1;;;;;19860:14:0;;19816:12;19860:14;;;:8;:14;;;;;;19852:31;;19876:6;19852:7;:31::i;:::-;-1:-1:-1;;;;;19835:14:0;;;;;;:8;:14;;;;;;;;:48;;;;19926:7;:13;;;;;2341:10;19926:27;;;;;;19918:44;;19955:6;19918:7;:44::i;:::-;-1:-1:-1;;;;;19888:13:0;;;;;;;:7;:13;;;;;;;;2341:10;19888:27;;;;;;;;:74;;;;19972:26;1491:25:1;;;19972:26:0;;;;19888:13;;-1:-1:-1;;;;;;;;;;;19972:26:0;1464:18:1;19972:26:0;;;;;;;-1:-1:-1;;;;;20026:12:0;;;;;;:8;:12;;;;;;20018:29;;20040:6;20018:7;:29::i;:::-;-1:-1:-1;;;;;20003:12:0;;;;;;;:8;:12;;;;;;;:44;;;;20057:26;;;;;;-1:-1:-1;;;;;;;;;;;20057:26:0;;;20076:6;1491:25:1;;1479:2;1464:18;;1345:177;20057:26:0;;;;;;;;-1:-1:-1;;;;;20103:16:0;;;;;;;:10;:16;;;;;;;20121:14;;;;;;;;20088:56;;20103:16;;;;20121:14;20137:6;20088:14;:56::i;:::-;-1:-1:-1;20156:4:0;19712:453;;;;;:::o;21030:202::-;2341:10;21129:4;21167:21;;;:7;:21;;;;;;;;-1:-1:-1;;;;;21167:30:0;;;;;;;;;;21142:69;;21150:7;;21159:51;;21199:10;21159:7;:51::i;24347:785::-;24432:7;;-1:-1:-1;;;;;24432:7:0;2341:10;-1:-1:-1;;;;;24416:23:0;;24408:72;;;;-1:-1:-1;;;24408:72:0;;9341:2:1;24408:72:0;;;9323:21:1;9380:2;9360:18;;;9353:30;9419:34;9399:18;;;9392:62;-1:-1:-1;;;9470:18:1;;;9463:34;9514:19;;24408:72:0;9139:400:1;24408:72:0;24512:19;;24493:15;:38;;24485:86;;;;-1:-1:-1;;;24485:86:0;;9746:2:1;24485:86:0;;;9728:21:1;9785:2;9765:18;;;9758:30;9824:34;9804:18;;;9797:62;-1:-1:-1;;;9875:18:1;;;9868:33;9918:19;;24485:86:0;9544:399:1;24485:86:0;-1:-1:-1;;;;;24584:21:0;;24576:64;;;;-1:-1:-1;;;24576:64:0;;10150:2:1;24576:64:0;;;10132:21:1;10189:2;10169:18;;;10162:30;10228:32;10208:18;;;10201:60;10278:18;;24576:64:0;9948:354:1;24576:64:0;24691:49;24699:15;12069:10;24691:7;:49::i;:::-;24669:19;:71;24866:45;24874:30;24882:12;;12282:1;24874:30;;:7;:30::i;:::-;24906:4;24866:7;:45::i;:::-;24856:6;:55;;24848:64;;;;;;24932:29;24940:12;;24954:6;24932:7;:29::i;:::-;24917:12;:44;-1:-1:-1;;;;;24994:17:0;;;;;;:8;:17;;;;;;24986:34;;25013:6;24986:7;:34::i;:::-;-1:-1:-1;;;;;24966:17:0;;;;;;:8;:17;;;;;;:54;;;;25030:37;;24966:17;;;-1:-1:-1;;;;;;;;;;;25030:37:0;;;25060:6;1491:25:1;;1479:2;1464:18;;1345:177;25030:37:0;;;;;;;;-1:-1:-1;;;;;25099:19:0;;;25095:1;25099:19;;;:10;:19;;;;;;25072:55;;25099:19;25120:6;25072:14;:55::i;:::-;24347:785;;:::o;26273:97::-;26331:34;2341:10;26355:9;26331;:34::i;:::-;26273:97;:::o;28799:1014::-;28883:7;28919:12;28905:11;:26;28897:78;;;;-1:-1:-1;;;28897:78:0;;10509:2:1;28897:78:0;;;10491:21:1;10548:2;10528:18;;;10521:30;10587:34;10567:18;;;10560:62;-1:-1:-1;;;10638:18:1;;;10631:37;10685:19;;28897:78:0;10307:403:1;28897:78:0;-1:-1:-1;;;;;29004:23:0;;28982:19;29004:23;;;:14;:23;;;;;;;;29036:17;29032:43;;29068:1;29061:8;;;;;29032:43;-1:-1:-1;;;;;29123:20:0;;;;;;:11;:20;;;;;29175:11;;29144:16;29159:1;29144:12;:16;:::i;:::-;29123:38;;;;;;;;;;;;;;;-1:-1:-1;29123:38:0;:48;;:63;29119:132;;-1:-1:-1;;;;;29201:20:0;;;;;;:11;:20;;;;;;29222:16;29237:1;29222:12;:16;:::i;:::-;29201:38;;;;;;;;;;;;;;;:44;;;29194:51;;;;;29119:132;-1:-1:-1;;;;;29300:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;29296:73:0;;;29362:1;29355:8;;;;;29296:73;29375:12;;29411:16;29426:1;29411:12;:16;:::i;:::-;29396:31;;29432:332;29447:5;29439:13;;:5;:13;;;29432:332;;;29460:13;29502:1;29485:13;29493:5;29485;:13;:::i;:::-;29484:19;;;;:::i;:::-;29476:27;;:5;:27;:::i;:::-;-1:-1:-1;;;;;29559:20:0;;29536;29559;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;29536:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;29460:43;;-1:-1:-1;29597:27:0;;29593:166;;;29640:8;;;;-1:-1:-1;29633:15:0;;-1:-1:-1;;;;29633:15:0;29593:166;29665:12;;:26;;;-1:-1:-1;29661:98:0;;;29708:6;29700:14;;29661:98;;;29742:10;29751:1;29742:6;:10;:::i;:::-;29734:18;;29661:98;29454:310;;29432:332;;;-1:-1:-1;;;;;;29775:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;-1:-1:-1;;28799:1014:0;;;;:::o;4586:171::-;4649:8;;-1:-1:-1;;;;;4649:8:0;4635:10;:22;4627:31;;;;;;4696:8;;;4689:5;;4668:37;;-1:-1:-1;;;;;4696:8:0;;;;4689:5;;;;4668:37;;;4718:8;;;;4710:16;;-1:-1:-1;;;;;;4710:16:0;;;-1:-1:-1;;;;;4718:8:0;;4710:16;;;;4731:21;;;4586:171::o;11648:20::-;;;;;;;:::i;23350:670::-;23435:7;;-1:-1:-1;;;;;23435:7:0;2341:10;-1:-1:-1;;;;;23419:23:0;;23411:72;;;;-1:-1:-1;;;23411:72:0;;11603:2:1;23411:72:0;;;11585:21:1;11642:2;11622:18;;;11615:30;11681:34;11661:18;;;11654:62;-1:-1:-1;;;11732:18:1;;;11725:34;11776:19;;23411:72:0;11401:400:1;23411:72:0;-1:-1:-1;;;;;23496:21:0;;23488:66;;;;-1:-1:-1;;;23488:66:0;;12008:2:1;23488:66:0;;;11990:21:1;;;12027:18;;;12020:30;12086:34;12066:18;;;12059:62;12138:18;;23488:66:0;11806:356:1;23488:66:0;-1:-1:-1;;;;;23645:17:0;;;;;;:8;:17;;;;;;23637:34;;23664:6;23637:7;:34::i;:::-;-1:-1:-1;;;;;23617:17:0;;;;;;:8;:17;;;;;;;;:54;;;;23769:7;:16;;;;;23761:47;;2341:10;23786:12;-1:-1:-1;;;;;23769:30:0;-1:-1:-1;;;;;23769:30:0;;;;;;;;;;;;;23801:6;23761:7;:47::i;:::-;-1:-1:-1;;;;;23728:16:0;;;;;;:7;:16;;;;;;;;2341:10;23728:30;;;;;;;;;;:80;;;;23818:39;;1491:25:1;;;2341:10:0;;-1:-1:-1;;;;;;;;;;;23818:39:0;1464:18:1;23818:39:0;;;;;;;23879:29;23887:12;;23901:6;23879:7;:29::i;:::-;23864:12;:44;23918:37;;1491:25:1;;;23944:1:0;;-1:-1:-1;;;;;23918:37:0;;;-1:-1:-1;;;;;;;;;;;23918:37:0;1479:2:1;1464:18;23918:37:0;1345:177:1;16555:441:0;16651:12;16698:6;:13;16685:2;:9;:26;16672:124;;;;-1:-1:-1;;;16672:124:0;;12369:2:1;16672:124:0;;;12351:21:1;12408:2;12388:18;;;12381:30;12447:34;12427:18;;;12420:62;12518:34;12498:18;;;12491:62;-1:-1:-1;;;12569:19:1;;;12562:39;12618:19;;16672:124:0;12167:476:1;16672:124:0;16806:9;16801:123;16825:2;:9;16821:1;:13;16801:123;;;16868:1;-1:-1:-1;;;;;16851:19:0;:2;16854:1;16851:5;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;16851:19:0;;16847:72;;16879:33;16895:2;16898:1;16895:5;;;;;;;;:::i;:::-;;;;;;;16902:6;16909:1;16902:9;;;;;;;;:::i;:::-;;;;;;;16879:15;:33::i;:::-;16836:3;;;;:::i;:::-;;;;16801:123;;;;16964:2;16933:42;;;;;;:::i;:::-;;;;;;;;16950:12;2341:10;;2267:89;16950:12;-1:-1:-1;;;;;16933:42:0;;16968:6;16933:42;;;;;;:::i;21662:212::-;2341:10;21766:4;21804:21;;;:7;:21;;;;;;;;-1:-1:-1;;;;;21804:30:0;;;;;;;;;;21779:74;;21787:7;;21796:56;;21836:15;21796:7;:56::i;15964:252::-;16037:12;-1:-1:-1;;;;;16064:16:0;;16056:63;;;;-1:-1:-1;;;16056:63:0;;;;;;;:::i;:::-;16124:27;16140:2;16144:6;16124:15;:27::i;:::-;16161:34;;1491:25:1;;;-1:-1:-1;;;;;16161:34:0;;;2341:10;;-1:-1:-1;;;;;;;;;;;16161:34:0;1479:2:1;1464:18;16161:34:0;1345:177:1;28040:208:0;-1:-1:-1;;;;;28141:23:0;;28105:7;28141:23;;;:14;:23;;;;;;;;28176:16;:67;;28242:1;28176:67;;;-1:-1:-1;;;;;28195:20:0;;;;;;:11;:20;;;;;;28216:16;28231:1;28216:12;:16;:::i;:::-;28195:38;;;;;;;;;;;;;;;:44;;;28176:67;28169:74;28040:208;-1:-1:-1;;;28040:208:0:o;26918:795::-;27058:23;12894:80;27143:4;27127:22;;;;;;:::i;:::-;;;;;;;;27151:12;32157:9;;32052:142;27151:12;27099:80;;;;;;;15600:25:1;;;;15641:18;;;15634:34;;;;15684:18;;;15677:34;;;;27173:4:0;15727:18:1;;;;15720:60;;;;27099:80:0;;;;;;;;;;15572:19:1;;;27099:80:0;;27084:100;;;;;;13111:71;27222:57;;;16022:25:1;-1:-1:-1;;;;;16083:32:1;;16063:18;;;16056:60;16132:18;;;16125:34;;;16175:18;;;;16168:34;;;27222:57:0;;;;;;;;;;15994:19:1;;;27222:57:0;;;27212:68;;;;;;;-1:-1:-1;;;27314:57:0;;;16471:27:1;16514:11;;;16507:27;;;16550:12;;;16543:28;;;27084:100:0;;-1:-1:-1;;;16587:12:1;;27314:57:0;;;-1:-1:-1;;27314:57:0;;;;;;;;;27304:68;;27314:57;27304:68;;;;27379:17;27399:26;;;;;;;;;16837:25:1;;;16910:4;16898:17;;16878:18;;;16871:45;;;;16932:18;;;16925:34;;;16975:18;;;16968:34;;;27304:68:0;;-1:-1:-1;27379:17:0;27399:26;;16809:19:1;;27399:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27399:26:0;;-1:-1:-1;;27399:26:0;;;-1:-1:-1;;;;;;;27438:23:0;;27430:74;;;;-1:-1:-1;;;27430:74:0;;17215:2:1;27430:74:0;;;17197:21:1;17254:2;17234:18;;;17227:30;17293:34;17273:18;;;17266:62;-1:-1:-1;;;17344:18:1;;;17337:36;17390:19;;27430:74:0;17013:402:1;27430:74:0;-1:-1:-1;;;;;27526:17:0;;;;;;:6;:17;;;;;:19;;;;;;:::i;:::-;;;;;27517:5;:28;27509:75;;;;-1:-1:-1;;;27509:75:0;;17622:2:1;27509:75:0;;;17604:21:1;17661:2;17641:18;;;17634:30;17700:34;17680:18;;;17673:62;-1:-1:-1;;;17751:18:1;;;17744:32;17793:19;;27509:75:0;17420:398:1;27509:75:0;27616:6;27597:15;:25;;27589:76;;;;-1:-1:-1;;;27589:76:0;;18025:2:1;27589:76:0;;;18007:21:1;18064:2;18044:18;;;18037:30;18103:34;18083:18;;;18076:62;-1:-1:-1;;;18154:18:1;;;18147:36;18200:19;;27589:76:0;17823:402:1;27589:76:0;27677:31;27687:9;27698;27677;:31::i;:::-;27670:38;;;;26918:795;;;;;;;:::o;22214:330::-;2341:10;22321:12;22340:21;;;:7;:21;;;;;;;;-1:-1:-1;;;;;22340:30:0;;;;;;;;;;;:39;;;22389;;1491:25:1;;;22321:12:0;;22340:30;;2341:10;;-1:-1:-1;;;;;;;;;;;22389:39:0;1464:18:1;22389:39:0;;;;;;;22433:90;;-1:-1:-1;;;22433:90:0;;-1:-1:-1;;;;;22433:47:0;;;;;:90;;2341:10;;22495:6;;22511:4;;22518;;22433:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22535:4:0;;22214:330;-1:-1:-1;;;;;;;22214:330:0:o;18356:853::-;18511:23;12894:80;18596:4;18580:22;;;;;;:::i;:::-;;;;;;;;18604:12;32157:9;;32052:142;18604:12;18552:80;;;;;;15600:25:1;;;;15641:18;;15634:34;;;;15684:18;;;15677:34;18626:4:0;15727:18:1;;;15720:60;15572:19;;18552:80:0;;;-1:-1:-1;;18552:80:0;;;;;;;;;18537:100;;18552:80;18537:100;;;;-1:-1:-1;;;;;18733:13:0;;18642:18;18733:13;;;:6;:13;;;;;;:15;;18537:100;;-1:-1:-1;13311:104:0;;18706:5;;18713:7;;18722:9;;18642:18;18733:15;;;:::i;:::-;;;;-1:-1:-1;18678:81:0;;;;;;19011:25:1;;;;-1:-1:-1;;;;;19110:15:1;;;19090:18;;;19083:43;19162:15;;;;19142:18;;;19135:43;19194:18;;;19187:34;19237:19;;;19230:35;19281:19;;;19274:35;;;18983:19;;18678:81:0;;;;;;;;;;;;18663:101;;;;;;18642:122;;18769:14;18825:15;18842:10;18796:57;;;;;;;;-1:-1:-1;;;16471:27:1;;16523:1;16514:11;;16507:27;;;;16559:2;16550:12;;16543:28;16596:2;16587:12;;16213:392;18796:57:0;;;;-1:-1:-1;;18796:57:0;;;;;;;;;18786:68;;18796:57;18786:68;;;;18859:17;18879:26;;;;;;;;;16837:25:1;;;16910:4;16898:17;;16878:18;;;16871:45;;;;16932:18;;;16925:34;;;16975:18;;;16968:34;;;18786:68:0;;-1:-1:-1;18859:17:0;18879:26;;16809:19:1;;18879:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18879:26:0;;-1:-1:-1;;18879:26:0;;;-1:-1:-1;;;;;;;18918:23:0;;18910:67;;;;-1:-1:-1;;;18910:67:0;;19522:2:1;18910:67:0;;;19504:21:1;19561:2;19541:18;;;19534:30;19600:33;19580:18;;;19573:61;19651:18;;18910:67:0;19320:355:1;18910:67:0;19003:5;-1:-1:-1;;;;;18990:18:0;:9;-1:-1:-1;;;;;18990:18:0;;18982:57;;;;-1:-1:-1;;;18982:57:0;;19882:2:1;18982:57:0;;;19864:21:1;19921:2;19901:18;;;19894:30;19960:28;19940:18;;;19933:56;20006:18;;18982:57:0;19680:350:1;18982:57:0;19071:8;19052:15;:27;;19044:71;;;;-1:-1:-1;;;19044:71:0;;20237:2:1;19044:71:0;;;20219:21:1;20276:2;20256:18;;;20249:30;20315:33;20295:18;;;20288:61;20366:18;;19044:71:0;20035:355:1;19044:71:0;-1:-1:-1;;;;;19122:14:0;;;;;;;:7;:14;;;;;;;;:23;;;;;;;;;;;;;:35;;;19169;;1491:25:1;;;-1:-1:-1;;;;;;;;;;;19169:35:0;1464:18:1;19169:35:0;;;;;;;18506:703;;;;18356:853;;;;;;;:::o;22768:191::-;22874:12;4464:5;;-1:-1:-1;;;;;4464:5:0;4450:10;:19;4442:28;;;;;;22940:5:::1;::::0;22902:52:::1;::::0;-1:-1:-1;;;22902:52:0;;-1:-1:-1;;;;;22940:5:0;;::::1;22902:52;::::0;::::1;20569:51:1::0;20636:18;;;20629:34;;;22902:37:0;;::::1;::::0;::::1;::::0;20542:18:1;;22902:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4486:95::-:0;4464:5;;-1:-1:-1;;;;;4464:5:0;4450:10;:19;4442:28;;;;;;4556:8:::1;:20:::0;;-1:-1:-1;;;;;;4556:20:0::1;-1:-1:-1::0;;;;;4556:20:0;;;::::1;::::0;;;::::1;::::0;;4486:95::o;25382:229::-;25461:7;;-1:-1:-1;;;;;25461:7:0;2341:10;-1:-1:-1;;;;;25445:23:0;;25432:111;;;;-1:-1:-1;;;25432:111:0;;21158:2:1;25432:111:0;;;21140:21:1;21197:2;21177:18;;;21170:30;21236:34;21216:18;;;21209:62;21307:32;21287:18;;;21280:60;21357:19;;25432:111:0;20956:426:1;25432:111:0;25567:7;;25553:31;;;-1:-1:-1;;;;;25567:7:0;;;21599:34:1;;21669:15;;;21664:2;21649:18;;21642:43;25553:31:0;;21534:18:1;25553:31:0;;;;;;;25589:7;:17;;-1:-1:-1;;;;;;25589:17:0;-1:-1:-1;;;;;25589:17:0;;;;;;;;;;25382:229::o;1371:146::-;1433:9;1462:1;1457;:6;;1449:49;;;;-1:-1:-1;;;1449:49:0;;21898:2:1;1449:49:0;;;21880:21:1;21937:2;21917:18;;;21910:30;21976:32;21956:18;;;21949:60;22026:18;;1449:49:0;21696:354:1;1449:49:0;1507:5;1511:1;1507;:5;:::i;1223:143::-;1285:9;1305:5;1309:1;1305;:5;:::i;:::-;1301:9;;1328:1;1323;:6;;1315:46;;;;-1:-1:-1;;;1315:46:0;;22520:2:1;1315:46:0;;;22502:21:1;22559:2;22539:18;;;22532:30;22598:29;22578:18;;;22571:57;22645:18;;1315:46:0;22318:351:1;30473:799:0;30586:6;-1:-1:-1;;;;;30576:16:0;:6;-1:-1:-1;;;;;30576:16:0;;;:30;;;;;30605:1;30596:6;:10;30576:30;30572:696;;;-1:-1:-1;;;;;30618:20:0;;;30614:321;;-1:-1:-1;;;;;30702:22:0;;30683:16;30702:22;;;:14;:22;;;;;;;;;30751:13;:60;;30810:1;30751:60;;;-1:-1:-1;;;;;30767:19:0;;;;;;:11;:19;;;;;;30787:13;30799:1;30787:9;:13;:::i;:::-;30767:34;;;;;;;;;;;;;;;:40;;;30751:60;30731:80;;30818:17;30838:26;30846:9;30857:6;30838:7;:26::i;:::-;30818:46;;30871:57;30888:6;30896:9;30907;30918;30871:16;:57::i;:::-;30640:295;;;30614:321;-1:-1:-1;;;;;30946:20:0;;;30942:321;;-1:-1:-1;;;;;31030:22:0;;31011:16;31030:22;;;:14;:22;;;;;;;;;31079:13;:60;;31138:1;31079:60;;;-1:-1:-1;;;;;31095:19:0;;;;;;:11;:19;;;;;;31115:13;31127:1;31115:9;:13;:::i;:::-;31095:34;;;;;;;;;;;;;;;:40;;;31079:60;31059:80;;31146:17;31166:26;31174:9;31185:6;31166:7;:26::i;:::-;31146:46;;31199:57;31216:6;31224:9;31235;31246;31199:16;:57::i;30942:321::-;30473:799;;;:::o;1522:211::-;1584:9;1604:6;1600:56;;-1:-1:-1;1622:1:0;1600:56;;;1645:5;1649:1;1645;:5;:::i;:::-;1641:9;;1600:56;1669:6;;;:20;;-1:-1:-1;1688:1:0;1679:5;1683:1;1679;:5;:::i;:::-;:10;1669:20;1660:68;;;;-1:-1:-1;;;1660:68:0;;23174:2:1;1660:68:0;;;23156:21:1;23213:2;23193:18;;;23186:30;23252:34;23232:18;;;23225:62;-1:-1:-1;;;23303:18:1;;;23296:31;23344:19;;1660:68:0;22972:397:1;1738:141:0;1800:9;1828:1;1824;:5;1816:44;;;;-1:-1:-1;;;1816:44:0;;23576:2:1;1816:44:0;;;23558:21:1;23615:2;23595:18;;;23588:30;23654:28;23634:18;;;23627:56;23700:18;;1816:44:0;23374:350:1;1816:44:0;1869:5;1873:1;1869;:5;:::i;30077:391::-;-1:-1:-1;;;;;30174:21:0;;;30148:23;30174:21;;;:10;:21;;;;;;;;;;15610:8;:20;;;;;;30297:21;;;;:33;;;-1:-1:-1;;;;;;30297:33:0;;;;;;;30342:54;;30174:21;;;;;15610:20;;30297:33;;30174:21;;;30342:54;;30148:23;30342:54;30403:60;30418:15;30435:9;30446:16;30403:14;:60::i;:::-;30143:325;;30077:391;;:::o;29818:254::-;29910:39;29918:8;:22;2341:10;29927:12;2267:89;29910:39;2341:10;29885:22;;;;:8;:22;;;;;;:64;;;;-1:-1:-1;;;;;29977:12:0;;;;;;29969:29;;29991:6;29969:7;:29::i;:::-;-1:-1:-1;;;;;29954:12:0;;;;;;;:8;:12;;;;;;;;:44;;;;2341:10;30018:24;;:10;:24;;;;;;30044:14;;;;;;;;30003:64;;30018:24;;;30044:14;30060:6;30003:14;:64::i;31277:616::-;31409:18;31430:89;31442:12;31430:89;;;;;;;;;;;;;;;;;:6;:89::i;:::-;31409:110;;31545:1;31530:12;:16;;;:85;;;;-1:-1:-1;;;;;;31550:22:0;;;;;;:11;:22;;;;;:65;;;;31573:16;31588:1;31573:12;:16;:::i;:::-;31550:40;;;;;;;;;;;;;;;-1:-1:-1;31550:40:0;:50;;:65;31530:85;31526:300;;;-1:-1:-1;;;;;31623:22:0;;;;;;:11;:22;;;;;31672:8;;31646:16;31661:1;31646:12;:16;:::i;:::-;31623:40;;;;;;;;;;;;;-1:-1:-1;31623:40:0;:46;;:57;31526:300;;;31737:33;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31698:22:0;;-1:-1:-1;31698:22:0;;;:11;:22;;;;;:36;;;;;;;;;;;:72;;;;-1:-1:-1;;31698:72:0;;;;;;;;-1:-1:-1;31698:72:0;;;;31804:16;;31698:36;;31804:16;:::i;:::-;-1:-1:-1;;;;;31776:25:0;;;;;;:14;:25;;;;;:44;;-1:-1:-1;;31776:44:0;;;;;;;;;;;;31526:300;31837:51;;;24136:25:1;;;24192:2;24177:18;;24170:34;;;-1:-1:-1;;;;;31837:51:0;;;;;24109:18:1;31837:51:0;;;;;;;31404:489;31277:616;;;;:::o;31898:149::-;31976:6;32008:12;32001:5;31997:9;;31989:32;;;;-1:-1:-1;;;31989:32:0;;;;;;;;:::i;:::-;-1:-1:-1;32040:1:0;;31898:149;-1:-1:-1;;31898:149:0:o;14:472:1:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;468:2:1;447:15;-1:-1:-1;;443:29:1;434:39;;;;475:4;430:50;;14:472;-1:-1:-1;;14:472:1:o;491:220::-;640:2;629:9;622:21;603:4;660:45;701:2;690:9;686:18;678:6;660:45;:::i;716:173::-;784:20;;-1:-1:-1;;;;;833:31:1;;823:42;;813:70;;879:1;876;869:12;813:70;716:173;;;:::o;894:254::-;962:6;970;1023:2;1011:9;1002:7;998:23;994:32;991:52;;;1039:1;1036;1029:12;991:52;1062:29;1081:9;1062:29;:::i;:::-;1052:39;1138:2;1123:18;;;;1110:32;;-1:-1:-1;;;894:254:1:o;1709:328::-;1786:6;1794;1802;1855:2;1843:9;1834:7;1830:23;1826:32;1823:52;;;1871:1;1868;1861:12;1823:52;1894:29;1913:9;1894:29;:::i;:::-;1884:39;;1942:38;1976:2;1965:9;1961:18;1942:38;:::i;:::-;1932:48;;2027:2;2016:9;2012:18;1999:32;1989:42;;1709:328;;;;;:::o;2231:186::-;2290:6;2343:2;2331:9;2322:7;2318:23;2314:32;2311:52;;;2359:1;2356;2349:12;2311:52;2382:29;2401:9;2382:29;:::i;2827:127::-;2888:10;2883:3;2879:20;2876:1;2869:31;2919:4;2916:1;2909:15;2943:4;2940:1;2933:15;2959:275;3030:2;3024:9;3095:2;3076:13;;-1:-1:-1;;3072:27:1;3060:40;;3130:18;3115:34;;3151:22;;;3112:62;3109:88;;;3177:18;;:::i;:::-;3213:2;3206:22;2959:275;;-1:-1:-1;2959:275:1:o;3239:183::-;3299:4;3332:18;3324:6;3321:30;3318:56;;;3354:18;;:::i;:::-;-1:-1:-1;3399:1:1;3395:14;3411:4;3391:25;;3239:183::o;3427:662::-;3481:5;3534:3;3527:4;3519:6;3515:17;3511:27;3501:55;;3552:1;3549;3542:12;3501:55;3588:6;3575:20;3614:4;3638:60;3654:43;3694:2;3654:43;:::i;:::-;3638:60;:::i;:::-;3732:15;;;3818:1;3814:10;;;;3802:23;;3798:32;;;3763:12;;;;3842:15;;;3839:35;;;3870:1;3867;3860:12;3839:35;3906:2;3898:6;3894:15;3918:142;3934:6;3929:3;3926:15;3918:142;;;4000:17;;3988:30;;4038:12;;;;3951;;3918:142;;;-1:-1:-1;4078:5:1;3427:662;-1:-1:-1;;;;;;3427:662:1:o;4094:1146::-;4212:6;4220;4273:2;4261:9;4252:7;4248:23;4244:32;4241:52;;;4289:1;4286;4279:12;4241:52;4329:9;4316:23;4358:18;4399:2;4391:6;4388:14;4385:34;;;4415:1;4412;4405:12;4385:34;4453:6;4442:9;4438:22;4428:32;;4498:7;4491:4;4487:2;4483:13;4479:27;4469:55;;4520:1;4517;4510:12;4469:55;4556:2;4543:16;4578:4;4602:60;4618:43;4658:2;4618:43;:::i;4602:60::-;4696:15;;;4778:1;4774:10;;;;4766:19;;4762:28;;;4727:12;;;;4802:19;;;4799:39;;;4834:1;4831;4824:12;4799:39;4858:11;;;;4878:148;4894:6;4889:3;4886:15;4878:148;;;4960:23;4979:3;4960:23;:::i;:::-;4948:36;;4911:12;;;;5004;;;;4878:148;;;5045:5;-1:-1:-1;;5088:18:1;;5075:32;;-1:-1:-1;;5119:16:1;;;5116:36;;;5148:1;5145;5138:12;5116:36;;5171:63;5226:7;5215:8;5204:9;5200:24;5171:63;:::i;:::-;5161:73;;;4094:1146;;;;;:::o;5245:156::-;5311:20;;5371:4;5360:16;;5350:27;;5340:55;;5391:1;5388;5381:12;5406:531;5508:6;5516;5524;5532;5540;5548;5601:3;5589:9;5580:7;5576:23;5572:33;5569:53;;;5618:1;5615;5608:12;5569:53;5641:29;5660:9;5641:29;:::i;:::-;5631:39;;5717:2;5706:9;5702:18;5689:32;5679:42;;5768:2;5757:9;5753:18;5740:32;5730:42;;5791:36;5823:2;5812:9;5808:18;5791:36;:::i;:::-;5781:46;;5874:3;5863:9;5859:19;5846:33;5836:43;;5926:3;5915:9;5911:19;5898:33;5888:43;;5406:531;;;;;;;;:::o;5942:905::-;6028:6;6036;6044;6097:2;6085:9;6076:7;6072:23;6068:32;6065:52;;;6113:1;6110;6103:12;6065:52;6136:29;6155:9;6136:29;:::i;:::-;6126:39;;6184:2;6233;6222:9;6218:18;6205:32;6195:42;;6288:2;6277:9;6273:18;6260:32;6311:18;6352:2;6344:6;6341:14;6338:34;;;6368:1;6365;6358:12;6338:34;6406:6;6395:9;6391:22;6381:32;;6451:7;6444:4;6440:2;6436:13;6432:27;6422:55;;6473:1;6470;6463:12;6422:55;6509:2;6496:16;6531:2;6527;6524:10;6521:36;;;6537:18;;:::i;:::-;6579:53;6622:2;6603:13;;-1:-1:-1;;6599:27:1;6595:36;;6579:53;:::i;:::-;6566:66;;6655:2;6648:5;6641:17;6695:7;6690:2;6685;6681;6677:11;6673:20;6670:33;6667:53;;;6716:1;6713;6706:12;6667:53;6771:2;6766;6762;6758:11;6753:2;6746:5;6742:14;6729:45;6815:1;6810:2;6805;6798:5;6794:14;6790:23;6783:34;;6836:5;6826:15;;;;;5942:905;;;;;:::o;6852:606::-;6963:6;6971;6979;6987;6995;7003;7011;7064:3;7052:9;7043:7;7039:23;7035:33;7032:53;;;7081:1;7078;7071:12;7032:53;7104:29;7123:9;7104:29;:::i;:::-;7094:39;;7152:38;7186:2;7175:9;7171:18;7152:38;:::i;:::-;7142:48;;7237:2;7226:9;7222:18;7209:32;7199:42;;7288:2;7277:9;7273:18;7260:32;7250:42;;7311:37;7343:3;7332:9;7328:19;7311:37;:::i;:::-;7301:47;;7395:3;7384:9;7380:19;7367:33;7357:43;;7447:3;7436:9;7432:19;7419:33;7409:43;;6852:606;;;;;;;;;;:::o;7463:260::-;7531:6;7539;7592:2;7580:9;7571:7;7567:23;7563:32;7560:52;;;7608:1;7605;7598:12;7560:52;7631:29;7650:9;7631:29;:::i;:::-;7621:39;;7679:38;7713:2;7702:9;7698:18;7679:38;:::i;:::-;7669:48;;7463:260;;;;;:::o;7728:350::-;7795:6;7803;7856:2;7844:9;7835:7;7831:23;7827:32;7824:52;;;7872:1;7869;7862:12;7824:52;7895:29;7914:9;7895:29;:::i;:::-;7885:39;;7974:2;7963:9;7959:18;7946:32;8018:10;8011:5;8007:22;8000:5;7997:33;7987:61;;8044:1;8041;8034:12;7987:61;8067:5;8057:15;;;7728:350;;;;;:::o;8351:380::-;8430:1;8426:12;;;;8473;;;8494:61;;8548:4;8540:6;8536:17;8526:27;;8494:61;8601:2;8593:6;8590:14;8570:18;8567:38;8564:161;;;8647:10;8642:3;8638:20;8635:1;8628:31;8682:4;8679:1;8672:15;8710:4;8707:1;8700:15;8564:161;;8351:380;;;:::o;8736:398::-;8938:2;8920:21;;;8977:2;8957:18;;;8950:30;9016:34;9011:2;8996:18;;8989:62;-1:-1:-1;;;9082:2:1;9067:18;;9060:32;9124:3;9109:19;;8736:398::o;10715:127::-;10776:10;10771:3;10767:20;10764:1;10757:31;10807:4;10804:1;10797:15;10831:4;10828:1;10821:15;10847:221;10886:4;10915:10;10975;;;;10945;;10997:12;;;10994:38;;;11012:18;;:::i;:::-;11049:13;;10847:221;-1:-1:-1;;;10847:221:1:o;11073:127::-;11134:10;11129:3;11125:20;11122:1;11115:31;11165:4;11162:1;11155:15;11189:4;11186:1;11179:15;11205:191;11244:1;11270:10;11307:2;11304:1;11300:10;11329:3;11319:37;;11336:18;;:::i;:::-;11374:10;;11370:20;;;;;11205:191;-1:-1:-1;;11205:191:1:o;12648:127::-;12709:10;12704:3;12700:20;12697:1;12690:31;12740:4;12737:1;12730:15;12764:4;12761:1;12754:15;12780:135;12819:3;-1:-1:-1;;12840:17:1;;12837:43;;;12860:18;;:::i;:::-;-1:-1:-1;12907:1:1;12896:13;;12780:135::o;12920:569::-;13138:13;;13081:3;;13112;;13191:4;13218:15;;;13081:3;13261:201;13275:6;13272:1;13269:13;13261:201;;;13342:13;;-1:-1:-1;;;;;13338:39:1;13324:54;;13400:14;;;;13437:15;;;;13374:1;13290:9;13261:201;;;-1:-1:-1;13478:5:1;;12920:569;-1:-1:-1;;;;;;12920:569:1:o;13494:632::-;13665:2;13717:21;;;13787:13;;13690:18;;;13809:22;;;13636:4;;13665:2;13888:15;;;;13862:2;13847:18;;;13636:4;13931:169;13945:6;13942:1;13939:13;13931:169;;;14006:13;;13994:26;;14075:15;;;;14040:12;;;;13967:1;13960:9;13931:169;;;-1:-1:-1;14117:3:1;;13494:632;-1:-1:-1;;;;;;13494:632:1:o;14260:1104::-;14390:3;14419:1;14452:6;14446:13;14482:3;14504:1;14532:9;14528:2;14524:18;14514:28;;14592:2;14581:9;14577:18;14614;14604:61;;14658:4;14650:6;14646:17;14636:27;;14604:61;14684:2;14732;14724:6;14721:14;14701:18;14698:38;14695:165;;;-1:-1:-1;;;14759:33:1;;14815:4;14812:1;14805:15;14845:4;14766:3;14833:17;14695:165;14876:18;14903:104;;;;15021:1;15016:323;;;;14869:470;;14903:104;-1:-1:-1;;14936:24:1;;14924:37;;14981:16;;;;-1:-1:-1;14903:104:1;;15016:323;14207:1;14200:14;;;14244:4;14231:18;;15114:1;15128:165;15142:6;15139:1;15136:13;15128:165;;;15220:14;;15207:11;;;15200:35;15263:16;;;;15157:10;;15128:165;;;15132:3;;15322:6;15317:3;15313:16;15306:23;;14869:470;-1:-1:-1;15355:3:1;;14260:1104;-1:-1:-1;;;;;;;;14260:1104:1:o;18230:489::-;-1:-1:-1;;;;;18499:15:1;;;18481:34;;18546:2;18531:18;;18524:34;;;18594:15;;18589:2;18574:18;;18567:43;18646:3;18641:2;18626:18;;18619:31;;;18424:4;;18667:46;;18693:19;;18685:6;18667:46;:::i;:::-;18659:54;18230:489;-1:-1:-1;;;;;;18230:489:1:o;20674:277::-;20741:6;20794:2;20782:9;20773:7;20769:23;20765:32;20762:52;;;20810:1;20807;20800:12;20762:52;20842:9;20836:16;20895:5;20888:13;20881:21;20874:5;20871:32;20861:60;;20917:1;20914;20907:12;22055:125;22095:4;22123:1;22120;22117:8;22114:34;;;22128:18;;:::i;:::-;-1:-1:-1;22165:9:1;;22055:125::o;22185:128::-;22225:3;22256:1;22252:6;22249:1;22246:13;22243:39;;;22262:18;;:::i;:::-;-1:-1:-1;22298:9:1;;22185:128::o;22674:168::-;22714:7;22780:1;22776;22772:6;22768:14;22765:1;22762:21;22757:1;22750:9;22743:17;22739:45;22736:71;;;22787:18;;:::i;:::-;-1:-1:-1;22827:9:1;;22674:168::o;22847:120::-;22887:1;22913;22903:35;;22918:18;;:::i;:::-;-1:-1:-1;22952:9:1;;22847:120::o;23729:228::-;23768:3;23796:10;23833:2;23830:1;23826:10;23863:2;23860:1;23856:10;23894:3;23890:2;23886:12;23881:3;23878:21;23875:47;;;23902:18;;:::i;:::-;23938:13;;23729:228;-1:-1:-1;;;;23729:228:1:o

Swarm Source

ipfs://d0e5c1c4f29130c4545892d49f0999fd6c7d78abdfd0da46f7e1dd0b952f2e82

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

TELE is the native and governance token of Telefy, which will serve as the major cryptocurrency used in the platform. Telefy is a decentralized and multi-chain credit score platform based on the Ethereum blockchain.

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.