Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 75 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Owner | 10904108 | 2008 days ago | IN | 0 ETH | 0.00309312 | ||||
| Batch Relay | 10765098 | 2030 days ago | IN | 0 ETH | 0.00830502 | ||||
| Create Escrow | 10765078 | 2030 days ago | IN | 0 ETH | 0.00784519 | ||||
| Batch Relay | 10639696 | 2049 days ago | IN | 0 ETH | 0.01074285 | ||||
| Create Escrow | 10639687 | 2049 days ago | IN | 0 ETH | 0.0098925 | ||||
| Batch Relay | 10589184 | 2057 days ago | IN | 0 ETH | 0.00322659 | ||||
| Create Escrow | 10589149 | 2057 days ago | IN | 0 ETH | 0.00369252 | ||||
| Batch Relay | 10589132 | 2057 days ago | IN | 0 ETH | 0.00408159 | ||||
| Create Escrow | 10589082 | 2057 days ago | IN | 0 ETH | 0.00377165 | ||||
| Batch Relay | 10569559 | 2060 days ago | IN | 0 ETH | 0.00283035 | ||||
| Create Escrow | 10569542 | 2060 days ago | IN | 0 ETH | 0.0032963 | ||||
| Batch Relay | 10569426 | 2060 days ago | IN | 0 ETH | 0.00311404 | ||||
| Create Escrow | 10569394 | 2060 days ago | IN | 0 ETH | 0.00371793 | ||||
| Batch Relay | 10569331 | 2060 days ago | IN | 0 ETH | 0.0041532 | ||||
| Create Escrow | 10569308 | 2060 days ago | IN | 0 ETH | 0.00395628 | ||||
| Batch Relay | 10557251 | 2062 days ago | IN | 0 ETH | 0.00254677 | ||||
| Create Escrow | 10557237 | 2062 days ago | IN | 0 ETH | 0.00296721 | ||||
| Batch Relay | 10557149 | 2062 days ago | IN | 0 ETH | 0.00254731 | ||||
| Create Escrow | 10557122 | 2062 days ago | IN | 0 ETH | 0.00296721 | ||||
| Batch Relay | 10557076 | 2062 days ago | IN | 0 ETH | 0.00254731 | ||||
| Create Escrow | 10557066 | 2062 days ago | IN | 0 ETH | 0.00296721 | ||||
| Batch Relay | 10557035 | 2062 days ago | IN | 0 ETH | 0.00254731 | ||||
| Create Escrow | 10557009 | 2062 days ago | IN | 0 ETH | 0.00296721 | ||||
| Batch Relay | 10556714 | 2062 days ago | IN | 0 ETH | 0.00346577 | ||||
| Create Escrow | 10556689 | 2062 days ago | IN | 0 ETH | 0.0032969 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
LocalCoinSwapDaiEscrow
Compiler Version
v0.5.2+commit.1df8f40c
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-01-28
*/
/**
* Tether trading contract
*/
pragma solidity ^0.5.0;
contract DaiERC20 {
function transfer(address _to, uint _value) public returns (bool success);
function transferFrom(address _from, address _to, uint _value) public returns (bool success);
function approve(address _spender, uint _value) public returns (bool success);
}
contract LocalCoinSwapDaiEscrow {
/***********************
+ Global settings +
***********************/
address public arbitrator;
address public owner;
address public relayer;
uint256 public feesAvailableForWithdraw;
// The contract address of the ERC20 token handled by this smart contract, can only be set once
DaiERC20 public tokenContract;
// The minimum value under which we will not accept the creation of escrow
uint16 public minimumValue = 1;
uint32 public requestCancellationMinimumTime = 2 hours;
/***********************
+ Escrow Structure +
***********************/
struct Escrow {
// Set so we know the trade has already been created
bool exists;
uint32 sellerCanCancelAfter;
// The total cost of gas spent by relaying parties. This amount will be
// emmitted to us once the escrow is finished for accounting purposes.
uint128 totalGasFeesSpentByRelayer;
}
// Mapping of active trades. Key is a hash of the trade data
mapping (bytes32 => Escrow) public escrows;
/***********************
+ Instruction types +
***********************/
// Called when the buyer marks payment as sent. Locks funds in escrow
uint8 constant INSTRUCTION_SELLER_CANNOT_CANCEL = 0x01;
// Buyer cancelling
uint8 constant INSTRUCTION_BUYER_CANCEL = 0x02;
// Seller cancelling
uint8 constant INSTRUCTION_SELLER_CANCEL = 0x03;
// Seller requesting to cancel. Begins a window for buyer to object
uint8 constant INSTRUCTION_SELLER_REQUEST_CANCEL = 0x04;
// Seller releasing funds to the buyer
uint8 constant INSTRUCTION_RELEASE = 0x05;
// Either party permitting the arbitrator to resolve a dispute
uint8 constant INSTRUCTION_RESOLVE = 0x06;
/***********************
+ Events +
***********************/
event Created(bytes32 _tradeHash);
event SellerCancelDisabled(bytes32 _tradeHash);
event SellerRequestedCancel(bytes32 _tradeHash);
event CancelledBySeller(bytes32 _tradeHash, uint128 totalGasFeesSpentByRelayer);
event CancelledByBuyer(bytes32 _tradeHash, uint128 totalGasFeesSpentByRelayer);
event Released(bytes32 _tradeHash, uint128 totalGasFeesSpentByRelayer);
event DisputeResolved(bytes32 _tradeHash, uint128 totalGasFeesSpentByRelayer);
/***********************
+ Constructor +
***********************/
constructor(address initialAddress, DaiERC20 daiAddress) public {
owner = initialAddress;
arbitrator = initialAddress;
relayer = initialAddress;
tokenContract = daiAddress;
}
/***********************
+ Handle Trades +
***********************/
/// @notice Create and fund a new escrow.
/// @param _tradeID The unique ID of the trade, generated by localcoinswap.com
/// @param _seller The selling party
/// @param _buyer The buying party
/// @param _value The amount of the escrow, exclusive of the fee
/// @param _fee localcoinswap's commission in 1/10000ths
/// @param _paymentWindowInSeconds The time in seconds from escrow creation that the seller can cancel after
/// @param _expiry This transaction must be created before this time
/// @param _v Signature "v" component
/// @param _r Signature "r" component
/// @param _s Signature "s" component
function createEscrow(
/**
* Create a new escrow and add it to `escrows`.
* _tradeHash is created by hashing _tradeID, _seller, _buyer, _value and _fee variables. These variables must be supplied on future contract calls.
* v, r and s is the signature data supplied from the api. The sig is keccak256(_tradeHash, _paymentWindowInSeconds, _expiry).
*/
bytes16 _tradeID, // The unique ID of the trade, generated by us
address _seller, // The selling party of the trade
address _buyer, // The buying party of the trade
uint256 _value, // The token amount being held in escrow
uint16 _fee, // Our fee in 1/10000ths of a token
uint32 _paymentWindowInSeconds, // The time in seconds from contract creation that the buyer has to mark as paid
uint32 _expiry, // Provided by us. This transaction must be created before this time.
uint8 _v, // Signature value
bytes32 _r, // Signature value
bytes32 _s // Signature value
) external payable {
bytes32 _tradeHash = keccak256(abi.encodePacked(_tradeID, _seller, _buyer, _value, _fee));
require(!escrows[_tradeHash].exists, "Trade already exists in escrow mapping");
bytes32 _invitationHash = keccak256(abi.encodePacked(
_tradeHash,
_paymentWindowInSeconds,
_expiry
));
require(_value > minimumValue, "Escrow value must be greater than minimum value"); // Check escrow value is greater than minimum value
require(block.timestamp < _expiry, "Trade has already expired"); // solium-disable-line
require(recoverAddress(_invitationHash, _v, _r, _s) == relayer, "Transaction signature did not come from relayer");
tokenContract.transferFrom(msg.sender, address(this), _value);
uint32 _sellerCanCancelAfter = _paymentWindowInSeconds == 0 ? 1 : uint32(block.timestamp) + _paymentWindowInSeconds; // solium-disable-line
escrows[_tradeHash] = Escrow(true, _sellerCanCancelAfter, 0);
emit Created(_tradeHash);
}
/// @notice Release ether in escrow to the buyer. Direct call option.
/// @param _tradeID Escrow "tradeID" parameter
/// @param _seller Escrow "seller" parameter
/// @param _buyer Escrow "buyer" parameter
/// @param _value Escrow "value" parameter
/// @param _fee Escrow "fee parameter
/// @return bool
function release(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee
) external returns (bool){
require(msg.sender == _seller, "Must be seller");
return doRelease(_tradeID, _seller, _buyer, _value, _fee, 0);
}
uint16 constant GAS_doRelease = 46588;
/// @notice Release escrow to the buyer. This completes it and removes it from the mapping.
/// @param _tradeID Escrow "tradeID" parameter
/// @param _seller Escrow "seller" parameter
/// @param _buyer Escrow "buyer" parameter
/// @param _value Escrow "value" parameter
/// @param _fee Escrow "fee parameter
/// @param _additionalGas Additional gas to be deducted after this operation
/// @return bool
function doRelease(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee,
uint128 _additionalGas
) private returns (bool) {
Escrow memory _escrow;
bytes32 _tradeHash;
(_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee);
if (!_escrow.exists) return false;
uint128 _gasFees = _escrow.totalGasFeesSpentByRelayer + (msg.sender == relayer
? (GAS_doRelease + _additionalGas ) * uint128(tx.gasprice)
: 0
);
delete escrows[_tradeHash];
emit Released(_tradeHash, _gasFees);
transferMinusFees(_buyer, _value, _fee);
return true;
}
uint16 constant GAS_doResolveDispute = 36100;
/// @notice Called by the arbitrator to resolve a dispute. Requires a signature from either party.
/// @param _tradeID Escrow "tradeID" parameter
/// @param _seller Escrow "seller" parameter
/// @param _buyer Escrow "buyer" parameter
/// @param _value Escrow "value" parameter
/// @param _fee Escrow "fee parameter
/// @param _v Signature "v" component
/// @param _r Signature "r" component
/// @param _s Signature "s" component
/// @param _buyerPercent What % should be distributed to the buyer (this is usually 0 or 100)
function resolveDispute(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee,
uint8 _v,
bytes32 _r,
bytes32 _s,
uint8 _buyerPercent
) external onlyArbitrator {
address _signature = recoverAddress(keccak256(abi.encodePacked(
_tradeID,
INSTRUCTION_RESOLVE
)), _v, _r, _s);
require(_signature == _buyer || _signature == _seller, "Must be buyer or seller");
Escrow memory _escrow;
bytes32 _tradeHash;
(_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee);
require(_escrow.exists, "Escrow does not exist");
require(_buyerPercent <= 100, "_buyerPercent must be 100 or lower");
_escrow.totalGasFeesSpentByRelayer += (GAS_doResolveDispute * uint128(tx.gasprice));
delete escrows[_tradeHash];
emit DisputeResolved(_tradeHash, _escrow.totalGasFeesSpentByRelayer);
if (_buyerPercent > 0) {
// If dispute goes to buyer take the fee
uint256 _totalFees = (_value * _fee / 10000);
// Prevent underflow
require(_value * _buyerPercent / 100 - _totalFees <= _value, "Overflow error");
feesAvailableForWithdraw += _totalFees;
tokenContract.transfer(_buyer, _value * _buyerPercent / 100 - _totalFees);
}
if (_buyerPercent < 100) {
tokenContract.transfer(_seller, _value * (100 - _buyerPercent) / 100);
}
}
/// @notice Disable the seller from cancelling (i.e. "mark as paid"). Direct call option.
/// @param _tradeID Escrow "tradeID" parameter
/// @param _seller Escrow "seller" parameter
/// @param _buyer Escrow "buyer" parameter
/// @param _value Escrow "value" parameter
/// @param _fee Escrow "fee parameter
/// @return bool
function disableSellerCancel(
bytes16 _tradeID,
address _seller,
address _buyer,
uint256 _value,
uint16 _fee
) external returns (bool) {
require(msg.sender == _buyer, "Must be buyer");
return doDisableSellerCancel(_tradeID, _seller, _buyer, _value, _fee, 0);
}
/// @notice Cancel the escrow as a buyer. Direct call option.
/// @param _tradeID Escrow "tradeID" parameter
/// @param _seller Escrow "seller" parameter
/// @param _buyer Escrow "buyer" parameter
/// @param _value Escrow "value" parameter
/// @param _fee Escrow "fee parameter
/// @return bool
function buyerCancel(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee
) external returns (bool) {
require(msg.sender == _buyer, "Must be buyer");
return doBuyerCancel(_tradeID, _seller, _buyer, _value, _fee, 0);
}
/// @notice Request to cancel as a seller. Direct call option.
/// @param _tradeID Escrow "tradeID" parameter
/// @param _seller Escrow "seller" parameter
/// @param _buyer Escrow "buyer" parameter
/// @param _value Escrow "value" parameter
/// @param _fee Escrow "fee parameter
/// @return bool
function sellerRequestCancel(
bytes16 _tradeID,
address _seller,
address _buyer,
uint256 _value,
uint16 _fee
) external returns (bool) {
require(msg.sender == _seller, "Must be seller");
return doSellerRequestCancel(_tradeID, _seller, _buyer, _value, _fee, 0);
}
/// @notice Increase the amount of gas used during the trade, tracking is for accounting purposes
/// @param _tradeHash Trade hash
/// @param _gas Gas cost
function increaseGasSpent(bytes32 _tradeHash, uint128 _gas) private {
escrows[_tradeHash].totalGasFeesSpentByRelayer += _gas * uint128(tx.gasprice);
}
/// @notice Transfer the value of an escrow, minus the fees. We do not explicity handle gas costs of relayer
/// @param _to Recipient address
/// @param _value Value of the transfer
/// @param _fee Commission in 1/10000ths
function transferMinusFees(
address payable _to,
uint256 _value,
uint16 _fee
) private {
uint256 _totalFees = (_value * _fee / 10000);
// Prevent underflow
if(_value - _totalFees > _value) {
return;
}
// Add fees to the pot for localcoinswap to withdraw
feesAvailableForWithdraw += _totalFees;
tokenContract.transfer(_to, _value - _totalFees);
}
uint16 constant GAS_doDisableSellerCancel = 28944;
/// @notice Prevents the seller from cancelling an escrow. Used to "mark as paid" by the buyer.
/// @param _tradeID Escrow "tradeID" parameter
/// @param _seller Escrow "seller" parameter
/// @param _buyer Escrow "buyer" parameter
/// @param _value Escrow "value" parameter
/// @param _fee Escrow "fee parameter
/// @param _additionalGas Additional gas to be deducted after this operation
/// @return bool
function doDisableSellerCancel(
bytes16 _tradeID,
address _seller,
address _buyer,
uint256 _value,
uint16 _fee,
uint128 _additionalGas
) private returns (bool) {
Escrow memory _escrow;
bytes32 _tradeHash;
(_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee);
if (!_escrow.exists) return false;
if(_escrow.sellerCanCancelAfter == 0) return false;
escrows[_tradeHash].sellerCanCancelAfter = 0;
emit SellerCancelDisabled(_tradeHash);
if (msg.sender == relayer) {
increaseGasSpent(_tradeHash, GAS_doDisableSellerCancel + _additionalGas);
}
return true;
}
uint16 constant GAS_doBuyerCancel = 46255;
/// @notice Cancels the trade and returns the ether to the seller. Can only be called the buyer.
/// @param _tradeID Escrow "tradeID" parameter
/// @param _seller Escrow "seller" parameter
/// @param _buyer Escrow "buyer" parameter
/// @param _value Escrow "value" parameter
/// @param _fee Escrow "fee parameter
/// @param _additionalGas Additional gas to be deducted after this operation
/// @return bool
function doBuyerCancel(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee,
uint128 _additionalGas
) private returns (bool) {
Escrow memory _escrow;
bytes32 _tradeHash;
(_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee);
require(_escrow.exists, "Escrow does not exist");
if (!_escrow.exists) {
return false;
}
uint128 _gasFees = _escrow.totalGasFeesSpentByRelayer + (msg.sender == relayer
? (GAS_doBuyerCancel + _additionalGas ) * uint128(tx.gasprice)
: 0
);
delete escrows[_tradeHash];
emit CancelledByBuyer(_tradeHash, _gasFees);
transferMinusFees(_seller, _value, 0);
return true;
}
uint16 constant GAS_doSellerCancel = 46815;
/// @notice Returns the ether in escrow to the seller. Called by the seller. Sometimes unavailable.
/// @param _tradeID Escrow "tradeID" parameter
/// @param _seller Escrow "seller" parameter
/// @param _buyer Escrow "buyer" parameter
/// @param _value Escrow "value" parameter
/// @param _fee Escrow "fee parameter
/// @param _additionalGas Additional gas to be deducted after this operation
/// @return bool
function doSellerCancel(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee,
uint128 _additionalGas
) private returns (bool) {
Escrow memory _escrow;
bytes32 _tradeHash;
(_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee);
if (!_escrow.exists) {
return false;
}
if(_escrow.sellerCanCancelAfter <= 1 || _escrow.sellerCanCancelAfter > block.timestamp) { // solium-disable-line
return false;
}
uint128 _gasFees = _escrow.totalGasFeesSpentByRelayer + (msg.sender == relayer
? (GAS_doSellerCancel + _additionalGas ) * uint128(tx.gasprice)
: 0
);
delete escrows[_tradeHash];
emit CancelledBySeller(_tradeHash, _gasFees);
transferMinusFees(_seller, _value, 0);
return true;
}
uint16 constant GAS_doSellerRequestCancel = 29507;
/// @notice Request to cancel. Used if the buyer is unresponsive. Begins a countdown timer.
/// @param _tradeID Escrow "tradeID" parameter
/// @param _seller Escrow "seller" parameter
/// @param _buyer Escrow "buyer" parameter
/// @param _value Escrow "value" parameter
/// @param _fee Escrow "fee parameter
/// @param _additionalGas Additional gas to be deducted after this operation
/// @return bool
function doSellerRequestCancel(
bytes16 _tradeID,
address _seller,
address _buyer,
uint256 _value,
uint16 _fee,
uint128 _additionalGas
) private returns (bool) {
// Called on unlimited payment window trades where the buyer is not responding
Escrow memory _escrow;
bytes32 _tradeHash;
(_escrow, _tradeHash) = getEscrowAndHash(_tradeID, _seller, _buyer, _value, _fee);
if (!_escrow.exists) {
return false;
}
if(_escrow.sellerCanCancelAfter != 1) {
return false;
}
escrows[_tradeHash].sellerCanCancelAfter = uint32(block.timestamp) // solium-disable-line
+ requestCancellationMinimumTime;
emit SellerRequestedCancel(_tradeHash);
if (msg.sender == relayer) {
increaseGasSpent(_tradeHash, GAS_doSellerRequestCancel + _additionalGas);
}
return true;
}
/***********************
+ Relays +
***********************/
/// @notice Relay multiple signed instructions from parties of escrows.
/// @param _tradeID List of _tradeID values
/// @param _seller List of _seller values
/// @param _buyer List of _buyer values
/// @param _value List of _value values
/// @param _fee List of _fee values
/// @param _maximumGasPrice List of _maximumGasPrice values
/// @param _v List of signature "v" components
/// @param _r List of signature "r" components
/// @param _s List of signature "s" components
/// @param _instructionByte List of _instructionByte values
/// @return bool List of results
uint16 constant GAS_batchRelayBaseCost = 28500;
function batchRelay(
bytes16[] memory _tradeID,
address payable[] memory _seller,
address payable[] memory _buyer,
uint256[] memory _value,
uint16[] memory _fee,
uint128[] memory _maximumGasPrice,
uint8[] memory _v,
bytes32[] memory _r,
bytes32[] memory _s,
uint8[] memory _instructionByte
) public returns (bool[] memory) {
bool[] memory _results = new bool[](_tradeID.length);
uint128 _additionalGas = uint128(msg.sender == relayer ? GAS_batchRelayBaseCost / _tradeID.length : 0);
for (uint8 i = 0; i < _tradeID.length; i++) {
_results[i] = relay(
_tradeID[i],
_seller[i],
_buyer[i],
_value[i],
_fee[i],
_maximumGasPrice[i],
_v[i],
_r[i],
_s[i],
_instructionByte[i],
_additionalGas
);
}
return _results;
}
/// @notice Relay a signed instruction from a party of an escrow.
/// @param _tradeID Escrow "tradeID" parameter
/// @param _seller Escrow "seller" parameter
/// @param _buyer Escrow "buyer" parameter
/// @param _value Escrow "value" parameter
/// @param _fee Escrow "fee parameter
/// @param _maximumGasPrice Maximum gas price permitted for the relayer (set by the instructor)
/// @param _v Signature "v" component
/// @param _r Signature "r" component
/// @param _s Signature "s" component
/// @param _additionalGas Additional gas to be deducted after this operation
/// @return bool
function relay(
bytes16 _tradeID,
address payable _seller,
address payable _buyer,
uint256 _value,
uint16 _fee,
uint128 _maximumGasPrice,
uint8 _v,
bytes32 _r,
bytes32 _s,
uint8 _instructionByte,
uint128 _additionalGas
) private returns (bool) {
address _relayedSender = getRelayedSender(
_tradeID,
_instructionByte,
_maximumGasPrice,
_v,
_r,
_s
);
if (_relayedSender == _buyer) {
// Buyer's instructions:
if (_instructionByte == INSTRUCTION_SELLER_CANNOT_CANCEL) {
// Disable seller from cancelling
return doDisableSellerCancel(_tradeID, _seller, _buyer, _value, _fee, _additionalGas);
} else if (_instructionByte == INSTRUCTION_BUYER_CANCEL) {
// Cancel
return doBuyerCancel(_tradeID, _seller, _buyer, _value, _fee, _additionalGas);
}
} else if (_relayedSender == _seller) {
// Seller's instructions:
if (_instructionByte == INSTRUCTION_RELEASE) {
// Release
return doRelease(_tradeID, _seller, _buyer, _value, _fee, _additionalGas);
} else if (_instructionByte == INSTRUCTION_SELLER_CANCEL) {
// Cancel
return doSellerCancel(_tradeID, _seller, _buyer, _value, _fee, _additionalGas);
} else if (_instructionByte == INSTRUCTION_SELLER_REQUEST_CANCEL){
// Request to cancel
return doSellerRequestCancel(_tradeID, _seller, _buyer, _value, _fee, _additionalGas);
}
} else {
require(msg.sender == _seller, "Unrecognised party");
return false;
}
}
/***********************
+ Setters +
***********************/
/// @notice Set the arbitrator to a new address. Only the owner can call this.
/// @param _newArbitrator Address of the replacement arbitrator
function setArbitrator(address _newArbitrator) external onlyOwner {
/**
* Set the arbitrator to a new address. Only the owner can call this.
* @param address _newArbitrator
*/
arbitrator = _newArbitrator;
}
/// @notice Change the owner to a new address. Only the owner can call this.
/// @param _newOwner Address of the replacement owner
function setOwner(address _newOwner) external onlyOwner {
/**
* Change the owner to a new address. Only the owner can call this.
* @param address _newOwner
*/
owner = _newOwner;
}
/// @notice Change the relayer to a new address. Only the owner can call this.
/// @param _newRelayer Address of the replacement relayer
function setRelayer(address _newRelayer) external onlyOwner {
/**
* Change the relayer to a new address. Only the owner can call this.
* @param address _newRelayer
*/
relayer = _newRelayer;
}
/// @notice Change the minimum escrow value. Only the owner can call this.
/// @param _newMinimumValue uint16 of the new minimum value
function setMinimumValue(uint16 _newMinimumValue) external onlyOwner {
/**
* Change the value to a new minimum value. Only the owner can call this.
* @param uint16 _newMinimumValue
*/
minimumValue = _newMinimumValue;
}
/// @notice Change the requestCancellationMinimumTime. Only the owner can call this.
/// @param _newRequestCancellationMinimumTime Replacement
function setRequestCancellationMinimumTime(uint32 _newRequestCancellationMinimumTime) external onlyOwner {
/**
* Change the requestCancellationMinimumTime. Only the owner can call this.
* @param uint32 _newRequestCancellationMinimumTime
*/
requestCancellationMinimumTime = _newRequestCancellationMinimumTime;
}
/***********************
+ Helper Functions +
***********************/
/// @notice Withdraw fees collected by the contract. Only the owner can call this.
/// @param _to Address to withdraw fees in to
/// @param _amount Amount to withdraw
function withdrawFees(address payable _to, uint256 _amount) external onlyOwner {
// This check also prevents underflow
require(_amount <= feesAvailableForWithdraw, "Amount is higher than amount available");
feesAvailableForWithdraw -= _amount;
tokenContract.transfer(_to, _amount);
}
/// @notice Hashes the values and returns the matching escrow object and trade hash.
/// @dev Returns an empty escrow struct and 0 _tradeHash if not found.
/// @param _tradeID Escrow "tradeID" parameter
/// @param _seller Escrow "seller" parameter
/// @param _buyer Escrow "buyer" parameter
/// @param _value Escrow "value" parameter
/// @param _fee Escrow "fee parameter
/// @return Escrow
function getEscrowAndHash(
/**
* Hashes the values and returns the matching escrow object and trade hash.
* Returns an empty escrow struct and 0 _tradeHash if not found
*/
bytes16 _tradeID,
address _seller,
address _buyer,
uint256 _value,
uint16 _fee
) private view returns (Escrow storage, bytes32) {
bytes32 _tradeHash = keccak256(abi.encodePacked(_tradeID, _seller, _buyer, _value, _fee));
return (escrows[_tradeHash], _tradeHash);
}
/// @notice Returns an empty escrow struct and 0 _tradeHash if not found.
/// @param _h Data to be hashed
/// @param _v Signature "v" component
/// @param _r Signature "r" component
/// @param _s Signature "s" component
/// @return address
function recoverAddress(
bytes32 _h,
uint8 _v,
bytes32 _r,
bytes32 _s
) private pure returns (address) {
bytes memory _prefix = "\x19Ethereum Signed Message:\n32";
bytes32 _prefixedHash = keccak256(abi.encodePacked(_prefix, _h));
return ecrecover(_prefixedHash, _v, _r, _s);
}
/// @notice Get the sender of the signed instruction.
/// @param _tradeID Identifier of the trade
/// @param _instructionByte Identifier of the instruction
/// @param _maximumGasPrice Maximum gas price permitted by the sender
/// @param _v Signature "v" component
/// @param _r Signature "r" component
/// @param _s Signature "s" component
/// @return address
function getRelayedSender(
bytes16 _tradeID, // The unique ID of the trade, generated by us
uint8 _instructionByte, // The desired action of the user, matching an ACTION_* constant
uint128 _maximumGasPrice, // The maximum gas price the user is willing to pay
uint8 _v, // Signature value
bytes32 _r, // Signature value
bytes32 _s // Signature value
) private view returns (address) {
bytes32 _hash = keccak256(abi.encodePacked(_tradeID, _instructionByte, _maximumGasPrice));
require(tx.gasprice < _maximumGasPrice, "Gas price is higher than maximum gas price");
return recoverAddress(_hash, _v, _r, _s);
}
/// @notice Send ERC20 tokens away. This function allows the owner to withdraw stuck ERC20 tokens.
/// @param _tokenContract Token contract
/// @param _transferTo Recipient
/// @param _value Value
function transferToken(DaiERC20 _tokenContract, address _transferTo, uint256 _value) external onlyOwner {
/**
* If ERC20 tokens are sent to this contract, they will be trapped forever.
* This function is way for us to withdraw them so we can get them back to their rightful owner
*/
_tokenContract.transfer(_transferTo, _value);
}
/// @notice Send ERC20 tokens away. This function allows the owner to withdraw stuck ERC20 tokens.
/// @param _tokenContract Token contract
/// @param _transferTo Recipient
/// @param _transferFrom Sender
/// @param _value Value
function transferTokenFrom(DaiERC20 _tokenContract, address _transferTo, address _transferFrom, uint256 _value) external onlyOwner {
/**
* If ERC20 tokens are sent to this contract, they will be trapped forever.
* This function is way for us to withdraw them so we can get them back to their rightful owner
*/
_tokenContract.transferFrom(_transferTo, _transferFrom, _value);
}
/// @notice Send ERC20 tokens away. This function allows the owner to withdraw stuck ERC20 tokens.
/// @param _tokenContract Token contract
/// @param _spender Spender address
/// @param _value Value
function approveToken(DaiERC20 _tokenContract, address _spender, uint256 _value) external onlyOwner {
/**
* If ERC20 tokens are sent to this contract, they will be trapped forever.
* This function is way for us to withdraw them so we can get them back to their rightful owner
*/
_tokenContract.approve(_spender, _value);
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the current owner can change the owner");
_;
}
modifier onlyArbitrator() {
require(msg.sender == arbitrator, "Only the current owner can change the arbitrator");
_;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"name":"_newRequestCancellationMinimumTime","type":"uint32"}],"name":"setRequestCancellationMinimumTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newMinimumValue","type":"uint16"}],"name":"setMinimumValue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tradeID","type":"bytes16"},{"name":"_seller","type":"address"},{"name":"_buyer","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint16"},{"name":"_v","type":"uint8"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_buyerPercent","type":"uint8"}],"name":"resolveDispute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tradeID","type":"bytes16"},{"name":"_seller","type":"address"},{"name":"_buyer","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint16"}],"name":"buyerCancel","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"escrows","outputs":[{"name":"exists","type":"bool"},{"name":"sellerCanCancelAfter","type":"uint32"},{"name":"totalGasFeesSpentByRelayer","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"requestCancellationMinimumTime","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tradeID","type":"bytes16"},{"name":"_seller","type":"address"},{"name":"_buyer","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint16"}],"name":"disableSellerCancel","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newRelayer","type":"address"}],"name":"setRelayer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tradeID","type":"bytes16"},{"name":"_seller","type":"address"},{"name":"_buyer","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint16"}],"name":"sellerRequestCancel","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"arbitrator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"relayer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minimumValue","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tradeID","type":"bytes16[]"},{"name":"_seller","type":"address[]"},{"name":"_buyer","type":"address[]"},{"name":"_value","type":"uint256[]"},{"name":"_fee","type":"uint16[]"},{"name":"_maximumGasPrice","type":"uint128[]"},{"name":"_v","type":"uint8[]"},{"name":"_r","type":"bytes32[]"},{"name":"_s","type":"bytes32[]"},{"name":"_instructionByte","type":"uint8[]"}],"name":"batchRelay","outputs":[{"name":"","type":"bool[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newArbitrator","type":"address"}],"name":"setArbitrator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feesAvailableForWithdraw","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"},{"name":"_transferTo","type":"address"},{"name":"_transferFrom","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferTokenFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tradeID","type":"bytes16"},{"name":"_seller","type":"address"},{"name":"_buyer","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint16"}],"name":"release","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tradeID","type":"bytes16"},{"name":"_seller","type":"address"},{"name":"_buyer","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint16"},{"name":"_paymentWindowInSeconds","type":"uint32"},{"name":"_expiry","type":"uint32"},{"name":"_v","type":"uint8"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"}],"name":"createEscrow","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"},{"name":"_transferTo","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"initialAddress","type":"address"},{"name":"daiAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tradeHash","type":"bytes32"}],"name":"Created","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tradeHash","type":"bytes32"}],"name":"SellerCancelDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tradeHash","type":"bytes32"}],"name":"SellerRequestedCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tradeHash","type":"bytes32"},{"indexed":false,"name":"totalGasFeesSpentByRelayer","type":"uint128"}],"name":"CancelledBySeller","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tradeHash","type":"bytes32"},{"indexed":false,"name":"totalGasFeesSpentByRelayer","type":"uint128"}],"name":"CancelledByBuyer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tradeHash","type":"bytes32"},{"indexed":false,"name":"totalGasFeesSpentByRelayer","type":"uint128"}],"name":"Released","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tradeHash","type":"bytes32"},{"indexed":false,"name":"totalGasFeesSpentByRelayer","type":"uint128"}],"name":"DisputeResolved","type":"event"}]Contract Creation Code
6080604052600480547401000000000000000000000000000000000000000060a060020a61ffff02199091161760b060020a63ffffffff021916771c200000000000000000000000000000000000000000000017905534801561006157600080fd5b50604051604080612d038339810180604052604081101561008157600080fd5b50805160209091015160018054600160a060020a03938416600160a060020a031991821681179092556000805482168317905560028054821690921790915560048054939092169216919091179055612c24806100df6000396000f3fe60806040526004361061014f5760003560e060020a900480638406c079116100ba578063da3e339711610073578063da3e339714610af7578063de5785d514610b3a578063e599490514610b61578063e9600f1214610baa578063f1e03d6714610c08578063f5537ede14610c865761014f565b80638406c07914610490578063849aaf8e146104a55780638da5cb5b146104d15780638eb4e0ad146104e6578063ad3b1b4714610a8b578063b0eefabe14610ac45761014f565b806355a373d61161010c57806355a373d61461032d57806357938b2a1461035e5780635c810f091461038c5780636548e9bc146103ea5780636b4078371461041d5780636cc6cde11461047b5761014f565b806305b64993146101545780630d98ed3b1461018657806313af4035146101b457806324943c7d146101e75780632cc9636c146102635780632d83549c146102d5575b600080fd5b34801561016057600080fd5b506101846004803603602081101561017757600080fd5b503563ffffffff16610cc9565b005b34801561019257600080fd5b50610184600480360360208110156101a957600080fd5b503561ffff16610d61565b3480156101c057600080fd5b50610184600480360360208110156101d757600080fd5b5035600160a060020a0316610df1565b3480156101f357600080fd5b50610184600480360361012081101561020b57600080fd5b506001608060020a031981351690600160a060020a03602082013581169160408101359091169060608101359061ffff6080820135169060ff60a082013581169160c08101359160e082013591610100013516610e6c565b34801561026f57600080fd5b506102c1600480360360a081101561028657600080fd5b5080356001608060020a031916906020810135600160a060020a03908116916040810135909116906060810135906080013561ffff166112f2565b604080519115158252519081900360200190f35b3480156102e157600080fd5b506102ff600480360360208110156102f857600080fd5b503561136d565b60408051931515845263ffffffff90921660208401526001608060020a031682820152519081900360600190f35b34801561033957600080fd5b506103426113a2565b60408051600160a060020a039092168252519081900360200190f35b34801561036a57600080fd5b506103736113b1565b6040805163ffffffff9092168252519081900360200190f35b34801561039857600080fd5b506102c1600480360360a08110156103af57600080fd5b5080356001608060020a031916906020810135600160a060020a03908116916040810135909116906060810135906080013561ffff166113d7565b3480156103f657600080fd5b506101846004803603602081101561040d57600080fd5b5035600160a060020a0316611448565b34801561042957600080fd5b506102c1600480360360a081101561044057600080fd5b5080356001608060020a031916906020810135600160a060020a03908116916040810135909116906060810135906080013561ffff166114c3565b34801561048757600080fd5b50610342611534565b34801561049c57600080fd5b50610342611543565b3480156104b157600080fd5b506104ba611552565b6040805161ffff9092168252519081900360200190f35b3480156104dd57600080fd5b50610342611574565b3480156104f257600080fd5b50610a3b600480360361014081101561050a57600080fd5b81019060208101813564010000000081111561052557600080fd5b82018360208201111561053757600080fd5b8035906020019184602083028401116401000000008311171561055957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156105a957600080fd5b8201836020820111156105bb57600080fd5b803590602001918460208302840111640100000000831117156105dd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561062d57600080fd5b82018360208201111561063f57600080fd5b8035906020019184602083028401116401000000008311171561066157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156106b157600080fd5b8201836020820111156106c357600080fd5b803590602001918460208302840111640100000000831117156106e557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561073557600080fd5b82018360208201111561074757600080fd5b8035906020019184602083028401116401000000008311171561076957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156107b957600080fd5b8201836020820111156107cb57600080fd5b803590602001918460208302840111640100000000831117156107ed57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561083d57600080fd5b82018360208201111561084f57600080fd5b8035906020019184602083028401116401000000008311171561087157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156108c157600080fd5b8201836020820111156108d357600080fd5b803590602001918460208302840111640100000000831117156108f557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561094557600080fd5b82018360208201111561095757600080fd5b8035906020019184602083028401116401000000008311171561097957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156109c957600080fd5b8201836020820111156109db57600080fd5b803590602001918460208302840111640100000000831117156109fd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611583945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610a77578181015183820152602001610a5f565b505050509050019250505060405180910390f35b348015610a9757600080fd5b5061018460048036036040811015610aae57600080fd5b50600160a060020a038135169060200135611743565b348015610ad057600080fd5b5061018460048036036020811015610ae757600080fd5b5035600160a060020a031661187f565b348015610b0357600080fd5b5061018460048036036060811015610b1a57600080fd5b50600160a060020a038135811691602081013590911690604001356118fa565b348015610b4657600080fd5b50610b4f6119da565b60408051918252519081900360200190f35b348015610b6d57600080fd5b5061018460048036036080811015610b8457600080fd5b50600160a060020a038135811691602081013582169160408201351690606001356119e0565b348015610bb657600080fd5b506102c1600480360360a0811015610bcd57600080fd5b5080356001608060020a031916906020810135600160a060020a03908116916040810135909116906060810135906080013561ffff16611ad2565b6101846004803603610140811015610c1f57600080fd5b506001608060020a031981351690600160a060020a03602082013581169160408101359091169060608101359061ffff6080820135169063ffffffff60a082013581169160c08101359091169060ff60e08201351690610100810135906101200135611b43565b348015610c9257600080fd5b5061018460048036036060811015610ca957600080fd5b50600160a060020a03813581169160208101359091169060400135611eff565b600154600160a060020a03163314610d155760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b6004805463ffffffff9092167601000000000000000000000000000000000000000000000279ffffffff0000000000000000000000000000000000000000000019909216919091179055565b600154600160a060020a03163314610dad5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b6004805461ffff909216740100000000000000000000000000000000000000000275ffff000000000000000000000000000000000000000019909216919091179055565b600154600160a060020a03163314610e3d5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610eb85760405160e560020a62461bcd028152600401808060200182810382526030815260200180612b496030913960400191505060405180910390fd5b604080516001608060020a03198b166020808301919091527f060000000000000000000000000000000000000000000000000000000000000060308301528251601181840301815260319092019092528051910120600090610f1c90868686611fae565b905087600160a060020a031681600160a060020a03161480610f4f575088600160a060020a031681600160a060020a0316145b1515610fa5576040805160e560020a62461bcd02815260206004820152601760248201527f4d757374206265206275796572206f722073656c6c6572000000000000000000604482015290519081900360640190fd5b610fad612a87565b6000610fbc8c8c8c8c8c6120bd565b60408051606081018252925460ff81161515808552610100820463ffffffff166020860152650100000000009091046001608060020a0316918401919091529193509150611054576040805160e560020a62461bcd02815260206004820152601560248201527f457363726f7720646f6573206e6f742065786973740000000000000000000000604482015290519081900360640190fd5b606460ff8516111561109a5760405160e560020a62461bcd028152600401808060200182810382526022815260200180612b276022913960400191505060405180910390fd5b604082810180513a618d0402016001608060020a03908116825260008481526005602090815290849020805474ffffffffffffffffffffffffffffffffffffffffff191690559151835185815291169181019190915281517f437ec3256bbed400455e142c7ce305c6e705cad2d1ba5a4ebed6a6dd133d93fb929181900390910190a160008460ff16111561123c5761271061ffff89168a0204606460ff86168b02048190038a1015611197576040805160e560020a62461bcd02815260206004820152600e60248201527f4f766572666c6f77206572726f72000000000000000000000000000000000000604482015290519081900360640190fd5b6003805482019055600454600160a060020a031663a9059cbb8c83606460ff8a168f0204036040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561120e57600080fd5b505af1158015611222573d6000803e3d6000fd5b505050506040513d602081101561123857600080fd5b5050505b60648460ff1610156112e457600454600160a060020a031663a9059cbb8c606460ff888203168d02046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156112b757600080fd5b505af11580156112cb573d6000803e3d6000fd5b505050506040513d60208110156112e157600080fd5b50505b505050505050505050505050565b600033600160a060020a03851614611354576040805160e560020a62461bcd02815260206004820152600d60248201527f4d75737420626520627579657200000000000000000000000000000000000000604482015290519081900360640190fd5b61136386868686866000612160565b9695505050505050565b60056020526000908152604090205460ff811690610100810463ffffffff16906501000000000090046001608060020a031683565b600454600160a060020a031681565b600454760100000000000000000000000000000000000000000000900463ffffffff1681565b600033600160a060020a03851614611439576040805160e560020a62461bcd02815260206004820152600d60248201527f4d75737420626520627579657200000000000000000000000000000000000000604482015290519081900360640190fd5b611363868686868660006122de565b600154600160a060020a031633146114945760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600033600160a060020a03861614611525576040805160e560020a62461bcd02815260206004820152600e60248201527f4d7573742062652073656c6c6572000000000000000000000000000000000000604482015290519081900360640190fd5b611363868686868660006123e5565b600054600160a060020a031681565b600254600160a060020a031681565b60045474010000000000000000000000000000000000000000900461ffff1681565b600154600160a060020a031681565b6060808b516040519080825280602002602001820160405280156115b1578160200160208202803883390190505b50600254909150600090600160a060020a031633146115d15760006115e1565b8c51616f548115156115df57fe5b045b905060005b8d518160ff161015611731576117098e8260ff1681518110151561160657fe5b906020019060200201518e8360ff1681518110151561162157fe5b906020019060200201518e8460ff1681518110151561163c57fe5b906020019060200201518e8560ff1681518110151561165757fe5b906020019060200201518e8660ff1681518110151561167257fe5b906020019060200201518e8760ff1681518110151561168d57fe5b906020019060200201518e8860ff168151811015156116a857fe5b906020019060200201518e8960ff168151811015156116c357fe5b906020019060200201518e8a60ff168151811015156116de57fe5b906020019060200201518e8b60ff168151811015156116f957fe5b906020019060200201518c612516565b838260ff1681518110151561171a57fe5b9115156020928302909101909101526001016115e6565b50909c9b505050505050505050505050565b600154600160a060020a0316331461178f5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b6003548111156117d35760405160e560020a62461bcd028152600401808060200182810382526026815260200180612bd36026913960400191505060405180910390fd5b60038054829003905560048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811694820194909452602481018590529051929091169163a9059cbb916044808201926020929091908290030181600087803b15801561184f57600080fd5b505af1158015611863573d6000803e3d6000fd5b505050506040513d602081101561187957600080fd5b50505050565b600154600160a060020a031633146118cb5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a031633146119465760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b82600160a060020a031663095ea7b383836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156119a957600080fd5b505af11580156119bd573d6000803e3d6000fd5b505050506040513d60208110156119d357600080fd5b5050505050565b60035481565b600154600160a060020a03163314611a2c5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152604482018490529151918616916323b872dd916064808201926020929091908290030181600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b505050506040513d6020811015611aca57600080fd5b505050505050565b600033600160a060020a03861614611b34576040805160e560020a62461bcd02815260206004820152600e60248201527f4d7573742062652073656c6c6572000000000000000000000000000000000000604482015290519081900360640190fd5b61136386868686866000612667565b604080516001608060020a03198c166020808301919091526c01000000000000000000000000600160a060020a03808e16820260308501528c16026044830152605882018a90527e0100000000000000000000000000000000000000000000000000000000000061ffff8a160260788301528251605a818403018152607a9092018352815191810191909120600081815260059092529190205460ff1615611c1f5760405160e560020a62461bcd028152600401808060200182810382526026815260200180612ad76026913960400191505060405180910390fd5b60408051602080820184905260e060020a63ffffffff808b168202848601528916026044830152825160288184030181526048909201909252805191012060045461ffff74010000000000000000000000000000000000000000909104168911611cbd5760405160e560020a62461bcd02815260040180806020018281038252602f815260200180612ba4602f913960400191505060405180910390fd5b63ffffffff86164210611d1a576040805160e560020a62461bcd02815260206004820152601960248201527f54726164652068617320616c7265616479206578706972656400000000000000604482015290519081900360640190fd5b600254600160a060020a0316611d3282878787611fae565b600160a060020a031614611d7a5760405160e560020a62461bcd02815260040180806020018281038252602f815260200180612aa8602f913960400191505060405180910390fd5b60048054604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523393810193909352306024840152604483018c905251600160a060020a03909116916323b872dd9160648083019260209291908290030181600087803b158015611dee57600080fd5b505af1158015611e02573d6000803e3d6000fd5b505050506040513d6020811015611e1857600080fd5b506000905063ffffffff881615611e3157874201611e34565b60015b604080516060810182526001815263ffffffff838116602080840191825260008486018181528a82526005835290869020945185549351915160ff199094169015151764ffffffff00191661010091909416029290921774ffffffffffffffffffffffffffffffff00000000001916650100000000006001608060020a039092169190910217909155815186815291519293507f102d25c49d33fcdb8976a3f2744e0785c98d9e43b88364859e6aec4ae82eff5c92918290030190a150505050505050505050505050565b600154600160a060020a03163314611f4b5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156119a957600080fd5b604080518082018252601c8082527f19457468657265756d205369676e6564204d6573736167653a0a33320000000060208084019182529351600094859385938b939092019182918083835b602083106120195780518252601f199092019160209182019101611ffa565b51815160209384036101000a6000190180199092169116179052920193845250604080518085038152848301808352815191840191909120600090915281850180835281905260ff8c166060860152608085018b905260a085018a905290519095506001945060c080850194929350601f198201928290030190855afa1580156120a7573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b604080516001608060020a031996909616602080880191909152600160a060020a039586166c010000000000000000000000009081026030890152949095169093026044860152605885019190915261ffff167e010000000000000000000000000000000000000000000000000000000000000260788401528051808403605a018152607a90930181528251928201929092206000818152600590925291902091565b600061216a612a87565b600061217989898989896120bd565b60408051606081018252925460ff81161515808552610100820463ffffffff166020860152650100000000009091046001608060020a0316918401919091529193509150612211576040805160e560020a62461bcd02815260206004820152601560248201527f457363726f7720646f6573206e6f742065786973740000000000000000000000604482015290519081900360640190fd5b8151151561222457600092505050611363565b600254600090600160a060020a03163314612240576000612248565b61b4af85013a025b60408085015160008581526005602090815290839020805474ffffffffffffffffffffffffffffffffffffffffff1916905582518681526001608060020a03949092019384169082015281519293507fef5d27f6da36198207d0bf4c1db4f2d6e12a27045c53f7e7f2529ec7045a65c0929081900390910190a16122ce89886000612778565b5060019998505050505050505050565b60006122e8612a87565b60006122f789898989896120bd565b60408051606081018252925460ff81161515808552610100820463ffffffff166020860152650100000000009091046001608060020a031691840191909152919350915061234a57600092505050611363565b602082015163ffffffff16151561236657600092505050611363565b600081815260056020908152604091829020805464ffffffff0019169055815183815291517fe95fa7985c7585e90dab2dc46470726468662be06f67d79a31a5012e4bc0edeb9281900390910190a1600254600160a060020a03163314156123d6576123d6816171108601612814565b50600198975050505050505050565b60006123ef612a87565b60006123fe89898989896120bd565b60408051606081018252925460ff81161515808552610100820463ffffffff166020860152650100000000009091046001608060020a031691840191909152919350915061245157600092505050611363565b816020015163ffffffff16600114151561247057600092505050611363565b60045460008281526005602090815260409182902080544263ffffffff7601000000000000000000000000000000000000000000009096048616019094166101000264ffffffff001990941693909317909255805183815290517f43e76a2687c7b12792086e4c776772be26c4d6a7041115f446cbc22ccada08ab929181900390910190a1600254600160a060020a03163314156123d6576123d6816173438601612814565b6000806125278d858a8a8a8a612866565b90508a600160a060020a031681600160a060020a031614156125845760ff8416600114156125655761255d8d8d8d8d8d886122de565b915050612658565b60ff84166002141561257f5761255d8d8d8d8d8d88612160565b612656565b8b600160a060020a031681600160a060020a031614156125ec5760ff8416600514156125b85761255d8d8d8d8d8d88612667565b60ff8416600314156125d25761255d8d8d8d8d8d8861293e565b60ff84166004141561257f5761255d8d8d8d8d8d886123e5565b33600160a060020a038d161461264c576040805160e560020a62461bcd02815260206004820152601260248201527f556e7265636f676e697365642070617274790000000000000000000000000000604482015290519081900360640190fd5b6000915050612658565b505b9b9a5050505050505050505050565b6000612671612a87565b600061268089898989896120bd565b60408051606081018252925460ff81161515808552610100820463ffffffff166020860152650100000000009091046001608060020a03169184019190915291935091506126d357600092505050611363565b600254600090600160a060020a031633146126ef5760006126f7565b61b5fc85013a025b60408085015160008581526005602090815290839020805474ffffffffffffffffffffffffffffffffffffffffff1916905582518681526001608060020a03949092019384169082015281519293507f44306e460694e3f7e04300c4479a6818c0a825e0482fd6d4d0f16b0232e96205929081900390910190a16122ce8888885b61271061ffff8216830204808303831015612793575061280f565b600380548201905560048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038881169482019490945284870360248201529051929091169163a9059cbb916044808201926020929091908290030181600087803b158015611aa057600080fd5b505050565b600091825260056020526040909120805474ffffffffffffffffffffffffffffffff00000000001981163a90930265010000000000918290046001608060020a03908116919091011602919091179055565b604080516001608060020a0319881660208083019190915260ff88167f01000000000000000000000000000000000000000000000000000000000000000260308301526001608060020a0387167001000000000000000000000000000000008102603184015283518084036021018152604190930190935281519101206000913a106129265760405160e560020a62461bcd02815260040180806020018281038252602a815260200180612afd602a913960400191505060405180910390fd5b61293281868686611fae565b98975050505050505050565b6000612948612a87565b600061295789898989896120bd565b60408051606081018252925460ff81161515808552610100820463ffffffff166020860152650100000000009091046001608060020a03169184019190915291935091506129aa57600092505050611363565b6001826020015163ffffffff161115806129cd575042826020015163ffffffff16115b156129dd57600092505050611363565b600254600090600160a060020a031633146129f9576000612a01565b61b6df85013a025b60408085015160008581526005602090815290839020805474ffffffffffffffffffffffffffffffffffffffffff1916905582518681526001608060020a03949092019384169082015281519293507f53a30a836c5a4e5b22cc088ba117d9c12c2ac15a5e862d39f7de4cbf8a7b609c929081900390910190a16122ce89886000612778565b60408051606081018252600080825260208201819052918101919091529056fe5472616e73616374696f6e207369676e617475726520646964206e6f7420636f6d652066726f6d2072656c61796572547261646520616c72656164792065786973747320696e20657363726f77206d617070696e6747617320707269636520697320686967686572207468616e206d6178696d756d206761732070726963655f627579657250657263656e74206d75737420626520313030206f72206c6f7765724f6e6c79207468652063757272656e74206f776e65722063616e206368616e6765207468652061726269747261746f724f6e6c79207468652063757272656e74206f776e65722063616e206368616e676520746865206f776e6572457363726f772076616c7565206d7573742062652067726561746572207468616e206d696e696d756d2076616c7565416d6f756e7420697320686967686572207468616e20616d6f756e7420617661696c61626c65a165627a7a723058204cfa9aefd4ee3472af8423ef60619c6f47f38da678ec9a50f433a2141e86d27c0029000000000000000000000000877cf5f02497607e0b4e4e6aaf6c275648cd5ce50000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Deployed Bytecode
0x60806040526004361061014f5760003560e060020a900480638406c079116100ba578063da3e339711610073578063da3e339714610af7578063de5785d514610b3a578063e599490514610b61578063e9600f1214610baa578063f1e03d6714610c08578063f5537ede14610c865761014f565b80638406c07914610490578063849aaf8e146104a55780638da5cb5b146104d15780638eb4e0ad146104e6578063ad3b1b4714610a8b578063b0eefabe14610ac45761014f565b806355a373d61161010c57806355a373d61461032d57806357938b2a1461035e5780635c810f091461038c5780636548e9bc146103ea5780636b4078371461041d5780636cc6cde11461047b5761014f565b806305b64993146101545780630d98ed3b1461018657806313af4035146101b457806324943c7d146101e75780632cc9636c146102635780632d83549c146102d5575b600080fd5b34801561016057600080fd5b506101846004803603602081101561017757600080fd5b503563ffffffff16610cc9565b005b34801561019257600080fd5b50610184600480360360208110156101a957600080fd5b503561ffff16610d61565b3480156101c057600080fd5b50610184600480360360208110156101d757600080fd5b5035600160a060020a0316610df1565b3480156101f357600080fd5b50610184600480360361012081101561020b57600080fd5b506001608060020a031981351690600160a060020a03602082013581169160408101359091169060608101359061ffff6080820135169060ff60a082013581169160c08101359160e082013591610100013516610e6c565b34801561026f57600080fd5b506102c1600480360360a081101561028657600080fd5b5080356001608060020a031916906020810135600160a060020a03908116916040810135909116906060810135906080013561ffff166112f2565b604080519115158252519081900360200190f35b3480156102e157600080fd5b506102ff600480360360208110156102f857600080fd5b503561136d565b60408051931515845263ffffffff90921660208401526001608060020a031682820152519081900360600190f35b34801561033957600080fd5b506103426113a2565b60408051600160a060020a039092168252519081900360200190f35b34801561036a57600080fd5b506103736113b1565b6040805163ffffffff9092168252519081900360200190f35b34801561039857600080fd5b506102c1600480360360a08110156103af57600080fd5b5080356001608060020a031916906020810135600160a060020a03908116916040810135909116906060810135906080013561ffff166113d7565b3480156103f657600080fd5b506101846004803603602081101561040d57600080fd5b5035600160a060020a0316611448565b34801561042957600080fd5b506102c1600480360360a081101561044057600080fd5b5080356001608060020a031916906020810135600160a060020a03908116916040810135909116906060810135906080013561ffff166114c3565b34801561048757600080fd5b50610342611534565b34801561049c57600080fd5b50610342611543565b3480156104b157600080fd5b506104ba611552565b6040805161ffff9092168252519081900360200190f35b3480156104dd57600080fd5b50610342611574565b3480156104f257600080fd5b50610a3b600480360361014081101561050a57600080fd5b81019060208101813564010000000081111561052557600080fd5b82018360208201111561053757600080fd5b8035906020019184602083028401116401000000008311171561055957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156105a957600080fd5b8201836020820111156105bb57600080fd5b803590602001918460208302840111640100000000831117156105dd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561062d57600080fd5b82018360208201111561063f57600080fd5b8035906020019184602083028401116401000000008311171561066157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156106b157600080fd5b8201836020820111156106c357600080fd5b803590602001918460208302840111640100000000831117156106e557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561073557600080fd5b82018360208201111561074757600080fd5b8035906020019184602083028401116401000000008311171561076957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156107b957600080fd5b8201836020820111156107cb57600080fd5b803590602001918460208302840111640100000000831117156107ed57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561083d57600080fd5b82018360208201111561084f57600080fd5b8035906020019184602083028401116401000000008311171561087157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156108c157600080fd5b8201836020820111156108d357600080fd5b803590602001918460208302840111640100000000831117156108f557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561094557600080fd5b82018360208201111561095757600080fd5b8035906020019184602083028401116401000000008311171561097957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156109c957600080fd5b8201836020820111156109db57600080fd5b803590602001918460208302840111640100000000831117156109fd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611583945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610a77578181015183820152602001610a5f565b505050509050019250505060405180910390f35b348015610a9757600080fd5b5061018460048036036040811015610aae57600080fd5b50600160a060020a038135169060200135611743565b348015610ad057600080fd5b5061018460048036036020811015610ae757600080fd5b5035600160a060020a031661187f565b348015610b0357600080fd5b5061018460048036036060811015610b1a57600080fd5b50600160a060020a038135811691602081013590911690604001356118fa565b348015610b4657600080fd5b50610b4f6119da565b60408051918252519081900360200190f35b348015610b6d57600080fd5b5061018460048036036080811015610b8457600080fd5b50600160a060020a038135811691602081013582169160408201351690606001356119e0565b348015610bb657600080fd5b506102c1600480360360a0811015610bcd57600080fd5b5080356001608060020a031916906020810135600160a060020a03908116916040810135909116906060810135906080013561ffff16611ad2565b6101846004803603610140811015610c1f57600080fd5b506001608060020a031981351690600160a060020a03602082013581169160408101359091169060608101359061ffff6080820135169063ffffffff60a082013581169160c08101359091169060ff60e08201351690610100810135906101200135611b43565b348015610c9257600080fd5b5061018460048036036060811015610ca957600080fd5b50600160a060020a03813581169160208101359091169060400135611eff565b600154600160a060020a03163314610d155760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b6004805463ffffffff9092167601000000000000000000000000000000000000000000000279ffffffff0000000000000000000000000000000000000000000019909216919091179055565b600154600160a060020a03163314610dad5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b6004805461ffff909216740100000000000000000000000000000000000000000275ffff000000000000000000000000000000000000000019909216919091179055565b600154600160a060020a03163314610e3d5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610eb85760405160e560020a62461bcd028152600401808060200182810382526030815260200180612b496030913960400191505060405180910390fd5b604080516001608060020a03198b166020808301919091527f060000000000000000000000000000000000000000000000000000000000000060308301528251601181840301815260319092019092528051910120600090610f1c90868686611fae565b905087600160a060020a031681600160a060020a03161480610f4f575088600160a060020a031681600160a060020a0316145b1515610fa5576040805160e560020a62461bcd02815260206004820152601760248201527f4d757374206265206275796572206f722073656c6c6572000000000000000000604482015290519081900360640190fd5b610fad612a87565b6000610fbc8c8c8c8c8c6120bd565b60408051606081018252925460ff81161515808552610100820463ffffffff166020860152650100000000009091046001608060020a0316918401919091529193509150611054576040805160e560020a62461bcd02815260206004820152601560248201527f457363726f7720646f6573206e6f742065786973740000000000000000000000604482015290519081900360640190fd5b606460ff8516111561109a5760405160e560020a62461bcd028152600401808060200182810382526022815260200180612b276022913960400191505060405180910390fd5b604082810180513a618d0402016001608060020a03908116825260008481526005602090815290849020805474ffffffffffffffffffffffffffffffffffffffffff191690559151835185815291169181019190915281517f437ec3256bbed400455e142c7ce305c6e705cad2d1ba5a4ebed6a6dd133d93fb929181900390910190a160008460ff16111561123c5761271061ffff89168a0204606460ff86168b02048190038a1015611197576040805160e560020a62461bcd02815260206004820152600e60248201527f4f766572666c6f77206572726f72000000000000000000000000000000000000604482015290519081900360640190fd5b6003805482019055600454600160a060020a031663a9059cbb8c83606460ff8a168f0204036040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561120e57600080fd5b505af1158015611222573d6000803e3d6000fd5b505050506040513d602081101561123857600080fd5b5050505b60648460ff1610156112e457600454600160a060020a031663a9059cbb8c606460ff888203168d02046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156112b757600080fd5b505af11580156112cb573d6000803e3d6000fd5b505050506040513d60208110156112e157600080fd5b50505b505050505050505050505050565b600033600160a060020a03851614611354576040805160e560020a62461bcd02815260206004820152600d60248201527f4d75737420626520627579657200000000000000000000000000000000000000604482015290519081900360640190fd5b61136386868686866000612160565b9695505050505050565b60056020526000908152604090205460ff811690610100810463ffffffff16906501000000000090046001608060020a031683565b600454600160a060020a031681565b600454760100000000000000000000000000000000000000000000900463ffffffff1681565b600033600160a060020a03851614611439576040805160e560020a62461bcd02815260206004820152600d60248201527f4d75737420626520627579657200000000000000000000000000000000000000604482015290519081900360640190fd5b611363868686868660006122de565b600154600160a060020a031633146114945760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600033600160a060020a03861614611525576040805160e560020a62461bcd02815260206004820152600e60248201527f4d7573742062652073656c6c6572000000000000000000000000000000000000604482015290519081900360640190fd5b611363868686868660006123e5565b600054600160a060020a031681565b600254600160a060020a031681565b60045474010000000000000000000000000000000000000000900461ffff1681565b600154600160a060020a031681565b6060808b516040519080825280602002602001820160405280156115b1578160200160208202803883390190505b50600254909150600090600160a060020a031633146115d15760006115e1565b8c51616f548115156115df57fe5b045b905060005b8d518160ff161015611731576117098e8260ff1681518110151561160657fe5b906020019060200201518e8360ff1681518110151561162157fe5b906020019060200201518e8460ff1681518110151561163c57fe5b906020019060200201518e8560ff1681518110151561165757fe5b906020019060200201518e8660ff1681518110151561167257fe5b906020019060200201518e8760ff1681518110151561168d57fe5b906020019060200201518e8860ff168151811015156116a857fe5b906020019060200201518e8960ff168151811015156116c357fe5b906020019060200201518e8a60ff168151811015156116de57fe5b906020019060200201518e8b60ff168151811015156116f957fe5b906020019060200201518c612516565b838260ff1681518110151561171a57fe5b9115156020928302909101909101526001016115e6565b50909c9b505050505050505050505050565b600154600160a060020a0316331461178f5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b6003548111156117d35760405160e560020a62461bcd028152600401808060200182810382526026815260200180612bd36026913960400191505060405180910390fd5b60038054829003905560048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811694820194909452602481018590529051929091169163a9059cbb916044808201926020929091908290030181600087803b15801561184f57600080fd5b505af1158015611863573d6000803e3d6000fd5b505050506040513d602081101561187957600080fd5b50505050565b600154600160a060020a031633146118cb5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a031633146119465760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b82600160a060020a031663095ea7b383836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156119a957600080fd5b505af11580156119bd573d6000803e3d6000fd5b505050506040513d60208110156119d357600080fd5b5050505050565b60035481565b600154600160a060020a03163314611a2c5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152604482018490529151918616916323b872dd916064808201926020929091908290030181600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b505050506040513d6020811015611aca57600080fd5b505050505050565b600033600160a060020a03861614611b34576040805160e560020a62461bcd02815260206004820152600e60248201527f4d7573742062652073656c6c6572000000000000000000000000000000000000604482015290519081900360640190fd5b61136386868686866000612667565b604080516001608060020a03198c166020808301919091526c01000000000000000000000000600160a060020a03808e16820260308501528c16026044830152605882018a90527e0100000000000000000000000000000000000000000000000000000000000061ffff8a160260788301528251605a818403018152607a9092018352815191810191909120600081815260059092529190205460ff1615611c1f5760405160e560020a62461bcd028152600401808060200182810382526026815260200180612ad76026913960400191505060405180910390fd5b60408051602080820184905260e060020a63ffffffff808b168202848601528916026044830152825160288184030181526048909201909252805191012060045461ffff74010000000000000000000000000000000000000000909104168911611cbd5760405160e560020a62461bcd02815260040180806020018281038252602f815260200180612ba4602f913960400191505060405180910390fd5b63ffffffff86164210611d1a576040805160e560020a62461bcd02815260206004820152601960248201527f54726164652068617320616c7265616479206578706972656400000000000000604482015290519081900360640190fd5b600254600160a060020a0316611d3282878787611fae565b600160a060020a031614611d7a5760405160e560020a62461bcd02815260040180806020018281038252602f815260200180612aa8602f913960400191505060405180910390fd5b60048054604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523393810193909352306024840152604483018c905251600160a060020a03909116916323b872dd9160648083019260209291908290030181600087803b158015611dee57600080fd5b505af1158015611e02573d6000803e3d6000fd5b505050506040513d6020811015611e1857600080fd5b506000905063ffffffff881615611e3157874201611e34565b60015b604080516060810182526001815263ffffffff838116602080840191825260008486018181528a82526005835290869020945185549351915160ff199094169015151764ffffffff00191661010091909416029290921774ffffffffffffffffffffffffffffffff00000000001916650100000000006001608060020a039092169190910217909155815186815291519293507f102d25c49d33fcdb8976a3f2744e0785c98d9e43b88364859e6aec4ae82eff5c92918290030190a150505050505050505050505050565b600154600160a060020a03163314611f4b5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180612b79602b913960400191505060405180910390fd5b82600160a060020a031663a9059cbb83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156119a957600080fd5b604080518082018252601c8082527f19457468657265756d205369676e6564204d6573736167653a0a33320000000060208084019182529351600094859385938b939092019182918083835b602083106120195780518252601f199092019160209182019101611ffa565b51815160209384036101000a6000190180199092169116179052920193845250604080518085038152848301808352815191840191909120600090915281850180835281905260ff8c166060860152608085018b905260a085018a905290519095506001945060c080850194929350601f198201928290030190855afa1580156120a7573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b604080516001608060020a031996909616602080880191909152600160a060020a039586166c010000000000000000000000009081026030890152949095169093026044860152605885019190915261ffff167e010000000000000000000000000000000000000000000000000000000000000260788401528051808403605a018152607a90930181528251928201929092206000818152600590925291902091565b600061216a612a87565b600061217989898989896120bd565b60408051606081018252925460ff81161515808552610100820463ffffffff166020860152650100000000009091046001608060020a0316918401919091529193509150612211576040805160e560020a62461bcd02815260206004820152601560248201527f457363726f7720646f6573206e6f742065786973740000000000000000000000604482015290519081900360640190fd5b8151151561222457600092505050611363565b600254600090600160a060020a03163314612240576000612248565b61b4af85013a025b60408085015160008581526005602090815290839020805474ffffffffffffffffffffffffffffffffffffffffff1916905582518681526001608060020a03949092019384169082015281519293507fef5d27f6da36198207d0bf4c1db4f2d6e12a27045c53f7e7f2529ec7045a65c0929081900390910190a16122ce89886000612778565b5060019998505050505050505050565b60006122e8612a87565b60006122f789898989896120bd565b60408051606081018252925460ff81161515808552610100820463ffffffff166020860152650100000000009091046001608060020a031691840191909152919350915061234a57600092505050611363565b602082015163ffffffff16151561236657600092505050611363565b600081815260056020908152604091829020805464ffffffff0019169055815183815291517fe95fa7985c7585e90dab2dc46470726468662be06f67d79a31a5012e4bc0edeb9281900390910190a1600254600160a060020a03163314156123d6576123d6816171108601612814565b50600198975050505050505050565b60006123ef612a87565b60006123fe89898989896120bd565b60408051606081018252925460ff81161515808552610100820463ffffffff166020860152650100000000009091046001608060020a031691840191909152919350915061245157600092505050611363565b816020015163ffffffff16600114151561247057600092505050611363565b60045460008281526005602090815260409182902080544263ffffffff7601000000000000000000000000000000000000000000009096048616019094166101000264ffffffff001990941693909317909255805183815290517f43e76a2687c7b12792086e4c776772be26c4d6a7041115f446cbc22ccada08ab929181900390910190a1600254600160a060020a03163314156123d6576123d6816173438601612814565b6000806125278d858a8a8a8a612866565b90508a600160a060020a031681600160a060020a031614156125845760ff8416600114156125655761255d8d8d8d8d8d886122de565b915050612658565b60ff84166002141561257f5761255d8d8d8d8d8d88612160565b612656565b8b600160a060020a031681600160a060020a031614156125ec5760ff8416600514156125b85761255d8d8d8d8d8d88612667565b60ff8416600314156125d25761255d8d8d8d8d8d8861293e565b60ff84166004141561257f5761255d8d8d8d8d8d886123e5565b33600160a060020a038d161461264c576040805160e560020a62461bcd02815260206004820152601260248201527f556e7265636f676e697365642070617274790000000000000000000000000000604482015290519081900360640190fd5b6000915050612658565b505b9b9a5050505050505050505050565b6000612671612a87565b600061268089898989896120bd565b60408051606081018252925460ff81161515808552610100820463ffffffff166020860152650100000000009091046001608060020a03169184019190915291935091506126d357600092505050611363565b600254600090600160a060020a031633146126ef5760006126f7565b61b5fc85013a025b60408085015160008581526005602090815290839020805474ffffffffffffffffffffffffffffffffffffffffff1916905582518681526001608060020a03949092019384169082015281519293507f44306e460694e3f7e04300c4479a6818c0a825e0482fd6d4d0f16b0232e96205929081900390910190a16122ce8888885b61271061ffff8216830204808303831015612793575061280f565b600380548201905560048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038881169482019490945284870360248201529051929091169163a9059cbb916044808201926020929091908290030181600087803b158015611aa057600080fd5b505050565b600091825260056020526040909120805474ffffffffffffffffffffffffffffffff00000000001981163a90930265010000000000918290046001608060020a03908116919091011602919091179055565b604080516001608060020a0319881660208083019190915260ff88167f01000000000000000000000000000000000000000000000000000000000000000260308301526001608060020a0387167001000000000000000000000000000000008102603184015283518084036021018152604190930190935281519101206000913a106129265760405160e560020a62461bcd02815260040180806020018281038252602a815260200180612afd602a913960400191505060405180910390fd5b61293281868686611fae565b98975050505050505050565b6000612948612a87565b600061295789898989896120bd565b60408051606081018252925460ff81161515808552610100820463ffffffff166020860152650100000000009091046001608060020a03169184019190915291935091506129aa57600092505050611363565b6001826020015163ffffffff161115806129cd575042826020015163ffffffff16115b156129dd57600092505050611363565b600254600090600160a060020a031633146129f9576000612a01565b61b6df85013a025b60408085015160008581526005602090815290839020805474ffffffffffffffffffffffffffffffffffffffffff1916905582518681526001608060020a03949092019384169082015281519293507f53a30a836c5a4e5b22cc088ba117d9c12c2ac15a5e862d39f7de4cbf8a7b609c929081900390910190a16122ce89886000612778565b60408051606081018252600080825260208201819052918101919091529056fe5472616e73616374696f6e207369676e617475726520646964206e6f7420636f6d652066726f6d2072656c61796572547261646520616c72656164792065786973747320696e20657363726f77206d617070696e6747617320707269636520697320686967686572207468616e206d6178696d756d206761732070726963655f627579657250657263656e74206d75737420626520313030206f72206c6f7765724f6e6c79207468652063757272656e74206f776e65722063616e206368616e6765207468652061726269747261746f724f6e6c79207468652063757272656e74206f776e65722063616e206368616e676520746865206f776e6572457363726f772076616c7565206d7573742062652067726561746572207468616e206d696e696d756d2076616c7565416d6f756e7420697320686967686572207468616e20616d6f756e7420617661696c61626c65a165627a7a723058204cfa9aefd4ee3472af8423ef60619c6f47f38da678ec9a50f433a2141e86d27c0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000877cf5f02497607e0b4e4e6aaf6c275648cd5ce50000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
-----Decoded View---------------
Arg [0] : initialAddress (address): 0x877cf5F02497607E0B4e4E6AaF6C275648Cd5ce5
Arg [1] : daiAddress (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000877cf5f02497607e0b4e4e6aaf6c275648cd5ce5
Arg [1] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Deployed Bytecode Sourcemap
355:30612:0:-;;;;;;;;;;-1:-1:-1;;;355:30612:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25117:363;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25117:363:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25117:363:0;;;;:::i;:::-;;24685:271;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24685:271:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24685:271:0;;;;:::i;23901:232::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23901:232:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23901:232:0;-1:-1:-1;;;;;23901:232:0;;:::i;8550:1591::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8550:1591:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;;8550:1591:0;;;;-1:-1:-1;;;;;8550:1591:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11178:323::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11178:323:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;11178:323:0;;-1:-1:-1;;;;;;11178:323:0;;;;;;-1:-1:-1;;;;;11178:323:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1452:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1452:42:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1452:42:0;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1452:42:0;;;;;;;;;;;;;;720:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;720:29:0;;;:::i;:::-;;;;-1:-1:-1;;;;;720:29:0;;;;;;;;;;;;;;873:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;873:54:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10507:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10507:333:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;10507:333:0;;-1:-1:-1;;;;;;10507:333:0;;;;;;-1:-1:-1;;;;;10507:333:0;;;;;;;;;;;;;;;;;;;;;;;:::i;24288:244::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24288:244:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24288:244:0;-1:-1:-1;;;;;24288:244:0;;:::i;11840:335::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11840:335:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;11840:335:0;;-1:-1:-1;;;;;;11840:335:0;;;;;;-1:-1:-1;;;;;11840:335:0;;;;;;;;;;;;;;;;;;;;;;;:::i;485:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;485:25:0;;;:::i;544:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;544:22:0;;;:::i;836:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;836:30:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;517:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;517:20:0;;;:::i;19624:1065::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19624:1065:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;19624:1065:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;19624:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19624:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19624:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19624:1065:0;;;;;;;;-1:-1:-1;19624:1065:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;19624:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19624:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19624:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19624:1065:0;;;;;;;;-1:-1:-1;19624:1065:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;19624:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19624:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19624:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19624:1065:0;;;;;;;;-1:-1:-1;19624:1065:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;19624:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19624:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19624:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19624:1065:0;;;;;;;;-1:-1:-1;19624:1065:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;19624:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19624:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19624:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19624:1065:0;;;;;;;;-1:-1:-1;19624:1065:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;19624:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19624:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19624:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19624:1065:0;;;;;;;;-1:-1:-1;19624:1065:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;19624:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19624:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19624:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19624:1065:0;;;;;;;;-1:-1:-1;19624:1065:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;19624:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19624:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19624:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19624:1065:0;;;;;;;;-1:-1:-1;19624:1065:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;19624:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19624:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19624:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19624:1065:0;;;;;;;;-1:-1:-1;19624:1065:0;;-1:-1:-1;;21:11;5:28;;2:2;;;46:1;43;36:12;2:2;19624:1065:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19624:1065:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19624:1065:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19624:1065:0;;-1:-1:-1;19624:1065:0;;-1:-1:-1;;;;;19624:1065:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19624:1065:0;;;;;;;;;;;;;;;;;25762:324;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25762:324:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25762:324:0;;;;;;;;:::i;23493:259::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23493:259:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23493:259:0;-1:-1:-1;;;;;23493:259:0;;:::i;30303:376::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30303:376:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;30303:376:0;;;;;;;;;;;;;;;;;:::i;573:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;573:39:0;;;:::i;:::-;;;;;;;;;;;;;;;;29645:430;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29645:430:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;29645:430:0;;;;;;;;;;;;;;;;;;;;;;:::i;6314:326::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6314:326:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;6314:326:0;;-1:-1:-1;;;;;;6314:326:0;;;;;;-1:-1:-1;;;;;6314:326:0;;;;;;;;;;;;;;;;;;;;;;;:::i;3874:2094::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;;3874:2094:0;;;;-1:-1:-1;;;;;3874:2094:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28999:384::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28999:384:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;28999:384:0;;;;;;;;;;;;;;;;;:::i;25117:363::-;30741:5;;-1:-1:-1;;;;;30741:5:0;30727:10;:19;30719:75;;;;-1:-1:-1;;;;;30719:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25405:30;:67;;;;;;;;-1:-1:-1;;25405:67:0;;;;;;;;;25117:363::o;24685:271::-;30741:5;;-1:-1:-1;;;;;30741:5:0;30727:10;:19;30719:75;;;;-1:-1:-1;;;;;30719:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24917:12;:31;;;;;;;;-1:-1:-1;;24917:31:0;;;;;;;;;24685:271::o;23901:232::-;30741:5;;-1:-1:-1;;;;;30741:5:0;30727:10;:19;30719:75;;;;-1:-1:-1;;;;;30719:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24108:5;:17;;-1:-1:-1;;24108:17:0;-1:-1:-1;;;;;24108:17:0;;;;;;;;;;23901:232::o;8550:1591::-;30881:10;;-1:-1:-1;;;;;30881:10:0;30867;:24;30859:85;;;;-1:-1:-1;;;;;30859:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8894:84;;;-1:-1:-1;;;;;;8894:84:0;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;8894:84:0;;;;;;;8884:95;;;;;8848:18;;8869:123;;8981:2;8985;8989;8869:14;:123::i;:::-;8848:144;;9025:6;-1:-1:-1;;;;;9011:20:0;:10;-1:-1:-1;;;;;9011:20:0;;:45;;;;9049:7;-1:-1:-1;;;;;9035:21:0;:10;-1:-1:-1;;;;;9035:21:0;;9011:45;9003:81;;;;;;;-1:-1:-1;;;;;9003:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9097:21;;:::i;:::-;9129:18;9182:57;9199:8;9209:7;9218:6;9226;9234:4;9182:16;:57::i;:::-;9158:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9158:81:0;;;;;;;;;;-1:-1:-1;9158:81:0;-1:-1:-1;9250:48:0;;;;;-1:-1:-1;;;;;9250:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9334:3;9317:20;;;;;9309:67;;;;-1:-1:-1;;;;;9309:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9389:34;;;;:83;;9459:11;7965:5;9428:43;9389:83;-1:-1:-1;;;;;9389:83:0;;;;;-1:-1:-1;9492:19:0;;;:7;:19;;;;;;;;9485:26;;-1:-1:-1;;9485:26:0;;;9555:34;;9527:63;;;;;;;;;;;;;;;;;;;;;;;;;;;9621:1;9605:13;:17;;;9601:404;;;9727:5;9711:13;;;;;:21;9811:3;9786:22;;;;;:28;:41;;;:51;-1:-1:-1;9786:51:0;9778:78;;;;;-1:-1:-1;;;;;9778:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9869:24;:38;;;;;;9920:13;;-1:-1:-1;;;;;9920:13:0;:22;9943:6;9897:10;9976:3;9951:22;;;;;:28;:41;9920:73;;;;;-1:-1:-1;;;9920:73:0;;;;;;;-1:-1:-1;;;;;9920:73:0;-1:-1:-1;;;;;9920:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9920:73:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9920:73:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;9601:404:0;10035:3;10019:13;:19;;;10015:119;;;10053:13;;-1:-1:-1;;;;;10053:13:0;:22;10076:7;10118:3;10085:30;10095:19;;;10085:30;;;:36;10053:69;;;;;-1:-1:-1;;;10053:69:0;;;;;;;-1:-1:-1;;;;;10053:69:0;-1:-1:-1;;;;;10053:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10053:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10053:69:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;10015:119:0;30955:1;;;8550:1591;;;;;;;;;:::o;11178:323::-;11355:4;11380:10;-1:-1:-1;;;;;11380:20:0;;;11372:46;;;;;-1:-1:-1;;;;;11372:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11436:57;11450:8;11460:7;11469:6;11477;11485:4;11491:1;11436:13;:57::i;:::-;11429:64;11178:323;-1:-1:-1;;;;;;11178:323:0:o;1452:42::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1452:42:0;;:::o;720:29::-;;;-1:-1:-1;;;;;720:29:0;;:::o;873:54::-;;;;;;;;;:::o;10507:333::-;10686:4;10711:10;-1:-1:-1;;;;;10711:20:0;;;10703:46;;;;;-1:-1:-1;;;;;10703:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10767:65;10789:8;10799:7;10808:6;10816;10824:4;10830:1;10767:21;:65::i;24288:244::-;30741:5;;-1:-1:-1;;;;;30741:5:0;30727:10;:19;30719:75;;;;-1:-1:-1;;;;;30719:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24503:7;:21;;-1:-1:-1;;24503:21:0;-1:-1:-1;;;;;24503:21:0;;;;;;;;;;24288:244::o;11840:335::-;12019:4;12044:10;-1:-1:-1;;;;;12044:21:0;;;12036:48;;;;;-1:-1:-1;;;;;12036:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12102:65;12124:8;12134:7;12143:6;12151;12159:4;12165:1;12102:21;:65::i;485:25::-;;;-1:-1:-1;;;;;485:25:0;;:::o;544:22::-;;;-1:-1:-1;;;;;544:22:0;;:::o;836:30::-;;;;;;;;;:::o;517:20::-;;;-1:-1:-1;;;;;517:20:0;;:::o;19624:1065::-;20027:13;20053:22;20089:8;:15;20078:27;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;20078:27:0;-1:-1:-1;20163:7:0;;20053:52;;-1:-1:-1;20116:22:0;;-1:-1:-1;;;;;20163:7:0;20149:10;:21;:68;;20216:1;20149:68;;;20198:15;;19612:5;20173:40;;;;;;;;20149:68;20116:102;-1:-1:-1;20234:7:0;20229:427;20251:8;:15;20247:1;:19;;;20229:427;;;20302:342;20326:8;20335:1;20326:11;;;;;;;;;;;;;;;;;;;;20356:7;20364:1;20356:10;;;;;;;;;;;;;;;;;;;;20385:6;20392:1;20385:9;;;;;;;;;;;;;;;;;;;;20413:6;20420:1;20413:9;;;;;;;;;;;;;;;;;;;;20441:4;20446:1;20441:7;;;;;;;;;;;;;;;;;;;;20467:16;20484:1;20467:19;;;;;;;;;;;;;;;;;;;;20505:2;20508:1;20505:5;;;;;;;;;;;;;;;;;;;;20529:2;20532:1;20529:5;;;;;;;;;;;;;;;;;;;;20553:2;20556:1;20553:5;;;;;;;;;;;;;;;;;;;;20577:16;20594:1;20577:19;;;;;;;;;;;;;;;;;;;;20615:14;20302:5;:342::i;:::-;20288:8;20297:1;20288:11;;;;;;;;;;;;:356;;;:11;;;;;;;;;;:356;20268:3;;20229:427;;;-1:-1:-1;20673:8:0;;19624:1065;-1:-1:-1;;;;;;;;;;;;19624:1065:0:o;25762:324::-;30741:5;;-1:-1:-1;;;;;30741:5:0;30727:10;:19;30719:75;;;;-1:-1:-1;;;;;30719:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25918:24;;25907:35;;;25899:86;;;;-1:-1:-1;;;;;25899:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25996:24;:35;;;;;;;26042:13;;;:36;;;;;;-1:-1:-1;;;;;26042:36:0;;;;;;;;;;;;;;;;;;:13;;;;;:22;;:36;;;;;;;;;;;;;;;25996:24;26042:13;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26042:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26042:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;25762:324:0:o;23493:259::-;30741:5;;-1:-1:-1;;;;;30741:5:0;30727:10;:19;30719:75;;;;-1:-1:-1;;;;;30719:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23717:10;:27;;-1:-1:-1;;23717:27:0;-1:-1:-1;;;;;23717:27:0;;;;;;;;;;23493:259::o;30303:376::-;30741:5;;-1:-1:-1;;;;;30741:5:0;30727:10;:19;30719:75;;;;-1:-1:-1;;;;;30719:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30631:14;-1:-1:-1;;;;;30631:22:0;;30654:8;30664:6;30631:40;;;;;-1:-1:-1;;;30631:40:0;;;;;;;-1:-1:-1;;;;;30631:40:0;-1:-1:-1;;;;;30631:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30631:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30631:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;30303:376:0:o;573:39::-;;;;:::o;29645:430::-;30741:5;;-1:-1:-1;;;;;30741:5:0;30727:10;:19;30719:75;;;;-1:-1:-1;;;;;30719:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30004:63;;;;;;-1:-1:-1;;;;;30004:63:0;;;;;;;;;;;;;;;;;;;;;;:27;;;;;;:63;;;;;;;;;;;;;;;-1:-1:-1;30004:27:0;:63;;;5:2:-1;;;;30:1;27;20:12;5:2;30004:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30004:63:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;29645:430:0:o;6314:326::-;6497:4;6521:10;-1:-1:-1;;;;;6521:21:0;;;6513:48;;;;;-1:-1:-1;;;;;6513:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6579:53;6589:8;6599:7;6608:6;6616;6624:4;6630:1;6579:9;:53::i;3874:2094::-;4960:57;;;-1:-1:-1;;;;;;4960:57:0;;;;;;;;;;;-1:-1:-1;;;;;4960:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;4960:57:0;;;;;;4950:68;;;;;;;;;4929:18;5038:19;;;:7;:19;;;;;;:26;;;5037:27;5029:78;;;;-1:-1:-1;;;;;5029:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5154:112;;;;;;;;;;-1:-1:-1;;;5154:112:0;;;;;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;5154:112:0;;;;;;;5144:123;;;;;5154:112;5295:12;;;;;;;5286:21;;5278:81;;;;-1:-1:-1;;;;;5278:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5430:25;;;:15;:25;5422:63;;;;;-1:-1:-1;;;;;5422:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5574:7;;-1:-1:-1;;;;;5574:7:0;5527:43;5542:15;5559:2;5563;5567;5527:14;:43::i;:::-;-1:-1:-1;;;;;5527:54:0;;5519:114;;;;-1:-1:-1;;;;;5519:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5644:13;;;:61;;;;;;5671:10;5644:61;;;;;;;5691:4;5644:61;;;;;;;;;;;-1:-1:-1;;;;;5644:13:0;;;;:26;;:61;;;;;;;;;;;;;;:13;;:61;;;5:2:-1;;;;30:1;27;20:12;5:2;5644:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5644:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5716:28:0;;-1:-1:-1;5747:28:0;;;;:84;;5808:23;5789:15;5782:49;5747:84;;;5778:1;5747:84;5887:38;;;;;;;;5894:4;5887:38;;;;;;;;;;;;;-1:-1:-1;5887:38:0;;;;;;5865:19;;;:7;:19;;;;;;:60;;;;;;;;-1:-1:-1;;5865:60:0;;;;;;;-1:-1:-1;;5865:60:0;;;;;;;;;;;-1:-1:-1;;5865:60:0;;-1:-1:-1;;;;;5865:60:0;;;;;;;;;;;5941:19;;;;;;;5887:38;;-1:-1:-1;5941:19:0;;;;;;;;;3874:2094;;;;;;;;;;;;;:::o;28999:384::-;30741:5;;-1:-1:-1;;;;;30741:5:0;30727:10;:19;30719:75;;;;-1:-1:-1;;;;;30719:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29331:14;-1:-1:-1;;;;;29331:23:0;;29355:11;29368:6;29331:44;;;;;-1:-1:-1;;;29331:44:0;;;;;;;-1:-1:-1;;;;;29331:44:0;-1:-1:-1;;;;;29331:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;27333:349:0;27488:57;;;;;;;;;;;;;;;;;;;;27590:29;;27468:7;;;;27488:57;;27616:2;;27590:29;;;;;;27488:57;27590:29;27488:57;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;27590:29:0;;;;;-1:-1:-1;27590:29:0;;;26:21:-1;;;6:49;;27590:29:0;;;;;;27580:40;;;;;;;;;-1:-1:-1;27638:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27580:40;;-1:-1:-1;274:1;;-1:-1;27638:36:0;;;;;263:2:-1;;-1:-1;;;27638:36:0;;;;;;;;274:1:-1;27638:36:0;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;27638:36:0;;-1:-1:-1;;27638:36:0;;;27333:349;-1:-1:-1;;;;;;;;27333:349:0:o;26525:530::-;26938:57;;;-1:-1:-1;;;;;;26938:57:0;;;;;;;;;;;;-1:-1:-1;;;;;26938:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;26938:57:0;;;;;;26928:68;;;;;;;;;-1:-1:-1;27015:19:0;;;:7;:19;;;;;;;26525:530::o;14984:883::-;15205:4;15222:21;;:::i;:::-;15254:18;15307:57;15324:8;15334:7;15343:6;15351;15359:4;15307:16;:57::i;:::-;15283:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15283:81:0;;;;;;;;;;-1:-1:-1;15283:81:0;-1:-1:-1;15375:48:0;;;;;-1:-1:-1;;;;;15375:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15439:14;;15438:15;15434:60;;;15477:5;15470:12;;;;;;15434:60;15575:7;;15504:16;;-1:-1:-1;;;;;15575:7:0;15561:10;:21;:122;;15682:1;15561:122;;;14525:5;15603:34;;15650:11;15602:60;15561:122;15523:34;;;;;15716:19;;;;:7;:19;;;;;;;;15709:26;;-1:-1:-1;;15709:26:0;;;15751:38;;;;;-1:-1:-1;;;;;15523:175:0;;;;15751:38;;;;;;;;;15523:175;;-1:-1:-1;15751:38:0;;;;;;;;;;;15800:37;15818:7;15827:6;15835:1;15800:17;:37::i;:::-;-1:-1:-1;15855:4:0;;14984:883;-1:-1:-1;;;;;;;;;14984:883:0:o;13737:744::-;13950:4;13967:21;;:::i;:::-;13999:18;14052:57;14069:8;14079:7;14088:6;14096;14104:4;14052:16;:57::i;:::-;14028:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14028:81:0;;;;;;;;;;-1:-1:-1;14028:81:0;-1:-1:-1;14120:33:0;;14148:5;14141:12;;;;;;14120:33;14167:28;;;;:33;;;14164:50;;;14209:5;14202:12;;;;;;14164:50;14268:1;14225:19;;;:7;:19;;;;;;;;;:44;;-1:-1:-1;;14225:44:0;;;14285:32;;;;;;;;;;;;;;;;;14346:7;;-1:-1:-1;;;;;14346:7:0;14332:10;:21;14328:124;;;14368:72;14385:10;13279:5;14397:42;;14368:16;:72::i;:::-;-1:-1:-1;14469:4:0;;13737:744;-1:-1:-1;;;;;;;;13737:744:0:o;17867:976::-;18080:4;18185:21;;:::i;:::-;18217:18;18270:57;18287:8;18297:7;18306:6;18314;18322:4;18270:16;:57::i;:::-;18246:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18246:81:0;;;;;;;;;;-1:-1:-1;18246:81:0;-1:-1:-1;18338:60:0;;18381:5;18374:12;;;;;;18338:60;18411:7;:28;;;:33;;18443:1;18411:33;;18408:77;;;18468:5;18461:12;;;;;;18408:77;18600:30;;18495:19;;;;:7;:19;;;;;;;;;:135;;18545:15;18600:30;;;;;;;18538:92;18495:135;;;18600:30;18495:135;-1:-1:-1;;18495:135:0;;;;;;;;;;18646:33;;;;;;;;;;;;;;;;;;18708:7;;-1:-1:-1;;;;;18708:7:0;18694:10;:21;18690:124;;;18730:72;18747:10;17413:5;18759:42;;18730:16;:72::i;21343:1897::-;21685:4;21702:22;21727:163;21758:8;21781:16;21812;21843:2;21860;21877;21727:16;:163::i;:::-;21702:188;;21923:6;-1:-1:-1;;;;;21905:24:0;:14;-1:-1:-1;;;;;21905:24:0;;21901:1332;;;21988:52;;;1719:4;21988:52;21984:424;;;22119:78;22141:8;22151:7;22160:6;22168;22176:4;22182:14;22119:21;:78::i;:::-;22112:85;;;;;21984:424;22223:44;;;1797:4;22223:44;22219:189;;;22322:70;22336:8;22346:7;22355:6;22363;22371:4;22377:14;22322:13;:70::i;22219:189::-;21901:1332;;;22447:7;-1:-1:-1;;;;;22429:25:0;:14;-1:-1:-1;;;;;22429:25:0;;22425:808;;;22514:39;;;2104:4;22514:39;22510:600;;;22609:66;22619:8;22629:7;22638:6;22646;22654:4;22660:14;22609:9;:66::i;22510:600::-;22701:45;;;1877:4;22701:45;22697:413;;;22801:71;22816:8;22826:7;22835:6;22843;22851:4;22857:14;22801;:71::i;22697:413::-;22898:53;;;2012:4;22898:53;22894:216;;;23016:78;23038:8;23048:7;23057:6;23065;23073:4;23079:14;23016:21;:78::i;22425:808::-;23150:10;-1:-1:-1;;;;;23150:21:0;;;23142:52;;;;;-1:-1:-1;;;;;23142:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23216:5;23209:12;;;;;22425:808;21343:1897;;;;;;;;;;;;;;;:::o;7134:784::-;7351:4;7368:21;;:::i;:::-;7400:18;7453:57;7470:8;7480:7;7489:6;7497;7505:4;7453:16;:57::i;:::-;7429:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7429:81:0;;;;;;;;;;-1:-1:-1;7429:81:0;-1:-1:-1;7521:33:0;;7549:5;7542:12;;;;;;7521:33;7636:7;;7565:16;;-1:-1:-1;;;;;7636:7:0;7622:10;:21;:118;;7739:1;7622:118;;;6680:5;7664:30;;7707:11;7663:56;7622:118;7584:34;;;;;7773:19;;;;:7;:19;;;;;;;;7766:26;;-1:-1:-1;;7766:26:0;;;7808:30;;;;;-1:-1:-1;;;;;7584:171:0;;;;7808:30;;;;;;;;;7584:171;;-1:-1:-1;7808:30:0;;;;;;;;;;;7849:39;7867:6;7875;7883:4;12769:458;12937:5;12921:13;;;;;:21;12987:19;;;:28;-1:-1:-1;12984:66:0;;;13032:7;;;12984:66;13122:24;:38;;;;;;13171:13;;;:48;;;;;;-1:-1:-1;;;;;13171:48:0;;;;;;;;;;13199:19;;;13171:48;;;;;;:13;;;;;:22;;:48;;;;;;;;;;;;;;;13122:24;13171:13;:48;;;5:2:-1;;;;30:1;27;20:12;12769:458:0;;;;:::o;12354:164::-;12433:19;;;;:7;:19;;;;;;:77;;-1:-1:-1;;12433:77:0;;12498:11;12483:27;;;12433:77;;;;;-1:-1:-1;;;;;12433:77:0;;;;;;;;;;;;;;;12354:164::o;28090:684::-;28556:62;;;-1:-1:-1;;;;;;28556:62:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28556:62:0;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;28556:62:0;;;;;;;28546:73;;;;;-1:-1:-1;;28638:11:0;:30;28630:85;;;;-1:-1:-1;;;;;28630:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28733:33;28748:5;28755:2;28759;28763;28733:14;:33::i;:::-;28726:40;28090:684;-1:-1:-1;;;;;;;;28090:684:0:o;16374:987::-;16596:4;16613:21;;:::i;:::-;16645:18;16698:57;16715:8;16725:7;16734:6;16742;16750:4;16698:16;:57::i;:::-;16674:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16674:81:0;;;;;;;;;;-1:-1:-1;16674:81:0;-1:-1:-1;16766:60:0;;16809:5;16802:12;;;;;;16766:60;16871:1;16839:7;:28;;;:33;;;;:83;;;;16907:15;16876:7;:28;;;:46;;;16839:83;16836:150;;;16969:5;16962:12;;;;;;16836:150;17067:7;;16996:16;;-1:-1:-1;;;;;17067:7:0;17053:10;:21;:123;;17175:1;17053:123;;;15912:5;17095:35;;17143:11;17094:61;17053:123;17015:34;;;;;17209:19;;;;:7;:19;;;;;;;;17202:26;;-1:-1:-1;;17202:26:0;;;17244:39;;;;;-1:-1:-1;;;;;17015:176:0;;;;17244:39;;;;;;;;;17015:176;;-1:-1:-1;17244:39:0;;;;;;;;;;;17294:37;17312:7;17321:6;17329:1;17294:17;:37::i;355:30612::-;;;;;;;;;-1:-1:-1;355:30612:0;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://4cfa9aefd4ee3472af8423ef60619c6f47f38da678ec9a50f433a2141e86d27c
Loading...
Loading
Loading...
Loading
Net Worth in USD
$38.53
Net Worth in ETH
0.018746
Token Allocations
DAI
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.999674 | 38.5429 | $38.53 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.