Source Code
Latest 24 from a total of 24 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Release Escrow | 18413726 | 869 days ago | IN | 0 ETH | 0.00317222 | ||||
| Set Mark As Paid | 18413715 | 869 days ago | IN | 0 ETH | 0.00110846 | ||||
| Create Escrow | 18413500 | 869 days ago | IN | 0 ETH | 0.00859583 | ||||
| Refund Maker | 18327597 | 881 days ago | IN | 0 ETH | 0.00046514 | ||||
| Cancel Maker | 18287143 | 887 days ago | IN | 0 ETH | 0.00052036 | ||||
| Create Escrow | 18286909 | 887 days ago | IN | 0 ETH | 0.00208415 | ||||
| Set Mark As Paid | 18273463 | 889 days ago | IN | 0 ETH | 0.00049438 | ||||
| Create Escrow | 18273324 | 889 days ago | IN | 0 ETH | 0.00178696 | ||||
| Release Escrow | 18240709 | 894 days ago | IN | 0 ETH | 0.00069831 | ||||
| Set Mark As Paid | 18240678 | 894 days ago | IN | 0 ETH | 0.00031332 | ||||
| Create Escrow | 18240653 | 894 days ago | IN | 0 ETH | 0.00215995 | ||||
| Withdraw Fees | 18170584 | 903 days ago | IN | 0 ETH | 0.00110065 | ||||
| Release Escrow | 18136759 | 908 days ago | IN | 0 ETH | 0.00279583 | ||||
| Set Mark As Paid | 18136699 | 908 days ago | IN | 0 ETH | 0.00058138 | ||||
| Set Mark As Paid | 18136699 | 908 days ago | IN | 0 ETH | 0.00057871 | ||||
| Set Mark As Paid | 18136699 | 908 days ago | IN | 0 ETH | 0.00057871 | ||||
| Set Mark As Paid | 18136699 | 908 days ago | IN | 0 ETH | 0.00102411 | ||||
| Create Escrow | 18135787 | 908 days ago | IN | 0 ETH | 0.00456283 | ||||
| Set Time Process | 18071647 | 917 days ago | IN | 0 ETH | 0.00099155 | ||||
| Set Fee Taker | 18071646 | 917 days ago | IN | 0 ETH | 0.00098907 | ||||
| Set Fee Maker | 18071645 | 917 days ago | IN | 0 ETH | 0.00097672 | ||||
| Add Stables Addr... | 18070995 | 917 days ago | IN | 0 ETH | 0.00097551 | ||||
| Add Stables Addr... | 18070995 | 917 days ago | IN | 0 ETH | 0.00097551 | ||||
| Add Stables Addr... | 18070994 | 917 days ago | IN | 0 ETH | 0.00097551 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PaydeceEscrow
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;
import './IERC20.sol';
import './Address.sol';
import './SafeERC20.sol';
import './ReentrancyGuard.sol';
import './Context.sol';
import './Ownable.sol';
contract PaydeceEscrow is ReentrancyGuard, Ownable {
// 0.1 es 100 porque se multiplico por mil => 0.1 X 1000 = 100
uint256 public feeTaker;
uint256 public feeMaker;
uint256 public feesAvailableNativeCoin;
uint256 public timeProcess; //Tiempo que tienen para completar la transaccion
using SafeERC20 for IERC20;
mapping(uint => Escrow) public escrows;
mapping(address => bool) whitelistedStablesAddresses;
mapping(IERC20 => uint) public feesAvailable;
event EscrowDeposit(uint indexed orderId, Escrow escrow);
event EscrowComplete(uint indexed orderId, Escrow escrow);
event EscrowDisputeResolved(uint indexed orderId);
event EscrowCancelMaker(uint indexed orderId, Escrow escrow);
event EscrowCancelMakerOwner(uint indexed orderId, Escrow escrow);
event EscrowCancelTaker(uint indexed orderId, Escrow escrow);
event EscrowCancelTakerOwner(uint indexed orderId, Escrow escrow);
event EscrowMarkAsPaid(uint indexed orderId, Escrow escrow);
event EscrowMarkAsPaidOwner(uint indexed orderId, Escrow escrow);
// Maker defined as who buys usdt
modifier onlyMaker(uint _orderId) {
require(
msg.sender == escrows[_orderId].maker,
"Only Maker can call this"
);
_;
}
modifier onlyTaker(uint _orderId) {
require(
msg.sender == escrows[_orderId].taker,
"Only Taker can call this"
);
_;
}
// modifier onlyTakerOrOwner(uint _orderId) {
// require(
// msg.sender == escrows[_orderId].taker || owner() == _msgSender() ,
// "Only Taker can call this"
// );
// // require(owner() == _msgSender(), "Ownable: caller is not the owner");
// _;
// }
enum EscrowStatus {
Unknown, //0
ACTIVE, // 1,
CRYPTOS_IN_CUSTODY, // 2,
FIATCOIN_TRANSFERED, // 3, dev un metodo publico owner y taker
COMPLETED, // 4,
DELETED, // 5,
APPEALED, // 6,
REFUND, // 7,
RELEASE, // 8
CANCEL_MAKER, //9
CANCEL_TAKER //10
}
struct Escrow {
address payable maker; //Comprador
address payable taker; //Vendedor
bool maker_premium;
bool taker_premium;
uint256 value; //Monto compra
uint256 takerfee; //Comision vendedor
uint256 makerfee; //Comision comprador
IERC20 currency; //Moneda
EscrowStatus status; //Estado
uint256 created;
}
//uint256 private feesAvailable; // summation of fees that can be withdrawn
constructor() {
feeTaker = 0;
feeMaker = 0;
}
// ================== Begin External functions ==================
function setFeeTaker(uint256 _feeTaker) external onlyOwner {
require(
_feeTaker >= 0 && _feeTaker <= (1 * 1000),
"The fee can be from 0% to 1%"
);
feeTaker = _feeTaker;
}
function setFeeMaker(uint256 _feeMaker) external onlyOwner {
require(
_feeMaker >= 0 && _feeMaker <= (1 * 1000),
"The fee can be from 0% to 1%"
);
feeMaker = _feeMaker;
}
function setTimeProcess(uint256 _timeProcess) external onlyOwner {
require(
_timeProcess > 0 ,
"The timeProcess can be 0"
);
timeProcess = _timeProcess;
}
/* This is called by the server / contract owner */
function createEscrow(
uint _orderId,
address payable _taker,
uint256 _value,
IERC20 _currency,
bool _maker_premium,
bool _taker_premium
) external virtual {
require(
escrows[_orderId].status == EscrowStatus.Unknown,
"Escrow already exists"
);
require(
whitelistedStablesAddresses[address(_currency)],
"Address Stable to be whitelisted"
);
require(msg.sender != _taker, "taker cannot be the same as maker");
uint8 _decimals = _currency.decimals();
//Obtiene el monto a transferir desde el comprador al contrato
uint256 _amountFeeMaker = ((_value * (feeMaker * 10 ** _decimals)) /
(100 * 10 ** _decimals)) / 1000;
if(_maker_premium){
_amountFeeMaker = 0;
}
//Valida el Allowance
uint256 _allowance = _currency.allowance(msg.sender, address(this));
require(
_allowance >= (_value + _amountFeeMaker),
"Taker approve to Escrow first"
);
//Transfer USDT to contract
_currency.safeTransferFrom(
msg.sender,
address(this),
(_value + _amountFeeMaker)
);
escrows[_orderId] = Escrow(
payable(msg.sender),
_taker,
_maker_premium,
_taker_premium,
_value,
feeTaker,
feeMaker,
_currency,
EscrowStatus.CRYPTOS_IN_CUSTODY,
block.timestamp
);
emit EscrowDeposit(_orderId, escrows[_orderId]);
}
function createEscrowNativeCoin(
uint _orderId,
address payable _taker,
uint256 _value,
bool _maker_premium,
bool _taker_premium
) external payable virtual {
require(
escrows[_orderId].status == EscrowStatus.Unknown,
"Escrow already exists"
);
require(msg.sender != _taker, "Taker cannot be the same as maker");
uint8 _decimals = 18;
//Obtiene el monto a transferir desde el comprador al contrato
uint256 _amountFeeMaker = ((_value * (feeMaker * 10 ** _decimals)) /
(100 * 10 ** _decimals)) / 1000;
if(_maker_premium){
_amountFeeMaker = 0;
}
require((_value + _amountFeeMaker) <= msg.value, "Incorrect amount");
escrows[_orderId] = Escrow(
payable(msg.sender),
_taker,
_maker_premium,
_taker_premium,
_value,
feeTaker,
feeMaker,
IERC20(address(0)),
EscrowStatus.CRYPTOS_IN_CUSTODY,
block.timestamp
);
emit EscrowDeposit(_orderId, escrows[_orderId]);
}
function releaseEscrowOwner(uint _orderId) external onlyOwner {
_releaseEscrow(_orderId);
}
function releaseEscrowOwnerNativeCoin(uint _orderId) external onlyOwner {
_releaseEscrowNativeCoin(_orderId);
}
/* This is called by the maker wallet */
function releaseEscrow(uint _orderId) external onlyMaker(_orderId) {
_releaseEscrow(_orderId);
}
function releaseEscrowNativeCoin(
uint _orderId
) external onlyMaker(_orderId) {
_releaseEscrowNativeCoin(_orderId);
}
/// release funds to the maker - cancelled contract
function refundMaker(uint _orderId) external nonReentrant onlyOwner {
//require(escrows[_orderId].status == EscrowStatus.Refund,"Refund not approved");
uint256 _value = escrows[_orderId].value;
address _maker = escrows[_orderId].maker;
IERC20 _currency = escrows[_orderId].currency;
_currency.safeTransfer(_maker, _value);
emit EscrowDisputeResolved(_orderId);
}
function refundMakerNativeCoin(
uint _orderId
) external nonReentrant onlyOwner {
//require(escrows[_orderId].status == EscrowStatus.Refund,"Refund not approved");
uint256 _value = escrows[_orderId].value;
address _maker = escrows[_orderId].maker;
//Transfer call
(bool sent, ) = payable(address(_maker)).call{value: _value}("");
require(sent, "Transfer failed.");
emit EscrowDisputeResolved(_orderId);
}
function withdrawFees(IERC20 _currency) external onlyOwner {
uint _amount;
// This check also prevents underflow
require(feesAvailable[_currency] > 0, "Amount > feesAvailable");
_amount = feesAvailable[_currency];
feesAvailable[_currency] -= _amount;
_currency.safeTransfer(owner(), _amount);
}
function withdrawFeesNativeCoin() external onlyOwner {
uint256 _amount;
// This check also prevents underflow
require(feesAvailableNativeCoin > 0, "Amount > feesAvailable");
//_amount = feesAvailable[_currency];
_amount = feesAvailableNativeCoin;
feesAvailableNativeCoin -= _amount;
//Transfer
(bool sent, ) = payable(msg.sender).call{value: _amount}("");
require(sent, "Transfer failed.");
}
// ================== End External functions ==================
// ================== Begin External functions that are pure ==================
function version() external pure virtual returns (string memory) {
return "4.1.0";
}
// ================== End External functions that are pure ==================
/// ================== Begin Public functions ==================
function getState(uint _orderId) public view returns (EscrowStatus) {
Escrow memory _escrow = escrows[_orderId];
return _escrow.status;
}
function addStablesAddresses(
address _addressStableToWhitelist
) public onlyOwner {
whitelistedStablesAddresses[_addressStableToWhitelist] = true;
}
function delStablesAddresses(
address _addressStableToWhitelist
) public onlyOwner {
whitelistedStablesAddresses[_addressStableToWhitelist] = false;
}
function CancelMaker(uint256 _orderId) public nonReentrant onlyMaker(_orderId){
// Valida el estado de la Escrow
require( escrows[_orderId].status == EscrowStatus.CRYPTOS_IN_CUSTODY , "El estado tiene que ser CRYPTOS_IN_CUSTODY" );
uint256 _timeDiff = block.timestamp - escrows[_orderId].created;
// validacióm de tiempo de proceso
require(_timeDiff > timeProcess, "El tiempo todavia llego a su termino" );
// cambio de estado
escrows[_orderId].status = EscrowStatus.CANCEL_MAKER;
//Transfer to maker
escrows[_orderId].currency.safeTransfer(
escrows[_orderId].maker,
escrows[_orderId].value
);
// emite evento
emit EscrowCancelMaker(_orderId, escrows[_orderId]);
}
function CancelMakerOwner(uint256 _orderId) public nonReentrant onlyOwner{
// Valida el estado de la Escrow
require( escrows[_orderId].status == EscrowStatus.CRYPTOS_IN_CUSTODY , "El estado tiene que ser CRYPTOS_IN_CUSTODY" );
uint256 _timeDiff = block.timestamp - escrows[_orderId].created;
// validacióm de tiempo de proceso
require(_timeDiff > timeProcess, "El tiempo todavia llego a su termino" );
// cambio de estado
escrows[_orderId].status = EscrowStatus.CANCEL_MAKER;
//Transfer to maker
escrows[_orderId].currency.safeTransfer(
escrows[_orderId].maker,
escrows[_orderId].value
);
// emite evento
emit EscrowCancelMakerOwner(_orderId, escrows[_orderId]);
}
function CancelTaker(uint256 _orderId) public nonReentrant onlyTaker(_orderId){
// Valida el estado de la Escrow
require( escrows[_orderId].status == EscrowStatus.CRYPTOS_IN_CUSTODY , "El estado tiene que ser CRYPTOS_IN_CUSTODY" );
// cambio de estado
escrows[_orderId].status = EscrowStatus.CANCEL_TAKER;
//Transfer to maker
escrows[_orderId].currency.safeTransfer(
escrows[_orderId].maker,
escrows[_orderId].value
);
// emite evento
emit EscrowCancelTaker(_orderId, escrows[_orderId]);
}
function CancelTakerOwner(uint256 _orderId) public nonReentrant onlyOwner(){
// Valida el estado de la Escrow
require( escrows[_orderId].status == EscrowStatus.CRYPTOS_IN_CUSTODY , "El estado tiene que ser CRYPTOS_IN_CUSTODY" );
// cambio de estado
escrows[_orderId].status = EscrowStatus.CANCEL_TAKER;
//Transfer to maker
escrows[_orderId].currency.safeTransfer(
escrows[_orderId].maker,
escrows[_orderId].value
);
// emite evento
emit EscrowCancelTakerOwner(_orderId, escrows[_orderId]);
}
function setMarkAsPaid(uint256 _orderId) public onlyTaker(_orderId){
// Valida el estado de la Escrow
require( escrows[_orderId].status == EscrowStatus.CRYPTOS_IN_CUSTODY , "El estado tiene que ser CRYPTOS_IN_CUSTODY" );
escrows[_orderId].status = EscrowStatus.FIATCOIN_TRANSFERED;
// emite evento
emit EscrowMarkAsPaid(_orderId, escrows[_orderId]);
}
function setMarkAsPaidOwner(uint256 _orderId) public onlyOwner(){
// Valida el estado de la Escrow
require( escrows[_orderId].status == EscrowStatus.CRYPTOS_IN_CUSTODY , "El estado tiene que ser CRYPTOS_IN_CUSTODY" );
escrows[_orderId].status = EscrowStatus.FIATCOIN_TRANSFERED;
// emite evento
emit EscrowMarkAsPaidOwner(_orderId, escrows[_orderId]);
}
/// ================== End Public functions ==================
// ================== Begin Private functions ==================
function _releaseEscrow(uint _orderId) private nonReentrant {
require(
escrows[_orderId].status == EscrowStatus.FIATCOIN_TRANSFERED,
"El estado tiene que estar en FIATCOIN_TRANSFERED"
);
uint8 _decimals = escrows[_orderId].currency.decimals();
//Obtiene el monto a transferir desde el comprador al contrato //takerfee //makerfee
uint256 _amountFeeMaker = ((escrows[_orderId].value *
(escrows[_orderId].makerfee * 10 ** _decimals)) /
(100 * 10 ** _decimals)) / 1000;
uint256 _amountFeeTaker = ((escrows[_orderId].value *
(escrows[_orderId].takerfee * 10 ** _decimals)) /
(100 * 10 ** _decimals)) / 1000;
// Validaciones Premium
if(escrows[_orderId].maker_premium){
_amountFeeMaker = 0;
}
if(escrows[_orderId].taker_premium){
_amountFeeTaker = 0;
}
//feesAvailable += _amountFeeMaker + _amountFeeTaker;
feesAvailable[escrows[_orderId].currency] +=
_amountFeeMaker +
_amountFeeTaker;
// write as complete, in case transfer fails
escrows[_orderId].status = EscrowStatus.COMPLETED;
//Transfer to taker Price Asset - FeeTaker
escrows[_orderId].currency.safeTransfer(
escrows[_orderId].taker,
escrows[_orderId].value - _amountFeeTaker
);
emit EscrowComplete(_orderId, escrows[_orderId]);
}
function _releaseEscrowNativeCoin(uint _orderId) private nonReentrant {
require(
escrows[_orderId].status == EscrowStatus.CRYPTOS_IN_CUSTODY,
"USDT has not been deposited"
);
uint8 _decimals = 18; //Wei
//Obtiene el monto a transferir desde el comprador al contrato //takerfee //makerfee
uint256 _amountFeeMaker = ((escrows[_orderId].value *
(escrows[_orderId].makerfee * 10 ** _decimals)) /
(100 * 10 ** _decimals)) / 1000;
uint256 _amountFeeTaker = ((escrows[_orderId].value *
(escrows[_orderId].takerfee * 10 ** _decimals)) /
(100 * 10 ** _decimals)) / 1000;
// Validaciones Premium
if(escrows[_orderId].maker_premium){
_amountFeeMaker = 0;
}
if(escrows[_orderId].taker_premium){
_amountFeeTaker = 0;
}
//Registra los fees obtenidos para Paydece
feesAvailableNativeCoin += _amountFeeMaker + _amountFeeTaker;
// write as complete, in case transfer fails
escrows[_orderId].status = EscrowStatus.COMPLETED;
//Transfer to taker Price Asset - FeeTaker
(bool sent, ) = escrows[_orderId].taker.call{
value: escrows[_orderId].value - _amountFeeTaker
}("");
require(sent, "Transfer failed.");
emit EscrowComplete(_orderId, escrows[_orderId]);
}
// ================== End Private functions ==================
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
// function sendValue(address payable recipient, uint256 amount) internal {
// require(
// address(this).balance >= amount,
// "Address: insufficient balance"
// );
// (bool success, ) = recipient.call{value: amount}("");
// require(
// success,
// "Address: unable to send value, recipient may have reverted"
// );
// }
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
// function functionCall(
// address target,
// bytes memory data
// ) internal returns (bytes memory) {
// return functionCall(target, data, "Address: low-level call failed");
// }
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
value,
"Address: low-level call with value failed"
);
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(
address(this).balance >= value,
"Address: insufficient balance for call"
);
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(
data
);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
// function functionStaticCall(
// address target,
// bytes memory data
// ) internal view returns (bytes memory) {
// return
// functionStaticCall(
// target,
// data,
// "Address: low-level static call failed"
// );
// }
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
// function functionStaticCall(
// address target,
// bytes memory data,
// string memory errorMessage
// ) internal view returns (bytes memory) {
// require(isContract(target), "Address: static call to non-contract");
// (bool success, bytes memory returndata) = target.staticcall(data);
// return verifyCallResult(success, returndata, errorMessage);
// }
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
// function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
// return functionDelegateCall(target, data, "Address: low-level delegate call failed");
// }
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
// function functionDelegateCall(
// address target,
// bytes memory data,
// string memory errorMessage
// ) internal returns (bytes memory) {
// require(isContract(target), "Address: delegate call to non-contract");
// (bool success, bytes memory returndata) = target.delegatecall(data);
// return verifyCallResult(success, returndata, errorMessage);
// }
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
// function _msgData() internal view virtual returns (bytes calldata) {
// return msg.data;
// }
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
function decimals() external view returns (uint8);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(
address owner,
address spender
) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;
import './Context.sol';
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;
import './Address.sol';
import './IERC20.sol';
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(
token,
abi.encodeWithSelector(token.transfer.selector, to, value)
);
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(
token,
abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
);
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
// function safeApprove(
// IERC20 token,
// address spender,
// uint256 value
// ) internal {
// // safeApprove should only be called when setting an initial allowance,
// // or when resetting it to zero. To increase and decrease it, use
// // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// require(
// (value == 0) || (token.allowance(address(this), spender) == 0),
// "SafeERC20: approve from non-zero to non-zero allowance"
// );
// _callOptionalReturn(
// token,
// abi.encodeWithSelector(token.approve.selector, spender, value)
// );
// }
// function safeIncreaseAllowance(
// IERC20 token,
// address spender,
// uint256 value
// ) internal {
// uint256 newAllowance = token.allowance(address(this), spender) + value;
// _callOptionalReturn(
// token,
// abi.encodeWithSelector(
// token.approve.selector,
// spender,
// newAllowance
// )
// );
// }
// function safeDecreaseAllowance(
// IERC20 token,
// address spender,
// uint256 value
// ) internal {
// unchecked {
// uint256 oldAllowance = token.allowance(address(this), spender);
// require(
// oldAllowance >= value,
// "SafeERC20: decreased allowance below zero"
// );
// uint256 newAllowance = oldAllowance - value;
// _callOptionalReturn(
// token,
// abi.encodeWithSelector(
// token.approve.selector,
// spender,
// newAllowance
// )
// );
// }
// }
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(
data,
"SafeERC20: low-level call failed"
);
if (returndata.length > 0) {
// Return data is optional
require(
abi.decode(returndata, (bool)),
"SafeERC20: ERC20 operation did not succeed"
);
}
}
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"},{"components":[{"internalType":"address payable","name":"maker","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bool","name":"maker_premium","type":"bool"},{"internalType":"bool","name":"taker_premium","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"takerfee","type":"uint256"},{"internalType":"uint256","name":"makerfee","type":"uint256"},{"internalType":"contract IERC20","name":"currency","type":"address"},{"internalType":"enum PaydeceEscrow.EscrowStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"created","type":"uint256"}],"indexed":false,"internalType":"struct PaydeceEscrow.Escrow","name":"escrow","type":"tuple"}],"name":"EscrowCancelMaker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"},{"components":[{"internalType":"address payable","name":"maker","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bool","name":"maker_premium","type":"bool"},{"internalType":"bool","name":"taker_premium","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"takerfee","type":"uint256"},{"internalType":"uint256","name":"makerfee","type":"uint256"},{"internalType":"contract IERC20","name":"currency","type":"address"},{"internalType":"enum PaydeceEscrow.EscrowStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"created","type":"uint256"}],"indexed":false,"internalType":"struct PaydeceEscrow.Escrow","name":"escrow","type":"tuple"}],"name":"EscrowCancelMakerOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"},{"components":[{"internalType":"address payable","name":"maker","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bool","name":"maker_premium","type":"bool"},{"internalType":"bool","name":"taker_premium","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"takerfee","type":"uint256"},{"internalType":"uint256","name":"makerfee","type":"uint256"},{"internalType":"contract IERC20","name":"currency","type":"address"},{"internalType":"enum PaydeceEscrow.EscrowStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"created","type":"uint256"}],"indexed":false,"internalType":"struct PaydeceEscrow.Escrow","name":"escrow","type":"tuple"}],"name":"EscrowCancelTaker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"},{"components":[{"internalType":"address payable","name":"maker","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bool","name":"maker_premium","type":"bool"},{"internalType":"bool","name":"taker_premium","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"takerfee","type":"uint256"},{"internalType":"uint256","name":"makerfee","type":"uint256"},{"internalType":"contract IERC20","name":"currency","type":"address"},{"internalType":"enum PaydeceEscrow.EscrowStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"created","type":"uint256"}],"indexed":false,"internalType":"struct PaydeceEscrow.Escrow","name":"escrow","type":"tuple"}],"name":"EscrowCancelTakerOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"},{"components":[{"internalType":"address payable","name":"maker","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bool","name":"maker_premium","type":"bool"},{"internalType":"bool","name":"taker_premium","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"takerfee","type":"uint256"},{"internalType":"uint256","name":"makerfee","type":"uint256"},{"internalType":"contract IERC20","name":"currency","type":"address"},{"internalType":"enum PaydeceEscrow.EscrowStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"created","type":"uint256"}],"indexed":false,"internalType":"struct PaydeceEscrow.Escrow","name":"escrow","type":"tuple"}],"name":"EscrowComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"},{"components":[{"internalType":"address payable","name":"maker","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bool","name":"maker_premium","type":"bool"},{"internalType":"bool","name":"taker_premium","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"takerfee","type":"uint256"},{"internalType":"uint256","name":"makerfee","type":"uint256"},{"internalType":"contract IERC20","name":"currency","type":"address"},{"internalType":"enum PaydeceEscrow.EscrowStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"created","type":"uint256"}],"indexed":false,"internalType":"struct PaydeceEscrow.Escrow","name":"escrow","type":"tuple"}],"name":"EscrowDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"EscrowDisputeResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"},{"components":[{"internalType":"address payable","name":"maker","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bool","name":"maker_premium","type":"bool"},{"internalType":"bool","name":"taker_premium","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"takerfee","type":"uint256"},{"internalType":"uint256","name":"makerfee","type":"uint256"},{"internalType":"contract IERC20","name":"currency","type":"address"},{"internalType":"enum PaydeceEscrow.EscrowStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"created","type":"uint256"}],"indexed":false,"internalType":"struct PaydeceEscrow.Escrow","name":"escrow","type":"tuple"}],"name":"EscrowMarkAsPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"orderId","type":"uint256"},{"components":[{"internalType":"address payable","name":"maker","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bool","name":"maker_premium","type":"bool"},{"internalType":"bool","name":"taker_premium","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"takerfee","type":"uint256"},{"internalType":"uint256","name":"makerfee","type":"uint256"},{"internalType":"contract IERC20","name":"currency","type":"address"},{"internalType":"enum PaydeceEscrow.EscrowStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"created","type":"uint256"}],"indexed":false,"internalType":"struct PaydeceEscrow.Escrow","name":"escrow","type":"tuple"}],"name":"EscrowMarkAsPaidOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"CancelMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"CancelMakerOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"CancelTaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"CancelTakerOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addressStableToWhitelist","type":"address"}],"name":"addStablesAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"},{"internalType":"address payable","name":"_taker","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"contract IERC20","name":"_currency","type":"address"},{"internalType":"bool","name":"_maker_premium","type":"bool"},{"internalType":"bool","name":"_taker_premium","type":"bool"}],"name":"createEscrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"},{"internalType":"address payable","name":"_taker","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bool","name":"_maker_premium","type":"bool"},{"internalType":"bool","name":"_taker_premium","type":"bool"}],"name":"createEscrowNativeCoin","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_addressStableToWhitelist","type":"address"}],"name":"delStablesAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"escrows","outputs":[{"internalType":"address payable","name":"maker","type":"address"},{"internalType":"address payable","name":"taker","type":"address"},{"internalType":"bool","name":"maker_premium","type":"bool"},{"internalType":"bool","name":"taker_premium","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"takerfee","type":"uint256"},{"internalType":"uint256","name":"makerfee","type":"uint256"},{"internalType":"contract IERC20","name":"currency","type":"address"},{"internalType":"enum PaydeceEscrow.EscrowStatus","name":"status","type":"uint8"},{"internalType":"uint256","name":"created","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeMaker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTaker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"name":"feesAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesAvailableNativeCoin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"getState","outputs":[{"internalType":"enum PaydeceEscrow.EscrowStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"refundMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"refundMakerNativeCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"releaseEscrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"releaseEscrowNativeCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"releaseEscrowOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"releaseEscrowOwnerNativeCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeMaker","type":"uint256"}],"name":"setFeeMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeTaker","type":"uint256"}],"name":"setFeeTaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"setMarkAsPaid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"setMarkAsPaidOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeProcess","type":"uint256"}],"name":"setTimeProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timeProcess","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_currency","type":"address"}],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFeesNativeCoin","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060016000819055506200003a6200002e6200005060201b60201c565b6200005860201b60201c565b600060028190555060006003819055506200011e565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b614f00806200012e6000396000f3fe6080604052600436106101e35760003560e01c80638da5cb5b11610102578063cfc97c5911610095578063f2fde38b11610064578063f2fde38b14610684578063fd9e5388146106ad578063febe7fe2146106d6578063ff49257d146106ff576101e3565b8063cfc97c59146105e0578063d97bf7e014610609578063dd98722d14610632578063ed6531641461065b576101e3565b8063aa7ed660116100d1578063aa7ed6601461053a578063b0d50fed14610563578063cbb043781461058c578063ceff39d4146105b7576101e3565b80638da5cb5b146104925780639156f86f146104bd57806393f3be33146104e65780639bf7e30b1461050f576101e3565b806354fd4d501161017a5780637f06264e116101495780637f06264e146103ee5780638175ce38146104175780638595cf1a1461044057806389e4cba714610469576101e3565b806354fd4d50146103585780637008b50614610383578063715018a6146103ac578063749f1044146103c3576101e3565b806311c1f2ea116101b657806311c1f2ea146102b2578063164e68de146102c95780633c74494c146102f257806344c9af281461031b576101e3565b8063012f52ee146101e8578063021a7f5b1461022e57806306b5c437146102595780630de5861514610275575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613855565b610728565b6040516102259a99989796959493929190613f84565b60405180910390f35b34801561023a57600080fd5b50610243610803565b60405161025091906143c2565b60405180910390f35b610273600480360381019061026e91906138af565b610809565b005b34801561028157600080fd5b5061029c60048036038101906102979190613828565b610c36565b6040516102a991906143c2565b60405180910390f35b3480156102be57600080fd5b506102c7610c4e565b005b3480156102d557600080fd5b506102f060048036038101906102eb9190613828565b610d6a565b005b3480156102fe57600080fd5b506103196004803603810190610314919061392a565b610ec3565b005b34801561032757600080fd5b50610342600480360381019061033d9190613855565b6114c0565b60405161034f91906140a9565b60405180910390f35b34801561036457600080fd5b5061036d61168d565b60405161037a91906140c4565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613855565b6116ca565b005b3480156103b857600080fd5b506103c161177c565b005b3480156103cf57600080fd5b506103d8611790565b6040516103e591906143c2565b60405180910390f35b3480156103fa57600080fd5b5061041560048036038101906104109190613855565b611796565b005b34801561042357600080fd5b5061043e60048036038101906104399190613855565b61189d565b005b34801561044c57600080fd5b50610467600480360381019061046291906137ce565b611a78565b005b34801561047557600080fd5b50610490600480360381019061048b9190613855565b611adb565b005b34801561049e57600080fd5b506104a7611c28565b6040516104b49190613f69565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613855565b611c52565b005b3480156104f257600080fd5b5061050d60048036038101906105089190613855565b611c66565b005b34801561051b57600080fd5b50610524611d84565b60405161053191906143c2565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190613855565b611d8a565b005b34801561056f57600080fd5b5061058a60048036038101906105859190613855565b61206e565b005b34801561059857600080fd5b506105a1612082565b6040516105ae91906143c2565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190613855565b612088565b005b3480156105ec57600080fd5b50610607600480360381019061060291906137ce565b6120dd565b005b34801561061557600080fd5b50610630600480360381019061062b9190613855565b612140565b005b34801561063e57600080fd5b5061065960048036038101906106549190613855565b6123b9565b005b34801561066757600080fd5b50610682600480360381019061067d9190613855565b6125ff565b005b34801561069057600080fd5b506106ab60048036038101906106a691906137ce565b6126b1565b005b3480156106b957600080fd5b506106d460048036038101906106cf9190613855565b612735565b005b3480156106e257600080fd5b506106fd60048036038101906106f89190613855565b612799565b005b34801561070b57600080fd5b5061072660048036038101906107219190613855565b612955565b005b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160149054906101000a900460ff16908060010160159054906101000a900460ff16908060020154908060030154908060040154908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050160149054906101000a900460ff1690806006015490508a565b60055481565b6000600a81111561081d5761081c6148fa565b5b6006600087815260200190815260200160002060050160149054906101000a900460ff16600a811115610853576108526148fa565b5b14610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088a90614166565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f990614266565b60405180910390fd5b60006012905060006103e882600a61091a91906144e9565b60646109269190614607565b83600a61093391906144e9565b6003546109409190614607565b8761094b9190614607565b6109559190614465565b61095f9190614465565b9050831561096c57600090505b348186610979919061440f565b11156109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b190614386565b60405180910390fd5b6040518061014001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018515158152602001841515815260200186815260200160025481526020016003548152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016002600a811115610a5557610a546148fa565b5b8152602001428152506006600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff02191690831515021790555060608201518160010160156101000a81548160ff0219169083151502179055506080820151816002015560a0820151816003015560c0820151816004015560e08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160050160146101000a81548160ff0219169083600a811115610bd057610bcf6148fa565b5b02179055506101208201518160060155905050867fb9c704fb5855323e9ff1b6fde46a5af13e3edaa234b036dda5580af001fdcd81600660008a8152602001908152602001600020604051610c2591906143a6565b60405180910390a250505050505050565b60086020528060005260406000206000915090505481565b610c566129b9565b60008060045411610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c93906140e6565b60405180910390fd5b60045490508060046000828254610cb39190614661565b9250508190555060003373ffffffffffffffffffffffffffffffffffffffff1682604051610ce090613f54565b60006040518083038185875af1925050503d8060008114610d1d576040519150601f19603f3d011682016040523d82523d6000602084013e610d22565b606091505b5050905080610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d906142a6565b60405180910390fd5b5050565b610d726129b9565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec906140e6565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e869190614661565b92505081905550610ebf610e98611c28565b828473ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b5050565b6000600a811115610ed757610ed66148fa565b5b6006600088815260200190815260200160002060050160149054906101000a900460ff16600a811115610f0d57610f0c6148fa565b5b14610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4490614166565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090614146565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614206565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561109057600080fd5b505afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c891906139b7565b905060006103e882600a6110dc91906144e9565b60646110e89190614607565b83600a6110f591906144e9565b6003546111029190614607565b8861110d9190614607565b6111179190614465565b6111219190614465565b9050831561112e57600090505b60008573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161116b929190614020565b60206040518083038186803b15801561118357600080fd5b505afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb9190613882565b905081876111c9919061440f565b81101561120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290614246565b60405180910390fd5b6112433330848a61121c919061440f565b8973ffffffffffffffffffffffffffffffffffffffff16612abd909392919063ffffffff16565b6040518061014001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200186151581526020018515158152602001888152602001600254815260200160035481526020018773ffffffffffffffffffffffffffffffffffffffff1681526020016002600a8111156112dd576112dc6148fa565b5b815260200142815250600660008b815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff02191690831515021790555060608201518160010160156101000a81548160ff0219169083151502179055506080820151816002015560a0820151816003015560c0820151816004015560e08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160050160146101000a81548160ff0219169083600a811115611458576114576148fa565b5b02179055506101208201518160060155905050887fb9c704fb5855323e9ff1b6fde46a5af13e3edaa234b036dda5580af001fdcd81600660008c81526020019081526020016000206040516114ad91906143a6565b60405180910390a2505050505050505050565b60008060066000848152602001908152602001600020604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900460ff161515151581526020016001820160159054906101000a900460ff161515151581526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016005820160149054906101000a900460ff16600a81111561165d5761165c6148fa565b5b600a81111561166f5761166e6148fa565b5b81526020016006820154815250509050806101000151915050919050565b60606040518060400160405280600581526020017f342e312e30000000000000000000000000000000000000000000000000000000815250905090565b806006600082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176690614306565b60405180910390fd5b61177882612b46565b5050565b6117846129b9565b61178e6000612eff565b565b60025481565b61179e612fc5565b6117a66129b9565b60006006600083815260200190815260200160002060020154905060006006600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006006600085815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061186282848373ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b837f92f06134a92321b8e01bd56a933c7219a6e1c1a86c6edc15934670d7734a820c60405160405180910390a250505061189a613015565b50565b6118a5612fc5565b6118ad6129b9565b6002600a8111156118c1576118c06148fa565b5b6006600083815260200190815260200160002060050160149054906101000a900460ff16600a8111156118f7576118f66148fa565b5b14611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90614106565b60405180910390fd5b600a6006600083815260200190815260200160002060050160146101000a81548160ff0219169083600a811115611971576119706148fa565b5b0217905550611a236006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660066000848152602001908152602001600020600201546006600085815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b807f038a8bef4ec5fd0d0ee7b868e8b031f19de997dd748733e79b965be714d2b47060066000848152602001908152602001600020604051611a6591906143a6565b60405180910390a2611a75613015565b50565b611a806129b9565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ae3612fc5565b611aeb6129b9565b60006006600083815260200190815260200160002060020154905060006006600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1683604051611b6790613f54565b60006040518083038185875af1925050503d8060008114611ba4576040519150601f19603f3d011682016040523d82523d6000602084013e611ba9565b606091505b5050905080611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be4906142a6565b60405180910390fd5b837f92f06134a92321b8e01bd56a933c7219a6e1c1a86c6edc15934670d7734a820c60405160405180910390a2505050611c25613015565b50565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c5a6129b9565b611c6381612b46565b50565b611c6e6129b9565b6002600a811115611c8257611c816148fa565b5b6006600083815260200190815260200160002060050160149054906101000a900460ff16600a811115611cb857611cb76148fa565b5b14611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef90614106565b60405180910390fd5b60036006600083815260200190815260200160002060050160146101000a81548160ff0219169083600a811115611d3257611d316148fa565b5b0217905550807f0999467eab1f4bb26af4adab17b3b2b5a7f4f2c8ab523efed335952d0acd2f9260066000848152602001908152602001600020604051611d7991906143a6565b60405180910390a250565b60035481565b611d92612fc5565b806006600082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90614306565b60405180910390fd5b6002600a811115611e4b57611e4a6148fa565b5b6006600084815260200190815260200160002060050160149054906101000a900460ff16600a811115611e8157611e806148fa565b5b14611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890614106565b60405180910390fd5b6000600660008481526020019081526020016000206006015442611ee59190614661565b90506005548111611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290614326565b60405180910390fd5b60096006600085815260200190815260200160002060050160146101000a81548160ff0219169083600a811115611f6557611f646148fa565b5b02179055506120176006600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660066000868152602001908152602001600020600201546006600087815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b827fe48926918072f02698855f18c60680735ec411bd8b633e8c311a45c76ccf6f736006600086815260200190815260200160002060405161205991906143a6565b60405180910390a2505061206b613015565b50565b6120766129b9565b61207f8161301f565b50565b60045481565b6120906129b9565b600081116120d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ca906142c6565b60405180910390fd5b8060058190555050565b6120e56129b9565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612148612fc5565b806006600082815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e4906141e6565b60405180910390fd5b6002600a811115612201576122006148fa565b5b6006600084815260200190815260200160002060050160149054906101000a900460ff16600a811115612237576122366148fa565b5b14612277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226e90614106565b60405180910390fd5b600a6006600084815260200190815260200160002060050160146101000a81548160ff0219169083600a8111156122b1576122b06148fa565b5b02179055506123636006600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660066000858152602001908152602001600020600201546006600086815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b817f8474e53e7bf85a2f825bf09676b2240db06a00c85656f6b527204520159da205600660008581526020019081526020016000206040516123a591906143a6565b60405180910390a2506123b6613015565b50565b6123c1612fc5565b6123c96129b9565b6002600a8111156123dd576123dc6148fa565b5b6006600083815260200190815260200160002060050160149054906101000a900460ff16600a811115612413576124126148fa565b5b14612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90614106565b60405180910390fd5b60006006600083815260200190815260200160002060060154426124779190614661565b905060055481116124bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b490614326565b60405180910390fd5b60096006600084815260200190815260200160002060050160146101000a81548160ff0219169083600a8111156124f7576124f66148fa565b5b02179055506125a96006600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660066000858152602001908152602001600020600201546006600086815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b817f4ea5acfb4d0c00c3ab05ed796f65f8f13a07d56367c7ef2afd32b4f4307a2474600660008581526020019081526020016000206040516125eb91906143a6565b60405180910390a2506125fc613015565b50565b806006600082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90614306565b60405180910390fd5b6126ad8261301f565b5050565b6126b96129b9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272090614126565b60405180910390fd5b61273281612eff565b50565b61273d6129b9565b6000811015801561275057506103e88111155b61278f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278690614286565b60405180910390fd5b8060038190555050565b806006600082815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461283e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612835906141e6565b60405180910390fd5b6002600a811115612852576128516148fa565b5b6006600084815260200190815260200160002060050160149054906101000a900460ff16600a811115612888576128876148fa565b5b146128c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf90614106565b60405180910390fd5b60036006600084815260200190815260200160002060050160146101000a81548160ff0219169083600a811115612902576129016148fa565b5b0217905550817fb1e65a896d9b9f41385f338bebb76be7511226fadb0438028d23e83668b1b0cb6006600085815260200190815260200160002060405161294991906143a6565b60405180910390a25050565b61295d6129b9565b6000811015801561297057506103e88111155b6129af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a690614286565b60405180910390fd5b8060028190555050565b6129c16134b1565b73ffffffffffffffffffffffffffffffffffffffff166129df611c28565b73ffffffffffffffffffffffffffffffffffffffff1614612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c90614226565b60405180910390fd5b565b612ab88363a9059cbb60e01b8484604051602401612a56929190614080565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506134b9565b505050565b612b40846323b872dd60e01b858585604051602401612ade93929190614049565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506134b9565b50505050565b612b4e612fc5565b6002600a811115612b6257612b616148fa565b5b6006600083815260200190815260200160002060050160149054906101000a900460ff16600a811115612b9857612b976148fa565b5b14612bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcf90614186565b60405180910390fd5b60006012905060006103e882600a612bf091906144e9565b6064612bfc9190614607565b83600a612c0991906144e9565b6006600087815260200190815260200160002060040154612c2a9190614607565b6006600087815260200190815260200160002060020154612c4b9190614607565b612c559190614465565b612c5f9190614465565b905060006103e883600a612c7391906144e9565b6064612c7f9190614607565b84600a612c8c91906144e9565b6006600088815260200190815260200160002060030154612cad9190614607565b6006600088815260200190815260200160002060020154612cce9190614607565b612cd89190614465565b612ce29190614465565b90506006600085815260200190815260200160002060010160149054906101000a900460ff1615612d1257600091505b6006600085815260200190815260200160002060010160159054906101000a900460ff1615612d4057600090505b8082612d4c919061440f565b60046000828254612d5d919061440f565b9250508190555060046006600086815260200190815260200160002060050160146101000a81548160ff0219169083600a811115612d9e57612d9d6148fa565b5b021790555060006006600086815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826006600088815260200190815260200160002060020154612e149190614661565b604051612e2090613f54565b60006040518083038185875af1925050503d8060008114612e5d576040519150601f19603f3d011682016040523d82523d6000602084013e612e62565b606091505b5050905080612ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9d906142a6565b60405180910390fd5b847f7adc6d91cdeb9cc4fd12a7e2cc84d7daaff5b050083959c5a563c0da9630074560066000888152602001908152602001600020604051612ee891906143a6565b60405180910390a250505050612efc613015565b50565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6002600054141561300b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300290614366565b60405180910390fd5b6002600081905550565b6001600081905550565b613027612fc5565b6003600a81111561303b5761303a6148fa565b5b6006600083815260200190815260200160002060050160149054906101000a900460ff16600a811115613071576130706148fa565b5b146130b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a8906141a6565b60405180910390fd5b60006006600083815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561312f57600080fd5b505afa158015613143573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316791906139b7565b905060006103e882600a61317b91906144e9565b60646131879190614607565b83600a61319491906144e9565b60066000878152602001908152602001600020600401546131b59190614607565b60066000878152602001908152602001600020600201546131d69190614607565b6131e09190614465565b6131ea9190614465565b905060006103e883600a6131fe91906144e9565b606461320a9190614607565b84600a61321791906144e9565b60066000888152602001908152602001600020600301546132389190614607565b60066000888152602001908152602001600020600201546132599190614607565b6132639190614465565b61326d9190614465565b90506006600085815260200190815260200160002060010160149054906101000a900460ff161561329d57600091505b6006600085815260200190815260200160002060010160159054906101000a900460ff16156132cb57600090505b80826132d7919061440f565b600860006006600088815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461335b919061440f565b9250508190555060046006600086815260200190815260200160002060050160146101000a81548160ff0219169083600a81111561339c5761339b6148fa565b5b02179055506134596006600086815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260066000888152602001908152602001600020600201546133fd9190614661565b6006600088815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b837f7adc6d91cdeb9cc4fd12a7e2cc84d7daaff5b050083959c5a563c0da963007456006600087815260200190815260200160002060405161349b91906143a6565b60405180910390a25050506134ae613015565b50565b600033905090565b600061351b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166135809092919063ffffffff16565b905060008151111561357b578080602001905181019061353b91906137fb565b61357a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357190614346565b60405180910390fd5b5b505050565b606061358f8484600085613598565b90509392505050565b6060824710156135dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d4906141c6565b60405180910390fd5b6135e6856136ac565b613625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361c906142e6565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161364e9190613f3d565b60006040518083038185875af1925050503d806000811461368b576040519150601f19603f3d011682016040523d82523d6000602084013e613690565b606091505b50915091506136a08282866136bf565b92505050949350505050565b600080823b905060008111915050919050565b606083156136cf5782905061371f565b6000835111156136e25782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371691906140c4565b60405180910390fd5b9392505050565b60008135905061373581614e40565b92915050565b60008135905061374a81614e57565b92915050565b60008135905061375f81614e6e565b92915050565b60008151905061377481614e6e565b92915050565b60008135905061378981614e85565b92915050565b60008135905061379e81614e9c565b92915050565b6000815190506137b381614e9c565b92915050565b6000815190506137c881614eb3565b92915050565b6000602082840312156137e4576137e3614929565b5b60006137f284828501613726565b91505092915050565b60006020828403121561381157613810614929565b5b600061381f84828501613765565b91505092915050565b60006020828403121561383e5761383d614929565b5b600061384c8482850161377a565b91505092915050565b60006020828403121561386b5761386a614929565b5b60006138798482850161378f565b91505092915050565b60006020828403121561389857613897614929565b5b60006138a6848285016137a4565b91505092915050565b600080600080600060a086880312156138cb576138ca614929565b5b60006138d98882890161378f565b95505060206138ea8882890161373b565b94505060406138fb8882890161378f565b935050606061390c88828901613750565b925050608061391d88828901613750565b9150509295509295909350565b60008060008060008060c0878903121561394757613946614929565b5b600061395589828a0161378f565b965050602061396689828a0161373b565b955050604061397789828a0161378f565b945050606061398889828a0161377a565b935050608061399989828a01613750565b92505060a06139aa89828a01613750565b9150509295509295509295565b6000602082840312156139cd576139cc614929565b5b60006139db848285016137b9565b91505092915050565b6139ed8161470b565b82525050565b6139fc8161470b565b82525050565b613a0b816146f9565b82525050565b613a1a8161471d565b82525050565b613a298161471d565b82525050565b6000613a3a826143dd565b613a4481856143f3565b9350613a548185602086016147cd565b80840191505092915050565b613a6981614785565b82525050565b613a7881614785565b82525050565b613a8781614797565b82525050565b613a9681614797565b82525050565b6000613aa7826143e8565b613ab181856143fe565b9350613ac18185602086016147cd565b613aca8161492e565b840191505092915050565b6000613ae26016836143fe565b9150613aed82614973565b602082019050919050565b6000613b05602a836143fe565b9150613b108261499c565b604082019050919050565b6000613b286026836143fe565b9150613b33826149eb565b604082019050919050565b6000613b4b6020836143fe565b9150613b5682614a3a565b602082019050919050565b6000613b6e6015836143fe565b9150613b7982614a63565b602082019050919050565b6000613b91601b836143fe565b9150613b9c82614a8c565b602082019050919050565b6000613bb46030836143fe565b9150613bbf82614ab5565b604082019050919050565b6000613bd76026836143fe565b9150613be282614b04565b604082019050919050565b6000613bfa6018836143fe565b9150613c0582614b53565b602082019050919050565b6000613c1d6021836143fe565b9150613c2882614b7c565b604082019050919050565b6000613c406020836143fe565b9150613c4b82614bcb565b602082019050919050565b6000613c63601d836143fe565b9150613c6e82614bf4565b602082019050919050565b6000613c866021836143fe565b9150613c9182614c1d565b604082019050919050565b6000613ca9601c836143fe565b9150613cb482614c6c565b602082019050919050565b6000613ccc6000836143f3565b9150613cd782614c95565b600082019050919050565b6000613cef6010836143fe565b9150613cfa82614c98565b602082019050919050565b6000613d126018836143fe565b9150613d1d82614cc1565b602082019050919050565b6000613d35601d836143fe565b9150613d4082614cea565b602082019050919050565b6000613d586018836143fe565b9150613d6382614d13565b602082019050919050565b6000613d7b6024836143fe565b9150613d8682614d3c565b604082019050919050565b6000613d9e602a836143fe565b9150613da982614d8b565b604082019050919050565b6000613dc1601f836143fe565b9150613dcc82614dda565b602082019050919050565b6000613de46010836143fe565b9150613def82614e03565b602082019050919050565b61014082016000808301549050613e1081614800565b613e1d60008601826139e4565b5060018301549050613e2e81614800565b613e3b60208601826139e4565b50613e458161484e565b613e526040860182613a11565b50613e5c81614882565b613e696060860182613a11565b5060028301549050613e7a81614834565b613e876080860182613f1f565b5060038301549050613e9881614834565b613ea560a0860182613f1f565b5060048301549050613eb681614834565b613ec360c0860182613f1f565b5060058301549050613ed48161481a565b613ee160e0860182613a60565b50613eeb81614868565b613ef9610100860182613a7e565b5060068301549050613f0a81614834565b613f18610120860182613f1f565b5050505050565b613f288161476e565b82525050565b613f378161476e565b82525050565b6000613f498284613a2f565b915081905092915050565b6000613f5f82613cbf565b9150819050919050565b6000602082019050613f7e6000830184613a02565b92915050565b600061014082019050613f9a600083018d6139f3565b613fa7602083018c6139f3565b613fb4604083018b613a20565b613fc1606083018a613a20565b613fce6080830189613f2e565b613fdb60a0830188613f2e565b613fe860c0830187613f2e565b613ff560e0830186613a6f565b614003610100830185613a8d565b614011610120830184613f2e565b9b9a5050505050505050505050565b60006040820190506140356000830185613a02565b6140426020830184613a02565b9392505050565b600060608201905061405e6000830186613a02565b61406b6020830185613a02565b6140786040830184613f2e565b949350505050565b60006040820190506140956000830185613a02565b6140a26020830184613f2e565b9392505050565b60006020820190506140be6000830184613a8d565b92915050565b600060208201905081810360008301526140de8184613a9c565b905092915050565b600060208201905081810360008301526140ff81613ad5565b9050919050565b6000602082019050818103600083015261411f81613af8565b9050919050565b6000602082019050818103600083015261413f81613b1b565b9050919050565b6000602082019050818103600083015261415f81613b3e565b9050919050565b6000602082019050818103600083015261417f81613b61565b9050919050565b6000602082019050818103600083015261419f81613b84565b9050919050565b600060208201905081810360008301526141bf81613ba7565b9050919050565b600060208201905081810360008301526141df81613bca565b9050919050565b600060208201905081810360008301526141ff81613bed565b9050919050565b6000602082019050818103600083015261421f81613c10565b9050919050565b6000602082019050818103600083015261423f81613c33565b9050919050565b6000602082019050818103600083015261425f81613c56565b9050919050565b6000602082019050818103600083015261427f81613c79565b9050919050565b6000602082019050818103600083015261429f81613c9c565b9050919050565b600060208201905081810360008301526142bf81613ce2565b9050919050565b600060208201905081810360008301526142df81613d05565b9050919050565b600060208201905081810360008301526142ff81613d28565b9050919050565b6000602082019050818103600083015261431f81613d4b565b9050919050565b6000602082019050818103600083015261433f81613d6e565b9050919050565b6000602082019050818103600083015261435f81613d91565b9050919050565b6000602082019050818103600083015261437f81613db4565b9050919050565b6000602082019050818103600083015261439f81613dd7565b9050919050565b6000610140820190506143bc6000830184613dfa565b92915050565b60006020820190506143d76000830184613f2e565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600061441a8261476e565b91506144258361476e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561445a5761445961489c565b5b828201905092915050565b60006144708261476e565b915061447b8361476e565b92508261448b5761448a6148cb565b5b828204905092915050565b6000808291508390505b60018511156144e0578086048111156144bc576144bb61489c565b5b60018516156144cb5780820291505b80810290506144d985614966565b94506144a0565b94509492505050565b60006144f48261476e565b91506144ff83614778565b925061452c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614534565b905092915050565b6000826145445760019050614600565b816145525760009050614600565b81600181146145685760028114614572576145a1565b6001915050614600565b60ff8411156145845761458361489c565b5b8360020a91508482111561459b5761459a61489c565b5b50614600565b5060208310610133831016604e8410600b84101617156145d65782820a9050838111156145d1576145d061489c565b5b614600565b6145e38484846001614496565b925090508184048111156145fa576145f961489c565b5b81810290505b9392505050565b60006146128261476e565b915061461d8361476e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146565761465561489c565b5b828202905092915050565b600061466c8261476e565b91506146778361476e565b92508282101561468a5761468961489c565b5b828203905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060ff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060ff82169050919050565b6000819050919050565b60006147048261474e565b9050919050565b60006147168261474e565b9050919050565b60008115159050919050565b6000614734826146f9565b9050919050565b600081905061474982614e2c565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614790826147a9565b9050919050565b60006147a28261473b565b9050919050565b60006147b4826147bb565b9050919050565b60006147c68261474e565b9050919050565b60005b838110156147eb5780820151818401526020810190506147d0565b838111156147fa576000848401525b50505050565b600061481361480e8361493f565b614695565b9050919050565b600061482d6148288361493f565b6146c2565b9050919050565b60006148476148428361493f565b6146ef565b9050919050565b600061486161485c8361494c565b6146b5565b9050919050565b600061487b6148768361494c565b6146e2565b9050919050565b600061489561489083614959565b6146b5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160001c9050919050565b60008160a01c9050919050565b60008160a81c9050919050565b60008160011c9050919050565b7f416d6f756e74203e2066656573417661696c61626c6500000000000000000000600082015250565b7f456c2065737461646f207469656e6520717565207365722043525950544f535f60008201527f494e5f435553544f445900000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4164647265737320537461626c6520746f2062652077686974656c6973746564600082015250565b7f457363726f7720616c7265616479206578697374730000000000000000000000600082015250565b7f5553445420686173206e6f74206265656e206465706f73697465640000000000600082015250565b7f456c2065737461646f207469656e652071756520657374617220656e2046494160008201527f54434f494e5f5452414e53464552454400000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792054616b65722063616e2063616c6c20746869730000000000000000600082015250565b7f74616b65722063616e6e6f74206265207468652073616d65206173206d616b6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54616b657220617070726f766520746f20457363726f77206669727374000000600082015250565b7f54616b65722063616e6e6f74206265207468652073616d65206173206d616b6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f546865206665652063616e2062652066726f6d20302520746f20312500000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f5468652074696d6550726f636573732063616e20626520300000000000000000600082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f4f6e6c79204d616b65722063616e2063616c6c20746869730000000000000000600082015250565b7f456c207469656d706f20746f6461766961206c6c65676f20612073752074657260008201527f6d696e6f00000000000000000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f496e636f727265637420616d6f756e7400000000000000000000000000000000600082015250565b600b8110614e3d57614e3c6148fa565b5b50565b614e49816146f9565b8114614e5457600080fd5b50565b614e608161470b565b8114614e6b57600080fd5b50565b614e778161471d565b8114614e8257600080fd5b50565b614e8e81614729565b8114614e9957600080fd5b50565b614ea58161476e565b8114614eb057600080fd5b50565b614ebc81614778565b8114614ec757600080fd5b5056fea26469706673582212209003935e574ac8d179f4f519c1faadd7736ad82af3affa3d8853d5743ff221e964736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101e35760003560e01c80638da5cb5b11610102578063cfc97c5911610095578063f2fde38b11610064578063f2fde38b14610684578063fd9e5388146106ad578063febe7fe2146106d6578063ff49257d146106ff576101e3565b8063cfc97c59146105e0578063d97bf7e014610609578063dd98722d14610632578063ed6531641461065b576101e3565b8063aa7ed660116100d1578063aa7ed6601461053a578063b0d50fed14610563578063cbb043781461058c578063ceff39d4146105b7576101e3565b80638da5cb5b146104925780639156f86f146104bd57806393f3be33146104e65780639bf7e30b1461050f576101e3565b806354fd4d501161017a5780637f06264e116101495780637f06264e146103ee5780638175ce38146104175780638595cf1a1461044057806389e4cba714610469576101e3565b806354fd4d50146103585780637008b50614610383578063715018a6146103ac578063749f1044146103c3576101e3565b806311c1f2ea116101b657806311c1f2ea146102b2578063164e68de146102c95780633c74494c146102f257806344c9af281461031b576101e3565b8063012f52ee146101e8578063021a7f5b1461022e57806306b5c437146102595780630de5861514610275575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613855565b610728565b6040516102259a99989796959493929190613f84565b60405180910390f35b34801561023a57600080fd5b50610243610803565b60405161025091906143c2565b60405180910390f35b610273600480360381019061026e91906138af565b610809565b005b34801561028157600080fd5b5061029c60048036038101906102979190613828565b610c36565b6040516102a991906143c2565b60405180910390f35b3480156102be57600080fd5b506102c7610c4e565b005b3480156102d557600080fd5b506102f060048036038101906102eb9190613828565b610d6a565b005b3480156102fe57600080fd5b506103196004803603810190610314919061392a565b610ec3565b005b34801561032757600080fd5b50610342600480360381019061033d9190613855565b6114c0565b60405161034f91906140a9565b60405180910390f35b34801561036457600080fd5b5061036d61168d565b60405161037a91906140c4565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613855565b6116ca565b005b3480156103b857600080fd5b506103c161177c565b005b3480156103cf57600080fd5b506103d8611790565b6040516103e591906143c2565b60405180910390f35b3480156103fa57600080fd5b5061041560048036038101906104109190613855565b611796565b005b34801561042357600080fd5b5061043e60048036038101906104399190613855565b61189d565b005b34801561044c57600080fd5b50610467600480360381019061046291906137ce565b611a78565b005b34801561047557600080fd5b50610490600480360381019061048b9190613855565b611adb565b005b34801561049e57600080fd5b506104a7611c28565b6040516104b49190613f69565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613855565b611c52565b005b3480156104f257600080fd5b5061050d60048036038101906105089190613855565b611c66565b005b34801561051b57600080fd5b50610524611d84565b60405161053191906143c2565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190613855565b611d8a565b005b34801561056f57600080fd5b5061058a60048036038101906105859190613855565b61206e565b005b34801561059857600080fd5b506105a1612082565b6040516105ae91906143c2565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190613855565b612088565b005b3480156105ec57600080fd5b50610607600480360381019061060291906137ce565b6120dd565b005b34801561061557600080fd5b50610630600480360381019061062b9190613855565b612140565b005b34801561063e57600080fd5b5061065960048036038101906106549190613855565b6123b9565b005b34801561066757600080fd5b50610682600480360381019061067d9190613855565b6125ff565b005b34801561069057600080fd5b506106ab60048036038101906106a691906137ce565b6126b1565b005b3480156106b957600080fd5b506106d460048036038101906106cf9190613855565b612735565b005b3480156106e257600080fd5b506106fd60048036038101906106f89190613855565b612799565b005b34801561070b57600080fd5b5061072660048036038101906107219190613855565b612955565b005b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160149054906101000a900460ff16908060010160159054906101000a900460ff16908060020154908060030154908060040154908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050160149054906101000a900460ff1690806006015490508a565b60055481565b6000600a81111561081d5761081c6148fa565b5b6006600087815260200190815260200160002060050160149054906101000a900460ff16600a811115610853576108526148fa565b5b14610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088a90614166565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f990614266565b60405180910390fd5b60006012905060006103e882600a61091a91906144e9565b60646109269190614607565b83600a61093391906144e9565b6003546109409190614607565b8761094b9190614607565b6109559190614465565b61095f9190614465565b9050831561096c57600090505b348186610979919061440f565b11156109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b190614386565b60405180910390fd5b6040518061014001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018515158152602001841515815260200186815260200160025481526020016003548152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016002600a811115610a5557610a546148fa565b5b8152602001428152506006600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff02191690831515021790555060608201518160010160156101000a81548160ff0219169083151502179055506080820151816002015560a0820151816003015560c0820151816004015560e08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160050160146101000a81548160ff0219169083600a811115610bd057610bcf6148fa565b5b02179055506101208201518160060155905050867fb9c704fb5855323e9ff1b6fde46a5af13e3edaa234b036dda5580af001fdcd81600660008a8152602001908152602001600020604051610c2591906143a6565b60405180910390a250505050505050565b60086020528060005260406000206000915090505481565b610c566129b9565b60008060045411610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c93906140e6565b60405180910390fd5b60045490508060046000828254610cb39190614661565b9250508190555060003373ffffffffffffffffffffffffffffffffffffffff1682604051610ce090613f54565b60006040518083038185875af1925050503d8060008114610d1d576040519150601f19603f3d011682016040523d82523d6000602084013e610d22565b606091505b5050905080610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d906142a6565b60405180910390fd5b5050565b610d726129b9565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec906140e6565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e869190614661565b92505081905550610ebf610e98611c28565b828473ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b5050565b6000600a811115610ed757610ed66148fa565b5b6006600088815260200190815260200160002060050160149054906101000a900460ff16600a811115610f0d57610f0c6148fa565b5b14610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4490614166565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090614146565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614206565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561109057600080fd5b505afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c891906139b7565b905060006103e882600a6110dc91906144e9565b60646110e89190614607565b83600a6110f591906144e9565b6003546111029190614607565b8861110d9190614607565b6111179190614465565b6111219190614465565b9050831561112e57600090505b60008573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161116b929190614020565b60206040518083038186803b15801561118357600080fd5b505afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb9190613882565b905081876111c9919061440f565b81101561120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290614246565b60405180910390fd5b6112433330848a61121c919061440f565b8973ffffffffffffffffffffffffffffffffffffffff16612abd909392919063ffffffff16565b6040518061014001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200186151581526020018515158152602001888152602001600254815260200160035481526020018773ffffffffffffffffffffffffffffffffffffffff1681526020016002600a8111156112dd576112dc6148fa565b5b815260200142815250600660008b815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff02191690831515021790555060608201518160010160156101000a81548160ff0219169083151502179055506080820151816002015560a0820151816003015560c0820151816004015560e08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160050160146101000a81548160ff0219169083600a811115611458576114576148fa565b5b02179055506101208201518160060155905050887fb9c704fb5855323e9ff1b6fde46a5af13e3edaa234b036dda5580af001fdcd81600660008c81526020019081526020016000206040516114ad91906143a6565b60405180910390a2505050505050505050565b60008060066000848152602001908152602001600020604051806101400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900460ff161515151581526020016001820160159054906101000a900460ff161515151581526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016005820160149054906101000a900460ff16600a81111561165d5761165c6148fa565b5b600a81111561166f5761166e6148fa565b5b81526020016006820154815250509050806101000151915050919050565b60606040518060400160405280600581526020017f342e312e30000000000000000000000000000000000000000000000000000000815250905090565b806006600082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461176f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176690614306565b60405180910390fd5b61177882612b46565b5050565b6117846129b9565b61178e6000612eff565b565b60025481565b61179e612fc5565b6117a66129b9565b60006006600083815260200190815260200160002060020154905060006006600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006006600085815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061186282848373ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b837f92f06134a92321b8e01bd56a933c7219a6e1c1a86c6edc15934670d7734a820c60405160405180910390a250505061189a613015565b50565b6118a5612fc5565b6118ad6129b9565b6002600a8111156118c1576118c06148fa565b5b6006600083815260200190815260200160002060050160149054906101000a900460ff16600a8111156118f7576118f66148fa565b5b14611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90614106565b60405180910390fd5b600a6006600083815260200190815260200160002060050160146101000a81548160ff0219169083600a811115611971576119706148fa565b5b0217905550611a236006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660066000848152602001908152602001600020600201546006600085815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b807f038a8bef4ec5fd0d0ee7b868e8b031f19de997dd748733e79b965be714d2b47060066000848152602001908152602001600020604051611a6591906143a6565b60405180910390a2611a75613015565b50565b611a806129b9565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ae3612fc5565b611aeb6129b9565b60006006600083815260200190815260200160002060020154905060006006600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1683604051611b6790613f54565b60006040518083038185875af1925050503d8060008114611ba4576040519150601f19603f3d011682016040523d82523d6000602084013e611ba9565b606091505b5050905080611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be4906142a6565b60405180910390fd5b837f92f06134a92321b8e01bd56a933c7219a6e1c1a86c6edc15934670d7734a820c60405160405180910390a2505050611c25613015565b50565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c5a6129b9565b611c6381612b46565b50565b611c6e6129b9565b6002600a811115611c8257611c816148fa565b5b6006600083815260200190815260200160002060050160149054906101000a900460ff16600a811115611cb857611cb76148fa565b5b14611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef90614106565b60405180910390fd5b60036006600083815260200190815260200160002060050160146101000a81548160ff0219169083600a811115611d3257611d316148fa565b5b0217905550807f0999467eab1f4bb26af4adab17b3b2b5a7f4f2c8ab523efed335952d0acd2f9260066000848152602001908152602001600020604051611d7991906143a6565b60405180910390a250565b60035481565b611d92612fc5565b806006600082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90614306565b60405180910390fd5b6002600a811115611e4b57611e4a6148fa565b5b6006600084815260200190815260200160002060050160149054906101000a900460ff16600a811115611e8157611e806148fa565b5b14611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890614106565b60405180910390fd5b6000600660008481526020019081526020016000206006015442611ee59190614661565b90506005548111611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290614326565b60405180910390fd5b60096006600085815260200190815260200160002060050160146101000a81548160ff0219169083600a811115611f6557611f646148fa565b5b02179055506120176006600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660066000868152602001908152602001600020600201546006600087815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b827fe48926918072f02698855f18c60680735ec411bd8b633e8c311a45c76ccf6f736006600086815260200190815260200160002060405161205991906143a6565b60405180910390a2505061206b613015565b50565b6120766129b9565b61207f8161301f565b50565b60045481565b6120906129b9565b600081116120d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ca906142c6565b60405180910390fd5b8060058190555050565b6120e56129b9565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612148612fc5565b806006600082815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e4906141e6565b60405180910390fd5b6002600a811115612201576122006148fa565b5b6006600084815260200190815260200160002060050160149054906101000a900460ff16600a811115612237576122366148fa565b5b14612277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226e90614106565b60405180910390fd5b600a6006600084815260200190815260200160002060050160146101000a81548160ff0219169083600a8111156122b1576122b06148fa565b5b02179055506123636006600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660066000858152602001908152602001600020600201546006600086815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b817f8474e53e7bf85a2f825bf09676b2240db06a00c85656f6b527204520159da205600660008581526020019081526020016000206040516123a591906143a6565b60405180910390a2506123b6613015565b50565b6123c1612fc5565b6123c96129b9565b6002600a8111156123dd576123dc6148fa565b5b6006600083815260200190815260200160002060050160149054906101000a900460ff16600a811115612413576124126148fa565b5b14612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90614106565b60405180910390fd5b60006006600083815260200190815260200160002060060154426124779190614661565b905060055481116124bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b490614326565b60405180910390fd5b60096006600084815260200190815260200160002060050160146101000a81548160ff0219169083600a8111156124f7576124f66148fa565b5b02179055506125a96006600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660066000858152602001908152602001600020600201546006600086815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b817f4ea5acfb4d0c00c3ab05ed796f65f8f13a07d56367c7ef2afd32b4f4307a2474600660008581526020019081526020016000206040516125eb91906143a6565b60405180910390a2506125fc613015565b50565b806006600082815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90614306565b60405180910390fd5b6126ad8261301f565b5050565b6126b96129b9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272090614126565b60405180910390fd5b61273281612eff565b50565b61273d6129b9565b6000811015801561275057506103e88111155b61278f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278690614286565b60405180910390fd5b8060038190555050565b806006600082815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461283e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612835906141e6565b60405180910390fd5b6002600a811115612852576128516148fa565b5b6006600084815260200190815260200160002060050160149054906101000a900460ff16600a811115612888576128876148fa565b5b146128c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf90614106565b60405180910390fd5b60036006600084815260200190815260200160002060050160146101000a81548160ff0219169083600a811115612902576129016148fa565b5b0217905550817fb1e65a896d9b9f41385f338bebb76be7511226fadb0438028d23e83668b1b0cb6006600085815260200190815260200160002060405161294991906143a6565b60405180910390a25050565b61295d6129b9565b6000811015801561297057506103e88111155b6129af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a690614286565b60405180910390fd5b8060028190555050565b6129c16134b1565b73ffffffffffffffffffffffffffffffffffffffff166129df611c28565b73ffffffffffffffffffffffffffffffffffffffff1614612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c90614226565b60405180910390fd5b565b612ab88363a9059cbb60e01b8484604051602401612a56929190614080565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506134b9565b505050565b612b40846323b872dd60e01b858585604051602401612ade93929190614049565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506134b9565b50505050565b612b4e612fc5565b6002600a811115612b6257612b616148fa565b5b6006600083815260200190815260200160002060050160149054906101000a900460ff16600a811115612b9857612b976148fa565b5b14612bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcf90614186565b60405180910390fd5b60006012905060006103e882600a612bf091906144e9565b6064612bfc9190614607565b83600a612c0991906144e9565b6006600087815260200190815260200160002060040154612c2a9190614607565b6006600087815260200190815260200160002060020154612c4b9190614607565b612c559190614465565b612c5f9190614465565b905060006103e883600a612c7391906144e9565b6064612c7f9190614607565b84600a612c8c91906144e9565b6006600088815260200190815260200160002060030154612cad9190614607565b6006600088815260200190815260200160002060020154612cce9190614607565b612cd89190614465565b612ce29190614465565b90506006600085815260200190815260200160002060010160149054906101000a900460ff1615612d1257600091505b6006600085815260200190815260200160002060010160159054906101000a900460ff1615612d4057600090505b8082612d4c919061440f565b60046000828254612d5d919061440f565b9250508190555060046006600086815260200190815260200160002060050160146101000a81548160ff0219169083600a811115612d9e57612d9d6148fa565b5b021790555060006006600086815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826006600088815260200190815260200160002060020154612e149190614661565b604051612e2090613f54565b60006040518083038185875af1925050503d8060008114612e5d576040519150601f19603f3d011682016040523d82523d6000602084013e612e62565b606091505b5050905080612ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9d906142a6565b60405180910390fd5b847f7adc6d91cdeb9cc4fd12a7e2cc84d7daaff5b050083959c5a563c0da9630074560066000888152602001908152602001600020604051612ee891906143a6565b60405180910390a250505050612efc613015565b50565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6002600054141561300b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300290614366565b60405180910390fd5b6002600081905550565b6001600081905550565b613027612fc5565b6003600a81111561303b5761303a6148fa565b5b6006600083815260200190815260200160002060050160149054906101000a900460ff16600a811115613071576130706148fa565b5b146130b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a8906141a6565b60405180910390fd5b60006006600083815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561312f57600080fd5b505afa158015613143573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316791906139b7565b905060006103e882600a61317b91906144e9565b60646131879190614607565b83600a61319491906144e9565b60066000878152602001908152602001600020600401546131b59190614607565b60066000878152602001908152602001600020600201546131d69190614607565b6131e09190614465565b6131ea9190614465565b905060006103e883600a6131fe91906144e9565b606461320a9190614607565b84600a61321791906144e9565b60066000888152602001908152602001600020600301546132389190614607565b60066000888152602001908152602001600020600201546132599190614607565b6132639190614465565b61326d9190614465565b90506006600085815260200190815260200160002060010160149054906101000a900460ff161561329d57600091505b6006600085815260200190815260200160002060010160159054906101000a900460ff16156132cb57600090505b80826132d7919061440f565b600860006006600088815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461335b919061440f565b9250508190555060046006600086815260200190815260200160002060050160146101000a81548160ff0219169083600a81111561339c5761339b6148fa565b5b02179055506134596006600086815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260066000888152602001908152602001600020600201546133fd9190614661565b6006600088815260200190815260200160002060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a379092919063ffffffff16565b837f7adc6d91cdeb9cc4fd12a7e2cc84d7daaff5b050083959c5a563c0da963007456006600087815260200190815260200160002060405161349b91906143a6565b60405180910390a25050506134ae613015565b50565b600033905090565b600061351b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166135809092919063ffffffff16565b905060008151111561357b578080602001905181019061353b91906137fb565b61357a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357190614346565b60405180910390fd5b5b505050565b606061358f8484600085613598565b90509392505050565b6060824710156135dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d4906141c6565b60405180910390fd5b6135e6856136ac565b613625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361c906142e6565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161364e9190613f3d565b60006040518083038185875af1925050503d806000811461368b576040519150601f19603f3d011682016040523d82523d6000602084013e613690565b606091505b50915091506136a08282866136bf565b92505050949350505050565b600080823b905060008111915050919050565b606083156136cf5782905061371f565b6000835111156136e25782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371691906140c4565b60405180910390fd5b9392505050565b60008135905061373581614e40565b92915050565b60008135905061374a81614e57565b92915050565b60008135905061375f81614e6e565b92915050565b60008151905061377481614e6e565b92915050565b60008135905061378981614e85565b92915050565b60008135905061379e81614e9c565b92915050565b6000815190506137b381614e9c565b92915050565b6000815190506137c881614eb3565b92915050565b6000602082840312156137e4576137e3614929565b5b60006137f284828501613726565b91505092915050565b60006020828403121561381157613810614929565b5b600061381f84828501613765565b91505092915050565b60006020828403121561383e5761383d614929565b5b600061384c8482850161377a565b91505092915050565b60006020828403121561386b5761386a614929565b5b60006138798482850161378f565b91505092915050565b60006020828403121561389857613897614929565b5b60006138a6848285016137a4565b91505092915050565b600080600080600060a086880312156138cb576138ca614929565b5b60006138d98882890161378f565b95505060206138ea8882890161373b565b94505060406138fb8882890161378f565b935050606061390c88828901613750565b925050608061391d88828901613750565b9150509295509295909350565b60008060008060008060c0878903121561394757613946614929565b5b600061395589828a0161378f565b965050602061396689828a0161373b565b955050604061397789828a0161378f565b945050606061398889828a0161377a565b935050608061399989828a01613750565b92505060a06139aa89828a01613750565b9150509295509295509295565b6000602082840312156139cd576139cc614929565b5b60006139db848285016137b9565b91505092915050565b6139ed8161470b565b82525050565b6139fc8161470b565b82525050565b613a0b816146f9565b82525050565b613a1a8161471d565b82525050565b613a298161471d565b82525050565b6000613a3a826143dd565b613a4481856143f3565b9350613a548185602086016147cd565b80840191505092915050565b613a6981614785565b82525050565b613a7881614785565b82525050565b613a8781614797565b82525050565b613a9681614797565b82525050565b6000613aa7826143e8565b613ab181856143fe565b9350613ac18185602086016147cd565b613aca8161492e565b840191505092915050565b6000613ae26016836143fe565b9150613aed82614973565b602082019050919050565b6000613b05602a836143fe565b9150613b108261499c565b604082019050919050565b6000613b286026836143fe565b9150613b33826149eb565b604082019050919050565b6000613b4b6020836143fe565b9150613b5682614a3a565b602082019050919050565b6000613b6e6015836143fe565b9150613b7982614a63565b602082019050919050565b6000613b91601b836143fe565b9150613b9c82614a8c565b602082019050919050565b6000613bb46030836143fe565b9150613bbf82614ab5565b604082019050919050565b6000613bd76026836143fe565b9150613be282614b04565b604082019050919050565b6000613bfa6018836143fe565b9150613c0582614b53565b602082019050919050565b6000613c1d6021836143fe565b9150613c2882614b7c565b604082019050919050565b6000613c406020836143fe565b9150613c4b82614bcb565b602082019050919050565b6000613c63601d836143fe565b9150613c6e82614bf4565b602082019050919050565b6000613c866021836143fe565b9150613c9182614c1d565b604082019050919050565b6000613ca9601c836143fe565b9150613cb482614c6c565b602082019050919050565b6000613ccc6000836143f3565b9150613cd782614c95565b600082019050919050565b6000613cef6010836143fe565b9150613cfa82614c98565b602082019050919050565b6000613d126018836143fe565b9150613d1d82614cc1565b602082019050919050565b6000613d35601d836143fe565b9150613d4082614cea565b602082019050919050565b6000613d586018836143fe565b9150613d6382614d13565b602082019050919050565b6000613d7b6024836143fe565b9150613d8682614d3c565b604082019050919050565b6000613d9e602a836143fe565b9150613da982614d8b565b604082019050919050565b6000613dc1601f836143fe565b9150613dcc82614dda565b602082019050919050565b6000613de46010836143fe565b9150613def82614e03565b602082019050919050565b61014082016000808301549050613e1081614800565b613e1d60008601826139e4565b5060018301549050613e2e81614800565b613e3b60208601826139e4565b50613e458161484e565b613e526040860182613a11565b50613e5c81614882565b613e696060860182613a11565b5060028301549050613e7a81614834565b613e876080860182613f1f565b5060038301549050613e9881614834565b613ea560a0860182613f1f565b5060048301549050613eb681614834565b613ec360c0860182613f1f565b5060058301549050613ed48161481a565b613ee160e0860182613a60565b50613eeb81614868565b613ef9610100860182613a7e565b5060068301549050613f0a81614834565b613f18610120860182613f1f565b5050505050565b613f288161476e565b82525050565b613f378161476e565b82525050565b6000613f498284613a2f565b915081905092915050565b6000613f5f82613cbf565b9150819050919050565b6000602082019050613f7e6000830184613a02565b92915050565b600061014082019050613f9a600083018d6139f3565b613fa7602083018c6139f3565b613fb4604083018b613a20565b613fc1606083018a613a20565b613fce6080830189613f2e565b613fdb60a0830188613f2e565b613fe860c0830187613f2e565b613ff560e0830186613a6f565b614003610100830185613a8d565b614011610120830184613f2e565b9b9a5050505050505050505050565b60006040820190506140356000830185613a02565b6140426020830184613a02565b9392505050565b600060608201905061405e6000830186613a02565b61406b6020830185613a02565b6140786040830184613f2e565b949350505050565b60006040820190506140956000830185613a02565b6140a26020830184613f2e565b9392505050565b60006020820190506140be6000830184613a8d565b92915050565b600060208201905081810360008301526140de8184613a9c565b905092915050565b600060208201905081810360008301526140ff81613ad5565b9050919050565b6000602082019050818103600083015261411f81613af8565b9050919050565b6000602082019050818103600083015261413f81613b1b565b9050919050565b6000602082019050818103600083015261415f81613b3e565b9050919050565b6000602082019050818103600083015261417f81613b61565b9050919050565b6000602082019050818103600083015261419f81613b84565b9050919050565b600060208201905081810360008301526141bf81613ba7565b9050919050565b600060208201905081810360008301526141df81613bca565b9050919050565b600060208201905081810360008301526141ff81613bed565b9050919050565b6000602082019050818103600083015261421f81613c10565b9050919050565b6000602082019050818103600083015261423f81613c33565b9050919050565b6000602082019050818103600083015261425f81613c56565b9050919050565b6000602082019050818103600083015261427f81613c79565b9050919050565b6000602082019050818103600083015261429f81613c9c565b9050919050565b600060208201905081810360008301526142bf81613ce2565b9050919050565b600060208201905081810360008301526142df81613d05565b9050919050565b600060208201905081810360008301526142ff81613d28565b9050919050565b6000602082019050818103600083015261431f81613d4b565b9050919050565b6000602082019050818103600083015261433f81613d6e565b9050919050565b6000602082019050818103600083015261435f81613d91565b9050919050565b6000602082019050818103600083015261437f81613db4565b9050919050565b6000602082019050818103600083015261439f81613dd7565b9050919050565b6000610140820190506143bc6000830184613dfa565b92915050565b60006020820190506143d76000830184613f2e565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600061441a8261476e565b91506144258361476e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561445a5761445961489c565b5b828201905092915050565b60006144708261476e565b915061447b8361476e565b92508261448b5761448a6148cb565b5b828204905092915050565b6000808291508390505b60018511156144e0578086048111156144bc576144bb61489c565b5b60018516156144cb5780820291505b80810290506144d985614966565b94506144a0565b94509492505050565b60006144f48261476e565b91506144ff83614778565b925061452c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614534565b905092915050565b6000826145445760019050614600565b816145525760009050614600565b81600181146145685760028114614572576145a1565b6001915050614600565b60ff8411156145845761458361489c565b5b8360020a91508482111561459b5761459a61489c565b5b50614600565b5060208310610133831016604e8410600b84101617156145d65782820a9050838111156145d1576145d061489c565b5b614600565b6145e38484846001614496565b925090508184048111156145fa576145f961489c565b5b81810290505b9392505050565b60006146128261476e565b915061461d8361476e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146565761465561489c565b5b828202905092915050565b600061466c8261476e565b91506146778361476e565b92508282101561468a5761468961489c565b5b828203905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060ff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060ff82169050919050565b6000819050919050565b60006147048261474e565b9050919050565b60006147168261474e565b9050919050565b60008115159050919050565b6000614734826146f9565b9050919050565b600081905061474982614e2c565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614790826147a9565b9050919050565b60006147a28261473b565b9050919050565b60006147b4826147bb565b9050919050565b60006147c68261474e565b9050919050565b60005b838110156147eb5780820151818401526020810190506147d0565b838111156147fa576000848401525b50505050565b600061481361480e8361493f565b614695565b9050919050565b600061482d6148288361493f565b6146c2565b9050919050565b60006148476148428361493f565b6146ef565b9050919050565b600061486161485c8361494c565b6146b5565b9050919050565b600061487b6148768361494c565b6146e2565b9050919050565b600061489561489083614959565b6146b5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160001c9050919050565b60008160a01c9050919050565b60008160a81c9050919050565b60008160011c9050919050565b7f416d6f756e74203e2066656573417661696c61626c6500000000000000000000600082015250565b7f456c2065737461646f207469656e6520717565207365722043525950544f535f60008201527f494e5f435553544f445900000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4164647265737320537461626c6520746f2062652077686974656c6973746564600082015250565b7f457363726f7720616c7265616479206578697374730000000000000000000000600082015250565b7f5553445420686173206e6f74206265656e206465706f73697465640000000000600082015250565b7f456c2065737461646f207469656e652071756520657374617220656e2046494160008201527f54434f494e5f5452414e53464552454400000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792054616b65722063616e2063616c6c20746869730000000000000000600082015250565b7f74616b65722063616e6e6f74206265207468652073616d65206173206d616b6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54616b657220617070726f766520746f20457363726f77206669727374000000600082015250565b7f54616b65722063616e6e6f74206265207468652073616d65206173206d616b6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f546865206665652063616e2062652066726f6d20302520746f20312500000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f5468652074696d6550726f636573732063616e20626520300000000000000000600082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f4f6e6c79204d616b65722063616e2063616c6c20746869730000000000000000600082015250565b7f456c207469656d706f20746f6461766961206c6c65676f20612073752074657260008201527f6d696e6f00000000000000000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f496e636f727265637420616d6f756e7400000000000000000000000000000000600082015250565b600b8110614e3d57614e3c6148fa565b5b50565b614e49816146f9565b8114614e5457600080fd5b50565b614e608161470b565b8114614e6b57600080fd5b50565b614e778161471d565b8114614e8257600080fd5b50565b614e8e81614729565b8114614e9957600080fd5b50565b614ea58161476e565b8114614eb057600080fd5b50565b614ebc81614778565b8114614ec757600080fd5b5056fea26469706673582212209003935e574ac8d179f4f519c1faadd7736ad82af3affa3d8853d5743ff221e964736f6c63430008070033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$25.37
Net Worth in ETH
0.012526
Token Allocations
USDT
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.999942 | 25.3666 | $25.37 |
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.