Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 31 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Accept Ownership... | 11803237 | 1256 days ago | IN | 0 ETH | 0.0045303 | ||||
Create Ownership... | 11803152 | 1256 days ago | IN | 0 ETH | 0.00800457 | ||||
Enable Manager | 11803143 | 1256 days ago | IN | 0 ETH | 0.00778055 | ||||
Grant Manager Pe... | 11803143 | 1256 days ago | IN | 0 ETH | 0.00813474 | ||||
Grant Manager Pe... | 11803141 | 1256 days ago | IN | 0 ETH | 0.00811437 | ||||
Grant Manager Pe... | 11803140 | 1256 days ago | IN | 0 ETH | 0.00812116 | ||||
Disable Manager | 11803139 | 1256 days ago | IN | 0 ETH | 0.00276753 | ||||
Disable Manager | 11803138 | 1256 days ago | IN | 0 ETH | 0.00276753 | ||||
Revoke Manager P... | 11803136 | 1256 days ago | IN | 0 ETH | 0.00303584 | ||||
Revoke Manager P... | 11803132 | 1256 days ago | IN | 0 ETH | 0.00301548 | ||||
Revoke Manager P... | 11803131 | 1256 days ago | IN | 0 ETH | 0.00302227 | ||||
Grant Manager Pe... | 6276029 | 2142 days ago | IN | 0 ETH | 0.0048524 | ||||
Enable Manager | 6276014 | 2142 days ago | IN | 0 ETH | 0.0045293 | ||||
Grant Manager Pe... | 6276012 | 2142 days ago | IN | 0 ETH | 0.0048236 | ||||
Grant Manager Pe... | 6276010 | 2142 days ago | IN | 0 ETH | 0.0048092 | ||||
Enable Manager | 6276006 | 2142 days ago | IN | 0 ETH | 0.0045293 | ||||
Disable Manager | 6275722 | 2142 days ago | IN | 0 ETH | 0.0015755 | ||||
Disable Manager | 6275718 | 2142 days ago | IN | 0 ETH | 0.0015755 | ||||
Accept Ownership... | 6229353 | 2149 days ago | IN | 0 ETH | 0.0021901 | ||||
Create Ownership... | 6229345 | 2149 days ago | IN | 0 ETH | 0.0230065 | ||||
Unpause Contract | 6225418 | 2150 days ago | IN | 0 ETH | 0.0034533 | ||||
Set Crydr Contro... | 6225414 | 2150 days ago | IN | 0 ETH | 0.0032168 | ||||
Pause Contract | 6225412 | 2150 days ago | IN | 0 ETH | 0.0029103 | ||||
Unpause Contract | 4736253 | 2406 days ago | IN | 0 ETH | 0.0012076 | ||||
Set Crydr Contro... | 4736237 | 2406 days ago | IN | 0 ETH | 0.00112588 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
JNTStorage
Compiler Version
v0.4.18+commit.9cf6e910
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-02-07 */ /* Author: Victor Mezrin [email protected] */ pragma solidity ^0.4.18; /** * @title SafeMathInterface * @dev Math operations with safety checks that throw on error */ contract SafeMathInterface { function safeMul(uint256 a, uint256 b) internal pure returns (uint256); function safeDiv(uint256 a, uint256 b) internal pure returns (uint256); function safeSub(uint256 a, uint256 b) internal pure returns (uint256); function safeAdd(uint256 a, uint256 b) internal pure returns (uint256); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ contract SafeMath is SafeMathInterface { function safeMul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title CommonModifiersInterface * @dev Base contract which contains common checks. */ contract CommonModifiersInterface { /** * @dev Assemble the given address bytecode. If bytecode exists then the _addr is a contract. */ function isContract(address _targetAddress) internal constant returns (bool); /** * @dev modifier to allow actions only when the _targetAddress is a contract. */ modifier onlyContractAddress(address _targetAddress) { require(isContract(_targetAddress) == true); _; } } /** * @title CommonModifiers * @dev Base contract which contains common checks. */ contract CommonModifiers is CommonModifiersInterface { /** * @dev Assemble the given address bytecode. If bytecode exists then the _addr is a contract. */ function isContract(address _targetAddress) internal constant returns (bool) { require (_targetAddress != address(0x0)); uint256 length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_targetAddress) } return (length > 0); } } /** * @title AssetIDInterface * @dev Interface of a contract that assigned to an asset (JNT, jUSD etc.) * @dev Contracts for the same asset (like JNT, jUSD etc.) will have the same AssetID. * @dev This will help to avoid misconfiguration of contracts */ contract AssetIDInterface { function getAssetID() public constant returns (string); function getAssetIDHash() public constant returns (bytes32); } /** * @title AssetID * @dev Base contract implementing AssetIDInterface */ contract AssetID is AssetIDInterface { /* Storage */ string assetID; /* Constructor */ function AssetID(string _assetID) public { require(bytes(_assetID).length > 0); assetID = _assetID; } /* Getters */ function getAssetID() public constant returns (string) { return assetID; } function getAssetIDHash() public constant returns (bytes32) { return keccak256(assetID); } } /** * @title OwnableInterface * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract OwnableInterface { /** * @dev The getter for "owner" contract variable */ function getOwner() public constant returns (address); /** * @dev Throws if called by any account other than the current owner. */ modifier onlyOwner() { require (msg.sender == getOwner()); _; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable is OwnableInterface { /* Storage */ address owner = address(0x0); address proposedOwner = address(0x0); /* Events */ event OwnerAssignedEvent(address indexed newowner); event OwnershipOfferCreatedEvent(address indexed currentowner, address indexed proposedowner); event OwnershipOfferAcceptedEvent(address indexed currentowner, address indexed proposedowner); event OwnershipOfferCancelledEvent(address indexed currentowner, address indexed proposedowner); /** * @dev The constructor sets the initial `owner` to the passed account. */ function Ownable() public { owner = msg.sender; OwnerAssignedEvent(owner); } /** * @dev Old owner requests transfer ownership to the new owner. * @param _proposedOwner The address to transfer ownership to. */ function createOwnershipOffer(address _proposedOwner) external onlyOwner { require (proposedOwner == address(0x0)); require (_proposedOwner != address(0x0)); require (_proposedOwner != address(this)); proposedOwner = _proposedOwner; OwnershipOfferCreatedEvent(owner, _proposedOwner); } /** * @dev Allows the new owner to accept an ownership offer to contract control. */ //noinspection UnprotectedFunction function acceptOwnershipOffer() external { require (proposedOwner != address(0x0)); require (msg.sender == proposedOwner); address _oldOwner = owner; owner = proposedOwner; proposedOwner = address(0x0); OwnerAssignedEvent(owner); OwnershipOfferAcceptedEvent(_oldOwner, owner); } /** * @dev Old owner cancels transfer ownership to the new owner. */ function cancelOwnershipOffer() external { require (proposedOwner != address(0x0)); require (msg.sender == owner || msg.sender == proposedOwner); address _oldProposedOwner = proposedOwner; proposedOwner = address(0x0); OwnershipOfferCancelledEvent(owner, _oldProposedOwner); } /** * @dev The getter for "owner" contract variable */ function getOwner() public constant returns (address) { return owner; } /** * @dev The getter for "proposedOwner" contract variable */ function getProposedOwner() public constant returns (address) { return proposedOwner; } } /** * @title ManageableInterface * @dev Contract that allows to grant permissions to any address * @dev In real life we are no able to perform all actions with just one Ethereum address * @dev because risks are too high. * @dev Instead owner delegates rights to manage an contract to the different addresses and * @dev stay able to revoke permissions at any time. */ contract ManageableInterface { /** * @dev Function to check if the manager can perform the action or not * @param _manager address Manager`s address * @param _permissionName string Permission name * @return True if manager is enabled and has been granted needed permission */ function isManagerAllowed(address _manager, string _permissionName) public constant returns (bool); /** * @dev Modifier to use in derived contracts */ modifier onlyAllowedManager(string _permissionName) { require(isManagerAllowed(msg.sender, _permissionName) == true); _; } } contract Manageable is OwnableInterface, ManageableInterface { /* Storage */ mapping (address => bool) managerEnabled; // hard switch for a manager - on/off mapping (address => mapping (string => bool)) managerPermissions; // detailed info about manager`s permissions /* Events */ event ManagerEnabledEvent(address indexed manager); event ManagerDisabledEvent(address indexed manager); event ManagerPermissionGrantedEvent(address indexed manager, string permission); event ManagerPermissionRevokedEvent(address indexed manager, string permission); /* Configure contract */ /** * @dev Function to add new manager * @param _manager address New manager */ function enableManager(address _manager) external onlyOwner onlyValidManagerAddress(_manager) { require(managerEnabled[_manager] == false); managerEnabled[_manager] = true; ManagerEnabledEvent(_manager); } /** * @dev Function to remove existing manager * @param _manager address Existing manager */ function disableManager(address _manager) external onlyOwner onlyValidManagerAddress(_manager) { require(managerEnabled[_manager] == true); managerEnabled[_manager] = false; ManagerDisabledEvent(_manager); } /** * @dev Function to grant new permission to the manager * @param _manager address Existing manager * @param _permissionName string Granted permission name */ function grantManagerPermission( address _manager, string _permissionName ) external onlyOwner onlyValidManagerAddress(_manager) onlyValidPermissionName(_permissionName) { require(managerPermissions[_manager][_permissionName] == false); managerPermissions[_manager][_permissionName] = true; ManagerPermissionGrantedEvent(_manager, _permissionName); } /** * @dev Function to revoke permission of the manager * @param _manager address Existing manager * @param _permissionName string Revoked permission name */ function revokeManagerPermission( address _manager, string _permissionName ) external onlyOwner onlyValidManagerAddress(_manager) onlyValidPermissionName(_permissionName) { require(managerPermissions[_manager][_permissionName] == true); managerPermissions[_manager][_permissionName] = false; ManagerPermissionRevokedEvent(_manager, _permissionName); } /* Getters */ /** * @dev Function to check manager status * @param _manager address Manager`s address * @return True if manager is enabled */ function isManagerEnabled( address _manager ) public constant onlyValidManagerAddress(_manager) returns (bool) { return managerEnabled[_manager]; } /** * @dev Function to check permissions of a manager * @param _manager address Manager`s address * @param _permissionName string Permission name * @return True if manager has been granted needed permission */ function isPermissionGranted( address _manager, string _permissionName ) public constant onlyValidManagerAddress(_manager) onlyValidPermissionName(_permissionName) returns (bool) { return managerPermissions[_manager][_permissionName]; } /** * @dev Function to check if the manager can perform the action or not * @param _manager address Manager`s address * @param _permissionName string Permission name * @return True if manager is enabled and has been granted needed permission */ function isManagerAllowed( address _manager, string _permissionName ) public constant onlyValidManagerAddress(_manager) onlyValidPermissionName(_permissionName) returns (bool) { return (managerEnabled[_manager] && managerPermissions[_manager][_permissionName]); } /* Helpers */ /** * @dev Modifier to check manager address */ modifier onlyValidManagerAddress(address _manager) { require(_manager != address(0x0)); _; } /** * @dev Modifier to check name of manager permission */ modifier onlyValidPermissionName(string _permissionName) { require(bytes(_permissionName).length != 0); _; } } /** * @title PausableInterface * @dev Base contract which allows children to implement an emergency stop mechanism. * @dev Based on zeppelin's Pausable, but integrated with Manageable * @dev Contract is in paused state by default and should be explicitly unlocked */ contract PausableInterface { /** * Events */ event PauseEvent(); event UnpauseEvent(); /** * @dev called by the manager to pause, triggers stopped state */ function pauseContract() public; /** * @dev called by the manager to unpause, returns to normal state */ function unpauseContract() public; /** * @dev The getter for "paused" contract variable */ function getPaused() public constant returns (bool); /** * @dev modifier to allow actions only when the contract IS paused */ modifier whenContractNotPaused() { require(getPaused() == false); _; } /** * @dev modifier to allow actions only when the contract IS NOT paused */ modifier whenContractPaused { require(getPaused() == true); _; } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. * @dev Based on zeppelin's Pausable, but integrated with Manageable * @dev Contract is in paused state by default and should be explicitly unlocked */ contract Pausable is ManageableInterface, PausableInterface { /** * Storage */ bool paused = true; /** * @dev called by the manager to pause, triggers stopped state */ function pauseContract() public onlyAllowedManager('pause_contract') whenContractNotPaused { paused = true; PauseEvent(); } /** * @dev called by the manager to unpause, returns to normal state */ function unpauseContract() public onlyAllowedManager('unpause_contract') whenContractPaused { paused = false; UnpauseEvent(); } /** * @dev The getter for "paused" contract variable */ function getPaused() public constant returns (bool) { return paused; } } /** * @title BytecodeExecutorInterface interface * @dev Implementation of a contract that execute any bytecode on behalf of the contract * @dev Last resort for the immutable and not-replaceable contract :) */ contract BytecodeExecutorInterface { /* Events */ event CallExecutedEvent(address indexed target, uint256 suppliedGas, uint256 ethValue, bytes32 transactionBytecodeHash); event DelegatecallExecutedEvent(address indexed target, uint256 suppliedGas, bytes32 transactionBytecodeHash); /* Functions */ function executeCall(address _target, uint256 _suppliedGas, uint256 _ethValue, bytes _transactionBytecode) external; function executeDelegatecall(address _target, uint256 _suppliedGas, bytes _transactionBytecode) external; } /** * @title BytecodeExecutor * @dev Implementation of a contract that execute any bytecode on behalf of the contract * @dev Last resort for the immutable and not-replaceable contract :) */ contract BytecodeExecutor is ManageableInterface, BytecodeExecutorInterface { /* Storage */ bool underExecution = false; /* BytecodeExecutorInterface */ function executeCall( address _target, uint256 _suppliedGas, uint256 _ethValue, bytes _transactionBytecode ) external onlyAllowedManager('execute_call') { require(underExecution == false); underExecution = true; // Avoid recursive calling _target.call.gas(_suppliedGas).value(_ethValue)(_transactionBytecode); underExecution = false; CallExecutedEvent(_target, _suppliedGas, _ethValue, keccak256(_transactionBytecode)); } function executeDelegatecall( address _target, uint256 _suppliedGas, bytes _transactionBytecode ) external onlyAllowedManager('execute_delegatecall') { require(underExecution == false); underExecution = true; // Avoid recursive calling _target.delegatecall.gas(_suppliedGas)(_transactionBytecode); underExecution = false; DelegatecallExecutedEvent(_target, _suppliedGas, keccak256(_transactionBytecode)); } } /** * @title CrydrStorageBaseInterface interface * @dev Interface of a contract that manages balance of an CryDR */ contract CrydrStorageBaseInterface { /* Events */ event CrydrControllerChangedEvent(address indexed crydrcontroller); /* Configuration */ function setCrydrController(address _newController) public; function getCrydrController() public constant returns (address); } /** * @title CrydrStorageBase */ contract CrydrStorageBase is CommonModifiersInterface, AssetIDInterface, ManageableInterface, PausableInterface, CrydrStorageBaseInterface { /* Storage */ address crydrController = address(0x0); /* CrydrStorageBaseInterface */ /* Configuration */ function setCrydrController( address _crydrController ) public whenContractPaused onlyContractAddress(_crydrController) onlyAllowedManager('set_crydr_controller') { require(_crydrController != address(crydrController)); require(_crydrController != address(this)); crydrController = _crydrController; CrydrControllerChangedEvent(_crydrController); } function getCrydrController() public constant returns (address) { return address(crydrController); } /* PausableInterface */ /** * @dev Override method to ensure that contract properly configured before it is unpaused */ function unpauseContract() public { require(isContract(crydrController) == true); require(getAssetIDHash() == AssetIDInterface(crydrController).getAssetIDHash()); super.unpauseContract(); } } /** * @title CrydrStorageBlocksInterface interface * @dev Interface of a contract that manages balance of an CryDR */ contract CrydrStorageBlocksInterface { /* Events */ event AccountBlockedEvent(address indexed account); event AccountUnblockedEvent(address indexed account); event AccountFundsBlockedEvent(address indexed account, uint256 value); event AccountFundsUnblockedEvent(address indexed account, uint256 value); /* Low-level change of blocks and getters */ function blockAccount(address _account) public; function unblockAccount(address _account) public; function getAccountBlocks(address _account) public constant returns (uint256); function blockAccountFunds(address _account, uint256 _value) public; function unblockAccountFunds(address _account, uint256 _value) public; function getAccountBlockedFunds(address _account) public constant returns (uint256); } /** * @title CrydrStorageBlocks */ contract CrydrStorageBlocks is SafeMathInterface, PausableInterface, CrydrStorageBaseInterface, CrydrStorageBlocksInterface { /* Storage */ mapping (address => uint256) accountBlocks; mapping (address => uint256) accountBlockedFunds; /* Constructor */ function CrydrStorageBlocks() public { accountBlocks[0x0] = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; } /* Low-level change of blocks and getters */ function blockAccount( address _account ) public { require(msg.sender == getCrydrController()); require(_account != address(0x0)); accountBlocks[_account] = safeAdd(accountBlocks[_account], 1); AccountBlockedEvent(_account); } function unblockAccount( address _account ) public { require(msg.sender == getCrydrController()); require(_account != address(0x0)); accountBlocks[_account] = safeSub(accountBlocks[_account], 1); AccountUnblockedEvent(_account); } function getAccountBlocks( address _account ) public constant returns (uint256) { require(_account != address(0x0)); return accountBlocks[_account]; } function blockAccountFunds( address _account, uint256 _value ) public { require(msg.sender == getCrydrController()); require(_account != address(0x0)); require(_value > 0); accountBlockedFunds[_account] = safeAdd(accountBlockedFunds[_account], _value); AccountFundsBlockedEvent(_account, _value); } function unblockAccountFunds( address _account, uint256 _value ) public { require(msg.sender == getCrydrController()); require(_account != address(0x0)); require(_value > 0); accountBlockedFunds[_account] = safeSub(accountBlockedFunds[_account], _value); AccountFundsUnblockedEvent(_account, _value); } function getAccountBlockedFunds( address _account ) public constant returns (uint256) { require(_account != address(0x0)); return accountBlockedFunds[_account]; } } /** * @title CrydrStorageBalanceInterface interface * @dev Interface of a contract that manages balance of an CryDR */ contract CrydrStorageBalanceInterface { /* Events */ event AccountBalanceIncreasedEvent(address indexed account, uint256 value); event AccountBalanceDecreasedEvent(address indexed account, uint256 value); /* Low-level change of balance. Implied that totalSupply kept in sync. */ function increaseBalance(address _account, uint256 _value) public; function decreaseBalance(address _account, uint256 _value) public; function getBalance(address _account) public constant returns (uint256); function getTotalSupply() public constant returns (uint256); } /** * @title CrydrStorageBalance */ contract CrydrStorageBalance is SafeMathInterface, PausableInterface, CrydrStorageBaseInterface, CrydrStorageBalanceInterface { /* Storage */ mapping (address => uint256) balances; uint256 totalSupply = 0; /* Low-level change of balance and getters. Implied that totalSupply kept in sync. */ function increaseBalance( address _account, uint256 _value ) public whenContractNotPaused { require(msg.sender == getCrydrController()); require(_account != address(0x0)); require(_value > 0); balances[_account] = safeAdd(balances[_account], _value); totalSupply = safeAdd(totalSupply, _value); AccountBalanceIncreasedEvent(_account, _value); } function decreaseBalance( address _account, uint256 _value ) public whenContractNotPaused { require(msg.sender == getCrydrController()); require(_account != address(0x0)); require(_value > 0); balances[_account] = safeSub(balances[_account], _value); totalSupply = safeSub(totalSupply, _value); AccountBalanceDecreasedEvent(_account, _value); } function getBalance(address _account) public constant returns (uint256) { require(_account != address(0x0)); return balances[_account]; } function getTotalSupply() public constant returns (uint256) { return totalSupply; } } /** * @title CrydrStorageAllowanceInterface interface * @dev Interface of a contract that manages balance of an CryDR */ contract CrydrStorageAllowanceInterface { /* Events */ event AccountAllowanceIncreasedEvent(address indexed owner, address indexed spender, uint256 value); event AccountAllowanceDecreasedEvent(address indexed owner, address indexed spender, uint256 value); /* Low-level change of allowance */ function increaseAllowance(address _owner, address _spender, uint256 _value) public; function decreaseAllowance(address _owner, address _spender, uint256 _value) public; function getAllowance(address _owner, address _spender) public constant returns (uint256); } /** * @title CrydrStorageAllowance */ contract CrydrStorageAllowance is SafeMathInterface, PausableInterface, CrydrStorageBaseInterface, CrydrStorageAllowanceInterface { /* Storage */ mapping (address => mapping (address => uint256)) allowed; /* Low-level change of allowance and getters */ function increaseAllowance( address _owner, address _spender, uint256 _value ) public whenContractNotPaused { require(msg.sender == getCrydrController()); require(_owner != address(0x0)); require(_spender != address(0x0)); require(_owner != _spender); require(_value > 0); allowed[_owner][_spender] = safeAdd(allowed[_owner][_spender], _value); AccountAllowanceIncreasedEvent(_owner, _spender, _value); } function decreaseAllowance( address _owner, address _spender, uint256 _value ) public whenContractNotPaused { require(msg.sender == getCrydrController()); require(_owner != address(0x0)); require(_spender != address(0x0)); require(_owner != _spender); require(_value > 0); allowed[_owner][_spender] = safeSub(allowed[_owner][_spender], _value); AccountAllowanceDecreasedEvent(_owner, _spender, _value); } function getAllowance( address _owner, address _spender ) public constant returns (uint256) { require(_owner != address(0x0)); require(_spender != address(0x0)); require(_owner != _spender); return allowed[_owner][_spender]; } } /** * @title CrydrStorageERC20Interface interface * @dev Interface of a contract that manages balance of an CryDR and have optimization for ERC20 controllers */ contract CrydrStorageERC20Interface { /* Events */ event CrydrTransferredEvent(address indexed from, address indexed to, uint256 value); event CrydrTransferredFromEvent(address indexed spender, address indexed from, address indexed to, uint256 value); event CrydrSpendingApprovedEvent(address indexed owner, address indexed spender, uint256 value); /* ERC20 optimization. _msgsender - account that invoked CrydrView */ function transfer(address _msgsender, address _to, uint256 _value) public; function transferFrom(address _msgsender, address _from, address _to, uint256 _value) public; function approve(address _msgsender, address _spender, uint256 _value) public; } /** * @title CrydrStorageERC20 */ contract CrydrStorageERC20 is SafeMathInterface, PausableInterface, CrydrStorageBaseInterface, CrydrStorageBalanceInterface, CrydrStorageAllowanceInterface, CrydrStorageBlocksInterface, CrydrStorageERC20Interface { function transfer( address _msgsender, address _to, uint256 _value ) public whenContractNotPaused { require(msg.sender == getCrydrController()); require(_msgsender != _to); require(getAccountBlocks(_msgsender) == 0); require(safeSub(getBalance(_msgsender), _value) >= getAccountBlockedFunds(_msgsender)); decreaseBalance(_msgsender, _value); increaseBalance(_to, _value); CrydrTransferredEvent(_msgsender, _to, _value); } function transferFrom( address _msgsender, address _from, address _to, uint256 _value ) public whenContractNotPaused { require(msg.sender == getCrydrController()); require(getAccountBlocks(_msgsender) == 0); require(getAccountBlocks(_from) == 0); require(safeSub(getBalance(_from), _value) >= getAccountBlockedFunds(_from)); require(_from != _to); decreaseAllowance(_from, _msgsender, _value); decreaseBalance(_from, _value); increaseBalance(_to, _value); CrydrTransferredFromEvent(_msgsender, _from, _to, _value); } function approve( address _msgsender, address _spender, uint256 _value ) public whenContractNotPaused { require(msg.sender == getCrydrController()); require(getAccountBlocks(_msgsender) == 0); require(getAccountBlocks(_spender) == 0); uint256 currentAllowance = getAllowance(_msgsender, _spender); require(currentAllowance != _value); if (currentAllowance > _value) { decreaseAllowance(_msgsender, _spender, safeSub(currentAllowance, _value)); } else { increaseAllowance(_msgsender, _spender, safeSub(_value, currentAllowance)); } CrydrSpendingApprovedEvent(_msgsender, _spender, _value); } } /** * @title JCashCrydrStorage * @dev Implementation of a contract that manages data of an CryDR */ contract JCashCrydrStorage is SafeMath, CommonModifiers, AssetID, Ownable, Manageable, Pausable, BytecodeExecutor, CrydrStorageBase, CrydrStorageBalance, CrydrStorageAllowance, CrydrStorageBlocks, CrydrStorageERC20 { /* Constructor */ function JCashCrydrStorage(string _assetID) AssetID(_assetID) public { } } contract JNTStorage is JCashCrydrStorage { function JNTStorage() JCashCrydrStorage('JNT') public {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"_manager","type":"address"},{"name":"_permissionName","type":"string"}],"name":"isManagerAllowed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"getAllowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_msgsender","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"cancelOwnershipOffer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_crydrController","type":"address"}],"name":"setCrydrController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_manager","type":"address"},{"name":"_permissionName","type":"string"}],"name":"isPermissionGranted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pauseContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"}],"name":"unblockAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_value","type":"uint256"}],"name":"increaseBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"enableManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getPaused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAssetID","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"increaseAllowance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"}],"name":"blockAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"},{"name":"_permissionName","type":"string"}],"name":"revokeManagerPermission","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_value","type":"uint256"}],"name":"unblockAccountFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"},{"name":"_permissionName","type":"string"}],"name":"grantManagerPermission","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_suppliedGas","type":"uint256"},{"name":"_ethValue","type":"uint256"},{"name":"_transactionBytecode","type":"bytes"}],"name":"executeCall","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"}],"name":"getAccountBlocks","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_proposedOwner","type":"address"}],"name":"createOwnershipOffer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_manager","type":"address"}],"name":"isManagerEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAssetIDHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpauseContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"}],"name":"getAccountBlockedFunds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_msgsender","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_value","type":"uint256"}],"name":"blockAccountFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCrydrController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_suppliedGas","type":"uint256"},{"name":"_transactionBytecode","type":"bytes"}],"name":"executeDelegatecall","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"disableManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"decreaseAllowance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_msgsender","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getProposedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnershipOffer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_value","type":"uint256"}],"name":"decreaseBalance","outputs":[],"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"}],"name":"CrydrTransferredEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"spender","type":"address"},{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"CrydrTransferredFromEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"CrydrSpendingApprovedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"AccountBlockedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"AccountUnblockedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"AccountFundsBlockedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"AccountFundsUnblockedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"AccountAllowanceIncreasedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"AccountAllowanceDecreasedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"AccountBalanceIncreasedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"AccountBalanceDecreasedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"crydrcontroller","type":"address"}],"name":"CrydrControllerChangedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"suppliedGas","type":"uint256"},{"indexed":false,"name":"ethValue","type":"uint256"},{"indexed":false,"name":"transactionBytecodeHash","type":"bytes32"}],"name":"CallExecutedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"suppliedGas","type":"uint256"},{"indexed":false,"name":"transactionBytecodeHash","type":"bytes32"}],"name":"DelegatecallExecutedEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"PauseEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"UnpauseEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"manager","type":"address"}],"name":"ManagerEnabledEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"manager","type":"address"}],"name":"ManagerDisabledEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"manager","type":"address"},{"indexed":false,"name":"permission","type":"string"}],"name":"ManagerPermissionGrantedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"manager","type":"address"},{"indexed":false,"name":"permission","type":"string"}],"name":"ManagerPermissionRevokedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"newowner","type":"address"}],"name":"OwnerAssignedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"currentowner","type":"address"},{"indexed":true,"name":"proposedowner","type":"address"}],"name":"OwnershipOfferCreatedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"currentowner","type":"address"},{"indexed":true,"name":"proposedowner","type":"address"}],"name":"OwnershipOfferAcceptedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"currentowner","type":"address"},{"indexed":true,"name":"proposedowner","type":"address"}],"name":"OwnershipOfferCancelledEvent","type":"event"}]
Contract Creation Code
60606040526000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600560006101000a81548160ff0219169083151502179055506000600560016101000a81548160ff0219169083151502179055506000600560026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060075534156200011157600080fd5b6040805190810160405280600381526020017f4a4e54000000000000000000000000000000000000000000000000000000000081525080600081511115156200015957600080fd5b8060009080519060200190620001719291906200026e565b505033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8d2a41ca5ff551a8f68510de75177b7d56e6019c8579b5509d2be1bb41a0d0af60405160405180910390a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550506200031d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002b157805160ff1916838001178555620002e2565b82800160010185558215620002e2579182015b82811115620002e1578251825591602001919060010190620002c4565b5b509050620002f19190620002f5565b5090565b6200031a91905b8082111562000316576000816000905550600101620002fc565b5090565b90565b613b6e806200032d6000396000f3006060604052600436106101cd576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630392d2b4146101d25780630af4187d1461026657806315dacbea146102d25780631eb96a5c14610352578063305f17d51461036757806332a2fda7146103a0578063439766ce146104345780634d78fdc6146104495780635b86f599146104825780635ca5b334146104c45780636805b84b146104fd578063696b5fb71461052a5780636c43a2ca146105b85780637c0a893d146106195780637c0efb8b146106525780637fa879491461069f578063822b08d0146106e1578063893d20e81461072e5780638ba7e5701461078357806395534e00146107e25780639739db9d1461082f5780639b53d87c14610868578063a773d98a146108b9578063b33712c5146108ea578063be2a2ff2146108ff578063beabacc81461094c578063c4e41b22146109ad578063c60c13a3146109d6578063ca9c286214610a18578063d2b7d95714610a6d578063d4859dc514610ac3578063d73b1dc914610afc578063e1f21c6714610b5d578063eae5a62d14610bbe578063f538534514610c13578063f8b2cb4f14610c28578063ff05694914610c75575b600080fd5b34156101dd57600080fd5b61024c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610cb7565b604051808215151515815260200191505060405180910390f35b341561027157600080fd5b6102bc600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e1d565b6040518082815260200191505060405180910390f35b34156102dd57600080fd5b610350600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610f56565b005b341561035d57600080fd5b6103656110e3565b005b341561037257600080fd5b61039e600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506112dc565b005b34156103ab57600080fd5b61041a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611485565b604051808215151515815260200191505060405180910390f35b341561043f57600080fd5b610447611596565b005b341561045457600080fd5b610480600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061164c565b005b341561048d57600080fd5b6104c2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061179c565b005b34156104cf57600080fd5b6104fb600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611932565b005b341561050857600080fd5b610510611aae565b604051808215151515815260200191505060405180910390f35b341561053557600080fd5b61053d611ac5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057d578082015181840152602081019050610562565b50505050905090810190601f1680156105aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105c357600080fd5b610617600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611b6d565b005b341561062457600080fd5b610650600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611dfa565b005b341561065d57600080fd5b61069d600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190820180359060200191909192905050611f4a565b005b34156106aa57600080fd5b6106df600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612178565b005b34156106ec57600080fd5b61072c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001919091929050506122e2565b005b341561073957600080fd5b610741612510565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561078e57600080fd5b6107e0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091908035906020019091908035906020019082018035906020019190919290505061253a565b005b34156107ed57600080fd5b610819600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506126af565b6040518082815260200191505060405180910390f35b341561083a57600080fd5b610866600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612733565b005b341561087357600080fd5b61089f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612908565b604051808215151515815260200191505060405180910390f35b34156108c457600080fd5b6108cc61299c565b60405180826000191660001916815260200191505060405180910390f35b34156108f557600080fd5b6108fd612a0c565b005b341561090a57600080fd5b610936600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612b18565b6040518082815260200191505060405180910390f35b341561095757600080fd5b6109ab600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612b9c565b005b34156109b857600080fd5b6109c0612cef565b6040518082815260200191505060405180910390f35b34156109e157600080fd5b610a16600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612cf9565b005b3415610a2357600080fd5b610a2b612e63565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610a7857600080fd5b610ac1600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919080359060200190820180359060200191909192905050612e8d565b005b3415610ace57600080fd5b610afa600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612ff6565b005b3415610b0757600080fd5b610b5b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050613172565b005b3415610b6857600080fd5b610bbc600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506133ff565b005b3415610bc957600080fd5b610bd1613545565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610c1e57600080fd5b610c2661356f565b005b3415610c3357600080fd5b610c5f600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506137d8565b6040518082815260200191505060405180910390f35b3415610c8057600080fd5b610cb5600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061385c565b005b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610cf657600080fd5b826000815114151515610d0857600080fd5b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610e135750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020846040518082805190602001908083835b602083101515610dd15780518252602082019150602081019050602083039250610dac565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff165b9250505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610e5a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610e9657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610ed157600080fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60001515610f62611aae565b1515141515610f7057600080fd5b610f78612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610fb157600080fd5b6000610fbc856126af565b141515610fc857600080fd5b6000610fd3846126af565b141515610fdf57600080fd5b610fe883612b18565b610ffa610ff4856137d8565b836139f2565b1015151561100757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561104257600080fd5b61104d838583613172565b611057838261385c565b611061828261179c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fe3d776cf1ef825c35dbb8811a66dc929631899ddcfa44ed20af30a2ada287219846040518082815260200191505060405180910390a450505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561114257600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111eb5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156111f657600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f223225995c0c0965e8752fd93ca10aba4bafcbca26f31b1565955adb68e76bda60405160405180910390a350565b600115156112e8611aae565b15151415156112f657600080fd5b806001151561130482613a0b565b151514151561131257600080fd5b6040805190810160405280601481526020017f7365745f63727964725f636f6e74726f6c6c6572000000000000000000000000815250600115156113563383610cb7565b151514151561136457600080fd5b600560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156113c157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156113fc57600080fd5b82600560026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167f95e43e6707a0436b5cc3af93d12042ce56df5ec4fe857d77836fe6316dc8457060405160405180910390a2505050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156114c457600080fd5b8260008151141515156114d657600080fd5b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020846040518082805190602001908083835b60208310151561154b5780518252602082019150602081019050602083039250611526565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff169250505092915050565b6040805190810160405280600e81526020017f70617573655f636f6e7472616374000000000000000000000000000000000000815250600115156115da3383610cb7565b15151415156115e857600080fd5b600015156115f4611aae565b151514151561160257600080fd5b6001600560006101000a81548160ff0219169083151502179055507f14cc32b2b0edca88201ca20553c392d108a2feb2c750a0ee14c707b4f34fbee260405160405180910390a150565b611654612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561168d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116c957600080fd5b611713600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460016139f2565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f81b9c84fba2126e059adb9872626ddf7b49e111cff0c1115f2e5366c808f1c3760405160405180910390a250565b600015156117a8611aae565b15151415156117b657600080fd5b6117be612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117f757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561183357600080fd5b60008111151561184257600080fd5b61188b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613a5a565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118da60075482613a5a565b6007819055508173ffffffffffffffffffffffffffffffffffffffff167f83c6d1dfd5f048a40d7fadd573780e453d8ff8fd61ea222d7e643a3d1c779c2d826040518082815260200191505060405180910390a25050565b61193a612510565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561197357600080fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156119b057600080fd5b60001515600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611a0f57600080fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f7f0b61f78ab0b549b68ce61404f4ee01a26ffdf8d421d099d271d789aaea3a8e60405160405180910390a25050565b6000600560009054906101000a900460ff16905090565b611acd613b2e565b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b635780601f10611b3857610100808354040283529160200191611b63565b820191906000526020600020905b815481529060010190602001808311611b4657829003601f168201915b5050505050905090565b60001515611b79611aae565b1515141515611b8757600080fd5b611b8f612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611bc857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611c0457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611c4057600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611c7b57600080fd5b600081111515611c8a57600080fd5b611d10600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613a5a565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f32e1b5603904861a1165c337e368b5c657f1fc8008aa19c0c790ca77397f47e4836040518082815260200191505060405180910390a3505050565b611e02612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e3b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611e7757600080fd5b611ec1600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546001613a5a565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f2dc7c28266c3cbe06a9326adac266f3d4f5996dc8f70deb57730ed02bfeb87f760405160405180910390a250565b611f52612510565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f8b57600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611fc857600080fd5b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050600081511415151561200c57600080fd5b60011515600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858560405180838380828437820191505092505050908152602001604051809103902060009054906101000a900460ff16151514151561208e57600080fd5b6000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858560405180838380828437820191505092505050908152602001604051809103902060006101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff167fe2b13fa06e3428fe0e43b2e517d25708ba477cafdff4fbcd06e3e93864517ddc8585604051808060200182810382528484828181526020019250808284378201915050935050505060405180910390a25050505050565b612180612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156121b957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156121f557600080fd5b60008111151561220457600080fd5b61224d600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139f2565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167fdadab30385c25eca982350a1f6a5fe622a0d5fcac8f49d9fabba36d56273bc0a826040518082815260200191505060405180910390a25050565b6122ea612510565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561232357600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561236057600080fd5b82828080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505060008151141515156123a457600080fd5b60001515600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858560405180838380828437820191505092505050908152602001604051809103902060009054906101000a900460ff16151514151561242657600080fd5b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858560405180838380828437820191505092505050908152602001604051809103902060006101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff167fb76b4ee2621e0744da93fa797bdc4851a3b9e303b2950f2f234a449e5f36d35e8585604051808060200182810382528484828181526020019250808284378201915050935050505060405180910390a25050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040805190810160405280600c81526020017f657865637574655f63616c6c00000000000000000000000000000000000000008152506001151561257e3383610cb7565b151514151561258c57600080fd5b60001515600560019054906101000a900460ff1615151415156125ae57600080fd5b6001600560016101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff168585858560405180838380828437820191505092505050600060405180830381858888f19350505050506000600560016101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff167f376185a1f1832ecd7ffd6a421a54d437594db00f80f6122e8534d19d978b65b686868686604051808383808284378201915050925050506040518091039020604051808481526020018381526020018260001916600019168152602001935050505060405180910390a2505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156126ec57600080fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61273b612510565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561277457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156127d157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561280d57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561284857600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f0c5d18b25c2665dfeec8ea7956663ec48f079fdd04799ddd335f2fdce1a9fceb60405160405180910390a350565b600081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561294757600080fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16915050919050565b60008060405180828054600181600116156101000203166002900480156129fa5780601f106129d85761010080835404028352918201916129fa565b820191906000526020600020905b8154815290600101906020018083116129e6575b50509150506040518091039020905090565b60011515612a3b600560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613a0b565b1515141515612a4957600080fd5b600560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a773d98a6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612ad757600080fd5b6102c65a03f11515612ae857600080fd5b5050506040518051905060001916612afe61299c565b60001916141515612b0e57600080fd5b612b16613a78565b565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612b5557600080fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60001515612ba8611aae565b1515141515612bb657600080fd5b612bbe612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612bf757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612c3257600080fd5b6000612c3d846126af565b141515612c4957600080fd5b612c5283612b18565b612c64612c5e856137d8565b836139f2565b10151515612c7157600080fd5b612c7b838261385c565b612c85828261179c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f785f57e51f803d3d6a09af16f87ff848450fc54f2d0b531a2a08117e18a5ff21836040518082815260200191505060405180910390a3505050565b6000600754905090565b612d01612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d3a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612d7657600080fd5b600081111515612d8557600080fd5b612dce600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613a5a565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f45a0d7ac95749f67b40af5e7c66e83b9408196958b3e134a644a9f44bb552de1826040518082815260200191505060405180910390a25050565b6000600560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040805190810160405280601481526020017f657865637574655f64656c656761746563616c6c00000000000000000000000081525060011515612ed13383610cb7565b1515141515612edf57600080fd5b60001515600560019054906101000a900460ff161515141515612f0157600080fd5b6001600560016101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff16848484604051808383808284378201915050925050506000604051808303818686f492505050506000600560016101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff167ffd9a51b5876c403362d350caaea2a99618ed2c0b3eb601e0ab04606616e671888585856040518083838082843782019150509250505060405180910390206040518083815260200182600019166000191681526020019250505060405180910390a25050505050565b612ffe612510565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561303757600080fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561307457600080fd5b60011515600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415156130d357600080fd5b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f91975e22df3ba360814d3153e8eaef17954cf47d52a42840fc9747ad1086b35160405160405180910390a25050565b6000151561317e611aae565b151514151561318c57600080fd5b613194612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156131cd57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561320957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561324557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561328057600080fd5b60008111151561328f57600080fd5b613315600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139f2565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb7956d03ae366cf172b1a1bd47b217105992bad229e73d5ba758678431dea82c836040518082815260200191505060405180910390a3505050565b600080151561340c611aae565b151514151561341a57600080fd5b613422612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561345b57600080fd5b6000613466856126af565b14151561347257600080fd5b600061347d846126af565b14151561348957600080fd5b6134938484610e1d565b90508181141515156134a457600080fd5b818111156134c5576134c084846134bb84866139f2565b613172565b6134da565b6134d984846134d485856139f2565b611b6d565b5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa8be8e87e8fbceab291eb42413d9c78ee7b7898e718d2d16fe6958a3faeb1c8e846040518082815260200191505060405180910390a350505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156135ce57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561362a57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8d2a41ca5ff551a8f68510de75177b7d56e6019c8579b5509d2be1bb41a0d0af60405160405180910390a2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3912b3f6ff73ee5d4cd2894666c349dec2d3d2ed7dc6d35c28c5eabf105a88d860405160405180910390a350565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561381557600080fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60001515613868611aae565b151514151561387657600080fd5b61387e612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156138b757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156138f357600080fd5b60008111151561390257600080fd5b61394b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139f2565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399a600754826139f2565b6007819055508173ffffffffffffffffffffffffffffffffffffffff167f276bbd423424ce251a4cee26b903235278ab7970a230885c80d3a75b05807256826040518082815260200191505060405180910390a25050565b6000828211151515613a0057fe5b818303905092915050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515613a4a57600080fd5b823b905060008111915050919050565b6000808284019050838110151515613a6e57fe5b8091505092915050565b6040805190810160405280601081526020017f756e70617573655f636f6e74726163740000000000000000000000000000000081525060011515613abc3383610cb7565b1515141515613aca57600080fd5b60011515613ad6611aae565b1515141515613ae457600080fd5b6000600560006101000a81548160ff0219169083151502179055507f6249a5c797c884cbf33e63e8cfc250816032db24e22051de68a388315e64afc660405160405180910390a150565b6020604051908101604052806000815250905600a165627a7a723058206500ede71ec9cc54dae49f9a38711bb9cab89e0dbf77a37156c2d3a7b0191f480029
Deployed Bytecode
0x6060604052600436106101cd576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630392d2b4146101d25780630af4187d1461026657806315dacbea146102d25780631eb96a5c14610352578063305f17d51461036757806332a2fda7146103a0578063439766ce146104345780634d78fdc6146104495780635b86f599146104825780635ca5b334146104c45780636805b84b146104fd578063696b5fb71461052a5780636c43a2ca146105b85780637c0a893d146106195780637c0efb8b146106525780637fa879491461069f578063822b08d0146106e1578063893d20e81461072e5780638ba7e5701461078357806395534e00146107e25780639739db9d1461082f5780639b53d87c14610868578063a773d98a146108b9578063b33712c5146108ea578063be2a2ff2146108ff578063beabacc81461094c578063c4e41b22146109ad578063c60c13a3146109d6578063ca9c286214610a18578063d2b7d95714610a6d578063d4859dc514610ac3578063d73b1dc914610afc578063e1f21c6714610b5d578063eae5a62d14610bbe578063f538534514610c13578063f8b2cb4f14610c28578063ff05694914610c75575b600080fd5b34156101dd57600080fd5b61024c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610cb7565b604051808215151515815260200191505060405180910390f35b341561027157600080fd5b6102bc600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e1d565b6040518082815260200191505060405180910390f35b34156102dd57600080fd5b610350600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610f56565b005b341561035d57600080fd5b6103656110e3565b005b341561037257600080fd5b61039e600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506112dc565b005b34156103ab57600080fd5b61041a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611485565b604051808215151515815260200191505060405180910390f35b341561043f57600080fd5b610447611596565b005b341561045457600080fd5b610480600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061164c565b005b341561048d57600080fd5b6104c2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061179c565b005b34156104cf57600080fd5b6104fb600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611932565b005b341561050857600080fd5b610510611aae565b604051808215151515815260200191505060405180910390f35b341561053557600080fd5b61053d611ac5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057d578082015181840152602081019050610562565b50505050905090810190601f1680156105aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105c357600080fd5b610617600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611b6d565b005b341561062457600080fd5b610650600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611dfa565b005b341561065d57600080fd5b61069d600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190820180359060200191909192905050611f4a565b005b34156106aa57600080fd5b6106df600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612178565b005b34156106ec57600080fd5b61072c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001919091929050506122e2565b005b341561073957600080fd5b610741612510565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561078e57600080fd5b6107e0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091908035906020019091908035906020019082018035906020019190919290505061253a565b005b34156107ed57600080fd5b610819600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506126af565b6040518082815260200191505060405180910390f35b341561083a57600080fd5b610866600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612733565b005b341561087357600080fd5b61089f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612908565b604051808215151515815260200191505060405180910390f35b34156108c457600080fd5b6108cc61299c565b60405180826000191660001916815260200191505060405180910390f35b34156108f557600080fd5b6108fd612a0c565b005b341561090a57600080fd5b610936600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612b18565b6040518082815260200191505060405180910390f35b341561095757600080fd5b6109ab600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612b9c565b005b34156109b857600080fd5b6109c0612cef565b6040518082815260200191505060405180910390f35b34156109e157600080fd5b610a16600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612cf9565b005b3415610a2357600080fd5b610a2b612e63565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610a7857600080fd5b610ac1600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919080359060200190820180359060200191909192905050612e8d565b005b3415610ace57600080fd5b610afa600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612ff6565b005b3415610b0757600080fd5b610b5b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050613172565b005b3415610b6857600080fd5b610bbc600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506133ff565b005b3415610bc957600080fd5b610bd1613545565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610c1e57600080fd5b610c2661356f565b005b3415610c3357600080fd5b610c5f600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506137d8565b6040518082815260200191505060405180910390f35b3415610c8057600080fd5b610cb5600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061385c565b005b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610cf657600080fd5b826000815114151515610d0857600080fd5b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610e135750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020846040518082805190602001908083835b602083101515610dd15780518252602082019150602081019050602083039250610dac565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff165b9250505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610e5a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610e9657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610ed157600080fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60001515610f62611aae565b1515141515610f7057600080fd5b610f78612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610fb157600080fd5b6000610fbc856126af565b141515610fc857600080fd5b6000610fd3846126af565b141515610fdf57600080fd5b610fe883612b18565b610ffa610ff4856137d8565b836139f2565b1015151561100757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561104257600080fd5b61104d838583613172565b611057838261385c565b611061828261179c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fe3d776cf1ef825c35dbb8811a66dc929631899ddcfa44ed20af30a2ada287219846040518082815260200191505060405180910390a450505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561114257600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111eb5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156111f657600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f223225995c0c0965e8752fd93ca10aba4bafcbca26f31b1565955adb68e76bda60405160405180910390a350565b600115156112e8611aae565b15151415156112f657600080fd5b806001151561130482613a0b565b151514151561131257600080fd5b6040805190810160405280601481526020017f7365745f63727964725f636f6e74726f6c6c6572000000000000000000000000815250600115156113563383610cb7565b151514151561136457600080fd5b600560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156113c157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156113fc57600080fd5b82600560026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167f95e43e6707a0436b5cc3af93d12042ce56df5ec4fe857d77836fe6316dc8457060405160405180910390a2505050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156114c457600080fd5b8260008151141515156114d657600080fd5b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020846040518082805190602001908083835b60208310151561154b5780518252602082019150602081019050602083039250611526565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff169250505092915050565b6040805190810160405280600e81526020017f70617573655f636f6e7472616374000000000000000000000000000000000000815250600115156115da3383610cb7565b15151415156115e857600080fd5b600015156115f4611aae565b151514151561160257600080fd5b6001600560006101000a81548160ff0219169083151502179055507f14cc32b2b0edca88201ca20553c392d108a2feb2c750a0ee14c707b4f34fbee260405160405180910390a150565b611654612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561168d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116c957600080fd5b611713600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460016139f2565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f81b9c84fba2126e059adb9872626ddf7b49e111cff0c1115f2e5366c808f1c3760405160405180910390a250565b600015156117a8611aae565b15151415156117b657600080fd5b6117be612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117f757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561183357600080fd5b60008111151561184257600080fd5b61188b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613a5a565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118da60075482613a5a565b6007819055508173ffffffffffffffffffffffffffffffffffffffff167f83c6d1dfd5f048a40d7fadd573780e453d8ff8fd61ea222d7e643a3d1c779c2d826040518082815260200191505060405180910390a25050565b61193a612510565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561197357600080fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156119b057600080fd5b60001515600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611a0f57600080fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f7f0b61f78ab0b549b68ce61404f4ee01a26ffdf8d421d099d271d789aaea3a8e60405160405180910390a25050565b6000600560009054906101000a900460ff16905090565b611acd613b2e565b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b635780601f10611b3857610100808354040283529160200191611b63565b820191906000526020600020905b815481529060010190602001808311611b4657829003601f168201915b5050505050905090565b60001515611b79611aae565b1515141515611b8757600080fd5b611b8f612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611bc857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611c0457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611c4057600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611c7b57600080fd5b600081111515611c8a57600080fd5b611d10600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613a5a565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f32e1b5603904861a1165c337e368b5c657f1fc8008aa19c0c790ca77397f47e4836040518082815260200191505060405180910390a3505050565b611e02612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e3b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611e7757600080fd5b611ec1600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546001613a5a565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f2dc7c28266c3cbe06a9326adac266f3d4f5996dc8f70deb57730ed02bfeb87f760405160405180910390a250565b611f52612510565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f8b57600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611fc857600080fd5b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050600081511415151561200c57600080fd5b60011515600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858560405180838380828437820191505092505050908152602001604051809103902060009054906101000a900460ff16151514151561208e57600080fd5b6000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858560405180838380828437820191505092505050908152602001604051809103902060006101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff167fe2b13fa06e3428fe0e43b2e517d25708ba477cafdff4fbcd06e3e93864517ddc8585604051808060200182810382528484828181526020019250808284378201915050935050505060405180910390a25050505050565b612180612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156121b957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156121f557600080fd5b60008111151561220457600080fd5b61224d600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139f2565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167fdadab30385c25eca982350a1f6a5fe622a0d5fcac8f49d9fabba36d56273bc0a826040518082815260200191505060405180910390a25050565b6122ea612510565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561232357600080fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561236057600080fd5b82828080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505060008151141515156123a457600080fd5b60001515600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858560405180838380828437820191505092505050908152602001604051809103902060009054906101000a900460ff16151514151561242657600080fd5b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020858560405180838380828437820191505092505050908152602001604051809103902060006101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff167fb76b4ee2621e0744da93fa797bdc4851a3b9e303b2950f2f234a449e5f36d35e8585604051808060200182810382528484828181526020019250808284378201915050935050505060405180910390a25050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040805190810160405280600c81526020017f657865637574655f63616c6c00000000000000000000000000000000000000008152506001151561257e3383610cb7565b151514151561258c57600080fd5b60001515600560019054906101000a900460ff1615151415156125ae57600080fd5b6001600560016101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff168585858560405180838380828437820191505092505050600060405180830381858888f19350505050506000600560016101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff167f376185a1f1832ecd7ffd6a421a54d437594db00f80f6122e8534d19d978b65b686868686604051808383808284378201915050925050506040518091039020604051808481526020018381526020018260001916600019168152602001935050505060405180910390a2505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156126ec57600080fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61273b612510565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561277457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156127d157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561280d57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561284857600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f0c5d18b25c2665dfeec8ea7956663ec48f079fdd04799ddd335f2fdce1a9fceb60405160405180910390a350565b600081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561294757600080fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16915050919050565b60008060405180828054600181600116156101000203166002900480156129fa5780601f106129d85761010080835404028352918201916129fa565b820191906000526020600020905b8154815290600101906020018083116129e6575b50509150506040518091039020905090565b60011515612a3b600560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613a0b565b1515141515612a4957600080fd5b600560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a773d98a6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612ad757600080fd5b6102c65a03f11515612ae857600080fd5b5050506040518051905060001916612afe61299c565b60001916141515612b0e57600080fd5b612b16613a78565b565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612b5557600080fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60001515612ba8611aae565b1515141515612bb657600080fd5b612bbe612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612bf757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612c3257600080fd5b6000612c3d846126af565b141515612c4957600080fd5b612c5283612b18565b612c64612c5e856137d8565b836139f2565b10151515612c7157600080fd5b612c7b838261385c565b612c85828261179c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f785f57e51f803d3d6a09af16f87ff848450fc54f2d0b531a2a08117e18a5ff21836040518082815260200191505060405180910390a3505050565b6000600754905090565b612d01612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612d3a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612d7657600080fd5b600081111515612d8557600080fd5b612dce600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613a5a565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f45a0d7ac95749f67b40af5e7c66e83b9408196958b3e134a644a9f44bb552de1826040518082815260200191505060405180910390a25050565b6000600560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040805190810160405280601481526020017f657865637574655f64656c656761746563616c6c00000000000000000000000081525060011515612ed13383610cb7565b1515141515612edf57600080fd5b60001515600560019054906101000a900460ff161515141515612f0157600080fd5b6001600560016101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff16848484604051808383808284378201915050925050506000604051808303818686f492505050506000600560016101000a81548160ff0219169083151502179055508473ffffffffffffffffffffffffffffffffffffffff167ffd9a51b5876c403362d350caaea2a99618ed2c0b3eb601e0ab04606616e671888585856040518083838082843782019150509250505060405180910390206040518083815260200182600019166000191681526020019250505060405180910390a25050505050565b612ffe612510565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561303757600080fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561307457600080fd5b60011515600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415156130d357600080fd5b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f91975e22df3ba360814d3153e8eaef17954cf47d52a42840fc9747ad1086b35160405160405180910390a25050565b6000151561317e611aae565b151514151561318c57600080fd5b613194612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156131cd57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561320957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561324557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561328057600080fd5b60008111151561328f57600080fd5b613315600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139f2565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb7956d03ae366cf172b1a1bd47b217105992bad229e73d5ba758678431dea82c836040518082815260200191505060405180910390a3505050565b600080151561340c611aae565b151514151561341a57600080fd5b613422612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561345b57600080fd5b6000613466856126af565b14151561347257600080fd5b600061347d846126af565b14151561348957600080fd5b6134938484610e1d565b90508181141515156134a457600080fd5b818111156134c5576134c084846134bb84866139f2565b613172565b6134da565b6134d984846134d485856139f2565b611b6d565b5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa8be8e87e8fbceab291eb42413d9c78ee7b7898e718d2d16fe6958a3faeb1c8e846040518082815260200191505060405180910390a350505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156135ce57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561362a57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8d2a41ca5ff551a8f68510de75177b7d56e6019c8579b5509d2be1bb41a0d0af60405160405180910390a2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3912b3f6ff73ee5d4cd2894666c349dec2d3d2ed7dc6d35c28c5eabf105a88d860405160405180910390a350565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561381557600080fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60001515613868611aae565b151514151561387657600080fd5b61387e612e63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156138b757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156138f357600080fd5b60008111151561390257600080fd5b61394b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139f2565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399a600754826139f2565b6007819055508173ffffffffffffffffffffffffffffffffffffffff167f276bbd423424ce251a4cee26b903235278ab7970a230885c80d3a75b05807256826040518082815260200191505060405180910390a25050565b6000828211151515613a0057fe5b818303905092915050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515613a4a57600080fd5b823b905060008111915050919050565b6000808284019050838110151515613a6e57fe5b8091505092915050565b6040805190810160405280601081526020017f756e70617573655f636f6e74726163740000000000000000000000000000000081525060011515613abc3383610cb7565b1515141515613aca57600080fd5b60011515613ad6611aae565b1515141515613ae457600080fd5b6000600560006101000a81548160ff0219169083151502179055507f6249a5c797c884cbf33e63e8cfc250816032db24e22051de68a388315e64afc660405160405180910390a150565b6020604051908101604052806000815250905600a165627a7a723058206500ede71ec9cc54dae49f9a38711bb9cab89e0dbf77a37156c2d3a7b0191f480029
Swarm Source
bzzr://6500ede71ec9cc54dae49f9a38711bb9cab89e0dbf77a37156c2d3a7b0191f48
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.