Overview
Max Total Supply
471,406.213879288935451919 DFT
Holders
1,455 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
18.373460770576273773 DFTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DeFiat_Token
Compiler Version
v0.6.0+commit.26b70077
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-08-28 */ // SPDX-License-Identifier: DeFiat 2020 /* * Copyright (c) 2020 DeFiat.net * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */ /* * DISCLAIMER: * DeFiat (the “Token”) is a utility token experiment using the ERC20 standard on * the Ethereum Blockchain (The “Blockchain"). The DeFiat website and White Paper (the “WP”) * are for illustration only and do not make the Team liable for any of their content. * The DeFiat website may evolve over time, including but not limited to, a change of URL, * change of content, adding or removing functionalities. * THERE IS NO GUARANTEE THAT THE UTILITY OF THE TOKENS OR THE PROJECT DESCRIBED IN THE * AVAILABLE INFORMATION (AS DEFINED BELOW) WILL BE DELIVERED. REGARDLESS OF THE ACQUISITION * METHOD, BY ACQUIRING THE TOKEN YOU ARE AGREEING TO HAVE NO RECOURSE, CLAIM, ACTION, * JUDGEMENT OR REMEDY AGAINST THE TEAM IF THE UTILITY OF THE TOKENS OR IF THE PROJECT * DESCRIBED IN THE AVAILABLE INFORMATION IS NOT DELIVERED OR REALISED. */ /* * Below are the 3 DeFiat ecosystem contracts: * Defiat_Points, the loyalty token: 0x8c9d8f5cc3427f460e20f63b36992f74aa19e27d * Defiat_Gov, the governance contract: 0x3aa3303877a0d1c360a9fe2693ae9f31087a1381 * Defiat_Token, the actual contract managing the DeFiat DFT token. * Any questions regarding the code, please reach out to the team. */ //Libraries, Interfaces and ERC20 baseline contract. SPDX-License-Identifier: MIT pragma solidity ^0.6.0; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } //max and min from Zeppelin math. function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } } //Zeppelin's SafeMath abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } //don't use /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } contract _ERC20 is Context, IERC20 { using SafeMath for uint256; //using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ function _constructor(string memory name, string memory symbol) internal { _name = name; _symbol = symbol; _decimals = 18; } //Public Functions /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } //Internal Functions /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } //overriden in Defiat_Token /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } //DeFiat Points - 2020 AUG 27 pragma solidity ^0.6.0; contract DeFiat_Points is _ERC20{ //global variables address public deFiat_Token; //1 DeFiat token address mapping(address => bool) public deFiat_Gov; //multiple governing addresses uint256 public txThreshold; //min tansfer to generate points mapping (uint => uint256) public _discountTranches; mapping (address => uint256) private _discounts; //current discount (base100) //== modifiers == modifier onlyGovernors { require(deFiat_Gov[msg.sender] == true, "Only governing contract"); _; } modifier onlyToken { require(msg.sender == deFiat_Token, "Only token"); _; } constructor() public { //token and governing contract deFiat_Gov[msg.sender] = true; //msg.sender is the 1st governor _constructor("DeFiat Points", "DFTP"); //calls the ERC20 "_constructor" to update token name txThreshold = 1e18*100;// setAll10DiscountTranches( 1e18*10, 1e18*50, 1e18*100, 1e18*500, 1e18*1000, 1e18*1e10, 1e18*1e10+1, 1e18*1e10+2, 1e18*1e10+3); //60% and abovse closed at launch. _discounts[msg.sender]=100; //no minting. _totalSupply = 0 } //== VIEW == function viewDiscountOf(address _address) public view returns (uint256) { return _discounts[_address]; } function viewEligibilityOf(address _address) public view returns (uint256 tranche) { uint256 _tranche = 0; for(uint256 i=0; i<=9; i++){ if(balanceOf(_address) >= _discountTranches[i]) { _tranche = i;} else{break;} } return _tranche; } function discountPointsNeeded(uint _tranche) public view returns (uint256 pointsNeeded) { return( _discountTranches[_tranche]); //check the nb of points needed to access discount tranche } //== SET == function updateMyDiscountOf() public returns (bool) { uint256 _tranche = viewEligibilityOf(msg.sender); _discounts[msg.sender] = SafeMath.mul(10, _tranche); //update of discount base100 return true; } //users execute this function to upgrade a status level to the max tranche //== SET onlyGovernor == function setDeFiatToken(address _token) external onlyGovernors returns(address){ return deFiat_Token = _token; } function setGovernor(address _address, bool _rights) external onlyGovernors { require(msg.sender != _address); //prevents self stripping of rights deFiat_Gov[_address] = _rights; } function setTxTreshold(uint _amount) external onlyGovernors { txThreshold = _amount; //base 1e18 } //minimum amount of tokens to generate points per transaction function overrideDiscount(address _address, uint256 _newDiscount) external onlyGovernors { require(_newDiscount <= 100); //100 = 100% discount _discounts[_address] = _newDiscount; } function overrideLoyaltyPoints(address _address, uint256 _newPoints) external onlyGovernors { _burn(_address, balanceOf(_address)); //burn all points _mint(_address, _newPoints); //mint new points } function setDiscountTranches(uint _tranche, uint256 _pointsNeeded) external onlyGovernors { require(_tranche <10, "max tranche is 9"); //tranche 9 = 90% discount _discountTranches[_tranche] = _pointsNeeded; } function setAll10DiscountTranches( uint256 _pointsNeeded1, uint256 _pointsNeeded2, uint256 _pointsNeeded3, uint256 _pointsNeeded4, uint256 _pointsNeeded5, uint256 _pointsNeeded6, uint256 _pointsNeeded7, uint256 _pointsNeeded8, uint256 _pointsNeeded9) public onlyGovernors { _discountTranches[0] = 0; _discountTranches[1] = _pointsNeeded1; //10% _discountTranches[2] = _pointsNeeded2; //20% _discountTranches[3] = _pointsNeeded3; //30% _discountTranches[4] = _pointsNeeded4; //40% _discountTranches[5] = _pointsNeeded5; //50% _discountTranches[6] = _pointsNeeded6; //60% _discountTranches[7] = _pointsNeeded7; //70% _discountTranches[8] = _pointsNeeded8; //80% _discountTranches[9] = _pointsNeeded9; //90% } //== MINT points: onlyToken == function addPoints(address _address, uint256 _txSize, uint256 _points) external onlyToken { if(_txSize >= txThreshold){ _mint(_address, _points);} } function _transfer(address sender, address recipient, uint256 amount) internal override virtual { _ERC20._transfer(sender, recipient, amount); //force update discount uint256 _tranche = viewEligibilityOf(msg.sender); _discounts[msg.sender] = SafeMath.mul(10, _tranche); } //overriden to update discount at every points Transfer. Avoids passing tokens to get discounts. function burn(uint256 _amount) public returns(bool) { _ERC20._burn(msg.sender,_amount); } } //DeFiat Governance v0.1 - 2020 AUG 27 pragma solidity ^0.6.0; contract DeFiat_Gov{ //Governance contract for DeFiat Token. address public mastermind; mapping (address => uint256) private actorLevel; //governance = multi-tier level mapping (address => uint256) private override _balances; mapping (address => uint256) private override _allowances; uint256 private burnRate; // %rate of burn at each transaction uint256 private feeRate; // %rate of fee taken at each transaction address private feeDestination; //target address for fees (to support staking contracts) event stdEvent(address _txOrigin, uint256 _number, bytes32 _signature, string _desc); //== CONSTRUCTOR constructor() public { mastermind = msg.sender; actorLevel[mastermind] = 3; feeDestination = mastermind; emit stdEvent(msg.sender, 3, sha256(abi.encodePacked(mastermind)), "constructor"); } //== MODIFIERS == modifier onlyMastermind { require(msg.sender == mastermind, " only Mastermind"); _; } modifier onlyGovernor { require(actorLevel[msg.sender] >= 2,"only Governors"); _; } modifier onlyPartner { require(actorLevel[msg.sender] >= 1,"only Partners"); _; } //future use //== VIEW == function viewActorLevelOf(address _address) public view returns (uint256) { return actorLevel[_address]; //address lvl (3, 2, 1 or 0) } function viewBurnRate() public view returns (uint256) { return burnRate; } function viewFeeRate() public view returns (uint256) { return feeRate; } function viewFeeDestination() public view returns (address) { return feeDestination; } //== SET INTERNAL VARIABLES== function setActorLevel(address _address, uint256 _newLevel) public { require(_newLevel < actorLevel[msg.sender], "Can only give rights below you"); actorLevel[_address] = _newLevel; //updates level -> adds or removes rights emit stdEvent(_address, _newLevel, sha256(abi.encodePacked(msg.sender, _newLevel)), "Level changed"); } //MasterMind specific function removeAllRights(address _address) public onlyMastermind { require(_address != mastermind); actorLevel[_address] = 0; //removes all rights emit stdEvent(address(_address), 0, sha256(abi.encodePacked(_address)), "Rights Revoked"); } function killContract() public onlyMastermind { selfdestruct(msg.sender); //destroys the contract if replacement needed } //only Mastermind can kill contract function setMastermind(address _mastermind) public onlyMastermind { mastermind = _mastermind; //Only one mastermind actorLevel[_mastermind] = 3; actorLevel[msg.sender] = 2; //new level for previous mastermind emit stdEvent(tx.origin, 0, sha256(abi.encodePacked(_mastermind, mastermind)), "MasterMind Changed"); } //only Mastermind can transfer his own rights //Governors specific function changeBurnRate(uint _burnRate) public onlyGovernor { require(_burnRate <=200, "20% limit"); //cannot burn more than 20%/tx burnRate = _burnRate; emit stdEvent(address(msg.sender), _burnRate, sha256(abi.encodePacked(msg.sender, _burnRate)), "BurnRate Changed"); } //only governors can change burnRate/tx function changeFeeRate(uint _feeRate) public onlyGovernor { require(_feeRate <=200, "20% limit"); //cannot take more than 20% fees/tx feeRate = _feeRate; emit stdEvent(address(msg.sender), _feeRate, sha256(abi.encodePacked(msg.sender, _feeRate)), "FeeRate Changed"); } //only governors can change feeRate/tx function setFeeDestination(address _nextDest) public onlyGovernor { feeDestination = _nextDest; } } //DeFiat Token - 2020 AUG 27 pragma solidity ^0.6.0; contract DeFiat_Token is _ERC20 { //overrides the _transfer function and adds burn capabilities using SafeMath for uint; //== Variables == address private mastermind; // token creator. address public DeFiat_gov; // contract governing the Token address public DeFiat_points; // ERC20 loyalty TOKEN uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; struct Transaction { address sender; address recipient; uint256 burnRate; uint256 feeRate; address feeDestination; uint256 senderDiscount; uint256 recipientDiscount; uint256 actualDiscount; } Transaction private transaction; //== Modifiers == modifier onlyMastermind { require(msg.sender == mastermind, "only Mastermind"); _; } modifier onlyGovernor { require(msg.sender == mastermind || msg.sender == DeFiat_gov, "only Governance contract"); _; } //only Governance managing contract modifier onlyPoints { require(msg.sender == mastermind || msg.sender == DeFiat_points, " only Points contract"); _; } //only Points managing contract //== Events == event stdEvent(address _address, uint256 _number, bytes32 _signature, string _desc); //== Token generation == constructor (address _gov, address _points) public { //token requires that governance and points are up and running mastermind = msg.sender; _constructor("DeFiat","DFT"); //calls the ERC20 _constructor _mint(mastermind, 1e18 * 500000); //mint 300,000 tokens DeFiat_gov = _gov; // contract governing the Token DeFiat_points = _points; // ERC20 loyalty TOKEN } //== mastermind == function widthdrawAnyToken(address _recipient, address _ERC20address, uint256 _amount) public onlyGovernor returns (bool) { IERC20(_ERC20address).transfer(_recipient, _amount); //use of the _ERC20 traditional transfer return true; } //get tokens sent by error to contract function setGovernorContract(address _gov) external onlyGovernor { DeFiat_gov = _gov; } // -> governance transfer function setPointsContract(address _pts) external onlyGovernor { DeFiat_points = _pts; } // -> new points management contract function setMastermind(address _mastermind) external onlyMastermind { mastermind = _mastermind; //use the 0x0 address to resign } // transfered to go contract OCT 2020 //== View variables from external contracts == function _viewFeeRate() public view returns(uint256){ return DeFiat_Gov(DeFiat_gov).viewFeeRate(); } function _viewBurnRate() public view returns(uint256){ return DeFiat_Gov(DeFiat_gov).viewBurnRate(); } function _viewFeeDestination() public view returns(address){ return DeFiat_Gov(DeFiat_gov).viewFeeDestination(); } function _viewDiscountOf(address _address) public view returns(uint256){ return DeFiat_Points(DeFiat_points).viewDiscountOf(_address); } function _viewPointsOf(address _address) public view returns(uint256){ return DeFiat_Points(DeFiat_points).balanceOf(_address); } //== override _transfer function in the ERC20Simple contract == function updateTxStruct(address sender, address recipient) internal returns(bool){ transaction.sender = sender; transaction.recipient = recipient; transaction.burnRate = _viewBurnRate(); transaction.feeRate = _viewFeeRate(); transaction.feeDestination = _viewFeeDestination(); transaction.senderDiscount = _viewDiscountOf(sender); transaction.recipientDiscount = _viewDiscountOf(recipient); transaction.actualDiscount = SafeMath.max(transaction.senderDiscount, transaction.recipientDiscount); if( transaction.actualDiscount > 100){transaction.actualDiscount = 100;} //manages "forever pools" return true; } //struct used to prevent "stack too deep" error function addPoints(address sender, uint256 _threshold) public { DeFiat_Points(DeFiat_points).addPoints(sender, _threshold, 1e18); //Update user's loyalty points +1 = +1e18 } function _transfer(address sender, address recipient, uint256 amount) internal override { //overrides the inherited ERC20 _transfer require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); //load transaction Struct (gets info from external contracts) updateTxStruct(sender, recipient); //get discounts and apply them. You get the MAX discounts of the sender x recipient. discount is base100 uint256 dAmount = SafeMath.div( SafeMath.mul(amount, SafeMath.sub(100, transaction.actualDiscount)) ,100); //amount discounted to calculate fees //Calculates burn and fees on discounted amount (burn and fees are 0.0X% ie base 10000 -> "10" = 0.1%) uint _toBurn = SafeMath.div(SafeMath.mul(dAmount,transaction.burnRate),10000); uint _toFee = SafeMath.div(SafeMath.mul(dAmount,transaction.feeRate),10000); uint _amount = SafeMath.sub(amount, SafeMath.add(_toBurn,_toFee)); //calculates the remaning amount to be sent //transfers -> forcing _ERC20 inheritance level if(_toFee > 0) { _ERC20._transfer(sender, transaction.feeDestination, _toFee); //native _transfer + emit } //transfer fee if(_toBurn > 0) {_ERC20._burn(sender,_toBurn);} //native _burn tokens from sender //transfer remaining amount. + emit _ERC20._transfer(sender, recipient, _amount); //native _transfer + emit //mint loyalty points and update lastTX if(sender != recipient){addPoints(sender, amount);} //uses the full amount to determine point minting } function burn(uint256 _amount) public returns(bool) { _ERC20._burn(msg.sender,_amount); } } // End of code. Thanks for reading. If you had the patience and skills to read it all, send us a msg on out social media platrofms. (DeFiat 2020)
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_gov","type":"address"},{"internalType":"address","name":"_points","type":"address"}],"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"uint256","name":"_number","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_signature","type":"bytes32"},{"indexed":false,"internalType":"string","name":"_desc","type":"string"}],"name":"stdEvent","type":"event"},{"inputs":[],"name":"DeFiat_gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DeFiat_points","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_viewBurnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"_viewDiscountOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_viewFeeDestination","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_viewFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"_viewPointsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"addPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGovernorContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mastermind","type":"address"}],"name":"setMastermind","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pts","type":"address"}],"name":"setPointsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_ERC20address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"widthdrawAnyToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002cf938038062002cf9833981810160405260408110156200003757600080fd5b81019080805190602001909291908051906020019092919050505033600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200010f6040518060400160405280600681526020017f44654669617400000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4446540000000000000000000000000000000000000000000000000000000000815250620001d760201b60201c565b6200014d600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166969e10de76676d08000006200022960201b60201c565b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000544565b8160039080519060200190620001ef92919062000495565b5080600490805190602001906200020892919062000495565b506012600560006101000a81548160ff021916908360ff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b620002e1600083836200040760201b60201c565b620002fd816002546200040c60201b62001da21790919060201c565b6002819055506200035b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200040c60201b62001da21790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b6000808284019050838110156200048b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004d857805160ff191683800117855562000509565b8280016001018555821562000509579182015b8281111562000508578251825591602001919060010190620004eb565b5b5090506200051891906200051c565b5090565b6200054191905b808211156200053d57600081600090555060010162000523565b5090565b90565b6127a580620005546000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063545f5057116100c357806395754abb1161007c57806395754abb146106f457806395d89b4114610738578063a457c2d7146107bb578063a9059cbb14610821578063bdcdb02f14610887578063dd62ed3e146108cb57610158565b8063545f50571461053857806355d2d3d7146105565780635649aceb146105dc57806370a0823114610634578063769623dd1461068c57806376d29ff5146106d657610158565b80632256f585116101155780632256f5851461034a57806323b872dd14610394578063313ce5671461041a578063395093511461043e57806342966c68146104a4578063507cd30f146104ea57610158565b806306c498221461015d57806306fdde03146101a1578063095ea7b3146102245780630baea1ad1461028a578063122ae47c146102e257806318160ddd1461032c575b600080fd5b61019f6004803603602081101561017357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610943565b005b6101a9610aa2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e95780820151818401526020810190506101ce565b50505050905090810190601f1680156102165780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102706004803603604081101561023a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b44565b604051808215151515815260200191505060405180910390f35b6102cc600480360360208110156102a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b62565b6040518082815260200191505060405180910390f35b6102ea610c45565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610334610c6b565b6040518082815260200191505060405180910390f35b610352610c75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610400600480360360608110156103aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c9b565b604051808215151515815260200191505060405180910390f35b610422610d74565b604051808260ff1660ff16815260200191505060405180910390f35b61048a6004803603604081101561045457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d8b565b604051808215151515815260200191505060405180910390f35b6104d0600480360360208110156104ba57600080fd5b8101908080359060200190929190505050610e3e565b604051808215151515815260200191505060405180910390f35b6105366004803603604081101561050057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e4f565b005b610540610f24565b6040518082815260200191505060405180910390f35b6105c26004803603606081101561056c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fce565b604051808215151515815260200191505060405180910390f35b61061e600480360360208110156105f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111b9565b6040518082815260200191505060405180910390f35b6106766004803603602081101561064a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061129c565b6040518082815260200191505060405180910390f35b6106946112e4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106de61138e565b6040518082815260200191505060405180910390f35b6107366004803603602081101561070a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611438565b005b610740611597565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610780578082015181840152602081019050610765565b50505050905090810190601f1680156107ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610807600480360360408110156107d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611639565b604051808215151515815260200191505060405180910390f35b61086d6004803603604081101561083757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611706565b604051808215151515815260200191505060405180910390f35b6108c96004803603602081101561089d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611724565b005b61092d600480360360408110156108e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061182b565b6040518082815260200191505060405180910390f35b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109ec5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610a5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6f6e6c7920476f7665726e616e636520636f6e7472616374000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b3a5780601f10610b0f57610100808354040283529160200191610b3a565b820191906000526020600020905b815481529060010190602001808311610b1d57829003601f168201915b5050505050905090565b6000610b58610b516118b2565b84846118ba565b6001905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c0357600080fd5b505afa158015610c17573d6000803e3d6000fd5b505050506040513d6020811015610c2d57600080fd5b81019080805190602001909291905050509050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ca8848484611ab1565b610d6984610cb46118b2565b610d64856040518060600160405280602881526020016126b960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d1a6118b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce29092919063ffffffff16565b6118ba565b600190509392505050565b6000600560009054906101000a900460ff16905090565b6000610e34610d986118b2565b84610e2f8560016000610da96118b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611da290919063ffffffff16565b6118ba565b6001905092915050565b6000610e4a3383611e2a565b919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323d14d608383670de0b6b3a76400006040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc97240a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f8e57600080fd5b505afa158015610fa2573d6000803e3d6000fd5b505050506040513d6020811015610fb857600080fd5b8101908080519060200190929190505050905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110795750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6f6e6c7920476f7665726e616e636520636f6e7472616374000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b505050506040513d602081101561119c57600080fd5b810190808051906020019092919050505050600190509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633ef94fa7836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561125a57600080fd5b505afa15801561126e573d6000803e3d6000fd5b505050506040513d602081101561128457600080fd5b81019080805190602001909291905050509050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344fbf7f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561134e57600080fd5b505afa158015611362573d6000803e3d6000fd5b505050506040513d602081101561137857600080fd5b8101908080519060200190929190505050905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633150cf806040518163ffffffff1660e01b815260040160206040518083038186803b1580156113f857600080fd5b505afa15801561140c573d6000803e3d6000fd5b505050506040513d602081101561142257600080fd5b8101908080519060200190929190505050905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114e15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6f6e6c7920476f7665726e616e636520636f6e7472616374000000000000000081525060200191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561162f5780601f106116045761010080835404028352916020019161162f565b820191906000526020600020905b81548152906001019060200180831161161257829003601f168201915b5050505050905090565b60006116fc6116466118b2565b846116f78560405180606001604052806025815260200161274b60259139600160006116706118b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce29092919063ffffffff16565b6118ba565b6001905092915050565b600061171a6117136118b2565b8484611ab1565b6001905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6f6e6c79204d61737465726d696e64000000000000000000000000000000000081525060200191505060405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611940576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806127276024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806126506022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806127026025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061260b6023913960400191505060405180910390fd5b611bc78383611fee565b506000611bed611be683611be16064600c6007015461214a565b612194565b606461221a565b90506000611c0b611c0383600c60020154612194565b61271061221a565b90506000611c29611c2184600c60030154612194565b61271061221a565b90506000611c4085611c3b8585611da2565b61214a565b90506000821115611c7c57611c7b87600c60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612264565b5b6000831115611c9057611c8f8784611e2a565b5b611c9b878783612264565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614611cd957611cd88786610e4f565b5b50505050505050565b6000838311158290611d8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d54578082015181840152602081019050611d39565b50505050905090810190601f168015611d815780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015611e20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806126e16021913960400191505060405180910390fd5b611ebc82600083612525565b611f278160405180606001604052806022815260200161262e602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce29092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f7e8160025461214a90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600082600c60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612080610f24565b600c6002018190555061209161138e565b600c600301819055506120a26112e4565b600c60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120ee836111b9565b600c60050181905550612100826111b9565b600c6006018190555061211d600c60050154600c6006015461252a565b600c600701819055506064600c600701541115612140576064600c600701819055505b6001905092915050565b600061218c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ce2565b905092915050565b6000808314156121a75760009050612214565b60008284029050828482816121b857fe5b041461220f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806126986021913960400191505060405180910390fd5b809150505b92915050565b600061225c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612544565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806127026025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061260b6023913960400191505060405180910390fd5b61237b838383612525565b6123e681604051806060016040528060268152602001612672602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce29092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612479816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611da290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b505050565b60008183101561253a578161253c565b825b905092915050565b600080831182906125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125b557808201518184015260208101905061259a565b50505050905090810190601f1680156125e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816125fc57fe5b04905080915050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b37b2efef2be4a1b04145669df58cc2807fd436fcac54cb0f879076795435eeb64736f6c634300060000330000000000000000000000003aa3303877a0d1c360a9fe2693ae9f31087a13810000000000000000000000008c9d8f5cc3427f460e20f63b36992f74aa19e27d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063545f5057116100c357806395754abb1161007c57806395754abb146106f457806395d89b4114610738578063a457c2d7146107bb578063a9059cbb14610821578063bdcdb02f14610887578063dd62ed3e146108cb57610158565b8063545f50571461053857806355d2d3d7146105565780635649aceb146105dc57806370a0823114610634578063769623dd1461068c57806376d29ff5146106d657610158565b80632256f585116101155780632256f5851461034a57806323b872dd14610394578063313ce5671461041a578063395093511461043e57806342966c68146104a4578063507cd30f146104ea57610158565b806306c498221461015d57806306fdde03146101a1578063095ea7b3146102245780630baea1ad1461028a578063122ae47c146102e257806318160ddd1461032c575b600080fd5b61019f6004803603602081101561017357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610943565b005b6101a9610aa2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e95780820151818401526020810190506101ce565b50505050905090810190601f1680156102165780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102706004803603604081101561023a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b44565b604051808215151515815260200191505060405180910390f35b6102cc600480360360208110156102a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b62565b6040518082815260200191505060405180910390f35b6102ea610c45565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610334610c6b565b6040518082815260200191505060405180910390f35b610352610c75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610400600480360360608110156103aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c9b565b604051808215151515815260200191505060405180910390f35b610422610d74565b604051808260ff1660ff16815260200191505060405180910390f35b61048a6004803603604081101561045457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d8b565b604051808215151515815260200191505060405180910390f35b6104d0600480360360208110156104ba57600080fd5b8101908080359060200190929190505050610e3e565b604051808215151515815260200191505060405180910390f35b6105366004803603604081101561050057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e4f565b005b610540610f24565b6040518082815260200191505060405180910390f35b6105c26004803603606081101561056c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fce565b604051808215151515815260200191505060405180910390f35b61061e600480360360208110156105f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111b9565b6040518082815260200191505060405180910390f35b6106766004803603602081101561064a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061129c565b6040518082815260200191505060405180910390f35b6106946112e4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106de61138e565b6040518082815260200191505060405180910390f35b6107366004803603602081101561070a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611438565b005b610740611597565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610780578082015181840152602081019050610765565b50505050905090810190601f1680156107ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610807600480360360408110156107d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611639565b604051808215151515815260200191505060405180910390f35b61086d6004803603604081101561083757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611706565b604051808215151515815260200191505060405180910390f35b6108c96004803603602081101561089d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611724565b005b61092d600480360360408110156108e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061182b565b6040518082815260200191505060405180910390f35b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109ec5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610a5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6f6e6c7920476f7665726e616e636520636f6e7472616374000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b3a5780601f10610b0f57610100808354040283529160200191610b3a565b820191906000526020600020905b815481529060010190602001808311610b1d57829003601f168201915b5050505050905090565b6000610b58610b516118b2565b84846118ba565b6001905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c0357600080fd5b505afa158015610c17573d6000803e3d6000fd5b505050506040513d6020811015610c2d57600080fd5b81019080805190602001909291905050509050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ca8848484611ab1565b610d6984610cb46118b2565b610d64856040518060600160405280602881526020016126b960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d1a6118b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce29092919063ffffffff16565b6118ba565b600190509392505050565b6000600560009054906101000a900460ff16905090565b6000610e34610d986118b2565b84610e2f8560016000610da96118b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611da290919063ffffffff16565b6118ba565b6001905092915050565b6000610e4a3383611e2a565b919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323d14d608383670de0b6b3a76400006040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc97240a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f8e57600080fd5b505afa158015610fa2573d6000803e3d6000fd5b505050506040513d6020811015610fb857600080fd5b8101908080519060200190929190505050905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110795750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6f6e6c7920476f7665726e616e636520636f6e7472616374000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b505050506040513d602081101561119c57600080fd5b810190808051906020019092919050505050600190509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633ef94fa7836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561125a57600080fd5b505afa15801561126e573d6000803e3d6000fd5b505050506040513d602081101561128457600080fd5b81019080805190602001909291905050509050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344fbf7f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561134e57600080fd5b505afa158015611362573d6000803e3d6000fd5b505050506040513d602081101561137857600080fd5b8101908080519060200190929190505050905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633150cf806040518163ffffffff1660e01b815260040160206040518083038186803b1580156113f857600080fd5b505afa15801561140c573d6000803e3d6000fd5b505050506040513d602081101561142257600080fd5b8101908080519060200190929190505050905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114e15750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6f6e6c7920476f7665726e616e636520636f6e7472616374000000000000000081525060200191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561162f5780601f106116045761010080835404028352916020019161162f565b820191906000526020600020905b81548152906001019060200180831161161257829003601f168201915b5050505050905090565b60006116fc6116466118b2565b846116f78560405180606001604052806025815260200161274b60259139600160006116706118b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce29092919063ffffffff16565b6118ba565b6001905092915050565b600061171a6117136118b2565b8484611ab1565b6001905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6f6e6c79204d61737465726d696e64000000000000000000000000000000000081525060200191505060405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611940576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806127276024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806126506022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806127026025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061260b6023913960400191505060405180910390fd5b611bc78383611fee565b506000611bed611be683611be16064600c6007015461214a565b612194565b606461221a565b90506000611c0b611c0383600c60020154612194565b61271061221a565b90506000611c29611c2184600c60030154612194565b61271061221a565b90506000611c4085611c3b8585611da2565b61214a565b90506000821115611c7c57611c7b87600c60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612264565b5b6000831115611c9057611c8f8784611e2a565b5b611c9b878783612264565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614611cd957611cd88786610e4f565b5b50505050505050565b6000838311158290611d8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d54578082015181840152602081019050611d39565b50505050905090810190601f168015611d815780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015611e20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806126e16021913960400191505060405180910390fd5b611ebc82600083612525565b611f278160405180606001604052806022815260200161262e602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce29092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f7e8160025461214a90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600082600c60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612080610f24565b600c6002018190555061209161138e565b600c600301819055506120a26112e4565b600c60040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120ee836111b9565b600c60050181905550612100826111b9565b600c6006018190555061211d600c60050154600c6006015461252a565b600c600701819055506064600c600701541115612140576064600c600701819055505b6001905092915050565b600061218c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ce2565b905092915050565b6000808314156121a75760009050612214565b60008284029050828482816121b857fe5b041461220f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806126986021913960400191505060405180910390fd5b809150505b92915050565b600061225c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612544565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806127026025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061260b6023913960400191505060405180910390fd5b61237b838383612525565b6123e681604051806060016040528060268152602001612672602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ce29092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612479816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611da290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b505050565b60008183101561253a578161253c565b825b905092915050565b600080831182906125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125b557808201518184015260208101905061259a565b50505050905090810190601f1680156125e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816125fc57fe5b04905080915050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b37b2efef2be4a1b04145669df58cc2807fd436fcac54cb0f879076795435eeb64736f6c63430006000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003aa3303877a0d1c360a9fe2693ae9f31087a13810000000000000000000000008c9d8f5cc3427f460e20f63b36992f74aa19e27d
-----Decoded View---------------
Arg [0] : _gov (address): 0x3Aa3303877A0D1c360a9FE2693AE9f31087A1381
Arg [1] : _points (address): 0x8c9d8f5CC3427F460e20F63b36992f74AA19e27d
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003aa3303877a0d1c360a9fe2693ae9f31087a1381
Arg [1] : 0000000000000000000000008c9d8f5cc3427f460e20f63b36992f74aa19e27d
Deployed Bytecode Sourcemap
29584:6312:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29584:6312:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31749:101;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31749:101:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;11580:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11580:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13686:169;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13686:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32803:143;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32803:143:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29794:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12655:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29863:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14329:321;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14329:321:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12507:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15059:218;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15059:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35788:103;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35788:103:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33803:183;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33803:183:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32391:116;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31449:255;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31449:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32647:150;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32647:150:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12818:119;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12818:119:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32513:128;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32272:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31885:102;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31885:102:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;11782:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11782:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15780:269;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15780:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13150:175;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13150:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32035:143;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32035:143:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;13388:151;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13388:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31749:101;30549:10;;;;;;;;;;;30535:24;;:10;:24;;;:52;;;;30577:10;;;;;;;;;;;30563:24;;:10;:24;;;30535:52;30527:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31838:4:::1;31825:10;;:17;;;;;;;;;;;;;;;;;;31749:101:::0;:::o;11580:83::-;11617:13;11650:5;11643:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11580:83;:::o;13686:169::-;13769:4;13786:39;13795:12;:10;:12::i;:::-;13809:7;13818:6;13786:8;:39::i;:::-;13843:4;13836:11;;13686:169;;;;:::o;32803:143::-;32864:7;32904:13;;;;;;;;;;;32890:38;;;32929:8;32890:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32890:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32890:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32890:48:0;;;;;;;;;;;;;;;;32883:55;;32803:143;;;:::o;29794:25::-;;;;;;;;;;;;;:::o;12655:100::-;12708:7;12735:12;;12728:19;;12655:100;:::o;29863:28::-;;;;;;;;;;;;;:::o;14329:321::-;14435:4;14452:36;14462:6;14470:9;14481:6;14452:9;:36::i;:::-;14499:121;14508:6;14516:12;:10;:12::i;:::-;14530:89;14568:6;14530:89;;;;;;;;;;;;;;;;;:11;:19;14542:6;14530:19;;;;;;;;;;;;;;;:33;14550:12;:10;:12::i;:::-;14530:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;14499:8;:121::i;:::-;14638:4;14631:11;;14329:321;;;;;:::o;12507:83::-;12548:5;12573:9;;;;;;;;;;;12566:16;;12507:83;:::o;15059:218::-;15147:4;15164:83;15173:12;:10;:12::i;:::-;15187:7;15196:50;15235:10;15196:11;:25;15208:12;:10;:12::i;:::-;15196:25;;;;;;;;;;;;;;;:34;15222:7;15196:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;15164:8;:83::i;:::-;15265:4;15258:11;;15059:218;;;;:::o;35788:103::-;35834:4;35851:32;35864:10;35875:7;35851:12;:32::i;:::-;35788:103;;;:::o;33803:183::-;33886:13;;;;;;;;;;;33872:38;;;33911:6;33919:10;33931:4;33872:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33872:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33872:64:0;;;;33803:183;;:::o;32391:116::-;32436:7;32473:10;;;;;;;;;;;32462:35;;;:37;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32462:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32462:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32462:37:0;;;;;;;;;;;;;;;;32455:44;;32391:116;:::o;31449:255::-;31565:4;30549:10;;;;;;;;;;;30535:24;;:10;:24;;;:52;;;;30577:10;;;;;;;;;;;30563:24;;:10;:24;;;30535:52;30527:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31589:13:::1;31582:30;;;31613:10;31625:7;31582:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;31582:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31582:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;31582:51:0;;;;;;;;;;;;;;;;;31692:4;31685:11;;31449:255:::0;;;;;:::o;32647:150::-;32710:7;32750:13;;;;;;;;;;;32736:43;;;32780:8;32736:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32736:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32736:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32736:53:0;;;;;;;;;;;;;;;;32729:60;;32647:150;;;:::o;12818:119::-;12884:7;12911:9;:18;12921:7;12911:18;;;;;;;;;;;;;;;;12904:25;;12818:119;;;:::o;32513:128::-;32564:7;32601:10;;;;;;;;;;;32590:41;;;:43;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32590:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32590:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32590:43:0;;;;;;;;;;;;;;;;32583:50;;32513:128;:::o;32272:113::-;32316:7;32352:10;;;;;;;;;;;32341:34;;;:36;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32341:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32341:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32341:36:0;;;;;;;;;;;;;;;;32334:43;;32272:113;:::o;31885:102::-;30549:10;;;;;;;;;;;30535:24;;:10;:24;;;:52;;;;30577:10;;;;;;;;;;;30563:24;;:10;:24;;;30535:52;30527:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31975:4:::1;31959:13;;:20;;;;;;;;;;;;;;;;;;31885:102:::0;:::o;11782:87::-;11821:13;11854:7;11847:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11782:87;:::o;15780:269::-;15873:4;15890:129;15899:12;:10;:12::i;:::-;15913:7;15922:96;15961:15;15922:96;;;;;;;;;;;;;;;;;:11;:25;15934:12;:10;:12::i;:::-;15922:25;;;;;;;;;;;;;;;:34;15948:7;15922:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;15890:8;:129::i;:::-;16037:4;16030:11;;15780:269;;;;:::o;13150:175::-;13236:4;13253:42;13263:12;:10;:12::i;:::-;13277:9;13288:6;13253:9;:42::i;:::-;13313:4;13306:11;;13150:175;;;;:::o;32035:143::-;30446:10;;;;;;;;;;;30432:24;;:10;:24;;;30424:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32127:11:::1;32114:10;;:24;;;;;;;;;;;;;;;;;;32035:143:::0;:::o;13388:151::-;13477:7;13504:11;:18;13516:5;13504:18;;;;;;;;;;;;;;;:27;13523:7;13504:27;;;;;;;;;;;;;;;;13497:34;;13388:151;;;;:::o;7564:106::-;7617:15;7652:10;7645:17;;7564:106;:::o;18980:346::-;19099:1;19082:19;;:5;:19;;;;19074:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19180:1;19161:21;;:7;:21;;;;19153:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19264:6;19234:11;:18;19246:5;19234:18;;;;;;;;;;;;;;;:27;19253:7;19234:27;;;;;;;;;;;;;;;:36;;;;19302:7;19286:32;;19295:5;19286:32;;;19311:6;19286:32;;;;;;;;;;;;;;;;;;18980:346;;;:::o;33998:1778::-;34165:1;34147:20;;:6;:20;;;;34139:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34249:1;34228:23;;:9;:23;;;;34220:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34379:33;34394:6;34402:9;34379:14;:33::i;:::-;;34543:15;34571:143;34598:101;34611:6;34653:45;34666:3;34671:11;:26;;;34653:12;:45::i;:::-;34598:12;:101::i;:::-;34710:3;34571:12;:143::i;:::-;34543:171;;34877:12;34892:62;34905:42;34918:7;34926:11;:20;;;34905:12;:42::i;:::-;34948:5;34892:12;:62::i;:::-;34877:77;;34966:11;34980:61;34993:41;35006:7;35014:11;:19;;;34993:12;:41::i;:::-;35035:5;34980:12;:61::i;:::-;34966:75;;35053:12;35068:50;35081:6;35089:28;35102:7;35110:6;35089:12;:28::i;:::-;35068:12;:50::i;:::-;35053:65;;35243:1;35234:6;:10;35231:124;;;35257:60;35274:6;35282:11;:26;;;;;;;;;;;;35310:6;35257:16;:60::i;:::-;35231:124;35403:1;35393:7;:11;35390:47;;;35407:28;35420:6;35427:7;35407:12;:28::i;:::-;35390:47;35536:44;35553:6;35561:9;35572:7;35536:16;:44::i;:::-;35681:9;35671:19;;:6;:19;;;35668:51;;35692:25;35702:6;35710;35692:9;:25::i;:::-;35668:51;33998:1778;;;;;;;:::o;3664:192::-;3750:7;3783:1;3778;:6;;3786:12;3770:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3770:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3810:9;3826:1;3822;:5;3810:17;;3847:1;3840:8;;;3664:192;;;;;:::o;2761:181::-;2819:7;2839:9;2855:1;2851;:5;2839:17;;2880:1;2875;:6;;2867:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2933:1;2926:8;;;2761:181;;;;:::o;18122:418::-;18225:1;18206:21;;:7;:21;;;;18198:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18278:49;18299:7;18316:1;18320:6;18278:20;:49::i;:::-;18361:68;18384:6;18361:68;;;;;;;;;;;;;;;;;:9;:18;18371:7;18361:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;18340:9;:18;18350:7;18340:18;;;;;;;;;;;;;;;:89;;;;18455:24;18472:6;18455:12;;:16;;:24;;;;:::i;:::-;18440:12;:39;;;;18521:1;18495:37;;18504:7;18495:37;;;18525:6;18495:37;;;;;;;;;;;;;;;;;;18122:418;;:::o;33025:718::-;33101:4;33138:6;33117:11;:18;;;:27;;;;;;;;;;;;;;;;;;33179:9;33155:11;:21;;;:33;;;;;;;;;;;;;;;;;;33222:15;:13;:15::i;:::-;33199:11;:20;;:38;;;;33270:14;:12;:14::i;:::-;33248:11;:19;;:36;;;;33324:21;:19;:21::i;:::-;33295:11;:26;;;:50;;;;;;;;;;;;;;;;;;33385:23;33401:6;33385:15;:23::i;:::-;33356:11;:26;;:52;;;;33451:26;33467:9;33451:15;:26::i;:::-;33419:11;:29;;:58;;;;33517:71;33530:11;:26;;;33558:11;:29;;;33517:12;:71::i;:::-;33488:11;:26;;:100;;;;33643:3;33614:11;:26;;;:32;33610:72;;;33677:3;33648:11;:26;;:32;;;;33610:72;33731:4;33724:11;;33025:718;;;;:::o;3225:136::-;3283:7;3310:43;3314:1;3317;3310:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3303:50;;3225:136;;;;:::o;4115:471::-;4173:7;4423:1;4418;:6;4414:47;;;4448:1;4441:8;;;;4414:47;4473:9;4489:1;4485;:5;4473:17;;4518:1;4513;4509;:5;;;;;;:10;4501:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4577:1;4570:8;;;4115:471;;;;;:::o;5062:132::-;5120:7;5147:39;5151:1;5154;5147:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5140:46;;5062:132;;;;:::o;16563:539::-;16687:1;16669:20;;:6;:20;;;;16661:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16771:1;16750:23;;:9;:23;;;;16742:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16826:47;16847:6;16855:9;16866:6;16826:20;:47::i;:::-;16906:71;16928:6;16906:71;;;;;;;;;;;;;;;;;:9;:17;16916:6;16906:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;16886:9;:17;16896:6;16886:17;;;;;;;;;;;;;;;:91;;;;17011:32;17036:6;17011:9;:20;17021:9;17011:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;16988:9;:20;16998:9;16988:20;;;;;;;;;;;;;;;:55;;;;17076:9;17059:35;;17068:6;17059:35;;;17087:6;17059:35;;;;;;;;;;;;;;;;;;16563:539;;;:::o;20351:92::-;;;;:::o;7274:107::-;7332:7;7364:1;7359;:6;;:14;;7372:1;7359:14;;;7368:1;7359:14;7352:21;;7274:107;;;;:::o;5690:278::-;5776:7;5808:1;5804;:5;5811:12;5796:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;5796:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5835:9;5851:1;5847;:5;;;;;;5835:17;;5959:1;5952:8;;;5690:278;;;;;:::o
Swarm Source
ipfs://b37b2efef2be4a1b04145669df58cc2807fd436fcac54cb0f879076795435eeb
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.