ERC-20
Overview
Max Total Supply
1,000,000,000 WHINT
Holders
24
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
37,366,395.661481136726156619 WHINTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HINTToken
Compiler Version
v0.4.24+commit.e67f0147
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.4.24; import "./SobloToken.sol"; /** * @title HINTToken */ contract HINTToken is SobloToken { string public constant name = "WHint Token"; string public constant symbol = "WHINT"; uint8 public constant decimals = 18; uint256 public constant INITIAL_SUPPLY = 1e9 * (10 ** uint256(decimals)); constructor() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; emit Transfer(0x0, msg.sender, INITIAL_SUPPLY); } }
pragma solidity ^0.4.24; /** * @title ERC1132 interface * @dev see https://github.com/ethereum/EIPs/issues/1132 */ contract ERC1132 { /** * @dev Reasons why a user's tokens have been locked */ mapping(address => bytes32[]) public lockReason; /** * @dev locked token structure */ struct lockToken { uint256 amount; uint256 validity; bool claimed; } /** * @dev Holds number & validity of tokens locked for a given reason for * a specified address */ mapping(address => mapping(bytes32 => lockToken)) public locked; /** * @dev Records data of all the tokens Locked */ event Locked( address indexed _of, bytes32 indexed _reason, uint256 _amount, uint256 _validity ); /** * @dev Records data of all the tokens unlocked */ event Unlocked( address indexed _of, bytes32 indexed _reason, uint256 _amount ); /** * @dev Locks a specified amount of tokens against an address, * for a specified reason and time * @param _reason The reason to lock tokens * @param _amount Number of tokens to be locked * @param _time Lock time in seconds */ function lock(bytes32 _reason, uint256 _amount, uint256 _time) public returns (bool); /** * @dev Returns tokens locked for a specified address for a * specified reason * * @param _of The address whose tokens are locked * @param _reason The reason to query the lock tokens for */ function tokensLocked(address _of, bytes32 _reason) public view returns (uint256 amount); /** * @dev Returns tokens locked for a specified address for a * specified reason at a specific time * * @param _of The address whose tokens are locked * @param _reason The reason to query the lock tokens for * @param _time The timestamp to query the lock tokens for */ function tokensLockedAtTime(address _of, bytes32 _reason, uint256 _time) public view returns (uint256 amount); /** * @dev Returns total tokens held by an address (locked + transferable) * @param _of The address to query the total balance of */ function totalBalanceOf(address _of) public view returns (uint256 amount); /** * @dev Extends lock for a specified reason and time * @param _reason The reason to lock tokens * @param _time Lock extension time in seconds */ function extendLock(bytes32 _reason, uint256 _time) public returns (bool); /** * @dev Increase number of tokens locked for a specified reason * @param _reason The reason to lock tokens * @param _amount Number of tokens to be increased */ function increaseLockAmount(bytes32 _reason, uint256 _amount) public returns (bool); /** * @dev Returns unlockable tokens for a specified address for a specified reason * @param _of The address to query the the unlockable token count of * @param _reason The reason to query the unlockable tokens for */ function tokensUnlockable(address _of, bytes32 _reason) public view returns (uint256 amount); /** * @dev Unlocks the unlockable tokens of a specified address * @param _of Address of user, claiming back unlockable tokens */ function unlock(address _of) public returns (uint256 unlockableTokens); /** * @dev Gets the unlockable tokens of a specified address * @param _of The address to query the the unlockable token count of */ function getUnlockableTokens(address _of) public view returns (uint256 unlockableTokens); }
pragma solidity ^0.4.24; /** * Utility library of inline functions on addresses */ library AddressUtils { /** * Returns whether the target address is a contract * dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param addr address to check * @return whether the target address is a contract */ function isContract(address addr) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solium-disable-next-line security/no-inline-assembly assembly { size := extcodesize(addr) } return size > 0; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * See https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev Transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0), "Recipient address is zero address(0). Check the address again."); require(_value <= balances[msg.sender], "The balance of account is insufficient."); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/issues/20 * Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0), "Recipient address is zero address(0). Check the address again."); require(_value <= balances[_from], "The balance of account is insufficient."); require(_value <= allowed[_from][msg.sender], "Insufficient tokens approved from account owner."); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval( address _spender, uint256 _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns (bool) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title MultiOwnable * @dev root -> superOwner -> owners 의 형태로 관리하는 멀티 관리자 기능 */ contract MultiOwnable { using SafeMath for uint256; address public root; // 혹시 몰라 준비해둔 superOwner 의 백업. 하드웨어 월렛 주소로 세팅할 예정. address public superOwner; mapping (address => bool) public owners; address[] public ownerList; event ChangedRoot(address newRoot); event ChangedSuperOwner(address newSuperOwner); event AddedNewOwner(address newOwner); event DeletedOwner(address deletedOwner); constructor() public { root = msg.sender; superOwner = msg.sender; owners[root] = true; ownerList.push(msg.sender); } modifier onlyRoot() { require(msg.sender == root, "Root privilege is required."); _; } modifier onlySuperOwner() { require(msg.sender == superOwner, "SuperOwner priviledge is required."); _; } modifier onlyOwner() { require(owners[msg.sender], "Owner priviledge is required."); _; } /** * @dev root 교체 (root 는 root 와 superOwner 를 교체할 수 있는 권리가 있다.) * @dev 기존 루트가 관리자에서 지워지지 않고, 새 루트가 자동으로 관리자에 등록되지 않음을 유의! */ function changeRoot(address newRoot) onlyRoot public returns (bool) { require(newRoot != address(0), "This address to be set is zero address(0). Check the input address."); root = newRoot; emit ChangedRoot(newRoot); return true; } /** * @dev superOwner 교체 (root 는 root 와 superOwner 를 교체할 수 있는 권리가 있다.) * @dev 기존 superOwner 가 관리자에서 지워지지 않고, 새 superOwner 가 자동으로 관리자에 등록되지 않음을 유의! */ function changeSuperOwner(address newSuperOwner) onlyRoot public returns (bool) { require(newSuperOwner != address(0), "This address to be set is zero address(0). Check the input address."); superOwner = newSuperOwner; emit ChangedSuperOwner(newSuperOwner); return true; } function newOwner(address owner) onlySuperOwner public returns (bool) { require(owner != address(0), "This address to be set is zero address(0). Check the input address."); require(!owners[owner], "This address is already registered."); owners[owner] = true; ownerList.push(owner); emit AddedNewOwner(owner); return true; } function deleteOwner(address owner) onlySuperOwner public returns (bool) { require(owners[owner], "This input address is not an owner."); delete owners[owner]; for (uint256 i = 0; i < ownerList.length; i++) { if (ownerList[i] == owner) { ownerList[i] = ownerList[ownerList.length.sub(1)]; ownerList.length = ownerList.length.sub(1); break; } } emit DeletedOwner(owner); return true; } } /** * @title Lockable token */ contract LockableToken is StandardToken, MultiOwnable { bool public locked = true; uint256 public constant LOCK_MAX = uint256(-1); /** * @dev 락 상태에서도 거래 가능한 언락 계정 */ mapping(address => bool) public unlockAddrs; /** * @dev 계정 별로 lock value 만큼 잔고가 잠김 * @dev - 값이 0 일 때 : 잔고가 0 이어도 되므로 제한이 없는 것임. * @dev - 값이 LOCK_MAX 일 때 : 잔고가 uint256 의 최대값이므로 아예 잠긴 것임. */ mapping(address => uint256) public lockValues; event Locked(bool locked, string note); event LockedTo(address indexed addr, bool locked, string note); event SetLockValue(address indexed addr, uint256 value, string note); constructor() public { unlockTo(msg.sender, "Default Unlock To Root"); } modifier checkUnlock (address addr, uint256 value) { require(!locked || unlockAddrs[addr], "The account is currently locked."); require(balances[addr].sub(value) >= lockValues[addr], "Transferable limit exceeded. Check the status of the lock value."); _; } function lock(string note) onlyOwner public { locked = true; emit Locked(locked, note); } function unlock(string note) onlyOwner public { locked = false; emit Locked(locked, note); } function lockTo(address addr, string note) onlyOwner public { setLockValue(addr, LOCK_MAX, note); unlockAddrs[addr] = false; emit LockedTo(addr, true, note); } function unlockTo(address addr, string note) onlyOwner public { if (lockValues[addr] == LOCK_MAX) setLockValue(addr, 0, note); unlockAddrs[addr] = true; emit LockedTo(addr, false, note); } function setLockValue(address addr, uint256 value, string note) onlyOwner public { lockValues[addr] = value; emit SetLockValue(addr, value, note); } /** * @dev 이체 가능 금액을 조회한다. */ function getMyUnlockValue() public view returns (uint256) { address addr = msg.sender; if ((!locked || unlockAddrs[addr]) && balances[addr] > lockValues[addr]) return balances[addr].sub(lockValues[addr]); else return 0; } function transfer(address to, uint256 value) checkUnlock(msg.sender, value) public returns (bool) { return super.transfer(to, value); } function transferFrom(address from, address to, uint256 value) checkUnlock(from, value) public returns (bool) { return super.transferFrom(from, to, value); } } /** * @title SobloTokenReceiver Receiver */ contract SobloTokenReceiver { enum SobloTokenReceiveType { TOKEN_TRANSFER, TOKEN_MINT } function onSobloTokenReceived(address owner, address spender, uint256 value, SobloTokenReceiveType receiveType) public returns (bool); } /** * @title SobloToken */ contract SobloToken is LockableToken { using AddressUtils for address; enum SobloTransferType { TRANSFER_TO_TEAM, TRANSFER_TO_PARTNER, TRANSFER_TO_ECOSYSTEM, TRANSFER_TO_BOUNTY, TRANSFER_TO_RESERVE, TRANSFER_TO_ETC } event SobloTransferred(address indexed from, address indexed to, uint256 value, uint256 fromBalance, uint256 toBalance, string note); event SobloTransferredFrom(address indexed owner, address indexed spender, address indexed to, uint256 value, uint256 fromBalance, uint256 toBalance, string note); event SobloApproval(address indexed owner, address indexed spender, uint256 value, string note); event SobloMultiTransferred(address indexed owner, address indexed spender, address indexed to, uint256 value, SobloTransferType purpose, uint256 fromBalance, uint256 toBalance, string note); event TransferredToSobloDapp( address indexed owner, address indexed spender, address indexed to, uint256 value, string note, SobloTokenReceiver.SobloTokenReceiveType receiveType ); constructor() public { } // ERC20 함수들을 오버라이딩하여 super 로 올라가지 않고 무조건 soblo~ 함수로 지나가게 한다. function transfer(address to, uint256 value) public returns (bool ret) { return sobloTransfer(to, value, "called by transfer()"); } function sobloTransfer(address to, uint256 value, string note) public returns (bool ret) { require(to != address(this), "The receive address is the Contact Address of Soblo Token. You cannot send money to this address."); ret = super.transfer(to, value); postTransfer(msg.sender, msg.sender, to, value, note, SobloTokenReceiver.SobloTokenReceiveType.TOKEN_TRANSFER); emit SobloTransferred(msg.sender, to, value, balanceOf(msg.sender), balanceOf(to), note); } function transferFrom(address from, address to, uint256 value) public returns (bool) { return sobloTransferFrom(from, to, value, "called by transferFrom()"); } function sobloTransferFrom(address from, address to, uint256 value, string note) public returns (bool ret) { require(to != address(this), "The receive address is the Contact Address of Soblo Token. You cannot send money to this address."); ret = super.transferFrom(from, to, value); postTransfer(from, msg.sender, to, value, note, SobloTokenReceiver.SobloTokenReceiveType.TOKEN_TRANSFER); emit SobloTransferredFrom(from, msg.sender, to, value, balanceOf(from), balanceOf(to), note); } function approve(address spender, uint256 value) public returns (bool) { return sobloApprove(spender, value, "called by approve()"); } function sobloApprove(address spender, uint256 value, string note) public returns (bool ret) { ret = super.approve(spender, value); emit SobloApproval(msg.sender, spender, value, note); } function increaseApproval(address spender, uint256 addedValue) public returns (bool) { return sobloIncreaseApproval(spender, addedValue, "called by increaseApproval()"); } function sobloIncreaseApproval(address spender, uint256 addedValue, string note) public returns (bool ret) { ret = super.increaseApproval(spender, addedValue); emit SobloApproval(msg.sender, spender, allowed[msg.sender][spender], note); } function decreaseApproval(address spender, uint256 subtractedValue) public returns (bool) { return sobloDecreaseApproval(spender, subtractedValue, "called by decreaseApproval()"); } function sobloDecreaseApproval(address spender, uint256 subtractedValue, string note) public returns (bool ret) { ret = super.decreaseApproval(spender, subtractedValue); emit SobloApproval(msg.sender, spender, allowed[msg.sender][spender], note); } function postTransfer( address owner, address spender, address to, uint256 value, string note, SobloTokenReceiver.SobloTokenReceiveType receiveType ) internal returns (bool) { if (to.isContract()) { bool callOk = address(to).call( bytes4(keccak256("onSobloTokenReceived(address,address,uint256,uint8)")), owner, spender, value, receiveType ); if (callOk) { emit TransferredToSobloDapp(owner, spender, to, value, note, receiveType); return true; } } return false; } /** * @dev 다계좌 전송 (postTransfer 를 호출하지 않음에 유의!) * * @param from 보낼 토큰의 주인 (내부적으로 transferFrom 을 이용함) * @param to 토큰을 받을 주소 * @param purpose 팀에게 보내기, 파트너에게 보내기, 바운티 참여자에게 보내기 등의 목적을 선택 * @param note 일반적인 메모 */ function sobloMultiTransfer( address from, address[] to, uint256[] values, SobloTransferType purpose, string note ) onlyOwner public returns (bool ret) { uint256 length = to.length; require(length == values.length, "The size of \'to\' and \'values\' array is different."); require(uint8(purpose) < 6); ret = true; for (uint256 i = 0; i < length; i++) { require(to[i] != address(this), "The receive address is the Contact Address of Soblo Token. You cannot send money to this address."); ret = ret && super.transferFrom(from, to[i], values[i]); // 관리자 기능으로 post 프로세스(댑의 onReceived 를 일깨움)를 타지 않기 위해 super.transferFrom 를 호출한다. emit SobloMultiTransferred(from, msg.sender, to[i], values[i], purpose, balanceOf(from), balanceOf(to[i]), note); } } function destroy() onlyRoot public { selfdestruct(root); } } /** * @title SobloTokenDappBase */ contract SobloTokenDappBase is SobloTokenReceiver { address internal _sobloToken; event LogOnReceivedSobloToken(address indexed owner, address indexed spender, uint256 value, SobloTokenReceiveType receiveType); constructor(address sobloToken) public { _sobloToken = sobloToken; } modifier onlySobloToken() { require(msg.sender == _sobloToken, "msg.sender must be the registered token contract"); _; } // Override this function function onSobloTokenReceived(address owner, address spender, uint256 value, SobloTokenReceiveType receiveType) public onlySobloToken returns (bool) { emit LogOnReceivedSobloToken(owner, spender, value, receiveType); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"note","type":"string"}],"name":"unlockTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"owners","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"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":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"},{"name":"note","type":"string"}],"name":"sobloIncreaseApproval","outputs":[{"name":"ret","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newSuperOwner","type":"address"}],"name":"changeSuperOwner","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":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"note","type":"string"}],"name":"sobloTransfer","outputs":[{"name":"ret","type":"bool"}],"payable":false,"stateMutability":"nonpayable","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":"INITIAL_SUPPLY","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":false,"inputs":[{"name":"note","type":"string"}],"name":"lock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"LOCK_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newRoot","type":"address"}],"name":"changeRoot","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMyUnlockValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"unlockAddrs","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"},{"name":"note","type":"string"}],"name":"sobloApprove","outputs":[{"name":"ret","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"note","type":"string"}],"name":"lockTo","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":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"},{"name":"note","type":"string"}],"name":"sobloDecreaseApproval","outputs":[{"name":"ret","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"destroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"newOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"superOwner","outputs":[{"name":"","type":"address"}],"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":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"ret","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"note","type":"string"}],"name":"unlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lockValues","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"deleteOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"locked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"value","type":"uint256"},{"name":"note","type":"string"}],"name":"setLockValue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","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":true,"inputs":[{"name":"","type":"uint256"}],"name":"ownerList","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address[]"},{"name":"values","type":"uint256[]"},{"name":"purpose","type":"uint8"},{"name":"note","type":"string"}],"name":"sobloMultiTransfer","outputs":[{"name":"ret","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"root","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"note","type":"string"}],"name":"sobloTransferFrom","outputs":[{"name":"ret","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"fromBalance","type":"uint256"},{"indexed":false,"name":"toBalance","type":"uint256"},{"indexed":false,"name":"note","type":"string"}],"name":"SobloTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"fromBalance","type":"uint256"},{"indexed":false,"name":"toBalance","type":"uint256"},{"indexed":false,"name":"note","type":"string"}],"name":"SobloTransferredFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"note","type":"string"}],"name":"SobloApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"purpose","type":"uint8"},{"indexed":false,"name":"fromBalance","type":"uint256"},{"indexed":false,"name":"toBalance","type":"uint256"},{"indexed":false,"name":"note","type":"string"}],"name":"SobloMultiTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"note","type":"string"},{"indexed":false,"name":"receiveType","type":"uint8"}],"name":"TransferredToSobloDapp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"locked","type":"bool"},{"indexed":false,"name":"note","type":"string"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"locked","type":"bool"},{"indexed":false,"name":"note","type":"string"}],"name":"LockedTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"note","type":"string"}],"name":"SetLockValue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newRoot","type":"address"}],"name":"ChangedRoot","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newSuperOwner","type":"address"}],"name":"ChangedSuperOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"AddedNewOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"deletedOwner","type":"address"}],"name":"DeletedOwner","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"},{"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"}]
Contract Creation Code
60806040526001600760006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060063390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620001df336040805190810160405280601681526020017f44656661756c7420556e6c6f636b20546f20526f6f7400000000000000000000815250620002a6640100000000026401000000009004565b601260ff16600a0a633b9aca0002600181905550601260ff16600a0a633b9aca00026000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601260ff16600a0a633b9aca00026040518082815260200191505060405180910390a3620006d6565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151562000368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415620003ee57620003ed826000836200050d640100000000026401000000009004565b5b6001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4bf46282901af80a4309ce07c36d841184ce98297f8735f7769d169497ac7a4c600083604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015620004cd578082015181840152602081019050620004b0565b50505050905090810190601f168015620004fb5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515620005cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fb19425af6288c6bb0d88f64d6d1cfe5eb7e2d31ee92f1012798df97a9b6b011a83836040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156200069557808201518184015260208101905062000678565b50505050905090810190601f168015620006c35780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2505050565b61517980620006e66000396000f3006080604052600436106101cc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680623078b0146101d1578063022914a71461025a57806306fdde03146102b5578063095ea7b3146103455780630c870a6b146103aa5780631044c66b1461045557806318160ddd146104b05780631d07b1ec146104db57806323b872dd146105865780632ff2e9dc1461060b578063313ce56714610636578063320a98fd146106675780633d8731ac146106d05780634a7902d2146106fb5780634aa678c314610756578063505450d4146107815780635a791156146107dc57806366188463146108875780636bd5e26a146108ec57806370a08231146109755780637b5ac141146109cc57806383197ef014610a775780638595245414610a8e57806387dcd2b614610ae957806395d89b4114610b40578063a9059cbb14610bd0578063a96ce7aa14610c35578063cb619a3314610c9e578063cd5c4c7014610cf5578063cf30901214610d50578063d712800f14610d7f578063d73dd62314610e12578063dd62ed3e14610e77578063def79ab514610eee578063e22ca81914610f5b578063ebf0c7171461108f578063f913042b146110e6575b600080fd5b3480156101dd57600080fd5b50610258600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506111b1565b005b34801561026657600080fd5b5061029b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611402565b604051808215151515815260200191505060405180910390f35b3480156102c157600080fd5b506102ca611422565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561030a5780820151818401526020810190506102ef565b50505050905090810190601f1680156103375780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561035157600080fd5b50610390600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061145b565b604051808215151515815260200191505060405180910390f35b3480156103b657600080fd5b5061043b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506114a5565b604051808215151515815260200191505060405180910390f35b34801561046157600080fd5b50610496600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611608565b604051808215151515815260200191505060405180910390f35b3480156104bc57600080fd5b506104c561186d565b6040518082815260200191505060405180910390f35b3480156104e757600080fd5b5061056c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611877565b604051808215151515815260200191505060405180910390f35b34801561059257600080fd5b506105f1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aa4565b604051808215151515815260200191505060405180910390f35b34801561061757600080fd5b50610620611af0565b6040518082815260200191505060405180910390f35b34801561064257600080fd5b5061064b611b01565b604051808260ff1660ff16815260200191505060405180910390f35b34801561067357600080fd5b506106ce600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611b06565b005b3480156106dc57600080fd5b506106e5611c9c565b6040518082815260200191505060405180910390f35b34801561070757600080fd5b5061073c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cc0565b604051808215151515815260200191505060405180910390f35b34801561076257600080fd5b5061076b611f25565b6040518082815260200191505060405180910390f35b34801561078d57600080fd5b506107c2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bd565b604051808215151515815260200191505060405180910390f35b3480156107e857600080fd5b5061086d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506120dd565b604051808215151515815260200191505060405180910390f35b34801561089357600080fd5b506108d2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121c4565b604051808215151515815260200191505060405180910390f35b3480156108f857600080fd5b50610973600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061220e565b005b34801561098157600080fd5b506109b6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612416565b6040518082815260200191505060405180910390f35b3480156109d857600080fd5b50610a5d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061245e565b604051808215151515815260200191505060405180910390f35b348015610a8357600080fd5b50610a8c6125c1565b005b348015610a9a57600080fd5b50610acf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126c1565b604051808215151515815260200191505060405180910390f35b348015610af557600080fd5b50610afe612ab1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b4c57600080fd5b50610b55612ad7565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b95578082015181840152602081019050610b7a565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bdc57600080fd5b50610c1b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612b10565b604051808215151515815260200191505060405180910390f35b348015610c4157600080fd5b50610c9c600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612b5a565b005b348015610caa57600080fd5b50610cdf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cf0565b6040518082815260200191505060405180910390f35b348015610d0157600080fd5b50610d36600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d08565b604051808215151515815260200191505060405180910390f35b348015610d5c57600080fd5b50610d656130fa565b604051808215151515815260200191505060405180910390f35b348015610d8b57600080fd5b50610e10600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061310d565b005b348015610e1e57600080fd5b50610e5d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132d2565b604051808215151515815260200191505060405180910390f35b348015610e8357600080fd5b50610ed8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061331c565b6040518082815260200191505060405180910390f35b348015610efa57600080fd5b50610f19600480360381019080803590602001909291905050506133a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f6757600080fd5b50611075600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803560ff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506133e1565b604051808215151515815260200191505060405180910390f35b34801561109b57600080fd5b506110a4613864565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110f257600080fd5b50611197600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061388a565b604051808215151515815260200191505060405180910390f35b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156112e6576112e58260008361310d565b5b6001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4bf46282901af80a4309ce07c36d841184ce98297f8735f7769d169497ac7a4c600083604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156113c35780820151818401526020810190506113a8565b50505050905090810190601f1680156113f05780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25050565b60056020528060005260406000206000915054906101000a900460ff1681565b6040805190810160405280600b81526020017f5748696e7420546f6b656e00000000000000000000000000000000000000000081525081565b600061149d83836040805190810160405280601381526020017f63616c6c656420627920617070726f76652829000000000000000000000000008152506120dd565b905092915050565b60006114b18484613ad0565b90508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f873a5dfdc9d3efb66def120ac20495bf0dc772d6e19c1b8bd78f43da51787e8a600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156115c65780820151818401526020810190506115ab565b50505050905090810190601f1680156115f35780820380516001836020036101000a031916815260200191505b50935050505060405180910390a39392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f526f6f742070726976696c6567652069732072657175697265642e000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001807f54686973206164647265737320746f20626520736574206973207a65726f206181526020017f6464726573732830292e20436865636b2074686520696e70757420616464726581526020017f73732e000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f94b17f1a4844062cbed00809347b0f8149fc88c5a3ea720c7aed42c559eed46d82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160019050919050565b6000600154905090565b60003073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561198f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260618152602001807f546865207265636569766520616464726573732069732074686520436f6e746181526020017f63742041646472657373206f6620536f626c6f20546f6b656e2e20596f75206381526020017f616e6e6f742073656e64206d6f6e657920746f2074686973206164647265737381526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060800191505060405180910390fd5b6119998484613ccc565b90506119aa33338686866000613eea565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fa609c322062a32354cef4c3627f131b25e0a79ca1c09649756e6b790ddf7697485611a0433612416565b611a0d89612416565b876040518085815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611a60578082015181840152602081019050611a45565b50505050905090810190601f168015611a8d5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a39392505050565b6000611ae78484846040805190810160405280601881526020017f63616c6c6564206279207472616e7366657246726f6d2829000000000000000081525061388a565b90509392505050565b601260ff16600a0a633b9aca000281565b601281565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611bc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507fc1086893b0a3f1d991fd25e26cd28cad11de174842b04a55cc2423ed178e4382600760009054906101000a900460ff1682604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611c5e578082015181840152602081019050611c43565b50505050905090810190601f168015611c8b5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a150565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f526f6f742070726976696c6567652069732072657175697265642e000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611e78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001807f54686973206164647265737320746f20626520736574206973207a65726f206181526020017f6464726573732830292e20436865636b2074686520696e70757420616464726581526020017f73732e000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f43ddeae7116ae634a7d05c2d1c588bca11b7bbc8cb96fbb2cb9c5b1afdf9ce1282604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160019050919050565b600080339050600760009054906101000a900460ff161580611f905750600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156120185750600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156120b4576120ad600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461418e90919063ffffffff16565b91506120b9565b600091505b5090565b60086020528060005260406000206000915054906101000a900460ff1681565b60006120e98484614218565b90508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f873a5dfdc9d3efb66def120ac20495bf0dc772d6e19c1b8bd78f43da51787e8a85856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612182578082015181840152602081019050612167565b50505050905090810190601f1680156121af5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a39392505050565b600061220683836040805190810160405280601c81526020017f63616c6c6564206279206465637265617365417070726f76616c28290000000081525061245e565b905092915050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156122cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b6122fa827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8361310d565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4bf46282901af80a4309ce07c36d841184ce98297f8735f7769d169497ac7a4c600183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156123d75780820151818401526020810190506123bc565b50505050905090810190601f1680156124045780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061246a848461430a565b90508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f873a5dfdc9d3efb66def120ac20495bf0dc772d6e19c1b8bd78f43da51787e8a600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561257f578082015181840152602081019050612564565b50505050905090810190601f1680156125ac5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a39392505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f526f6f742070726976696c6567652069732072657175697265642e000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f53757065724f776e65722070726976696c65646765206973207265717569726581526020017f642e00000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561289f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001807f54686973206164647265737320746f20626520736574206973207a65726f206181526020017f6464726573732830292e20436865636b2074686520696e70757420616464726581526020017f73732e000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515612987576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f54686973206164647265737320697320616c726561647920726567697374657281526020017f65642e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060068290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507f5446d64d957daf41eca8227aa8fa5eb7f92c617adf03fbd9df64e8eb564d824e82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160019050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600581526020017f5748494e5400000000000000000000000000000000000000000000000000000081525081565b6000612b5283836040805190810160405280601481526020017f63616c6c6564206279207472616e736665722829000000000000000000000000815250611877565b905092915050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612c1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507fc1086893b0a3f1d991fd25e26cd28cad11de174842b04a55cc2423ed178e4382600760009054906101000a900460ff1682604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612cb2578082015181840152602081019050612c97565b50505050905090810190601f168015612cdf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a150565b60096020528060005260406000206000915090505481565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f53757065724f776e65722070726976696c65646765206973207265717569726581526020017f642e00000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612edd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5468697320696e7075742061646472657373206973206e6f7420616e206f776e81526020017f65722e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600090505b60068054905081101561308d578273ffffffffffffffffffffffffffffffffffffffff16600682815481101515612f6457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613080576006612fc6600160068054905061418e90919063ffffffff16565b815481101515612fd257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110151561300c57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061306d600160068054905061418e90919063ffffffff16565b60068161307a91906150fc565b5061308d565b8080600101915050612f31565b7f1e64d9a491033a9731fa82493f0ab60e9f74294eca27edd93629f1fbaa15d28783604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a16001915050919050565b600760009054906101000a900460ff1681565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156131ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fb19425af6288c6bb0d88f64d6d1cfe5eb7e2d31ee92f1012798df97a9b6b011a83836040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613292578082015181840152602081019050613277565b50505050905090810190601f1680156132bf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2505050565b600061331483836040805190810160405280601c81526020017f63616c6c656420627920696e637265617365417070726f76616c2829000000008152506114a5565b905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6006818154811015156133b257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156134a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b86519150855182141515613549576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001807f5468652073697a65206f662027746f2720616e64202776616c7565732720617281526020017f72617920697320646966666572656e742e00000000000000000000000000000081525060400191505060405180910390fd5b600685600581111561355757fe5b60ff1610151561356657600080fd5b60019250600090505b81811015613859573073ffffffffffffffffffffffffffffffffffffffff16878281518110151561359c57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff16141515156136a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260618152602001807f546865207265636569766520616464726573732069732074686520436f6e746181526020017f63742041646472657373206f6620536f626c6f20546f6b656e2e20596f75206381526020017f616e6e6f742073656e64206d6f6e657920746f2074686973206164647265737381526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060800191505060405180910390fd5b8280156136e657506136e58888838151811015156136be57fe5b9060200190602002015188848151811015156136d657fe5b9060200190602002015161459b565b5b925086818151811015156136f657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f88098165ed6db5b0cb36499c27d46197630154717a26b48aede92bd7cd6ee12b898581518110151561377357fe5b90602001906020020151896137878e612416565b6137a78e8981518110151561379857fe5b90602001906020020151612416565b8b604051808681526020018560058111156137be57fe5b60ff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561380e5780820151818401526020810190506137f3565b50505050905090810190601f16801561383b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a4808060010191505061356f565b505095945050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156139a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260618152602001807f546865207265636569766520616464726573732069732074686520436f6e746181526020017f63742041646472657373206f6620536f626c6f20546f6b656e2e20596f75206381526020017f616e6e6f742073656e64206d6f6e657920746f2074686973206164647265737381526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060800191505060405180910390fd5b6139ad85858561459b565b90506139be85338686866000613eea565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f98885723734242dd9facd4a9d474af4699a809ba2f59ecf9c30a223b905007ee86613a2f8a612416565b613a388a612416565b886040518085815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613a8b578082015181840152602081019050613a70565b50505050905090810190601f168015613ab85780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4949350505050565b6000613b6182600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bb90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60003382600760009054906101000a900460ff161580613d355750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515613da9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f546865206163636f756e742069732063757272656e746c79206c6f636b65642e81525060200191505060405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e3a826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461418e90919063ffffffff16565b10151515613ed6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f5472616e7366657261626c65206c696d69742065786365656465642e2043686581526020017f636b2074686520737461747573206f6620746865206c6f636b2076616c75652e81525060400191505060405180910390fd5b613ee08585614845565b9250505092915050565b600080613f0c8673ffffffffffffffffffffffffffffffffffffffff16614b82565b1561417e578573ffffffffffffffffffffffffffffffffffffffff1660405180807f6f6e536f626c6f546f6b656e526563656976656428616464726573732c61646481526020017f726573732c75696e743235362c75696e74382900000000000000000000000000815250603301905060405180910390207c01000000000000000000000000000000000000000000000000000000009004898988876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182600181111561404d57fe5b60ff1681526020019450505050506000604051808303816000875af1925050509050801561417d578573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f52bcea5f2b1d4e11b2c554106feef51ce4146f2b5fe97e8b026576e10793339388888860405180848152602001806020018360018111156140f857fe5b60ff168152602001828103825284818151815260200191508051906020019080838360005b8381101561413857808201518184015260208101905061411d565b50505050905090810190601f1680156141655780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a460019150614183565b5b600091505b509695505050505050565b600080838311151515614209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b82840390508091505092915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561441b576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144af565b61442e838261418e90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008382600760009054906101000a900460ff1615806146045750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515614678576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f546865206163636f756e742069732063757272656e746c79206c6f636b65642e81525060200191505060405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614709826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461418e90919063ffffffff16565b101515156147a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f5472616e7366657261626c65206c696d69742065786365656465642e2043686581526020017f636b2074686520737461747573206f6620746865206c6f636b2076616c75652e81525060400191505060405180910390fd5b6147b0868686614b95565b925050509392505050565b600080828401905083811015151561483b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515614911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001807f526563697069656e742061646472657373206973207a65726f2061646472657381526020017f732830292e20436865636b20746865206164647265737320616761696e2e000081525060400191505060405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111515156149ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f5468652062616c616e6365206f66206163636f756e7420697320696e7375666681526020017f696369656e742e0000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b614a3e826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461418e90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ad1826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bb90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515614c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001807f526563697069656e742061646472657373206973207a65726f2061646472657381526020017f732830292e20436865636b20746865206164647265737320616761696e2e000081525060400191505060405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515614d3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f5468652062616c616e6365206f66206163636f756e7420697320696e7375666681526020017f696369656e742e0000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515614e57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f496e73756666696369656e7420746f6b656e7320617070726f7665642066726f81526020017f6d206163636f756e74206f776e65722e0000000000000000000000000000000081525060400191505060405180910390fd5b614ea8826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461418e90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f3b826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bb90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061500c82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461418e90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b815481835581811115615123578183600052602060002091820191016151229190615128565b5b505050565b61514a91905b8082111561514657600081600090555060010161512e565b5090565b905600a165627a7a72305820a1d8fa0ee0acac4df746aa903e38529923a5c9c5f96c4ea6a1c5b4ab918a31f40029
Deployed Bytecode
0x6080604052600436106101cc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680623078b0146101d1578063022914a71461025a57806306fdde03146102b5578063095ea7b3146103455780630c870a6b146103aa5780631044c66b1461045557806318160ddd146104b05780631d07b1ec146104db57806323b872dd146105865780632ff2e9dc1461060b578063313ce56714610636578063320a98fd146106675780633d8731ac146106d05780634a7902d2146106fb5780634aa678c314610756578063505450d4146107815780635a791156146107dc57806366188463146108875780636bd5e26a146108ec57806370a08231146109755780637b5ac141146109cc57806383197ef014610a775780638595245414610a8e57806387dcd2b614610ae957806395d89b4114610b40578063a9059cbb14610bd0578063a96ce7aa14610c35578063cb619a3314610c9e578063cd5c4c7014610cf5578063cf30901214610d50578063d712800f14610d7f578063d73dd62314610e12578063dd62ed3e14610e77578063def79ab514610eee578063e22ca81914610f5b578063ebf0c7171461108f578063f913042b146110e6575b600080fd5b3480156101dd57600080fd5b50610258600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506111b1565b005b34801561026657600080fd5b5061029b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611402565b604051808215151515815260200191505060405180910390f35b3480156102c157600080fd5b506102ca611422565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561030a5780820151818401526020810190506102ef565b50505050905090810190601f1680156103375780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561035157600080fd5b50610390600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061145b565b604051808215151515815260200191505060405180910390f35b3480156103b657600080fd5b5061043b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506114a5565b604051808215151515815260200191505060405180910390f35b34801561046157600080fd5b50610496600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611608565b604051808215151515815260200191505060405180910390f35b3480156104bc57600080fd5b506104c561186d565b6040518082815260200191505060405180910390f35b3480156104e757600080fd5b5061056c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611877565b604051808215151515815260200191505060405180910390f35b34801561059257600080fd5b506105f1600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aa4565b604051808215151515815260200191505060405180910390f35b34801561061757600080fd5b50610620611af0565b6040518082815260200191505060405180910390f35b34801561064257600080fd5b5061064b611b01565b604051808260ff1660ff16815260200191505060405180910390f35b34801561067357600080fd5b506106ce600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611b06565b005b3480156106dc57600080fd5b506106e5611c9c565b6040518082815260200191505060405180910390f35b34801561070757600080fd5b5061073c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cc0565b604051808215151515815260200191505060405180910390f35b34801561076257600080fd5b5061076b611f25565b6040518082815260200191505060405180910390f35b34801561078d57600080fd5b506107c2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120bd565b604051808215151515815260200191505060405180910390f35b3480156107e857600080fd5b5061086d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506120dd565b604051808215151515815260200191505060405180910390f35b34801561089357600080fd5b506108d2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121c4565b604051808215151515815260200191505060405180910390f35b3480156108f857600080fd5b50610973600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061220e565b005b34801561098157600080fd5b506109b6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612416565b6040518082815260200191505060405180910390f35b3480156109d857600080fd5b50610a5d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061245e565b604051808215151515815260200191505060405180910390f35b348015610a8357600080fd5b50610a8c6125c1565b005b348015610a9a57600080fd5b50610acf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126c1565b604051808215151515815260200191505060405180910390f35b348015610af557600080fd5b50610afe612ab1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b4c57600080fd5b50610b55612ad7565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b95578082015181840152602081019050610b7a565b50505050905090810190601f168015610bc25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bdc57600080fd5b50610c1b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612b10565b604051808215151515815260200191505060405180910390f35b348015610c4157600080fd5b50610c9c600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612b5a565b005b348015610caa57600080fd5b50610cdf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cf0565b6040518082815260200191505060405180910390f35b348015610d0157600080fd5b50610d36600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d08565b604051808215151515815260200191505060405180910390f35b348015610d5c57600080fd5b50610d656130fa565b604051808215151515815260200191505060405180910390f35b348015610d8b57600080fd5b50610e10600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061310d565b005b348015610e1e57600080fd5b50610e5d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132d2565b604051808215151515815260200191505060405180910390f35b348015610e8357600080fd5b50610ed8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061331c565b6040518082815260200191505060405180910390f35b348015610efa57600080fd5b50610f19600480360381019080803590602001909291905050506133a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f6757600080fd5b50611075600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803560ff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506133e1565b604051808215151515815260200191505060405180910390f35b34801561109b57600080fd5b506110a4613864565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110f257600080fd5b50611197600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061388a565b604051808215151515815260200191505060405180910390f35b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156112e6576112e58260008361310d565b5b6001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4bf46282901af80a4309ce07c36d841184ce98297f8735f7769d169497ac7a4c600083604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156113c35780820151818401526020810190506113a8565b50505050905090810190601f1680156113f05780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25050565b60056020528060005260406000206000915054906101000a900460ff1681565b6040805190810160405280600b81526020017f5748696e7420546f6b656e00000000000000000000000000000000000000000081525081565b600061149d83836040805190810160405280601381526020017f63616c6c656420627920617070726f76652829000000000000000000000000008152506120dd565b905092915050565b60006114b18484613ad0565b90508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f873a5dfdc9d3efb66def120ac20495bf0dc772d6e19c1b8bd78f43da51787e8a600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156115c65780820151818401526020810190506115ab565b50505050905090810190601f1680156115f35780820380516001836020036101000a031916815260200191505b50935050505060405180910390a39392505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f526f6f742070726976696c6567652069732072657175697265642e000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001807f54686973206164647265737320746f20626520736574206973207a65726f206181526020017f6464726573732830292e20436865636b2074686520696e70757420616464726581526020017f73732e000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f94b17f1a4844062cbed00809347b0f8149fc88c5a3ea720c7aed42c559eed46d82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160019050919050565b6000600154905090565b60003073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561198f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260618152602001807f546865207265636569766520616464726573732069732074686520436f6e746181526020017f63742041646472657373206f6620536f626c6f20546f6b656e2e20596f75206381526020017f616e6e6f742073656e64206d6f6e657920746f2074686973206164647265737381526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060800191505060405180910390fd5b6119998484613ccc565b90506119aa33338686866000613eea565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fa609c322062a32354cef4c3627f131b25e0a79ca1c09649756e6b790ddf7697485611a0433612416565b611a0d89612416565b876040518085815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611a60578082015181840152602081019050611a45565b50505050905090810190601f168015611a8d5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a39392505050565b6000611ae78484846040805190810160405280601881526020017f63616c6c6564206279207472616e7366657246726f6d2829000000000000000081525061388a565b90509392505050565b601260ff16600a0a633b9aca000281565b601281565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611bc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507fc1086893b0a3f1d991fd25e26cd28cad11de174842b04a55cc2423ed178e4382600760009054906101000a900460ff1682604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611c5e578082015181840152602081019050611c43565b50505050905090810190601f168015611c8b5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a150565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f526f6f742070726976696c6567652069732072657175697265642e000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611e78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001807f54686973206164647265737320746f20626520736574206973207a65726f206181526020017f6464726573732830292e20436865636b2074686520696e70757420616464726581526020017f73732e000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f43ddeae7116ae634a7d05c2d1c588bca11b7bbc8cb96fbb2cb9c5b1afdf9ce1282604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160019050919050565b600080339050600760009054906101000a900460ff161580611f905750600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156120185750600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156120b4576120ad600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461418e90919063ffffffff16565b91506120b9565b600091505b5090565b60086020528060005260406000206000915054906101000a900460ff1681565b60006120e98484614218565b90508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f873a5dfdc9d3efb66def120ac20495bf0dc772d6e19c1b8bd78f43da51787e8a85856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612182578082015181840152602081019050612167565b50505050905090810190601f1680156121af5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a39392505050565b600061220683836040805190810160405280601c81526020017f63616c6c6564206279206465637265617365417070726f76616c28290000000081525061245e565b905092915050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156122cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b6122fa827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8361310d565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4bf46282901af80a4309ce07c36d841184ce98297f8735f7769d169497ac7a4c600183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156123d75780820151818401526020810190506123bc565b50505050905090810190601f1680156124045780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061246a848461430a565b90508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f873a5dfdc9d3efb66def120ac20495bf0dc772d6e19c1b8bd78f43da51787e8a600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561257f578082015181840152602081019050612564565b50505050905090810190601f1680156125ac5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a39392505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f526f6f742070726976696c6567652069732072657175697265642e000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f53757065724f776e65722070726976696c65646765206973207265717569726581526020017f642e00000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561289f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001807f54686973206164647265737320746f20626520736574206973207a65726f206181526020017f6464726573732830292e20436865636b2074686520696e70757420616464726581526020017f73732e000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515612987576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f54686973206164647265737320697320616c726561647920726567697374657281526020017f65642e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060068290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507f5446d64d957daf41eca8227aa8fa5eb7f92c617adf03fbd9df64e8eb564d824e82604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160019050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600581526020017f5748494e5400000000000000000000000000000000000000000000000000000081525081565b6000612b5283836040805190810160405280601481526020017f63616c6c6564206279207472616e736665722829000000000000000000000000815250611877565b905092915050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612c1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507fc1086893b0a3f1d991fd25e26cd28cad11de174842b04a55cc2423ed178e4382600760009054906101000a900460ff1682604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612cb2578082015181840152602081019050612c97565b50505050905090810190601f168015612cdf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a150565b60096020528060005260406000206000915090505481565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f53757065724f776e65722070726976696c65646765206973207265717569726581526020017f642e00000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612edd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f5468697320696e7075742061646472657373206973206e6f7420616e206f776e81526020017f65722e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600090505b60068054905081101561308d578273ffffffffffffffffffffffffffffffffffffffff16600682815481101515612f6457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613080576006612fc6600160068054905061418e90919063ffffffff16565b815481101515612fd257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110151561300c57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061306d600160068054905061418e90919063ffffffff16565b60068161307a91906150fc565b5061308d565b8080600101915050612f31565b7f1e64d9a491033a9731fa82493f0ab60e9f74294eca27edd93629f1fbaa15d28783604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a16001915050919050565b600760009054906101000a900460ff1681565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156131ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b81600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fb19425af6288c6bb0d88f64d6d1cfe5eb7e2d31ee92f1012798df97a9b6b011a83836040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613292578082015181840152602081019050613277565b50505050905090810190601f1680156132bf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2505050565b600061331483836040805190810160405280601c81526020017f63616c6c656420627920696e637265617365417070726f76616c2829000000008152506114a5565b905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6006818154811015156133b257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156134a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4f776e65722070726976696c656467652069732072657175697265642e00000081525060200191505060405180910390fd5b86519150855182141515613549576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001807f5468652073697a65206f662027746f2720616e64202776616c7565732720617281526020017f72617920697320646966666572656e742e00000000000000000000000000000081525060400191505060405180910390fd5b600685600581111561355757fe5b60ff1610151561356657600080fd5b60019250600090505b81811015613859573073ffffffffffffffffffffffffffffffffffffffff16878281518110151561359c57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff16141515156136a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260618152602001807f546865207265636569766520616464726573732069732074686520436f6e746181526020017f63742041646472657373206f6620536f626c6f20546f6b656e2e20596f75206381526020017f616e6e6f742073656e64206d6f6e657920746f2074686973206164647265737381526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060800191505060405180910390fd5b8280156136e657506136e58888838151811015156136be57fe5b9060200190602002015188848151811015156136d657fe5b9060200190602002015161459b565b5b925086818151811015156136f657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f88098165ed6db5b0cb36499c27d46197630154717a26b48aede92bd7cd6ee12b898581518110151561377357fe5b90602001906020020151896137878e612416565b6137a78e8981518110151561379857fe5b90602001906020020151612416565b8b604051808681526020018560058111156137be57fe5b60ff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561380e5780820151818401526020810190506137f3565b50505050905090810190601f16801561383b5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a4808060010191505061356f565b505095945050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156139a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260618152602001807f546865207265636569766520616464726573732069732074686520436f6e746181526020017f63742041646472657373206f6620536f626c6f20546f6b656e2e20596f75206381526020017f616e6e6f742073656e64206d6f6e657920746f2074686973206164647265737381526020017f2e0000000000000000000000000000000000000000000000000000000000000081525060800191505060405180910390fd5b6139ad85858561459b565b90506139be85338686866000613eea565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f98885723734242dd9facd4a9d474af4699a809ba2f59ecf9c30a223b905007ee86613a2f8a612416565b613a388a612416565b886040518085815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613a8b578082015181840152602081019050613a70565b50505050905090810190601f168015613ab85780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4949350505050565b6000613b6182600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bb90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60003382600760009054906101000a900460ff161580613d355750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515613da9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f546865206163636f756e742069732063757272656e746c79206c6f636b65642e81525060200191505060405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e3a826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461418e90919063ffffffff16565b10151515613ed6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f5472616e7366657261626c65206c696d69742065786365656465642e2043686581526020017f636b2074686520737461747573206f6620746865206c6f636b2076616c75652e81525060400191505060405180910390fd5b613ee08585614845565b9250505092915050565b600080613f0c8673ffffffffffffffffffffffffffffffffffffffff16614b82565b1561417e578573ffffffffffffffffffffffffffffffffffffffff1660405180807f6f6e536f626c6f546f6b656e526563656976656428616464726573732c61646481526020017f726573732c75696e743235362c75696e74382900000000000000000000000000815250603301905060405180910390207c01000000000000000000000000000000000000000000000000000000009004898988876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182600181111561404d57fe5b60ff1681526020019450505050506000604051808303816000875af1925050509050801561417d578573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f52bcea5f2b1d4e11b2c554106feef51ce4146f2b5fe97e8b026576e10793339388888860405180848152602001806020018360018111156140f857fe5b60ff168152602001828103825284818151815260200191508051906020019080838360005b8381101561413857808201518184015260208101905061411d565b50505050905090810190601f1680156141655780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a460019150614183565b5b600091505b509695505050505050565b600080838311151515614209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b82840390508091505092915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561441b576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144af565b61442e838261418e90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008382600760009054906101000a900460ff1615806146045750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1515614678576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f546865206163636f756e742069732063757272656e746c79206c6f636b65642e81525060200191505060405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614709826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461418e90919063ffffffff16565b101515156147a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001807f5472616e7366657261626c65206c696d69742065786365656465642e2043686581526020017f636b2074686520737461747573206f6620746865206c6f636b2076616c75652e81525060400191505060405180910390fd5b6147b0868686614b95565b925050509392505050565b600080828401905083811015151561483b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515614911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001807f526563697069656e742061646472657373206973207a65726f2061646472657381526020017f732830292e20436865636b20746865206164647265737320616761696e2e000081525060400191505060405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111515156149ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f5468652062616c616e6365206f66206163636f756e7420697320696e7375666681526020017f696369656e742e0000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b614a3e826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461418e90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ad1826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bb90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515614c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001807f526563697069656e742061646472657373206973207a65726f2061646472657381526020017f732830292e20436865636b20746865206164647265737320616761696e2e000081525060400191505060405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515614d3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f5468652062616c616e6365206f66206163636f756e7420697320696e7375666681526020017f696369656e742e0000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515614e57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f496e73756666696369656e7420746f6b656e7320617070726f7665642066726f81526020017f6d206163636f756e74206f776e65722e0000000000000000000000000000000081525060400191505060405180910390fd5b614ea8826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461418e90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f3b826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147bb90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061500c82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461418e90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b815481835581811115615123578183600052602060002091820191016151229190615128565b5b505050565b61514a91905b8082111561514657600081600090555060010161512e565b5090565b905600a165627a7a72305820a1d8fa0ee0acac4df746aa903e38529923a5c9c5f96c4ea6a1c5b4ab918a31f40029
Deployed Bytecode Sourcemap
82:430:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16022:229:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16022:229:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11615:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11615:39:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;121:43:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;121:43:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;121:43:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20085:146:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20085:146:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20639:258;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20639:258:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13185:310;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13185:310:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5297:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5297:89:1;;;;;;;;;;;;;;;;;;;;;;;18870:504;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18870:504:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19380:171;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19380:171:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;261:72:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;261:72:2;;;;;;;;;;;;;;;;;;;;;;;215:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;215:35:2;;;;;;;;;;;;;;;;;;;;;;;;;;;15595:109:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15595:109:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14523:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14523:46:1;;;;;;;;;;;;;;;;;;;;;;;12644:268;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12644:268:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16497:273;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16497:273:1;;;;;;;;;;;;;;;;;;;;;;;14655:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14655:43:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20237:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20237:207:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20903:193;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20903:193:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15828:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15828:188:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6222:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6222:105:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21102:268;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21102:268:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23439:70;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23439:70:1;;;;;;13502:377;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13502:377:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11584:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11584:25:1;;;;;;;;;;;;;;;;;;;;;;;;;;;170:39:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;170:39:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;170:39:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18721:143:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18721:143:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15710:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15710:112:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14975:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14975:45:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13885:510;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13885:510:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14492:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14492:25:1;;;;;;;;;;;;;;;;;;;;;;;;;;;16257:168;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16257:168:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20450:183;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20450:183:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9349:170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9349:170:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11660:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11660:26:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22508:925;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22508:925:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11458:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11458:19:1;;;;;;;;;;;;;;;;;;;;;;;;;;;19557:522;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19557:522:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16022:229;12317:6;:18;12324:10;12317:18;;;;;;;;;;;;;;;;;;;;;;;;;12309:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14566:2;16098:10;:16;16109:4;16098:16;;;;;;;;;;;;;;;;:28;16094:73;;;16140:27;16153:4;16159:1;16162:4;16140:12;:27::i;:::-;16094:73;16197:4;16177:11;:17;16189:4;16177:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;16226:4;16217:27;;;16232:5;16239:4;16217:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;16217:27:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16022:229;;:::o;11615:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;121:43:2:-;;;;;;;;;;;;;;;;;;;;:::o;20085:146:1:-;20150:4;20173:51;20186:7;20195:5;20173:51;;;;;;;;;;;;;;;;;;:12;:51::i;:::-;20166:58;;20085:146;;;;:::o;20639:258::-;20736:8;20762:43;20785:7;20794:10;20762:22;:43::i;:::-;20756:49;;20846:7;20820:70;;20834:10;20820:70;;;20855:7;:19;20863:10;20855:19;;;;;;;;;;;;;;;:28;20875:7;20855:28;;;;;;;;;;;;;;;;20885:4;20820:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;20820:70:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20639:258;;;;;:::o;13185:310::-;13259:4;12087;;;;;;;;;;;12073:18;;:10;:18;;;12065:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13308:1;13283:27;;:13;:27;;;;13275:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13406:13;13393:10;;:26;;;;;;;;;;;;;;;;;;13435:32;13453:13;13435:32;;;;;;;;;;;;;;;;;;;;;;13484:4;13477:11;;13185:310;;;:::o;5297:89::-;5341:7;5367:12;;5360:19;;5297:89;:::o;18870:504::-;18949:8;18991:4;18977:19;;:2;:19;;;;18969:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19115:25;19130:2;19134:5;19115:14;:25::i;:::-;19109:31;;19150:110;19163:10;19175;19187:2;19191:5;19198:4;19204:55;19150:12;:110::i;:::-;;19313:2;19284:83;;19301:10;19284:83;;;19317:5;19324:21;19334:10;19324:9;:21::i;:::-;19347:13;19357:2;19347:9;:13::i;:::-;19362:4;19284:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;19284:83:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18870:504;;;;;:::o;19380:171::-;19459:4;19482:62;19500:4;19506:2;19510:5;19482:62;;;;;;;;;;;;;;;;;;:17;:62::i;:::-;19475:69;;19380:171;;;;;:::o;261:72:2:-;248:2;315:17;;309:2;:23;302:3;:31;261:72;:::o;215:35::-;248:2;215:35;:::o;15595:109:1:-;12317:6;:18;12324:10;12317:18;;;;;;;;;;;;;;;;;;;;;;;;;12309:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15658:4;15649:6;;:13;;;;;;;;;;;;;;;;;;15677:20;15684:6;;;;;;;;;;;15692:4;15677:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;15677:20:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15595:109;:::o;14523:46::-;14566:2;14523:46;:::o;12644:268::-;12706:4;12087;;;;;;;;;;;12073:18;;:10;:18;;;12065:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12749:1;12730:21;;:7;:21;;;;12722:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12841:7;12834:4;;:14;;;;;;;;;;;;;;;;;;12864:20;12876:7;12864:20;;;;;;;;;;;;;;;;;;;;;;12901:4;12894:11;;12644:268;;;:::o;16497:273::-;16546:7;16565:12;16580:10;16565:25;;16606:6;;;;;;;;;;;16605:7;:28;;;;16616:11;:17;16628:4;16616:17;;;;;;;;;;;;;;;;;;;;;;;;;16605:28;16604:67;;;;;16655:10;:16;16666:4;16655:16;;;;;;;;;;;;;;;;16638:8;:14;16647:4;16638:14;;;;;;;;;;;;;;;;:33;16604:67;16600:163;;;16692:36;16711:10;:16;16722:4;16711:16;;;;;;;;;;;;;;;;16692:8;:14;16701:4;16692:14;;;;;;;;;;;;;;;;:18;;:36;;;;:::i;:::-;16685:43;;;;16600:163;16762:1;16755:8;;16497:273;;;:::o;14655:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;20237:207::-;20320:8;20346:29;20360:7;20369:5;20346:13;:29::i;:::-;20340:35;;20416:7;20390:47;;20404:10;20390:47;;;20425:5;20432:4;20390:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;20390:47:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20237:207;;;;;:::o;20903:193::-;20987:4;21010:79;21032:7;21041:15;21010:79;;;;;;;;;;;;;;;;;;:21;:79::i;:::-;21003:86;;20903:193;;;;:::o;15828:188::-;12317:6;:18;12324:10;12317:18;;;;;;;;;;;;;;;;;;;;;;;;;12309:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15898:34;15911:4;14566:2;15927:4;15898:12;:34::i;:::-;15962:5;15942:11;:17;15954:4;15942:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;15992:4;15983:26;;;15998:4;16004;15983:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;15983:26:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15828:188;;:::o;6222:105::-;6278:7;6304:8;:16;6313:6;6304:16;;;;;;;;;;;;;;;;6297:23;;6222:105;;;:::o;21102:268::-;21204:8;21230:48;21253:7;21262:15;21230:22;:48::i;:::-;21224:54;;21319:7;21293:70;;21307:10;21293:70;;;21328:7;:19;21336:10;21328:19;;;;;;;;;;;;;;;:28;21348:7;21328:28;;;;;;;;;;;;;;;;21358:4;21293:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;21293:70:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21102:268;;;;;:::o;23439:70::-;12087:4;;;;;;;;;;;12073:18;;:10;:18;;;12065:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23497:4;;;;;;;;;;;23484:18;;;13502:377;13566:4;12205:10;;;;;;;;;;;12191:24;;:10;:24;;;12183:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13607:1;13590:19;;:5;:19;;;;13582:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13700:6;:13;13707:5;13700:13;;;;;;;;;;;;;;;;;;;;;;;;;13699:14;13691:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13780:4;13764:6;:13;13771:5;13764:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;13794:9;13809:5;13794:21;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;13794:21:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13831:20;13845:5;13831:20;;;;;;;;;;;;;;;;;;;;;;13868:4;13861:11;;13502:377;;;:::o;11584:25::-;;;;;;;;;;;;;:::o;170:39:2:-;;;;;;;;;;;;;;;;;;;;:::o;18721:143:1:-;18782:8;18809:48;18823:2;18827:5;18809:48;;;;;;;;;;;;;;;;;;:13;:48::i;:::-;18802:55;;18721:143;;;;:::o;15710:112::-;12317:6;:18;12324:10;12317:18;;;;;;;;;;;;;;;;;;;;;;;;;12309:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15775:5;15766:6;;:14;;;;;;;;;;;;;;;;;;15795:20;15802:6;;;;;;;;;;;15810:4;15795:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;15795:20:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15710:112;:::o;14975:45::-;;;;;;;;;;;;;;;;;:::o;13885:510::-;13952:4;14075:9;12205:10;;;;;;;;;;;12191:24;;:10;:24;;;12183:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13976:6;:13;13983:5;13976:13;;;;;;;;;;;;;;;;;;;;;;;;;13968:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14046:6;:13;14053:5;14046:13;;;;;;;;;;;;;;;;14039:20;;;;;;;;;;;14087:1;14075:13;;14070:263;14094:9;:16;;;;14090:1;:20;14070:263;;;14151:5;14135:21;;:9;14145:1;14135:12;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;14131:192;;;14191:9;14201:23;14222:1;14201:9;:16;;;;:20;;:23;;;;:::i;:::-;14191:34;;;;;;;;;;;;;;;;;;;;;;;;;;;14176:9;14186:1;14176:12;;;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;14262:23;14283:1;14262:9;:16;;;;:20;;:23;;;;:::i;:::-;14243:9;:42;;;;;:::i;:::-;;14303:5;;14131:192;14112:3;;;;;;;14070:263;;;14348:19;14361:5;14348:19;;;;;;;;;;;;;;;;;;;;;;14384:4;14377:11;;13885:510;;;;:::o;14492:25::-;;;;;;;;;;;;;:::o;16257:168::-;12317:6;:18;12324:10;12317:18;;;;;;;;;;;;;;;;;;;;;;;;;12309:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16367:5;16348:10;:16;16359:4;16348:16;;;;;;;;;;;;;;;:24;;;;16400:4;16387:31;;;16406:5;16413:4;16387:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;16387:31:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16257:168;;;:::o;20450:183::-;20529:4;20552:74;20574:7;20583:10;20552:74;;;;;;;;;;;;;;;;;;:21;:74::i;:::-;20545:81;;20450:183;;;;:::o;9349:170::-;9457:7;9487;:15;9495:6;9487:15;;;;;;;;;;;;;;;:25;9503:8;9487:25;;;;;;;;;;;;;;;;9480:32;;9349:170;;;;:::o;11660:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22508:925::-;22686:8;22706:14;22904:9;12317:6;:18;12324:10;12317:18;;;;;;;;;;;;;;;;;;;;;;;;;12309:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22723:2;:9;22706:26;;22760:6;:13;22750:6;:23;22742:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22866:1;22855:7;22849:14;;;;;;;;:18;;;22841:27;;;;;;;;22885:4;22879:10;;22916:1;22904:13;;22899:528;22923:6;22919:1;:10;22899:528;;;22975:4;22958:22;;:2;22961:1;22958:5;;;;;;;;;;;;;;;;;;:22;;;;22950:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23103:3;:49;;;;;23110:42;23129:4;23135:2;23138:1;23135:5;;;;;;;;;;;;;;;;;;23142:6;23149:1;23142:9;;;;;;;;;;;;;;;;;;23110:18;:42::i;:::-;23103:49;23097:55;;23349:2;23352:1;23349:5;;;;;;;;;;;;;;;;;;23309:107;;23337:10;23309:107;;23331:4;23309:107;;;23356:6;23363:1;23356:9;;;;;;;;;;;;;;;;;;23367:7;23376:15;23386:4;23376:9;:15::i;:::-;23393:16;23403:2;23406:1;23403:5;;;;;;;;;;;;;;;;;;23393:9;:16::i;:::-;23411:4;23309:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;23309:107:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22931:3;;;;;;;22899:528;;;22508:925;;;;;;;;;:::o;11458:19::-;;;;;;;;;;;;;:::o;19557:522::-;19654:8;19696:4;19682:19;;:2;:19;;;;19674:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19820:35;19839:4;19845:2;19849:5;19820:18;:35::i;:::-;19814:41;;19865:104;19878:4;19884:10;19896:2;19900:5;19907:4;19913:55;19865:12;:104::i;:::-;;20024:2;19985:87;;20012:10;19985:87;;20006:4;19985:87;;;20028:5;20035:15;20045:4;20035:9;:15::i;:::-;20052:13;20062:2;20052:9;:13::i;:::-;20067:4;19985:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;19985:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19557:522;;;;;;:::o;9991:324::-;10102:4;10164:46;10198:11;10164:7;:19;10172:10;10164:19;;;;;;;;;;;;;;;:29;10184:8;10164:29;;;;;;;;;;;;;;;;:33;;:46;;;;:::i;:::-;10122:7;:19;10130:10;10122:19;;;;;;;;;;;;;;;:29;10142:8;10122:29;;;;;;;;;;;;;;;:89;;;;10247:8;10226:61;;10235:10;10226:61;;;10257:7;:19;10265:10;10257:19;;;;;;;;;;;;;;;:29;10277:8;10257:29;;;;;;;;;;;;;;;;10226:61;;;;;;;;;;;;;;;;;;10304:4;10297:11;;9991:324;;;;:::o;16776:147::-;16868:4;16833:10;16845:5;15375:6;;;;;;;;;;;15374:7;:28;;;;15385:11;:17;15397:4;15385:17;;;;;;;;;;;;;;;;;;;;;;;;;15374:28;15366:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15486:10;:16;15497:4;15486:16;;;;;;;;;;;;;;;;15457:25;15476:5;15457:8;:14;15466:4;15457:14;;;;;;;;;;;;;;;;:18;;:25;;;;:::i;:::-;:45;;15449:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16891:25;16906:2;16910:5;16891:14;:25::i;:::-;16884:32;;16776:147;;;;;;:::o;21382:714::-;21603:4;21654:11;21623:15;:2;:13;;;:15::i;:::-;21619:440;;;21676:2;21668:16;;21709:64;;;;;;;;;;;;;;;;;;;;;;;;21668:220;;;21792:5;21815:7;21840:5;21863:11;21668:220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21654:234;;21906:6;21902:147;;;21976:2;21937:68;;21967:7;21937:68;;21960:5;21937:68;;;21980:5;21987:4;21993:11;21937:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;21937:68:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22030:4;22023:11;;;;21902:147;21619:440;22084:5;22077:12;;21382:714;;;;;;;;;;:::o;2747:179::-;2805:7;2883:9;2837:1;2832;:6;;2824:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2899:1;2895;:5;2883:17;;2918:1;2911:8;;2747:179;;;;;:::o;8814:202::-;8881:4;8929:6;8897:7;:19;8905:10;8897:19;;;;;;;;;;;;;;;:29;8917:8;8897:29;;;;;;;;;;;;;;;:38;;;;8971:8;8950:38;;8959:10;8950:38;;;8981:6;8950:38;;;;;;;;;;;;;;;;;;9005:4;8998:11;;8814:202;;;;:::o;10792:481::-;10908:4;10928:16;10947:7;:19;10955:10;10947:19;;;;;;;;;;;;;;;:29;10967:8;10947:29;;;;;;;;;;;;;;;;10928:48;;11009:8;10990:16;:27;10986:184;;;11065:1;11033:7;:19;11041:10;11033:19;;;;;;;;;;;;;;;:29;11053:8;11033:29;;;;;;;;;;;;;;;:33;;;;10986:184;;;11129:30;11142:16;11129:8;:12;;:30;;;;:::i;:::-;11097:7;:19;11105:10;11097:19;;;;;;;;;;;;;;;:29;11117:8;11097:29;;;;;;;;;;;;;;;:62;;;;10986:184;11205:8;11184:61;;11193:10;11184:61;;;11215:7;:19;11223:10;11215:19;;;;;;;;;;;;;;;:29;11235:8;11215:29;;;;;;;;;;;;;;;;11184:61;;;;;;;;;;;;;;;;;;11262:4;11255:11;;10792:481;;;;;:::o;16929:169::-;17033:4;17004;17010:5;15375:6;;;;;;;;;;;15374:7;:28;;;;15385:11;:17;15397:4;15385:17;;;;;;;;;;;;;;;;;;;;;;;;;15374:28;15366:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15486:10;:16;15497:4;15486:16;;;;;;;;;;;;;;;;15457:25;15476:5;15457:8;:14;15466:4;15457:14;;;;;;;;;;;;;;;;:18;;:25;;;;:::i;:::-;:45;;15449:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17056:35;17075:4;17081:2;17085:5;17056:18;:35::i;:::-;17049:42;;16929:169;;;;;;;:::o;2307:176::-;2365:7;2384:9;2400:1;2396;:5;2384:17;;2424:1;2419;:6;;2411:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2475:1;2468:8;;2307:176;;;;;:::o;5552:456::-;5615:4;5654:1;5639:17;;:3;:17;;;;5631:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5751:8;:20;5760:10;5751:20;;;;;;;;;;;;;;;;5741:6;:30;;5733:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5849:32;5874:6;5849:8;:20;5858:10;5849:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5826:8;:20;5835:10;5826:20;;;;;;;;;;;;;;;:55;;;;5907:25;5925:6;5907:8;:13;5916:3;5907:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;5891:8;:13;5900:3;5891:13;;;;;;;;;;;;;;;:41;;;;5968:3;5947:33;;5956:10;5947:33;;;5973:6;5947:33;;;;;;;;;;;;;;;;;;5997:4;5990:11;;5552:456;;;;:::o;452:618::-;509:4;525:12;1032:4;1020:17;1012:25;;1062:1;1055:4;:8;1048:15;;452:618;;;;:::o;7495:681::-;7615:4;7658:1;7643:17;;:3;:17;;;;7635:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7755:8;:15;7764:5;7755:15;;;;;;;;;;;;;;;;7745:6;:25;;7737:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7842:7;:14;7850:5;7842:14;;;;;;;;;;;;;;;:26;7857:10;7842:26;;;;;;;;;;;;;;;;7832:6;:36;;7824:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7950:27;7970:6;7950:8;:15;7959:5;7950:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;7932:8;:15;7941:5;7932:15;;;;;;;;;;;;;;;:45;;;;8003:25;8021:6;8003:8;:13;8012:3;8003:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;7987:8;:13;7996:3;7987:13;;;;;;;;;;;;;;;:41;;;;8067:38;8098:6;8067:7;:14;8075:5;8067:14;;;;;;;;;;;;;;;:26;8082:10;8067:26;;;;;;;;;;;;;;;;:30;;:38;;;;:::i;:::-;8038:7;:14;8046:5;8038:14;;;;;;;;;;;;;;;:26;8053:10;8038:26;;;;;;;;;;;;;;;:67;;;;8136:3;8120:28;;8129:5;8120:28;;;8141:6;8120:28;;;;;;;;;;;;;;;;;;8165:4;8158:11;;7495:681;;;;;:::o;82:430:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://a1d8fa0ee0acac4df746aa903e38529923a5c9c5f96c4ea6a1c5b4ab918a31f4
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.