Feature Tip: Add private address tag to any address under My Name Tag !
CardioCoin token contract has migrated to a new address.
ERC-20
Overview
Max Total Supply
12,000,000,000 CRDC
Holders
836 ( 0.247%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,559,000 CRDCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CardioCoin
Compiler Version
v0.5.8+commit.23d335f2
Contract Source Code (Solidity Multiple files format)
pragma solidity >= 0.5.0; import "./Ownable.sol"; import "./SafeMath.sol"; import "./ERC20.sol"; contract CardioCoin is ERC20, Ownable { using SafeMath for uint256; uint public constant UNLOCK_PERIOD = 30 days; uint public constant UNLOCK_TIME = 1572566400; // 11월 1일 0시 string public constant name = "CardioCoin"; string public constant symbol = "CRDC"; uint8 public constant decimals = 18; uint256 internal totalSupply_ = 12000000000 * (10 ** uint256(decimals)); struct balance { uint256 available; uint256 lockedUp; } struct lockUp { uint256 amount; uint unlockTimestamp; uint unlockCount; } struct locker { bool isLocker; string role; uint lockUpPeriod; uint unlockCount; bool useFixedTime; } mapping(address => balance) internal _balances; mapping(address => lockUp[]) internal _lockUps; mapping(address => locker) internal _lockerList; event Burn(address indexed burner, uint256 value); event AddToLocker(address indexed owner, string role, uint lockUpPeriod, uint unlockCount); event TokenLocked(address indexed owner, uint256 amount); event TokenUnlocked(address indexed owner, uint256 amount); constructor() public Ownable() { balance memory b; b.available = totalSupply_; _balances[msg.sender] = b; emit Transfer(address(0), msg.sender, totalSupply_); } //Getter Functions function lockerInfo(address _operator)public view returns(bool isLocker, string memory role, uint lockUpPeriod, uint unlockCount) { locker memory l = _lockerList[_operator]; isLocker = l.isLocker; role = l.role; lockUpPeriod = l.lockUpPeriod; unlockCount = l.unlockCount; } function balanceInfo(address user) view public returns(uint256 available, uint256 lockedUp) { balance memory b = _balances[user]; available = b.available; lockedUp = b.lockedUp; } function lockUpInfo(address user, uint256 index) view public returns (uint256 amount, uint256 unlockTimestamp, uint256 unlockCount) { lockUp memory l = _lockUps[user][index]; amount = l.amount; unlockTimestamp = l.unlockTimestamp; unlockCount = l.unlockCount; } function lockUpLength(address user) view public returns (uint256) { lockUp[] memory l = _lockUps[user]; return l.length; } // ERC20 Custom function totalSupply() public view returns (uint256) { return totalSupply_; } function _transfer(address from, address to, uint256 value) internal { locker storage l = _lockerList[from]; this.unlockAll(from); require(value <= _balances[from].available); require(to != address(0)); _balances[from].available = _balances[from].available.sub(value); if (l.isLocker) { if (l.useFixedTime) { if (UNLOCK_TIME <= now) { uint elapsedPeriod = (now - UNLOCK_TIME) / UNLOCK_PERIOD + 1; if (elapsedPeriod < l.unlockCount) { uint unlockedAmount = (value / l.unlockCount).mul(elapsedPeriod); _balances[to].available = _balances[to].available.add(unlockedAmount); addLockedUpTokens(to, value.sub(unlockedAmount), UNLOCK_TIME + UNLOCK_PERIOD * elapsedPeriod - now, l.unlockCount - elapsedPeriod); } else { l.isLocker = false; _balances[to].available = _balances[to].available.add(value); } } else { addLockedUpTokens(to, value, UNLOCK_TIME - now, l.unlockCount); } } else { addLockedUpTokens(to, value, l.lockUpPeriod, l.unlockCount); } } else { _balances[to].available = _balances[to].available.add(value); } emit Transfer(from, to, value); } function balanceOf(address _owner) public view returns (uint256) { return _balances[_owner].available.add(_balances[_owner].lockedUp); } // Burnable function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= _balances[_who].available); _balances[_who].available = _balances[_who].available.sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } // Lockup function addAddressToLockerList(address _operator, string memory role, uint lockUpPeriod, uint unlockCount, bool useFixedTime) public onlyOwner { locker memory lockerData = _lockerList[_operator]; require(!lockerData.isLocker); require(unlockCount > 0); lockerData.isLocker = true; lockerData.role = role; lockerData.lockUpPeriod = lockUpPeriod; lockerData.unlockCount = unlockCount; lockerData.useFixedTime = useFixedTime; _lockerList[_operator] = lockerData; emit AddToLocker(_operator, role, lockUpPeriod, unlockCount); } function lockedUpBalanceOf(address _owner) public view returns (uint256) { lockUp[] memory lockups = _lockUps[_owner]; balance memory b = _balances[_owner]; uint256 lockedUpBalance = b.lockedUp; for (uint i = 0; i < lockups.length; i++) { lockUp memory l = lockups[i]; uint count = calculateUnlockCount(l.unlockTimestamp, l.unlockCount); uint256 unlockedAmount = l.amount.mul(count).div(l.unlockCount); lockedUpBalance = lockedUpBalance.sub(unlockedAmount); } return lockedUpBalance; } function addLockedUpTokens(address _owner, uint256 amount, uint lockUpPeriod, uint unlockCount) internal { lockUp[] storage lockups = _lockUps[_owner]; lockups.length += 1; lockUp storage l = lockups[lockups.length - 1]; l.amount = amount; l.unlockTimestamp = now.add(lockUpPeriod); l.unlockCount = unlockCount; balance storage b = _balances[_owner]; b.lockedUp = b.lockedUp.add(amount); emit TokenLocked(_owner, amount); } function unlockAll(address _owner) external returns (bool success) { balance storage b = _balances[_owner]; lockUp[] storage lockupList = _lockUps[_owner]; uint256 unlocked = 0; for (uint i = 0; i < lockupList.length; i++){ uint256 unlocked_i = _unlock(_owner,i); unlocked = unlocked.add(unlocked_i); //when fullyUnlocked if(lockupList[i].unlockCount == 0) { //remove lockUp storage temp = lockupList[lockupList.length.sub(1)]; lockupList[i] = temp; lockupList.length--; i--; } } //add unlocked to available b.available = b.available.add(unlocked); //sub unlocked from lockedUp b.lockedUp = b.lockedUp.sub(unlocked); success = true; emit TokenUnlocked(_owner, unlocked); } function _unlock(address _owner, uint256 index) internal returns(uint256 unlocked) { lockUp storage l = _lockUps[_owner][index]; uint count = calculateUnlockCount(l.unlockTimestamp, l.unlockCount); if( count == 0 ){ return 0; } // if fully unlocked, unlocked amount will match l.amount unlocked = l.amount.mul(count).div(l.unlockCount); l.unlockTimestamp = l.unlockTimestamp.add(UNLOCK_PERIOD * count); l.amount = l.amount.sub(unlocked); l.unlockCount = l.unlockCount.sub(count); } function calculateUnlockCount(uint timestamp, uint unlockCount) view internal returns (uint) { if (now < timestamp) { return 0; } uint256 timeCount = (now.sub(timestamp)).div(UNLOCK_PERIOD).add(1); if (timeCount > unlockCount){ return unlockCount; } else { return timeCount; } } }
pragma solidity ^0.5.0; import "./IERC20.sol"; import "./SafeMath.sol"; /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md * Originally based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol * * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for * all accounts just by listening to said events. Note that this isn't required by the specification, and other * compliant implementations may not do it. */ contract ERC20 is IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowed; uint256 private _totalSupply; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param owner The address to query the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public view returns (uint256) { return _balances[owner]; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param owner address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowed[owner][spender]; } /** * @dev Transfer token for a specified address * @param to The address to transfer to. * @param value The amount to be transferred. */ function transfer(address to, uint256 value) public returns (bool) { _transfer(msg.sender, to, value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Transfer tokens from one address to another. * Note that while this function emits an Approval event, this is not required as per the specification, * and other compliant implementations may not emit the event. * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 the amount of tokens to be transferred */ function transferFrom(address from, address to, uint256 value) public returns (bool) { _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value); _transfer(from, to, value); emit Approval(from, msg.sender, _allowed[from][msg.sender]); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue); emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue); emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Transfer token for a specified addresses * @param from The address to transfer from. * @param to The address to transfer to. * @param value The amount to be transferred. */ function _transfer(address from, address to, uint256 value) internal { require(to != address(0)); _balances[from] = _balances[from].sub(value); _balances[to] = _balances[to].add(value); emit Transfer(from, to, value); } /** * @dev Internal function that mints an amount of the token and assigns it to * an account. This encapsulates the modification of balances such that the * proper events are emitted. * @param account The account that will receive the created tokens. * @param value The amount that will be created. */ function _mint(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply.add(value); _balances[account] = _balances[account].add(value); emit Transfer(address(0), account, value); } /** * @dev Internal function that burns an amount of the token of a given * account. * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burn(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply.sub(value); _balances[account] = _balances[account].sub(value); emit Transfer(account, address(0), value); } /** * @dev Internal function that burns an amount of the token of a given * account, deducting from the sender's allowance for said account. Uses the * internal burn function. * Emits an Approval event (reflecting the reduced allowance). * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burnFrom(address account, uint256 value) internal { _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value); _burn(account, value); emit Approval(account, msg.sender, _allowed[account][msg.sender]); } }
pragma solidity ^0.5.0; /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ interface IERC20 { function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); }
pragma solidity ^0.5.0; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
pragma solidity ^0.5.0; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"lockUpLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"index","type":"uint256"}],"name":"lockUpInfo","outputs":[{"name":"amount","type":"uint256"},{"name":"unlockTimestamp","type":"uint256"},{"name":"unlockCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"UNLOCK_PERIOD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"}],"name":"lockerInfo","outputs":[{"name":"isLocker","type":"bool"},{"name":"role","type":"string"},{"name":"lockUpPeriod","type":"uint256"},{"name":"unlockCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"UNLOCK_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"lockedUpBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"},{"name":"role","type":"string"},{"name":"lockUpPeriod","type":"uint256"},{"name":"unlockCount","type":"uint256"},{"name":"useFixedTime","type":"bool"}],"name":"addAddressToLockerList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"balanceInfo","outputs":[{"name":"available","type":"uint256"},{"name":"lockedUp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"unlockAll","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"role","type":"string"},{"indexed":false,"name":"lockUpPeriod","type":"uint256"},{"indexed":false,"name":"unlockCount","type":"uint256"}],"name":"AddToLocker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
6080604052601260ff16600a0a6402cb4178000260045534801561002257600080fd5b5033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36100e96101ba565b60045481600001818152505080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040518082815260200191505060405180910390a3506101d4565b604051806040016040528060008152602001600081525090565b612d3f80620001e46000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806356219f9e116100de5780638f32d59b11610097578063a9059cbb11610071578063a9059cbb14610900578063c4f3a85314610966578063dd62ed3e146109c2578063f2fde38b14610a3a57610173565b80638f32d59b146107f557806395d89b4114610817578063a457c2d71461089a57610173565b806356219f9e14610597578063647b1142146105ef57806370a08231146106ea578063715018a61461074257806378c7d9791461074c5780638da5cb5b146107ab57610173565b8063259a28cf11610130578063259a28cf146103cd578063313ce567146103eb57806338e3de491461040f57806339509351146104e5578063413198311461054b57806342966c681461056957610173565b806306fdde031461017857806307799f0d146101fb578063095ea7b31461025357806318160ddd146102b95780631d50a60d146102d757806323b872dd14610347575b600080fd5b610180610a7e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101c05780820151818401526020810190506101a5565b50505050905090810190601f1680156101ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023d6004803603602081101561021157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ab7565b6040518082815260200191505060405180910390f35b61029f6004803603604081101561026957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b7a565b604051808215151515815260200191505060405180910390f35b6102c1610ca5565b6040518082815260200191505060405180910390f35b610323600480360360408110156102ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610caf565b60405180848152602001838152602001828152602001935050505060405180910390f35b6103b36004803603606081101561035d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d5c565b604051808215151515815260200191505060405180910390f35b6103d5610f64565b6040518082815260200191505060405180910390f35b6103f3610f6b565b604051808260ff1660ff16815260200191505060405180910390f35b6104516004803603602081101561042557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f70565b604051808515151515815260200180602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156104a757808201518184015260208101905061048c565b50505050905090810190601f1680156104d45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b610531600480360360408110156104fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110db565b604051808215151515815260200191505060405180910390f35b610553611310565b6040518082815260200191505060405180910390f35b6105956004803603602081101561057f57600080fd5b8101908080359060200190929190505050611318565b005b6105d9600480360360208110156105ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611325565b6040518082815260200191505060405180910390f35b6106e8600480360360a081101561060557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561064257600080fd5b82018360208201111561065457600080fd5b8035906020019184600183028401116401000000008311171561067657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035151590602001909291905050506114f4565b005b61072c6004803603602081101561070057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061181e565b6040518082815260200191505060405180910390f35b61074a6118be565b005b61078e6004803603602081101561076257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611990565b604051808381526020018281526020019250505060405180910390f35b6107b3611a0f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107fd611a39565b604051808215151515815260200191505060405180910390f35b61081f611a91565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085f578082015181840152602081019050610844565b50505050905090810190601f16801561088c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108e6600480360360408110156108b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aca565b604051808215151515815260200191505060405180910390f35b61094c6004803603604081101561091657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cff565b604051808215151515815260200191505060405180910390f35b6109a86004803603602081101561097c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d16565b604051808215151515815260200191505060405180910390f35b610a24600480360360408110156109d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f35565b6040518082815260200191505060405180910390f35b610a7c60048036036020811015610a5057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fbc565b005b6040518060400160405280600a81526020017f43617264696f436f696e0000000000000000000000000000000000000000000081525081565b60006060600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610b6a5783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190610b1a565b5050505090508051915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb557600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600454905090565b6000806000610cbc612b97565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208581548110610d0657fe5b906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820154815250509050806000015193508060200151925080604001519150509250925092565b6000610ded82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd990919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e78848484611ff9565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b62278d0081565b601281565b60006060600080610f7f612bb8565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561107d5780601f106110525761010080835404028352916020019161107d565b820191906000526020600020905b81548152906001019060200180831161106057829003601f168201915b5050505050815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581525050905080600001519450806020015193508060400151925080606001519150509193509193565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561111657600080fd5b6111a582600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256c90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b635dbb758081565b611322338261258b565b50565b60006060600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156113d85783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190611388565b5050505090506113e6612beb565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050905060008160200151905060008090505b83518110156114e857611466612b97565b84828151811061147257fe5b60200260200101519050600061149082602001518360400151612748565b905060006114c183604001516114b38486600001516127b690919063ffffffff16565b6127f090919063ffffffff16565b90506114d68186611fd990919063ffffffff16565b94505050508080600101915050611455565b50809350505050919050565b6114fc611a39565b61150557600080fd5b61150d612bb8565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561160b5780601f106115e05761010080835404028352916020019161160b565b820191906000526020600020905b8154815290600101906020018083116115ee57829003601f168201915b5050505050815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581525050905080600001511561165457600080fd5b6000831161166157600080fd5b600181600001901515908115158152505084816020018190525083816040018181525050828160600181815250508181608001901515908115158152505080600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101908051906020019061171b929190612c05565b50604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083151502179055509050508573ffffffffffffffffffffffffffffffffffffffff167fa6d9befabd290d7508939bd7443f80373d25f6667021c137fc0d258c24e3cba28686866040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156117da5780820151818401526020810190506117bf565b50505050905090810190601f1680156118075780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2505050505050565b60006118b7600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b9050919050565b6118c6611a39565b6118cf57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008061199b612beb565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050806000015192508060200151915050915091565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6040518060400160405280600481526020017f435244430000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b0557600080fd5b611b9482600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd990919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000611d0c338484611ff9565b6001905092915050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080905060008090505b8280549050811015611e9c576000611dc08783612816565b9050611dd5818461256c90919063ffffffff16565b92506000848381548110611de557fe5b9060005260206000209060030201600201541415611e8e57600084611e1860018780549050611fd990919063ffffffff16565b81548110611e2257fe5b9060005260206000209060030201905080858481548110611e3f57fe5b906000526020600020906003020160008201548160000155600182015481600101556002820154816002015590505084805480919060019003611e829190612c85565b50828060019003935050505b508080600101915050611da8565b50611eb481846000015461256c90919063ffffffff16565b8360000181905550611ed3818460010154611fd990919063ffffffff16565b8360010181905550600193508473ffffffffffffffffffffffffffffffffffffffff167f613edbda9d1e6bda8af8e869a973f88cccf93854a11f351589038de07e1ab4e3826040518082815260200191505060405180910390a2505050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611fc4611a39565b611fcd57600080fd5b611fd681612937565b50565b600082821115611fe857600080fd5b600082840390508091505092915050565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090503073ffffffffffffffffffffffffffffffffffffffff1663c4f3a853856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156120bb57600080fd5b505af11580156120cf573d6000803e3d6000fd5b505050506040513d60208110156120e557600080fd5b810190808051906020019092919050505050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015482111561214657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561218057600080fd5b6121d582600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611fd990919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508060000160009054906101000a900460ff1615612465578060040160009054906101000a900460ff161561244b5742635dbb75801161242f576000600162278d00635dbb758042038161226a57fe5b04019050816003015481101561237057600061229c828460030154868161228d57fe5b046127b690919063ffffffff16565b90506122f381600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061236a856123508387611fd990919063ffffffff16565b428562278d0002635dbb7580010385876003015403612a31565b50612429565b60008260000160006101000a81548160ff0219169083151502179055506123e283600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b50612446565b612445838342635dbb7580038460030154612a31565b5b612460565b61245f838383600201548460030154612a31565b5b612501565b6124ba82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b60008082840190508381101561258157600080fd5b8091505092915050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548111156125da57600080fd5b61262f81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611fd990919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061268a81600454611fd990919063ffffffff16565b6004819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008242101561275b57600090506127b0565b6000612798600161278a62278d0061277c8842611fd990919063ffffffff16565b6127f090919063ffffffff16565b61256c90919063ffffffff16565b9050828111156127ab57829150506127b0565b809150505b92915050565b6000808314156127c957600090506127ea565b60008284029050828482816127da57fe5b04146127e557600080fd5b809150505b92915050565b60008082116127fe57600080fd5b600082848161280957fe5b0490508091505092915050565b600080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061286357fe5b90600052602060002090600302019050600061288782600101548360020154612748565b9050600081141561289d57600092505050612931565b6128ca82600201546128bc8385600001546127b690919063ffffffff16565b6127f090919063ffffffff16565b92506128e88162278d0002836001015461256c90919063ffffffff16565b8260010181905550612907838360000154611fd990919063ffffffff16565b8260000181905550612926818360020154611fd990919063ffffffff16565b826002018190555050505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561297157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018181818054905001915081612a8b9190612c85565b50600081600183805490500381548110612aa157fe5b90600052602060002090600302019050848160000181905550612acd844261256c90919063ffffffff16565b81600101819055508281600201819055506000600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b3886826001015461256c90919063ffffffff16565b81600101819055508673ffffffffffffffffffffffffffffffffffffffff167ff9626bca62c59d77fa45a204dc096874ee066a5c5e124aa9ce6c438dbdf7387a876040518082815260200191505060405180910390a250505050505050565b60405180606001604052806000815260200160008152602001600081525090565b6040518060a001604052806000151581526020016060815260200160008152602001600081526020016000151581525090565b604051806040016040528060008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c4657805160ff1916838001178555612c74565b82800160010185558215612c74579182015b82811115612c73578251825591602001919060010190612c58565b5b509050612c819190612cb7565b5090565b815481835581811115612cb257600302816003028360005260206000209182019101612cb19190612cdc565b5b505050565b612cd991905b80821115612cd5576000816000905550600101612cbd565b5090565b90565b612d1091905b80821115612d0c576000808201600090556001820160009055600282016000905550600301612ce2565b5090565b9056fea165627a7a723058205f960d24e1a05c96bb3002c184dfd4669e72c77e77b5c16b34d0cd35ce44748f0029
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806356219f9e116100de5780638f32d59b11610097578063a9059cbb11610071578063a9059cbb14610900578063c4f3a85314610966578063dd62ed3e146109c2578063f2fde38b14610a3a57610173565b80638f32d59b146107f557806395d89b4114610817578063a457c2d71461089a57610173565b806356219f9e14610597578063647b1142146105ef57806370a08231146106ea578063715018a61461074257806378c7d9791461074c5780638da5cb5b146107ab57610173565b8063259a28cf11610130578063259a28cf146103cd578063313ce567146103eb57806338e3de491461040f57806339509351146104e5578063413198311461054b57806342966c681461056957610173565b806306fdde031461017857806307799f0d146101fb578063095ea7b31461025357806318160ddd146102b95780631d50a60d146102d757806323b872dd14610347575b600080fd5b610180610a7e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101c05780820151818401526020810190506101a5565b50505050905090810190601f1680156101ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023d6004803603602081101561021157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ab7565b6040518082815260200191505060405180910390f35b61029f6004803603604081101561026957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b7a565b604051808215151515815260200191505060405180910390f35b6102c1610ca5565b6040518082815260200191505060405180910390f35b610323600480360360408110156102ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610caf565b60405180848152602001838152602001828152602001935050505060405180910390f35b6103b36004803603606081101561035d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d5c565b604051808215151515815260200191505060405180910390f35b6103d5610f64565b6040518082815260200191505060405180910390f35b6103f3610f6b565b604051808260ff1660ff16815260200191505060405180910390f35b6104516004803603602081101561042557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f70565b604051808515151515815260200180602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156104a757808201518184015260208101905061048c565b50505050905090810190601f1680156104d45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b610531600480360360408110156104fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110db565b604051808215151515815260200191505060405180910390f35b610553611310565b6040518082815260200191505060405180910390f35b6105956004803603602081101561057f57600080fd5b8101908080359060200190929190505050611318565b005b6105d9600480360360208110156105ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611325565b6040518082815260200191505060405180910390f35b6106e8600480360360a081101561060557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561064257600080fd5b82018360208201111561065457600080fd5b8035906020019184600183028401116401000000008311171561067657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035151590602001909291905050506114f4565b005b61072c6004803603602081101561070057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061181e565b6040518082815260200191505060405180910390f35b61074a6118be565b005b61078e6004803603602081101561076257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611990565b604051808381526020018281526020019250505060405180910390f35b6107b3611a0f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107fd611a39565b604051808215151515815260200191505060405180910390f35b61081f611a91565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085f578082015181840152602081019050610844565b50505050905090810190601f16801561088c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108e6600480360360408110156108b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aca565b604051808215151515815260200191505060405180910390f35b61094c6004803603604081101561091657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cff565b604051808215151515815260200191505060405180910390f35b6109a86004803603602081101561097c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d16565b604051808215151515815260200191505060405180910390f35b610a24600480360360408110156109d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f35565b6040518082815260200191505060405180910390f35b610a7c60048036036020811015610a5057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fbc565b005b6040518060400160405280600a81526020017f43617264696f436f696e0000000000000000000000000000000000000000000081525081565b60006060600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610b6a5783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190610b1a565b5050505090508051915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb557600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600454905090565b6000806000610cbc612b97565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208581548110610d0657fe5b906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820154815250509050806000015193508060200151925080604001519150509250925092565b6000610ded82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd990919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e78848484611ff9565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b62278d0081565b601281565b60006060600080610f7f612bb8565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561107d5780601f106110525761010080835404028352916020019161107d565b820191906000526020600020905b81548152906001019060200180831161106057829003601f168201915b5050505050815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581525050905080600001519450806020015193508060400151925080606001519150509193509193565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561111657600080fd5b6111a582600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256c90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b635dbb758081565b611322338261258b565b50565b60006060600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156113d85783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190611388565b5050505090506113e6612beb565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201548152602001600182015481525050905060008160200151905060008090505b83518110156114e857611466612b97565b84828151811061147257fe5b60200260200101519050600061149082602001518360400151612748565b905060006114c183604001516114b38486600001516127b690919063ffffffff16565b6127f090919063ffffffff16565b90506114d68186611fd990919063ffffffff16565b94505050508080600101915050611455565b50809350505050919050565b6114fc611a39565b61150557600080fd5b61150d612bb8565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a900460ff16151515158152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561160b5780601f106115e05761010080835404028352916020019161160b565b820191906000526020600020905b8154815290600101906020018083116115ee57829003601f168201915b5050505050815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581525050905080600001511561165457600080fd5b6000831161166157600080fd5b600181600001901515908115158152505084816020018190525083816040018181525050828160600181815250508181608001901515908115158152505080600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101908051906020019061171b929190612c05565b50604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083151502179055509050508573ffffffffffffffffffffffffffffffffffffffff167fa6d9befabd290d7508939bd7443f80373d25f6667021c137fc0d258c24e3cba28686866040518080602001848152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156117da5780820151818401526020810190506117bf565b50505050905090810190601f1680156118075780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2505050505050565b60006118b7600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b9050919050565b6118c6611a39565b6118cf57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008061199b612beb565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082015481526020016001820154815250509050806000015192508060200151915050915091565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6040518060400160405280600481526020017f435244430000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b0557600080fd5b611b9482600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd990919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000611d0c338484611ff9565b6001905092915050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080905060008090505b8280549050811015611e9c576000611dc08783612816565b9050611dd5818461256c90919063ffffffff16565b92506000848381548110611de557fe5b9060005260206000209060030201600201541415611e8e57600084611e1860018780549050611fd990919063ffffffff16565b81548110611e2257fe5b9060005260206000209060030201905080858481548110611e3f57fe5b906000526020600020906003020160008201548160000155600182015481600101556002820154816002015590505084805480919060019003611e829190612c85565b50828060019003935050505b508080600101915050611da8565b50611eb481846000015461256c90919063ffffffff16565b8360000181905550611ed3818460010154611fd990919063ffffffff16565b8360010181905550600193508473ffffffffffffffffffffffffffffffffffffffff167f613edbda9d1e6bda8af8e869a973f88cccf93854a11f351589038de07e1ab4e3826040518082815260200191505060405180910390a2505050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611fc4611a39565b611fcd57600080fd5b611fd681612937565b50565b600082821115611fe857600080fd5b600082840390508091505092915050565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090503073ffffffffffffffffffffffffffffffffffffffff1663c4f3a853856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156120bb57600080fd5b505af11580156120cf573d6000803e3d6000fd5b505050506040513d60208110156120e557600080fd5b810190808051906020019092919050505050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015482111561214657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561218057600080fd5b6121d582600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611fd990919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508060000160009054906101000a900460ff1615612465578060040160009054906101000a900460ff161561244b5742635dbb75801161242f576000600162278d00635dbb758042038161226a57fe5b04019050816003015481101561237057600061229c828460030154868161228d57fe5b046127b690919063ffffffff16565b90506122f381600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061236a856123508387611fd990919063ffffffff16565b428562278d0002635dbb7580010385876003015403612a31565b50612429565b60008260000160006101000a81548160ff0219169083151502179055506123e283600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b50612446565b612445838342635dbb7580038460030154612a31565b5b612460565b61245f838383600201548460030154612a31565b5b612501565b6124ba82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461256c90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b60008082840190508381101561258157600080fd5b8091505092915050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548111156125da57600080fd5b61262f81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611fd990919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061268a81600454611fd990919063ffffffff16565b6004819055508173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008242101561275b57600090506127b0565b6000612798600161278a62278d0061277c8842611fd990919063ffffffff16565b6127f090919063ffffffff16565b61256c90919063ffffffff16565b9050828111156127ab57829150506127b0565b809150505b92915050565b6000808314156127c957600090506127ea565b60008284029050828482816127da57fe5b04146127e557600080fd5b809150505b92915050565b60008082116127fe57600080fd5b600082848161280957fe5b0490508091505092915050565b600080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061286357fe5b90600052602060002090600302019050600061288782600101548360020154612748565b9050600081141561289d57600092505050612931565b6128ca82600201546128bc8385600001546127b690919063ffffffff16565b6127f090919063ffffffff16565b92506128e88162278d0002836001015461256c90919063ffffffff16565b8260010181905550612907838360000154611fd990919063ffffffff16565b8260000181905550612926818360020154611fd990919063ffffffff16565b826002018190555050505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561297157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018181818054905001915081612a8b9190612c85565b50600081600183805490500381548110612aa157fe5b90600052602060002090600302019050848160000181905550612acd844261256c90919063ffffffff16565b81600101819055508281600201819055506000600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b3886826001015461256c90919063ffffffff16565b81600101819055508673ffffffffffffffffffffffffffffffffffffffff167ff9626bca62c59d77fa45a204dc096874ee066a5c5e124aa9ce6c438dbdf7387a876040518082815260200191505060405180910390a250505050505050565b60405180606001604052806000815260200160008152602001600081525090565b6040518060a001604052806000151581526020016060815260200160008152602001600081526020016000151581525090565b604051806040016040528060008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c4657805160ff1916838001178555612c74565b82800160010185558215612c74579182015b82811115612c73578251825591602001919060010190612c58565b5b509050612c819190612cb7565b5090565b815481835581811115612cb257600302816003028360005260206000209182019101612cb19190612cdc565b5b505050565b612cd991905b80821115612cd5576000816000905550600101612cbd565b5090565b90565b612d1091905b80821115612d0c576000808201600090556001820160009055600282016000905550600301612ce2565b5090565b9056fea165627a7a723058205f960d24e1a05c96bb3002c184dfd4669e72c77e77b5c16b34d0cd35ce44748f0029
Deployed Bytecode Sourcemap
99:8173:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;99:8173:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;300:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;300:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2353:142;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2353:142:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2726:238:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2726:238:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2521:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2050:297;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2050:297:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3427:294:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3427:294:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;176:44:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;393:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1514:317;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1514:317:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1514:317:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4224::1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4224:317:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;226:45:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4252:79;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4252:79:0;;;;;;;;;;;;;;;;;:::i;:::-;;5302:588;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5302:588:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4679:617;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4679:617:0;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4679:617:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4679:617:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4679:617:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4679:617:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4082:148;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4082:148:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1347:137:3;;;:::i;:::-;;1837:207:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1837:207:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;659:77:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;979:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;348:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;348:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5049:327:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5049:327:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1953:137;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1953:137:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6406:906:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6406:906:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1660:129:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1660:129:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1655:107:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1655:107:3;;;;;;;;;;;;;;;;;;;:::i;:::-;;300:42:0;;;;;;;;;;;;;;;;;;;:::o;2353:142::-;2410:7;2429:17;2449:8;:14;2458:4;2449:14;;;;;;;;;;;;;;;2429:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2480:1;:8;2473:15;;;2353:142;;;:::o;2726:238:1:-;2791:4;2834:1;2815:21;;:7;:21;;;;2807:30;;;;;;2880:5;2848:8;:20;2857:10;2848:20;;;;;;;;;;;;;;;:29;2869:7;2848:29;;;;;;;;;;;;;;;:37;;;;2921:7;2900:36;;2909:10;2900:36;;;2930:5;2900:36;;;;;;;;;;;;;;;;;;2953:4;2946:11;;2726:238;;;;:::o;2521:89:0:-;2565:7;2591:12;;2584:19;;2521:89;:::o;2050:297::-;2120:14;2136:23;2161:19;2192:15;;:::i;:::-;2210:8;:14;2219:4;2210:14;;;;;;;;;;;;;;;2225:5;2210:21;;;;;;;;;;;;;;;;;;2192:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2250:1;:8;;;2241:17;;2286:1;:17;;;2268:35;;2327:1;:13;;;2313:27;;2050:297;;;;;;:::o;3427:294:1:-;3506:4;3551:37;3582:5;3551:8;:14;3560:4;3551:14;;;;;;;;;;;;;;;:26;3566:10;3551:26;;;;;;;;;;;;;;;;:30;;:37;;;;:::i;:::-;3522:8;:14;3531:4;3522:14;;;;;;;;;;;;;;;:26;3537:10;3522:26;;;;;;;;;;;;;;;:66;;;;3598:26;3608:4;3614:2;3618:5;3598:9;:26::i;:::-;3654:10;3639:54;;3648:4;3639:54;;;3666:8;:14;3675:4;3666:14;;;;;;;;;;;;;;;:26;3681:10;3666:26;;;;;;;;;;;;;;;;3639:54;;;;;;;;;;;;;;;;;;3710:4;3703:11;;3427:294;;;;;:::o;176:44:0:-;213:7;176:44;:::o;393:35::-;426:2;393:35;:::o;1514:317::-;1572:13;1587:18;1607:17;1626:16;1654:15;;:::i;:::-;1672:11;:22;1684:9;1672:22;;;;;;;;;;;;;;;1654:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1715:1;:10;;;1704:21;;1742:1;:6;;;1735:13;;1773:1;:14;;;1758:29;;1811:1;:13;;;1797:27;;1514:317;;;;;;:::o;4224::1:-;4304:4;4347:1;4328:21;;:7;:21;;;;4320:30;;;;;;4393:45;4427:10;4393:8;:20;4402:10;4393:20;;;;;;;;;;;;;;;:29;4414:7;4393:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;4361:8;:20;4370:10;4361:20;;;;;;;;;;;;;;;:29;4382:7;4361:29;;;;;;;;;;;;;;;:77;;;;4474:7;4453:60;;4462:10;4453:60;;;4483:8;:20;4492:10;4483:20;;;;;;;;;;;;;;;:29;4504:7;4483:29;;;;;;;;;;;;;;;;4453:60;;;;;;;;;;;;;;;;;;4530:4;4523:11;;4224:317;;;;:::o;226:45:0:-;261:10;226:45;:::o;4252:79::-;4299:25;4305:10;4317:6;4299:5;:25::i;:::-;4252:79;:::o;5302:588::-;5366:7;5385:23;5411:8;:16;5420:6;5411:16;;;;;;;;;;;;;;;5385:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5437:16;;:::i;:::-;5456:9;:17;5466:6;5456:17;;;;;;;;;;;;;;;5437:36;;;;;;;;;;;;;;;;;;;;;;;;;;;5483:23;5509:1;:10;;;5483:36;;5535:6;5544:1;5535:10;;5530:321;5551:7;:14;5547:1;:18;5530:321;;;5586:15;;:::i;:::-;5604:7;5612:1;5604:10;;;;;;;;;;;;;;5586:28;;5629:10;5642:54;5663:1;:17;;;5682:1;:13;;;5642:20;:54::i;:::-;5629:67;;5710:22;5735:38;5759:1;:13;;;5735:19;5748:5;5735:1;:8;;;:12;;:19;;;;:::i;:::-;:23;;:38;;;;:::i;:::-;5710:63;;5805:35;5825:14;5805:15;:19;;:35;;;;:::i;:::-;5787:53;;5530:321;;;5567:3;;;;;;;5530:321;;;;5868:15;5861:22;;;;;5302:588;;;:::o;4679:617::-;863:9:3;:7;:9::i;:::-;855:18;;;;;;4841:24:0;;:::i;:::-;4868:11;:22;4880:9;4868:22;;;;;;;;;;;;;;;4841:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4910:10;:19;;;4909:20;4901:29;;;;;;4962:1;4948:11;:15;4940:24;;;;;;4996:4;4974:10;:19;;:26;;;;;;;;;;;5028:4;5010:10;:15;;:22;;;;5068:12;5042:10;:23;;:38;;;;;5115:11;5090:10;:22;;:36;;;;;5162:12;5136:10;:23;;:38;;;;;;;;;;;5209:10;5184:11;:22;5196:9;5184:22;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5246:9;5234:55;;;5257:4;5263:12;5277:11;5234:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5234:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;883:1:3;4679:617:0;;;;;:::o;4082:148::-;4138:7;4164:59;4196:9;:17;4206:6;4196:17;;;;;;;;;;;;;;;:26;;;4164:9;:17;4174:6;4164:17;;;;;;;;;;;;;;;:27;;;:31;;:59;;;;:::i;:::-;4157:66;;4082:148;;;:::o;1347:137:3:-;863:9;:7;:9::i;:::-;855:18;;;;;;1445:1;1408:40;;1429:6;;;;;;;;;;;1408:40;;;;;;;;;;;;1475:1;1458:6;;:19;;;;;;;;;;;;;;;;;;1347:137::o;1837:207:0:-;1892:17;1911:16;1939;;:::i;:::-;1958:9;:15;1968:4;1958:15;;;;;;;;;;;;;;;1939:34;;;;;;;;;;;;;;;;;;;;;;;;;;;1995:1;:11;;;1983:23;;2027:1;:10;;;2016:21;;1837:207;;;;:::o;659:77:3:-;697:7;723:6;;;;;;;;;;;716:13;;659:77;:::o;979:90::-;1019:4;1056:6;;;;;;;;;;;1042:20;;:10;:20;;;1035:27;;979:90;:::o;348:38:0:-;;;;;;;;;;;;;;;;;;;:::o;5049:327:1:-;5134:4;5177:1;5158:21;;:7;:21;;;;5150:30;;;;;;5223:50;5257:15;5223:8;:20;5232:10;5223:20;;;;;;;;;;;;;;;:29;5244:7;5223:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;5191:8;:20;5200:10;5191:20;;;;;;;;;;;;;;;:29;5212:7;5191:29;;;;;;;;;;;;;;;:82;;;;5309:7;5288:60;;5297:10;5288:60;;;5318:8;:20;5327:10;5318:20;;;;;;;;;;;;;;;:29;5339:7;5318:29;;;;;;;;;;;;;;;;5288:60;;;;;;;;;;;;;;;;;;5365:4;5358:11;;5049:327;;;;:::o;1953:137::-;2014:4;2030:32;2040:10;2052:2;2056:5;2030:9;:32::i;:::-;2079:4;2072:11;;1953:137;;;;:::o;6406:906:0:-;6459:12;6483:17;6503:9;:17;6513:6;6503:17;;;;;;;;;;;;;;;6483:37;;6530:27;6560:8;:16;6569:6;6560:16;;;;;;;;;;;;;;;6530:46;;6586:16;6605:1;6586:20;;6621:6;6630:1;6621:10;;6616:449;6637:10;:17;;;;6633:1;:21;6616:449;;;6674:18;6695:17;6703:6;6710:1;6695:7;:17::i;:::-;6674:38;;6737:24;6750:10;6737:8;:12;;:24;;;;:::i;:::-;6726:35;;6840:1;6811:10;6822:1;6811:13;;;;;;;;;;;;;;;;;;:25;;;:30;6808:247;;;6886:19;6908:10;6919:24;6941:1;6919:10;:17;;;;:21;;:24;;;;:::i;:::-;6908:36;;;;;;;;;;;;;;;;;;6886:58;;6978:4;6962:10;6973:1;6962:13;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;7000:10;:19;;;;;;;;;;;;:::i;:::-;;7037:3;;;;;;;;6808:247;;6616:449;6656:3;;;;;;;6616:449;;;;7124:25;7140:8;7124:1;:11;;;:15;;:25;;;;:::i;:::-;7110:1;:11;;:39;;;;7209:24;7224:8;7209:1;:10;;;:14;;:24;;;;:::i;:::-;7196:1;:10;;:37;;;;7254:4;7244:14;;7288:6;7274:31;;;7296:8;7274:31;;;;;;;;;;;;;;;;;;6406:906;;;;;;:::o;1660:129:1:-;1732:7;1758:8;:15;1767:5;1758:15;;;;;;;;;;;;;;;:24;1774:7;1758:24;;;;;;;;;;;;;;;;1751:31;;1660:129;;;;:::o;1655:107:3:-;863:9;:7;:9::i;:::-;855:18;;;;;;1727:28;1746:8;1727:18;:28::i;:::-;1655:107;:::o;1205:145:4:-;1263:7;1295:1;1290;:6;;1282:15;;;;;;1307:9;1323:1;1319;:5;1307:17;;1342:1;1335:8;;;1205:145;;;;:::o;2616:1460:0:-;2695:16;2714:11;:17;2726:4;2714:17;;;;;;;;;;;;;;;2695:36;;2742:4;:14;;;2757:4;2742:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2742:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2742:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2742:20:0;;;;;;;;;;;;;;;;;2789:9;:15;2799:4;2789:15;;;;;;;;;;;;;;;:25;;;2780:5;:34;;2772:43;;;;;;2847:1;2833:16;;:2;:16;;;;2825:25;;;;;;2888:36;2918:5;2888:9;:15;2898:4;2888:15;;;;;;;;;;;;;;;:25;;;:29;;:36;;;;:::i;:::-;2860:9;:15;2870:4;2860:15;;;;;;;;;;;;;;;:25;;:64;;;;2938:1;:10;;;;;;;;;;;;2934:1096;;;2968:1;:14;;;;;;;;;;;;2964:965;;;3021:3;261:10;3006:18;3002:815;;3048:18;3107:1;213:7;261:10;3070:3;:17;3069:35;;;;;;:39;3048:60;;3151:1;:13;;;3135;:29;3131:559;;;3192:19;3214:42;3242:13;3223:1;:13;;;3215:5;:21;;;;;;3214:27;;:42;;;;:::i;:::-;3192:64;;3309:43;3337:14;3309:9;:13;3319:2;3309:13;;;;;;;;;;;;;;;:23;;;:27;;:43;;;;:::i;:::-;3283:9;:13;3293:2;3283:13;;;;;;;;;;;;;;;:23;;:69;;;;3378:130;3396:2;3400:25;3410:14;3400:5;:9;;:25;;;;:::i;:::-;3473:3;3457:13;213:7;3441:29;261:10;3427:43;:49;3494:13;3478:1;:13;;;:29;3378:17;:130::i;:::-;3131:559;;;;3576:5;3563:1;:10;;;:18;;;;;;;;;;;;;;;;;;3633:34;3661:5;3633:9;:13;3643:2;3633:13;;;;;;;;;;;;;;;:23;;;:27;;:34;;;;:::i;:::-;3607:9;:13;3617:2;3607:13;;;;;;;;;;;;;;;:23;;:60;;;;3131:559;3002:815;;;;3736:62;3754:2;3758:5;3779:3;261:10;3765:17;3784:1;:13;;;3736:17;:62::i;:::-;3002:815;2964:965;;;3855:59;3873:2;3877:5;3884:1;:14;;;3900:1;:13;;;3855:17;:59::i;:::-;2964:965;2934:1096;;;3985:34;4013:5;3985:9;:13;3995:2;3985:13;;;;;;;;;;;;;;;:23;;;:27;;:34;;;;:::i;:::-;3959:9;:13;3969:2;3959:13;;;;;;;;;;;;;;;:23;;:60;;;;2934:1096;4059:2;4044:25;;4053:4;4044:25;;;4063:5;4044:25;;;;;;;;;;;;;;;;;;2616:1460;;;;:::o;1431:145:4:-;1489:7;1508:9;1524:1;1520;:5;1508:17;;1548:1;1543;:6;;1535:15;;;;;;1568:1;1561:8;;;1431:145;;;;:::o;4337:322:0:-;4419:9;:15;4429:4;4419:15;;;;;;;;;;;;;;;:25;;;4409:6;:35;;4401:44;;;;;;4484:37;4514:6;4484:9;:15;4494:4;4484:15;;;;;;;;;;;;;;;:25;;;:29;;:37;;;;:::i;:::-;4456:9;:15;4466:4;4456:15;;;;;;;;;;;;;;;:25;;:65;;;;4546:24;4563:6;4546:12;;:16;;:24;;;;:::i;:::-;4531:12;:39;;;;4590:4;4585:18;;;4596:6;4585:18;;;;;;;;;;;;;;;;;;4641:1;4618:34;;4627:4;4618:34;;;4645:6;4618:34;;;;;;;;;;;;;;;;;;4337:322;;:::o;7896:374::-;7983:4;8009:9;8003:3;:15;7999:54;;;8041:1;8034:8;;;;7999:54;8062:17;8082:46;8126:1;8082:39;213:7;8083:18;8091:9;8083:3;:7;;:18;;;;:::i;:::-;8082:24;;:39;;;;:::i;:::-;:43;;:46;;;;:::i;:::-;8062:66;;8154:11;8142:9;:23;8138:126;;;8187:11;8180:18;;;;;8138:126;8244:9;8237:16;;;7896:374;;;;;:::o;229:421:4:-;287:7;532:1;527;:6;523:45;;;556:1;549:8;;;;523:45;578:9;594:1;590;:5;578:17;;622:1;617;613;:5;;;;;;:10;605:19;;;;;;642:1;635:8;;;229:421;;;;;:::o;778:296::-;836:7;933:1;929;:5;921:14;;;;;;945:9;961:1;957;:5;;;;;;945:17;;1066:1;1059:8;;;778:296;;;;:::o;7318:571:0:-;7383:16;7411;7430:8;:16;7439:6;7430:16;;;;;;;;;;;;;;;7447:5;7430:23;;;;;;;;;;;;;;;;;;7411:42;;7464:10;7477:54;7498:1;:17;;;7517:1;:13;;;7477:20;:54::i;:::-;7464:67;;7554:1;7545:5;:10;7541:49;;;7578:1;7571:8;;;;;;7541:49;7676:38;7700:1;:13;;;7676:19;7689:5;7676:1;:8;;;:12;;:19;;;;:::i;:::-;:23;;:38;;;;:::i;:::-;7665:49;;7745:44;7783:5;213:7;7767:21;7745:1;:17;;;:21;;:44;;;;:::i;:::-;7725:1;:17;;:64;;;;7810:22;7823:8;7810:1;:8;;;:12;;:22;;;;:::i;:::-;7799:1;:8;;:33;;;;7858:24;7876:5;7858:1;:13;;;:17;;:24;;;;:::i;:::-;7842:1;:13;;:40;;;;7318:571;;;;;;;:::o;1906:183:3:-;1999:1;1979:22;;:8;:22;;;;1971:31;;;;;;2046:8;2017:38;;2038:6;;;;;;;;;;;2017:38;;;;;;;;;;;;2074:8;2065:6;;:17;;;;;;;;;;;;;;;;;;1906:183;:::o;5896:504:0:-;6015:24;6042:8;:16;6051:6;6042:16;;;;;;;;;;;;;;;6015:43;;6086:1;6068:7;:19;;;;;;;;;;;;;;:::i;:::-;;6097:16;6116:7;6141:1;6124:7;:14;;;;:18;6116:27;;;;;;;;;;;;;;;;;;6097:46;;6164:6;6153:1;:8;;:17;;;;6200:21;6208:12;6200:3;:7;;:21;;;;:::i;:::-;6180:1;:17;;:41;;;;6247:11;6231:1;:13;;:27;;;;6269:17;6289:9;:17;6299:6;6289:17;;;;;;;;;;;;;;;6269:37;;6329:22;6344:6;6329:1;:10;;;:14;;:22;;;;:::i;:::-;6316:1;:10;;:35;;;;6378:6;6366:27;;;6386:6;6366:27;;;;;;;;;;;;;;;;;;5896:504;;;;;;;:::o;99:8173::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://5f960d24e1a05c96bb3002c184dfd4669e72c77e77b5c16b34d0cd35ce44748f
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.