Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 325 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Construct User I... | 9032899 | 1858 days ago | IN | 0 ETH | 0.00607604 | ||||
Construct User I... | 8915015 | 1878 days ago | IN | 0 ETH | 0.00349387 | ||||
Construct User I... | 8429747 | 1955 days ago | IN | 0 ETH | 0.0136711 | ||||
Construct User I... | 8392920 | 1961 days ago | IN | 0 ETH | 0.01367168 | ||||
Construct User I... | 8359480 | 1966 days ago | IN | 0 ETH | 0.00607579 | ||||
Construct User I... | 8208712 | 1989 days ago | IN | 0 ETH | 0.00303815 | ||||
Construct User I... | 8117411 | 2003 days ago | IN | 0 ETH | 0.00455722 | ||||
Construct User I... | 8083978 | 2009 days ago | IN | 0 ETH | 0.00926636 | ||||
Construct User I... | 7857585 | 2044 days ago | IN | 0 ETH | 0.0060763 | ||||
Construct User I... | 7769798 | 2058 days ago | IN | 0 ETH | 0.01367168 | ||||
Construct User I... | 7753211 | 2060 days ago | IN | 0 ETH | 0.01367168 | ||||
Construct User I... | 7721429 | 2065 days ago | IN | 0 ETH | 0.00911407 | ||||
Construct User I... | 7720111 | 2066 days ago | IN | 0 ETH | 0.0060763 | ||||
Construct User I... | 7687711 | 2071 days ago | IN | 0 ETH | 0.0060763 | ||||
Construct User I... | 7643838 | 2077 days ago | IN | 0 ETH | 0.0060763 | ||||
Construct User I... | 7603211 | 2084 days ago | IN | 0 ETH | 0.0060763 | ||||
Construct User I... | 7528658 | 2095 days ago | IN | 0 ETH | 0.0060763 | ||||
Construct User I... | 7519539 | 2097 days ago | IN | 0 ETH | 0.00455722 | ||||
Construct User I... | 7469693 | 2105 days ago | IN | 0 ETH | 0.00607604 | ||||
Construct User I... | 7456127 | 2107 days ago | IN | 0 ETH | 0.0060763 | ||||
Construct User I... | 7445649 | 2108 days ago | IN | 0 ETH | 0.00455722 | ||||
Construct User I... | 7441194 | 2109 days ago | IN | 0 ETH | 0.00303815 | ||||
Construct User I... | 7417880 | 2113 days ago | IN | 0 ETH | 0.0060763 | ||||
Construct User I... | 7413441 | 2113 days ago | IN | 0 ETH | 0.0060763 | ||||
Construct User I... | 7394645 | 2116 days ago | IN | 0 ETH | 0.00455722 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
Contract Name:
ZincAccessor
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-09-04 */ pragma solidity ^0.4.24; contract ERC725 { uint256 public constant MANAGEMENT_KEY = 1; uint256 public constant ACTION_KEY = 2; uint256 public constant CLAIM_SIGNER_KEY = 3; uint256 public constant ENCRYPTION_KEY = 4; event KeyAdded(bytes32 indexed key, uint256 indexed purpose, uint256 indexed keyType); event KeyRemoved(bytes32 indexed key, uint256 indexed purpose, uint256 indexed keyType); event ExecutionRequested(uint256 indexed executionId, address indexed to, uint256 indexed value, bytes data); event Executed(uint256 indexed executionId, address indexed to, uint256 indexed value, bytes data); event Approved(uint256 indexed executionId, bool approved); struct Key { uint256[] purpose; //e.g., MANAGEMENT_KEY = 1, ACTION_KEY = 2, etc. uint256 keyType; // e.g. 1 = ECDSA, 2 = RSA, etc. bytes32 key; } function getKey(bytes32 _key) public constant returns(uint256[] purpose, uint256 keyType, bytes32 key); function getKeyPurpose(bytes32 _key) public constant returns(uint256[] purpose); function getKeysByPurpose(uint256 _purpose) public constant returns(bytes32[] keys); function addKey(bytes32 _key, uint256 _purpose, uint256 _keyType) public returns (bool success); function removeKey(bytes32 _key, uint256 _purpose) public returns (bool success); function execute(address _to, uint256 _value, bytes _data) public returns (uint256 executionId); function approve(uint256 _id, bool _approve) public returns (bool success); } contract ERC20Basic { function balanceOf(address _who) public constant returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract Identity is ERC725 { uint256 constant LOGIN_KEY = 10; uint256 constant FUNDS_MANAGEMENT = 11; uint256 executionNonce; struct Execution { address to; uint256 value; bytes data; bool approved; bool executed; } mapping (bytes32 => Key) keys; mapping (uint256 => bytes32[]) keysByPurpose; mapping (uint256 => Execution) executions; event ExecutionFailed(uint256 indexed executionId, address indexed to, uint256 indexed value, bytes data); modifier onlyManagement() { require(keyHasPurpose(keccak256(msg.sender), MANAGEMENT_KEY), "Sender does not have management key"); _; } modifier onlyAction() { require(keyHasPurpose(keccak256(msg.sender), ACTION_KEY), "Sender does not have action key"); _; } modifier onlyFundsManagement() { require(keyHasPurpose(keccak256(msg.sender), FUNDS_MANAGEMENT), "Sender does not have funds key"); _; } constructor() public { bytes32 _key = keccak256(msg.sender); keys[_key].key = _key; keys[_key].purpose = [MANAGEMENT_KEY]; keys[_key].keyType = 1; keysByPurpose[MANAGEMENT_KEY].push(_key); emit KeyAdded(_key, MANAGEMENT_KEY, 1); } function getKey(bytes32 _key) public view returns(uint256[] purpose, uint256 keyType, bytes32 key) { return (keys[_key].purpose, keys[_key].keyType, keys[_key].key); } function getKeyPurpose(bytes32 _key) public view returns(uint256[] purpose) { return (keys[_key].purpose); } function getKeysByPurpose(uint256 _purpose) public view returns(bytes32[] _keys) { return keysByPurpose[_purpose]; } function addKey(bytes32 _key, uint256 _purpose, uint256 _type) public onlyManagement returns (bool success) { if (keyHasPurpose(_key, _purpose)) { return true; } keys[_key].key = _key; keys[_key].purpose.push(_purpose); keys[_key].keyType = _type; keysByPurpose[_purpose].push(_key); emit KeyAdded(_key, _purpose, _type); return true; } function approve(uint256 _id, bool _approve) public onlyAction returns (bool success) { emit Approved(_id, _approve); if (_approve == true) { executions[_id].approved = true; success = executions[_id].to.call(executions[_id].data, 0); if (success) { executions[_id].executed = true; emit Executed( _id, executions[_id].to, executions[_id].value, executions[_id].data ); } else { emit ExecutionFailed( _id, executions[_id].to, executions[_id].value, executions[_id].data ); } return success; } else { executions[_id].approved = false; } return true; } function execute(address _to, uint256 _value, bytes _data) public returns (uint256 executionId) { require(!executions[executionNonce].executed, "Already executed"); executions[executionNonce].to = _to; executions[executionNonce].value = _value; executions[executionNonce].data = _data; emit ExecutionRequested(executionNonce, _to, _value, _data); if (keyHasPurpose(keccak256(msg.sender), ACTION_KEY)) { approve(executionNonce, true); } executionNonce++; return executionNonce-1; } function removeKey(bytes32 _key, uint256 _purpose) public onlyManagement returns (bool success) { require(keys[_key].key == _key, "No such key"); if (!keyHasPurpose(_key, _purpose)) { return false; } uint256 arrayLength = keys[_key].purpose.length; int index = -1; for (uint i = 0; i < arrayLength; i++) { if (keys[_key].purpose[i] == _purpose) { index = int(i); break; } } if (index != -1) { keys[_key].purpose[uint(index)] = keys[_key].purpose[arrayLength - 1]; delete keys[_key].purpose[arrayLength - 1]; keys[_key].purpose.length--; } uint256 purposesLen = keysByPurpose[_purpose].length; for (uint j = 0; j < purposesLen; j++) { if (keysByPurpose[_purpose][j] == _key) { keysByPurpose[_purpose][j] = keysByPurpose[_purpose][purposesLen - 1]; delete keysByPurpose[_purpose][purposesLen - 1]; keysByPurpose[_purpose].length--; break; } } emit KeyRemoved(_key, _purpose, keys[_key].keyType); return true; } function keyHasPurpose(bytes32 _key, uint256 _purpose) public view returns(bool result) { if (keys[_key].key == 0) return false; uint256 arrayLength = keys[_key].purpose.length; for (uint i = 0; i < arrayLength; i++) { if (keys[_key].purpose[i] == _purpose) { return true; } } return false; } /** * Send all ether to msg.sender * Requires FUNDS_MANAGEMENT purpose for msg.sender */ function withdraw() public onlyFundsManagement { msg.sender.transfer(address(this).balance); } /** * Transfer ether to _account * @param _amount amount to transfer in wei * @param _account recepient * Requires FUNDS_MANAGEMENT purpose for msg.sender */ function transferEth(uint _amount, address _account) public onlyFundsManagement { require(_amount <= address(this).balance, "Amount should be less than total balance of the contract"); require(_account != address(0), "must be valid address"); _account.transfer(_amount); } /** * Returns contract eth balance */ function getBalance() public view returns(uint) { return address(this).balance; } /** * Returns ERC20 token balance for _token * @param _token token address */ function getTokenBalance(address _token) public view returns (uint) { return ERC20Basic(_token).balanceOf(this); } /** * Send all tokens for _token to msg.sender * @param _token ERC20 contract address * Requires FUNDS_MANAGEMENT purpose for msg.sender */ function withdrawTokens(address _token) public onlyFundsManagement { require(_token != address(0)); ERC20Basic token = ERC20Basic(_token); uint balance = token.balanceOf(this); // token returns true on successful transfer assert(token.transfer(msg.sender, balance)); } /** * Send tokens for _token to _to * @param _token ERC20 contract address * @param _to recepient * @param _amount amount in * Requires FUNDS_MANAGEMENT purpose for msg.sender */ function transferTokens(address _token, address _to, uint _amount) public onlyFundsManagement { require(_token != address(0)); require(_to != address(0)); ERC20Basic token = ERC20Basic(_token); uint balance = token.balanceOf(this); require(_amount <= balance); assert(token.transfer(_to, _amount)); } function () public payable {} } contract Encoder { function uintToChar(uint8 _uint) internal pure returns(string) { byte b = "\x30"; // ASCII code for 0 if (_uint > 9) { b = "\x60"; // ASCII code for the char before a _uint -= 9; } bytes memory bs = new bytes(1); bs[0] = b | byte(_uint); return string(bs); } /** * Encodes the string representation of a uint8 into bytes */ function encodeUInt(uint256 _uint) public pure returns(bytes memory) { if (_uint == 0) { return abi.encodePacked(uintToChar(0)); } bytes memory result; uint256 x = _uint; while (x > 0) { result = abi.encodePacked(uintToChar(uint8(x % 10)), result); x /= 10; } return result; } /** * Encodes the string representation of an address into bytes */ function encodeAddress(address _address) public pure returns (bytes memory res) { for (uint i = 0; i < 20; i++) { // get each byte of the address byte b = byte(uint8(uint(_address) / (2**(8*(19 - i))))); // split it into two uint8 high = uint8(b >> 4); uint8 low = uint8(b) & 15; // and encode them as chars res = abi.encodePacked(res, uintToChar(high), uintToChar(low)); } return res; } /** * Encodes a string into bytes */ function encodeString(string _str) public pure returns (bytes memory) { return abi.encodePacked(_str); } } contract SignatureValidator { function doHash(string _message1, uint32 _message2, string _header1, string _header2) pure internal returns (bytes32) { return keccak256( abi.encodePacked( keccak256(abi.encodePacked(_header1, _header2)), keccak256(abi.encodePacked(_message1, _message2))) ); } /** * Returns address of signer for a signed message * @param _message1 message that was signed * @param _nonce nonce that was part of the signed message * @param _header1 header for the message (ex: "string Message") * @param _header2 header for the nonce (ex: "uint32 nonce") * @param _r r from ECDSA * @param _s s from ECDSA * @param _v recovery id */ function checkSignature(string _message1, uint32 _nonce, string _header1, string _header2, bytes32 _r, bytes32 _s, uint8 _v) public pure returns (address) { bytes32 hash = doHash(_message1, _nonce, _header1, _header2); return ecrecover(hash, _v, _r, _s); } } /** * ZincAccesor contract used for constructing and managing Identity contracts * Access control is based on signed messages * This contract can be used as a trustless entity that creates an Identity contract and is used to manage it. * It operates as a proxy in order to allow users to interact with it based on signed messages and not spend any gas * It can be upgraded with the user consent by adding a instance of a new version and removing the old one. */ contract ZincAccessor is SignatureValidator, Encoder { uint256 public nonce = 0; event UserIdentityCreated(address indexed userAddress, address indexed identityContractAddress); event AccessorAdded(address indexed identityContractAddress, address indexed keyAddress, uint256 indexed purpose); event AccessorRemoved(address indexed identityContractAddress, address indexed keyAddress, uint256 indexed purpose); function checkUserSignature( address _userAddress, string _message1, uint32 _nonce, string _header1, string _header2, bytes32 _r, bytes32 _s, uint8 _v) pure internal returns (bool) { require( checkSignature(_message1, _nonce, _header1, _header2, _r, _s, _v) == _userAddress, "User signature must be the same as signed message"); return true; } modifier checknonce(uint _nonce) { require(++nonce == _nonce, "Wrong nonce"); _; } /** * Constructs an Identity contract and returns its address * Requires a signed message to verify the identity of the initial user address * @param _userAddress user address * @param _message1 message that was signed * @param _nonce nonce that was part of the signed message * @param _header1 header for the message (ex: "string Message") * @param _header2 header for the nonce (ex: "uint32 nonce") * @param _r r from ECDSA * @param _s s from ECDSA * @param _v recovery id */ function constructUserIdentity( address _userAddress, string _message1, uint32 _nonce, string _header1, string _header2, bytes32 _r, bytes32 _s, uint8 _v) public returns (address) { require( checkUserSignature(_userAddress, _message1, _nonce, _header1, _header2, _r, _s, _v), "User Signature does not match"); Identity id = new Identity(); id.addKey(keccak256(_userAddress), id.MANAGEMENT_KEY(), 1); emit UserIdentityCreated(_userAddress, address(id)); return address(id); } /** * Adds an accessor to an Identity contract * Requires a signed message to verify the identity of the initial user address * Requires _userAddress to have KEY_MANAGEMENT purpose on the Identity contract * Emits AccessorAdded * @param _key key to add to Identity * @param _purpose purpose for _key * @param _idContract address if Identity contract * @param _userAddress user address * @param _message1 message that was signed of the form "Add {_key} to {_idContract} with purpose {_purpose}" * @param _nonce nonce that was part of the signed message * @param _header1 header for the message (ex: "string Message") * @param _header2 header for the nonce (ex: "uint32 nonce") * @param _r r from ECDSA * @param _s s from ECDSA * @param _v recovery id */ function addAccessor( address _key, address _idContract, uint256 _purpose, address _userAddress, string _message1, uint32 _nonce, string _header1, string _header2, bytes32 _r, bytes32 _s, uint8 _v) public checknonce(_nonce) returns (bool) { require(checkUserSignature(_userAddress, _message1, _nonce, _header1, _header2, _r, _s, _v)); require( keccak256(abi.encodePacked("Add 0x", encodeAddress(_key), " to 0x", encodeAddress(_idContract), " with purpose ", encodeUInt(_purpose))) == keccak256(encodeString(_message1)), "Message incorrect"); Identity id = Identity(_idContract); require(id.keyHasPurpose(keccak256(_userAddress), id.MANAGEMENT_KEY())); id.addKey(keccak256(_key), _purpose, 1); emit AccessorAdded(_idContract, _key, _purpose); return true; } /** * Remove an accessor from Identity contract * Requires a signed message to verify the identity of the initial user address * Requires _userAddress to have KEY_MANAGEMENT purpose on the Identity contract * Emits AccessorRemoved * @param _key key to add to Identity * @param _idContract address if Identity contract * @param _userAddress user address * @param _message1 message that was signed of the form "Remove {_key} from {_idContract}" * @param _nonce nonce that was part of the signed message * @param _header1 header for the message (ex: "string Message") * @param _header2 header for the nonce (ex: "uint32 nonce") * @param _r r from ECDSA * @param _s s from ECDSA * @param _v recovery id */ function removeAccessor( address _key, address _idContract, uint256 _purpose, address _userAddress, string _message1, uint32 _nonce, string _header1, string _header2, bytes32 _r, bytes32 _s, uint8 _v) public checknonce(_nonce) returns (bool) { require(checkUserSignature(_userAddress, _message1, _nonce, _header1, _header2, _r, _s, _v)); require( keccak256(abi.encodePacked("Remove 0x", encodeAddress(_key), " from 0x", encodeAddress(_idContract), " with purpose ", encodeUInt(_purpose))) == keccak256(encodeString(_message1)), "Message incorrect"); Identity id = Identity(_idContract); require(id.keyHasPurpose(keccak256(_userAddress), id.MANAGEMENT_KEY())); id.removeKey(keccak256(_key), _purpose); emit AccessorRemoved(_idContract, _key, _purpose); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_key","type":"address"},{"name":"_idContract","type":"address"},{"name":"_purpose","type":"uint256"},{"name":"_userAddress","type":"address"},{"name":"_message1","type":"string"},{"name":"_nonce","type":"uint32"},{"name":"_header1","type":"string"},{"name":"_header2","type":"string"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_v","type":"uint8"}],"name":"addAccessor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"address"},{"name":"_idContract","type":"address"},{"name":"_purpose","type":"uint256"},{"name":"_userAddress","type":"address"},{"name":"_message1","type":"string"},{"name":"_nonce","type":"uint32"},{"name":"_header1","type":"string"},{"name":"_header2","type":"string"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_v","type":"uint8"}],"name":"removeAccessor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_message1","type":"string"},{"name":"_nonce","type":"uint32"},{"name":"_header1","type":"string"},{"name":"_header2","type":"string"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_v","type":"uint8"}],"name":"checkSignature","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_uint","type":"uint256"}],"name":"encodeUInt","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"nonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"encodeAddress","outputs":[{"name":"res","type":"bytes"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_userAddress","type":"address"},{"name":"_message1","type":"string"},{"name":"_nonce","type":"uint32"},{"name":"_header1","type":"string"},{"name":"_header2","type":"string"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_v","type":"uint8"}],"name":"constructUserIdentity","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_str","type":"string"}],"name":"encodeString","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"pure","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"userAddress","type":"address"},{"indexed":true,"name":"identityContractAddress","type":"address"}],"name":"UserIdentityCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"identityContractAddress","type":"address"},{"indexed":true,"name":"keyAddress","type":"address"},{"indexed":true,"name":"purpose","type":"uint256"}],"name":"AccessorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"identityContractAddress","type":"address"},{"indexed":true,"name":"keyAddress","type":"address"},{"indexed":true,"name":"purpose","type":"uint256"}],"name":"AccessorRemoved","type":"event"}]
Contract Creation Code
60806040526000805534801561001457600080fd5b506134ea806100246000396000f3006080604052600436106200007d5763ffffffff60e060020a600035041663086bb51c81146200008257806314cd826c14620001a95780637bcaf58514620002bc5780639ee2b70214620003cc578063affed0e0146200045f578063d32b1bea1462000489578063db4ad99f14620004ad578063e334f32e14620005af575b600080fd5b3480156200008f57600080fd5b50604080516020600460843581810135601f810184900484028501840190955284845262000195948235600160a060020a0390811695602480358316966044359660643590941695369560a4949390910191819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff1691506200060b9050565b604080519115158252519081900360200190f35b348015620001b657600080fd5b50604080516020600460843581810135601f810184900484028501840190955284845262000195948235600160a060020a0390811695602480358316966044359660643590941695369560a4949390910191819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff16915062000bb69050565b348015620002c957600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452620003b094369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff169150620011589050565b60408051600160a060020a039092168252519081900360200190f35b348015620003d957600080fd5b50620003e7600435620011de565b6040805160208082528351818301528351919283929083019185019080838360005b838110156200042357818101518382015260200162000409565b50505050905090810190601f168015620004515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200046c57600080fd5b506200047762001359565b60408051918252519081900360200190f35b3480156200049657600080fd5b50620003e7600160a060020a03600435166200135f565b348015620004ba57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552620003b0958335600160a060020a031695369560449491939091019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff169150620015169050565b348015620005bc57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452620003e7943694929360249392840191908190840183828082843750949750620017209650505050505050565b60008054600101808255819063ffffffff891690811462000676576040805160e560020a62461bcd02815260206004820152600b60248201527f57726f6e67206e6f6e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b620006888b8b8b8b8b8b8b8b62001792565b15156200069457600080fd5b6200069f8a62001720565b6040518082805190602001908083835b60208310620006d05780518252601f199092019160209182019101620006af565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019166200070c8f6200135f565b620007178f6200135f565b620007228f620011de565b60405160200180807f416464203078000000000000000000000000000000000000000000000000000081525060060184805190602001908083835b602083106200077e5780518252601f1990920191602091820191016200075d565b51815160209384036101000a60001901801990921691161790527f20746f2030780000000000000000000000000000000000000000000000000000919093019081528551600690910192860191508083835b60208310620007f15780518252601f199092019160209182019101620007d0565b51815160209384036101000a60001901801990921691161790527f207769746820707572706f736520000000000000000000000000000000000000919093019081528451600e90910192850191508083835b60208310620008645780518252601f19909201916020918201910162000843565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b60208310620008cb5780518252601f199092019160209182019101620008aa565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151562000954576040805160e560020a62461bcd02815260206004820152601160248201527f4d65737361676520696e636f7272656374000000000000000000000000000000604482015290519081900360640190fd5b8c915081600160a060020a031663d202158d8c6040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902084600160a060020a031663058b316c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b505050506040513d602081101562000a0857600080fd5b50516040805160e060020a63ffffffff8616028152600481019390935260248301919091525160448083019260209291908290030181600087803b15801562000a5057600080fd5b505af115801562000a65573d6000803e3d6000fd5b505050506040513d602081101562000a7c57600080fd5b5051151562000a8a57600080fd5b81600160a060020a0316631d3812408f6040518082600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140191505060405180910390208e60016040518463ffffffff1660e060020a0281526004018084600019166000191681526020018381526020018281526020019350505050602060405180830381600087803b15801562000b2357600080fd5b505af115801562000b38573d6000803e3d6000fd5b505050506040513d602081101562000b4f57600080fd5b8101908080519060200190929190505050508b8e600160a060020a03168e600160a060020a03167f1e7adf4c5e17188fcee9914769709147e1497bb7aa63ba52063c01810d75fce460405160405180910390a45060019d9c50505050505050505050505050565b60008054600101808255819063ffffffff891690811462000c21576040805160e560020a62461bcd02815260206004820152600b60248201527f57726f6e67206e6f6e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b62000c338b8b8b8b8b8b8b8b62001792565b151562000c3f57600080fd5b62000c4a8a62001720565b6040518082805190602001908083835b6020831062000c7b5780518252601f19909201916020918201910162000c5a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191662000cb78f6200135f565b62000cc28f6200135f565b62000ccd8f620011de565b60405160200180807f52656d6f7665203078000000000000000000000000000000000000000000000081525060090184805190602001908083835b6020831062000d295780518252601f19909201916020918201910162000d08565b51815160209384036101000a60001901801990921691161790527f2066726f6d203078000000000000000000000000000000000000000000000000919093019081528551600890910192860191508083835b6020831062000d9c5780518252601f19909201916020918201910162000d7b565b51815160209384036101000a60001901801990921691161790527f207769746820707572706f736520000000000000000000000000000000000000919093019081528451600e90910192850191508083835b6020831062000e0f5780518252601f19909201916020918201910162000dee565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b6020831062000e765780518252601f19909201916020918201910162000e55565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151562000eff576040805160e560020a62461bcd02815260206004820152601160248201527f4d65737361676520696e636f7272656374000000000000000000000000000000604482015290519081900360640190fd5b8c915081600160a060020a031663d202158d8c6040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902084600160a060020a031663058b316c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801562000f8757600080fd5b505af115801562000f9c573d6000803e3d6000fd5b505050506040513d602081101562000fb357600080fd5b50516040805160e060020a63ffffffff8616028152600481019390935260248301919091525160448083019260209291908290030181600087803b15801562000ffb57600080fd5b505af115801562001010573d6000803e3d6000fd5b505050506040513d60208110156200102757600080fd5b505115156200103557600080fd5b81600160a060020a03166353d413c58f6040518082600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140191505060405180910390208e6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015620010c557600080fd5b505af1158015620010da573d6000803e3d6000fd5b505050506040513d6020811015620010f157600080fd5b8101908080519060200190929190505050508b8e600160a060020a03168e600160a060020a03167fbdd975f83fe1ced355e069b198d89e3acb2bc1e42a13c6952ae8bf8ff52b00dd60405160405180910390a45060019d9c50505050505050505050505050565b600080620011698989898962001843565b604080516000808252602080830180855285905260ff881683850152606083018a905260808301899052925193945060019360a08084019493601f19830193908390039091019190865af1158015620011c6573d6000803e3d6000fd5b5050604051601f1901519a9950505050505050505050565b60608060008315156200126757620011f7600062001ab9565b6040516020018082805190602001908083835b602083106200122b5780518252601f1990920191602091820191016200120a565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052925062001352565b50825b60008111156200134e5762001282600a820662001ab9565b826040516020018083805190602001908083835b60208310620012b75780518252601f19909201916020918201910162001296565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310620013015780518252601f199092019160209182019101620012e0565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150600a818115156200134557fe5b0490506200126a565b8192505b5050919050565b60005481565b606060008080805b60148410156200150d578360130360080260020a86600160a060020a03168115156200138f57fe5b047f0100000000000000000000000000000000000000000000000000000000000000908102935060107fff0000000000000000000000000000000000000000000000000000000000000085160481900492508304600f16905084620013f48362001ab9565b620013ff8362001ab9565b6040516020018084805190602001908083835b60208310620014335780518252601f19909201916020918201910162001412565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106200147d5780518252601f1990920191602091820191016200145c565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310620014c75780518252601f199092019160209182019101620014a6565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040529450838060010194505062001367565b50505050919050565b6000806200152b8a8a8a8a8a8a8a8a62001792565b151562001582576040805160e560020a62461bcd02815260206004820152601d60248201527f55736572205369676e617475726520646f6573206e6f74206d61746368000000604482015290519081900360640190fd5b6200158c62001ba0565b604051809103906000f080158015620015a9573d6000803e3d6000fd5b50905080600160a060020a0316631d3812408b6040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902083600160a060020a031663058b316c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156200163157600080fd5b505af115801562001646573d6000803e3d6000fd5b505050506040513d60208110156200165d57600080fd5b50516040805160e060020a63ffffffff861602815260048101939093526024830191909152600160448301525160648083019260209291908290030181600087803b158015620016ac57600080fd5b505af1158015620016c1573d6000803e3d6000fd5b505050506040513d6020811015620016d857600080fd5b5050604051600160a060020a0380831691908c16907f79f95559c16c7a61f15bd5812ebd7d8071b4774e1cf7a5c5ea7b7f9aaca051b090600090a39998505050505050505050565b6060816040516020018082805190602001908083835b60208310620017575780518252601f19909201916020918201910162001736565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040529050919050565b600088600160a060020a0316620017af8989898989898962001158565b600160a060020a03161462001834576040805160e560020a62461bcd02815260206004820152603160248201527f55736572207369676e6174757265206d757374206265207468652073616d652060448201527f6173207369676e6564206d657373616765000000000000000000000000000000606482015290519081900360840190fd5b50600198975050505050505050565b600082826040516020018083805190602001908083835b602083106200187b5780518252601f1990920191602091820191016200185a565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310620018c55780518252601f199092019160209182019101620018a4565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106200192b5780518252601f1990920191602091820191016200190a565b51815160209384036101000a60001901801990921691161790526040519190930181900381208a519095508a94508993918201925082918501908083835b602083106200198a5780518252601f19909201916020918201910162001969565b6001836020036101000a0380198251168184511680821785525050505050509050018263ffffffff1663ffffffff1660e060020a028152600401925050506040516020818303038152906040526040518082805190602001908083835b6020831062001a085780518252601f199092019160209182019101620019e7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b6020831062001a845780518252601f19909201916020918201910162001a63565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912098975050505050505050565b60607f300000000000000000000000000000000000000000000000000000000000000081600960ff8516111562001b14577f600000000000000000000000000000000000000000000000000000000000000091506009840393505b6040805160018082528183019092529060208083019080388339019050509050837f010000000000000000000000000000000000000000000000000000000000000002821781600081518110151562001b6957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053509392505050565b60405161190d8062001bb283390190560060806040523480156200001157600080fd5b50604080516c0100000000000000000000000033028152815190819003601401812060008181526001602081815285832060028101859055818601909652818552918390529081905290926200006992909162000106565b506000818152600160208181526040808420830183905560029091527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0805480840182559084527f7fef4bf8f63cf9dd467136c679c02b5c17fcf6322d9562512bf5eb952cf7cc5301849055519091829184917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a45062000176565b82805482825590600052602060002090810192821562000144579160200282015b828111156200014457825182559160200191906001019062000127565b506200015292915062000156565b5090565b6200017391905b808211156200015257600081556001016200015d565b90565b61178780620001866000396000f3006080604052600436106100fb5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663032c1a8a81146100fd578063058b316c1461016557806312065fe01461018c57806312aaac70146101a15780631d3812401461021a5780633aecd0e31461024c5780633ccfd60b1461026d57806349df728c1461028257806349f9c0e4146102a357806353d413c5146102c7578063747442d3146102e257806375e5598c146102ff5780639010f726146103145780639e140cc81461032c578063a64b6e5f14610341578063b61d27f61461036b578063c6702187146103d4578063d202158d146103e9575b005b34801561010957600080fd5b50610115600435610404565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610151578181015183820152602001610139565b505050509050019250505060405180910390f35b34801561017157600080fd5b5061017a610466565b60408051918252519081900360200190f35b34801561019857600080fd5b5061017a61046b565b3480156101ad57600080fd5b506101b9600435610471565b60408051602080820185905291810183905260608082528551908201528451909182916080830191878101910280838360005b838110156102045781810151838201526020016101ec565b5050505090500194505050505060405180910390f35b34801561022657600080fd5b506102386004356024356044356104ea565b604080519115158252519081900360200190f35b34801561025857600080fd5b5061017a600160a060020a036004351661062b565b34801561027957600080fd5b506100fb6106c1565b34801561028e57600080fd5b506100fb600160a060020a0360043516610761565b3480156102af57600080fd5b506100fb600435600160a060020a0360243516610920565b3480156102d357600080fd5b50610238600435602435610aa5565b3480156102ee57600080fd5b506102386004356024351515610e41565b34801561030b57600080fd5b5061017a6111c2565b34801561032057600080fd5b506101156004356111c7565b34801561033857600080fd5b5061017a611229565b34801561034d57600080fd5b506100fb600160a060020a036004358116906024351660443561122e565b34801561037757600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261017a948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506114239650505050505050565b3480156103e057600080fd5b5061017a6115ee565b3480156103f557600080fd5b506102386004356024356115f3565b60008181526001602090815260409182902080548351818402810184019094528084526060939283018282801561045a57602002820191906000526020600020905b815481526020019060010190808311610446575b50505050509050919050565b600181565b30315b90565b6000818152600160208181526040808420928301546002840154845483518186028101860190945280845260609695869590949185918301828280156104d657602002820191906000526020600020905b8154815260200190600101908083116104c2575b505050505092509250925092509193909250565b604080516c010000000000000000000000003302815290519081900360140190206000906105199060016115f3565b1515610595576040805160e560020a62461bcd02815260206004820152602360248201527f53656e64657220646f6573206e6f742068617665206d616e6167656d656e742060448201527f6b65790000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61059f84846115f3565b156105ac57506001610624565b600084815260016020818152604080842060028082018a905581548086018355828752848720018990559084018790558785528252808420805493840181558452908320909101869055518391859187917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a45060015b9392505050565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038416916370a082319160248082019260209290919082900301818787803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506040513d60208110156106b957600080fd5b505192915050565b604080516c010000000000000000000000003302815290519081900360140190206106ed90600b6115f3565b1515610731576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f1935050505015801561075e573d6000803e3d6000fd5b50565b604080516c01000000000000000000000000330281529051908190036014019020600090819061079290600b6115f3565b15156107d6576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b600160a060020a03831615156107eb57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561084f57600080fd5b505af1158015610863573d6000803e3d6000fd5b505050506040513d602081101561087957600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b1580156108e757600080fd5b505af11580156108fb573d6000803e3d6000fd5b505050506040513d602081101561091157600080fd5b5051151561091b57fe5b505050565b604080516c0100000000000000000000000033028152905190819003601401902061094c90600b6115f3565b1515610990576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b3031821115610a0f576040805160e560020a62461bcd02815260206004820152603860248201527f416d6f756e742073686f756c64206265206c657373207468616e20746f74616c60448201527f2062616c616e6365206f662074686520636f6e74726163740000000000000000606482015290519081900360840190fd5b600160a060020a0381161515610a6f576040805160e560020a62461bcd02815260206004820152601560248201527f6d7573742062652076616c696420616464726573730000000000000000000000604482015290519081900360640190fd5b604051600160a060020a0382169083156108fc029084906000818181858888f1935050505015801561091b573d6000803e3d6000fd5b600080600080600080610aef336040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902060016115f3565b1515610b6b576040805160e560020a62461bcd02815260206004820152602360248201527f53656e64657220646f6573206e6f742068617665206d616e6167656d656e742060448201527f6b65790000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000888152600160205260409020600201548814610bd3576040805160e560020a62461bcd02815260206004820152600b60248201527f4e6f2073756368206b6579000000000000000000000000000000000000000000604482015290519081900360640190fd5b610bdd88886115f3565b1515610bec5760009550610e36565b6000888152600160205260408120549550600019945092505b84831015610c4e576000888152600160205260409020805488919085908110610c2a57fe5b90600052602060002001541415610c4357829350610c4e565b600190920191610c05565b6000198414610cf757600088815260016020526040902080546000198701908110610c7557fe5b60009182526020808320909101548a835260019091526040909120805486908110610c9c57fe5b600091825260208083209091019290925589815260019091526040902080546000198701908110610cc957fe5b600091825260208083209091018290558982526001905260409020805490610cf590600019830161167f565b505b5050600085815260026020526040812054905b81811015610df1576000878152600260205260409020805489919083908110610d2f57fe5b6000918252602090912001541415610de957600087815260026020526040902080546000198401908110610d5f57fe5b90600052602060002001546002600089815260200190815260200160002082815481101515610d8a57fe5b600091825260208083209091019290925588815260029091526040902080546000198401908110610db757fe5b600091825260208083209091018290558882526002905260409020805490610de390600019830161167f565b50610df1565b600101610d0a565b6000888152600160208190526040808320909101549051909189918b917f585a4aef50f8267a92b32412b331b20f7f8b96f2245b253b9cc50dcc621d339791a4600195505b505050505092915050565b604080516c01000000000000000000000000330281529051908190036014019020600090610e709060026115f3565b1515610ec6576040805160e560020a62461bcd02815260206004820152601f60248201527f53656e64657220646f6573206e6f74206861766520616374696f6e206b657900604482015290519081900360640190fd5b604080518315158152905184917fb3932da477fe5d6c8ff2eafef050c0f3a1af18fc07121001482600f36f3715d8919081900360200190a26001821515141561119e576000838152600360208190526040808320918201805460ff191660019081179091558254915160029384018054600160a060020a03909416959094909391928392869260001992821615610100029290920116048015610faa5780601f10610f7f57610100808354040283529160200191610faa565b820191906000526020600020905b815481529060010190602001808311610f8d57829003601f168201915b50508260ff168152602001925050506000604051808303816000865af1915050905080156110bf57600083815260036020818152604092839020918201805461010061ff00199091168117909155600180840154845486518581526002968701805494851615909502600019019093169590950493820184905294600160a060020a039094169388937f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b8939291829190820190849080156110ac5780601f10611081576101008083540402835291602001916110ac565b820191906000526020600020905b81548152906001019060200180831161108f57829003601f168201915b50509250505060405180910390a4611199565b6000838152600360209081526040918290206001808201548254855185815260029485018054600019958116156101000295909501909416949094049484018590529094600160a060020a039091169388937fe10c49d9f7c71da23262367013434763cfdb2332267641728d25cd712c5c6a689392909182918201908490801561118a5780601f1061115f5761010080835404028352916020019161118a565b820191906000526020600020905b81548152906001019060200180831161116d57829003601f168201915b50509250505060405180910390a45b6111bc565b600083815260036020819052604090912001805460ff191690555060015b92915050565b600281565b60008181526002602090815260409182902080548351818402810184019094528084526060939283018282801561045a57602002820191906000526020600020905b815481526001909101906020018083116112095750505050509050919050565b600481565b604080516c01000000000000000000000000330281529051908190036014019020600090819061125f90600b6115f3565b15156112a3576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b600160a060020a03851615156112b857600080fd5b600160a060020a03841615156112cd57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051869350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561133157600080fd5b505af1158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b505190508083111561136c57600080fd5b81600160a060020a031663a9059cbb85856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156113e857600080fd5b505af11580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b5051151561141c57fe5b5050505050565b60008054815260036020819052604082200154610100900460ff1615611493576040805160e560020a62461bcd02815260206004820152601060248201527f416c726561647920657865637574656400000000000000000000000000000000604482015290519081900360640190fd5b600080548152600360209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038916179055825483528083206001018690558254835290912083516114f3926002909201918501906116a3565b508284600160a060020a03166000547f8afcfabcb00e47a53a8fc3e9f23ff47ee1926194bb1350dd007c50b412a6cee8856040518080602001828103825283818151815260200191508051906020019080838360005b83811015611561578181015183820152602001611549565b50505050905090810190601f16801561158e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a4604080516c010000000000000000000000003302815290519081900360140190206115c79060026115f3565b156115db576115d96000546001610e41565b505b5060008054600181019091559392505050565b600381565b6000828152600160205260408120600201548190819015156116185760009250611677565b5050600083815260016020526040812054905b8181101561167257600085815260016020526040902080548591908390811061165057fe5b9060005260206000200154141561166a5760019250611677565b60010161162b565b600092505b505092915050565b81548183558181111561091b5760008381526020902061091b918101908301611721565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106116e457805160ff1916838001178555611711565b82800160010185558215611711579182015b828111156117115782518255916020019190600101906116f6565b5061171d929150611721565b5090565b61046e91905b8082111561171d5760008155600101611727560053656e64657220646f6573206e6f7420686176652066756e6473206b65790000a165627a7a7230582020d5a79b2254964de92a1f7bc9607f8356c0d458c903e73678376ed79440e5550029a165627a7a723058202d3b04bc67c7c95af2fb8d93d74ec1c68207c2065fe678e738dafa4b9576daba0029
Deployed Bytecode
0x6080604052600436106200007d5763ffffffff60e060020a600035041663086bb51c81146200008257806314cd826c14620001a95780637bcaf58514620002bc5780639ee2b70214620003cc578063affed0e0146200045f578063d32b1bea1462000489578063db4ad99f14620004ad578063e334f32e14620005af575b600080fd5b3480156200008f57600080fd5b50604080516020600460843581810135601f810184900484028501840190955284845262000195948235600160a060020a0390811695602480358316966044359660643590941695369560a4949390910191819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff1691506200060b9050565b604080519115158252519081900360200190f35b348015620001b657600080fd5b50604080516020600460843581810135601f810184900484028501840190955284845262000195948235600160a060020a0390811695602480358316966044359660643590941695369560a4949390910191819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff16915062000bb69050565b348015620002c957600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452620003b094369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff169150620011589050565b60408051600160a060020a039092168252519081900360200190f35b348015620003d957600080fd5b50620003e7600435620011de565b6040805160208082528351818301528351919283929083019185019080838360005b838110156200042357818101518382015260200162000409565b50505050905090810190601f168015620004515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200046c57600080fd5b506200047762001359565b60408051918252519081900360200190f35b3480156200049657600080fd5b50620003e7600160a060020a03600435166200135f565b348015620004ba57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552620003b0958335600160a060020a031695369560449491939091019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff169150620015169050565b348015620005bc57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452620003e7943694929360249392840191908190840183828082843750949750620017209650505050505050565b60008054600101808255819063ffffffff891690811462000676576040805160e560020a62461bcd02815260206004820152600b60248201527f57726f6e67206e6f6e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b620006888b8b8b8b8b8b8b8b62001792565b15156200069457600080fd5b6200069f8a62001720565b6040518082805190602001908083835b60208310620006d05780518252601f199092019160209182019101620006af565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019166200070c8f6200135f565b620007178f6200135f565b620007228f620011de565b60405160200180807f416464203078000000000000000000000000000000000000000000000000000081525060060184805190602001908083835b602083106200077e5780518252601f1990920191602091820191016200075d565b51815160209384036101000a60001901801990921691161790527f20746f2030780000000000000000000000000000000000000000000000000000919093019081528551600690910192860191508083835b60208310620007f15780518252601f199092019160209182019101620007d0565b51815160209384036101000a60001901801990921691161790527f207769746820707572706f736520000000000000000000000000000000000000919093019081528451600e90910192850191508083835b60208310620008645780518252601f19909201916020918201910162000843565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b60208310620008cb5780518252601f199092019160209182019101620008aa565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151562000954576040805160e560020a62461bcd02815260206004820152601160248201527f4d65737361676520696e636f7272656374000000000000000000000000000000604482015290519081900360640190fd5b8c915081600160a060020a031663d202158d8c6040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902084600160a060020a031663058b316c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b505050506040513d602081101562000a0857600080fd5b50516040805160e060020a63ffffffff8616028152600481019390935260248301919091525160448083019260209291908290030181600087803b15801562000a5057600080fd5b505af115801562000a65573d6000803e3d6000fd5b505050506040513d602081101562000a7c57600080fd5b5051151562000a8a57600080fd5b81600160a060020a0316631d3812408f6040518082600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140191505060405180910390208e60016040518463ffffffff1660e060020a0281526004018084600019166000191681526020018381526020018281526020019350505050602060405180830381600087803b15801562000b2357600080fd5b505af115801562000b38573d6000803e3d6000fd5b505050506040513d602081101562000b4f57600080fd5b8101908080519060200190929190505050508b8e600160a060020a03168e600160a060020a03167f1e7adf4c5e17188fcee9914769709147e1497bb7aa63ba52063c01810d75fce460405160405180910390a45060019d9c50505050505050505050505050565b60008054600101808255819063ffffffff891690811462000c21576040805160e560020a62461bcd02815260206004820152600b60248201527f57726f6e67206e6f6e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b62000c338b8b8b8b8b8b8b8b62001792565b151562000c3f57600080fd5b62000c4a8a62001720565b6040518082805190602001908083835b6020831062000c7b5780518252601f19909201916020918201910162000c5a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191662000cb78f6200135f565b62000cc28f6200135f565b62000ccd8f620011de565b60405160200180807f52656d6f7665203078000000000000000000000000000000000000000000000081525060090184805190602001908083835b6020831062000d295780518252601f19909201916020918201910162000d08565b51815160209384036101000a60001901801990921691161790527f2066726f6d203078000000000000000000000000000000000000000000000000919093019081528551600890910192860191508083835b6020831062000d9c5780518252601f19909201916020918201910162000d7b565b51815160209384036101000a60001901801990921691161790527f207769746820707572706f736520000000000000000000000000000000000000919093019081528451600e90910192850191508083835b6020831062000e0f5780518252601f19909201916020918201910162000dee565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b6020831062000e765780518252601f19909201916020918201910162000e55565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151562000eff576040805160e560020a62461bcd02815260206004820152601160248201527f4d65737361676520696e636f7272656374000000000000000000000000000000604482015290519081900360640190fd5b8c915081600160a060020a031663d202158d8c6040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902084600160a060020a031663058b316c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801562000f8757600080fd5b505af115801562000f9c573d6000803e3d6000fd5b505050506040513d602081101562000fb357600080fd5b50516040805160e060020a63ffffffff8616028152600481019390935260248301919091525160448083019260209291908290030181600087803b15801562000ffb57600080fd5b505af115801562001010573d6000803e3d6000fd5b505050506040513d60208110156200102757600080fd5b505115156200103557600080fd5b81600160a060020a03166353d413c58f6040518082600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140191505060405180910390208e6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015620010c557600080fd5b505af1158015620010da573d6000803e3d6000fd5b505050506040513d6020811015620010f157600080fd5b8101908080519060200190929190505050508b8e600160a060020a03168e600160a060020a03167fbdd975f83fe1ced355e069b198d89e3acb2bc1e42a13c6952ae8bf8ff52b00dd60405160405180910390a45060019d9c50505050505050505050505050565b600080620011698989898962001843565b604080516000808252602080830180855285905260ff881683850152606083018a905260808301899052925193945060019360a08084019493601f19830193908390039091019190865af1158015620011c6573d6000803e3d6000fd5b5050604051601f1901519a9950505050505050505050565b60608060008315156200126757620011f7600062001ab9565b6040516020018082805190602001908083835b602083106200122b5780518252601f1990920191602091820191016200120a565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052925062001352565b50825b60008111156200134e5762001282600a820662001ab9565b826040516020018083805190602001908083835b60208310620012b75780518252601f19909201916020918201910162001296565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310620013015780518252601f199092019160209182019101620012e0565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150600a818115156200134557fe5b0490506200126a565b8192505b5050919050565b60005481565b606060008080805b60148410156200150d578360130360080260020a86600160a060020a03168115156200138f57fe5b047f0100000000000000000000000000000000000000000000000000000000000000908102935060107fff0000000000000000000000000000000000000000000000000000000000000085160481900492508304600f16905084620013f48362001ab9565b620013ff8362001ab9565b6040516020018084805190602001908083835b60208310620014335780518252601f19909201916020918201910162001412565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106200147d5780518252601f1990920191602091820191016200145c565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310620014c75780518252601f199092019160209182019101620014a6565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040529450838060010194505062001367565b50505050919050565b6000806200152b8a8a8a8a8a8a8a8a62001792565b151562001582576040805160e560020a62461bcd02815260206004820152601d60248201527f55736572205369676e617475726520646f6573206e6f74206d61746368000000604482015290519081900360640190fd5b6200158c62001ba0565b604051809103906000f080158015620015a9573d6000803e3d6000fd5b50905080600160a060020a0316631d3812408b6040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902083600160a060020a031663058b316c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156200163157600080fd5b505af115801562001646573d6000803e3d6000fd5b505050506040513d60208110156200165d57600080fd5b50516040805160e060020a63ffffffff861602815260048101939093526024830191909152600160448301525160648083019260209291908290030181600087803b158015620016ac57600080fd5b505af1158015620016c1573d6000803e3d6000fd5b505050506040513d6020811015620016d857600080fd5b5050604051600160a060020a0380831691908c16907f79f95559c16c7a61f15bd5812ebd7d8071b4774e1cf7a5c5ea7b7f9aaca051b090600090a39998505050505050505050565b6060816040516020018082805190602001908083835b60208310620017575780518252601f19909201916020918201910162001736565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040529050919050565b600088600160a060020a0316620017af8989898989898962001158565b600160a060020a03161462001834576040805160e560020a62461bcd02815260206004820152603160248201527f55736572207369676e6174757265206d757374206265207468652073616d652060448201527f6173207369676e6564206d657373616765000000000000000000000000000000606482015290519081900360840190fd5b50600198975050505050505050565b600082826040516020018083805190602001908083835b602083106200187b5780518252601f1990920191602091820191016200185a565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310620018c55780518252601f199092019160209182019101620018a4565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106200192b5780518252601f1990920191602091820191016200190a565b51815160209384036101000a60001901801990921691161790526040519190930181900381208a519095508a94508993918201925082918501908083835b602083106200198a5780518252601f19909201916020918201910162001969565b6001836020036101000a0380198251168184511680821785525050505050509050018263ffffffff1663ffffffff1660e060020a028152600401925050506040516020818303038152906040526040518082805190602001908083835b6020831062001a085780518252601f199092019160209182019101620019e7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b6020831062001a845780518252601f19909201916020918201910162001a63565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912098975050505050505050565b60607f300000000000000000000000000000000000000000000000000000000000000081600960ff8516111562001b14577f600000000000000000000000000000000000000000000000000000000000000091506009840393505b6040805160018082528183019092529060208083019080388339019050509050837f010000000000000000000000000000000000000000000000000000000000000002821781600081518110151562001b6957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053509392505050565b60405161190d8062001bb283390190560060806040523480156200001157600080fd5b50604080516c0100000000000000000000000033028152815190819003601401812060008181526001602081815285832060028101859055818601909652818552918390529081905290926200006992909162000106565b506000818152600160208181526040808420830183905560029091527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0805480840182559084527f7fef4bf8f63cf9dd467136c679c02b5c17fcf6322d9562512bf5eb952cf7cc5301849055519091829184917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a45062000176565b82805482825590600052602060002090810192821562000144579160200282015b828111156200014457825182559160200191906001019062000127565b506200015292915062000156565b5090565b6200017391905b808211156200015257600081556001016200015d565b90565b61178780620001866000396000f3006080604052600436106100fb5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663032c1a8a81146100fd578063058b316c1461016557806312065fe01461018c57806312aaac70146101a15780631d3812401461021a5780633aecd0e31461024c5780633ccfd60b1461026d57806349df728c1461028257806349f9c0e4146102a357806353d413c5146102c7578063747442d3146102e257806375e5598c146102ff5780639010f726146103145780639e140cc81461032c578063a64b6e5f14610341578063b61d27f61461036b578063c6702187146103d4578063d202158d146103e9575b005b34801561010957600080fd5b50610115600435610404565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610151578181015183820152602001610139565b505050509050019250505060405180910390f35b34801561017157600080fd5b5061017a610466565b60408051918252519081900360200190f35b34801561019857600080fd5b5061017a61046b565b3480156101ad57600080fd5b506101b9600435610471565b60408051602080820185905291810183905260608082528551908201528451909182916080830191878101910280838360005b838110156102045781810151838201526020016101ec565b5050505090500194505050505060405180910390f35b34801561022657600080fd5b506102386004356024356044356104ea565b604080519115158252519081900360200190f35b34801561025857600080fd5b5061017a600160a060020a036004351661062b565b34801561027957600080fd5b506100fb6106c1565b34801561028e57600080fd5b506100fb600160a060020a0360043516610761565b3480156102af57600080fd5b506100fb600435600160a060020a0360243516610920565b3480156102d357600080fd5b50610238600435602435610aa5565b3480156102ee57600080fd5b506102386004356024351515610e41565b34801561030b57600080fd5b5061017a6111c2565b34801561032057600080fd5b506101156004356111c7565b34801561033857600080fd5b5061017a611229565b34801561034d57600080fd5b506100fb600160a060020a036004358116906024351660443561122e565b34801561037757600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261017a948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506114239650505050505050565b3480156103e057600080fd5b5061017a6115ee565b3480156103f557600080fd5b506102386004356024356115f3565b60008181526001602090815260409182902080548351818402810184019094528084526060939283018282801561045a57602002820191906000526020600020905b815481526020019060010190808311610446575b50505050509050919050565b600181565b30315b90565b6000818152600160208181526040808420928301546002840154845483518186028101860190945280845260609695869590949185918301828280156104d657602002820191906000526020600020905b8154815260200190600101908083116104c2575b505050505092509250925092509193909250565b604080516c010000000000000000000000003302815290519081900360140190206000906105199060016115f3565b1515610595576040805160e560020a62461bcd02815260206004820152602360248201527f53656e64657220646f6573206e6f742068617665206d616e6167656d656e742060448201527f6b65790000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61059f84846115f3565b156105ac57506001610624565b600084815260016020818152604080842060028082018a905581548086018355828752848720018990559084018790558785528252808420805493840181558452908320909101869055518391859187917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a45060015b9392505050565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038416916370a082319160248082019260209290919082900301818787803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506040513d60208110156106b957600080fd5b505192915050565b604080516c010000000000000000000000003302815290519081900360140190206106ed90600b6115f3565b1515610731576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f1935050505015801561075e573d6000803e3d6000fd5b50565b604080516c01000000000000000000000000330281529051908190036014019020600090819061079290600b6115f3565b15156107d6576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b600160a060020a03831615156107eb57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561084f57600080fd5b505af1158015610863573d6000803e3d6000fd5b505050506040513d602081101561087957600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b1580156108e757600080fd5b505af11580156108fb573d6000803e3d6000fd5b505050506040513d602081101561091157600080fd5b5051151561091b57fe5b505050565b604080516c0100000000000000000000000033028152905190819003601401902061094c90600b6115f3565b1515610990576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b3031821115610a0f576040805160e560020a62461bcd02815260206004820152603860248201527f416d6f756e742073686f756c64206265206c657373207468616e20746f74616c60448201527f2062616c616e6365206f662074686520636f6e74726163740000000000000000606482015290519081900360840190fd5b600160a060020a0381161515610a6f576040805160e560020a62461bcd02815260206004820152601560248201527f6d7573742062652076616c696420616464726573730000000000000000000000604482015290519081900360640190fd5b604051600160a060020a0382169083156108fc029084906000818181858888f1935050505015801561091b573d6000803e3d6000fd5b600080600080600080610aef336040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902060016115f3565b1515610b6b576040805160e560020a62461bcd02815260206004820152602360248201527f53656e64657220646f6573206e6f742068617665206d616e6167656d656e742060448201527f6b65790000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000888152600160205260409020600201548814610bd3576040805160e560020a62461bcd02815260206004820152600b60248201527f4e6f2073756368206b6579000000000000000000000000000000000000000000604482015290519081900360640190fd5b610bdd88886115f3565b1515610bec5760009550610e36565b6000888152600160205260408120549550600019945092505b84831015610c4e576000888152600160205260409020805488919085908110610c2a57fe5b90600052602060002001541415610c4357829350610c4e565b600190920191610c05565b6000198414610cf757600088815260016020526040902080546000198701908110610c7557fe5b60009182526020808320909101548a835260019091526040909120805486908110610c9c57fe5b600091825260208083209091019290925589815260019091526040902080546000198701908110610cc957fe5b600091825260208083209091018290558982526001905260409020805490610cf590600019830161167f565b505b5050600085815260026020526040812054905b81811015610df1576000878152600260205260409020805489919083908110610d2f57fe5b6000918252602090912001541415610de957600087815260026020526040902080546000198401908110610d5f57fe5b90600052602060002001546002600089815260200190815260200160002082815481101515610d8a57fe5b600091825260208083209091019290925588815260029091526040902080546000198401908110610db757fe5b600091825260208083209091018290558882526002905260409020805490610de390600019830161167f565b50610df1565b600101610d0a565b6000888152600160208190526040808320909101549051909189918b917f585a4aef50f8267a92b32412b331b20f7f8b96f2245b253b9cc50dcc621d339791a4600195505b505050505092915050565b604080516c01000000000000000000000000330281529051908190036014019020600090610e709060026115f3565b1515610ec6576040805160e560020a62461bcd02815260206004820152601f60248201527f53656e64657220646f6573206e6f74206861766520616374696f6e206b657900604482015290519081900360640190fd5b604080518315158152905184917fb3932da477fe5d6c8ff2eafef050c0f3a1af18fc07121001482600f36f3715d8919081900360200190a26001821515141561119e576000838152600360208190526040808320918201805460ff191660019081179091558254915160029384018054600160a060020a03909416959094909391928392869260001992821615610100029290920116048015610faa5780601f10610f7f57610100808354040283529160200191610faa565b820191906000526020600020905b815481529060010190602001808311610f8d57829003601f168201915b50508260ff168152602001925050506000604051808303816000865af1915050905080156110bf57600083815260036020818152604092839020918201805461010061ff00199091168117909155600180840154845486518581526002968701805494851615909502600019019093169590950493820184905294600160a060020a039094169388937f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b8939291829190820190849080156110ac5780601f10611081576101008083540402835291602001916110ac565b820191906000526020600020905b81548152906001019060200180831161108f57829003601f168201915b50509250505060405180910390a4611199565b6000838152600360209081526040918290206001808201548254855185815260029485018054600019958116156101000295909501909416949094049484018590529094600160a060020a039091169388937fe10c49d9f7c71da23262367013434763cfdb2332267641728d25cd712c5c6a689392909182918201908490801561118a5780601f1061115f5761010080835404028352916020019161118a565b820191906000526020600020905b81548152906001019060200180831161116d57829003601f168201915b50509250505060405180910390a45b6111bc565b600083815260036020819052604090912001805460ff191690555060015b92915050565b600281565b60008181526002602090815260409182902080548351818402810184019094528084526060939283018282801561045a57602002820191906000526020600020905b815481526001909101906020018083116112095750505050509050919050565b600481565b604080516c01000000000000000000000000330281529051908190036014019020600090819061125f90600b6115f3565b15156112a3576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b600160a060020a03851615156112b857600080fd5b600160a060020a03841615156112cd57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051869350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561133157600080fd5b505af1158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b505190508083111561136c57600080fd5b81600160a060020a031663a9059cbb85856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156113e857600080fd5b505af11580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b5051151561141c57fe5b5050505050565b60008054815260036020819052604082200154610100900460ff1615611493576040805160e560020a62461bcd02815260206004820152601060248201527f416c726561647920657865637574656400000000000000000000000000000000604482015290519081900360640190fd5b600080548152600360209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038916179055825483528083206001018690558254835290912083516114f3926002909201918501906116a3565b508284600160a060020a03166000547f8afcfabcb00e47a53a8fc3e9f23ff47ee1926194bb1350dd007c50b412a6cee8856040518080602001828103825283818151815260200191508051906020019080838360005b83811015611561578181015183820152602001611549565b50505050905090810190601f16801561158e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a4604080516c010000000000000000000000003302815290519081900360140190206115c79060026115f3565b156115db576115d96000546001610e41565b505b5060008054600181019091559392505050565b600381565b6000828152600160205260408120600201548190819015156116185760009250611677565b5050600083815260016020526040812054905b8181101561167257600085815260016020526040902080548591908390811061165057fe5b9060005260206000200154141561166a5760019250611677565b60010161162b565b600092505b505092915050565b81548183558181111561091b5760008381526020902061091b918101908301611721565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106116e457805160ff1916838001178555611711565b82800160010185558215611711579182015b828111156117115782518255916020019190600101906116f6565b5061171d929150611721565b5090565b61046e91905b8082111561171d5760008155600101611727560053656e64657220646f6573206e6f7420686176652066756e6473206b65790000a165627a7a7230582020d5a79b2254964de92a1f7bc9607f8356c0d458c903e73678376ed79440e5550029a165627a7a723058202d3b04bc67c7c95af2fb8d93d74ec1c68207c2065fe678e738dafa4b9576daba0029
Swarm Source
bzzr://2d3b04bc67c7c95af2fb8d93d74ec1c68207c2065fe678e738dafa4b9576daba
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.