ERC-20
Overview
Max Total Supply
1,000,000,000 PUBE
Holders
344
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 8 Decimals)
Balance
19,860 PUBEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PubeCoin
Compiler Version
v0.5.12+commit.7709ece9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-25 */ pragma solidity >=0.5.12; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() external view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { _transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } /** * @dev Transfer token for a specified addresses * @param _from The address to transfer from. * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function _transfer(address _from, address _to, uint256 _value) internal { require(_to != address(0)); require(_value <= balances[_from]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(_from, _to, _value); } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @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 StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * 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 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval( address _spender, uint _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval( address _spender, uint _subtractedValue ) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/openzeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } modifier hasMintPermission() { require(msg.sender == owner); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint( address _to, uint256 _amount ) hasMintPermission canMint internal returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint internal returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } contract FreezableToken is StandardToken, Ownable { // freezing chains mapping (bytes32 => uint64) internal chains; // freezing amounts for each chain mapping (bytes32 => uint) internal freezings; // total freezing balance per address mapping (address => uint) internal freezingBalance; // reducible freezing chains mapping (bytes32 => uint64) internal reducibleChains; // reducible freezing amounts for each chain mapping (bytes32 => uint) internal reducibleFreezings; // total reducible freezing balance per address mapping (address => uint) internal reducibleFreezingBalance; event Freezed(address indexed to, uint64 release, uint amount); event Released(address indexed owner, uint amount); event FreezeReduced(address indexed owner, uint64 release, uint amount); modifier hasReleasePermission() { require(msg.sender == owner, "Access denied"); _; } /** * @dev Gets the balance of the specified address include freezing tokens. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return super.balanceOf(_owner) + freezingBalance[_owner] + reducibleFreezingBalance[_owner]; } /** * @dev Gets the balance of the specified address without freezing tokens. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function actualBalanceOf(address _owner) public view returns (uint256 balance) { return super.balanceOf(_owner); } /** * @dev Gets the freezed balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function freezingBalanceOf(address _owner) public view returns (uint256 balance) { return freezingBalance[_owner]; } /** * @dev Gets the reducible freezed balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function reducibleFreezingBalanceOf(address _owner) public view returns (uint256 balance) { return reducibleFreezingBalance[_owner]; } /** * @dev gets freezing count * @param _addr Address of freeze tokens owner. */ function freezingCount(address _addr) public view returns (uint count) { uint64 release = chains[toKey(_addr, 0)]; while (release != 0) { count++; release = chains[toKey(_addr, release)]; } } /** * @dev gets reducible freezing count * @param _addr Address of freeze tokens owner. * @param _sender Address of frozen tokens sender. */ function reducibleFreezingCount(address _addr, address _sender) public view returns (uint count) { uint64 release = reducibleChains[toKey2(_addr, _sender, 0)]; while (release != 0) { count++; release = reducibleChains[toKey2(_addr, _sender, release)]; } } /** * @dev gets freezing end date and freezing balance for the freezing portion specified by index. * @param _addr Address of freeze tokens owner. * @param _index Freezing portion index. It ordered by release date descending. */ function getFreezing(address _addr, uint _index) public view returns (uint64 _release, uint _balance) { for (uint i = 0; i < _index + 1; i++) { _release = chains[toKey(_addr, _release)]; if (_release == 0) { return (0, 0); } } _balance = freezings[toKey(_addr, _release)]; } /** * @dev gets reducible freezing end date and reducible freezing balance for the freezing portion specified by index. * @param _addr Address of freeze tokens owner. * @param _sender Address of frozen tokens sender. * @param _index Freezing portion index. It ordered by release date descending. */ function getReducibleFreezing(address _addr, address _sender, uint _index) public view returns (uint64 _release, uint _balance) { for (uint i = 0; i < _index + 1; i++) { _release = reducibleChains[toKey2(_addr, _sender, _release)]; if (_release == 0) { return (0, 0); } } _balance = reducibleFreezings[toKey2(_addr, _sender, _release)]; } /** * @dev freeze your tokens to the specified address. * Be careful, gas usage is not deterministic, * and depends on how many freezes _to address already has. * @param _to Address to which token will be freeze. * @param _amount Amount of token to freeze. * @param _until Release date, must be in future. */ function freezeTo(address _to, uint _amount, uint64 _until) public { _freezeTo(msg.sender, _to, _amount, _until); } /** * @dev freeze your tokens to the specified address. * Be careful, gas usage is not deterministic, * and depends on how many freezes _to address already has. * @param _to Address to which token will be freeze. * @param _amount Amount of token to freeze. * @param _until Release date, must be in future. */ function _freezeTo(address _from, address _to, uint _amount, uint64 _until) internal { require(_to != address(0)); require(_amount <= balances[_from]); balances[_from] = balances[_from].sub(_amount); bytes32 currentKey = toKey(_to, _until); freezings[currentKey] = freezings[currentKey].add(_amount); freezingBalance[_to] = freezingBalance[_to].add(_amount); freeze(_to, _until); emit Transfer(_from, _to, _amount); emit Freezed(_to, _until, _amount); } /** * @dev freeze your tokens to the specified address with posibility to reduce freezing. * Be careful, gas usage is not deterministic, * and depends on how many freezes _to address already has. * @param _to Address to which token will be freeze. * @param _amount Amount of token to freeze. * @param _until Release date, must be in future. */ function reducibleFreezeTo(address _to, uint _amount, uint64 _until) public { require(_to != address(0)); require(_amount <= balances[msg.sender]); require(_until > block.timestamp); balances[msg.sender] = balances[msg.sender].sub(_amount); bytes32 currentKey = toKey2(_to, msg.sender, _until); reducibleFreezings[currentKey] = reducibleFreezings[currentKey].add(_amount); reducibleFreezingBalance[_to] = reducibleFreezingBalance[_to].add(_amount); reducibleFreeze(_to, _until); emit Transfer(msg.sender, _to, _amount); emit Freezed(_to, _until, _amount); } /** * @dev reduce freeze time for _amount of tokens for reducible freezing of address _to by frozen tokens sender. * Removes reducible freezing for _amount of tokens if _newUntil in the past * Be careful, gas usage is not deterministic, * and depends on how many freezes _to address already has. * @param _to Address to which token will be freeze. * @param _amount Amount of token to freeze. * @param _until Release date, must be in future. */ function reduceFreezingTo(address _to, uint _amount, uint64 _until, uint64 _newUntil) public { require(_to != address(0)); // Don't allow to move reducible freezing to the future require(_newUntil < _until, "Attempt to move the freezing into the future"); bytes32 currentKey = toKey2(_to, msg.sender, _until); uint amount = reducibleFreezings[currentKey]; require(amount > 0, "Freezing not found"); if (_amount >= amount) { delete reducibleFreezings[currentKey]; uint64 next = reducibleChains[currentKey]; bytes32 parent = toKey2(_to, msg.sender, uint64(0)); while (reducibleChains[parent] != _until) { parent = toKey2(_to, msg.sender, reducibleChains[parent]); } if (next == 0) { delete reducibleChains[parent]; } else { reducibleChains[parent] = next; } if (_newUntil <= block.timestamp) { balances[_to] = balances[_to].add(amount); reducibleFreezingBalance[_to] = reducibleFreezingBalance[_to].sub(amount); emit Released(_to, amount); } else { bytes32 newKey = toKey2(_to, msg.sender, _newUntil); reducibleFreezings[newKey] = reducibleFreezings[newKey].add(amount); reducibleFreeze(_to, _newUntil); emit FreezeReduced(_to, _newUntil, amount); } } else { reducibleFreezings[currentKey] = reducibleFreezings[currentKey].sub(_amount); if (_newUntil <= block.timestamp) { balances[_to] = balances[_to].add(_amount); reducibleFreezingBalance[_to] = reducibleFreezingBalance[_to].sub(_amount); emit Released(_to, _amount); } else { bytes32 newKey = toKey2(_to, msg.sender, _newUntil); reducibleFreezings[newKey] = reducibleFreezings[newKey].add(_amount); reducibleFreeze(_to, _newUntil); emit FreezeReduced(_to, _newUntil, _amount); } } } /** * @dev release first available freezing tokens. */ function releaseOnce() public { _releaseOnce(msg.sender); } /** * @dev release first available freezing tokens (support). * @param _addr Address of frozen tokens owner. */ function releaseOnceFor(address _addr) hasReleasePermission public { _releaseOnce(_addr); } /** * @dev release first available freezing tokens. * @param _addr Address of frozen tokens owner. */ function _releaseOnce(address _addr) internal { bytes32 headKey = toKey(_addr, 0); uint64 head = chains[headKey]; require(head != 0, "Freezing not found"); require(uint64(block.timestamp) > head, "Premature release attempt"); bytes32 currentKey = toKey(_addr, head); uint64 next = chains[currentKey]; uint amount = freezings[currentKey]; delete freezings[currentKey]; balances[_addr] = balances[_addr].add(amount); freezingBalance[_addr] = freezingBalance[_addr].sub(amount); if (next == 0) { delete chains[headKey]; } else { chains[headKey] = next; delete chains[currentKey]; } emit Released(_addr, amount); } /** * @dev release first available reducible freezing tokens. * @param _sender Address of frozen tokens sender. */ function releaseReducibleFreezingOnce(address _sender) public { _releaseReducibleFreezingOnce(msg.sender, _sender); } /** * @dev release first available reducible freezing tokens for _addr. * @param _addr Address of frozen tokens owner. * @param _sender Address of frozen tokens sender. */ function releaseReducibleFreezingOnceFor(address _addr, address _sender) hasReleasePermission public { _releaseReducibleFreezingOnce(_addr, _sender); } /** * @dev release first available reducible freezing tokens. * @param _addr Address of frozen tokens owner. * @param _sender Address of frozen tokens sender. */ function _releaseReducibleFreezingOnce(address _addr, address _sender) internal { bytes32 headKey = toKey2(_addr, _sender, 0); uint64 head = reducibleChains[headKey]; require(head != 0, "Freezing not found"); require(uint64(block.timestamp) > head, "Premature release attempt"); bytes32 currentKey = toKey2(_addr, _sender, head); uint64 next = reducibleChains[currentKey]; uint amount = reducibleFreezings[currentKey]; delete reducibleFreezings[currentKey]; balances[_addr] = balances[_addr].add(amount); reducibleFreezingBalance[_addr] = reducibleFreezingBalance[_addr].sub(amount); if (next == 0) { delete reducibleChains[headKey]; } else { reducibleChains[headKey] = next; delete reducibleChains[currentKey]; } emit Released(_addr, amount); } /** * @dev release all available for release freezing tokens. Gas usage is not deterministic! * @return how many tokens was released */ function releaseAll() public returns (uint tokens) { tokens = _releaseAll(msg.sender); } /** * @dev release all available for release freezing tokens for address _addr. Gas usage is not deterministic! * @param _addr Address of frozen tokens owner. * @return how many tokens was released */ function releaseAllFor(address _addr) hasReleasePermission public returns (uint tokens) { tokens = _releaseAll(_addr); } /** * @dev release all available for release freezing tokens. * @param _addr Address of frozen tokens owner. * @return how many tokens was released */ function _releaseAll(address _addr) internal returns (uint tokens) { uint release; uint balance; (release, balance) = getFreezing(_addr, 0); while (release != 0 && block.timestamp > release) { _releaseOnce(_addr); tokens += balance; (release, balance) = getFreezing(_addr, 0); } } /** * @dev release all available for release reducible freezing tokens sent by _sender. Gas usage is not deterministic! * @param _sender Address of frozen tokens sender. * @return how many tokens was released */ function reducibleReleaseAll(address _sender) public returns (uint tokens) { tokens = _reducibleReleaseAll(msg.sender, _sender); } /** * @dev release all available for release reducible freezing tokens sent by _sender to _addr. Gas usage is not deterministic! * @param _addr Address of frozen tokens owner. * @param _sender Address of frozen tokens sender. * @return how many tokens was released */ function reducibleReleaseAllFor(address _addr, address _sender) hasReleasePermission public returns (uint tokens) { tokens = _reducibleReleaseAll(_addr, _sender); } /** * @dev release all available for release reducible freezing tokens sent by _sender to _addr. * @param _addr Address of frozen tokens owner. * @param _sender Address of frozen tokens sender. * @return how many tokens was released */ function _reducibleReleaseAll(address _addr, address _sender) internal returns (uint tokens) { uint release; uint balance; (release, balance) = getReducibleFreezing(_addr, _sender, 0); while (release != 0 && block.timestamp > release) { releaseReducibleFreezingOnce(_sender); tokens += balance; (release, balance) = getReducibleFreezing(_addr, _sender, 0); } } function toKey(address _addr, uint _release) internal pure returns (bytes32 result) { result = 0x1852251212091514201510158141318000000000000000000000000000000000; assembly { result := or(result, mul(_addr, 0x10000000000000000)) result := or(result, _release) } } function toKey2(address _addr1, address _addr2, uint _release) internal pure returns (bytes32 result) { bytes32 key1 = 0x1852251212091514201510158141318000000000000000000000000000000000; bytes32 key2 = 0x9117776660000000000000000000000000000000000000000000000000000000; assembly { key1 := or(key1, mul(_addr1, 0x10000000000000000)) key1 := or(key1, _release) key2 := or(key2, _addr2) } result = keccak256(abi.encodePacked(key1, key2)); } function freeze(address _to, uint64 _until) internal { require(_until > block.timestamp); bytes32 key = toKey(_to, _until); bytes32 parentKey = toKey(_to, uint64(0)); uint64 next = chains[parentKey]; if (next == 0) { chains[parentKey] = _until; return; } bytes32 nextKey = toKey(_to, next); uint parent; while (next != 0 && _until > next) { parent = next; parentKey = nextKey; next = chains[nextKey]; nextKey = toKey(_to, next); } if (_until == next) { return; } if (next != 0) { chains[key] = next; } chains[parentKey] = _until; } function reducibleFreeze(address _to, uint64 _until) internal { require(_until > block.timestamp); bytes32 key = toKey2(_to, msg.sender, _until); bytes32 parentKey = toKey2(_to, msg.sender, uint64(0)); uint64 next = reducibleChains[parentKey]; if (next == 0) { reducibleChains[parentKey] = _until; return; } bytes32 nextKey = toKey2(_to, msg.sender, next); uint parent; while (next != 0 && _until > next) { parent = next; parentKey = nextKey; next = reducibleChains[nextKey]; nextKey = toKey2(_to, msg.sender, next); } if (_until == next) { return; } if (next != 0) { reducibleChains[key] = next; } reducibleChains[parentKey] = _until; } } /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } contract Consts { uint public constant token_decimals = 8; uint8 public constant token_decimals_uint8 = 8; uint public constant token_decimal_multiplier = 10 ** token_decimals; string public constant token_name = "PubeCoin"; string public constant token_symbol = "PUBE"; uint public constant initial_supply = 1000000000 * token_decimal_multiplier; } contract PubeCoin is Consts, BurnableToken, Pausable, MintableToken, FreezableToken { uint256 startdate; address beneficiary1; address beneficiary2; address beneficiary3; address beneficiary4; event Initialized(); bool public initialized = false; constructor() public { init(); } function name() public pure returns (string memory) { return token_name; } function symbol() public pure returns (string memory) { return token_symbol; } function decimals() public pure returns (uint8) { return token_decimals_uint8; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool _success) { require(!paused); return super.transferFrom(_from, _to, _value); } function transfer(address _to, uint256 _value) public returns (bool _success) { require(!paused); return super.transfer(_to, _value); } function init() private { require(!initialized); initialized = true; // Total Supply uint256 amount = initial_supply; // Mint all tokens mint(address(this), amount); finishMinting(); // Start date is January 01, 2022 startdate = 1640966400; beneficiary1 = 0xA2f1319a4c6Aac59FDaf198f76176d0F91Ae6A93; // Public sale beneficiary2 = 0xaAa4Abf21816f8Ca7eDF343e33a7179f4539252D; // Team beneficiary3 = 0x1D5b0f58C4D3fa38B2EB99e256B57dED31948adc; // Bounty beneficiary4 = 0xd7aF22B6a8B5F430C0306B22949738ED6a7d1C12; // Foundation // Public sale (80%) _transfer(address(this), beneficiary1, totalSupply().mul(80).div(100)); // Team tokens (10%) are frozen will be released every six months after 1 year. _freezeTo(address(this), beneficiary2, totalSupply().mul(10).div(100).div(4), uint64(startdate + 366 days)); _freezeTo(address(this), beneficiary2, totalSupply().mul(10).div(100).div(4), uint64(startdate + 548 days)); _freezeTo(address(this), beneficiary2, totalSupply().mul(10).div(100).div(4), uint64(startdate + 731 days)); _freezeTo(address(this), beneficiary2, totalSupply().mul(10).div(100).div(4), uint64(startdate + 913 days)); // Bounty tokens (3%) will be distributed to the bounty campaign participants during the token sale. _transfer(address(this), beneficiary3, totalSupply().mul(3).div(100)); // Foundation tokens (7%) will be frozen on PubeCoin Foundation smart-contract for 2 years. _freezeTo(address(this), beneficiary4, totalSupply().mul(7).div(100), uint64(startdate + 731 days)); emit Initialized(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint64","name":"release","type":"uint64"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FreezeReduced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint64","name":"release","type":"uint64"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Freezed","type":"event"},{"anonymous":false,"inputs":[],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Released","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":[],"name":"Unpause","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"actualBalanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","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":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"decreaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint64","name":"_until","type":"uint64"}],"name":"freezeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"freezingBalanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"freezingCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getFreezing","outputs":[{"internalType":"uint64","name":"_release","type":"uint64"},{"internalType":"uint256","name":"_balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getReducibleFreezing","outputs":[{"internalType":"uint64","name":"_release","type":"uint64"},{"internalType":"uint256","name":"_balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initial_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint64","name":"_until","type":"uint64"},{"internalType":"uint64","name":"_newUntil","type":"uint64"}],"name":"reduceFreezingTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint64","name":"_until","type":"uint64"}],"name":"reducibleFreezeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"reducibleFreezingBalanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"reducibleFreezingCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"reducibleReleaseAll","outputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"reducibleReleaseAllFor","outputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"releaseAll","outputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"releaseAllFor","outputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"releaseOnce","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"releaseOnceFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"releaseReducibleFreezingOnce","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_sender","type":"address"}],"name":"releaseReducibleFreezingOnceFor","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"token_decimal_multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token_decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token_decimals_uint8","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token_name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","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":"_success","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":"_success","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":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600360146101000a81548160ff0219169083151502179055506000600360156101000a81548160ff0219169083151502179055506000600e60146101000a81548160ff0219169083151502179055503480156200006257600080fd5b5033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000b4620000ba60201b60201c565b6200118c565b600e60149054906101000a900460ff1615620000d557600080fd5b6001600e60146101000a81548160ff02191690831515021790555060006008600a0a633b9aca000290506200011130826200068e60201b60201c565b50620001226200088060201b60201c565b506361cf2900600a8190555073a2f1319a4c6aac59fdaf198f76176d0f91ae6a93600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073aaa4abf21816f8ca7edf343e33a7179f4539252d600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731d5b0f58c4d3fa38b2eb99e256b57ded31948adc600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d7af22b6a8b5f430c0306b22949738ed6a7d1c12600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002fa30600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620002ee6064620002da6050620002c66200094660201b60201c565b6200095060201b6200468b1790919060201c565b6200098860201b620046bf1790919060201c565b6200099d60201b60201c565b6200039530600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200038060046200036c606462000358600a620003446200094660201b60201c565b6200095060201b6200468b1790919060201c565b6200098860201b620046bf1790919060201c565b6200098860201b620046bf1790919060201c565b6301e28500600a540162000bc260201b60201c565b6200043030600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200041b6004620004076064620003f3600a620003df6200094660201b60201c565b6200095060201b6200468b1790919060201c565b6200098860201b620046bf1790919060201c565b6200098860201b620046bf1790919060201c565b6302d27600600a540162000bc260201b60201c565b620004cb30600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620004b66004620004a260646200048e600a6200047a6200094660201b60201c565b6200095060201b6200468b1790919060201c565b6200098860201b620046bf1790919060201c565b6200098860201b620046bf1790919060201c565b6303c3b880600a540162000bc260201b60201c565b6200056630600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200055160046200053d606462000529600a620005156200094660201b60201c565b6200095060201b6200468b1790919060201c565b6200098860201b620046bf1790919060201c565b6200098860201b620046bf1790919060201c565b6304b3a980600a540162000bc260201b60201c565b620005de30600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620005d26064620005be6003620005aa6200094660201b60201c565b6200095060201b6200468b1790919060201c565b6200098860201b620046bf1790919060201c565b6200099d60201b60201c565b6200065f30600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200064a6064620006366007620006226200094660201b60201c565b6200095060201b6200468b1790919060201c565b6200098860201b620046bf1790919060201c565b6303c3b880600a540162000bc260201b60201c565b7f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c860405160405180910390a150565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620006eb57600080fd5b600360159054906101000a900460ff16156200070657600080fd5b620007228260015462000ecb60201b62002db31790919060201c565b60018190555062000780826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ecb60201b62002db31790919060201c565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620008dd57600080fd5b600360159054906101000a900460ff1615620008f857600080fd5b6001600360156101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a16001905090565b6000600154905090565b60008083141562000965576000905062000982565b8183029050818382816200097557fe5b04146200097e57fe5b8090505b92915050565b60008183816200099457fe5b04905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009d857600080fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111562000a2457600080fd5b62000a7c816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ee660201b62002dcd1790919060201c565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000b16816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ecb60201b62002db31790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000bfd57600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111562000c4957600080fd5b62000ca1826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ee660201b62002dcd1790919060201c565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600062000d01848367ffffffffffffffff1662000efe60201b60201c565b905062000d3083600560008481526020019081526020016000205462000ecb60201b62002db31790919060201c565b600560008381526020019081526020016000208190555062000da083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ecb60201b62002db31790919060201c565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000df5848362000f4160201b60201c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff167f2ecd071e4d10ed2221b04636ed0724cce66a873aa98c1a31b4bb0e6846d3aab48385604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390a25050505050565b600081830190508281101562000edd57fe5b80905092915050565b60008282111562000ef357fe5b818303905092915050565b60007f185225121209151420151015814131800000000000000000000000000000000060001b905068010000000000000000830281179050818117905092915050565b428167ffffffffffffffff161162000f5857600080fd5b600062000f76838367ffffffffffffffff1662000efe60201b60201c565b9050600062000f9784600067ffffffffffffffff1662000efe60201b60201c565b905060006004600083815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008167ffffffffffffffff1614156200101c57836004600084815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505062001188565b60006200103a868367ffffffffffffffff1662000efe60201b60201c565b905060005b60008367ffffffffffffffff16141580156200106e57508267ffffffffffffffff168667ffffffffffffffff16115b15620010d2578267ffffffffffffffff1690508193506004600083815260200190815260200160002060009054906101000a900467ffffffffffffffff169250620010ca878467ffffffffffffffff1662000efe60201b60201c565b91506200103f565b8267ffffffffffffffff168667ffffffffffffffff161415620010fa57505050505062001188565b60008367ffffffffffffffff16146200114857826004600087815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b856004600086815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050505b5050565b614734806200119c6000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c80634be2c7ba1161015157806395d89b41116100c3578063d73dd62311610087578063d73dd62314610da5578063d783a2b514610e0b578063d8aeedf514610e83578063dd62ed3e14610edb578063f2fde38b14610f53578063fec0ef6014610f9757610274565b806395d89b4114610baa5780639e9470db14610c2d578063a9059cbb14610c85578063ca63b5b814610ceb578063d60fcb8914610d4357610274565b806370a082311161011557806370a0823114610a2d578063715018a614610a855780638456cb5914610a8f57806386036bb414610a995780638da5cb5b14610add578063947a316814610b2757610274565b80634be2c7ba146108e05780635be7fde81461097d5780635c975abb1461099b57806366188463146109bd57806366a92cda14610a2357610274565b8063236e02e0116101ea5780633c4b303d116101ae5780633c4b303d146107e45780633d7e82c9146108025780633f4ba83a1461082057806342966c681461082a57806342a7508314610858578063462a520f146108bc57610274565b8063236e02e01461064257806323b872dd146106ba5780632405e3c614610740578063313ce5671461075e5780633be1e9521461078257610274565b8063158ef93e1161023c578063158ef93e146104775780631673836a1461049957806317a950ac146104f157806318160ddd146105495780631e658e36146105675780631f772a34146105bf57610274565b806302d6f7301461027957806305d2035b146102f657806306fdde0314610318578063095ea7b31461039b5780630b67f7f114610401575b600080fd5b6102c56004803603604081101561028f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fdb565b604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390f35b6102fe611091565b604051808215151515815260200191505060405180910390f35b6103206110a4565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610360578082015181840152602081019050610345565b50505050905090810190601f16801561038d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103e7600480360360408110156103b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110e1565b604051808215151515815260200191505060405180910390f35b6104756004803603608081101561041757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803567ffffffffffffffff169060200190929190803567ffffffffffffffff1690602001909291905050506111d3565b005b61047f611984565b604051808215151515815260200191505060405180910390f35b6104db600480360360208110156104af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611997565b6040518082815260200191505060405180910390f35b6105336004803603602081101561050757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119e0565b6040518082815260200191505060405180910390f35b6105516119f2565b6040518082815260200191505060405180910390f35b6105a96004803603602081101561057d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119fc565b6040518082815260200191505060405180910390f35b6105c7611a0f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106075780820151818401526020810190506105ec565b50505050905090810190601f1680156106345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106a46004803603604081101561065857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a48565b6040518082815260200191505060405180910390f35b610726600480360360608110156106d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b1f565b604051808215151515815260200191505060405180910390f35b610748611b4f565b6040518082815260200191505060405180910390f35b610766611b5d565b604051808260ff1660ff16815260200191505060405180910390f35b6107e26004803603606081101561079857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803567ffffffffffffffff169060200190929190505050611b66565b005b6107ec611b77565b6040518082815260200191505060405180910390f35b61080a611b7c565b6040518082815260200191505060405180910390f35b610828611b84565b005b6108566004803603602081101561084057600080fd5b8101908080359060200190929190505050611c40565b005b6108ba6004803603604081101561086e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c4d565b005b6108c4611d1e565b604051808260ff1660ff16815260200191505060405180910390f35b61094c600480360360608110156108f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d23565b604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390f35b610985611ddc565b6040518082815260200191505060405180910390f35b6109a3611dec565b604051808215151515815260200191505060405180910390f35b610a09600480360360408110156109d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dff565b604051808215151515815260200191505060405180910390f35b610a2b612090565b005b610a6f60048036036020811015610a4357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061209b565b6040518082815260200191505060405180910390f35b610a8d61212f565b005b610a97612232565b005b610adb60048036036020811015610aaf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122ef565b005b610ae56122fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b2f612322565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b6f578082015181840152602081019050610b54565b50505050905090810190601f168015610b9c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610bb261235b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bf2578082015181840152602081019050610bd7565b50505050905090810190601f168015610c1f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c6f60048036036020811015610c4357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612398565b6040518082815260200191505060405180910390f35b610cd160048036036040811015610c9b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061246d565b604051808215151515815260200191505060405180910390f35b610d2d60048036036020811015610d0157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061249b565b6040518082815260200191505060405180910390f35b610da360048036036060811015610d5957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803567ffffffffffffffff169060200190929190505050612535565b005b610df160048036036040811015610dbb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061282d565b604051808215151515815260200191505060405180910390f35b610e6d60048036036040811015610e2157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a29565b6040518082815260200191505060405180910390f35b610ec560048036036020811015610e9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ac6565b6040518082815260200191505060405180910390f35b610f3d60048036036040811015610ef157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b0f565b6040518082815260200191505060405180910390f35b610f9560048036036020811015610f6957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b96565b005b610fd960048036036020811015610fad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bfc565b005b60008060008090505b6001840181101561105f5760046000611007878667ffffffffffffffff16612ccb565b815260200190815260200160002060009054906101000a900467ffffffffffffffff16925060008367ffffffffffffffff16141561105257600080819150809050925092505061108a565b8080600101915050610fe4565b5060056000611078868567ffffffffffffffff16612ccb565b81526020019081526020016000205490505b9250929050565b600360159054906101000a900460ff1681565b60606040518060400160405280600881526020017f50756265436f696e000000000000000000000000000000000000000000000000815250905090565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561120d57600080fd5b8167ffffffffffffffff168167ffffffffffffffff1610611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806146d4602c913960400191505060405180910390fd5b600061129085338567ffffffffffffffff16612d0e565b905060006008600083815260200190815260200160002054905060008111611320576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f467265657a696e67206e6f7420666f756e64000000000000000000000000000081525060200191505060405180910390fd5b8085106116e657600860008381526020019081526020016000206000905560006007600084815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060006113828833600067ffffffffffffffff16612d0e565b90505b8567ffffffffffffffff166007600083815260200190815260200160002060009054906101000a900467ffffffffffffffff1667ffffffffffffffff161461140a5761140388336007600085815260200190815260200160002060009054906101000a900467ffffffffffffffff1667ffffffffffffffff16612d0e565b9050611385565b60008267ffffffffffffffff16141561144c576007600082815260200190815260200160002060006101000a81549067ffffffffffffffff0219169055611487565b816007600083815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b428567ffffffffffffffff1611611613576114e9836000808b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b6000808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061157d83600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508773ffffffffffffffffffffffffffffffffffffffff167fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e846040518082815260200191505060405180910390a26116df565b600061162a89338867ffffffffffffffff16612d0e565b9050611652846008600084815260200190815260200160002054612db390919063ffffffff16565b60086000838152602001908152602001600020819055506116738987612de4565b8873ffffffffffffffffffffffffffffffffffffffff167fa3a64ccd852668b52d8ce6fee989c8992dfdb762e92f0fa33557497afae8a3578786604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390a2505b505061197c565b61170c856008600085815260200190815260200160002054612dcd90919063ffffffff16565b6008600084815260200190815260200160002081905550428367ffffffffffffffff16116118af57611785856000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b6000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061181985600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff167fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e866040518082815260200191505060405180910390a261197b565b60006118c687338667ffffffffffffffff16612d0e565b90506118ee866008600084815260200190815260200160002054612db390919063ffffffff16565b600860008381526020019081526020016000208190555061190f8785612de4565b8673ffffffffffffffffffffffffffffffffffffffff167fa3a64ccd852668b52d8ce6fee989c8992dfdb762e92f0fa33557497afae8a3578588604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390a2505b5b505050505050565b600e60149054906101000a900460ff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006119eb8261300a565b9050919050565b6000600154905090565b6000611a083383613052565b9050919050565b6040518060400160405280600481526020017f505542450000000000000000000000000000000000000000000000000000000081525081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4163636573732064656e6965640000000000000000000000000000000000000081525060200191505060405180910390fd5b611b178383613052565b905092915050565b6000600360149054906101000a900460ff1615611b3b57600080fd5b611b468484846130ca565b90509392505050565b6008600a0a633b9aca000281565b60006008905090565b611b723384848461347e565b505050565b600881565b6008600a0a81565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bde57600080fd5b600360149054906101000a900460ff16611bf757600080fd5b6000600360146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b611c4a3382613760565b50565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4163636573732064656e6965640000000000000000000000000000000000000081525060200191505060405180910390fd5b611d1a8282613911565b5050565b600881565b60008060008090505b60018401811015611da85760076000611d5088888767ffffffffffffffff16612d0e565b815260200190815260200160002060009054906101000a900467ffffffffffffffff16925060008367ffffffffffffffff161415611d9b576000808191508090509250925050611dd4565b8080600101915050611d2c565b5060086000611dc287878667ffffffffffffffff16612d0e565b81526020019081526020016000205490505b935093915050565b6000611de733613cf1565b905090565b600360149054906101000a900460ff1681565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611f10576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fa4565b611f238382612dcd90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b61209933613d66565b565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121268461300a565b01019050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461218957600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461228c57600080fd5b600360149054906101000a900460ff16156122a657600080fd5b6001600360146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6122f93382613911565b50565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600881526020017f50756265436f696e00000000000000000000000000000000000000000000000081525081565b60606040518060400160405280600481526020017f5055424500000000000000000000000000000000000000000000000000000000815250905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461245d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4163636573732064656e6965640000000000000000000000000000000000000081525060200191505060405180910390fd5b61246682613cf1565b9050919050565b6000600360149054906101000a900460ff161561248957600080fd5b6124938383614143565b905092915050565b600080600460006124ad856000612ccb565b815260200190815260200160002060009054906101000a900467ffffffffffffffff1690505b60008167ffffffffffffffff161461252f57818060010192505060046000612505858467ffffffffffffffff16612ccb565b815260200190815260200160002060009054906101000a900467ffffffffffffffff1690506124d3565b50919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561256f57600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156125ba57600080fd5b428167ffffffffffffffff16116125d057600080fd5b612621826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061267a84338467ffffffffffffffff16612d0e565b90506126a2836008600084815260200190815260200160002054612db390919063ffffffff16565b600860008381526020019081526020016000208190555061270b83600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127588483612de4565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff167f2ecd071e4d10ed2221b04636ed0724cce66a873aa98c1a31b4bb0e6846d3aab48385604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390a250505050565b60006128be82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008060076000612a3c86866000612d0e565b815260200190815260200160002060009054906101000a900467ffffffffffffffff1690505b60008167ffffffffffffffff1614612abf57818060010192505060076000612a9586868567ffffffffffffffff16612d0e565b815260200190815260200160002060009054906101000a900467ffffffffffffffff169050612a62565b5092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bf057600080fd5b612bf98161415a565b50565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612cbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4163636573732064656e6965640000000000000000000000000000000000000081525060200191505060405180910390fd5b612cc881613d66565b50565b60007f185225121209151420151015814131800000000000000000000000000000000060001b905068010000000000000000830281179050818117905092915050565b6000807f185225121209151420151015814131800000000000000000000000000000000060001b905060007f911777666000000000000000000000000000000000000000000000000000000060001b905068010000000000000000860282179150838217915084811790508181604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120925050509392505050565b6000818301905082811015612dc457fe5b80905092915050565b600082821115612dd957fe5b818303905092915050565b428167ffffffffffffffff1611612dfa57600080fd5b6000612e1183338467ffffffffffffffff16612d0e565b90506000612e2b8433600067ffffffffffffffff16612d0e565b905060006007600083815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008167ffffffffffffffff161415612eae57836007600084815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050613006565b6000612ec586338467ffffffffffffffff16612d0e565b905060005b60008367ffffffffffffffff1614158015612ef857508267ffffffffffffffff168667ffffffffffffffff16115b15612f53578267ffffffffffffffff1690508193506007600083815260200190815260200160002060009054906101000a900467ffffffffffffffff169250612f4c87338567ffffffffffffffff16612d0e565b9150612eca565b8267ffffffffffffffff168667ffffffffffffffff161415612f79575050505050613006565b60008367ffffffffffffffff1614612fc657826007600087815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b856007600086815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050505b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600061306385856000611d23565b8167ffffffffffffffff16915080925081935050505b6000821415801561308957508142115b156130c257613097846122ef565b80830192506130a885856000611d23565b8167ffffffffffffffff1691508092508193505050613079565b505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561310557600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561315057600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156131d957600080fd5b61322a826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132bd826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061338e82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134b857600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561350357600080fd5b613554826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006135ac848367ffffffffffffffff16612ccb565b90506135d4836005600084815260200190815260200160002054612db390919063ffffffff16565b600560008381526020019081526020016000208190555061363d83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061368a8483614254565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff167f2ecd071e4d10ed2221b04636ed0724cce66a873aa98c1a31b4bb0e6846d3aab48385604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390a25050505050565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156137ab57600080fd5b6137fc816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061385381600154612dcd90919063ffffffff16565b6001819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061391f83836000612d0e565b905060006007600083815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008167ffffffffffffffff1614156139ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f467265657a696e67206e6f7420666f756e64000000000000000000000000000081525060200191505060405180910390fd5b8067ffffffffffffffff164267ffffffffffffffff1611613a57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5072656d61747572652072656c6561736520617474656d70740000000000000081525060200191505060405180910390fd5b6000613a6e85858467ffffffffffffffff16612d0e565b905060006007600083815260200190815260200160002060009054906101000a900467ffffffffffffffff1690506000600860008481526020019081526020016000205490506008600084815260200190815260200160002060009055613b1c816000808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b6000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bb081600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008267ffffffffffffffff161415613c35576007600086815260200190815260200160002060006101000a81549067ffffffffffffffff0219169055613c9a565b816007600087815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506007600084815260200190815260200160002060006101000a81549067ffffffffffffffff02191690555b8673ffffffffffffffffffffffffffffffffffffffff167fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e826040518082815260200191505060405180910390a250505050505050565b6000806000613d01846000610fdb565b8167ffffffffffffffff16915080925081935050505b60008214158015613d2757508142115b15613d5f57613d3584613d66565b8083019250613d45846000610fdb565b8167ffffffffffffffff1691508092508193505050613d17565b5050919050565b6000613d73826000612ccb565b905060006004600083815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008167ffffffffffffffff161415613e22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f467265657a696e67206e6f7420666f756e64000000000000000000000000000081525060200191505060405180910390fd5b8067ffffffffffffffff164267ffffffffffffffff1611613eab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5072656d61747572652072656c6561736520617474656d70740000000000000081525060200191505060405180910390fd5b6000613ec1848367ffffffffffffffff16612ccb565b905060006004600083815260200190815260200160002060009054906101000a900467ffffffffffffffff1690506000600560008481526020019081526020016000205490506005600084815260200190815260200160002060009055613f6f816000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b6000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061400381600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008267ffffffffffffffff161415614088576004600086815260200190815260200160002060006101000a81549067ffffffffffffffff02191690556140ed565b816004600087815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506004600084815260200190815260200160002060006101000a81549067ffffffffffffffff02191690555b8573ffffffffffffffffffffffffffffffffffffffff167fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e826040518082815260200191505060405180910390a2505050505050565b6000614150338484614476565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561419457600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b428167ffffffffffffffff161161426a57600080fd5b6000614280838367ffffffffffffffff16612ccb565b9050600061429984600067ffffffffffffffff16612ccb565b905060006004600083815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008167ffffffffffffffff16141561431c57836004600084815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050614472565b6000614332868367ffffffffffffffff16612ccb565b905060005b60008367ffffffffffffffff161415801561436557508267ffffffffffffffff168667ffffffffffffffff16115b156143bf578267ffffffffffffffff1690508193506004600083815260200190815260200160002060009054906101000a900467ffffffffffffffff1692506143b8878467ffffffffffffffff16612ccb565b9150614337565b8267ffffffffffffffff168667ffffffffffffffff1614156143e5575050505050614472565b60008367ffffffffffffffff161461443257826004600087815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b856004600086815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156144b057600080fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156144fb57600080fd5b61454c816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145df816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008083141561469e57600090506146b9565b8183029050818382816146ad57fe5b04146146b557fe5b8090505b92915050565b60008183816146ca57fe5b0490509291505056fe417474656d707420746f206d6f76652074686520667265657a696e6720696e746f2074686520667574757265a265627a7a723158208c77b6415fe78770ebbc54e1b5ea0259c5263928a1418c8cba7696f9c81bafa464736f6c634300050c0032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102745760003560e01c80634be2c7ba1161015157806395d89b41116100c3578063d73dd62311610087578063d73dd62314610da5578063d783a2b514610e0b578063d8aeedf514610e83578063dd62ed3e14610edb578063f2fde38b14610f53578063fec0ef6014610f9757610274565b806395d89b4114610baa5780639e9470db14610c2d578063a9059cbb14610c85578063ca63b5b814610ceb578063d60fcb8914610d4357610274565b806370a082311161011557806370a0823114610a2d578063715018a614610a855780638456cb5914610a8f57806386036bb414610a995780638da5cb5b14610add578063947a316814610b2757610274565b80634be2c7ba146108e05780635be7fde81461097d5780635c975abb1461099b57806366188463146109bd57806366a92cda14610a2357610274565b8063236e02e0116101ea5780633c4b303d116101ae5780633c4b303d146107e45780633d7e82c9146108025780633f4ba83a1461082057806342966c681461082a57806342a7508314610858578063462a520f146108bc57610274565b8063236e02e01461064257806323b872dd146106ba5780632405e3c614610740578063313ce5671461075e5780633be1e9521461078257610274565b8063158ef93e1161023c578063158ef93e146104775780631673836a1461049957806317a950ac146104f157806318160ddd146105495780631e658e36146105675780631f772a34146105bf57610274565b806302d6f7301461027957806305d2035b146102f657806306fdde0314610318578063095ea7b31461039b5780630b67f7f114610401575b600080fd5b6102c56004803603604081101561028f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fdb565b604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390f35b6102fe611091565b604051808215151515815260200191505060405180910390f35b6103206110a4565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610360578082015181840152602081019050610345565b50505050905090810190601f16801561038d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103e7600480360360408110156103b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110e1565b604051808215151515815260200191505060405180910390f35b6104756004803603608081101561041757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803567ffffffffffffffff169060200190929190803567ffffffffffffffff1690602001909291905050506111d3565b005b61047f611984565b604051808215151515815260200191505060405180910390f35b6104db600480360360208110156104af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611997565b6040518082815260200191505060405180910390f35b6105336004803603602081101561050757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119e0565b6040518082815260200191505060405180910390f35b6105516119f2565b6040518082815260200191505060405180910390f35b6105a96004803603602081101561057d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119fc565b6040518082815260200191505060405180910390f35b6105c7611a0f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106075780820151818401526020810190506105ec565b50505050905090810190601f1680156106345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106a46004803603604081101561065857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a48565b6040518082815260200191505060405180910390f35b610726600480360360608110156106d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b1f565b604051808215151515815260200191505060405180910390f35b610748611b4f565b6040518082815260200191505060405180910390f35b610766611b5d565b604051808260ff1660ff16815260200191505060405180910390f35b6107e26004803603606081101561079857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803567ffffffffffffffff169060200190929190505050611b66565b005b6107ec611b77565b6040518082815260200191505060405180910390f35b61080a611b7c565b6040518082815260200191505060405180910390f35b610828611b84565b005b6108566004803603602081101561084057600080fd5b8101908080359060200190929190505050611c40565b005b6108ba6004803603604081101561086e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c4d565b005b6108c4611d1e565b604051808260ff1660ff16815260200191505060405180910390f35b61094c600480360360608110156108f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d23565b604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390f35b610985611ddc565b6040518082815260200191505060405180910390f35b6109a3611dec565b604051808215151515815260200191505060405180910390f35b610a09600480360360408110156109d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dff565b604051808215151515815260200191505060405180910390f35b610a2b612090565b005b610a6f60048036036020811015610a4357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061209b565b6040518082815260200191505060405180910390f35b610a8d61212f565b005b610a97612232565b005b610adb60048036036020811015610aaf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122ef565b005b610ae56122fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b2f612322565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b6f578082015181840152602081019050610b54565b50505050905090810190601f168015610b9c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610bb261235b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bf2578082015181840152602081019050610bd7565b50505050905090810190601f168015610c1f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c6f60048036036020811015610c4357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612398565b6040518082815260200191505060405180910390f35b610cd160048036036040811015610c9b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061246d565b604051808215151515815260200191505060405180910390f35b610d2d60048036036020811015610d0157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061249b565b6040518082815260200191505060405180910390f35b610da360048036036060811015610d5957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803567ffffffffffffffff169060200190929190505050612535565b005b610df160048036036040811015610dbb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061282d565b604051808215151515815260200191505060405180910390f35b610e6d60048036036040811015610e2157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a29565b6040518082815260200191505060405180910390f35b610ec560048036036020811015610e9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ac6565b6040518082815260200191505060405180910390f35b610f3d60048036036040811015610ef157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b0f565b6040518082815260200191505060405180910390f35b610f9560048036036020811015610f6957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b96565b005b610fd960048036036020811015610fad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bfc565b005b60008060008090505b6001840181101561105f5760046000611007878667ffffffffffffffff16612ccb565b815260200190815260200160002060009054906101000a900467ffffffffffffffff16925060008367ffffffffffffffff16141561105257600080819150809050925092505061108a565b8080600101915050610fe4565b5060056000611078868567ffffffffffffffff16612ccb565b81526020019081526020016000205490505b9250929050565b600360159054906101000a900460ff1681565b60606040518060400160405280600881526020017f50756265436f696e000000000000000000000000000000000000000000000000815250905090565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561120d57600080fd5b8167ffffffffffffffff168167ffffffffffffffff1610611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806146d4602c913960400191505060405180910390fd5b600061129085338567ffffffffffffffff16612d0e565b905060006008600083815260200190815260200160002054905060008111611320576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f467265657a696e67206e6f7420666f756e64000000000000000000000000000081525060200191505060405180910390fd5b8085106116e657600860008381526020019081526020016000206000905560006007600084815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060006113828833600067ffffffffffffffff16612d0e565b90505b8567ffffffffffffffff166007600083815260200190815260200160002060009054906101000a900467ffffffffffffffff1667ffffffffffffffff161461140a5761140388336007600085815260200190815260200160002060009054906101000a900467ffffffffffffffff1667ffffffffffffffff16612d0e565b9050611385565b60008267ffffffffffffffff16141561144c576007600082815260200190815260200160002060006101000a81549067ffffffffffffffff0219169055611487565b816007600083815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b428567ffffffffffffffff1611611613576114e9836000808b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b6000808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061157d83600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508773ffffffffffffffffffffffffffffffffffffffff167fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e846040518082815260200191505060405180910390a26116df565b600061162a89338867ffffffffffffffff16612d0e565b9050611652846008600084815260200190815260200160002054612db390919063ffffffff16565b60086000838152602001908152602001600020819055506116738987612de4565b8873ffffffffffffffffffffffffffffffffffffffff167fa3a64ccd852668b52d8ce6fee989c8992dfdb762e92f0fa33557497afae8a3578786604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390a2505b505061197c565b61170c856008600085815260200190815260200160002054612dcd90919063ffffffff16565b6008600084815260200190815260200160002081905550428367ffffffffffffffff16116118af57611785856000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b6000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061181985600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff167fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e866040518082815260200191505060405180910390a261197b565b60006118c687338667ffffffffffffffff16612d0e565b90506118ee866008600084815260200190815260200160002054612db390919063ffffffff16565b600860008381526020019081526020016000208190555061190f8785612de4565b8673ffffffffffffffffffffffffffffffffffffffff167fa3a64ccd852668b52d8ce6fee989c8992dfdb762e92f0fa33557497afae8a3578588604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390a2505b5b505050505050565b600e60149054906101000a900460ff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006119eb8261300a565b9050919050565b6000600154905090565b6000611a083383613052565b9050919050565b6040518060400160405280600481526020017f505542450000000000000000000000000000000000000000000000000000000081525081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4163636573732064656e6965640000000000000000000000000000000000000081525060200191505060405180910390fd5b611b178383613052565b905092915050565b6000600360149054906101000a900460ff1615611b3b57600080fd5b611b468484846130ca565b90509392505050565b6008600a0a633b9aca000281565b60006008905090565b611b723384848461347e565b505050565b600881565b6008600a0a81565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bde57600080fd5b600360149054906101000a900460ff16611bf757600080fd5b6000600360146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b611c4a3382613760565b50565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4163636573732064656e6965640000000000000000000000000000000000000081525060200191505060405180910390fd5b611d1a8282613911565b5050565b600881565b60008060008090505b60018401811015611da85760076000611d5088888767ffffffffffffffff16612d0e565b815260200190815260200160002060009054906101000a900467ffffffffffffffff16925060008367ffffffffffffffff161415611d9b576000808191508090509250925050611dd4565b8080600101915050611d2c565b5060086000611dc287878667ffffffffffffffff16612d0e565b81526020019081526020016000205490505b935093915050565b6000611de733613cf1565b905090565b600360149054906101000a900460ff1681565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611f10576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611fa4565b611f238382612dcd90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b61209933613d66565b565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121268461300a565b01019050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461218957600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461228c57600080fd5b600360149054906101000a900460ff16156122a657600080fd5b6001600360146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6122f93382613911565b50565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600881526020017f50756265436f696e00000000000000000000000000000000000000000000000081525081565b60606040518060400160405280600481526020017f5055424500000000000000000000000000000000000000000000000000000000815250905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461245d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4163636573732064656e6965640000000000000000000000000000000000000081525060200191505060405180910390fd5b61246682613cf1565b9050919050565b6000600360149054906101000a900460ff161561248957600080fd5b6124938383614143565b905092915050565b600080600460006124ad856000612ccb565b815260200190815260200160002060009054906101000a900467ffffffffffffffff1690505b60008167ffffffffffffffff161461252f57818060010192505060046000612505858467ffffffffffffffff16612ccb565b815260200190815260200160002060009054906101000a900467ffffffffffffffff1690506124d3565b50919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561256f57600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156125ba57600080fd5b428167ffffffffffffffff16116125d057600080fd5b612621826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061267a84338467ffffffffffffffff16612d0e565b90506126a2836008600084815260200190815260200160002054612db390919063ffffffff16565b600860008381526020019081526020016000208190555061270b83600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127588483612de4565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff167f2ecd071e4d10ed2221b04636ed0724cce66a873aa98c1a31b4bb0e6846d3aab48385604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390a250505050565b60006128be82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008060076000612a3c86866000612d0e565b815260200190815260200160002060009054906101000a900467ffffffffffffffff1690505b60008167ffffffffffffffff1614612abf57818060010192505060076000612a9586868567ffffffffffffffff16612d0e565b815260200190815260200160002060009054906101000a900467ffffffffffffffff169050612a62565b5092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bf057600080fd5b612bf98161415a565b50565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612cbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4163636573732064656e6965640000000000000000000000000000000000000081525060200191505060405180910390fd5b612cc881613d66565b50565b60007f185225121209151420151015814131800000000000000000000000000000000060001b905068010000000000000000830281179050818117905092915050565b6000807f185225121209151420151015814131800000000000000000000000000000000060001b905060007f911777666000000000000000000000000000000000000000000000000000000060001b905068010000000000000000860282179150838217915084811790508181604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120925050509392505050565b6000818301905082811015612dc457fe5b80905092915050565b600082821115612dd957fe5b818303905092915050565b428167ffffffffffffffff1611612dfa57600080fd5b6000612e1183338467ffffffffffffffff16612d0e565b90506000612e2b8433600067ffffffffffffffff16612d0e565b905060006007600083815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008167ffffffffffffffff161415612eae57836007600084815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050613006565b6000612ec586338467ffffffffffffffff16612d0e565b905060005b60008367ffffffffffffffff1614158015612ef857508267ffffffffffffffff168667ffffffffffffffff16115b15612f53578267ffffffffffffffff1690508193506007600083815260200190815260200160002060009054906101000a900467ffffffffffffffff169250612f4c87338567ffffffffffffffff16612d0e565b9150612eca565b8267ffffffffffffffff168667ffffffffffffffff161415612f79575050505050613006565b60008367ffffffffffffffff1614612fc657826007600087815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b856007600086815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050505b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600061306385856000611d23565b8167ffffffffffffffff16915080925081935050505b6000821415801561308957508142115b156130c257613097846122ef565b80830192506130a885856000611d23565b8167ffffffffffffffff1691508092508193505050613079565b505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561310557600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561315057600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156131d957600080fd5b61322a826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132bd826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061338e82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134b857600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561350357600080fd5b613554826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006135ac848367ffffffffffffffff16612ccb565b90506135d4836005600084815260200190815260200160002054612db390919063ffffffff16565b600560008381526020019081526020016000208190555061363d83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061368a8483614254565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff167f2ecd071e4d10ed2221b04636ed0724cce66a873aa98c1a31b4bb0e6846d3aab48385604051808367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019250505060405180910390a25050505050565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156137ab57600080fd5b6137fc816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061385381600154612dcd90919063ffffffff16565b6001819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061391f83836000612d0e565b905060006007600083815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008167ffffffffffffffff1614156139ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f467265657a696e67206e6f7420666f756e64000000000000000000000000000081525060200191505060405180910390fd5b8067ffffffffffffffff164267ffffffffffffffff1611613a57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5072656d61747572652072656c6561736520617474656d70740000000000000081525060200191505060405180910390fd5b6000613a6e85858467ffffffffffffffff16612d0e565b905060006007600083815260200190815260200160002060009054906101000a900467ffffffffffffffff1690506000600860008481526020019081526020016000205490506008600084815260200190815260200160002060009055613b1c816000808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b6000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bb081600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008267ffffffffffffffff161415613c35576007600086815260200190815260200160002060006101000a81549067ffffffffffffffff0219169055613c9a565b816007600087815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506007600084815260200190815260200160002060006101000a81549067ffffffffffffffff02191690555b8673ffffffffffffffffffffffffffffffffffffffff167fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e826040518082815260200191505060405180910390a250505050505050565b6000806000613d01846000610fdb565b8167ffffffffffffffff16915080925081935050505b60008214158015613d2757508142115b15613d5f57613d3584613d66565b8083019250613d45846000610fdb565b8167ffffffffffffffff1691508092508193505050613d17565b5050919050565b6000613d73826000612ccb565b905060006004600083815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008167ffffffffffffffff161415613e22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f467265657a696e67206e6f7420666f756e64000000000000000000000000000081525060200191505060405180910390fd5b8067ffffffffffffffff164267ffffffffffffffff1611613eab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5072656d61747572652072656c6561736520617474656d70740000000000000081525060200191505060405180910390fd5b6000613ec1848367ffffffffffffffff16612ccb565b905060006004600083815260200190815260200160002060009054906101000a900467ffffffffffffffff1690506000600560008481526020019081526020016000205490506005600084815260200190815260200160002060009055613f6f816000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b6000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061400381600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008267ffffffffffffffff161415614088576004600086815260200190815260200160002060006101000a81549067ffffffffffffffff02191690556140ed565b816004600087815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506004600084815260200190815260200160002060006101000a81549067ffffffffffffffff02191690555b8573ffffffffffffffffffffffffffffffffffffffff167fb21fb52d5749b80f3182f8c6992236b5e5576681880914484d7f4c9b062e619e826040518082815260200191505060405180910390a2505050505050565b6000614150338484614476565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561419457600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b428167ffffffffffffffff161161426a57600080fd5b6000614280838367ffffffffffffffff16612ccb565b9050600061429984600067ffffffffffffffff16612ccb565b905060006004600083815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060008167ffffffffffffffff16141561431c57836004600084815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050614472565b6000614332868367ffffffffffffffff16612ccb565b905060005b60008367ffffffffffffffff161415801561436557508267ffffffffffffffff168667ffffffffffffffff16115b156143bf578267ffffffffffffffff1690508193506004600083815260200190815260200160002060009054906101000a900467ffffffffffffffff1692506143b8878467ffffffffffffffff16612ccb565b9150614337565b8267ffffffffffffffff168667ffffffffffffffff1614156143e5575050505050614472565b60008367ffffffffffffffff161461443257826004600087815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b856004600086815260200190815260200160002060006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156144b057600080fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156144fb57600080fd5b61454c816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dcd90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145df816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008083141561469e57600090506146b9565b8183029050818382816146ad57fe5b04146146b557fe5b8090505b92915050565b60008183816146ca57fe5b0490509291505056fe417474656d707420746f206d6f76652074686520667265657a696e6720696e746f2074686520667574757265a265627a7a723158208c77b6415fe78770ebbc54e1b5ea0259c5263928a1418c8cba7696f9c81bafa464736f6c634300050c0032
Deployed Bytecode Sourcemap
31727:2775:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31727:2775:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14684:362;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14684:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10001:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32075:88;;;:::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;32075:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5641:192;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5641:192:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18823:2277;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;18823:2277:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31981:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13418:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13418:148:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12684:128;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12684:128:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2129:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25642:144;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25642:144:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31591:44;;;:::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;31591:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26097:178;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26097:178:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32373:188;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32373:188:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31642:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32271:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16188:129;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16188:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31364:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31463:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31237:95;;;:::i;:::-;;29886:75;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29886:75:0;;;;;;;;;;;;;;;;;:::i;:::-;;22908:165;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22908:165:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31410:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15388:426;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15388:426:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24362:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30616:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7569:440;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7569:440:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21180:73;;;:::i;:::-;;12252:183;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12252:183:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8857:114;;;:::i;:::-;;31057:93;;;:::i;:::-;;22568:131;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22568:131:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;8239:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31538:46;;;:::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;31538:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32171:92;;;:::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;32171:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24702:134;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24702:134:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32569:158;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32569:158:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13678:249;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13678:249:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17645:658;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17645:658:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6791:304;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6791:304:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14105:313;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14105:313:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13045:130;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13045:130:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6160:162;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6160:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9139:105;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9139:105:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;21396;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21396:105:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;14684:362;14754:15;14771:13;14802:6;14811:1;14802:10;;14797:187;14827:1;14818:6;:10;14814:1;:14;14797:187;;;14861:6;:30;14868:22;14874:5;14881:8;14868:22;;:5;:22::i;:::-;14861:30;;;;;;;;;;;;;;;;;;;;;14850:41;;14922:1;14910:8;:13;;;14906:67;;;14952:1;14955;14944:13;;;;;;;;;;;;;14906:67;14830:3;;;;;;;14797:187;;;;15005:9;:33;15015:22;15021:5;15028:8;15015:22;;:5;:22::i;:::-;15005:33;;;;;;;;;;;;14994:44;;14684:362;;;;;;:::o;10001:35::-;;;;;;;;;;;;;:::o;32075:88::-;32112:13;32145:10;;;;;;;;;;;;;;;;;32138:17;;32075:88;:::o;5641:192::-;5708:4;5753:6;5721:7;:19;5729:10;5721:19;;;;;;;;;;;;;;;:29;5741:8;5721:29;;;;;;;;;;;;;;;:38;;;;5792:8;5771:38;;5780:10;5771:38;;;5802:6;5771:38;;;;;;;;;;;;;;;;;;5823:4;5816:11;;5641:192;;;;:::o;18823:2277::-;18950:1;18935:17;;:3;:17;;;;18927:26;;;;;;19051:6;19039:18;;:9;:18;;;19031:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19119:18;19140:31;19147:3;19152:10;19164:6;19140:31;;:6;:31::i;:::-;19119:52;;19182:11;19196:18;:30;19215:10;19196:30;;;;;;;;;;;;19182:44;;19254:1;19245:6;:10;19237:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19306:6;19295:7;:17;19291:1802;;19336:18;:30;19355:10;19336:30;;;;;;;;;;;19329:37;;;19383:11;19397:15;:27;19413:10;19397:27;;;;;;;;;;;;;;;;;;;;;19383:41;;19439:14;19456:34;19463:3;19468:10;19487:1;19456:34;;:6;:34::i;:::-;19439:51;;19505:134;19539:6;19512:33;;:15;:23;19528:6;19512:23;;;;;;;;;;;;;;;;;;;;;:33;;;19505:134;;19575:48;19582:3;19587:10;19599:15;:23;19615:6;19599:23;;;;;;;;;;;;;;;;;;;;;19575:48;;:6;:48::i;:::-;19566:57;;19505:134;;;19667:1;19659:4;:9;;;19655:164;;;19696:15;:23;19712:6;19696:23;;;;;;;;;;;;19689:30;;;;;;;;;;;19655:164;;;19799:4;19773:15;:23;19789:6;19773:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;19655:164;19852:15;19839:9;:28;;;19835:555;;19904:25;19922:6;19904:8;:13;19913:3;19904:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;19888:8;:13;19897:3;19888:13;;;;;;;;;;;;;;;:41;;;;19980;20014:6;19980:24;:29;20005:3;19980:29;;;;;;;;;;;;;;;;:33;;:41;;;;:::i;:::-;19948:24;:29;19973:3;19948:29;;;;;;;;;;;;;;;:73;;;;20056:3;20047:21;;;20061:6;20047:21;;;;;;;;;;;;;;;;;;19835:555;;;20122:14;20139:34;20146:3;20151:10;20163:9;20139:34;;:6;:34::i;:::-;20122:51;;20221:38;20252:6;20221:18;:26;20240:6;20221:26;;;;;;;;;;;;:30;;:38;;;;:::i;:::-;20192:18;:26;20211:6;20192:26;;;;;;;;;;;:67;;;;20280:31;20296:3;20301:9;20280:15;:31::i;:::-;20351:3;20337:37;;;20356:9;20367:6;20337:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;19835:555;;19291:1802;;;;;20464:43;20499:7;20464:18;:30;20483:10;20464:30;;;;;;;;;;;;:34;;:43;;;;:::i;:::-;20431:18;:30;20450:10;20431:30;;;;;;;;;;;:76;;;;20539:15;20526:9;:28;;;20522:560;;20591:26;20609:7;20591:8;:13;20600:3;20591:13;;;;;;;;;;;;;;;;:17;;:26;;;;:::i;:::-;20575:8;:13;20584:3;20575:13;;;;;;;;;;;;;;;:42;;;;20668;20702:7;20668:24;:29;20693:3;20668:29;;;;;;;;;;;;;;;;:33;;:42;;;;:::i;:::-;20636:24;:29;20661:3;20636:29;;;;;;;;;;;;;;;:74;;;;20745:3;20736:22;;;20750:7;20736:22;;;;;;;;;;;;;;;;;;20522:560;;;20812:14;20829:34;20836:3;20841:10;20853:9;20829:34;;:6;:34::i;:::-;20812:51;;20911:39;20942:7;20911:18;:26;20930:6;20911:26;;;;;;;;;;;;:30;;:39;;;;:::i;:::-;20882:18;:26;20901:6;20882:26;;;;;;;;;;;:68;;;;20971:31;20987:3;20992:9;20971:15;:31::i;:::-;21042:3;21028:38;;;21047:9;21058:7;21028:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;20522:560;;19291:1802;18823:2277;;;;;;:::o;31981:31::-;;;;;;;;;;;;;:::o;13418:148::-;13491:15;13526:24;:32;13551:6;13526:32;;;;;;;;;;;;;;;;13519:39;;13418:148;;;:::o;12684:128::-;12746:15;12781:23;12797:6;12781:15;:23::i;:::-;12774:30;;12684:128;;;:::o;2129:85::-;2173:7;2196:12;;2189:19;;2129:85;:::o;25642:144::-;25704:11;25737:41;25758:10;25770:7;25737:20;:41::i;:::-;25728:50;;25642:144;;;:::o;31591:44::-;;;;;;;;;;;;;;;;;;;:::o;26097:178::-;26198:11;11960:5;;;;;;;;;;;11946:19;;:10;:19;;;11938:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26231:36;26252:5;26259:7;26231:20;:36::i;:::-;26222:45;;26097:178;;;;:::o;32373:188::-;32455:13;32490:6;;;;;;;;;;;32489:7;32481:16;;;;;;32515:38;32534:5;32541:3;32546:6;32515:18;:38::i;:::-;32508:45;;32373:188;;;;;:::o;31642:75::-;31402:1;31511:2;:20;31680:10;:37;31642:75;:::o;32271:94::-;32312:5;31455:1;32330:27;;32271:94;:::o;16188:129::-;16266:43;16276:10;16288:3;16293:7;16302:6;16266:9;:43::i;:::-;16188:129;;;:::o;31364:39::-;31402:1;31364:39;:::o;31463:68::-;31402:1;31511:2;:20;31463:68;:::o;31237:95::-;8742:5;;;;;;;;;;;8728:19;;:10;:19;;;8720:28;;;;;;30952:6;;;;;;;;;;;30944:15;;;;;;31300:5;31291:6;;:14;;;;;;;;;;;;;;;;;;31317:9;;;;;;;;;;31237:95::o;29886:75::-;29930:25;29936:10;29948:6;29930:5;:25::i;:::-;29886:75;:::o;22908:165::-;11960:5;;;;;;;;;;;11946:19;;:10;:19;;;11938:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23020;23050:5;23057:7;23020:29;:45::i;:::-;22908:165;;:::o;31410:46::-;31455:1;31410:46;:::o;15388:426::-;15484:15;15501:13;15532:6;15541:1;15532:10;;15527:206;15557:1;15548:6;:10;15544:1;:14;15527:206;;;15591:15;:49;15607:32;15614:5;15621:7;15630:8;15607:32;;:6;:32::i;:::-;15591:49;;;;;;;;;;;;;;;;;;;;;15580:60;;15671:1;15659:8;:13;;;15655:67;;;15701:1;15704;15693:13;;;;;;;;;;;;;15655:67;15560:3;;;;;;;15527:206;;;;15754:18;:52;15773:32;15780:5;15787:7;15796:8;15773:32;;:6;:32::i;:::-;15754:52;;;;;;;;;;;;15743:63;;15388:426;;;;;;;:::o;24362:102::-;24400:11;24433:23;24445:10;24433:11;:23::i;:::-;24424:32;;24362:102;:::o;30616:26::-;;;;;;;;;;;;;:::o;7569:440::-;7677:4;7693:13;7709:7;:19;7717:10;7709:19;;;;;;;;;;;;;;;:29;7729:8;7709:29;;;;;;;;;;;;;;;;7693:45;;7768:8;7749:16;:27;7745:168;;;7819:1;7787:7;:19;7795:10;7787:19;;;;;;;;;;;;;;;:29;7807:8;7787:29;;;;;;;;;;;;;;;:33;;;;7745:168;;;7875:30;7888:16;7875:8;:12;;:30;;;;:::i;:::-;7843:7;:19;7851:10;7843:19;;;;;;;;;;;;;;;:29;7863:8;7843:29;;;;;;;;;;;;;;;:62;;;;7745:168;7945:8;7924:61;;7933:10;7924:61;;;7955:7;:19;7963:10;7955:19;;;;;;;;;;;;;;;:29;7975:8;7955:29;;;;;;;;;;;;;;;;7924:61;;;;;;;;;;;;;;;;;;7999:4;7992:11;;;7569:440;;;;:::o;21180:73::-;21221:24;21234:10;21221:12;:24::i;:::-;21180:73::o;12252:183::-;12308:15;12395:24;:32;12420:6;12395:32;;;;;;;;;;;;;;;;12369:15;:23;12385:6;12369:23;;;;;;;;;;;;;;;;12343;12359:6;12343:15;:23::i;:::-;:49;:84;12336:91;;12252:183;;;:::o;8857:114::-;8742:5;;;;;;;;;;;8728:19;;:10;:19;;;8720:28;;;;;;8934:5;;;;;;;;;;;8915:25;;;;;;;;;;;;8963:1;8947:5;;:18;;;;;;;;;;;;;;;;;;8857:114::o;31057:93::-;8742:5;;;;;;;;;;;8728:19;;:10;:19;;;8720:28;;;;;;30792:6;;;;;;;;;;;30791:7;30783:16;;;;;;31121:4;31112:6;;:13;;;;;;;;;;;;;;;;;;31137:7;;;;;;;;;;31057:93::o;22568:131::-;22641:50;22671:10;22683:7;22641:29;:50::i;:::-;22568:131;:::o;8239:20::-;;;;;;;;;;;;;:::o;31538:46::-;;;;;;;;;;;;;;;;;;;:::o;32171:92::-;32210:13;32243:12;;;;;;;;;;;;;;;;;32236:19;;32171:92;:::o;24702:134::-;24777:11;11960:5;;;;;;;;;;;11946:19;;:10;:19;;;11938:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24810:18;24822:5;24810:11;:18::i;:::-;24801:27;;24702:134;;;:::o;32569:158::-;32632:13;32667:6;;;;;;;;;;;32666:7;32658:16;;;;;;32692:27;32707:3;32712:6;32692:14;:27::i;:::-;32685:34;;32569:158;;;;:::o;13678:249::-;13737:10;13760:14;13777:6;:23;13784:15;13790:5;13797:1;13784:5;:15::i;:::-;13777:23;;;;;;;;;;;;;;;;;;;;;13760:40;;13811:109;13829:1;13818:7;:12;;;13811:109;;13847:7;;;;;;;13879:6;:29;13886:21;13892:5;13899:7;13886:21;;:5;:21::i;:::-;13879:29;;;;;;;;;;;;;;;;;;;;;13869:39;;13811:109;;;13678:249;;;;:::o;17645:658::-;17755:1;17740:17;;:3;:17;;;;17732:26;;;;;;17788:8;:20;17797:10;17788:20;;;;;;;;;;;;;;;;17777:7;:31;;17769:40;;;;;;17837:15;17828:6;:24;;;17820:33;;;;;;17889;17914:7;17889:8;:20;17898:10;17889:20;;;;;;;;;;;;;;;;:24;;:33;;;;:::i;:::-;17866:8;:20;17875:10;17866:20;;;;;;;;;;;;;;;:56;;;;17935:18;17956:31;17963:3;17968:10;17980:6;17956:31;;:6;:31::i;:::-;17935:52;;18031:43;18066:7;18031:18;:30;18050:10;18031:30;;;;;;;;;;;;:34;;:43;;;;:::i;:::-;17998:18;:30;18017:10;17998:30;;;;;;;;;;;:76;;;;18117:42;18151:7;18117:24;:29;18142:3;18117:29;;;;;;;;;;;;;;;;:33;;:42;;;;:::i;:::-;18085:24;:29;18110:3;18085:29;;;;;;;;;;;;;;;:74;;;;18172:28;18188:3;18193:6;18172:15;:28::i;:::-;18237:3;18216:34;;18225:10;18216:34;;;18242:7;18216:34;;;;;;;;;;;;;;;;;;18274:3;18266:29;;;18279:6;18287:7;18266:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;17645:658;;;;:::o;6791:304::-;6894:4;6951:46;6985:11;6951:7;:19;6959:10;6951:19;;;;;;;;;;;;;;;:29;6971:8;6951:29;;;;;;;;;;;;;;;;:33;;:46;;;;:::i;:::-;6910:7;:19;6918:10;6910:19;;;;;;;;;;;;;;;:29;6930:8;6910:29;;;;;;;;;;;;;;;:88;;;;7031:8;7010:61;;7019:10;7010:61;;;7041:7;:19;7049:10;7041:19;;;;;;;;;;;;;;;:29;7061:8;7041:29;;;;;;;;;;;;;;;;7010:61;;;;;;;;;;;;;;;;;;7085:4;7078:11;;6791:304;;;;:::o;14105:313::-;14190:10;14213:14;14230:15;:42;14246:25;14253:5;14260:7;14269:1;14246:6;:25::i;:::-;14230:42;;;;;;;;;;;;;;;;;;;;;14213:59;;14283:128;14301:1;14290:7;:12;;;14283:128;;14319:7;;;;;;;14351:15;:48;14367:31;14374:5;14381:7;14390;14367:31;;:6;:31::i;:::-;14351:48;;;;;;;;;;;;;;;;;;;;;14341:58;;14283:128;;;14105:313;;;;;:::o;13045:130::-;13109:15;13144;:23;13160:6;13144:23;;;;;;;;;;;;;;;;13137:30;;13045:130;;;:::o;6160:162::-;6265:7;6291;:15;6299:6;6291:15;;;;;;;;;;;;;;;:25;6307:8;6291:25;;;;;;;;;;;;;;;;6284:32;;6160:162;;;;:::o;9139:105::-;8742:5;;;;;;;;;;;8728:19;;:10;:19;;;8720:28;;;;;;9209:29;9228:9;9209:18;:29::i;:::-;9139:105;:::o;21396:::-;11960:5;;;;;;;;;;;11946:19;;:10;:19;;;11938:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21474:19;21487:5;21474:12;:19::i;:::-;21396:105;:::o;27013:320::-;27081:14;27117:66;27108:75;;;;27250:19;27243:5;27239:31;27231:6;27228:43;27218:53;;27306:8;27298:6;27295:20;27285:30;;27203:123;;;;:::o;27341:526::-;27427:14;27454:12;27469:66;27454:81;;;;27546:12;27561:66;27546:81;;;;27691:19;27683:6;27679:32;27673:4;27670:42;27662:50;;27743:8;27737:4;27734:18;27726:26;;27783:6;27777:4;27774:16;27766:24;;27847:4;27853;27830:28;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27830:28:0;;;27820:39;;;;;;27811:48;;27341:526;;;;;;;:::o;1696:127::-;1754:9;1780:1;1776;:5;1772:9;;1800:1;1795;:6;;1788:14;;;;1816:1;1809:8;;1696:127;;;;:::o;1516:113::-;1574:7;1602:1;1597;:6;;1590:14;;;;1622:1;1618;:5;1611:12;;1516:113;;;;:::o;28672:895::-;28762:15;28753:6;:24;;;28745:33;;;;;;28789:11;28803:31;28810:3;28815:10;28827:6;28803:31;;:6;:31::i;:::-;28789:45;;28845:17;28865:34;28872:3;28877:10;28896:1;28865:34;;:6;:34::i;:::-;28845:54;;28910:11;28924:15;:26;28940:9;28924:26;;;;;;;;;;;;;;;;;;;;;28910:40;;28975:1;28967:4;:9;;;28963:98;;;29022:6;28993:15;:26;29009:9;28993:26;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;29043:7;;;;;28963:98;29073:15;29091:29;29098:3;29103:10;29115:4;29091:29;;:6;:29::i;:::-;29073:47;;29131:11;29155:211;29170:1;29162:4;:9;;;;:26;;;;;29184:4;29175:13;;:6;:13;;;29162:26;29155:211;;;29214:4;29205:13;;;;29245:7;29233:19;;29276:15;:24;29292:7;29276:24;;;;;;;;;;;;;;;;;;;;;29269:31;;29325:29;29332:3;29337:10;29349:4;29325:29;;:6;:29::i;:::-;29315:39;;29155:211;;;29392:4;29382:14;;:6;:14;;;29378:53;;;29413:7;;;;;;;29378:53;29455:1;29447:4;:9;;;29443:69;;29496:4;29473:15;:20;29489:3;29473:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;29443:69;29553:6;29524:15;:26;29540:9;29524:26;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;28672:895;;;;;;;;:::o;2718:101::-;2774:7;2797:8;:16;2806:6;2797:16;;;;;;;;;;;;;;;;2790:23;;2718:101;;;:::o;26556:449::-;26636:11;26660:12;26683;26727:39;26748:5;26755:7;26764:1;26727:20;:39::i;:::-;26706:60;;;;;;;;;;;;;26777:221;26795:1;26784:7;:12;;:41;;;;;26818:7;26800:15;:25;26784:41;26777:221;;;26842:37;26871:7;26842:28;:37::i;:::-;26904:7;26894:17;;;;26947:39;26968:5;26975:7;26984:1;26947:20;:39::i;:::-;26926:60;;;;;;;;;;;;;26777:221;;;26556:449;;;;;;:::o;4519:487::-;4631:4;4670:1;4655:17;;:3;:17;;;;4647:26;;;;;;4698:8;:15;4707:5;4698:15;;;;;;;;;;;;;;;;4688:6;:25;;4680:34;;;;;;4739:7;:14;4747:5;4739:14;;;;;;;;;;;;;;;:26;4754:10;4739:26;;;;;;;;;;;;;;;;4729:6;:36;;4721:45;;;;;;4793:27;4813:6;4793:8;:15;4802:5;4793:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;4775:8;:15;4784:5;4775:15;;;;;;;;;;;;;;;:45;;;;4843:25;4861:6;4843:8;:13;4852:3;4843:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;4827:8;:13;4836:3;4827:13;;;;;;;;;;;;;;;:41;;;;4904:38;4935:6;4904:7;:14;4912:5;4904:14;;;;;;;;;;;;;;;:26;4919:10;4904:26;;;;;;;;;;;;;;;;:30;;:38;;;;:::i;:::-;4875:7;:14;4883:5;4875:14;;;;;;;;;;;;;;;:26;4890:10;4875:26;;;;;;;;;;;;;;;:67;;;;4970:3;4954:28;;4963:5;4954:28;;;4975:6;4954:28;;;;;;;;;;;;;;;;;;4996:4;4989:11;;4519:487;;;;;:::o;16691:545::-;16810:1;16795:17;;:3;:17;;;;16787:26;;;;;;16843:8;:15;16852:5;16843:15;;;;;;;;;;;;;;;;16832:7;:26;;16824:35;;;;;;16890:28;16910:7;16890:8;:15;16899:5;16890:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;16872:8;:15;16881:5;16872:15;;;;;;;;;;;;;;;:46;;;;16931:18;16952;16958:3;16963:6;16952:18;;:5;:18::i;:::-;16931:39;;17005:34;17031:7;17005:9;:21;17015:10;17005:21;;;;;;;;;;;;:25;;:34;;;;:::i;:::-;16981:9;:21;16991:10;16981:21;;;;;;;;;;;:58;;;;17073:33;17098:7;17073:15;:20;17089:3;17073:20;;;;;;;;;;;;;;;;:24;;:33;;;;:::i;:::-;17050:15;:20;17066:3;17050:20;;;;;;;;;;;;;;;:56;;;;17119:19;17126:3;17131:6;17119;:19::i;:::-;17170:3;17154:29;;17163:5;17154:29;;;17175:7;17154:29;;;;;;;;;;;;;;;;;;17207:3;17199:29;;;17212:6;17220:7;17199:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;16691:545;;;;;:::o;29967:447::-;30046:8;:14;30055:4;30046:14;;;;;;;;;;;;;;;;30036:6;:24;;30028:33;;;;;;30260:26;30279:6;30260:8;:14;30269:4;30260:14;;;;;;;;;;;;;;;;:18;;:26;;;;:::i;:::-;30243:8;:14;30252:4;30243:14;;;;;;;;;;;;;;;:43;;;;30308:24;30325:6;30308:12;;:16;;:24;;;;:::i;:::-;30293:12;:39;;;;30349:4;30344:18;;;30355:6;30344:18;;;;;;;;;;;;;;;;;;30397:1;30374:34;;30383:4;30374:34;;;30401:6;30374:34;;;;;;;;;;;;;;;;;;29967:447;;:::o;23272:923::-;23363:15;23381:25;23388:5;23395:7;23404:1;23381:6;:25::i;:::-;23363:43;;23417:11;23431:15;:24;23447:7;23431:24;;;;;;;;;;;;;;;;;;;;;23417:38;;23482:1;23474:4;:9;;;;23466:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23551:4;23525:30;;23532:15;23525:30;;;23517:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23596:18;23617:28;23624:5;23631:7;23640:4;23617:28;;:6;:28::i;:::-;23596:49;;23658:11;23672:15;:27;23688:10;23672:27;;;;;;;;;;;;;;;;;;;;;23658:41;;23712:11;23726:18;:30;23745:10;23726:30;;;;;;;;;;;;23712:44;;23774:18;:30;23793:10;23774:30;;;;;;;;;;;23767:37;;;23835:27;23855:6;23835:8;:15;23844:5;23835:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;23817:8;:15;23826:5;23817:15;;;;;;;;;;;;;;;:45;;;;23907:43;23943:6;23907:24;:31;23932:5;23907:31;;;;;;;;;;;;;;;;:35;;:43;;;;:::i;:::-;23873:24;:31;23898:5;23873:31;;;;;;;;;;;;;;;:77;;;;23975:1;23967:4;:9;;;23963:186;;;24000:15;:24;24016:7;24000:24;;;;;;;;;;;;23993:31;;;;;;;;;;;23963:186;;;24084:4;24057:15;:24;24073:7;24057:24;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;24110:15;:27;24126:10;24110:27;;;;;;;;;;;;24103:34;;;;;;;;;;;23963:186;24173:5;24164:23;;;24180:6;24164:23;;;;;;;;;;;;;;;;;;23272:923;;;;;;;:::o;25024:369::-;25078:11;25102:12;25125;25169:21;25181:5;25188:1;25169:11;:21::i;:::-;25148:42;;;;;;;;;;;;;25201:185;25219:1;25208:7;:12;;:41;;;;;25242:7;25224:15;:25;25208:41;25201:185;;;25266:19;25279:5;25266:12;:19::i;:::-;25310:7;25300:17;;;;25353:21;25365:5;25372:1;25353:11;:21::i;:::-;25332:42;;;;;;;;;;;;;25201:185;;;25024:369;;;;;:::o;21634:788::-;21691:15;21709;21715:5;21722:1;21709:5;:15::i;:::-;21691:33;;21735:11;21749:6;:15;21756:7;21749:15;;;;;;;;;;;;;;;;;;;;;21735:29;;21791:1;21783:4;:9;;;;21775:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21860:4;21834:30;;21841:15;21834:30;;;21826:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21905:18;21926;21932:5;21939:4;21926:18;;:5;:18::i;:::-;21905:39;;21957:11;21971:6;:18;21978:10;21971:18;;;;;;;;;;;;;;;;;;;;;21957:32;;22002:11;22016:9;:21;22026:10;22016:21;;;;;;;;;;;;22002:35;;22055:9;:21;22065:10;22055:21;;;;;;;;;;;22048:28;;;22107:27;22127:6;22107:8;:15;22116:5;22107:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;22089:8;:15;22098:5;22089:15;;;;;;;;;;;;;;;:45;;;;22170:34;22197:6;22170:15;:22;22186:5;22170:22;;;;;;;;;;;;;;;;:26;;:34;;;;:::i;:::-;22145:15;:22;22161:5;22145:22;;;;;;;;;;;;;;;:59;;;;22229:1;22221:4;:9;;;22217:159;;;22254:6;:15;22261:7;22254:15;;;;;;;;;;;;22247:22;;;;;;;;;;;22217:159;;;22320:4;22302:6;:15;22309:7;22302:15;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;22346:6;:18;22353:10;22346:18;;;;;;;;;;;;22339:25;;;;;;;;;;;22217:159;22400:5;22391:23;;;22407:6;22391:23;;;;;;;;;;;;;;;;;;21634:788;;;;;;:::o;2375:134::-;2438:4;2451:34;2461:10;2473:3;2478:6;2451:9;:34::i;:::-;2499:4;2492:11;;2375:134;;;;:::o;9385:175::-;9477:1;9456:23;;:9;:23;;;;9448:32;;;;;;9520:9;9492:38;;9513:5;;;;;;;;;;;9492:38;;;;;;;;;;;;9545:9;9537:5;;:17;;;;;;;;;;;;;;;;;;9385:175;:::o;27875:789::-;27956:15;27947:6;:24;;;27939:33;;;;;;27983:11;27997:18;28003:3;28008:6;27997:18;;:5;:18::i;:::-;27983:32;;28026:17;28046:21;28052:3;28064:1;28046:21;;:5;:21::i;:::-;28026:41;;28078:11;28092:6;:17;28099:9;28092:17;;;;;;;;;;;;;;;;;;;;;28078:31;;28134:1;28126:4;:9;;;28122:89;;;28172:6;28152;:17;28159:9;28152:17;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;28193:7;;;;;28122:89;28223:15;28241:16;28247:3;28252:4;28241:16;;:5;:16::i;:::-;28223:34;;28268:11;28292:189;28307:1;28299:4;:9;;;;:26;;;;;28321:4;28312:13;;:6;:13;;;28299:26;28292:189;;;28351:4;28342:13;;;;28382:7;28370:19;;28413:6;:15;28420:7;28413:15;;;;;;;;;;;;;;;;;;;;;28406:22;;28453:16;28459:3;28464:4;28453:16;;:5;:16::i;:::-;28443:26;;28292:189;;;28507:4;28497:14;;:6;:14;;;28493:53;;;28528:7;;;;;;;28493:53;28570:1;28562:4;:9;;;28558:60;;28602:4;28588:6;:11;28595:3;28588:11;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;28558:60;28650:6;28630;:17;28637:9;28630:17;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;27875:789;;;;;;;;:::o;3030:306::-;3134:1;3119:17;;:3;:17;;;;3111:26;;;;;;3164:8;:15;3173:5;3164:15;;;;;;;;;;;;;;;;3154:6;:25;;3146:34;;;;;;3211:27;3231:6;3211:8;:15;3220:5;3211:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;3193:8;:15;3202:5;3193:15;;;;;;;;;;;;;;;:45;;;;3263:25;3281:6;3263:8;:13;3272:3;3263:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;3247:8;:13;3256:3;3247:13;;;;;;;;;;;;;;;:41;;;;3318:3;3302:28;;3311:5;3302:28;;;3323:6;3302:28;;;;;;;;;;;;;;;;;;3030:306;;;:::o;651:384::-;709:9;944:1;939;:6;935:37;;;963:1;956:8;;;;935:37;988:1;984;:5;980:9;;1012:1;1007;1003;:5;;;;;;:10;996:18;;;;1028:1;1021:8;;651:384;;;;;:::o;1122:277::-;1180:7;1392:1;1388;:5;;;;;;1381:12;;1122:277;;;;:::o
Swarm Source
bzzr://8c77b6415fe78770ebbc54e1b5ea0259c5263928a1418c8cba7696f9c81bafa4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.