ERC-20
DeFi
Overview
Max Total Supply
1,000,000,000 NBU
Holders
18,787 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
209,173.06999999999868928 NBUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NBU
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-24 */ pragma solidity =0.8.0; // ---------------------------------------------------------------------------- // NBU token main contract (2020) // // Symbol : NBU // Name : Nimbus // Total supply : 1.000.000.000 (burnable) // Decimals : 18 // ---------------------------------------------------------------------------- // SPDX-License-Identifier: MIT // ---------------------------------------------------------------------------- interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract Ownable { address public owner; address public newOwner; event OwnershipTransferred(address indexed from, address indexed to); constructor() { owner = msg.sender; emit OwnershipTransferred(address(0), owner); } modifier onlyOwner { require(msg.sender == owner, "Ownable: Caller is not the owner"); _; } function transferOwnership(address transferOwner) public onlyOwner { require(transferOwner != newOwner); newOwner = transferOwner; } function acceptOwnership() virtual public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { return add(a, b, "SafeMath: addition overflow"); } function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, errorMessage); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by 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; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract NBU is IERC20, Ownable, Pausable { using SafeMath for uint; mapping (address => mapping (address => uint)) private _allowances; mapping (address => uint) private _unfrozenBalances; mapping (address => uint) private _vestingNonces; mapping (address => mapping (uint => uint)) private _vestingAmounts; mapping (address => mapping (uint => uint)) private _unvestedAmounts; mapping (address => mapping (uint => uint)) private _vestingTypes; //0 - multivest, 1 - single vest, > 2 give by vester id mapping (address => mapping (uint => uint)) private _vestingReleaseStartDates; uint private _totalSupply = 1_000_000_000e18; string private constant _name = "Nimbus"; string private constant _symbol = "NBU"; uint8 private constant _decimals = 18; uint private vestingFirstPeriod = 60 days; uint private vestingSecondPeriod = 152 days; uint public giveAmount; mapping (address => bool) public vesters; bytes32 public immutable DOMAIN_SEPARATOR; bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); mapping (address => uint) public nonces; event Unvest(address user, uint amount); constructor () { _unfrozenBalances[owner] = _totalSupply; emit Transfer(address(0), owner, _totalSupply); uint chainId = block.chainid; DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256('EIP712Domain(string name,uint256 chainId,address verifyingContract)'), keccak256(bytes(_name)), chainId, address(this) ) ); giveAmount = _totalSupply / 10; } function approve(address spender, uint amount) external override whenNotPaused returns (bool) { _approve(msg.sender, spender, amount); return true; } function transfer(address recipient, uint amount) external override whenNotPaused returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function transferFrom(address sender, address recipient, uint amount) external override whenNotPaused returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "NBU::transferFrom: transfer amount exceeds allowance")); return true; } function permit(address owner, address spender, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external whenNotPaused { bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline)); bytes32 digest = keccak256(abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR, structHash)); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "NBU::permit: invalid signature"); require(signatory == owner, "NBU::permit: unauthorized"); require(block.timestamp <= deadline, "NBU::permit: signature expired"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function increaseAllowance(address spender, uint addedValue) external returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint subtractedValue) external returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "NBU::decreaseAllowance: decreased allowance below zero")); return true; } function unvest() external whenNotPaused returns (uint unvested) { require (_vestingNonces[msg.sender] > 0, "NBU::unvest:No vested amount"); for (uint i = 1; i <= _vestingNonces[msg.sender]; i++) { if (_vestingAmounts[msg.sender][i] == _unvestedAmounts[msg.sender][i]) continue; if (_vestingReleaseStartDates[msg.sender][i] > block.timestamp) break; uint toUnvest = block.timestamp.sub(_vestingReleaseStartDates[msg.sender][i]).mul(_vestingAmounts[msg.sender][i]) / vestingSecondPeriod; if (toUnvest > _vestingAmounts[msg.sender][i]) { toUnvest = _vestingAmounts[msg.sender][i]; } uint totalUnvestedForNonce = toUnvest; toUnvest = toUnvest.sub(_unvestedAmounts[msg.sender][i]); unvested = unvested.add(toUnvest); _unvestedAmounts[msg.sender][i] = totalUnvestedForNonce; } _unfrozenBalances[msg.sender] = _unfrozenBalances[msg.sender].add(unvested); emit Unvest(msg.sender, unvested); } function give(address user, uint amount, uint vesterId) external { require (giveAmount > amount, "NBU::give: give finished"); require (vesters[msg.sender], "NBU::give: not vester"); giveAmount = giveAmount.sub(amount); _vest(user, amount, vesterId); } function vest(address user, uint amount) external { require (vesters[msg.sender], "NBU::vest: not vester"); _vest(user, amount, 1); } function burnTokens(uint amount) external onlyOwner returns (bool success) { require(amount <= _unfrozenBalances[owner], "NBU::burnTokens: exceeds available amount"); _unfrozenBalances[owner] = _unfrozenBalances[owner].sub(amount, "NBU::burnTokens: transfer amount exceeds balance"); _totalSupply = _totalSupply.sub(amount, "NBU::burnTokens: overflow"); emit Transfer(owner, address(0), amount); return true; } function allowance(address owner, address spender) external view override returns (uint) { return _allowances[owner][spender]; } function decimals() external pure returns (uint8) { return _decimals; } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function totalSupply() external view override returns (uint) { return _totalSupply; } function balanceOf(address account) external view override returns (uint) { uint amount = _unfrozenBalances[account]; if (_vestingNonces[account] == 0) return amount; for (uint i = 1; i <= _vestingNonces[account]; i++) { amount = amount.add(_vestingAmounts[account][i]).sub(_unvestedAmounts[account][i]); } return amount; } function availableForUnvesting(address user) external view returns (uint unvestAmount) { if (_vestingNonces[user] == 0) return 0; for (uint i = 1; i <= _vestingNonces[user]; i++) { if (_vestingAmounts[user][i] == _unvestedAmounts[user][i]) continue; if (_vestingReleaseStartDates[user][i] > block.timestamp) break; uint toUnvest = block.timestamp.sub(_vestingReleaseStartDates[user][i]).mul(_vestingAmounts[user][i]) / vestingSecondPeriod; if (toUnvest > _vestingAmounts[user][i]) { toUnvest = _vestingAmounts[user][i]; } toUnvest = toUnvest.sub(_unvestedAmounts[user][i]); unvestAmount = unvestAmount.add(toUnvest); } } function availableForTransfer(address account) external view returns (uint) { return _unfrozenBalances[account]; } function vestingInfo(address user, uint nonce) external view returns (uint vestingAmount, uint unvestedAmount, uint vestingReleaseStartDate, uint vestType) { vestingAmount = _vestingAmounts[user][nonce]; unvestedAmount = _unvestedAmounts[user][nonce]; vestingReleaseStartDate = _vestingReleaseStartDates[user][nonce]; vestType = _vestingTypes[user][nonce]; } function vestingNonces(address user) external view returns (uint lastNonce) { return _vestingNonces[user]; } function _approve(address owner, address spender, uint amount) private { require(owner != address(0), "NBU::_approve: approve from the zero address"); require(spender != address(0), "NBU::_approve: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address sender, address recipient, uint amount) private { require(sender != address(0), "NBU::_transfer: transfer from the zero address"); require(recipient != address(0), "NBU::_transfer: transfer to the zero address"); _unfrozenBalances[sender] = _unfrozenBalances[sender].sub(amount, "NBU::_transfer: transfer amount exceeds balance"); _unfrozenBalances[recipient] = _unfrozenBalances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _vest(address user, uint amount, uint vestType) private { uint nonce = ++_vestingNonces[user]; _vestingAmounts[user][nonce] = amount; _vestingReleaseStartDates[user][nonce] = block.timestamp + vestingFirstPeriod; _unfrozenBalances[owner] = _unfrozenBalances[owner].sub(amount); _vestingTypes[user][nonce] = vestType; emit Transfer(owner, user, amount); } function multisend(address[] memory to, uint[] memory values) external onlyOwner returns (uint) { require(to.length == values.length); require(to.length < 100); uint sum; for (uint j; j < values.length; j++) { sum += values[j]; } _unfrozenBalances[owner] = _unfrozenBalances[owner].sub(sum, "NBU::multisend: transfer amount exceeds balance"); for (uint i; i < to.length; i++) { _unfrozenBalances[to[i]] = _unfrozenBalances[to[i]].add(values[i], "NBU::multisend: transfer amount exceeds balance"); emit Transfer(owner, to[i], values[i]); } return(to.length); } function multivest(address[] memory to, uint[] memory values) external onlyOwner returns (uint) { require(to.length == values.length); require(to.length < 100); uint sum; for (uint j; j < values.length; j++) { sum += values[j]; } _unfrozenBalances[owner] = _unfrozenBalances[owner].sub(sum, "NBU::multivest: transfer amount exceeds balance"); for (uint i; i < to.length; i++) { uint nonce = ++_vestingNonces[to[i]]; _vestingAmounts[to[i]][nonce] = values[i]; _vestingReleaseStartDates[to[i]][nonce] = block.timestamp + vestingFirstPeriod; _vestingTypes[to[i]][nonce] = 0; emit Transfer(owner, to[i], values[i]); } return(to.length); } function updateVesters(address vester, bool isActive) external onlyOwner { vesters[vester] = isActive; } function updateGiveAmount(uint amount) external onlyOwner { require (_unfrozenBalances[owner] > amount, "NBU::updateGiveAmount: exceed owner balance"); giveAmount = amount; } function transferAnyERC20Token(address tokenAddress, uint tokens) external onlyOwner returns (bool success) { return IERC20(tokenAddress).transfer(owner, tokens); } function acceptOwnership() public override { uint amount = _unfrozenBalances[owner]; _unfrozenBalances[newOwner] = amount; _unfrozenBalances[owner] = 0; emit Transfer(owner, newOwner, amount); super.acceptOwnership(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unvest","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"availableForTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"availableForUnvesting","outputs":[{"internalType":"uint256","name":"unvestAmount","type":"uint256"}],"stateMutability":"view","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":"burnTokens","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"vesterId","type":"uint256"}],"name":"give","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"giveAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"multisend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"multivest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"transferOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unvest","outputs":[{"internalType":"uint256","name":"unvested","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateGiveAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vester","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"name":"updateVesters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"vest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vesters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"vestingInfo","outputs":[{"internalType":"uint256","name":"vestingAmount","type":"uint256"},{"internalType":"uint256","name":"unvestedAmount","type":"uint256"},{"internalType":"uint256","name":"vestingReleaseStartDate","type":"uint256"},{"internalType":"uint256","name":"vestType","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"vestingNonces","outputs":[{"internalType":"uint256","name":"lastNonce","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040526001805460ff60a01b191690556b033b2e3c9fd0803ce8000000600955624f1a00600a5562c86400600b553480156200003c57600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600954600080546001600160a01b03908116825260036020526040808320849055825490519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000dc9190620001b3565b60405180910390a360408051808201825260068152654e696d62757360d01b6020918201529051469162000159917f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866917f68bd002dbf64dcef541f76d57d90420809af9d57c5f801a2f7c294848893c8be9185913091016200018f565b60408051601f1981840301815291905280516020909101206080526009546200018590600a90620001bc565b600c5550620001dd565b938452602084019290925260408301526001600160a01b0316606082015260800190565b90815260200190565b600082620001d857634e487b7160e01b81526012600452602481fd5b500490565b60805161343f62000200600039600081816106e70152611b64015261343f6000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c80637ecebe0011610160578063aad41a41116100d8578063dc39d06d1161008c578063dd62ed3e11610071578063dd62ed3e146104c4578063f1b5c88e146104d7578063f2fde38b146104ea57610277565b8063dc39d06d146104a9578063dd36bdf0146104bc57610277565b8063d4ee1d90116100bd578063d4ee1d901461047b578063d505accf14610483578063d9c24caf1461049657610277565b8063aad41a4114610455578063c3ef29871461046857610277565b806395d89b411161012f578063a457c2d711610114578063a457c2d71461041c578063a6237aa21461042f578063a9059cbb1461044257610277565b806395d89b411461040c578063985d54491461041457610277565b80637ecebe00146103c95780638456cb59146103dc57806387faf4bb146103e45780638da5cb5b146103f757610277565b80633644e515116101f35780636b97f59e116101c257806370a08231116101a757806370a082311461039b57806371ad9634146103ae57806379ba5097146103c157610277565b80636b97f59e146103655780636d1b229d1461038857610277565b80633644e5151461033a57806339509351146103425780633f4ba83a146103555780635c975abb1461035d57610277565b806323b872dd1161024a5780632797c6c81161022f5780632797c6c81461030857806330adf81f1461031d578063313ce5671461032557610277565b806323b872dd146102e257806324d6239e146102f557610277565b806306fdde031461027c578063095ea7b31461029a5780631501ea1c146102ba57806318160ddd146102cd575b600080fd5b6102846104fd565b6040516102919190612c6f565b60405180910390f35b6102ad6102a8366004612a32565b610534565b6040516102919190612bfc565b6102ad6102c8366004612904565b610574565b6102d5610589565b6040516102919190612c07565b6102ad6102f0366004612950565b61058f565b6102d5610303366004612904565b61062e565b61031b610316366004612a32565b61065a565b005b6102d56106bc565b61032d6106e0565b604051610291919061313c565b6102d56106e5565b6102ad610350366004612a32565b610709565b61031b61074c565b6102ad610817565b610378610373366004612a32565b610838565b6040516102919493929190613121565b6102ad610396366004612b67565b6108a9565b6102d56103a9366004612904565b610a73565b6102d56103bc366004612904565b610b53565b61031b610b7b565b6102d56103d7366004612904565b610c0d565b61031b610c1f565b61031b6103f2366004612b67565b610d02565b6103ff610db6565b6040516102919190612bb5565b610284610dd2565b6102d5610e09565b6102ad61042a366004612a32565b61105a565b61031b61043d3660046129fc565b6110b6565b6102ad610450366004612a32565b61115d565b6102d5610463366004612a8d565b611193565b6102d5610476366004612a8d565b61157c565b6103ff611a90565b61031b61049136600461298b565b611aac565b61031b6104a4366004612a5b565b611d87565b6102ad6104b7366004612a32565b611e2b565b6102d5611f30565b6102d56104d236600461291e565b611f36565b6102d56104e5366004612904565b611f6e565b61031b6104f8366004612904565b612190565b60408051808201909152600681527f4e696d6275730000000000000000000000000000000000000000000000000000602082015290565b60015460009074010000000000000000000000000000000000000000900460ff161561055f57600080fd5b61056a338484612250565b5060015b92915050565b600d6020526000908152604090205460ff1681565b60095490565b60015460009074010000000000000000000000000000000000000000900460ff16156105ba57600080fd5b6105c584848461235f565b610624843361061f856040518060600160405280603481526020016133416034913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260026020908152604080832033845290915290205491906124de565b612250565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020545b919050565b336000908152600d602052604090205460ff166106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906130ea565b60405180910390fd5b6106b882826001612532565b5050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601290565b7f000000000000000000000000000000000000000000000000000000000000000081565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161056a91859061061f9086612683565b60005473ffffffffffffffffffffffffffffffffffffffff16331461079d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b60015474010000000000000000000000000000000000000000900460ff166107c457600080fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60015474010000000000000000000000000000000000000000900460ff1681565b73ffffffffffffffffffffffffffffffffffffffff909116600081815260056020908152604080832085845282528083205484845260068352818420868552835281842054858552600884528285208786528452828520549585526007845282852096855295909252909120549093565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146108fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b6000805473ffffffffffffffffffffffffffffffffffffffff1681526003602052604090205482111561095a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390613030565b6109a4826040518060600160405280603081526020016133da603091396000805473ffffffffffffffffffffffffffffffffffffffff1681526003602052604090205491906124de565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260036020908152604091829020929092558051808201909152601981527f4e42553a3a6275726e546f6b656e733a206f766572666c6f770000000000000091810191909152600954610a139184906124de565b6009556000805460405173ffffffffffffffffffffffffffffffffffffffff909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610a63908690612c07565b60405180910390a3506001919050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360209081526040808320546004909252822054610aaf579050610655565b60015b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260409020548111610b4c5773ffffffffffffffffffffffffffffffffffffffff8416600081815260066020908152604080832085845282528083205493835260058252808320858452909152902054610b389190610b32908590612683565b906126c5565b915080610b448161323d565b915050610ab2565b5092915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6000805473ffffffffffffffffffffffffffffffffffffffff9081168252600360205260408083205460018054841685528285208290558454841685528285208590555493549151909383169291909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610bfa908590612c07565b60405180910390a3610c0a612707565b50565b600e6020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b60015474010000000000000000000000000000000000000000900460ff1615610c9857600080fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600360205260409020548110610db1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a39061308d565b600c55565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60408051808201909152600381527f4e42550000000000000000000000000000000000000000000000000000000000602082015290565b60015460009074010000000000000000000000000000000000000000900460ff1615610e3457600080fd5b33600090815260046020526040902054610e7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612ff9565b60015b336000908152600460205260409020548111610ff057336000818152600660209081526040808320858452825280832054938352600582528083208584529091529020541415610ecc57610fde565b336000908152600860209081526040808320848452909152902054421015610ef357610ff0565b600b5433600081815260056020908152604080832086845282528083205493835260088252808320868452909152812054909291610f3c91610f369042906126c5565b906127c1565b610f4691906131b0565b336000908152600560209081526040808320868452909152902054909150811115610f8857503360009081526005602090815260408083208484529091529020545b3360009081526006602090815260408083208584529091529020548190610fb09082906126c5565b9150610fbc8483612683565b3360009081526006602090815260408083208784529091529020919091559250505b80610fe88161323d565b915050610e7d565b503360009081526003602052604090205461100b9082612683565b33600081815260036020526040908190209290925590517ffa5db7be915522c6b65b302ca1c4bfbfd4f0d898d50af75e513796dc44aee52b9161104f918490612bd6565b60405180910390a190565b600061056a338461061f856040518060600160405280603681526020016133a46036913933600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906124de565b60005473ffffffffffffffffffffffffffffffffffffffff163314611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600d6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60015460009074010000000000000000000000000000000000000000900460ff161561118857600080fd5b61056a33848461235f565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b81518351146111f357600080fd5b606483511061120157600080fd5b6000805b835181101561126e57838181518110611247577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518261125a9190613198565b9150806112668161323d565b915050611205565b506112b9816040518060600160405280602f81526020016132e3602f91396000805473ffffffffffffffffffffffffffffffffffffffff1681526003602052604090205491906124de565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600360205260408120919091555b8451811015611572576113d8848281518110611328577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518060600160405280602f81526020016132e3602f913960036000898681518110611386577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128209092919063ffffffff16565b60036000878481518110611415577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550848181518110611494577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef868481518110611543577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040516115589190612c07565b60405180910390a38061156a8161323d565b9150506112e3565b5050915192915050565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146115ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b81518351146115dc57600080fd5b60648351106115ea57600080fd5b6000805b835181101561165757838181518110611630577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151826116439190613198565b91508061164f8161323d565b9150506115ee565b506116a2816040518060600160405280602f8152602001613375602f91396000805473ffffffffffffffffffffffffffffffffffffffff1681526003602052604090205491906124de565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600360205260408120919091555b845181101561157257600060046000878481518110611714577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546117639061323d565b91905081905590508482815181106117a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600560008885815181106117e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550600a544261184e9190613198565b6008600088858151811061188b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550600060076000888581518110611921577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055508582815181106119b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878581518110611a60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051611a759190612c07565b60405180910390a35080611a888161323d565b9150506116cc565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff1615611ad457600080fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152600e6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086611b2e8361323d565b9190505589604051602001611b4896959493929190612c10565b60405160208183030381529060405280519060200120905060007f000000000000000000000000000000000000000000000000000000000000000082604051602001611b95929190612b7f565b604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051611bd29493929190612c51565b6020604051602081039080840390855afa158015611bf4573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611c6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612e17565b8973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611cd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612ce0565b86421115611d0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612de0565b73ffffffffffffffffffffffffffffffffffffffff808b166000818152600260209081526040808320948e1680845294909152908190208b9055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611d73908c90612c07565b60405180910390a350505050505050505050565b81600c5411611dc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612e4e565b336000908152600d602052604090205460ff16611e0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d4c565b600c54611e1890836126c5565b600c55611e26838383612532565b505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314611e7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b6000546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581169263a9059cbb92611ed792909116908690600401612bd6565b602060405180830381600087803b158015611ef157600080fd5b505af1158015611f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f299190612b4b565b9392505050565b600c5481565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260046020526040812054611fa057506000610655565b60015b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040902054811161218a5773ffffffffffffffffffffffffffffffffffffffff8316600081815260066020908152604080832085845282528083205493835260058252808320858452909152902054141561201e57612178565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020908152604080832084845290915290205442101561205b5761218a565b600b5473ffffffffffffffffffffffffffffffffffffffff84166000818152600560209081526040808320868452825280832054938352600882528083208684529091528120549092916120b491610f369042906126c5565b6120be91906131b0565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832086845290915290205490915081111561212c575073ffffffffffffffffffffffffffffffffffffffff831660009081526005602090815260408083208484529091529020545b73ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584529091529020546121689082906126c5565b90506121748382612683565b9250505b806121828161323d565b915050611fa3565b50919050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b60015473ffffffffffffffffffffffffffffffffffffffff8281169116141561220957600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff831661229d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612e85565b73ffffffffffffffffffffffffffffffffffffffff82166122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612f3f565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612352908590612c07565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d83565b73ffffffffffffffffffffffffffffffffffffffff82166123f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612f9c565b612443816040518060600160405280602f8152602001613312602f913973ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205491906124de565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260036020526040808220939093559084168152205461247f9082612683565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526003602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612352908590612c07565b6000818484111561251c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a39190612c6f565b5060006125298486613226565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600460205260408120805482906125649061323d565b918290555073ffffffffffffffffffffffffffffffffffffffff851660009081526005602090815260408083208484529091529020849055600a549091506125ac9042613198565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260086020908152604080832086845282528083209490945581549092168152600390915220546125f990846126c5565b6000805473ffffffffffffffffffffffffffffffffffffffff9081168252600360209081526040808420949094558782168084526007825284842086855290915283832086905591549251919216907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612675908790612c07565b60405180910390a350505050565b6000611f2983836040518060400160405280601b81526020017f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815250612820565b6000611f2983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124de565b60015473ffffffffffffffffffffffffffffffffffffffff16331461272b57600080fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b6000826127d05750600061056e565b60006127dc83856131e9565b9050826127e985836131b0565b14611f29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612ee2565b60008061282d8486613198565b9050828582101561286b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a39190612c6f565b50949350505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065557600080fd5b600082601f8301126128a8578081fd5b813560206128bd6128b883613174565b61314a565b82815281810190858301838502870184018810156128d9578586fd5b855b858110156128f7578135845292840192908401906001016128db565b5090979650505050505050565b600060208284031215612915578081fd5b611f2982612874565b60008060408385031215612930578081fd5b61293983612874565b915061294760208401612874565b90509250929050565b600080600060608486031215612964578081fd5b61296d84612874565b925061297b60208501612874565b9150604084013590509250925092565b600080600080600080600060e0888a0312156129a5578283fd5b6129ae88612874565b96506129bc60208901612874565b95506040880135945060608801359350608088013560ff811681146129df578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215612a0e578182fd5b612a1783612874565b91506020830135612a27816132d4565b809150509250929050565b60008060408385031215612a44578182fd5b612a4d83612874565b946020939093013593505050565b600080600060608486031215612a6f578283fd5b612a7884612874565b95602085013595506040909401359392505050565b60008060408385031215612a9f578182fd5b823567ffffffffffffffff80821115612ab6578384fd5b818501915085601f830112612ac9578384fd5b81356020612ad96128b883613174565b82815281810190858301838502870184018b1015612af5578889fd5b8896505b84871015612b1e57612b0a81612874565b835260019690960195918301918301612af9565b5096505086013592505080821115612b34578283fd5b50612b4185828601612898565b9150509250929050565b600060208284031215612b5c578081fd5b8151611f29816132d4565b600060208284031215612b78578081fd5b5035919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b90815260200190565b95865273ffffffffffffffffffffffffffffffffffffffff94851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015612c9b57858101830151858201604001528201612c7f565b81811115612cac5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526019908201527f4e42553a3a7065726d69743a20756e617574686f72697a656400000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526015908201527f4e42553a3a676976653a206e6f74207665737465720000000000000000000000604082015260600190565b6020808252602e908201527f4e42553a3a5f7472616e736665723a207472616e736665722066726f6d20746860408201527f65207a65726f2061646472657373000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f4e42553a3a7065726d69743a207369676e617475726520657870697265640000604082015260600190565b6020808252601e908201527f4e42553a3a7065726d69743a20696e76616c6964207369676e61747572650000604082015260600190565b60208082526018908201527f4e42553a3a676976653a20676976652066696e69736865640000000000000000604082015260600190565b6020808252602c908201527f4e42553a3a5f617070726f76653a20617070726f76652066726f6d207468652060408201527f7a65726f20616464726573730000000000000000000000000000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f4e42553a3a5f617070726f76653a20617070726f766520746f20746865207a6560408201527f726f206164647265737300000000000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f4e42553a3a5f7472616e736665723a207472616e7366657220746f207468652060408201527f7a65726f20616464726573730000000000000000000000000000000000000000606082015260800190565b6020808252601c908201527f4e42553a3a756e766573743a4e6f2076657374656420616d6f756e7400000000604082015260600190565b60208082526029908201527f4e42553a3a6275726e546f6b656e733a206578636565647320617661696c616260408201527f6c6520616d6f756e740000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f4e42553a3a75706461746547697665416d6f756e743a20657863656564206f7760408201527f6e65722062616c616e6365000000000000000000000000000000000000000000606082015260800190565b60208082526015908201527f4e42553a3a766573743a206e6f74207665737465720000000000000000000000604082015260600190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561316c5761316c6132a5565b604052919050565b600067ffffffffffffffff82111561318e5761318e6132a5565b5060209081020190565b600082198211156131ab576131ab613276565b500190565b6000826131e4577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561322157613221613276565b500290565b60008282101561323857613238613276565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561326f5761326f613276565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8015158114610c0a57600080fdfe4e42553a3a6d756c746973656e643a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e42553a3a5f7472616e736665723a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e42553a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654e42553a3a6d756c7469766573743a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e42553a3a6465637265617365416c6c6f77616e63653a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4e42553a3a6275726e546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a264697066735822122085e628f9b5334d822e68a8f3858e1bd5b5df6644928fbf8f7c2d058c85517f3064736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102775760003560e01c80637ecebe0011610160578063aad41a41116100d8578063dc39d06d1161008c578063dd62ed3e11610071578063dd62ed3e146104c4578063f1b5c88e146104d7578063f2fde38b146104ea57610277565b8063dc39d06d146104a9578063dd36bdf0146104bc57610277565b8063d4ee1d90116100bd578063d4ee1d901461047b578063d505accf14610483578063d9c24caf1461049657610277565b8063aad41a4114610455578063c3ef29871461046857610277565b806395d89b411161012f578063a457c2d711610114578063a457c2d71461041c578063a6237aa21461042f578063a9059cbb1461044257610277565b806395d89b411461040c578063985d54491461041457610277565b80637ecebe00146103c95780638456cb59146103dc57806387faf4bb146103e45780638da5cb5b146103f757610277565b80633644e515116101f35780636b97f59e116101c257806370a08231116101a757806370a082311461039b57806371ad9634146103ae57806379ba5097146103c157610277565b80636b97f59e146103655780636d1b229d1461038857610277565b80633644e5151461033a57806339509351146103425780633f4ba83a146103555780635c975abb1461035d57610277565b806323b872dd1161024a5780632797c6c81161022f5780632797c6c81461030857806330adf81f1461031d578063313ce5671461032557610277565b806323b872dd146102e257806324d6239e146102f557610277565b806306fdde031461027c578063095ea7b31461029a5780631501ea1c146102ba57806318160ddd146102cd575b600080fd5b6102846104fd565b6040516102919190612c6f565b60405180910390f35b6102ad6102a8366004612a32565b610534565b6040516102919190612bfc565b6102ad6102c8366004612904565b610574565b6102d5610589565b6040516102919190612c07565b6102ad6102f0366004612950565b61058f565b6102d5610303366004612904565b61062e565b61031b610316366004612a32565b61065a565b005b6102d56106bc565b61032d6106e0565b604051610291919061313c565b6102d56106e5565b6102ad610350366004612a32565b610709565b61031b61074c565b6102ad610817565b610378610373366004612a32565b610838565b6040516102919493929190613121565b6102ad610396366004612b67565b6108a9565b6102d56103a9366004612904565b610a73565b6102d56103bc366004612904565b610b53565b61031b610b7b565b6102d56103d7366004612904565b610c0d565b61031b610c1f565b61031b6103f2366004612b67565b610d02565b6103ff610db6565b6040516102919190612bb5565b610284610dd2565b6102d5610e09565b6102ad61042a366004612a32565b61105a565b61031b61043d3660046129fc565b6110b6565b6102ad610450366004612a32565b61115d565b6102d5610463366004612a8d565b611193565b6102d5610476366004612a8d565b61157c565b6103ff611a90565b61031b61049136600461298b565b611aac565b61031b6104a4366004612a5b565b611d87565b6102ad6104b7366004612a32565b611e2b565b6102d5611f30565b6102d56104d236600461291e565b611f36565b6102d56104e5366004612904565b611f6e565b61031b6104f8366004612904565b612190565b60408051808201909152600681527f4e696d6275730000000000000000000000000000000000000000000000000000602082015290565b60015460009074010000000000000000000000000000000000000000900460ff161561055f57600080fd5b61056a338484612250565b5060015b92915050565b600d6020526000908152604090205460ff1681565b60095490565b60015460009074010000000000000000000000000000000000000000900460ff16156105ba57600080fd5b6105c584848461235f565b610624843361061f856040518060600160405280603481526020016133416034913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260026020908152604080832033845290915290205491906124de565b612250565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360205260409020545b919050565b336000908152600d602052604090205460ff166106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906130ea565b60405180910390fd5b6106b882826001612532565b5050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601290565b7fd2f32fdaf59b1e9e24b3e6eea679db97f97fb509e2a20d1891a2494fcde2808d81565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161056a91859061061f9086612683565b60005473ffffffffffffffffffffffffffffffffffffffff16331461079d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b60015474010000000000000000000000000000000000000000900460ff166107c457600080fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60015474010000000000000000000000000000000000000000900460ff1681565b73ffffffffffffffffffffffffffffffffffffffff909116600081815260056020908152604080832085845282528083205484845260068352818420868552835281842054858552600884528285208786528452828520549585526007845282852096855295909252909120549093565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146108fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b6000805473ffffffffffffffffffffffffffffffffffffffff1681526003602052604090205482111561095a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390613030565b6109a4826040518060600160405280603081526020016133da603091396000805473ffffffffffffffffffffffffffffffffffffffff1681526003602052604090205491906124de565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260036020908152604091829020929092558051808201909152601981527f4e42553a3a6275726e546f6b656e733a206f766572666c6f770000000000000091810191909152600954610a139184906124de565b6009556000805460405173ffffffffffffffffffffffffffffffffffffffff909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610a63908690612c07565b60405180910390a3506001919050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600360209081526040808320546004909252822054610aaf579050610655565b60015b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260409020548111610b4c5773ffffffffffffffffffffffffffffffffffffffff8416600081815260066020908152604080832085845282528083205493835260058252808320858452909152902054610b389190610b32908590612683565b906126c5565b915080610b448161323d565b915050610ab2565b5092915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b6000805473ffffffffffffffffffffffffffffffffffffffff9081168252600360205260408083205460018054841685528285208290558454841685528285208590555493549151909383169291909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610bfa908590612c07565b60405180910390a3610c0a612707565b50565b600e6020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b60015474010000000000000000000000000000000000000000900460ff1615610c9857600080fd5b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600360205260409020548110610db1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a39061308d565b600c55565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60408051808201909152600381527f4e42550000000000000000000000000000000000000000000000000000000000602082015290565b60015460009074010000000000000000000000000000000000000000900460ff1615610e3457600080fd5b33600090815260046020526040902054610e7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612ff9565b60015b336000908152600460205260409020548111610ff057336000818152600660209081526040808320858452825280832054938352600582528083208584529091529020541415610ecc57610fde565b336000908152600860209081526040808320848452909152902054421015610ef357610ff0565b600b5433600081815260056020908152604080832086845282528083205493835260088252808320868452909152812054909291610f3c91610f369042906126c5565b906127c1565b610f4691906131b0565b336000908152600560209081526040808320868452909152902054909150811115610f8857503360009081526005602090815260408083208484529091529020545b3360009081526006602090815260408083208584529091529020548190610fb09082906126c5565b9150610fbc8483612683565b3360009081526006602090815260408083208784529091529020919091559250505b80610fe88161323d565b915050610e7d565b503360009081526003602052604090205461100b9082612683565b33600081815260036020526040908190209290925590517ffa5db7be915522c6b65b302ca1c4bfbfd4f0d898d50af75e513796dc44aee52b9161104f918490612bd6565b60405180910390a190565b600061056a338461061f856040518060600160405280603681526020016133a46036913933600090815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906124de565b60005473ffffffffffffffffffffffffffffffffffffffff163314611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600d6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60015460009074010000000000000000000000000000000000000000900460ff161561118857600080fd5b61056a33848461235f565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b81518351146111f357600080fd5b606483511061120157600080fd5b6000805b835181101561126e57838181518110611247577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518261125a9190613198565b9150806112668161323d565b915050611205565b506112b9816040518060600160405280602f81526020016132e3602f91396000805473ffffffffffffffffffffffffffffffffffffffff1681526003602052604090205491906124de565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600360205260408120919091555b8451811015611572576113d8848281518110611328577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518060600160405280602f81526020016132e3602f913960036000898681518110611386577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128209092919063ffffffff16565b60036000878481518110611415577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550848181518110611494577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef868481518110611543577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040516115589190612c07565b60405180910390a38061156a8161323d565b9150506112e3565b5050915192915050565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146115ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b81518351146115dc57600080fd5b60648351106115ea57600080fd5b6000805b835181101561165757838181518110611630577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151826116439190613198565b91508061164f8161323d565b9150506115ee565b506116a2816040518060600160405280602f8152602001613375602f91396000805473ffffffffffffffffffffffffffffffffffffffff1681526003602052604090205491906124de565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600360205260408120919091555b845181101561157257600060046000878481518110611714577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546117639061323d565b91905081905590508482815181106117a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600560008885815181106117e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550600a544261184e9190613198565b6008600088858151811061188b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550600060076000888581518110611921577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055508582815181106119b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878581518110611a60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051611a759190612c07565b60405180910390a35080611a888161323d565b9150506116cc565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900460ff1615611ad457600080fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152600e6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086611b2e8361323d565b9190505589604051602001611b4896959493929190612c10565b60405160208183030381529060405280519060200120905060007fd2f32fdaf59b1e9e24b3e6eea679db97f97fb509e2a20d1891a2494fcde2808d82604051602001611b95929190612b7f565b604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051611bd29493929190612c51565b6020604051602081039080840390855afa158015611bf4573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611c6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612e17565b8973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611cd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612ce0565b86421115611d0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612de0565b73ffffffffffffffffffffffffffffffffffffffff808b166000818152600260209081526040808320948e1680845294909152908190208b9055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611d73908c90612c07565b60405180910390a350505050505050505050565b81600c5411611dc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612e4e565b336000908152600d602052604090205460ff16611e0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d4c565b600c54611e1890836126c5565b600c55611e26838383612532565b505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314611e7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b6000546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581169263a9059cbb92611ed792909116908690600401612bd6565b602060405180830381600087803b158015611ef157600080fd5b505af1158015611f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f299190612b4b565b9392505050565b600c5481565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260046020526040812054611fa057506000610655565b60015b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040902054811161218a5773ffffffffffffffffffffffffffffffffffffffff8316600081815260066020908152604080832085845282528083205493835260058252808320858452909152902054141561201e57612178565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020908152604080832084845290915290205442101561205b5761218a565b600b5473ffffffffffffffffffffffffffffffffffffffff84166000818152600560209081526040808320868452825280832054938352600882528083208684529091528120549092916120b491610f369042906126c5565b6120be91906131b0565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260056020908152604080832086845290915290205490915081111561212c575073ffffffffffffffffffffffffffffffffffffffff831660009081526005602090815260408083208484529091529020545b73ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584529091529020546121689082906126c5565b90506121748382612683565b9250505b806121828161323d565b915050611fa3565b50919050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d17565b60015473ffffffffffffffffffffffffffffffffffffffff8281169116141561220957600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff831661229d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612e85565b73ffffffffffffffffffffffffffffffffffffffff82166122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612f3f565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612352908590612c07565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612d83565b73ffffffffffffffffffffffffffffffffffffffff82166123f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612f9c565b612443816040518060600160405280602f8152602001613312602f913973ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205491906124de565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260036020526040808220939093559084168152205461247f9082612683565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526003602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612352908590612c07565b6000818484111561251c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a39190612c6f565b5060006125298486613226565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600460205260408120805482906125649061323d565b918290555073ffffffffffffffffffffffffffffffffffffffff851660009081526005602090815260408083208484529091529020849055600a549091506125ac9042613198565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260086020908152604080832086845282528083209490945581549092168152600390915220546125f990846126c5565b6000805473ffffffffffffffffffffffffffffffffffffffff9081168252600360209081526040808420949094558782168084526007825284842086855290915283832086905591549251919216907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612675908790612c07565b60405180910390a350505050565b6000611f2983836040518060400160405280601b81526020017f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815250612820565b6000611f2983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124de565b60015473ffffffffffffffffffffffffffffffffffffffff16331461272b57600080fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b6000826127d05750600061056e565b60006127dc83856131e9565b9050826127e985836131b0565b14611f29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a390612ee2565b60008061282d8486613198565b9050828582101561286b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a39190612c6f565b50949350505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065557600080fd5b600082601f8301126128a8578081fd5b813560206128bd6128b883613174565b61314a565b82815281810190858301838502870184018810156128d9578586fd5b855b858110156128f7578135845292840192908401906001016128db565b5090979650505050505050565b600060208284031215612915578081fd5b611f2982612874565b60008060408385031215612930578081fd5b61293983612874565b915061294760208401612874565b90509250929050565b600080600060608486031215612964578081fd5b61296d84612874565b925061297b60208501612874565b9150604084013590509250925092565b600080600080600080600060e0888a0312156129a5578283fd5b6129ae88612874565b96506129bc60208901612874565b95506040880135945060608801359350608088013560ff811681146129df578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215612a0e578182fd5b612a1783612874565b91506020830135612a27816132d4565b809150509250929050565b60008060408385031215612a44578182fd5b612a4d83612874565b946020939093013593505050565b600080600060608486031215612a6f578283fd5b612a7884612874565b95602085013595506040909401359392505050565b60008060408385031215612a9f578182fd5b823567ffffffffffffffff80821115612ab6578384fd5b818501915085601f830112612ac9578384fd5b81356020612ad96128b883613174565b82815281810190858301838502870184018b1015612af5578889fd5b8896505b84871015612b1e57612b0a81612874565b835260019690960195918301918301612af9565b5096505086013592505080821115612b34578283fd5b50612b4185828601612898565b9150509250929050565b600060208284031215612b5c578081fd5b8151611f29816132d4565b600060208284031215612b78578081fd5b5035919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b90815260200190565b95865273ffffffffffffffffffffffffffffffffffffffff94851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015612c9b57858101830151858201604001528201612c7f565b81811115612cac5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60208082526019908201527f4e42553a3a7065726d69743a20756e617574686f72697a656400000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526015908201527f4e42553a3a676976653a206e6f74207665737465720000000000000000000000604082015260600190565b6020808252602e908201527f4e42553a3a5f7472616e736665723a207472616e736665722066726f6d20746860408201527f65207a65726f2061646472657373000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f4e42553a3a7065726d69743a207369676e617475726520657870697265640000604082015260600190565b6020808252601e908201527f4e42553a3a7065726d69743a20696e76616c6964207369676e61747572650000604082015260600190565b60208082526018908201527f4e42553a3a676976653a20676976652066696e69736865640000000000000000604082015260600190565b6020808252602c908201527f4e42553a3a5f617070726f76653a20617070726f76652066726f6d207468652060408201527f7a65726f20616464726573730000000000000000000000000000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f4e42553a3a5f617070726f76653a20617070726f766520746f20746865207a6560408201527f726f206164647265737300000000000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f4e42553a3a5f7472616e736665723a207472616e7366657220746f207468652060408201527f7a65726f20616464726573730000000000000000000000000000000000000000606082015260800190565b6020808252601c908201527f4e42553a3a756e766573743a4e6f2076657374656420616d6f756e7400000000604082015260600190565b60208082526029908201527f4e42553a3a6275726e546f6b656e733a206578636565647320617661696c616260408201527f6c6520616d6f756e740000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f4e42553a3a75706461746547697665416d6f756e743a20657863656564206f7760408201527f6e65722062616c616e6365000000000000000000000000000000000000000000606082015260800190565b60208082526015908201527f4e42553a3a766573743a206e6f74207665737465720000000000000000000000604082015260600190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561316c5761316c6132a5565b604052919050565b600067ffffffffffffffff82111561318e5761318e6132a5565b5060209081020190565b600082198211156131ab576131ab613276565b500190565b6000826131e4577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561322157613221613276565b500290565b60008282101561323857613238613276565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561326f5761326f613276565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8015158114610c0a57600080fdfe4e42553a3a6d756c746973656e643a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e42553a3a5f7472616e736665723a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e42553a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654e42553a3a6d756c7469766573743a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e42553a3a6465637265617365416c6c6f77616e63653a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4e42553a3a6275726e546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a264697066735822122085e628f9b5334d822e68a8f3858e1bd5b5df6644928fbf8f7c2d058c85517f3064736f6c63430008000033
Deployed Bytecode Sourcemap
4102:11770:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10113:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5908:172;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5059:40::-;;;;;;:::i;:::-;;:::i;10303:99::-;;;:::i;:::-;;;;;;;:::i;6274:334::-;;;;;;:::i;:::-;;:::i;11573:128::-;;;;;;:::i;:::-;;:::i;9234:156::-;;;;;;:::i;:::-;;:::i;:::-;;5156:137;;;:::i;10020:85::-;;;:::i;:::-;;;;;;;:::i;5108:41::-;;;:::i;7361:205::-;;;;;;:::i;:::-;;:::i;2289:100::-;;;:::i;1990:26::-;;;:::i;11709:399::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;9398:460::-;;;;;;:::i;:::-;;:::i;10410:386::-;;;;;;:::i;:::-;;:::i;12116:122::-;;;;;;:::i;:::-;;:::i;15600:269::-;;;:::i;5300:39::-;;;;;;:::i;:::-;;:::i;2183:98::-;;;:::i;15204:198::-;;;;;;:::i;:::-;;:::i;1164:20::-;;;:::i;:::-;;;;;;;:::i;10206:89::-;;;:::i;7855:1070::-;;;:::i;7574:273::-;;;;;;:::i;:::-;;:::i;15077:119::-;;;;;;:::i;:::-;;:::i;6088:178::-;;;;;;:::i;:::-;;:::i;13578:684::-;;;;;;:::i;:::-;;:::i;14270:799::-;;;;;;:::i;:::-;;:::i;1191:23::-;;;:::i;6616:737::-;;;;;;:::i;:::-;;:::i;8933:293::-;;;;;;:::i;:::-;;:::i;15414:178::-;;;;;;:::i;:::-;;:::i;5030:22::-;;;:::i;9870:142::-;;;;;;:::i;:::-;;:::i;10804:761::-;;;;;;:::i;:::-;;:::i;1536:155::-;;;;;;:::i;:::-;;:::i;10113:85::-;10185:5;;;;;;;;;;;;;;;;;10113:85;:::o;5908:172::-;2072:6;;5996:4;;2072:6;;;;;2071:7;2063:16;;;;;;6013:37:::1;6022:10;6034:7;6043:6;6013:8;:37::i;:::-;-1:-1:-1::0;6068:4:0::1;2090:1;5908:172:::0;;;;:::o;5059:40::-;;;;;;;;;;;;;;;:::o;10303:99::-;10382:12;;10303:99;:::o;6274:334::-;2072:6;;6385:4;;2072:6;;;;;2071:7;2063:16;;;;;;6402:36:::1;6412:6;6420:9;6431:6;6402:9;:36::i;:::-;6449:129;6458:6;6466:10;6478:99;6514:6;6478:99;;;;;;;;;;;;;;;;;:19;::::0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;6498:10:::1;6478:31:::0;;;;;;;;;:99;:35:::1;:99::i;:::-;6449:8;:129::i;:::-;-1:-1:-1::0;6596:4:0::1;6274:334:::0;;;;;:::o;11573:128::-;11667:26;;;11643:4;11667:26;;;:17;:26;;;;;;11573:128;;;;:::o;9234:156::-;9312:10;9304:19;;;;:7;:19;;;;;;;;9295:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;9360:22;9366:4;9372:6;9380:1;9360:5;:22::i;:::-;9234:156;;:::o;5156:137::-;5198:95;5156:137;:::o;10020:85::-;4919:2;10020:85;:::o;5108:41::-;;;:::o;7361:205::-;7466:10;7440:4;7487:23;;;:11;:23;;;;;;;;;:32;;;;;;;;;;7440:4;;7457:79;;7478:7;;7487:48;;7524:10;7487:36;:48::i;2289:100::-;1466:5;;;;1452:10;:19;1444:64;;;;;;;;;;;;:::i;:::-;2148:6:::1;::::0;;;::::1;;;2140:15;;;::::0;::::1;;2347:6:::2;:14:::0;;;::::2;::::0;;2372:9:::2;::::0;::::2;::::0;2356:5:::2;::::0;2372:9:::2;2289:100::o:0;1990:26::-;;;;;;;;;:::o;11709:399::-;11892:21;;;;11779:18;11892:21;;;:15;:21;;;;;;;;:28;;;;;;;;;11948:22;;;:16;:22;;;;;:29;;;;;;;;;12014:31;;;:25;:31;;;;;:38;;;;;;;;;12074:19;;;:13;:19;;;;;:26;;;;;;;;;;;11892:28;;11709:399::o;9398:460::-;9459:12;1466:5;;;;1452:10;:19;1444:64;;;;;;;;;;;;:::i;:::-;9502:24:::1;9520:5:::0;;::::1;;9502:24:::0;;:17:::1;:24;::::0;;;;;9492:34;::::1;;9484:88;;;;;;;;;;;;:::i;:::-;9610;9639:6;9610:88;;;;;;;;;;;;;;;;;:24;9628:5:::0;;::::1;;9610:24:::0;;:17:::1;:24;::::0;;;;;;:88;:28:::1;:88::i;:::-;9583:24;9601:5:::0;;::::1;;9583:24:::0;;:17:::1;:24;::::0;;;;;;;;:115;;;;9724:53;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;:12:::1;::::0;:53:::1;::::0;9741:6;;9724:16:::1;:53::i;:::-;9709:12;:68:::0;9817:1:::1;9802:5:::0;;9793:35:::1;::::0;::::1;9802:5:::0;;::::1;::::0;9793:35:::1;::::0;::::1;::::0;9821:6;;9793:35:::1;:::i;:::-;;;;;;;;-1:-1:-1::0;9846:4:0::1;9398:460:::0;;;:::o;10410:386::-;10509:26;;;10478:4;10509:26;;;:17;:26;;;;;;;;;10550:14;:23;;;;;;10546:47;;10587:6;-1:-1:-1;10580:13:0;;10546:47;10618:1;10604:161;10626:23;;;;;;;:14;:23;;;;;;10621:28;;10604:161;;10724:25;;;;;;;:16;:25;;;;;;;;:28;;;;;;;;;10691:24;;;:15;:24;;;;;:27;;;;;;;;;10680:73;;10724:28;10680:39;;:6;;:10;:39::i;:::-;:43;;:73::i;:::-;10671:82;-1:-1:-1;10651:3:0;;;;:::i;:::-;;;;10604:161;;;-1:-1:-1;10782:6:0;10410:386;-1:-1:-1;;10410:386:0:o;12116:122::-;12210:20;;12176:14;12210:20;;;:14;:20;;;;;;;12116:122::o;15600:269::-;15654:11;15686:5;;;;;;15668:24;;:17;:24;;;;;;;15686:5;15721:8;;;;15703:27;;;;;:36;;;15768:5;;;;15750:24;;;;;:28;;;15810:8;15803:5;;15794:33;;15668:24;;15810:8;;;15803:5;;;;;15794:33;;;;15668:24;;15794:33;:::i;:::-;;;;;;;;15838:23;:21;:23::i;:::-;15600:269;:::o;5300:39::-;;;;;;;;;;;;;:::o;2183:98::-;1466:5;;;;1452:10;:19;1444:64;;;;;;;;;;;;:::i;:::-;2072:6:::1;::::0;;;::::1;;;2071:7;2063:16;;;::::0;::::1;;2251:4:::2;2242:13:::0;;;::::2;::::0;::::2;::::0;;2266:7:::2;::::0;::::2;::::0;2242:13;;2266:7:::2;2183:98::o:0;15204:198::-;1466:5;;;;1452:10;:19;1444:64;;;;;;;;;;;;:::i;:::-;15283:24:::1;15301:5:::0;;::::1;;15283:24:::0;;:17:::1;:24;::::0;;;;;:33;-1:-1:-1;15274:90:0::1;;;;;;;;;;;;:::i;:::-;15375:10;:19:::0;15204:198::o;1164:20::-;;;;;;:::o;10206:89::-;10280:7;;;;;;;;;;;;;;;;;10206:89;:::o;7855:1070::-;2072:6;;7905:13;;2072:6;;;;;2071:7;2063:16;;;;;;7955:10:::1;7969:1;7940:26:::0;;;:14:::1;:26;::::0;;;;;7931:72:::1;;;;;;;;;;;;:::i;:::-;8028:1;8014:774;8051:10;8036:26;::::0;;;:14:::1;:26;::::0;;;;;8031:31;::::1;8014:774;;8139:10;8122:28;::::0;;;:16:::1;:28;::::0;;;;;;;:31;;;;;;;;;8088:27;;;:15:::1;:27:::0;;;;;:30;;;;;;;;;:65:::1;8084:79;;;8155:8;;8084:79;8208:10;8182:37;::::0;;;:25:::1;:37;::::0;;;;;;;:40;;;;;;;;;8225:15:::1;-1:-1:-1::0;8178:69:0::1;;;8242:5;;8178:69;8378:19;::::0;8360:10:::1;8262:13;8344:27:::0;;;:15:::1;:27;::::0;;;;;;;:30;;;;;;;;;8298:37;;;:25:::1;:37:::0;;;;;:40;;;;;;;;;8262:13;;8378:19;8278:97:::1;::::0;:61:::1;::::0;:15:::1;::::0;:19:::1;:61::i;:::-;:65:::0;::::1;:97::i;:::-;:119;;;;:::i;:::-;8443:10;8427:27;::::0;;;:15:::1;:27;::::0;;;;;;;:30;;;;;;;;;8262:135;;-1:-1:-1;8416:41:0;::::1;8412:123;;;-1:-1:-1::0;8505:10:0::1;8489:27;::::0;;;:15:::1;:27;::::0;;;;;;;:30;;;;;;;;;8412:123:::1;8643:10;8550:26;8626:28:::0;;;:16:::1;:28;::::0;;;;;;;:31;;;;;;;;;8579:8;;8613:45:::1;::::0;8579:8;;8613:12:::1;:45::i;:::-;8602:56:::0;-1:-1:-1;8684:22:0::1;:8:::0;8602:56;8684:12:::1;:22::i;:::-;8738:10;8721:28;::::0;;;:16:::1;:28;::::0;;;;;;;:31;;;;;;;;:55;;;;8673:33;-1:-1:-1;;8014:774:0::1;8064:3:::0;::::1;::::0;::::1;:::i;:::-;;;;8014:774;;;-1:-1:-1::0;8848:10:0::1;8830:29;::::0;;;:17:::1;:29;::::0;;;;;:43:::1;::::0;8864:8;8830:33:::1;:43::i;:::-;8816:10;8798:29;::::0;;;:17:::1;:29;::::0;;;;;;:75;;;;8889:28;;::::1;::::0;::::1;::::0;8908:8;;8889:28:::1;:::i;:::-;;;;;;;;7855:1070:::0;:::o;7574:273::-;7658:4;7675:142;7684:10;7696:7;7705:111;7742:15;7705:111;;;;;;;;;;;;;;;;;7717:10;7705:23;;;;:11;:23;;;;;;;;;:32;;;;;;;;;;;:111;:36;:111::i;15077:119::-;1466:5;;;;1452:10;:19;1444:64;;;;;;;;;;;;:::i;:::-;15162:15:::1;::::0;;;::::1;;::::0;;;:7:::1;:15;::::0;;;;:26;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;15077:119::o;6088:178::-;2072:6;;6179:4;;2072:6;;;;;2071:7;2063:16;;;;;;6196:40:::1;6206:10;6218:9;6229:6;6196:9;:40::i;13578:684::-:0;13668:4;1466:5;;;;1452:10;:19;1444:64;;;;;;;;;;;;:::i;:::-;13706:6:::1;:13;13693:2;:9;:26;13685:35;;;::::0;::::1;;13751:3;13739:2;:9;:15;13731:24;;;::::0;::::1;;13766:8;13790:6:::0;13785:80:::1;13802:6;:13;13798:1;:17;13785:80;;;13844:6;13851:1;13844:9;;;;;;;;;;;;;;;;;;;;;;13837:16;;;;;:::i;:::-;::::0;-1:-1:-1;13817:3:0;::::1;::::0;::::1;:::i;:::-;;;;13785:80;;;;13902:84;13931:3;13902:84;;;;;;;;;;;;;;;;;:24;13920:5:::0;;::::1;;13902:24:::0;;:17:::1;:24;::::0;;;;;;:84;:28:::1;:84::i;:::-;13875:24;13893:5:::0;;::::1;;13875:24:::0;;:17:::1;:24;::::0;;;;:111;;;;13997:230:::1;14014:2;:9;14010:1;:13;13997:230;;;14072:90;14101:6;14108:1;14101:9;;;;;;;;;;;;;;;;;;;;;;14072:90;;;;;;;;;;;;;;;;;:17;:24;14090:2;14093:1;14090:5;;;;;;;;;;;;;;;;;;;;;;14072:24;;;;;;;;;;;;;;;;:28;;:90;;;;;:::i;:::-;14045:17;:24;14063:2;14066:1;14063:5;;;;;;;;;;;;;;;;;;;;;;14045:24;;;;;;;;;;;;;;;:117;;;;14198:2;14201:1;14198:5;;;;;;;;;;;;;;;;;;;;;;14182:33;;14191:5;::::0;::::1;;;;;;;;14182:33;;;14205:6;14212:1;14205:9;;;;;;;;;;;;;;;;;;;;;;14182:33;;;;;;:::i;:::-;;;;;;;;14025:3:::0;::::1;::::0;::::1;:::i;:::-;;;;13997:230;;;-1:-1:-1::0;;14244:9:0;;;13578:684;-1:-1:-1;;13578:684:0:o;14270:799::-;14360:4;1466:5;;;;1452:10;:19;1444:64;;;;;;;;;;;;:::i;:::-;14399:6:::1;:13;14386:2;:9;:26;14378:35;;;::::0;::::1;;14444:3;14432:2;:9;:15;14424:24;;;::::0;::::1;;14459:8;14483:6:::0;14478:80:::1;14495:6;:13;14491:1;:17;14478:80;;;14537:6;14544:1;14537:9;;;;;;;;;;;;;;;;;;;;;;14530:16;;;;;:::i;:::-;::::0;-1:-1:-1;14510:3:0;::::1;::::0;::::1;:::i;:::-;;;;14478:80;;;;14595:84;14624:3;14595:84;;;;;;;;;;;;;;;;;:24;14613:5:::0;;::::1;;14595:24:::0;;:17:::1;:24;::::0;;;;;;:84;:28:::1;:84::i;:::-;14568:24;14586:5:::0;;::::1;;14568:24:::0;;:17:::1;:24;::::0;;;;:111;;;;14690:344:::1;14707:2;:9;14703:1;:13;14690:344;;;14738:10;14753:14;:21;14768:2;14771:1;14768:5;;;;;;;;;;;;;;;;;;;;;;14753:21;;;;;;;;;;;;;;;;14751:23;;;;;:::i;:::-;;;;;;;14738:36;;14821:6;14828:1;14821:9;;;;;;;;;;;;;;;;;;;;;;14789:15;:22;14805:2;14808:1;14805:5;;;;;;;;;;;;;;;;;;;;;;14789:22;;;;;;;;;;;;;;;:29;14812:5;14789:29;;;;;;;;;;;:41;;;;14905:18;;14887:15;:36;;;;:::i;:::-;14845:25;:32;14871:2;14874:1;14871:5;;;;;;;;;;;;;;;;;;;;;;14845:32;;;;;;;;;;;;;;;:39;14878:5;14845:39;;;;;;;;;;;:78;;;;14968:1;14938:13;:20;14952:2;14955:1;14952:5;;;;;;;;;;;;;;;;;;;;;;14938:20;;;;;;;;;;;;;;;:27;14959:5;14938:27;;;;;;;;;;;:31;;;;15005:2;15008:1;15005:5;;;;;;;;;;;;;;;;;;;;;;14989:33;;14998:5;::::0;::::1;;;;;;;;14989:33;;;15012:6;15019:1;15012:9;;;;;;;;;;;;;;;;;;;;;;14989:33;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;14718:3:0;::::1;::::0;::::1;:::i;:::-;;;;14690:344;;1191:23:::0;;;;;;:::o;6616:737::-;2072:6;;;;;;;2071:7;2063:16;;;;;;6840:13:::1;::::0;::::1;6757:18;6840:13:::0;;;:6:::1;:13;::::0;;;;:15;;5198:95:::1;::::0;6816:5;;6823:7;;6832:6;;6840:15;6757:18;6840:15:::1;::::0;::::1;:::i;:::-;;;;;6857:8;6788:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6778:89;;;;;;6757:110;;6878:14;6934:16;6952:10;6905:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6895:69;;;;;;6878:86;;6975:17;6995:26;7005:6;7013:1;7016;7019;6995:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;6995:26:0::1;::::0;;;;;-1:-1:-1;;7040:23:0::1;::::0;::::1;7032:66;;;;;;;;;;;;:::i;:::-;7130:5;7117:18;;:9;:18;;;7109:56;;;;;;;;;;;;:::i;:::-;7203:8;7184:15;:27;;7176:70;;;;;;;;;;;;:::i;:::-;7259:18;::::0;;::::1;;::::0;;;:11:::1;:18;::::0;;;;;;;:27;;::::1;::::0;;;;;;;;;;;:36;;;7313:32;::::1;::::0;::::1;::::0;7289:6;;7313:32:::1;:::i;:::-;;;;;;;;2090:1;;;6616:737:::0;;;;;;;:::o;8933:293::-;9031:6;9018:10;;:19;9009:57;;;;;;;;;;;;:::i;:::-;9094:10;9086:19;;;;:7;:19;;;;;;;;9077:54;;;;;;;;;;;;:::i;:::-;9155:10;;:22;;9170:6;9155:14;:22::i;:::-;9142:10;:35;9188:29;9194:4;9200:6;9208:8;9188:5;:29::i;:::-;8933:293;;;:::o;15414:178::-;15508:12;1466:5;;;;1452:10;:19;1444:64;;;;;;;;;;;;:::i;:::-;15570:5:::1;::::0;15540:44:::1;::::0;;;;:29:::1;::::0;;::::1;::::0;::::1;::::0;:44:::1;::::0;15570:5;;::::1;::::0;15577:6;;15540:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15533:51:::0;15414:178;-1:-1:-1;;;15414:178:0:o;5030:22::-;;;;:::o;9870:142::-;9977:18;;;;9953:4;9977:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9870:142::o;10804:761::-;10906:20;;;10872:17;10906:20;;;:14;:20;;;;;;10902:39;;-1:-1:-1;10940:1:0;10933:8;;10902:39;10966:1;10952:606;10974:20;;;;;;;:14;:20;;;;;;10969:25;;10952:606;;11048:22;;;;;;;:16;:22;;;;;;;;:25;;;;;;;;;11020:21;;;:15;:21;;;;;:24;;;;;;;;;:53;11016:67;;;11075:8;;11016:67;11102:31;;;;;;;:25;:31;;;;;;;;:34;;;;;;;;;11139:15;-1:-1:-1;11098:63:0;;;11156:5;;11098:63;11280:19;;11252:21;;;11176:13;11252:21;;;:15;:21;;;;;;;;:24;;;;;;;;;11212:31;;;:25;:31;;;;;:34;;;;;;;;;11176:13;;11280:19;11192:85;;:55;;:15;;:19;:55::i;:85::-;:107;;;;:::i;:::-;11329:21;;;;;;;:15;:21;;;;;;;;:24;;;;;;;;;11176:123;;-1:-1:-1;11318:35:0;;11314:111;;;-1:-1:-1;11385:21:0;;;;;;;:15;:21;;;;;;;;:24;;;;;;;;;11314:111;11464:22;;;;;;;:16;:22;;;;;;;;:25;;;;;;;;;11451:39;;:8;;:12;:39::i;:::-;11440:50;-1:-1:-1;11520:26:0;:12;11440:50;11520:16;:26::i;:::-;11505:41;;10952:606;;10996:3;;;;:::i;:::-;;;;10952:606;;;;10804:761;;;:::o;1536:155::-;1466:5;;;;1452:10;:19;1444:64;;;;;;;;;;;;:::i;:::-;1639:8:::1;::::0;::::1;1622:25:::0;;::::1;1639:8:::0;::::1;1622:25;;1614:34;;;::::0;::::1;;1659:8;:24:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1536:155::o;12250:350::-;12340:19;;;12332:76;;;;;;;;;;;;:::i;:::-;12427:21;;;12419:76;;;;;;;;;;;;:::i;:::-;12508:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;12560:32;;;;;12538:6;;12560:32;:::i;:::-;;;;;;;;12250:350;;;:::o;12608:526::-;12702:20;;;12694:79;;;;;;;;;;;;:::i;:::-;12792:23;;;12784:80;;;;;;;;;;;;:::i;:::-;12905:88;12935:6;12905:88;;;;;;;;;;;;;;;;;:25;;;;;;;:17;:25;;;;;;;:88;:29;:88::i;:::-;12877:25;;;;;;;;:17;:25;;;;;;:116;;;;13035:28;;;;;;;:40;;13068:6;13035:32;:40::i;:::-;13004:28;;;;;;;;:17;:28;;;;;;;:71;;;;13091:35;;;;;;;;;;13119:6;;13091:35;:::i;2909:192::-;2995:7;3031:12;3023:6;;;;3015:29;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3055:9:0;3067:5;3071:1;3067;:5;:::i;:::-;3055:17;2909:192;-1:-1:-1;;;;;2909:192:0:o;13142:422::-;13233:20;;;13218:10;13233:20;;;:14;:20;;;;;13231:22;;13218:10;;13231:22;;;:::i;:::-;;;;;-1:-1:-1;13264:21:0;;;;;;;:15;:21;;;;;;;;:28;;;;;;;;:37;;;13371:18;;13231:22;;-1:-1:-1;13353:36:0;;:15;:36;:::i;:::-;13312:31;;;;;;;;:25;:31;;;;;;;;:38;;;;;;;;:77;;;;13445:5;;;;;13427:24;;:17;:24;;;;;:36;;13456:6;13427:28;:36::i;:::-;13400:24;13418:5;;;;;;13400:24;;:17;:24;;;;;;;;:63;;;;13474:19;;;;;;:13;:19;;;;;:26;;;;;;;;;:37;;;13536:5;;13527:29;;13474:19;;13536:5;;13527:29;;;;13549:6;;13527:29;:::i;:::-;;;;;;;;13142:422;;;;:::o;2420:133::-;2478:7;2505:40;2509:1;2512;2505:40;;;;;;;;;;;;;;;;;:3;:40::i;2765:136::-;2823:7;2850:43;2854:1;2857;2850:43;;;;;;;;;;;;;;;;;:3;:43::i;1699:204::-;1774:8;;;;1760:10;:22;1752:31;;;;;;1827:8;;;1820:5;;1799:37;;1827:8;;;;;1820:5;;;;1799:37;;;1855:8;;;;1847:16;;;;;;1855:8;;;1847:16;;;;1874:21;;;1699:204::o;3109:250::-;3167:7;3191:6;3187:47;;-1:-1:-1;3221:1:0;3214:8;;3187:47;3246:9;3258:5;3262:1;3258;:5;:::i;:::-;3246:17;-1:-1:-1;3291:1:0;3282:5;3286:1;3246:17;3282:5;:::i;:::-;:10;3274:56;;;;;;;;;;;;:::i;2565:192::-;2651:7;;2683:5;2687:1;2683;:5;:::i;:::-;2671:17;-1:-1:-1;2715:12:0;2707:6;;;;2699:29;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2748:1:0;2565:192;-1:-1:-1;;;;2565:192:0:o;14:198:1:-;84:20;;144:42;133:54;;123:65;;113:2;;202:1;199;192:12;217:705;;330:3;323:4;315:6;311:17;307:27;297:2;;352:5;345;338:20;297:2;392:6;379:20;418:4;442:65;457:49;503:2;457:49;:::i;:::-;442:65;:::i;:::-;541:15;;;572:12;;;;604:15;;;650:11;;;638:24;;634:33;;631:42;-1:-1:-1;628:2:1;;;690:5;683;676:20;628:2;716:5;730:163;744:2;741:1;738:9;730:163;;;801:17;;789:30;;839:12;;;;871;;;;762:1;755:9;730:163;;;-1:-1:-1;911:5:1;;287:635;-1:-1:-1;;;;;;;287:635:1:o;927:198::-;;1039:2;1027:9;1018:7;1014:23;1010:32;1007:2;;;1060:6;1052;1045:22;1007:2;1088:31;1109:9;1088:31;:::i;1130:274::-;;;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1280:6;1272;1265:22;1227:2;1308:31;1329:9;1308:31;:::i;:::-;1298:41;;1358:40;1394:2;1383:9;1379:18;1358:40;:::i;:::-;1348:50;;1217:187;;;;;:::o;1409:342::-;;;;1555:2;1543:9;1534:7;1530:23;1526:32;1523:2;;;1576:6;1568;1561:22;1523:2;1604:31;1625:9;1604:31;:::i;:::-;1594:41;;1654:40;1690:2;1679:9;1675:18;1654:40;:::i;:::-;1644:50;;1741:2;1730:9;1726:18;1713:32;1703:42;;1513:238;;;;;:::o;1756:717::-;;;;;;;;1968:3;1956:9;1947:7;1943:23;1939:33;1936:2;;;1990:6;1982;1975:22;1936:2;2018:31;2039:9;2018:31;:::i;:::-;2008:41;;2068:40;2104:2;2093:9;2089:18;2068:40;:::i;:::-;2058:50;;2155:2;2144:9;2140:18;2127:32;2117:42;;2206:2;2195:9;2191:18;2178:32;2168:42;;2260:3;2249:9;2245:19;2232:33;2305:4;2298:5;2294:16;2287:5;2284:27;2274:2;;2330:6;2322;2315:22;2274:2;1926:547;;;;-1:-1:-1;1926:547:1;;;;2358:5;2410:3;2395:19;;2382:33;;-1:-1:-1;2462:3:1;2447:19;;;2434:33;;1926:547;-1:-1:-1;;1926:547:1:o;2478:329::-;;;2604:2;2592:9;2583:7;2579:23;2575:32;2572:2;;;2625:6;2617;2610:22;2572:2;2653:31;2674:9;2653:31;:::i;:::-;2643:41;;2734:2;2723:9;2719:18;2706:32;2747:30;2771:5;2747:30;:::i;:::-;2796:5;2786:15;;;2562:245;;;;;:::o;2812:266::-;;;2941:2;2929:9;2920:7;2916:23;2912:32;2909:2;;;2962:6;2954;2947:22;2909:2;2990:31;3011:9;2990:31;:::i;:::-;2980:41;3068:2;3053:18;;;;3040:32;;-1:-1:-1;;;2899:179:1:o;3083:334::-;;;;3229:2;3217:9;3208:7;3204:23;3200:32;3197:2;;;3250:6;3242;3235:22;3197:2;3278:31;3299:9;3278:31;:::i;:::-;3268:41;3356:2;3341:18;;3328:32;;-1:-1:-1;3407:2:1;3392:18;;;3379:32;;3187:230;-1:-1:-1;;;3187:230:1:o;3422:1226::-;;;3601:2;3589:9;3580:7;3576:23;3572:32;3569:2;;;3622:6;3614;3607:22;3569:2;3667:9;3654:23;3696:18;3737:2;3729:6;3726:14;3723:2;;;3758:6;3750;3743:22;3723:2;3801:6;3790:9;3786:22;3776:32;;3846:7;3839:4;3835:2;3831:13;3827:27;3817:2;;3873:6;3865;3858:22;3817:2;3914;3901:16;3936:4;3960:65;3975:49;4021:2;3975:49;:::i;3960:65::-;4059:15;;;4090:12;;;;4122:11;;;4160;;;4152:20;;4148:29;;4145:42;-1:-1:-1;4142:2:1;;;4205:6;4197;4190:22;4142:2;4232:6;4223:15;;4247:171;4261:2;4258:1;4255:9;4247:171;;;4318:25;4339:3;4318:25;:::i;:::-;4306:38;;4279:1;4272:9;;;;;4364:12;;;;4396;;4247:171;;;-1:-1:-1;4437:5:1;-1:-1:-1;;4480:18:1;;4467:32;;-1:-1:-1;;4511:16:1;;;4508:2;;;4545:6;4537;4530:22;4508:2;;4573:69;4634:7;4623:8;4612:9;4608:24;4573:69;:::i;:::-;4563:79;;;3559:1089;;;;;:::o;4653:257::-;;4773:2;4761:9;4752:7;4748:23;4744:32;4741:2;;;4794:6;4786;4779:22;4741:2;4831:9;4825:16;4850:30;4874:5;4850:30;:::i;4915:190::-;;5027:2;5015:9;5006:7;5002:23;4998:32;4995:2;;;5048:6;5040;5033:22;4995:2;-1:-1:-1;5076:23:1;;4985:120;-1:-1:-1;4985:120:1:o;5110:444::-;5380:66;5368:79;;5472:1;5463:11;;5456:27;;;;5508:2;5499:12;;5492:28;5545:2;5536:12;;5358:196::o;5559:226::-;5735:42;5723:55;;;;5705:74;;5693:2;5678:18;;5660:125::o;5790:297::-;5994:42;5982:55;;;;5964:74;;6069:2;6054:18;;6047:34;5952:2;5937:18;;5919:168::o;6092:187::-;6257:14;;6250:22;6232:41;;6220:2;6205:18;;6187:92::o;6284:177::-;6430:25;;;6418:2;6403:18;;6385:76::o;6466:614::-;6753:25;;;6797:42;6875:15;;;6870:2;6855:18;;6848:43;6927:15;;;;6922:2;6907:18;;6900:43;6974:2;6959:18;;6952:34;7017:3;7002:19;;6995:35;;;;7061:3;7046:19;;7039:35;6740:3;6725:19;;6707:373::o;7085:398::-;7312:25;;;7385:4;7373:17;;;;7368:2;7353:18;;7346:45;7422:2;7407:18;;7400:34;7465:2;7450:18;;7443:34;7299:3;7284:19;;7266:217::o;7488:662::-;;7629:2;7658;7647:9;7640:21;7690:6;7684:13;7733:6;7728:2;7717:9;7713:18;7706:34;7758:4;7771:140;7785:6;7782:1;7779:13;7771:140;;;7880:14;;;7876:23;;7870:30;7846:17;;;7865:2;7842:26;7835:66;7800:10;;7771:140;;;7929:6;7926:1;7923:13;7920:2;;;7999:4;7994:2;7985:6;7974:9;7970:22;7966:31;7959:45;7920:2;-1:-1:-1;8066:2:1;8054:15;8071:66;8050:88;8035:104;;;;8141:2;8031:113;;7609:541;-1:-1:-1;;;7609:541:1:o;8155:349::-;8357:2;8339:21;;;8396:2;8376:18;;;8369:30;8435:27;8430:2;8415:18;;8408:55;8495:2;8480:18;;8329:175::o;8509:356::-;8711:2;8693:21;;;8730:18;;;8723:30;8789:34;8784:2;8769:18;;8762:62;8856:2;8841:18;;8683:182::o;8870:345::-;9072:2;9054:21;;;9111:2;9091:18;;;9084:30;9150:23;9145:2;9130:18;;9123:51;9206:2;9191:18;;9044:171::o;9220:410::-;9422:2;9404:21;;;9461:2;9441:18;;;9434:30;9500:34;9495:2;9480:18;;9473:62;9571:16;9566:2;9551:18;;9544:44;9620:3;9605:19;;9394:236::o;9635:354::-;9837:2;9819:21;;;9876:2;9856:18;;;9849:30;9915:32;9910:2;9895:18;;9888:60;9980:2;9965:18;;9809:180::o;9994:354::-;10196:2;10178:21;;;10235:2;10215:18;;;10208:30;10274:32;10269:2;10254:18;;10247:60;10339:2;10324:18;;10168:180::o;10353:348::-;10555:2;10537:21;;;10594:2;10574:18;;;10567:30;10633:26;10628:2;10613:18;;10606:54;10692:2;10677:18;;10527:174::o;10706:408::-;10908:2;10890:21;;;10947:2;10927:18;;;10920:30;10986:34;10981:2;10966:18;;10959:62;11057:14;11052:2;11037:18;;11030:42;11104:3;11089:19;;10880:234::o;11119:397::-;11321:2;11303:21;;;11360:2;11340:18;;;11333:30;11399:34;11394:2;11379:18;;11372:62;11470:3;11465:2;11450:18;;11443:31;11506:3;11491:19;;11293:223::o;11521:406::-;11723:2;11705:21;;;11762:2;11742:18;;;11735:30;11801:34;11796:2;11781:18;;11774:62;11872:12;11867:2;11852:18;;11845:40;11917:3;11902:19;;11695:232::o;11932:408::-;12134:2;12116:21;;;12173:2;12153:18;;;12146:30;12212:34;12207:2;12192:18;;12185:62;12283:14;12278:2;12263:18;;12256:42;12330:3;12315:19;;12106:234::o;12345:352::-;12547:2;12529:21;;;12586:2;12566:18;;;12559:30;12625;12620:2;12605:18;;12598:58;12688:2;12673:18;;12519:178::o;12702:405::-;12904:2;12886:21;;;12943:2;12923:18;;;12916:30;12982:34;12977:2;12962:18;;12955:62;13053:11;13048:2;13033:18;;13026:39;13097:3;13082:19;;12876:231::o;13112:407::-;13314:2;13296:21;;;13353:2;13333:18;;;13326:30;13392:34;13387:2;13372:18;;13365:62;13463:13;13458:2;13443:18;;13436:41;13509:3;13494:19;;13286:233::o;13524:345::-;13726:2;13708:21;;;13765:2;13745:18;;;13738:30;13804:23;13799:2;13784:18;;13777:51;13860:2;13845:18;;13698:171::o;14056:391::-;14287:25;;;14343:2;14328:18;;14321:34;;;;14386:2;14371:18;;14364:34;14429:2;14414:18;;14407:34;14274:3;14259:19;;14241:206::o;14452:184::-;14624:4;14612:17;;;;14594:36;;14582:2;14567:18;;14549:87::o;14641:251::-;14711:2;14705:9;14741:17;;;14788:18;14773:34;;14809:22;;;14770:62;14767:2;;;14835:18;;:::i;:::-;14871:2;14864:22;14685:207;;-1:-1:-1;14685:207:1:o;14897:192::-;;14996:18;14988:6;14985:30;14982:2;;;15018:18;;:::i;:::-;-1:-1:-1;15078:4:1;15059:17;;;15055:28;;14972:117::o;15094:128::-;;15165:1;15161:6;15158:1;15155:13;15152:2;;;15171:18;;:::i;:::-;-1:-1:-1;15207:9:1;;15142:80::o;15227:274::-;;15293:1;15283:2;;15328:77;15325:1;15318:88;15429:4;15426:1;15419:15;15457:4;15454:1;15447:15;15283:2;-1:-1:-1;15486:9:1;;15273:228::o;15506:::-;;15672:1;15604:66;15600:74;15597:1;15594:81;15589:1;15582:9;15575:17;15571:105;15568:2;;;15679:18;;:::i;:::-;-1:-1:-1;15719:9:1;;15558:176::o;15739:125::-;;15807:1;15804;15801:8;15798:2;;;15812:18;;:::i;:::-;-1:-1:-1;15849:9:1;;15788:76::o;15869:195::-;;15939:66;15932:5;15929:77;15926:2;;;16009:18;;:::i;:::-;-1:-1:-1;16056:1:1;16045:13;;15916:148::o;16069:184::-;16121:77;16118:1;16111:88;16218:4;16215:1;16208:15;16242:4;16239:1;16232:15;16258:184;16310:77;16307:1;16300:88;16407:4;16404:1;16397:15;16431:4;16428:1;16421:15;16447:120;16535:5;16528:13;16521:21;16514:5;16511:32;16501:2;;16557:1;16554;16547:12
Swarm Source
ipfs://85e628f9b5334d822e68a8f3858e1bd5b5df6644928fbf8f7c2d058c85517f30
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.