Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
TokenTracker
Multichain Info
N/A
Latest 25 from a total of 356 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 8373987 | 2 days ago | IN | 0 ETH | 0.00000112 | ||||
Transfer | 8373967 | 2 days ago | IN | 0 ETH | 0.00000131 | ||||
Transfer | 8341679 | 6 days ago | IN | 0 ETH | 0.00023023 | ||||
Transfer | 8341598 | 6 days ago | IN | 0 ETH | 0.00035126 | ||||
Transfer | 8341595 | 6 days ago | IN | 0 ETH | 0.00024192 | ||||
Transfer | 8341593 | 6 days ago | IN | 0 ETH | 0.00036237 | ||||
Transfer | 8328979 | 8 days ago | IN | 0 ETH | 0.0000003 | ||||
Transfer | 8323598 | 9 days ago | IN | 0 ETH | 0.00057606 | ||||
Transfer | 8219425 | 23 days ago | IN | 0 ETH | 0.00089273 | ||||
Transfer | 8216920 | 24 days ago | IN | 0 ETH | 0.00001539 | ||||
Transfer | 8172367 | 30 days ago | IN | 0 ETH | 0.00081449 | ||||
Transfer | 8171010 | 31 days ago | IN | 0 ETH | 0.0010486 | ||||
Transfer | 8164826 | 32 days ago | IN | 0 ETH | 0.00106958 | ||||
Transfer | 8127645 | 37 days ago | IN | 0 ETH | 0.00000053 | ||||
Transfer | 8127612 | 37 days ago | IN | 0 ETH | 0.00000072 | ||||
Transfer | 8120572 | 38 days ago | IN | 0 ETH | 0.00000024 | ||||
Transfer | 8120546 | 38 days ago | IN | 0 ETH | 0.0000003 | ||||
Transfer | 7970223 | 60 days ago | IN | 0 ETH | 0.00000154 | ||||
Transfer | 7969869 | 60 days ago | IN | 0 ETH | 0.00000132 | ||||
Transfer | 7969540 | 60 days ago | IN | 0 ETH | 0.00000119 | ||||
Transfer | 7919983 | 67 days ago | IN | 0 ETH | 0.00137779 | ||||
Transfer | 7898265 | 70 days ago | IN | 0 ETH | 0.00000117 | ||||
Transfer | 7898232 | 70 days ago | IN | 0 ETH | 0.00000159 | ||||
Transfer | 7893133 | 71 days ago | IN | 0 ETH | 0.00357979 | ||||
Transfer | 7891655 | 71 days ago | IN | 0 ETH | 0.00047601 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
SocialGoodToken
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-04-15 */ /** *Submitted for verification at Etherscan.io on 2022-06-29 */ pragma solidity 0.5.17; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20Mintable}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is IERC20 { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public returns (bool) { _transfer(msg.sender, recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public returns (bool) { _approve(msg.sender, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for `sender`'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public returns (bool) { _transfer(sender, recipient, amount); _approve( sender, msg.sender, _allowances[sender][msg.sender].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve( msg.sender, spender, _allowances[msg.sender][spender].add(addedValue) ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve( msg.sender, spender, _allowances[msg.sender][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Destroys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See {_burn} and {_approve}. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve( account, msg.sender, _allowances[account][msg.sender].sub( amount, "ERC20: burn amount exceeds allowance" ) ); } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ contract Pausable is Ownable { /** * @dev Emitted when the pause is triggered by a pauser (`account`). */ event Paused(address account); /** * @dev Emitted when the pause is lifted by a pauser (`account`). */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. Assigns the Pauser role * to the deployer. */ constructor() internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Called by a pauser to pause, triggers stopped state. */ function pause() public onlyOwner whenNotPaused { _paused = true; emit Paused(msg.sender); } /** * @dev Called by a pauser to unpause, returns to normal state. */ function unpause() public onlyOwner whenPaused { _paused = false; emit Unpaused(msg.sender); } } /** * @title Pausable token * @dev ERC20 with pausable transfers and allowances. * * Useful if you want to stop trades until the end of a crowdsale, or have * an emergency switch for freezing all token transfers in the event of a large * bug. */ contract ERC20Pausable is ERC20, Pausable { function transfer(address to, uint256 value) public whenNotPaused returns (bool) { return super.transfer(to, value); } function transferFrom( address from, address to, uint256 value ) public whenNotPaused returns (bool) { return super.transferFrom(from, to, value); } function approve(address spender, uint256 value) public whenNotPaused returns (bool) { return super.approve(spender, value); } function increaseAllowance(address spender, uint256 addedValue) public whenNotPaused returns (bool) { return super.increaseAllowance(spender, addedValue); } function decreaseAllowance(address spender, uint256 subtractedValue) public whenNotPaused returns (bool) { return super.decreaseAllowance(spender, subtractedValue); } } /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ contract ERC20Burnable is ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public { _burn(msg.sender, amount); } /** * @dev See {ERC20-_burnFrom}. */ function burnFrom(address account, uint256 amount) public { _burnFrom(account, amount); } } /** * @dev Extension of {ERC20} that adds a set of accounts with the {MinterRole}, * which have permission to mint (create) new tokens as they see fit. * * At construction, the deployer of the contract is the only minter. */ contract ERC20Mintable is ERC20, Ownable { /** * @dev See {ERC20-_mint}. * * Requirements: * * - the caller must have the {MinterRole}. */ function mint(address account, uint256 amount) public onlyOwner returns (bool) { _mint(account, amount); return true; } } /** * @dev Extension of {ERC20Mintable} that adds a cap to the supply of tokens. */ contract ERC20Capped is ERC20Mintable { uint256 private _cap; uint256 private _capUsed; uint256 private _airdropCap; uint256 private _airdropCapUsed; /** * @dev Sets the value of the `cap`. This value is immutable, it can only be * set once during construction. */ constructor(uint256 cap, uint256 airdropCap) public { require(cap != 0, "ERC20Capped: cap is 0"); require(airdropCap != 0, "ERC20Capped: airdrop cap is 0"); _cap = cap; _airdropCap = airdropCap; } /** * @dev Returns the normal cap. */ function cap() public view returns (uint256) { return _cap; } /** * @dev Returns the airdrop cap. */ function airdropCap() public view returns (uint256) { return _airdropCap; } /** * @dev Returns the normal cap used. */ function capUsed() public view returns (uint256) { return _capUsed; } /** * @dev Returns the airdrop cap used. */ function airdropCapUsed() public view returns (uint256) { return _airdropCapUsed; } /** * @dev See {ERC20Mintable-mint}. * * Requirements: * * - `value` must not cause the cap used to go over the cap. */ function _mint(address account, uint256 value) internal { uint256 newCapUsed = _capUsed.add(value); require(newCapUsed <= _cap, "ERC20Capped: cap exceeded"); super._mint(account, value); _capUsed = newCapUsed; } /** * @dev See {ERC20Mintable-mint}. * * Requirements: * * - `value` must not cause the airdrop cap used to go over the airdrop cap. */ function _airdropMint(address account, uint256 value) internal { super._mint(account, value); } /** * @dev Used for increasing the airdrop cap used when owner lockup the token. * * Requirements: * * - `value` must not cause the airdrop cap used to go over the cap. */ function _incrementUsedAirdropCap(uint256 value) internal { uint256 newAirdropCapUsed = _airdropCapUsed.add(value); require( newAirdropCapUsed <= _airdropCap, "ERC20Capped: airdrop cap exceeded" ); _airdropCapUsed = newAirdropCapUsed; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract SocialGoodToken is ERC20Pausable, ERC20Burnable, ERC20Mintable, ERC20Capped { string private constant _name = "SocialGood"; string private constant _symbol = "SG"; uint8 private constant _decimals = 18; // set maximum token normal hard cap uint256 private constant NORMAL_HARD_CAP = 209250000e18; // 209,250,000 SG // set maximum token airdrop hard cap uint256 private constant AIRDROP_HARD_CAP = 750000e18; // 750,000 SG mapping(address => uint256) private _lockupAmounts; constructor() public ERC20Capped(NORMAL_HARD_CAP, AIRDROP_HARD_CAP) {} /** * @dev Returns the name of the token. */ function name() public pure returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public pure returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public pure returns (uint8) { return _decimals; } function getAddressLockupAmount(address _account) public view returns (uint256) { return _lockupAmounts[_account]; } /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public onlyOwner { _burn(msg.sender, amount); } /** * @dev See {ERC20-_burnFrom}. */ function burnFrom(address account, uint256 amount) public onlyOwner { _burnFrom(account, amount); } /** * @dev Used for validating inputs before execute lockup */ function _preValidateAirdrop(address _account, uint256 _amount) internal pure { require( _account != address(0), "SocialGoodToken: airdrop target address is empty" ); require(_amount != 0, "SocialGoodToken: amount is zero"); } /** * @dev Used for migrating old SG token to new SG token. * The token amount will be locked until the owner unlock it manually. */ function airdropLockup( address[] calldata _accounts, uint256[] calldata _amounts ) external onlyOwner whenNotPaused { require( _accounts.length == _amounts.length, "SocialGoodToken: the length of accounts, amounts are not the same" ); uint256 length = _accounts.length; for (uint256 i = 0; i != length; i++) { _preValidateAirdrop(_accounts[i], _amounts[i]); _lockup(_accounts[i], _amounts[i]); } } /** * @dev Used for locking up token amount of any address. * This is an internal function, only called from the owner's airdropLockup function. */ function _lockup(address _account, uint256 _amount) internal { _lockupAmounts[_account] = _lockupAmounts[_account].add(_amount); _incrementUsedAirdropCap(_amount); } /** * @dev Used for unlocking token when migrating from old SG token to new SG token. * The token amount will be minted to selected addresses up to the token issue limit. * Data will be read from _lockupAmounts and reset to zero after token is minted. */ function unlocks(address[] calldata _accounts) external onlyOwner whenNotPaused { uint256 length = _accounts.length; for (uint256 i = 0; i != length; i++) { _unlock(_accounts[i]); } } function _unlock(address _account) internal { require( _lockupAmounts[_account] != 0, "SocialGoodToken: amount is zero" ); _airdropMint(_account, _lockupAmounts[_account]); _lockupAmounts[_account] = 0; } }
Contract ABI
API[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"constant":true,"inputs":[],"name":"airdropCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airdropCapUsed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"airdropLockup","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"capUsed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAddressLockupAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"}],"name":"unlocks","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506aad16693ac9013bd9400000699ed194db19b238c0000033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360146101000a81548160ff0219169083151502179055506000821415610178576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f45524332304361707065643a206361702069732030000000000000000000000081525060200191505060405180910390fd5b60008114156101ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f45524332304361707065643a2061697264726f7020636170206973203000000081525060200191505060405180910390fd5b81600481905550806006819055505050612d888061020e6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f95780638f32d59b11610097578063a9059cbb11610071578063a9059cbb146108a8578063d245c8d31461090e578063dd62ed3e1461092c578063f2fde38b146109a4576101c4565b80638f32d59b1461079d57806395d89b41146107bf578063a457c2d714610842576101c4565b80638456cb59116100d35780638456cb591461065d57806384aabd30146106675780638d0b0b76146107355780638da5cb5b14610753576101c4565b806370a08231146105ad578063715018a61461060557806379cc67901461060f576101c4565b8063313ce567116101665780633f4ba83a116101405780633f4ba83a146104ed57806340c10f19146104f757806342966c681461055d5780635c975abb1461058b576101c4565b8063313ce56714610445578063355274ea146104695780633950935114610487576101c4565b806316d33ad0116101a257806316d33ad0146102d057806318160ddd1461034957806321d4fc691461036757806323b872dd146103bf576101c4565b806306fdde03146101c9578063095ea7b31461024c57806312b8f105146102b2575b600080fd5b6101d16109e8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102115780820151818401526020810190506101f6565b50505050905090810190601f16801561023e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102986004803603604081101561026257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a25565b604051808215151515815260200191505060405180910390f35b6102ba610abc565b6040518082815260200191505060405180910390f35b610347600480360360208110156102e657600080fd5b810190808035906020019064010000000081111561030357600080fd5b82018360208201111561031557600080fd5b8035906020019184602083028401116401000000008311171561033757600080fd5b9091929391929390505050610ac6565b005b610351610c1c565b6040518082815260200191505060405180910390f35b6103a96004803603602081101561037d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c26565b6040518082815260200191505060405180910390f35b61042b600480360360608110156103d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c6f565b604051808215151515815260200191505060405180910390f35b61044d610d08565b604051808260ff1660ff16815260200191505060405180910390f35b610471610d11565b6040518082815260200191505060405180910390f35b6104d36004803603604081101561049d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d1b565b604051808215151515815260200191505060405180910390f35b6104f5610db2565b005b6105436004803603604081101561050d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f2e565b604051808215151515815260200191505060405180910390f35b6105896004803603602081101561057357600080fd5b8101908080359060200190929190505050610fbe565b005b610593611045565b604051808215151515815260200191505060405180910390f35b6105ef600480360360208110156105c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105c565b6040518082815260200191505060405180910390f35b61060d6110a4565b005b61065b6004803603604081101561062557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111df565b005b610665611267565b005b6107336004803603604081101561067d57600080fd5b810190808035906020019064010000000081111561069a57600080fd5b8201836020820111156106ac57600080fd5b803590602001918460208302840111640100000000831117156106ce57600080fd5b9091929391929390803590602001906401000000008111156106ef57600080fd5b82018360208201111561070157600080fd5b8035906020019184602083028401116401000000008311171561072357600080fd5b90919293919293905050506113e4565b005b61073d6115f1565b6040518082815260200191505060405180910390f35b61075b6115fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107a5611625565b604051808215151515815260200191505060405180910390f35b6107c761167d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108075780820151818401526020810190506107ec565b50505050905090810190601f1680156108345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61088e6004803603604081101561085857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116ba565b604051808215151515815260200191505060405180910390f35b6108f4600480360360408110156108be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611751565b604051808215151515815260200191505060405180910390f35b6109166117e8565b6040518082815260200191505060405180910390f35b61098e6004803603604081101561094257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117f2565b6040518082815260200191505060405180910390f35b6109e6600480360360208110156109ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611879565b005b60606040518060400160405280600a81526020017f536f6369616c476f6f6400000000000000000000000000000000000000000000815250905090565b6000600360149054906101000a900460ff1615610aaa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b610ab483836118ff565b905092915050565b6000600554905090565b610ace611625565b610b40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360149054906101000a900460ff1615610bc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b600082829050905060008090505b818114610c1657610c09848483818110610be757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16611916565b8080600101915050610bd1565b50505050565b6000600254905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600360149054906101000a900460ff1615610cf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b610cff848484611a5d565b90509392505050565b60006012905090565b6000600454905090565b6000600360149054906101000a900460ff1615610da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b610daa8383611b28565b905092915050565b610dba611625565b610e2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360149054906101000a900460ff16610eae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000610f38611625565b610faa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610fb48383611bcd565b6001905092915050565b610fc6611625565b611038576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6110423382611c74565b50565b6000600360149054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110ac611625565b61111e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6111e7611625565b611259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6112638282611e2c565b5050565b61126f611625565b6112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360149054906101000a900460ff1615611364576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6113ec611625565b61145e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360149054906101000a900460ff16156114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b81819050848490501461153f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526041815260200180612cee6041913960600191505060405180910390fd5b600084849050905060008090505b8181146115e95761159886868381811061156357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1685858481811061158c57fe5b90506020020135611eed565b6115dc8686838181106115a757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168585848181106115d057fe5b90506020020135611fee565b808060010191505061154d565b505050505050565b6000600654905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60606040518060400160405280600281526020017f5347000000000000000000000000000000000000000000000000000000000000815250905090565b6000600360149054906101000a900460ff161561173f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6117498383612090565b905092915050565b6000600360149054906101000a900460ff16156117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6117e0838361214f565b905092915050565b6000600754905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611881611625565b6118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6118fc81612166565b50565b600061190c3384846122ac565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156119cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f536f6369616c476f6f64546f6b656e3a20616d6f756e74206973207a65726f0081525060200191505060405180910390fd5b611a1581600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124a3565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000611a6a8484846124b1565b611b1d8433611b1885604051806060016040528060288152602001612c3860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127679092919063ffffffff16565b6122ac565b600190509392505050565b6000611bc33384611bbe85600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b6122ac565b6001905092915050565b6000611be48260055461282790919063ffffffff16565b9050600454811115611c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f45524332304361707065643a206361702065786365656465640000000000000081525060200191505060405180910390fd5b611c6883836128af565b80600581905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c846021913960400191505060405180910390fd5b611d6581604051806060016040528060228152602001612b57602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127679092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611dbc81600254612a6a90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b611e368282611c74565b611ee98233611ee484604051806060016040528060248152602001612c6060249139600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127679092919063ffffffff16565b6122ac565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612be76030913960400191505060405180910390fd5b6000811415611fea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f536f6369616c476f6f64546f6b656e3a20616d6f756e74206973207a65726f0081525060200191505060405180910390fd5b5050565b61204081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061208c81612ab4565b5050565b6000612145338461214085604051806060016040528060258152602001612d2f60259139600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127679092919063ffffffff16565b6122ac565b6001905092915050565b600061215c3384846124b1565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612b796026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612332576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612cca6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612b9f6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6124ad82826128af565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612537576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612ca56025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612b346023913960400191505060405180910390fd5b61262881604051806060016040528060268152602001612bc1602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127679092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126bb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612814576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156127d95780820151818401526020810190506127be565b50505050905090810190601f1680156128065780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808284019050838110156128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6129678160025461282790919063ffffffff16565b6002819055506129be816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000612aac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612767565b905092915050565b6000612acb8260075461282790919063ffffffff16565b9050600654811115612b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c176021913960400191505060405180910390fd5b80600781905550505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536f6369616c476f6f64546f6b656e3a2061697264726f7020746172676574206164647265737320697320656d70747945524332304361707065643a2061697264726f702063617020657863656564656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373536f6369616c476f6f64546f6b656e3a20746865206c656e677468206f66206163636f756e74732c20616d6f756e747320617265206e6f74207468652073616d6545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820d89d902cf238dd2549e2b83e1abbdd523b9ce42048fed3bf593c30e962e597dc64736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f95780638f32d59b11610097578063a9059cbb11610071578063a9059cbb146108a8578063d245c8d31461090e578063dd62ed3e1461092c578063f2fde38b146109a4576101c4565b80638f32d59b1461079d57806395d89b41146107bf578063a457c2d714610842576101c4565b80638456cb59116100d35780638456cb591461065d57806384aabd30146106675780638d0b0b76146107355780638da5cb5b14610753576101c4565b806370a08231146105ad578063715018a61461060557806379cc67901461060f576101c4565b8063313ce567116101665780633f4ba83a116101405780633f4ba83a146104ed57806340c10f19146104f757806342966c681461055d5780635c975abb1461058b576101c4565b8063313ce56714610445578063355274ea146104695780633950935114610487576101c4565b806316d33ad0116101a257806316d33ad0146102d057806318160ddd1461034957806321d4fc691461036757806323b872dd146103bf576101c4565b806306fdde03146101c9578063095ea7b31461024c57806312b8f105146102b2575b600080fd5b6101d16109e8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102115780820151818401526020810190506101f6565b50505050905090810190601f16801561023e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102986004803603604081101561026257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a25565b604051808215151515815260200191505060405180910390f35b6102ba610abc565b6040518082815260200191505060405180910390f35b610347600480360360208110156102e657600080fd5b810190808035906020019064010000000081111561030357600080fd5b82018360208201111561031557600080fd5b8035906020019184602083028401116401000000008311171561033757600080fd5b9091929391929390505050610ac6565b005b610351610c1c565b6040518082815260200191505060405180910390f35b6103a96004803603602081101561037d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c26565b6040518082815260200191505060405180910390f35b61042b600480360360608110156103d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c6f565b604051808215151515815260200191505060405180910390f35b61044d610d08565b604051808260ff1660ff16815260200191505060405180910390f35b610471610d11565b6040518082815260200191505060405180910390f35b6104d36004803603604081101561049d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d1b565b604051808215151515815260200191505060405180910390f35b6104f5610db2565b005b6105436004803603604081101561050d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f2e565b604051808215151515815260200191505060405180910390f35b6105896004803603602081101561057357600080fd5b8101908080359060200190929190505050610fbe565b005b610593611045565b604051808215151515815260200191505060405180910390f35b6105ef600480360360208110156105c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105c565b6040518082815260200191505060405180910390f35b61060d6110a4565b005b61065b6004803603604081101561062557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111df565b005b610665611267565b005b6107336004803603604081101561067d57600080fd5b810190808035906020019064010000000081111561069a57600080fd5b8201836020820111156106ac57600080fd5b803590602001918460208302840111640100000000831117156106ce57600080fd5b9091929391929390803590602001906401000000008111156106ef57600080fd5b82018360208201111561070157600080fd5b8035906020019184602083028401116401000000008311171561072357600080fd5b90919293919293905050506113e4565b005b61073d6115f1565b6040518082815260200191505060405180910390f35b61075b6115fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107a5611625565b604051808215151515815260200191505060405180910390f35b6107c761167d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108075780820151818401526020810190506107ec565b50505050905090810190601f1680156108345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61088e6004803603604081101561085857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116ba565b604051808215151515815260200191505060405180910390f35b6108f4600480360360408110156108be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611751565b604051808215151515815260200191505060405180910390f35b6109166117e8565b6040518082815260200191505060405180910390f35b61098e6004803603604081101561094257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117f2565b6040518082815260200191505060405180910390f35b6109e6600480360360208110156109ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611879565b005b60606040518060400160405280600a81526020017f536f6369616c476f6f6400000000000000000000000000000000000000000000815250905090565b6000600360149054906101000a900460ff1615610aaa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b610ab483836118ff565b905092915050565b6000600554905090565b610ace611625565b610b40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360149054906101000a900460ff1615610bc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b600082829050905060008090505b818114610c1657610c09848483818110610be757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16611916565b8080600101915050610bd1565b50505050565b6000600254905090565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600360149054906101000a900460ff1615610cf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b610cff848484611a5d565b90509392505050565b60006012905090565b6000600454905090565b6000600360149054906101000a900460ff1615610da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b610daa8383611b28565b905092915050565b610dba611625565b610e2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360149054906101000a900460ff16610eae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000610f38611625565b610faa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610fb48383611bcd565b6001905092915050565b610fc6611625565b611038576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6110423382611c74565b50565b6000600360149054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110ac611625565b61111e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6111e7611625565b611259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6112638282611e2c565b5050565b61126f611625565b6112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360149054906101000a900460ff1615611364576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6113ec611625565b61145e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360149054906101000a900460ff16156114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b81819050848490501461153f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526041815260200180612cee6041913960600191505060405180910390fd5b600084849050905060008090505b8181146115e95761159886868381811061156357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1685858481811061158c57fe5b90506020020135611eed565b6115dc8686838181106115a757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168585848181106115d057fe5b90506020020135611fee565b808060010191505061154d565b505050505050565b6000600654905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60606040518060400160405280600281526020017f5347000000000000000000000000000000000000000000000000000000000000815250905090565b6000600360149054906101000a900460ff161561173f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6117498383612090565b905092915050565b6000600360149054906101000a900460ff16156117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6117e0838361214f565b905092915050565b6000600754905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611881611625565b6118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6118fc81612166565b50565b600061190c3384846122ac565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156119cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f536f6369616c476f6f64546f6b656e3a20616d6f756e74206973207a65726f0081525060200191505060405180910390fd5b611a1581600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124a3565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000611a6a8484846124b1565b611b1d8433611b1885604051806060016040528060288152602001612c3860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127679092919063ffffffff16565b6122ac565b600190509392505050565b6000611bc33384611bbe85600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b6122ac565b6001905092915050565b6000611be48260055461282790919063ffffffff16565b9050600454811115611c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f45524332304361707065643a206361702065786365656465640000000000000081525060200191505060405180910390fd5b611c6883836128af565b80600581905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c846021913960400191505060405180910390fd5b611d6581604051806060016040528060228152602001612b57602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127679092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611dbc81600254612a6a90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b611e368282611c74565b611ee98233611ee484604051806060016040528060248152602001612c6060249139600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127679092919063ffffffff16565b6122ac565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612be76030913960400191505060405180910390fd5b6000811415611fea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f536f6369616c476f6f64546f6b656e3a20616d6f756e74206973207a65726f0081525060200191505060405180910390fd5b5050565b61204081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061208c81612ab4565b5050565b6000612145338461214085604051806060016040528060258152602001612d2f60259139600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127679092919063ffffffff16565b6122ac565b6001905092915050565b600061215c3384846124b1565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612b796026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612332576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612cca6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612b9f6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6124ad82826128af565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612537576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612ca56025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612b346023913960400191505060405180910390fd5b61262881604051806060016040528060268152602001612bc1602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127679092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126bb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612814576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156127d95780820151818401526020810190506127be565b50505050905090810190601f1680156128065780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808284019050838110156128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6129678160025461282790919063ffffffff16565b6002819055506129be816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000612aac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612767565b905092915050565b6000612acb8260075461282790919063ffffffff16565b9050600654811115612b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c176021913960400191505060405180910390fd5b80600781905550505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536f6369616c476f6f64546f6b656e3a2061697264726f7020746172676574206164647265737320697320656d70747945524332304361707065643a2061697264726f702063617020657863656564656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373536f6369616c476f6f64546f6b656e3a20746865206c656e677468206f66206163636f756e74732c20616d6f756e747320617265206e6f74207468652073616d6545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820d89d902cf238dd2549e2b83e1abbdd523b9ce42048fed3bf593c30e962e597dc64736f6c63430005110032
Deployed Bytecode Sourcemap
26989:4465:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26989:4465:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27684:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;27684:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22393:172;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22393:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25220:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30912:260;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30912:260:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;30912:260:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30912:260:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30912:260:0;;;;;;;;;;;;:::i;:::-;;10006:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28627:162;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28627:162:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22191:194;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22191:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28536:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24924:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22573:202;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22573:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21585:117;;;:::i;:::-;;24037:174;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24037:174:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28905:91;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28905:91:0;;;;;;;;;;;;;;;;;:::i;:::-;;20795:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10160:110;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10160:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18958:140;;;:::i;:::-;;29058:113;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29058:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21375:115;;;:::i;:::-;;29730:523;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29730:523:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;29730:523:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29730:523:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29730:523:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;29730:523:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29730:523:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29730:523:0;;;;;;;;;;;;:::i;:::-;;25063:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18149:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18515:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27886:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;27886:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22783:212;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22783:212:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22019:164;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22019:164:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25372:97;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10702:166;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10702:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19253:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19253:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;27684:83;27721:13;27754:5;;;;;;;;;;;;;;;;;27747:12;;27684:83;:::o;22393:172::-;22499:4;21032:7;;;;;;;;;;;21031:8;21023:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22528:29;22542:7;22551:5;22528:13;:29::i;:::-;22521:36;;22393:172;;;;:::o;25220:83::-;25260:7;25287:8;;25280:15;;25220:83;:::o;30912:260::-;18361:9;:7;:9::i;:::-;18353:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21032:7;;;;;;;;;;;21031:8;21023:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31035:14;31052:9;;:16;;31035:33;;31084:9;31096:1;31084:13;;31079:86;31104:6;31099:1;:11;31079:86;;31132:21;31140:9;;31150:1;31140:12;;;;;;;;;;;;;;;31132:7;:21::i;:::-;31112:3;;;;;;;31079:86;;;;21071:1;30912:260;;:::o;10006:91::-;10050:7;10077:12;;10070:19;;10006:91;:::o;28627:162::-;28725:7;28757:14;:24;28772:8;28757:24;;;;;;;;;;;;;;;;28750:31;;28627:162;;;:::o;22191:194::-;22318:4;21032:7;;;;;;;;;;;21031:8;21023:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22342:35;22361:4;22367:2;22371:5;22342:18;:35::i;:::-;22335:42;;22191:194;;;;;:::o;28536:83::-;28577:5;27233:2;28595:16;;28536:83;:::o;24924:75::-;24960:7;24987:4;;24980:11;;24924:75;:::o;22573:202::-;22694:4;21032:7;;;;;;;;;;;21031:8;21023:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22723:44;22747:7;22756:10;22723:23;:44::i;:::-;22716:51;;22573:202;;;;:::o;21585:117::-;18361:9;:7;:9::i;:::-;18353:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21231:7;;;;;;;;;;;21223:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21653:5;21643:7;;:15;;;;;;;;;;;;;;;;;;21674:20;21683:10;21674:20;;;;;;;;;;;;;;;;;;;;;;21585:117::o;24037:174::-;24137:4;18361:9;:7;:9::i;:::-;18353:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24159:22;24165:7;24174:6;24159:5;:22::i;:::-;24199:4;24192:11;;24037:174;;;;:::o;28905:91::-;18361:9;:7;:9::i;:::-;18353:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28963:25;28969:10;28981:6;28963:5;:25::i;:::-;28905:91;:::o;20795:78::-;20834:4;20858:7;;;;;;;;;;;20851:14;;20795:78;:::o;10160:110::-;10217:7;10244:9;:18;10254:7;10244:18;;;;;;;;;;;;;;;;10237:25;;10160:110;;;:::o;18958:140::-;18361:9;:7;:9::i;:::-;18353:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19057:1;19020:40;;19041:6;;;;;;;;;;;19020:40;;;;;;;;;;;;19088:1;19071:6;;:19;;;;;;;;;;;;;;;;;;18958:140::o;29058:113::-;18361:9;:7;:9::i;:::-;18353:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29137:26;29147:7;29156:6;29137:9;:26::i;:::-;29058:113;;:::o;21375:115::-;18361:9;:7;:9::i;:::-;18353:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21032:7;;;;;;;;;;;21031:8;21023:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21444:4;21434:7;;:14;;;;;;;;;;;;;;;;;;21464:18;21471:10;21464:18;;;;;;;;;;;;;;;;;;;;;;21375:115::o;29730:523::-;18361:9;:7;:9::i;:::-;18353:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21032:7;;;;;;;;;;;21031:8;21023:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29923:8;;:15;;29903:9;;:16;;:35;29881:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30042:14;30059:9;;:16;;30042:33;;30091:9;30103:1;30091:13;;30086:160;30111:6;30106:1;:11;30086:160;;30139:46;30159:9;;30169:1;30159:12;;;;;;;;;;;;;;;30173:8;;30182:1;30173:11;;;;;;;;;;;;;30139:19;:46::i;:::-;30200:34;30208:9;;30218:1;30208:12;;;;;;;;;;;;;;;30222:8;;30231:1;30222:11;;;;;;;;;;;;;30200:7;:34::i;:::-;30119:3;;;;;;;30086:160;;;;21071:1;29730:523;;;;:::o;25063:89::-;25106:7;25133:11;;25126:18;;25063:89;:::o;18149:79::-;18187:7;18214:6;;;;;;;;;;;18207:13;;18149:79;:::o;18515:92::-;18555:4;18593:6;;;;;;;;;;;18579:20;;:10;:20;;;18572:27;;18515:92;:::o;27886:87::-;27925:13;27958:7;;;;;;;;;;;;;;;;;27951:14;;27886:87;:::o;22783:212::-;22909:4;21032:7;;;;;;;;;;;21031:8;21023:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22938:49;22962:7;22971:15;22938:23;:49::i;:::-;22931:56;;22783:212;;;;:::o;22019:164::-;22121:4;21032:7;;;;;;;;;;;21031:8;21023:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22150:25;22165:2;22169:5;22150:14;:25::i;:::-;22143:32;;22019:164;;;;:::o;25372:97::-;25419:7;25446:15;;25439:22;;25372:97;:::o;10702:166::-;10801:7;10833:11;:18;10845:5;10833:18;;;;;;;;;;;;;;;:27;10852:7;10833:27;;;;;;;;;;;;;;;;10826:34;;10702:166;;;;:::o;19253:109::-;18361:9;:7;:9::i;:::-;18353:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19326:28;19345:8;19326:18;:28::i;:::-;19253:109;:::o;11015:150::-;11081:4;11098:37;11107:10;11119:7;11128:6;11098:8;:37::i;:::-;11153:4;11146:11;;11015:150;;;;:::o;31180:271::-;31285:1;31257:14;:24;31272:8;31257:24;;;;;;;;;;;;;;;;:29;;31235:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31356:48;31369:8;31379:14;:24;31394:8;31379:24;;;;;;;;;;;;;;;;31356:12;:48::i;:::-;31442:1;31415:14;:24;31430:8;31415:24;;;;;;;;;;;;;;;:28;;;;31180:271;:::o;11637:433::-;11760:4;11777:36;11787:6;11795:9;11806:6;11777:9;:36::i;:::-;11824:216;11847:6;11868:10;11893:136;11947:6;11893:136;;;;;;;;;;;;;;;;;:11;:19;11905:6;11893:19;;;;;;;;;;;;;;;:31;11913:10;11893:31;;;;;;;;;;;;;;;;:35;;:136;;;;;:::i;:::-;11824:8;:216::i;:::-;12058:4;12051:11;;11637:433;;;;;:::o;12479:279::-;12577:4;12599:129;12622:10;12647:7;12669:48;12706:10;12669:11;:23;12681:10;12669:23;;;;;;;;;;;;;;;:32;12693:7;12669:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;12599:8;:129::i;:::-;12746:4;12739:11;;12479:279;;;;:::o;25638:252::-;25705:18;25726:19;25739:5;25726:8;;:12;;:19;;;;:::i;:::-;25705:40;;25778:4;;25764:10;:18;;25756:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25823:27;25835:7;25844:5;25823:11;:27::i;:::-;25872:10;25861:8;:21;;;;25638:252;;;:::o;15593:385::-;15688:1;15669:21;;:7;:21;;;;15661:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15762:105;15799:6;15762:105;;;;;;;;;;;;;;;;;:9;:18;15772:7;15762:18;;;;;;;;;;;;;;;;:22;;:105;;;;;:::i;:::-;15741:9;:18;15751:7;15741:18;;;;;;;;;;;;;;;:126;;;;15893:24;15910:6;15893:12;;:16;;:24;;;;:::i;:::-;15878:12;:39;;;;15959:1;15933:37;;15942:7;15933:37;;;15963:6;15933:37;;;;;;;;;;;;;;;;;;15593:385;;:::o;16976:327::-;17048:22;17054:7;17063:6;17048:5;:22::i;:::-;17081:214;17104:7;17126:10;17151:133;17206:6;17151:133;;;;;;;;;;;;;;;;;:11;:20;17163:7;17151:20;;;;;;;;;;;;;;;:32;17172:10;17151:32;;;;;;;;;;;;;;;;:36;;:133;;;;;:::i;:::-;17081:8;:214::i;:::-;16976:327;;:::o;29259:307::-;29413:1;29393:22;;:8;:22;;;;29371:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29521:1;29510:7;:12;;29502:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29259:307;;:::o;30432:188::-;30531:37;30560:7;30531:14;:24;30546:8;30531:24;;;;;;;;;;;;;;;;:28;;:37;;;;:::i;:::-;30504:14;:24;30519:8;30504:24;;;;;;;;;;;;;;;:64;;;;30579:33;30604:7;30579:24;:33::i;:::-;30432:188;;:::o;13261:379::-;13364:4;13386:224;13409:10;13434:7;13456:143;13511:15;13456:143;;;;;;;;;;;;;;;;;:11;:23;13468:10;13456:23;;;;;;;;;;;;;;;:32;13480:7;13456:32;;;;;;;;;;;;;;;;:36;;:143;;;;;:::i;:::-;13386:8;:224::i;:::-;13628:4;13621:11;;13261:379;;;;:::o;10483:156::-;10552:4;10569:40;10579:10;10591:9;10602:6;10569:9;:40::i;:::-;10627:4;10620:11;;10483:156;;;;:::o;19468:266::-;19576:1;19556:22;;:8;:22;;;;19534:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19689:8;19660:38;;19681:6;;;;;;;;;;;19660:38;;;;;;;;;;;;19718:8;19709:6;;:17;;;;;;;;;;;;;;;;;;19468:266;:::o;16418:372::-;16563:1;16546:19;;:5;:19;;;;16538:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16644:1;16625:21;;:7;:21;;;;16617:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16728:6;16698:11;:18;16710:5;16698:18;;;;;;;;;;;;;;;:27;16717:7;16698:27;;;;;;;;;;;;;;;:36;;;;16766:7;16750:32;;16759:5;16750:32;;;16775:6;16750:32;;;;;;;;;;;;;;;;;;16418:372;;;:::o;26075:109::-;26149:27;26161:7;26170:5;26149:11;:27::i;:::-;26075:109;;:::o;14130:542::-;14280:1;14262:20;;:6;:20;;;;14254:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14364:1;14343:23;;:9;:23;;;;14335:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14439:108;14475:6;14439:108;;;;;;;;;;;;;;;;;:9;:17;14449:6;14439:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;14419:9;:17;14429:6;14419:17;;;;;;;;;;;;;;;:128;;;;14581:32;14606:6;14581:9;:20;14591:9;14581:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14558:9;:20;14568:9;14558:20;;;;;;;;;;;;;;;:55;;;;14646:9;14629:35;;14638:6;14629:35;;;14657:6;14629:35;;;;;;;;;;;;;;;;;;14130:542;;;:::o;4768:226::-;4888:7;4921:1;4916;:6;;4924:12;4908:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4908:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4948:9;4964:1;4960;:5;4948:17;;4985:1;4978:8;;;4768:226;;;;;:::o;3839:181::-;3897:7;3917:9;3933:1;3929;:5;3917:17;;3958:1;3953;:6;;3945:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4011:1;4004:8;;;3839:181;;;;:::o;14953:308::-;15048:1;15029:21;;:7;:21;;;;15021:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15114:24;15131:6;15114:12;;:16;;:24;;;;:::i;:::-;15099:12;:39;;;;15170:30;15193:6;15170:9;:18;15180:7;15170:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;15149:9;:18;15159:7;15149:18;;;;;;;;;;;;;;;:51;;;;15237:7;15216:37;;15233:1;15216:37;;;15246:6;15216:37;;;;;;;;;;;;;;;;;;14953:308;;:::o;4295:136::-;4353:7;4380:43;4384:1;4387;4380:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4373:50;;4295:136;;;;:::o;26405:303::-;26474:25;26502:26;26522:5;26502:15;;:19;;:26;;;;:::i;:::-;26474:54;;26582:11;;26561:17;:32;;26539:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26683:17;26665:15;:35;;;;26405:303;;:::o
Swarm Source
bzzr://d89d902cf238dd2549e2b83e1abbdd523b9ce42048fed3bf593c30e962e597dc
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.