Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 572 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Conversion In | 21560223 | 18 hrs ago | IN | 0 ETH | 0.00106422 | ||||
Conversion In | 21560161 | 18 hrs ago | IN | 0 ETH | 0.00126298 | ||||
Conversion In | 21557429 | 28 hrs ago | IN | 0 ETH | 0.00081499 | ||||
Conversion In | 21557018 | 29 hrs ago | IN | 0 ETH | 0.00076146 | ||||
Conversion Out | 21551918 | 46 hrs ago | IN | 0 ETH | 0.00152195 | ||||
Conversion In | 21546735 | 2 days ago | IN | 0 ETH | 0.00153901 | ||||
Conversion In | 21546657 | 2 days ago | IN | 0 ETH | 0.00191901 | ||||
Conversion In | 21546298 | 2 days ago | IN | 0 ETH | 0.00236889 | ||||
Conversion Out | 21543875 | 3 days ago | IN | 0 ETH | 0.00117584 | ||||
Conversion Out | 21543790 | 3 days ago | IN | 0 ETH | 0.00109743 | ||||
Conversion Out | 21543725 | 3 days ago | IN | 0 ETH | 0.00082038 | ||||
Conversion Out | 21542315 | 3 days ago | IN | 0 ETH | 0.00068052 | ||||
Conversion Out | 21542103 | 3 days ago | IN | 0 ETH | 0.00070931 | ||||
Conversion Out | 21541366 | 3 days ago | IN | 0 ETH | 0.00083442 | ||||
Conversion In | 21539555 | 3 days ago | IN | 0 ETH | 0.00144555 | ||||
Conversion In | 21536531 | 4 days ago | IN | 0 ETH | 0.00161886 | ||||
Conversion Out | 21536270 | 4 days ago | IN | 0 ETH | 0.00209098 | ||||
Conversion Out | 21533389 | 4 days ago | IN | 0 ETH | 0.00433776 | ||||
Conversion Out | 21525556 | 5 days ago | IN | 0 ETH | 0.00061615 | ||||
Conversion In | 21524670 | 5 days ago | IN | 0 ETH | 0.00083892 | ||||
Conversion In | 21524496 | 5 days ago | IN | 0 ETH | 0.00076792 | ||||
Conversion Out | 21521895 | 6 days ago | IN | 0 ETH | 0.00190948 | ||||
Conversion In | 21516658 | 6 days ago | IN | 0 ETH | 0.00144328 | ||||
Conversion In | 21516134 | 6 days ago | IN | 0 ETH | 0.00187603 | ||||
Conversion In | 21515464 | 7 days ago | IN | 0 ETH | 0.0008209 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TokenConversionManagerV2
Compiler Version
v0.8.19+commit.7dd6d404
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.19; import "./Commission.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; // Errors error ViolationOfTxAmountLimits(); error InvalidRequestOrSignature(); error UsedSignature(); error ConversionFailed(); error ConversionMintFailed(); error InvalidUpdateConfigurations(); error MintingMoreThanMaxSupply(); contract TokenConversionManagerV2 is Commission { address private _conversionAuthorizer; // Authorizer Address for the conversion /** * @dev Selector for the `mint(address,uint256)` function * calculated as bytes4(keccak256("mint(address,uint256)")) */ bytes4 private constant MINT_SELECTOR = 0x40c10f19; /** * @dev Selector for the `burnFrom(address,uint256)` function * calculated as bytes4(keccak256("burnFrom(address,uint256)")) */ bytes4 private constant BURN_SELECTOR = 0x79cc6790; //already used conversion signature from authorizer in order to prevent replay attack mapping (bytes32 => bool) private _usedSignatures; // Conversion Configurations uint256 private _perTxnMinAmount; uint256 private _perTxnMaxAmount; uint256 private _maxSupply; // Events event NewAuthorizer(address conversionAuthorizer); event UpdateConfiguration(uint256 perTxnMinAmount, uint256 perTxnMaxAmount, uint256 maxSupply); event ConversionOut(address indexed tokenHolder, bytes32 conversionId, uint256 amount); event ConversionIn(address indexed tokenHolder, bytes32 conversionId, uint256 amount); // Modifiers modifier checkLimits(uint256 amount) { // Check for min, max per transaction limits if (amount < _perTxnMinAmount || amount > _perTxnMaxAmount) revert ViolationOfTxAmountLimits(); _; } constructor( address token, bool commissionIsEnabled, uint8 receiverCommissionProportion, uint8 bridgeOwnerCommissionProportion, uint256 fixedNativeTokenCommissionLimit, address payable commissionReceiver, address payable bridgeOwner ) Commission( token, commissionIsEnabled, receiverCommissionProportion, bridgeOwnerCommissionProportion, fixedNativeTokenCommissionLimit, commissionReceiver, bridgeOwner ) { _conversionAuthorizer = _msgSender(); } /** * @dev To update the authorizer who can authorize the conversions. * @param newAuthorizer - new contract authorizer address */ function updateAuthorizer(address newAuthorizer) external notZeroAddress(newAuthorizer) onlyOwner { _conversionAuthorizer = newAuthorizer; emit NewAuthorizer(newAuthorizer); } /** * @dev To update the per transaction limits for the conversion and to provide max total supply * @param perTxnMinAmount - min amount for conversion * @param perTxnMaxAmount - max amount for conversion * @param maxSupply - value of max supply for bridging token */ function updateConfigurations( uint256 perTxnMinAmount, uint256 perTxnMaxAmount, uint256 maxSupply ) external onlyOwner { // Check for the valid inputs if (perTxnMinAmount == 0 || perTxnMaxAmount <= perTxnMinAmount || maxSupply == 0) revert InvalidUpdateConfigurations(); // Update the configurations _perTxnMinAmount = perTxnMinAmount; _perTxnMaxAmount = perTxnMaxAmount; _maxSupply = maxSupply; emit UpdateConfiguration(perTxnMinAmount, perTxnMaxAmount, maxSupply); } /** * @dev To convert the tokens from Ethereum to non Ethereum network. * The tokens which needs to be convereted will be burned on the host network. * The conversion authorizer needs to provide the signature to call this function. * @param amount - conversion amount * @param conversionId - hashed conversion id * @param v - split authorizer signature */ function conversionOut( uint256 amount, bytes32 conversionId, uint8 v, bytes32 r, bytes32 s ) external payable checkLimits(amount) nonReentrant { bool success; // Check for non zero value for the amount is not needed as the Signature will not be generated for zero amount // Compose the message which was signed bytes32 message = prefixed( keccak256( abi.encodePacked( "__conversionOut", amount, _msgSender(), conversionId, this ) ) ); // Check that the signature is from the authorizer if (ecrecover(message, v, r, s) != _conversionAuthorizer) revert InvalidRequestOrSignature(); // Check for replay attack (message signature can be used only once) if (_usedSignatures[message]) revert UsedSignature(); _usedSignatures[message] = true; if (commissionSettings.commissionIsEnabled) { if (commissionSettings.commissionType == CommissionType.FixedNativeTokens) { _checkPayedCommissionInNative(); (success, ) = TOKEN.call(abi.encodeWithSelector(BURN_SELECTOR, _msgSender(), amount)); } else { (success, ) = TOKEN.call(abi.encodeWithSelector(BURN_SELECTOR, _msgSender(), amount - _takeCommissionInTokenOutput(amount))); } } else { (success, ) = TOKEN.call(abi.encodeWithSelector(BURN_SELECTOR, _msgSender(), amount)); } // In case if the burn call fails if (!success) revert ConversionFailed(); emit ConversionOut(_msgSender(), conversionId, amount); } /** * @dev To convert the tokens from non Ethereum to Ethereum network. * The tokens which needs to be convereted will be minted on the host network. * The conversion authorizer needs to provide the signature to call this function. * @param to - distination conversion operation address for mint converted tokens * @param amount - conversion amount * @param conversionId - hashed conversion id * @param v - split authorizer signature */ function conversionIn( address to, uint256 amount, bytes32 conversionId, uint8 v, bytes32 r, bytes32 s ) external payable checkLimits(amount) nonReentrant notZeroAddress(to) { bool success; // Check for non zero value for the amount is not needed as the Signature will not be generated for zero amount // Compose the message which was signed bytes32 message = prefixed( keccak256( abi.encodePacked( "__conversionIn", amount, _msgSender(), conversionId, this ) ) ); // Check that the signature is from the authorizer if (ecrecover(message, v, r, s) != _conversionAuthorizer) revert InvalidRequestOrSignature(); // Check for replay attack (message signature can be used only once) if (_usedSignatures[message]) revert UsedSignature(); _usedSignatures[message] = true; // Check for the supply if (IERC20(TOKEN).totalSupply() + amount > _maxSupply) revert MintingMoreThanMaxSupply(); if (commissionSettings.commissionIsEnabled) { if (commissionSettings.commissionType == CommissionType.FixedNativeTokens) { _checkPayedCommissionInNative(); (success, ) = TOKEN.call(abi.encodeWithSelector(MINT_SELECTOR, to, amount)); } else { (success, ) = TOKEN.call(abi.encodeWithSelector(MINT_SELECTOR, address(this), amount)); if (!success) revert ConversionMintFailed(); (success, ) = TOKEN.call(abi.encodeWithSelector(TRANSFER_SELECTOR, to, amount - _takeCommissionInTokenInput(amount))); } } else { (success, ) = TOKEN.call(abi.encodeWithSelector(MINT_SELECTOR, to, amount)); } if (!success) revert ConversionFailed(); emit ConversionIn(to, conversionId, amount); } /// Builds a prefixed hash to mimic the behavior of ethSign. function prefixed(bytes32 hash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } function getConversionAuthorizer() external view returns(address) { return _conversionAuthorizer; } function getConversionConfigurations() external view returns(uint256,uint256,uint256) { return(_perTxnMinAmount, _perTxnMaxAmount, _maxSupply); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/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. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol) pragma solidity ^0.8.0; import "./Ownable.sol"; /** * @dev Contract module which provides 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} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { address sender = _msgSender(); require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner"); _transferOwnership(sender); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @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; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol) pragma solidity ^0.8.0; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; import "@openzeppelin/contracts/access/Ownable2Step.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; // Errors error CommissionTransferFailed(); error NativeClaimFailed(); error NotEnoughBalance(); error ZeroAddress(); error ViolationOfFixedNativeTokensLimit(); error UnauthorizedCommissionReceiver(address caller); error PercentageLimitExceeded(); error InvalidProportionSum(uint8 proportion1, uint8 proportion2); error TakeFixedNativeTokensCommissionFailed(uint256 sent, uint256 required); error ZeroFixedNativeTokensCommissionLimit(); error EnablingZeroFixedNativeTokenCommission(); error EnablingZeroFixedTokenCommission(); error EnablingZeroTokenPercentageCommission(); /// @title Commission module for bridge contract /// @author SingularityNET abstract contract Commission is Ownable2Step, ReentrancyGuard { // Address of token contract for address internal immutable TOKEN; uint256 private constant ONE_HUNDRED = 100; uint256 private immutable FIXED_NATIVE_TOKEN_COMMISSION_LIMIT; enum CommissionType { PercentageTokens, // commission in percentage tokens FixedTokens, // commission in fix value of tokens FixedNativeTokens // commission in native currency } CommissionSettings public commissionSettings; struct CommissionSettings { uint8 convertTokenPercentage; // percentage sum of commission in token uint8 receiverCommissionProportion; // proportion for commission receiver uint8 bridgeOwnerCommissionProportion; // proportion for bridge owner commission receiver uint16 pointOffsetShifter; // point offset variable bool commissionIsEnabled; // activate/deactivate commission uint256 fixedNativeTokensCommission; // fixed value of commission in native tokens uint256 fixedTokenCommission; // fixed value of commission in tokens CommissionType commissionType; // global type of commission address payable receiverCommission; address payable bridgeOwner; // can't be zero address } /** * @dev Selector for the `transferFrom(address,address,uint256)` function * calculated as bytes4(keccak256("transferFrom(address,address,uint256)")) */ bytes4 private constant TRANSFERFROM_SELECTOR = 0x23b872dd; /** * @dev Selector for the `transfer(address,uint256)` function * calculated as bytes4(keccak256("transfer(address,uint256)")) */ bytes4 internal constant TRANSFER_SELECTOR = 0xa9059cbb; // Events event UpdateReceiver(address indexed previousReceiver, address indexed newReceiver); event UpdateCommissionType( bool indexed commissionIsEnabled, uint256 indexed commissionType, uint256 indexed timestamp // matches `Update...Commission` events ); event UpdateFixedNativeTokensCommission( uint256 indexed timestamp, uint256 fixedNativeTokensCommission ); event UpdateFixedTokensCommission( uint256 indexed timestamp, uint256 fixedTokenCommission ); event UpdatePercentageTokensCommission( uint256 indexed timestamp, uint256 convertTokenPercentage, uint256 pointOffsetShifter ); event UpdateCommissionProportions( uint8 receiverCommissionProportion, uint8 bridgeOwnerCommissionProportion, uint256 updateTimestamp ); event FixedNativeTokensCommissionClaim(uint256 indexed time); // Check that the caller is a recipient of the commission. modifier isCommissionReceiver(address caller) { if ( _msgSender() != commissionSettings.receiverCommission && _msgSender() != commissionSettings.bridgeOwner ) revert UnauthorizedCommissionReceiver(_msgSender()); _; } modifier checkProportion(uint8 proportionOne, uint8 proportionTwo) { if (proportionOne + proportionTwo != uint8(100)) revert InvalidProportionSum(proportionOne, proportionTwo); _; } modifier notZeroAddress(address account) { if (account == address(0)) revert ZeroAddress(); _; } constructor( address token, bool commissionIsEnabled, uint8 receiverCommissionProportion, uint8 bridgeOwnerCommissionProportion, uint256 fixedNativeTokensCommissionLimit, address payable receiverCommission, address payable bridgeOwner ) Ownable() notZeroAddress(token) notZeroAddress(bridgeOwner) { TOKEN = token; if (fixedNativeTokensCommissionLimit == 0) revert ZeroFixedNativeTokensCommissionLimit(); FIXED_NATIVE_TOKEN_COMMISSION_LIMIT = fixedNativeTokensCommissionLimit; uint256 timestamp = block.timestamp; if (commissionIsEnabled) { commissionSettings.commissionIsEnabled = true; emit UpdateCommissionType(true, 0, timestamp); } if (receiverCommission != address(0)) { commissionSettings.receiverCommission = payable(receiverCommission); emit UpdateReceiver(address(0), receiverCommission); updateCommissionProportions(receiverCommissionProportion, bridgeOwnerCommissionProportion); } else { updateCommissionProportions(0, 100); } commissionSettings.bridgeOwner = payable(bridgeOwner); emit UpdateReceiver(address(0), bridgeOwner); emit UpdateCommissionProportions( receiverCommissionProportion, bridgeOwnerCommissionProportion, timestamp ); } /** * @notice Method to disable commission of any type */ function disableCommission() external onlyOwner { commissionSettings.commissionIsEnabled = false; emit UpdateCommissionType(false, uint256(commissionSettings.commissionType), block.timestamp); } /** * @notice Method to enable commission, if it's not enabled and * update amount of native tokens charged as a commission * @dev Enables the commission if it is currently disabled. Sets the commission type to fixed native tokens if it is not already. * If `newFixedNativeTokensCommission` is non-zero, updates the commission amount. Emits corresponding events. * @param newFixedNativeTokensCommission The new amount of native tokens to be charged as commission. */ function enableAndUpdateFixedNativeTokensCommission( uint256 newFixedNativeTokensCommission ) external onlyOwner { uint256 timestamp = block.timestamp; if (!commissionSettings.commissionIsEnabled) { commissionSettings.commissionIsEnabled = true; } // enable type of fixed native token commission if ( commissionSettings.commissionType != CommissionType.FixedNativeTokens) { if (newFixedNativeTokensCommission == 0) revert EnablingZeroFixedNativeTokenCommission(); commissionSettings.commissionType = CommissionType.FixedNativeTokens; emit UpdateCommissionType(true, 2, timestamp); } // update amount of fixed native token commission _checkFixedFixedNativeTokensLimit(newFixedNativeTokensCommission); commissionSettings.fixedNativeTokensCommission = newFixedNativeTokensCommission; emit UpdateFixedNativeTokensCommission(timestamp, newFixedNativeTokensCommission); } /** * @notice Method to enable commission, if it's not enabled and update the amount of fixed tokens charged as a commission. * @dev Enables the commission if it is currently disabled. Sets the commission type to fixed tokens if it is not already. * If `newFixedTokenCommission` is non-zero, updates the commission amount. Emits corresponding events. * @param newFixedTokenCommission The new amount of fixed tokens to be charged as commission. */ function enableAndUpdateFixedTokensCommission(uint256 newFixedTokenCommission) external onlyOwner { uint256 timestamp = block.timestamp; if (!commissionSettings.commissionIsEnabled) commissionSettings.commissionIsEnabled = true; // enable type of fixed token commission if (commissionSettings.commissionType != CommissionType.FixedTokens) { if (newFixedTokenCommission == 0) revert EnablingZeroFixedTokenCommission(); commissionSettings.commissionType = CommissionType.FixedTokens; emit UpdateCommissionType(true, 1, timestamp); } // update amount of fixed token commission commissionSettings.fixedTokenCommission = newFixedTokenCommission; emit UpdateFixedTokensCommission(timestamp, newFixedTokenCommission); } /** * @notice Method to enable commission, if it's not enabled and update the percentage of tokens charged as a commission. * Updates together token percentage and point offset shifter * @dev Enables the commission if it is currently disabled. Sets the commission type to percentage tokens if it is not already. * If `newConvertTokenPercentage` and `newPointOffsetShifter` are non-zero, updates the commission percentage and point offset. * Emits corresponding events. * @param newConvertTokenPercentage The new percentage of tokens to be charged as commission. * @param newPointOffsetShifter The new point offset shifter for the token percentage commission. */ function enableAndUpdatePercentageTokensCommission( uint8 newConvertTokenPercentage, uint16 newPointOffsetShifter ) external onlyOwner { uint256 timestamp = block.timestamp; if (!commissionSettings.commissionIsEnabled) commissionSettings.commissionIsEnabled = true; // enable type of token commission in percentage if (commissionSettings.commissionType != CommissionType.PercentageTokens) { if (newConvertTokenPercentage == 0 || newPointOffsetShifter == 0) revert EnablingZeroTokenPercentageCommission(); commissionSettings.commissionType = CommissionType.PercentageTokens; emit UpdateCommissionType(true, 0, timestamp); } // update amount of token commission in percentage _checkPercentageLimit(newConvertTokenPercentage, newPointOffsetShifter); commissionSettings.pointOffsetShifter = newPointOffsetShifter; commissionSettings.convertTokenPercentage = newConvertTokenPercentage; emit UpdatePercentageTokensCommission( timestamp, newConvertTokenPercentage, newPointOffsetShifter ); } /** * @notice Method for changing bridge commission receiver address * @dev newReceiverCommission address can be zero address * @param newReceiverCommission - new bridge commission receiver address */ function updateReceiverCommission(address newReceiverCommission) external onlyOwner { if(newReceiverCommission == address(0)) updateCommissionProportions(0, 100); emit UpdateReceiver(commissionSettings.receiverCommission, newReceiverCommission); commissionSettings.receiverCommission = payable(newReceiverCommission); } /** * @notice Method for changing bridge owner commission receiver address * @param newBridgeOwner - new bridge owner commission receiver address */ function updateBridgeOwner(address newBridgeOwner) external onlyOwner notZeroAddress(newBridgeOwner) { emit UpdateReceiver(commissionSettings.bridgeOwner, newBridgeOwner); commissionSettings.bridgeOwner = payable(newBridgeOwner); } /** * @notice Method for claiming collected native token commission * @dev This method can be called by one of the recipients, which will result in receiving * its share of the collected commission, as well as sending a share to the second recipient * according to the current shares in the contract */ function claimFixedNativeTokensCommission() external nonReentrant isCommissionReceiver(_msgSender()) { CommissionSettings memory cachedCommissionSettings = commissionSettings; uint256 contractBalance = address(this).balance; if (contractBalance == 0 ) revert NotEnoughBalance(); if ( cachedCommissionSettings.receiverCommissionProportion != 0 ) { (bool sendToReceiver, ) = cachedCommissionSettings.receiverCommission .call{ value: contractBalance * cachedCommissionSettings.receiverCommissionProportion / ONE_HUNDRED }(""); if (!sendToReceiver) { revert NativeClaimFailed(); } } (bool sendToOwner,) = commissionSettings.bridgeOwner .call{ value: contractBalance * cachedCommissionSettings.bridgeOwnerCommissionProportion / ONE_HUNDRED }(""); if (!sendToOwner) revert NativeClaimFailed(); emit FixedNativeTokensCommissionClaim(block.timestamp); } /** * @notice Method for get receivers addresses * @return Receivers addresses */ function getCommissionReceiverAddresses() external view returns(address, address) { return (commissionSettings.receiverCommission, commissionSettings.bridgeOwner); } /** * @notice Method for get current commission configuration */ function getCommissionSettings() external view returns ( bool commissionIsEnabled, uint8 receiverCommissionProportion, uint8 bridgeOwnerCommissionProportion, uint8 convertTokenPercentage, uint16 offsetShifter, uint256 tokenTypeCommission, uint256 fixedTokenCommission, uint256 fixedNativeTokensCommission, address payable receiverCommission, address payable bridgeOwner, address token ) { return ( commissionSettings.commissionIsEnabled, commissionSettings.receiverCommissionProportion, commissionSettings.bridgeOwnerCommissionProportion, commissionSettings.convertTokenPercentage, commissionSettings.pointOffsetShifter, uint256(commissionSettings.commissionType), commissionSettings.fixedTokenCommission, commissionSettings.fixedNativeTokensCommission, commissionSettings.receiverCommission, commissionSettings.bridgeOwner, TOKEN ); } /** * @notice Method to update the commission proportions for the receiver and the bridge owner. * @dev Updates the receiver's commission proportion and the bridge owner's commission proportion * if the new values are different from the current ones. Emits an event with the new proportions. * @param newReceiverCommissionProportion The new proportion of commission for the receiver. * @param newBridgeOwnerCommissionProportion The new proportion of commission for the bridge owner. */ function updateCommissionProportions( uint8 newReceiverCommissionProportion, uint8 newBridgeOwnerCommissionProportion ) public onlyOwner checkProportion( newReceiverCommissionProportion, newBridgeOwnerCommissionProportion ) { CommissionSettings memory cachedCommissionSettings = commissionSettings; // receiverCommissionProportion can be null if (cachedCommissionSettings.receiverCommissionProportion != newReceiverCommissionProportion) commissionSettings.receiverCommissionProportion = newReceiverCommissionProportion; if ( newBridgeOwnerCommissionProportion != 0 && cachedCommissionSettings.bridgeOwnerCommissionProportion != newBridgeOwnerCommissionProportion ) commissionSettings.bridgeOwnerCommissionProportion = newBridgeOwnerCommissionProportion; emit UpdateCommissionProportions( cachedCommissionSettings.receiverCommissionProportion, cachedCommissionSettings.bridgeOwnerCommissionProportion, block.timestamp ); } /** * @notice Method to check when charging a fee in native token */ function _checkPayedCommissionInNative() internal { CommissionSettings memory cachedCommissionSettings = commissionSettings; if (msg.value != cachedCommissionSettings.fixedNativeTokensCommission) { revert TakeFixedNativeTokensCommissionFailed( msg.value, cachedCommissionSettings.fixedNativeTokensCommission ); } } /** * @notice Method to take a commission in tokens in conversionOut * @param amount - amount of conversion * @return charged commission amount */ function _takeCommissionInTokenOutput(uint256 amount) internal returns (uint256) { CommissionSettings memory cachedCommissionSettings = commissionSettings; (uint256 commissionAmountBridgeOwner, uint256 commissionSum) = _calculateCommissionInToken(amount); if (cachedCommissionSettings.receiverCommissionProportion != 0 && commissionSum != commissionAmountBridgeOwner) { (bool transferToReceiver, ) = TOKEN.call( abi.encodeWithSelector( TRANSFERFROM_SELECTOR, _msgSender(), cachedCommissionSettings.receiverCommission, commissionSum - commissionAmountBridgeOwner ) ); if (!transferToReceiver) revert CommissionTransferFailed(); } (bool transferToBridgeOwner, ) = TOKEN.call( abi.encodeWithSelector( TRANSFERFROM_SELECTOR, _msgSender(), cachedCommissionSettings.bridgeOwner, commissionAmountBridgeOwner ) ); if(!transferToBridgeOwner) revert CommissionTransferFailed(); return commissionSum; } /** * @notice Method to take a commission in tokens in conversionIn * @param amount - amount of conversion * @return charged commission amount */ function _takeCommissionInTokenInput(uint256 amount) internal returns (uint256) { CommissionSettings memory cachedCommissionSettings = commissionSettings; (uint256 commissionAmountBridgeOwner, uint256 commissionSum) = _calculateCommissionInToken(amount); if (cachedCommissionSettings.receiverCommissionProportion != 0 && commissionSum != commissionAmountBridgeOwner) { (bool transferToReceiver, ) = TOKEN.call( abi.encodeWithSelector( TRANSFER_SELECTOR, cachedCommissionSettings.receiverCommission, commissionSum - commissionAmountBridgeOwner ) ); if (!transferToReceiver) revert CommissionTransferFailed(); } (bool transferToBridgeOwner, ) = TOKEN.call( abi.encodeWithSelector( TRANSFER_SELECTOR, cachedCommissionSettings.bridgeOwner, commissionAmountBridgeOwner ) ); if (!transferToBridgeOwner) revert CommissionTransferFailed(); return commissionSum; } /** * @notice Method for calculating a charging commission in tokens * @param amount - amount of conversion * @return commission amount for bridge owner and the whole sum of commission */ function _calculateCommissionInToken(uint256 amount) internal view returns (uint256, uint256) { CommissionSettings memory cachedCommissionSettings = commissionSettings; if (cachedCommissionSettings.commissionType == CommissionType.PercentageTokens) { uint256 commissionSum = amount* uint256(cachedCommissionSettings.convertTokenPercentage) / cachedCommissionSettings.pointOffsetShifter; return ( _calculateCommissionBridgeOwnerProportion(commissionSum), commissionSum ); } return ( _calculateCommissionBridgeOwnerProportion( cachedCommissionSettings.fixedTokenCommission ), cachedCommissionSettings.fixedTokenCommission ); } /** * @notice Method for calculating a bridge owner proportion of the whole sum of commission * @param amount - amount of conversion * @return bridge owner proportion of commission */ function _calculateCommissionBridgeOwnerProportion(uint256 amount) private view returns(uint256) { return (amount * uint256(commissionSettings.bridgeOwnerCommissionProportion) / ONE_HUNDRED); } /** * @notice Method to disable commission * @param fixedNativeTokensCommission - value native tokens commission value for check */ function _checkFixedFixedNativeTokensLimit(uint256 fixedNativeTokensCommission) private view { if (fixedNativeTokensCommission > FIXED_NATIVE_TOKEN_COMMISSION_LIMIT) revert ViolationOfFixedNativeTokensLimit(); } /** * @notice Method to check customization of percenatage parameters * @param convertTokenPercentage - new convert token percentage * @param pointOffsetShifter - new offset point shifter */ // convertTokenPercentage <= pointOffsetShifter in order to represent // floating point fees with one decimal place function _checkPercentageLimit(uint8 convertTokenPercentage, uint16 pointOffsetShifter) private pure { if (convertTokenPercentage > pointOffsetShifter) revert PercentageLimitExceeded(); } }
{ "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
[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"commissionIsEnabled","type":"bool"},{"internalType":"uint8","name":"receiverCommissionProportion","type":"uint8"},{"internalType":"uint8","name":"bridgeOwnerCommissionProportion","type":"uint8"},{"internalType":"uint256","name":"fixedNativeTokenCommissionLimit","type":"uint256"},{"internalType":"address payable","name":"commissionReceiver","type":"address"},{"internalType":"address payable","name":"bridgeOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CommissionTransferFailed","type":"error"},{"inputs":[],"name":"ConversionFailed","type":"error"},{"inputs":[],"name":"ConversionMintFailed","type":"error"},{"inputs":[],"name":"EnablingZeroFixedNativeTokenCommission","type":"error"},{"inputs":[],"name":"EnablingZeroFixedTokenCommission","type":"error"},{"inputs":[],"name":"EnablingZeroTokenPercentageCommission","type":"error"},{"inputs":[{"internalType":"uint8","name":"proportion1","type":"uint8"},{"internalType":"uint8","name":"proportion2","type":"uint8"}],"name":"InvalidProportionSum","type":"error"},{"inputs":[],"name":"InvalidRequestOrSignature","type":"error"},{"inputs":[],"name":"InvalidUpdateConfigurations","type":"error"},{"inputs":[],"name":"MintingMoreThanMaxSupply","type":"error"},{"inputs":[],"name":"NativeClaimFailed","type":"error"},{"inputs":[],"name":"NotEnoughBalance","type":"error"},{"inputs":[],"name":"PercentageLimitExceeded","type":"error"},{"inputs":[{"internalType":"uint256","name":"sent","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"name":"TakeFixedNativeTokensCommissionFailed","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"UnauthorizedCommissionReceiver","type":"error"},{"inputs":[],"name":"UsedSignature","type":"error"},{"inputs":[],"name":"ViolationOfFixedNativeTokensLimit","type":"error"},{"inputs":[],"name":"ViolationOfTxAmountLimits","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"ZeroFixedNativeTokensCommissionLimit","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenHolder","type":"address"},{"indexed":false,"internalType":"bytes32","name":"conversionId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ConversionIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenHolder","type":"address"},{"indexed":false,"internalType":"bytes32","name":"conversionId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ConversionOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"FixedNativeTokensCommissionClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"conversionAuthorizer","type":"address"}],"name":"NewAuthorizer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"receiverCommissionProportion","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"bridgeOwnerCommissionProportion","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"updateTimestamp","type":"uint256"}],"name":"UpdateCommissionProportions","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"commissionIsEnabled","type":"bool"},{"indexed":true,"internalType":"uint256","name":"commissionType","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateCommissionType","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"perTxnMinAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"perTxnMaxAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"UpdateConfiguration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fixedNativeTokensCommission","type":"uint256"}],"name":"UpdateFixedNativeTokensCommission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fixedTokenCommission","type":"uint256"}],"name":"UpdateFixedTokensCommission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"convertTokenPercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pointOffsetShifter","type":"uint256"}],"name":"UpdatePercentageTokensCommission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousReceiver","type":"address"},{"indexed":true,"internalType":"address","name":"newReceiver","type":"address"}],"name":"UpdateReceiver","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFixedNativeTokensCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"commissionSettings","outputs":[{"internalType":"uint8","name":"convertTokenPercentage","type":"uint8"},{"internalType":"uint8","name":"receiverCommissionProportion","type":"uint8"},{"internalType":"uint8","name":"bridgeOwnerCommissionProportion","type":"uint8"},{"internalType":"uint16","name":"pointOffsetShifter","type":"uint16"},{"internalType":"bool","name":"commissionIsEnabled","type":"bool"},{"internalType":"uint256","name":"fixedNativeTokensCommission","type":"uint256"},{"internalType":"uint256","name":"fixedTokenCommission","type":"uint256"},{"internalType":"enum Commission.CommissionType","name":"commissionType","type":"uint8"},{"internalType":"address payable","name":"receiverCommission","type":"address"},{"internalType":"address payable","name":"bridgeOwner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"conversionId","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"conversionIn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"conversionId","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"conversionOut","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"disableCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFixedNativeTokensCommission","type":"uint256"}],"name":"enableAndUpdateFixedNativeTokensCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFixedTokenCommission","type":"uint256"}],"name":"enableAndUpdateFixedTokensCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newConvertTokenPercentage","type":"uint8"},{"internalType":"uint16","name":"newPointOffsetShifter","type":"uint16"}],"name":"enableAndUpdatePercentageTokensCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCommissionReceiverAddresses","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCommissionSettings","outputs":[{"internalType":"bool","name":"commissionIsEnabled","type":"bool"},{"internalType":"uint8","name":"receiverCommissionProportion","type":"uint8"},{"internalType":"uint8","name":"bridgeOwnerCommissionProportion","type":"uint8"},{"internalType":"uint8","name":"convertTokenPercentage","type":"uint8"},{"internalType":"uint16","name":"offsetShifter","type":"uint16"},{"internalType":"uint256","name":"tokenTypeCommission","type":"uint256"},{"internalType":"uint256","name":"fixedTokenCommission","type":"uint256"},{"internalType":"uint256","name":"fixedNativeTokensCommission","type":"uint256"},{"internalType":"address payable","name":"receiverCommission","type":"address"},{"internalType":"address payable","name":"bridgeOwner","type":"address"},{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConversionAuthorizer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConversionConfigurations","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAuthorizer","type":"address"}],"name":"updateAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newBridgeOwner","type":"address"}],"name":"updateBridgeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newReceiverCommissionProportion","type":"uint8"},{"internalType":"uint8","name":"newBridgeOwnerCommissionProportion","type":"uint8"}],"name":"updateCommissionProportions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"perTxnMinAmount","type":"uint256"},{"internalType":"uint256","name":"perTxnMaxAmount","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"updateConfigurations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newReceiverCommission","type":"address"}],"name":"updateReceiverCommission","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b506040516200541638038062005416833981810160405281019062000037919062000a47565b868686868686866200005e620000526200044e60201b60201c565b6200045660201b60201c565b600160028190555086600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000ce576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000136576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8873ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060008503620001a5576040517ffcab2c8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460a08181525050600042905088156200020b576001600360000160056101000a81548160ff021916908315150217905550806000600115157fc4a8c097b5d93dcebaa4f0f65b88ca288e38ff724fa55d3d2af8ecd63c3c9be760405160405180910390a45b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614620002f657846003800160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f62904549814f5511a5d36a62611a6e2fe1d2c29b6de74de25d95395e0a7d009b60405160405180910390a3620002f088886200048f60201b60201c565b6200030b565b6200030a600060646200048f60201b60201c565b5b83600360040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f62904549814f5511a5d36a62611a6e2fe1d2c29b6de74de25d95395e0a7d009b60405160405180910390a37f8849d9036ec7068880bd56182e37500d89a0664b4800e4b44fba2e01a6940501888883604051620003df9392919062000b1c565b60405180910390a150505050505050505050620004016200044e60201b60201c565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000ca3565b600033905090565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556200048c816200076460201b60201c565b50565b6200049f6200082860201b60201c565b8181606460ff168183620004b4919062000b88565b60ff1614620004fe5781816040517f8efe3fd5000000000000000000000000000000000000000000000000000000008152600401620004f592919062000bc4565b60405180910390fd5b60006003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff166002811115620005dc57620005db62000bf1565b5b6002811115620005f157620005f062000bf1565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508460ff16816020015160ff1614620006d45784600360000160016101000a81548160ff021916908360ff1602179055505b60008460ff1614158015620006f357508360ff16816040015160ff1614155b15620007185783600360000160026101000a81548160ff021916908360ff1602179055505b7f8849d9036ec7068880bd56182e37500d89a0664b4800e4b44fba2e01a69405018160200151826040015142604051620007559392919062000b1c565b60405180910390a15050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620008386200044e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200085e620008b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ae9062000c81565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200091482620008e7565b9050919050565b620009268162000907565b81146200093257600080fd5b50565b60008151905062000946816200091b565b92915050565b60008115159050919050565b62000963816200094c565b81146200096f57600080fd5b50565b600081519050620009838162000958565b92915050565b600060ff82169050919050565b620009a18162000989565b8114620009ad57600080fd5b50565b600081519050620009c18162000996565b92915050565b6000819050919050565b620009dc81620009c7565b8114620009e857600080fd5b50565b600081519050620009fc81620009d1565b92915050565b600062000a0f82620008e7565b9050919050565b62000a218162000a02565b811462000a2d57600080fd5b50565b60008151905062000a418162000a16565b92915050565b600080600080600080600060e0888a03121562000a695762000a68620008e2565b5b600062000a798a828b0162000935565b975050602062000a8c8a828b0162000972565b965050604062000a9f8a828b01620009b0565b955050606062000ab28a828b01620009b0565b945050608062000ac58a828b01620009eb565b93505060a062000ad88a828b0162000a30565b92505060c062000aeb8a828b0162000a30565b91505092959891949750929550565b62000b058162000989565b82525050565b62000b1681620009c7565b82525050565b600060608201905062000b33600083018662000afa565b62000b42602083018562000afa565b62000b51604083018462000b0b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b958262000989565b915062000ba28362000989565b9250828201905060ff81111562000bbe5762000bbd62000b59565b5b92915050565b600060408201905062000bdb600083018562000afa565b62000bea602083018462000afa565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c6960208362000c20565b915062000c768262000c31565b602082019050919050565b6000602082019050818103600083015262000c9c8162000c5a565b9050919050565b60805160a0516146f962000d1d600039600061343d015260008181610d920152818161102c01528181611159015281816112620152818161139d015281816114ba01528181612021015281816121310152818161225501528181612cfd01528181612e4a0152818161319401526132ea01526146f96000f3fe6080604052600436106101355760003560e01c80639548f477116100ab578063b2d1bb521161006f578063b2d1bb5214610384578063c72304ac146103ad578063e0a66578146103d8578063e30c397814610401578063f2fde38b1461042c578063feea15291461045557610135565b80639548f477146102d35780639b58bfed146102fc5780639cb71686146103255780639f23c9e214610351578063b26e099f1461036d57610135565b80636a02fcc4116100fd5780636a02fcc41461020c578063715018a61461022857806379ba50971461023f5780637c522d28146102565780638da5cb5b1461027f57806394aca02a146102aa57610135565b80632b100f5c1461013a5780632b84301f14610151578063529c09701461017a5780635531e774146101a357806358a93688146101d7575b600080fd5b34801561014657600080fd5b5061014f610482565b005b34801561015d57600080fd5b5061017860048036038101906101739190613838565b610970565b005b34801561018657600080fd5b506101a1600480360381019061019c91906138ae565b610b25565b005b3480156101af57600080fd5b506101b8610bd3565b6040516101ce9a99989796959493929190613a01565b60405180910390f35b3480156101e357600080fd5b506101ec610ca4565b6040516102039b9a99989796959493929190613abe565b60405180910390f35b61022660048036038101906102219190613bcb565b610dd4565b005b34801561023457600080fd5b5061023d611658565b005b34801561024b57600080fd5b5061025461166c565b005b34801561026257600080fd5b5061027d60048036038101906102789190613c58565b6116f9565b005b34801561028b57600080fd5b5061029461182f565b6040516102a19190613c85565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190613c58565b611858565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190613ca0565b611965565b005b34801561030857600080fd5b50610323600480360381019061031e9190613ccd565b611ac5565b005b34801561033157600080fd5b5061033a611d82565b604051610348929190613d0d565b60405180910390f35b61036b60048036038101906103669190613d36565b611dd8565b005b34801561037957600080fd5b506103826123ff565b005b34801561039057600080fd5b506103ab60048036038101906103a69190613ca0565b61247c565b005b3480156103b957600080fd5b506103c26125e5565b6040516103cf9190613c85565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190613c58565b61260f565b005b34801561040d57600080fd5b506104166126fa565b6040516104239190613c85565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190613c58565b612724565b005b34801561046157600080fd5b5061046a6127d1565b60405161047993929190613db1565b60405180910390f35b61048a6127ea565b610492612837565b6003800160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166104d5612837565b73ffffffffffffffffffffffffffffffffffffffff16141580156105515750600360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610538612837565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561059a5761055e612837565b6040517f0f287a3f0000000000000000000000000000000000000000000000000000000081526004016105919190613c85565b60405180910390fd5b60006003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16600281111561067557610674613949565b5b600281111561068757610686613949565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600047905060008103610778576040517fad3a8b9e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826020015160ff161461084f57600082610100015173ffffffffffffffffffffffffffffffffffffffff166064846020015160ff16846107ba9190613e17565b6107c49190613e88565b6040516107d090613eea565b60006040518083038185875af1925050503d806000811461080d576040519150601f19603f3d011682016040523d82523d6000602084013e610812565b606091505b505090508061084d576040517f244ec49600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6000600360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064846040015160ff16846108a29190613e17565b6108ac9190613e88565b6040516108b890613eea565b60006040518083038185875af1925050503d80600081146108f5576040519150601f19603f3d011682016040523d82523d6000602084013e6108fa565b606091505b5050905080610935576040517f244ec49600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b427f5e4ae8571f79274a16bfb15067cbf26ceca499fd2d7aa8b710e08e697d46518060405160405180910390a25050505061096e61283f565b565b610978612849565b6000429050600360000160059054906101000a900460ff166109b3576001600360000160056101000a81548160ff0219169083151502179055505b600060028111156109c7576109c6613949565b5b6003800160009054906101000a900460ff1660028111156109eb576109ea613949565b5b14610a9e5760008360ff161480610a06575060008261ffff16145b15610a3d576040517f8f12086700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003800160006101000a81548160ff02191690836002811115610a6557610a64613949565b5b0217905550806000600115157fc4a8c097b5d93dcebaa4f0f65b88ca288e38ff724fa55d3d2af8ecd63c3c9be760405160405180910390a45b610aa883836128c7565b81600360000160036101000a81548161ffff021916908361ffff16021790555082600360000160006101000a81548160ff021916908360ff160217905550807f422dd4708a15598e4d5684fba6e31da6e941a6751d420a03ed97e323d4c7cfe78484604051610b18929190613f6b565b60405180910390a2505050565b610b2d612849565b6000831480610b3c5750828211155b80610b475750600081145b15610b7e576040517f0eca686c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600a8190555081600b8190555080600c819055507fb2efb0aa6e279553a1e5567ebb495d322192aa43c5fc3073cba4601d52009ab4838383604051610bc693929190613db1565b60405180910390a1505050565b60038060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900461ffff16908060000160059054906101000a900460ff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508a565b6000806000806000806000806000806000600360000160059054906101000a900460ff16600360000160019054906101000a900460ff16600360000160029054906101000a900460ff16600360000160009054906101000a900460ff16600360000160039054906101000a900461ffff166003800160009054906101000a900460ff166002811115610d3957610d38613949565b5b6003600201546003600101546003800160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000000000000000000000000000000000000000000009a509a509a509a509a509a509a509a509a509a509a50909192939495969798999a565b84600a54811080610de65750600b5481115b15610e1d576040517f17dfb4ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e256127ea565b86600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e8c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610ecb89610e9b612837565b8a30604051602001610eb094939291906140d2565b6040516020818303038152906040528051906020012061290c565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660018289898960405160008152602001604052604051610f29949392919061413a565b6020604051602081039080840390855afa158015610f4b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614610fa2576040517fa7a059bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009600082815260200190815260200160002060009054906101000a900460ff1615610ffa576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016009600083815260200190815260200160002060006101000a81548160ff021916908315150217905550600c54897f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190614194565b6110c391906141c1565b11156110fb576040517f28b53d4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360000160059054906101000a900460ff16156114b85760028081111561112657611125613949565b5b6003800160009054906101000a900460ff16600281111561114a57611149613949565b5b036112605761115761293c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1960e01b8b8b6040516024016111a99291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516112139190614284565b6000604051808303816000865af19150503d8060008114611250576040519150601f19603f3d011682016040523d82523d6000602084013e611255565b606091505b5050809250506114b3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1960e01b308b6040516024016112b29291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161131c9190614284565b6000604051808303816000865af19150503d8060008114611359576040519150601f19603f3d011682016040523d82523d6000602084013e61135e565b606091505b5050809250508161139b576040517fcb57cf5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b8b6113e48c612b2c565b8c6113ef919061429b565b6040516024016114009291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161146a9190614284565b6000604051808303816000865af19150503d80600081146114a7576040519150601f19603f3d011682016040523d82523d6000602084013e6114ac565b606091505b5050809250505b6115bd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1960e01b8b8b60405160240161150a9291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516115749190614284565b6000604051808303816000865af19150503d80600081146115b1576040519150601f19603f3d011682016040523d82523d6000602084013e6115b6565b606091505b5050809250505b816115f4576040517f384ec20400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff167f62a9b3e6446ab559d6b82c4f02cc923cd3b4e47444ef86446dab81a4d781c5af898b60405161163c9291906142cf565b60405180910390a250505061164f61283f565b50505050505050565b611660612849565b61166a6000612f92565b565b6000611676612837565b90508073ffffffffffffffffffffffffffffffffffffffff166116976126fa565b73ffffffffffffffffffffffffffffffffffffffff16146116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e49061437b565b60405180910390fd5b6116f681612f92565b50565b611701612849565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611768576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f62904549814f5511a5d36a62611a6e2fe1d2c29b6de74de25d95395e0a7d009b60405160405180910390a381600360040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611860612849565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118a1576118a060006064611ac5565b5b8073ffffffffffffffffffffffffffffffffffffffff166003800160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f62904549814f5511a5d36a62611a6e2fe1d2c29b6de74de25d95395e0a7d009b60405160405180910390a3806003800160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61196d612849565b6000429050600360000160059054906101000a900460ff166119a8576001600360000160056101000a81548160ff0219169083151502179055505b600160028111156119bc576119bb613949565b5b6003800160009054906101000a900460ff1660028111156119e0576119df613949565b5b14611a7f5760008203611a1f576040517fcdd848be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003800160006101000a81548160ff02191690836002811115611a4757611a46613949565b5b02179055508060018015157fc4a8c097b5d93dcebaa4f0f65b88ca288e38ff724fa55d3d2af8ecd63c3c9be760405160405180910390a45b81600360020181905550807f81f61b66aa862aaadf659b5ba822fcd562282026c64807a61769a8187d332a8a83604051611ab9919061439b565b60405180910390a25050565b611acd612849565b8181606460ff168183611ae091906143b6565b60ff1614611b275781816040517f8efe3fd5000000000000000000000000000000000000000000000000000000008152600401611b1e9291906143eb565b60405180910390fd5b60006003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff166002811115611c0257611c01613949565b5b6002811115611c1457611c13613949565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508460ff16816020015160ff1614611cf65784600360000160016101000a81548160ff021916908360ff1602179055505b60008460ff1614158015611d1457508360ff16816040015160ff1614155b15611d385783600360000160026101000a81548160ff021916908360ff1602179055505b7f8849d9036ec7068880bd56182e37500d89a0664b4800e4b44fba2e01a69405018160200151826040015142604051611d7393929190614414565b60405180910390a15050505050565b6000806003800160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b84600a54811080611dea5750600b5481115b15611e21576040517f17dfb4ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e296127ea565b600080611e6888611e38612837565b8930604051602001611e4d9493929190614497565b6040516020818303038152906040528051906020012061290c565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660018288888860405160008152602001604052604051611ec6949392919061413a565b6020604051602081039080840390855afa158015611ee8573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614611f3f576040517fa7a059bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009600082815260200190815260200160002060009054906101000a900460ff1615611f97576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016009600083815260200190815260200160002060006101000a81548160ff021916908315150217905550600360000160059054906101000a900460ff161561225357600280811115611fee57611fed613949565b5b6003800160009054906101000a900460ff16600281111561201257612011613949565b5b0361212f5761201f61293c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679060e01b612066612837565b8a6040516024016120789291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516120e29190614284565b6000604051808303816000865af19150503d806000811461211f576040519150601f19603f3d011682016040523d82523d6000602084013e612124565b606091505b50508092505061224e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679060e01b612176612837565b61217f8b612fc3565b8b61218a919061429b565b60405160240161219b9291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516122059190614284565b6000604051808303816000865af19150503d8060008114612242576040519150601f19603f3d011682016040523d82523d6000602084013e612247565b606091505b5050809250505b61235f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679060e01b61229a612837565b8a6040516024016122ac9291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516123169190614284565b6000604051808303816000865af19150503d8060008114612353576040519150601f19603f3d011682016040523d82523d6000602084013e612358565b606091505b5050809250505b81612396576040517f384ec20400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61239e612837565b73ffffffffffffffffffffffffffffffffffffffff167fb999b06746a947f1958636b9b9377ae814fe578413dfffd4d3a7a96196fe02fc888a6040516123e59291906142cf565b60405180910390a250506123f761283f565b505050505050565b612407612849565b6000600360000160056101000a81548160ff021916908315150217905550426003800160009054906101000a900460ff16600281111561244a57612449613949565b5b600015157fc4a8c097b5d93dcebaa4f0f65b88ca288e38ff724fa55d3d2af8ecd63c3c9be760405160405180910390a4565b612484612849565b6000429050600360000160059054906101000a900460ff166124bf576001600360000160056101000a81548160ff0219169083151502179055505b6002808111156124d2576124d1613949565b5b6003800160009054906101000a900460ff1660028111156124f6576124f5613949565b5b146125965760008203612535576040517f4d05b1ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003800160006101000a81548160ff0219169083600281111561255d5761255c613949565b5b0217905550806002600115157fc4a8c097b5d93dcebaa4f0f65b88ca288e38ff724fa55d3d2af8ecd63c3c9be760405160405180910390a45b61259f8261343b565b81600360010181905550807fb5277ec6eaac4c7f711dcdecd6b7951d4cff3badcfb82ca3a735e6bafedd82bc836040516125d9919061439b565b60405180910390a25050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612676576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61267e612849565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f08f53e6a9fbc3949bc0b9266bbe1927f0b282a34d92876ccbe188c24d17c6cbb826040516126ee9190613c85565b60405180910390a15050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61272c612849565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1661278c61182f565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000806000600a54600b54600c54925092509250909192565b600280540361282e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128259061453c565b60405180910390fd5b60028081905550565b600033905090565b6001600281905550565b612851612837565b73ffffffffffffffffffffffffffffffffffffffff1661286f61182f565b73ffffffffffffffffffffffffffffffffffffffff16146128c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bc906145a8565b60405180910390fd5b565b8061ffff168260ff161115612908576040517feaf5947400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60008160405160200161291f9190614614565b604051602081830303815290604052805190602001209050919050565b60006003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff166002811115612a1757612a16613949565b5b6002811115612a2957612a28613949565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508060a001513414612b2957348160a001516040517fd326bf05000000000000000000000000000000000000000000000000000000008152600401612b2092919061463a565b60405180910390fd5b50565b6000806003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff166002811115612c0857612c07613949565b5b6002811115612c1a57612c19613949565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600080612cd885613498565b915091506000836020015160ff1614158015612cf45750818114155b15612e465760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b8561010001518585612d4c919061429b565b604051602401612d5d929190614663565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612dc79190614284565b6000604051808303816000865af19150503d8060008114612e04576040519150601f19603f3d011682016040523d82523d6000602084013e612e09565b606091505b5050905080612e44576040517fd291274f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b85610120015185604051602401612e9f929190614663565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612f099190614284565b6000604051808303816000865af19150503d8060008114612f46576040519150601f19603f3d011682016040523d82523d6000602084013e612f4b565b606091505b5050905080612f86576040517fd291274f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81945050505050919050565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055612fc0816136c6565b50565b6000806003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16600281111561309f5761309e613949565b5b60028111156130b1576130b0613949565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050905060008061316f85613498565b915091506000836020015160ff161415801561318b5750818114155b156132e65760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b6131d9612837565b86610100015186866131eb919061429b565b6040516024016131fd9392919061468c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516132679190614284565b6000604051808303816000865af19150503d80600081146132a4576040519150601f19603f3d011682016040523d82523d6000602084013e6132a9565b606091505b50509050806132e4576040517fd291274f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b61332f612837565b866101200151866040516024016133489392919061468c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516133b29190614284565b6000604051808303816000865af19150503d80600081146133ef576040519150601f19603f3d011682016040523d82523d6000602084013e6133f4565b606091505b505090508061342f576040517fd291274f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81945050505050919050565b7f0000000000000000000000000000000000000000000000000000000000000000811115613495576040517f4ea10e1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60008060006003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16600281111561357657613575613949565b5b600281111561358857613587613949565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090506000600281111561364e5761364d613949565b5b8160e00151600281111561366557613664613949565b5b036136a9576000816060015161ffff16826000015160ff16866136889190613e17565b6136929190613e88565b905061369d8161378a565b819350935050506136c1565b6136b68160c0015161378a565b8160c0015192509250505b915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006064600360000160029054906101000a900460ff1660ff16836137af9190613e17565b6137b99190613e88565b9050919050565b600080fd5b600060ff82169050919050565b6137db816137c5565b81146137e657600080fd5b50565b6000813590506137f8816137d2565b92915050565b600061ffff82169050919050565b613815816137fe565b811461382057600080fd5b50565b6000813590506138328161380c565b92915050565b6000806040838503121561384f5761384e6137c0565b5b600061385d858286016137e9565b925050602061386e85828601613823565b9150509250929050565b6000819050919050565b61388b81613878565b811461389657600080fd5b50565b6000813590506138a881613882565b92915050565b6000806000606084860312156138c7576138c66137c0565b5b60006138d586828701613899565b93505060206138e686828701613899565b92505060406138f786828701613899565b9150509250925092565b61390a816137c5565b82525050565b613919816137fe565b82525050565b60008115159050919050565b6139348161391f565b82525050565b61394381613878565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061398957613988613949565b5b50565b600081905061399a82613978565b919050565b60006139aa8261398c565b9050919050565b6139ba8161399f565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139eb826139c0565b9050919050565b6139fb816139e0565b82525050565b600061014082019050613a17600083018d613901565b613a24602083018c613901565b613a31604083018b613901565b613a3e606083018a613910565b613a4b608083018961392b565b613a5860a083018861393a565b613a6560c083018761393a565b613a7260e08301866139b1565b613a806101008301856139f2565b613a8e6101208301846139f2565b9b9a5050505050505050505050565b6000613aa8826139c0565b9050919050565b613ab881613a9d565b82525050565b600061016082019050613ad4600083018e61392b565b613ae1602083018d613901565b613aee604083018c613901565b613afb606083018b613901565b613b08608083018a613910565b613b1560a083018961393a565b613b2260c083018861393a565b613b2f60e083018761393a565b613b3d6101008301866139f2565b613b4b6101208301856139f2565b613b59610140830184613aaf565b9c9b505050505050505050505050565b613b7281613a9d565b8114613b7d57600080fd5b50565b600081359050613b8f81613b69565b92915050565b6000819050919050565b613ba881613b95565b8114613bb357600080fd5b50565b600081359050613bc581613b9f565b92915050565b60008060008060008060c08789031215613be857613be76137c0565b5b6000613bf689828a01613b80565b9650506020613c0789828a01613899565b9550506040613c1889828a01613bb6565b9450506060613c2989828a016137e9565b9350506080613c3a89828a01613bb6565b92505060a0613c4b89828a01613bb6565b9150509295509295509295565b600060208284031215613c6e57613c6d6137c0565b5b6000613c7c84828501613b80565b91505092915050565b6000602082019050613c9a6000830184613aaf565b92915050565b600060208284031215613cb657613cb56137c0565b5b6000613cc484828501613899565b91505092915050565b60008060408385031215613ce457613ce36137c0565b5b6000613cf2858286016137e9565b9250506020613d03858286016137e9565b9150509250929050565b6000604082019050613d226000830185613aaf565b613d2f6020830184613aaf565b9392505050565b600080600080600060a08688031215613d5257613d516137c0565b5b6000613d6088828901613899565b9550506020613d7188828901613bb6565b9450506040613d82888289016137e9565b9350506060613d9388828901613bb6565b9250506080613da488828901613bb6565b9150509295509295909350565b6000606082019050613dc6600083018661393a565b613dd3602083018561393a565b613de0604083018461393a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e2282613878565b9150613e2d83613878565b9250828202613e3b81613878565b91508282048414831517613e5257613e51613de8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e9382613878565b9150613e9e83613878565b925082613eae57613ead613e59565b5b828204905092915050565b600081905092915050565b50565b6000613ed4600083613eb9565b9150613edf82613ec4565b600082019050919050565b6000613ef582613ec7565b9150819050919050565b6000819050919050565b6000613f24613f1f613f1a846137c5565b613eff565b613878565b9050919050565b613f3481613f09565b82525050565b6000613f55613f50613f4b846137fe565b613eff565b613878565b9050919050565b613f6581613f3a565b82525050565b6000604082019050613f806000830185613f2b565b613f8d6020830184613f5c565b9392505050565b600081905092915050565b7f5f5f636f6e76657273696f6e496e000000000000000000000000000000000000600082015250565b6000613fd5600e83613f94565b9150613fe082613f9f565b600e82019050919050565b6000819050919050565b61400661400182613878565b613feb565b82525050565b60008160601b9050919050565b60006140248261400c565b9050919050565b600061403682614019565b9050919050565b61404e61404982613a9d565b61402b565b82525050565b6000819050919050565b61406f61406a82613b95565b614054565b82525050565b600061409061408b614086846139c0565b613eff565b6139c0565b9050919050565b60006140a282614075565b9050919050565b60006140b482614097565b9050919050565b6140cc6140c7826140a9565b61402b565b82525050565b60006140dd82613fc8565b91506140e98287613ff5565b6020820191506140f9828661403d565b601482019150614109828561405e565b60208201915061411982846140bb565b60148201915081905095945050505050565b61413481613b95565b82525050565b600060808201905061414f600083018761412b565b61415c6020830186613901565b614169604083018561412b565b614176606083018461412b565b95945050505050565b60008151905061418e81613882565b92915050565b6000602082840312156141aa576141a96137c0565b5b60006141b88482850161417f565b91505092915050565b60006141cc82613878565b91506141d783613878565b92508282019050808211156141ef576141ee613de8565b5b92915050565b600060408201905061420a6000830185613aaf565b614217602083018461393a565b9392505050565b600081519050919050565b60005b8381101561424757808201518184015260208101905061422c565b60008484015250505050565b600061425e8261421e565b6142688185613eb9565b9350614278818560208601614229565b80840191505092915050565b60006142908284614253565b915081905092915050565b60006142a682613878565b91506142b183613878565b92508282039050818111156142c9576142c8613de8565b5b92915050565b60006040820190506142e4600083018561412b565b6142f1602083018461393a565b9392505050565b600082825260208201905092915050565b7f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060008201527f6e6577206f776e65720000000000000000000000000000000000000000000000602082015250565b60006143656029836142f8565b915061437082614309565b604082019050919050565b6000602082019050818103600083015261439481614358565b9050919050565b60006020820190506143b0600083018461393a565b92915050565b60006143c1826137c5565b91506143cc836137c5565b9250828201905060ff8111156143e5576143e4613de8565b5b92915050565b60006040820190506144006000830185613901565b61440d6020830184613901565b9392505050565b60006060820190506144296000830186613901565b6144366020830185613901565b614443604083018461393a565b949350505050565b7f5f5f636f6e76657273696f6e4f75740000000000000000000000000000000000600082015250565b6000614481600f83613f94565b915061448c8261444b565b600f82019050919050565b60006144a282614474565b91506144ae8287613ff5565b6020820191506144be828661403d565b6014820191506144ce828561405e565b6020820191506144de82846140bb565b60148201915081905095945050505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614526601f836142f8565b9150614531826144f0565b602082019050919050565b6000602082019050818103600083015261455581614519565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145926020836142f8565b915061459d8261455c565b602082019050919050565b600060208201905081810360008301526145c181614585565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006145fe601c83613f94565b9150614609826145c8565b601c82019050919050565b600061461f826145f1565b915061462b828461405e565b60208201915081905092915050565b600060408201905061464f600083018561393a565b61465c602083018461393a565b9392505050565b600060408201905061467860008301856139f2565b614685602083018461393a565b9392505050565b60006060820190506146a16000830186613aaf565b6146ae60208301856139f2565b6146bb604083018461393a565b94935050505056fea264697066735822122047af6e3f6070aeffcb3e477a62fd6955fd7c647756e0445904c66da844f1c62264736f6c63430008130033000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000e7b81ea23bbb4bf4e8f72da8d159dfe3d94ca93d00000000000000000000000010a26e27bdbadcf6e5dfc8584108f3024678d5de
Deployed Bytecode
0x6080604052600436106101355760003560e01c80639548f477116100ab578063b2d1bb521161006f578063b2d1bb5214610384578063c72304ac146103ad578063e0a66578146103d8578063e30c397814610401578063f2fde38b1461042c578063feea15291461045557610135565b80639548f477146102d35780639b58bfed146102fc5780639cb71686146103255780639f23c9e214610351578063b26e099f1461036d57610135565b80636a02fcc4116100fd5780636a02fcc41461020c578063715018a61461022857806379ba50971461023f5780637c522d28146102565780638da5cb5b1461027f57806394aca02a146102aa57610135565b80632b100f5c1461013a5780632b84301f14610151578063529c09701461017a5780635531e774146101a357806358a93688146101d7575b600080fd5b34801561014657600080fd5b5061014f610482565b005b34801561015d57600080fd5b5061017860048036038101906101739190613838565b610970565b005b34801561018657600080fd5b506101a1600480360381019061019c91906138ae565b610b25565b005b3480156101af57600080fd5b506101b8610bd3565b6040516101ce9a99989796959493929190613a01565b60405180910390f35b3480156101e357600080fd5b506101ec610ca4565b6040516102039b9a99989796959493929190613abe565b60405180910390f35b61022660048036038101906102219190613bcb565b610dd4565b005b34801561023457600080fd5b5061023d611658565b005b34801561024b57600080fd5b5061025461166c565b005b34801561026257600080fd5b5061027d60048036038101906102789190613c58565b6116f9565b005b34801561028b57600080fd5b5061029461182f565b6040516102a19190613c85565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190613c58565b611858565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190613ca0565b611965565b005b34801561030857600080fd5b50610323600480360381019061031e9190613ccd565b611ac5565b005b34801561033157600080fd5b5061033a611d82565b604051610348929190613d0d565b60405180910390f35b61036b60048036038101906103669190613d36565b611dd8565b005b34801561037957600080fd5b506103826123ff565b005b34801561039057600080fd5b506103ab60048036038101906103a69190613ca0565b61247c565b005b3480156103b957600080fd5b506103c26125e5565b6040516103cf9190613c85565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190613c58565b61260f565b005b34801561040d57600080fd5b506104166126fa565b6040516104239190613c85565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190613c58565b612724565b005b34801561046157600080fd5b5061046a6127d1565b60405161047993929190613db1565b60405180910390f35b61048a6127ea565b610492612837565b6003800160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166104d5612837565b73ffffffffffffffffffffffffffffffffffffffff16141580156105515750600360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610538612837565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561059a5761055e612837565b6040517f0f287a3f0000000000000000000000000000000000000000000000000000000081526004016105919190613c85565b60405180910390fd5b60006003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16600281111561067557610674613949565b5b600281111561068757610686613949565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600047905060008103610778576040517fad3a8b9e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826020015160ff161461084f57600082610100015173ffffffffffffffffffffffffffffffffffffffff166064846020015160ff16846107ba9190613e17565b6107c49190613e88565b6040516107d090613eea565b60006040518083038185875af1925050503d806000811461080d576040519150601f19603f3d011682016040523d82523d6000602084013e610812565b606091505b505090508061084d576040517f244ec49600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6000600360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064846040015160ff16846108a29190613e17565b6108ac9190613e88565b6040516108b890613eea565b60006040518083038185875af1925050503d80600081146108f5576040519150601f19603f3d011682016040523d82523d6000602084013e6108fa565b606091505b5050905080610935576040517f244ec49600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b427f5e4ae8571f79274a16bfb15067cbf26ceca499fd2d7aa8b710e08e697d46518060405160405180910390a25050505061096e61283f565b565b610978612849565b6000429050600360000160059054906101000a900460ff166109b3576001600360000160056101000a81548160ff0219169083151502179055505b600060028111156109c7576109c6613949565b5b6003800160009054906101000a900460ff1660028111156109eb576109ea613949565b5b14610a9e5760008360ff161480610a06575060008261ffff16145b15610a3d576040517f8f12086700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003800160006101000a81548160ff02191690836002811115610a6557610a64613949565b5b0217905550806000600115157fc4a8c097b5d93dcebaa4f0f65b88ca288e38ff724fa55d3d2af8ecd63c3c9be760405160405180910390a45b610aa883836128c7565b81600360000160036101000a81548161ffff021916908361ffff16021790555082600360000160006101000a81548160ff021916908360ff160217905550807f422dd4708a15598e4d5684fba6e31da6e941a6751d420a03ed97e323d4c7cfe78484604051610b18929190613f6b565b60405180910390a2505050565b610b2d612849565b6000831480610b3c5750828211155b80610b475750600081145b15610b7e576040517f0eca686c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600a8190555081600b8190555080600c819055507fb2efb0aa6e279553a1e5567ebb495d322192aa43c5fc3073cba4601d52009ab4838383604051610bc693929190613db1565b60405180910390a1505050565b60038060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900461ffff16908060000160059054906101000a900460ff16908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508a565b6000806000806000806000806000806000600360000160059054906101000a900460ff16600360000160019054906101000a900460ff16600360000160029054906101000a900460ff16600360000160009054906101000a900460ff16600360000160039054906101000a900461ffff166003800160009054906101000a900460ff166002811115610d3957610d38613949565b5b6003600201546003600101546003800160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d79a509a509a509a509a509a509a509a509a509a509a50909192939495969798999a565b84600a54811080610de65750600b5481115b15610e1d576040517f17dfb4ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e256127ea565b86600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e8c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610ecb89610e9b612837565b8a30604051602001610eb094939291906140d2565b6040516020818303038152906040528051906020012061290c565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660018289898960405160008152602001604052604051610f29949392919061413a565b6020604051602081039080840390855afa158015610f4b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614610fa2576040517fa7a059bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009600082815260200190815260200160002060009054906101000a900460ff1615610ffa576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016009600083815260200190815260200160002060006101000a81548160ff021916908315150217905550600c54897f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d773ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190614194565b6110c391906141c1565b11156110fb576040517f28b53d4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360000160059054906101000a900460ff16156114b85760028081111561112657611125613949565b5b6003800160009054906101000a900460ff16600281111561114a57611149613949565b5b036112605761115761293c565b7f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d773ffffffffffffffffffffffffffffffffffffffff166340c10f1960e01b8b8b6040516024016111a99291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516112139190614284565b6000604051808303816000865af19150503d8060008114611250576040519150601f19603f3d011682016040523d82523d6000602084013e611255565b606091505b5050809250506114b3565b7f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d773ffffffffffffffffffffffffffffffffffffffff166340c10f1960e01b308b6040516024016112b29291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161131c9190614284565b6000604051808303816000865af19150503d8060008114611359576040519150601f19603f3d011682016040523d82523d6000602084013e61135e565b606091505b5050809250508161139b576040517fcb57cf5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b8b6113e48c612b2c565b8c6113ef919061429b565b6040516024016114009291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161146a9190614284565b6000604051808303816000865af19150503d80600081146114a7576040519150601f19603f3d011682016040523d82523d6000602084013e6114ac565b606091505b5050809250505b6115bd565b7f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d773ffffffffffffffffffffffffffffffffffffffff166340c10f1960e01b8b8b60405160240161150a9291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516115749190614284565b6000604051808303816000865af19150503d80600081146115b1576040519150601f19603f3d011682016040523d82523d6000602084013e6115b6565b606091505b5050809250505b816115f4576040517f384ec20400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff167f62a9b3e6446ab559d6b82c4f02cc923cd3b4e47444ef86446dab81a4d781c5af898b60405161163c9291906142cf565b60405180910390a250505061164f61283f565b50505050505050565b611660612849565b61166a6000612f92565b565b6000611676612837565b90508073ffffffffffffffffffffffffffffffffffffffff166116976126fa565b73ffffffffffffffffffffffffffffffffffffffff16146116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e49061437b565b60405180910390fd5b6116f681612f92565b50565b611701612849565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611768576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f62904549814f5511a5d36a62611a6e2fe1d2c29b6de74de25d95395e0a7d009b60405160405180910390a381600360040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611860612849565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118a1576118a060006064611ac5565b5b8073ffffffffffffffffffffffffffffffffffffffff166003800160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f62904549814f5511a5d36a62611a6e2fe1d2c29b6de74de25d95395e0a7d009b60405160405180910390a3806003800160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61196d612849565b6000429050600360000160059054906101000a900460ff166119a8576001600360000160056101000a81548160ff0219169083151502179055505b600160028111156119bc576119bb613949565b5b6003800160009054906101000a900460ff1660028111156119e0576119df613949565b5b14611a7f5760008203611a1f576040517fcdd848be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003800160006101000a81548160ff02191690836002811115611a4757611a46613949565b5b02179055508060018015157fc4a8c097b5d93dcebaa4f0f65b88ca288e38ff724fa55d3d2af8ecd63c3c9be760405160405180910390a45b81600360020181905550807f81f61b66aa862aaadf659b5ba822fcd562282026c64807a61769a8187d332a8a83604051611ab9919061439b565b60405180910390a25050565b611acd612849565b8181606460ff168183611ae091906143b6565b60ff1614611b275781816040517f8efe3fd5000000000000000000000000000000000000000000000000000000008152600401611b1e9291906143eb565b60405180910390fd5b60006003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff166002811115611c0257611c01613949565b5b6002811115611c1457611c13613949565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508460ff16816020015160ff1614611cf65784600360000160016101000a81548160ff021916908360ff1602179055505b60008460ff1614158015611d1457508360ff16816040015160ff1614155b15611d385783600360000160026101000a81548160ff021916908360ff1602179055505b7f8849d9036ec7068880bd56182e37500d89a0664b4800e4b44fba2e01a69405018160200151826040015142604051611d7393929190614414565b60405180910390a15050505050565b6000806003800160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b84600a54811080611dea5750600b5481115b15611e21576040517f17dfb4ac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e296127ea565b600080611e6888611e38612837565b8930604051602001611e4d9493929190614497565b6040516020818303038152906040528051906020012061290c565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660018288888860405160008152602001604052604051611ec6949392919061413a565b6020604051602081039080840390855afa158015611ee8573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614611f3f576040517fa7a059bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009600082815260200190815260200160002060009054906101000a900460ff1615611f97576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016009600083815260200190815260200160002060006101000a81548160ff021916908315150217905550600360000160059054906101000a900460ff161561225357600280811115611fee57611fed613949565b5b6003800160009054906101000a900460ff16600281111561201257612011613949565b5b0361212f5761201f61293c565b7f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d773ffffffffffffffffffffffffffffffffffffffff166379cc679060e01b612066612837565b8a6040516024016120789291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516120e29190614284565b6000604051808303816000865af19150503d806000811461211f576040519150601f19603f3d011682016040523d82523d6000602084013e612124565b606091505b50508092505061224e565b7f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d773ffffffffffffffffffffffffffffffffffffffff166379cc679060e01b612176612837565b61217f8b612fc3565b8b61218a919061429b565b60405160240161219b9291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516122059190614284565b6000604051808303816000865af19150503d8060008114612242576040519150601f19603f3d011682016040523d82523d6000602084013e612247565b606091505b5050809250505b61235f565b7f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d773ffffffffffffffffffffffffffffffffffffffff166379cc679060e01b61229a612837565b8a6040516024016122ac9291906141f5565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516123169190614284565b6000604051808303816000865af19150503d8060008114612353576040519150601f19603f3d011682016040523d82523d6000602084013e612358565b606091505b5050809250505b81612396576040517f384ec20400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61239e612837565b73ffffffffffffffffffffffffffffffffffffffff167fb999b06746a947f1958636b9b9377ae814fe578413dfffd4d3a7a96196fe02fc888a6040516123e59291906142cf565b60405180910390a250506123f761283f565b505050505050565b612407612849565b6000600360000160056101000a81548160ff021916908315150217905550426003800160009054906101000a900460ff16600281111561244a57612449613949565b5b600015157fc4a8c097b5d93dcebaa4f0f65b88ca288e38ff724fa55d3d2af8ecd63c3c9be760405160405180910390a4565b612484612849565b6000429050600360000160059054906101000a900460ff166124bf576001600360000160056101000a81548160ff0219169083151502179055505b6002808111156124d2576124d1613949565b5b6003800160009054906101000a900460ff1660028111156124f6576124f5613949565b5b146125965760008203612535576040517f4d05b1ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003800160006101000a81548160ff0219169083600281111561255d5761255c613949565b5b0217905550806002600115157fc4a8c097b5d93dcebaa4f0f65b88ca288e38ff724fa55d3d2af8ecd63c3c9be760405160405180910390a45b61259f8261343b565b81600360010181905550807fb5277ec6eaac4c7f711dcdecd6b7951d4cff3badcfb82ca3a735e6bafedd82bc836040516125d9919061439b565b60405180910390a25050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612676576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61267e612849565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f08f53e6a9fbc3949bc0b9266bbe1927f0b282a34d92876ccbe188c24d17c6cbb826040516126ee9190613c85565b60405180910390a15050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61272c612849565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1661278c61182f565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000806000600a54600b54600c54925092509250909192565b600280540361282e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128259061453c565b60405180910390fd5b60028081905550565b600033905090565b6001600281905550565b612851612837565b73ffffffffffffffffffffffffffffffffffffffff1661286f61182f565b73ffffffffffffffffffffffffffffffffffffffff16146128c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bc906145a8565b60405180910390fd5b565b8061ffff168260ff161115612908576040517feaf5947400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60008160405160200161291f9190614614565b604051602081830303815290604052805190602001209050919050565b60006003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff166002811115612a1757612a16613949565b5b6002811115612a2957612a28613949565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508060a001513414612b2957348160a001516040517fd326bf05000000000000000000000000000000000000000000000000000000008152600401612b2092919061463a565b60405180910390fd5b50565b6000806003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff166002811115612c0857612c07613949565b5b6002811115612c1a57612c19613949565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600080612cd885613498565b915091506000836020015160ff1614158015612cf45750818114155b15612e465760007f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b8561010001518585612d4c919061429b565b604051602401612d5d929190614663565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612dc79190614284565b6000604051808303816000865af19150503d8060008114612e04576040519150601f19603f3d011682016040523d82523d6000602084013e612e09565b606091505b5050905080612e44576040517fd291274f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60007f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b85610120015185604051602401612e9f929190614663565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612f099190614284565b6000604051808303816000865af19150503d8060008114612f46576040519150601f19603f3d011682016040523d82523d6000602084013e612f4b565b606091505b5050905080612f86576040517fd291274f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81945050505050919050565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055612fc0816136c6565b50565b6000806003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16600281111561309f5761309e613949565b5b60028111156130b1576130b0613949565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050905060008061316f85613498565b915091506000836020015160ff161415801561318b5750818114155b156132e65760007f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d773ffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b6131d9612837565b86610100015186866131eb919061429b565b6040516024016131fd9392919061468c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516132679190614284565b6000604051808303816000865af19150503d80600081146132a4576040519150601f19603f3d011682016040523d82523d6000602084013e6132a9565b606091505b50509050806132e4576040517fd291274f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60007f000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d773ffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b61332f612837565b866101200151866040516024016133489392919061468c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516133b29190614284565b6000604051808303816000865af19150503d80600081146133ef576040519150601f19603f3d011682016040523d82523d6000602084013e6133f4565b606091505b505090508061342f576040517fd291274f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81945050505050919050565b7f000000000000000000000000000000000000000000000000016345785d8a0000811115613495576040517f4ea10e1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60008060006003604051806101400160405290816000820160009054906101000a900460ff1660ff1660ff1681526020016000820160019054906101000a900460ff1660ff1660ff1681526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900461ffff1661ffff1661ffff1681526020016000820160059054906101000a900460ff1615151515815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff16600281111561357657613575613949565b5b600281111561358857613587613949565b5b81526020016003820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090506000600281111561364e5761364d613949565b5b8160e00151600281111561366557613664613949565b5b036136a9576000816060015161ffff16826000015160ff16866136889190613e17565b6136929190613e88565b905061369d8161378a565b819350935050506136c1565b6136b68160c0015161378a565b8160c0015192509250505b915091565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006064600360000160029054906101000a900460ff1660ff16836137af9190613e17565b6137b99190613e88565b9050919050565b600080fd5b600060ff82169050919050565b6137db816137c5565b81146137e657600080fd5b50565b6000813590506137f8816137d2565b92915050565b600061ffff82169050919050565b613815816137fe565b811461382057600080fd5b50565b6000813590506138328161380c565b92915050565b6000806040838503121561384f5761384e6137c0565b5b600061385d858286016137e9565b925050602061386e85828601613823565b9150509250929050565b6000819050919050565b61388b81613878565b811461389657600080fd5b50565b6000813590506138a881613882565b92915050565b6000806000606084860312156138c7576138c66137c0565b5b60006138d586828701613899565b93505060206138e686828701613899565b92505060406138f786828701613899565b9150509250925092565b61390a816137c5565b82525050565b613919816137fe565b82525050565b60008115159050919050565b6139348161391f565b82525050565b61394381613878565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061398957613988613949565b5b50565b600081905061399a82613978565b919050565b60006139aa8261398c565b9050919050565b6139ba8161399f565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139eb826139c0565b9050919050565b6139fb816139e0565b82525050565b600061014082019050613a17600083018d613901565b613a24602083018c613901565b613a31604083018b613901565b613a3e606083018a613910565b613a4b608083018961392b565b613a5860a083018861393a565b613a6560c083018761393a565b613a7260e08301866139b1565b613a806101008301856139f2565b613a8e6101208301846139f2565b9b9a5050505050505050505050565b6000613aa8826139c0565b9050919050565b613ab881613a9d565b82525050565b600061016082019050613ad4600083018e61392b565b613ae1602083018d613901565b613aee604083018c613901565b613afb606083018b613901565b613b08608083018a613910565b613b1560a083018961393a565b613b2260c083018861393a565b613b2f60e083018761393a565b613b3d6101008301866139f2565b613b4b6101208301856139f2565b613b59610140830184613aaf565b9c9b505050505050505050505050565b613b7281613a9d565b8114613b7d57600080fd5b50565b600081359050613b8f81613b69565b92915050565b6000819050919050565b613ba881613b95565b8114613bb357600080fd5b50565b600081359050613bc581613b9f565b92915050565b60008060008060008060c08789031215613be857613be76137c0565b5b6000613bf689828a01613b80565b9650506020613c0789828a01613899565b9550506040613c1889828a01613bb6565b9450506060613c2989828a016137e9565b9350506080613c3a89828a01613bb6565b92505060a0613c4b89828a01613bb6565b9150509295509295509295565b600060208284031215613c6e57613c6d6137c0565b5b6000613c7c84828501613b80565b91505092915050565b6000602082019050613c9a6000830184613aaf565b92915050565b600060208284031215613cb657613cb56137c0565b5b6000613cc484828501613899565b91505092915050565b60008060408385031215613ce457613ce36137c0565b5b6000613cf2858286016137e9565b9250506020613d03858286016137e9565b9150509250929050565b6000604082019050613d226000830185613aaf565b613d2f6020830184613aaf565b9392505050565b600080600080600060a08688031215613d5257613d516137c0565b5b6000613d6088828901613899565b9550506020613d7188828901613bb6565b9450506040613d82888289016137e9565b9350506060613d9388828901613bb6565b9250506080613da488828901613bb6565b9150509295509295909350565b6000606082019050613dc6600083018661393a565b613dd3602083018561393a565b613de0604083018461393a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e2282613878565b9150613e2d83613878565b9250828202613e3b81613878565b91508282048414831517613e5257613e51613de8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e9382613878565b9150613e9e83613878565b925082613eae57613ead613e59565b5b828204905092915050565b600081905092915050565b50565b6000613ed4600083613eb9565b9150613edf82613ec4565b600082019050919050565b6000613ef582613ec7565b9150819050919050565b6000819050919050565b6000613f24613f1f613f1a846137c5565b613eff565b613878565b9050919050565b613f3481613f09565b82525050565b6000613f55613f50613f4b846137fe565b613eff565b613878565b9050919050565b613f6581613f3a565b82525050565b6000604082019050613f806000830185613f2b565b613f8d6020830184613f5c565b9392505050565b600081905092915050565b7f5f5f636f6e76657273696f6e496e000000000000000000000000000000000000600082015250565b6000613fd5600e83613f94565b9150613fe082613f9f565b600e82019050919050565b6000819050919050565b61400661400182613878565b613feb565b82525050565b60008160601b9050919050565b60006140248261400c565b9050919050565b600061403682614019565b9050919050565b61404e61404982613a9d565b61402b565b82525050565b6000819050919050565b61406f61406a82613b95565b614054565b82525050565b600061409061408b614086846139c0565b613eff565b6139c0565b9050919050565b60006140a282614075565b9050919050565b60006140b482614097565b9050919050565b6140cc6140c7826140a9565b61402b565b82525050565b60006140dd82613fc8565b91506140e98287613ff5565b6020820191506140f9828661403d565b601482019150614109828561405e565b60208201915061411982846140bb565b60148201915081905095945050505050565b61413481613b95565b82525050565b600060808201905061414f600083018761412b565b61415c6020830186613901565b614169604083018561412b565b614176606083018461412b565b95945050505050565b60008151905061418e81613882565b92915050565b6000602082840312156141aa576141a96137c0565b5b60006141b88482850161417f565b91505092915050565b60006141cc82613878565b91506141d783613878565b92508282019050808211156141ef576141ee613de8565b5b92915050565b600060408201905061420a6000830185613aaf565b614217602083018461393a565b9392505050565b600081519050919050565b60005b8381101561424757808201518184015260208101905061422c565b60008484015250505050565b600061425e8261421e565b6142688185613eb9565b9350614278818560208601614229565b80840191505092915050565b60006142908284614253565b915081905092915050565b60006142a682613878565b91506142b183613878565b92508282039050818111156142c9576142c8613de8565b5b92915050565b60006040820190506142e4600083018561412b565b6142f1602083018461393a565b9392505050565b600082825260208201905092915050565b7f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060008201527f6e6577206f776e65720000000000000000000000000000000000000000000000602082015250565b60006143656029836142f8565b915061437082614309565b604082019050919050565b6000602082019050818103600083015261439481614358565b9050919050565b60006020820190506143b0600083018461393a565b92915050565b60006143c1826137c5565b91506143cc836137c5565b9250828201905060ff8111156143e5576143e4613de8565b5b92915050565b60006040820190506144006000830185613901565b61440d6020830184613901565b9392505050565b60006060820190506144296000830186613901565b6144366020830185613901565b614443604083018461393a565b949350505050565b7f5f5f636f6e76657273696f6e4f75740000000000000000000000000000000000600082015250565b6000614481600f83613f94565b915061448c8261444b565b600f82019050919050565b60006144a282614474565b91506144ae8287613ff5565b6020820191506144be828661403d565b6014820191506144ce828561405e565b6020820191506144de82846140bb565b60148201915081905095945050505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614526601f836142f8565b9150614531826144f0565b602082019050919050565b6000602082019050818103600083015261455581614519565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145926020836142f8565b915061459d8261455c565b602082019050919050565b600060208201905081810360008301526145c181614585565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006145fe601c83613f94565b9150614609826145c8565b601c82019050919050565b600061461f826145f1565b915061462b828461405e565b60208201915081905092915050565b600060408201905061464f600083018561393a565b61465c602083018461393a565b9392505050565b600060408201905061467860008301856139f2565b614685602083018461393a565b9392505050565b60006060820190506146a16000830186613aaf565b6146ae60208301856139f2565b6146bb604083018461393a565b94935050505056fea264697066735822122047af6e3f6070aeffcb3e477a62fd6955fd7c647756e0445904c66da844f1c62264736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000e7b81ea23bbb4bf4e8f72da8d159dfe3d94ca93d00000000000000000000000010a26e27bdbadcf6e5dfc8584108f3024678d5de
-----Decoded View---------------
Arg [0] : token (address): 0xDBB5Cf12408a3Ac17d668037Ce289f9eA75439D7
Arg [1] : commissionIsEnabled (bool): False
Arg [2] : receiverCommissionProportion (uint8): 50
Arg [3] : bridgeOwnerCommissionProportion (uint8): 50
Arg [4] : fixedNativeTokenCommissionLimit (uint256): 100000000000000000
Arg [5] : commissionReceiver (address): 0xE7B81Ea23bbb4Bf4E8f72DA8D159dfe3D94Ca93d
Arg [6] : bridgeOwner (address): 0x10A26e27BDBaDCF6e5Dfc8584108f3024678D5DE
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000dbb5cf12408a3ac17d668037ce289f9ea75439d7
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [4] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [5] : 000000000000000000000000e7b81ea23bbb4bf4e8f72da8d159dfe3d94ca93d
Arg [6] : 00000000000000000000000010a26e27bdbadcf6e5dfc8584108f3024678d5de
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.