More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 158 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Fill BSC2ETH Swa... | 16282168 | 692 days ago | IN | 0 ETH | 0.00082152 | ||||
Fill BSC2ETH Swa... | 16282168 | 692 days ago | IN | 0 ETH | 0.00123075 | ||||
Fill BSC2ETH Swa... | 16230124 | 699 days ago | IN | 0 ETH | 0.00112699 | ||||
Fill BSC2ETH Swa... | 16200946 | 703 days ago | IN | 0 ETH | 0.00099854 | ||||
Fill BSC2ETH Swa... | 16200930 | 703 days ago | IN | 0 ETH | 0.00124556 | ||||
Fill BSC2ETH Swa... | 16174949 | 707 days ago | IN | 0 ETH | 0.00136877 | ||||
Fill BSC2ETH Swa... | 16149862 | 710 days ago | IN | 0 ETH | 0.00159291 | ||||
Swap ETH2BSC | 14995109 | 883 days ago | IN | 0.0000784 ETH | 0.00093983 | ||||
Swap ETH2BSC | 14989548 | 884 days ago | IN | 0.00236732 ETH | 0.00178217 | ||||
Swap ETH2BSC | 14989546 | 884 days ago | IN | 0.00488164 ETH | 0.00142924 | ||||
Swap ETH2BSC | 14989537 | 884 days ago | IN | 0.00248152 ETH | 0.00150812 | ||||
Swap ETH2BSC | 14989525 | 884 days ago | IN | 0.0002016 ETH | 0.00109689 | ||||
Swap ETH2BSC | 14798270 | 916 days ago | IN | 0.00181373 ETH | 0.00088808 | ||||
Swap ETH2BSC | 14789239 | 917 days ago | IN | 0.00063782 ETH | 0.00130626 | ||||
Swap ETH2BSC | 14788934 | 917 days ago | IN | 0.00006994 ETH | 0.00093449 | ||||
Swap ETH2BSC | 14776986 | 919 days ago | IN | 0.00162822 ETH | 0.00322609 | ||||
Fill BSC2ETH Swa... | 14711189 | 930 days ago | IN | 0 ETH | 0.00430629 | ||||
Fill BSC2ETH Swa... | 14573590 | 951 days ago | IN | 0 ETH | 0.00350011 | ||||
Swap ETH2BSC | 14453865 | 970 days ago | IN | 0.00177984 ETH | 0.0014707 | ||||
Swap ETH2BSC | 14451204 | 970 days ago | IN | 0.00500292 ETH | 0.00664047 | ||||
Swap ETH2BSC | 14447557 | 971 days ago | IN | 0.00005496 ETH | 0.00184983 | ||||
Swap ETH2BSC | 14444430 | 971 days ago | IN | 0.0055437 ETH | 0.00232836 | ||||
Swap ETH2BSC | 14444341 | 971 days ago | IN | 0.00338052 ETH | 0.00384449 | ||||
Swap ETH2BSC | 14443846 | 972 days ago | IN | 0.00236031 ETH | 0.00375017 | ||||
Fill BSC2ETH Swa... | 14440438 | 972 days ago | IN | 0 ETH | 0.00287576 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14989548 | 884 days ago | 0.00236732 ETH | ||||
14989546 | 884 days ago | 0.00488164 ETH | ||||
14989537 | 884 days ago | 0.00248152 ETH | ||||
14989525 | 884 days ago | 0.0002016 ETH | ||||
14798270 | 916 days ago | 0.00181373 ETH | ||||
14789239 | 917 days ago | 0.00063782 ETH | ||||
14788934 | 917 days ago | 0.00006994 ETH | ||||
14776986 | 919 days ago | 0.00162822 ETH | ||||
14453865 | 970 days ago | 0.00177984 ETH | ||||
14451204 | 970 days ago | 0.00500292 ETH | ||||
14447557 | 971 days ago | 0.00005496 ETH | ||||
14444430 | 971 days ago | 0.0055437 ETH | ||||
14444341 | 971 days ago | 0.00338052 ETH | ||||
14443846 | 972 days ago | 0.00236031 ETH | ||||
14439965 | 972 days ago | 0.00392614 ETH | ||||
14439955 | 972 days ago | 0.00530164 ETH | ||||
14439075 | 972 days ago | 0.00353393 ETH | ||||
14191068 | 1011 days ago | 0.01054922 ETH | ||||
13943811 | 1049 days ago | 0.8640225 ETH | ||||
13943674 | 1049 days ago | 0.0000563 ETH | ||||
13938958 | 1050 days ago | 0.00005532 ETH | ||||
13938876 | 1050 days ago | 0.00013606 ETH | ||||
13937827 | 1050 days ago | 0.01665651 ETH | ||||
13937100 | 1050 days ago | 0.00005538 ETH | ||||
13937069 | 1050 days ago | 0.00421372 ETH |
Loading...
Loading
Contract Name:
ETHBridgeImpl
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-14 */ // Dependency file: D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\token\ERC20\IERC20.sol // SPDX-License-Identifier: MIT // pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @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); } // Dependency file: D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\utils\Address.sol // pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // Dependency file: D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\token\ERC20\utils\SafeERC20.sol // pragma solidity ^0.8.0; // import "D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\token\ERC20\IERC20.sol"; // import "D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\utils\Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // Dependency file: D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\token\ERC20\extensions\IERC20Metadata.sol // pragma solidity ^0.8.0; // import "D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\token\ERC20\IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // Dependency file: D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // Dependency file: D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\utils\Strings.sol // pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // Dependency file: D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\utils\introspection\IERC165.sol // pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // Dependency file: D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\utils\introspection\ERC165.sol // pragma solidity ^0.8.0; // import "D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\utils\introspection\IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // Dependency file: D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\access\AccessControl.sol // pragma solidity ^0.8.0; // import "D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\utils\Context.sol"; // import "D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\utils\Strings.sol"; // import "D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\utils\introspection\ERC165.sol"; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping (address => bool) members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ */ function _checkRole(bytes32 role, address account) internal view { if(!hasRole(role, account)) { revert(string(abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ))); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, getRoleAdmin(role), adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // Dependency file: D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\access\Ownable.sol // pragma solidity ^0.8.0; // import "D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // Dependency file: contracts\BridgeBaseImpl.sol // pragma solidity ^0.8.4; // import 'D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\token\ERC20\utils\SafeERC20.sol'; // import 'D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\token\ERC20\extensions\IERC20Metadata.sol'; // import 'D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\access\AccessControl.sol'; // import 'D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\access\Ownable.sol'; // import 'D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\utils\Address.sol'; contract BridgeBaseImpl is AccessControl, Ownable { using Address for address payable; bytes32 public constant ADMIN_ROLE = keccak256('ADMIN_ROLE'); constructor() { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(ADMIN_ROLE, _msgSender()); } modifier notContract() { require(!isContract(msg.sender), 'contract is not allowed to swap'); require(msg.sender == tx.origin, 'no proxy contract is allowed'); _; } function isContract(address addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(addr) } return size > 0; } function emergencyWithdraw(address _token) external onlyOwner { if (_token == address(0)) { Address.sendValue(payable(owner()), address(this).balance); } else { IERC20(_token).transfer(msg.sender, IERC20(_token).balanceOf(address(this))); } } receive() external payable {} } // Root file: contracts\ETHBridgeImpl.sol pragma solidity ^0.8.4; // import 'D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\token\ERC20\utils\SafeERC20.sol'; // import 'D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\token\ERC20\extensions\IERC20Metadata.sol'; // import 'D:\repos\VRM\VRM-BRIDGE\VRM-FLy-bridge\VRM.FlyBridge.Contracts\node_modules\@openzeppelin\contracts\utils\Address.sol'; // import 'contracts\BridgeBaseImpl.sol'; contract ETHBridgeImpl is BridgeBaseImpl { using SafeERC20 for IERC20; using Address for address payable; mapping(address => bool) public registeredERC20; mapping(bytes32 => bool) public filledBSCTx; event BridgePairRegistered( address indexed registrator, address indexed erc20Addr, string name, string symbol, uint8 decimals ); event BridgeSwapStarted( address indexed erc20Addr, address indexed fromAddr, address indexed toAddr, uint256 amount, uint256 feeAmount, uint8 network ); event BridgeSwapFilled( address indexed erc20Addr, bytes32 indexed bscTxHash, address indexed toAddress, uint256 amount, uint8 network ); constructor() {} function registerBridgePairToBSC(address erc20Addr) external returns (bool) { require(hasRole(ADMIN_ROLE, _msgSender()), 'Caller is not an admin'); require(!registeredERC20[erc20Addr], 'already registered'); string memory name = IERC20Metadata(erc20Addr).name(); string memory symbol = IERC20Metadata(erc20Addr).symbol(); uint8 decimals = IERC20Metadata(erc20Addr).decimals(); require(bytes(name).length > 0, 'empty name'); require(bytes(symbol).length > 0, 'empty symbol'); registeredERC20[erc20Addr] = true; emit BridgePairRegistered(_msgSender(), erc20Addr, name, symbol, decimals); return true; } function fillBSC2ETHSwap( bytes32 bscTxHash, address erc20Addr, address toAddress, uint256 amount, uint8 network ) external returns (bool) { require(hasRole(ADMIN_ROLE, _msgSender()), 'Caller is not an admin'); require(!filledBSCTx[bscTxHash], 'bsc tx filled already'); require(registeredERC20[erc20Addr], 'not registered token'); filledBSCTx[bscTxHash] = true; IERC20(erc20Addr).safeTransfer(toAddress, amount); emit BridgeSwapFilled(erc20Addr, bscTxHash, toAddress, amount, network); return true; } function swapETH2BSC( address erc20Addr, address toAddr, uint256 amount, uint8 network ) external payable notContract returns (bool) { require(registeredERC20[erc20Addr], 'not registered token'); require(msg.value != 0x0, "swap fee can't be zero"); IERC20(erc20Addr).safeTransferFrom(_msgSender(), address(this), amount); Address.sendValue(payable(owner()), msg.value); emit BridgeSwapStarted(erc20Addr, msg.sender, toAddr, amount, msg.value, network); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"registrator","type":"address"},{"indexed":true,"internalType":"address","name":"erc20Addr","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"uint8","name":"decimals","type":"uint8"}],"name":"BridgePairRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"erc20Addr","type":"address"},{"indexed":true,"internalType":"bytes32","name":"bscTxHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"network","type":"uint8"}],"name":"BridgeSwapFilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"erc20Addr","type":"address"},{"indexed":true,"internalType":"address","name":"fromAddr","type":"address"},{"indexed":true,"internalType":"address","name":"toAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"network","type":"uint8"}],"name":"BridgeSwapStarted","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":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"bscTxHash","type":"bytes32"},{"internalType":"address","name":"erc20Addr","type":"address"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint8","name":"network","type":"uint8"}],"name":"fillBSC2ETHSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"filledBSCTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Addr","type":"address"}],"name":"registerBridgePairToBSC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"registeredERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Addr","type":"address"},{"internalType":"address","name":"toAddr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint8","name":"network","type":"uint8"}],"name":"swapETH2BSC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50600180546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200006260003362000094565b6200008e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753362000094565b62000144565b620000a08282620000a4565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620000a0576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001003390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6119bb80620001546000396000f3fe6080604052600436106101025760003560e01c8063715018a6116100955780638da5cb5b116100645780638da5cb5b146102df57806391d1485414610307578063a217fddf14610327578063d547741f1461033c578063f2fde38b1461035c57600080fd5b8063715018a61461025357806375b238fc1461026857806376e672541461029c57806389b15604146102af57600080fd5b80632f2ff15d116100d15780632f2ff15d146101c157806336568abe146101e357806350877c77146102035780636ff1c9bc1461023357600080fd5b806301ffc9a71461010e5780630845164714610143578063248a9ca31461016357806324d73150146101a157600080fd5b3661010957005b600080fd5b34801561011a57600080fd5b5061012e610129366004611698565b61037c565b60405190151581526020015b60405180910390f35b34801561014f57600080fd5b5061012e61015e366004611573565b6103b3565b34801561016f57600080fd5b5061019361017e3660046115fb565b60009081526020819052604090206001015490565b60405190815260200161013a565b3480156101ad57600080fd5b5061012e6101bc36600461163e565b6106e4565b3480156101cd57600080fd5b506101e16101dc366004611613565b61089e565b005b3480156101ef57600080fd5b506101e16101fe366004611613565b6108c9565b34801561020f57600080fd5b5061012e61021e3660046115fb565b60036020526000908152604090205460ff1681565b34801561023f57600080fd5b506101e161024e366004611573565b610947565b34801561025f57600080fd5b506101e1610a9c565b34801561027457600080fd5b506101937fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61012e6102aa36600461158d565b610b10565b3480156102bb57600080fd5b5061012e6102ca366004611573565b60026020526000908152604090205460ff1681565b3480156102eb57600080fd5b506001546040516001600160a01b03909116815260200161013a565b34801561031357600080fd5b5061012e610322366004611613565b610ce3565b34801561033357600080fd5b50610193600081565b34801561034857600080fd5b506101e1610357366004611613565b610d0c565b34801561036857600080fd5b506101e1610377366004611573565b610d32565b60006001600160e01b03198216637965db0b60e01b14806103ad57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006103df7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610ce3565b6104295760405162461bcd60e51b815260206004820152601660248201527521b0b63632b91034b9903737ba1030b71030b236b4b760511b60448201526064015b60405180910390fd5b6001600160a01b03821660009081526002602052604090205460ff16156104875760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e481c9959da5cdd195c995960721b6044820152606401610420565b6000826001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156104c257600080fd5b505afa1580156104d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104fe91908101906116c0565b90506000836001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561053b57600080fd5b505afa15801561054f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261057791908101906116c0565b90506000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156105b457600080fd5b505afa1580156105c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ec9190611776565b9050600083511161062c5760405162461bcd60e51b815260206004820152600a602482015269656d707479206e616d6560b01b6044820152606401610420565b600082511161066c5760405162461bcd60e51b815260206004820152600c60248201526b195b5c1d1e481cde5b589bdb60a21b6044820152606401610420565b6001600160a01b0385166000818152600260205260409020805460ff191660011790556106963390565b6001600160a01b03167e565b6ba6ddcf3db67d2241395263f4a1f64f9387c27d3b9a67d30ac10875628585856040516106d193929190611862565b60405180910390a3506001949350505050565b60006107107fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610ce3565b6107555760405162461bcd60e51b815260206004820152601660248201527521b0b63632b91034b9903737ba1030b71030b236b4b760511b6044820152606401610420565b60008681526003602052604090205460ff16156107ac5760405162461bcd60e51b81526020600482015260156024820152746273632074782066696c6c656420616c726561647960581b6044820152606401610420565b6001600160a01b03851660009081526002602052604090205460ff1661080b5760405162461bcd60e51b81526020600482015260146024820152733737ba103932b3b4b9ba32b932b2103a37b5b2b760611b6044820152606401610420565b6000868152600360205260409020805460ff191660011790556108386001600160a01b0386168585610e1d565b836001600160a01b031686866001600160a01b03167f57f16676ae24b0b0c7dac8c38d6d60a64b7672a8182b07f779ae52dd3b45baae868660405161088a92919091825260ff16602082015260400190565b60405180910390a450600195945050505050565b6000828152602081905260409020600101546108ba8133610e80565b6108c48383610ee4565b505050565b6001600160a01b03811633146109395760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610420565b6109438282610f68565b5050565b6001546001600160a01b031633146109715760405162461bcd60e51b81526004016104209061189b565b6001600160a01b03811661099d5761099a6109946001546001600160a01b031690565b47610fcd565b50565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b1580156109e657600080fd5b505afa1580156109fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1e919061175e565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610a6457600080fd5b505af1158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094391906115db565b6001546001600160a01b03163314610ac65760405162461bcd60e51b81526004016104209061189b565b6001546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180546001600160a01b0319169055565b6000333b15610b615760405162461bcd60e51b815260206004820152601f60248201527f636f6e7472616374206973206e6f7420616c6c6f77656420746f2073776170006044820152606401610420565b333214610bb05760405162461bcd60e51b815260206004820152601c60248201527f6e6f2070726f787920636f6e747261637420697320616c6c6f776564000000006044820152606401610420565b6001600160a01b03851660009081526002602052604090205460ff16610c0f5760405162461bcd60e51b81526020600482015260146024820152733737ba103932b3b4b9ba32b932b2103a37b5b2b760611b6044820152606401610420565b34610c555760405162461bcd60e51b815260206004820152601660248201527573776170206665652063616e2774206265207a65726f60501b6044820152606401610420565b610c6a6001600160a01b0386163330866110e6565b610c85610c7f6001546001600160a01b031690565b34610fcd565b6040805184815234602082015260ff84168183015290516001600160a01b03868116923392918916917f06e69856bd9562866c1a824fbefe302141e41265eb4ec1225c8eb78c7ae0b36d9181900360600190a4506001949350505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600082815260208190526040902060010154610d288133610e80565b6108c48383610f68565b6001546001600160a01b03163314610d5c5760405162461bcd60e51b81526004016104209061189b565b6001600160a01b038116610dc15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610420565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b0383166024820152604481018290526108c490849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611124565b610e8a8282610ce3565b61094357610ea2816001600160a01b031660146111f6565b610ead8360206111f6565b604051602001610ebe9291906117da565b60408051601f198184030181529082905262461bcd60e51b82526104209160040161184f565b610eee8282610ce3565b610943576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610f243390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610f728282610ce3565b15610943576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b8047101561101d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610420565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461106a576040519150601f19603f3d011682016040523d82523d6000602084013e61106f565b606091505b50509050806108c45760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610420565b6040516001600160a01b038085166024830152831660448201526064810182905261111e9085906323b872dd60e01b90608401610e49565b50505050565b6000611179826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166113df9092919063ffffffff16565b8051909150156108c4578080602001905181019061119791906115db565b6108c45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610420565b606060006112058360026118e8565b6112109060026118d0565b67ffffffffffffffff81111561123657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611260576020820181803683370190505b509050600360fc1b8160008151811061128957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106112c657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006112ea8460026118e8565b6112f59060016118d0565b90505b6001811115611389576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061133757634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061135b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361138281611933565b90506112f8565b5083156113d85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610420565b9392505050565b60606113ee84846000856113f6565b949350505050565b6060824710156114575760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610420565b843b6114a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610420565b600080866001600160a01b031685876040516114c191906117be565b60006040518083038185875af1925050503d80600081146114fe576040519150601f19603f3d011682016040523d82523d6000602084013e611503565b606091505b509150915061151382828661151e565b979650505050505050565b6060831561152d5750816113d8565b82511561153d5782518084602001fd5b8160405162461bcd60e51b8152600401610420919061184f565b80356001600160a01b038116811461156e57600080fd5b919050565b600060208284031215611584578081fd5b6113d882611557565b600080600080608085870312156115a2578283fd5b6115ab85611557565b93506115b960208601611557565b92506040850135915060608501356115d081611976565b939692955090935050565b6000602082840312156115ec578081fd5b815180151581146113d8578182fd5b60006020828403121561160c578081fd5b5035919050565b60008060408385031215611625578182fd5b8235915061163560208401611557565b90509250929050565b600080600080600060a08688031215611655578081fd5b8535945061166560208701611557565b935061167360408701611557565b925060608601359150608086013561168a81611976565b809150509295509295909350565b6000602082840312156116a9578081fd5b81356001600160e01b0319811681146113d8578182fd5b6000602082840312156116d1578081fd5b815167ffffffffffffffff808211156116e8578283fd5b818401915084601f8301126116fb578283fd5b81518181111561170d5761170d611960565b604051601f8201601f19908116603f0116810190838211818310171561173557611735611960565b8160405282815287602084870101111561174d578586fd5b611513836020830160208801611907565b60006020828403121561176f578081fd5b5051919050565b600060208284031215611787578081fd5b81516113d881611976565b600081518084526117aa816020860160208601611907565b601f01601f19169290920160200192915050565b600082516117d0818460208701611907565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611812816017850160208801611907565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611843816028840160208801611907565b01602801949350505050565b6020815260006113d86020830184611792565b6060815260006118756060830186611792565b82810360208401526118878186611792565b91505060ff83166040830152949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156118e3576118e361194a565b500190565b60008160001904831182151516156119025761190261194a565b500290565b60005b8381101561192257818101518382015260200161190a565b8381111561111e5750506000910152565b6000816119425761194261194a565b506000190190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60ff8116811461099a57600080fdfea2646970667358221220de58d506c35c3a254557abca7d2d1548a4c5135ef18ac0b096caac5ede13ffb764736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101025760003560e01c8063715018a6116100955780638da5cb5b116100645780638da5cb5b146102df57806391d1485414610307578063a217fddf14610327578063d547741f1461033c578063f2fde38b1461035c57600080fd5b8063715018a61461025357806375b238fc1461026857806376e672541461029c57806389b15604146102af57600080fd5b80632f2ff15d116100d15780632f2ff15d146101c157806336568abe146101e357806350877c77146102035780636ff1c9bc1461023357600080fd5b806301ffc9a71461010e5780630845164714610143578063248a9ca31461016357806324d73150146101a157600080fd5b3661010957005b600080fd5b34801561011a57600080fd5b5061012e610129366004611698565b61037c565b60405190151581526020015b60405180910390f35b34801561014f57600080fd5b5061012e61015e366004611573565b6103b3565b34801561016f57600080fd5b5061019361017e3660046115fb565b60009081526020819052604090206001015490565b60405190815260200161013a565b3480156101ad57600080fd5b5061012e6101bc36600461163e565b6106e4565b3480156101cd57600080fd5b506101e16101dc366004611613565b61089e565b005b3480156101ef57600080fd5b506101e16101fe366004611613565b6108c9565b34801561020f57600080fd5b5061012e61021e3660046115fb565b60036020526000908152604090205460ff1681565b34801561023f57600080fd5b506101e161024e366004611573565b610947565b34801561025f57600080fd5b506101e1610a9c565b34801561027457600080fd5b506101937fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61012e6102aa36600461158d565b610b10565b3480156102bb57600080fd5b5061012e6102ca366004611573565b60026020526000908152604090205460ff1681565b3480156102eb57600080fd5b506001546040516001600160a01b03909116815260200161013a565b34801561031357600080fd5b5061012e610322366004611613565b610ce3565b34801561033357600080fd5b50610193600081565b34801561034857600080fd5b506101e1610357366004611613565b610d0c565b34801561036857600080fd5b506101e1610377366004611573565b610d32565b60006001600160e01b03198216637965db0b60e01b14806103ad57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006103df7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610ce3565b6104295760405162461bcd60e51b815260206004820152601660248201527521b0b63632b91034b9903737ba1030b71030b236b4b760511b60448201526064015b60405180910390fd5b6001600160a01b03821660009081526002602052604090205460ff16156104875760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e481c9959da5cdd195c995960721b6044820152606401610420565b6000826001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156104c257600080fd5b505afa1580156104d6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104fe91908101906116c0565b90506000836001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561053b57600080fd5b505afa15801561054f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261057791908101906116c0565b90506000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156105b457600080fd5b505afa1580156105c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ec9190611776565b9050600083511161062c5760405162461bcd60e51b815260206004820152600a602482015269656d707479206e616d6560b01b6044820152606401610420565b600082511161066c5760405162461bcd60e51b815260206004820152600c60248201526b195b5c1d1e481cde5b589bdb60a21b6044820152606401610420565b6001600160a01b0385166000818152600260205260409020805460ff191660011790556106963390565b6001600160a01b03167e565b6ba6ddcf3db67d2241395263f4a1f64f9387c27d3b9a67d30ac10875628585856040516106d193929190611862565b60405180910390a3506001949350505050565b60006107107fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610ce3565b6107555760405162461bcd60e51b815260206004820152601660248201527521b0b63632b91034b9903737ba1030b71030b236b4b760511b6044820152606401610420565b60008681526003602052604090205460ff16156107ac5760405162461bcd60e51b81526020600482015260156024820152746273632074782066696c6c656420616c726561647960581b6044820152606401610420565b6001600160a01b03851660009081526002602052604090205460ff1661080b5760405162461bcd60e51b81526020600482015260146024820152733737ba103932b3b4b9ba32b932b2103a37b5b2b760611b6044820152606401610420565b6000868152600360205260409020805460ff191660011790556108386001600160a01b0386168585610e1d565b836001600160a01b031686866001600160a01b03167f57f16676ae24b0b0c7dac8c38d6d60a64b7672a8182b07f779ae52dd3b45baae868660405161088a92919091825260ff16602082015260400190565b60405180910390a450600195945050505050565b6000828152602081905260409020600101546108ba8133610e80565b6108c48383610ee4565b505050565b6001600160a01b03811633146109395760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610420565b6109438282610f68565b5050565b6001546001600160a01b031633146109715760405162461bcd60e51b81526004016104209061189b565b6001600160a01b03811661099d5761099a6109946001546001600160a01b031690565b47610fcd565b50565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b1580156109e657600080fd5b505afa1580156109fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1e919061175e565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610a6457600080fd5b505af1158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094391906115db565b6001546001600160a01b03163314610ac65760405162461bcd60e51b81526004016104209061189b565b6001546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180546001600160a01b0319169055565b6000333b15610b615760405162461bcd60e51b815260206004820152601f60248201527f636f6e7472616374206973206e6f7420616c6c6f77656420746f2073776170006044820152606401610420565b333214610bb05760405162461bcd60e51b815260206004820152601c60248201527f6e6f2070726f787920636f6e747261637420697320616c6c6f776564000000006044820152606401610420565b6001600160a01b03851660009081526002602052604090205460ff16610c0f5760405162461bcd60e51b81526020600482015260146024820152733737ba103932b3b4b9ba32b932b2103a37b5b2b760611b6044820152606401610420565b34610c555760405162461bcd60e51b815260206004820152601660248201527573776170206665652063616e2774206265207a65726f60501b6044820152606401610420565b610c6a6001600160a01b0386163330866110e6565b610c85610c7f6001546001600160a01b031690565b34610fcd565b6040805184815234602082015260ff84168183015290516001600160a01b03868116923392918916917f06e69856bd9562866c1a824fbefe302141e41265eb4ec1225c8eb78c7ae0b36d9181900360600190a4506001949350505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600082815260208190526040902060010154610d288133610e80565b6108c48383610f68565b6001546001600160a01b03163314610d5c5760405162461bcd60e51b81526004016104209061189b565b6001600160a01b038116610dc15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610420565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6040516001600160a01b0383166024820152604481018290526108c490849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611124565b610e8a8282610ce3565b61094357610ea2816001600160a01b031660146111f6565b610ead8360206111f6565b604051602001610ebe9291906117da565b60408051601f198184030181529082905262461bcd60e51b82526104209160040161184f565b610eee8282610ce3565b610943576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610f243390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610f728282610ce3565b15610943576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b8047101561101d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610420565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461106a576040519150601f19603f3d011682016040523d82523d6000602084013e61106f565b606091505b50509050806108c45760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610420565b6040516001600160a01b038085166024830152831660448201526064810182905261111e9085906323b872dd60e01b90608401610e49565b50505050565b6000611179826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166113df9092919063ffffffff16565b8051909150156108c4578080602001905181019061119791906115db565b6108c45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610420565b606060006112058360026118e8565b6112109060026118d0565b67ffffffffffffffff81111561123657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611260576020820181803683370190505b509050600360fc1b8160008151811061128957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106112c657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006112ea8460026118e8565b6112f59060016118d0565b90505b6001811115611389576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061133757634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061135b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361138281611933565b90506112f8565b5083156113d85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610420565b9392505050565b60606113ee84846000856113f6565b949350505050565b6060824710156114575760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610420565b843b6114a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610420565b600080866001600160a01b031685876040516114c191906117be565b60006040518083038185875af1925050503d80600081146114fe576040519150601f19603f3d011682016040523d82523d6000602084013e611503565b606091505b509150915061151382828661151e565b979650505050505050565b6060831561152d5750816113d8565b82511561153d5782518084602001fd5b8160405162461bcd60e51b8152600401610420919061184f565b80356001600160a01b038116811461156e57600080fd5b919050565b600060208284031215611584578081fd5b6113d882611557565b600080600080608085870312156115a2578283fd5b6115ab85611557565b93506115b960208601611557565b92506040850135915060608501356115d081611976565b939692955090935050565b6000602082840312156115ec578081fd5b815180151581146113d8578182fd5b60006020828403121561160c578081fd5b5035919050565b60008060408385031215611625578182fd5b8235915061163560208401611557565b90509250929050565b600080600080600060a08688031215611655578081fd5b8535945061166560208701611557565b935061167360408701611557565b925060608601359150608086013561168a81611976565b809150509295509295909350565b6000602082840312156116a9578081fd5b81356001600160e01b0319811681146113d8578182fd5b6000602082840312156116d1578081fd5b815167ffffffffffffffff808211156116e8578283fd5b818401915084601f8301126116fb578283fd5b81518181111561170d5761170d611960565b604051601f8201601f19908116603f0116810190838211818310171561173557611735611960565b8160405282815287602084870101111561174d578586fd5b611513836020830160208801611907565b60006020828403121561176f578081fd5b5051919050565b600060208284031215611787578081fd5b81516113d881611976565b600081518084526117aa816020860160208601611907565b601f01601f19169290920160200192915050565b600082516117d0818460208701611907565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611812816017850160208801611907565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611843816028840160208801611907565b01602801949350505050565b6020815260006113d86020830184611792565b6060815260006118756060830186611792565b82810360208401526118878186611792565b91505060ff83166040830152949350505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156118e3576118e361194a565b500190565b60008160001904831182151516156119025761190261194a565b500290565b60005b8381101561192257818101518382015260200161190a565b8381111561111e5750506000910152565b6000816119425761194261194a565b506000190190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60ff8116811461099a57600080fdfea2646970667358221220de58d506c35c3a254557abca7d2d1548a4c5135ef18ac0b096caac5ede13ffb764736f6c63430008040033
Deployed Bytecode Sourcemap
35441:2766:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26069:217;;;;;;;;;;-1:-1:-1;26069:217:0;;;;;:::i;:::-;;:::i;:::-;;;6454:14:1;;6447:22;6429:41;;6417:2;6402:18;26069:217:0;;;;;;;;36292:703;;;;;;;;;;-1:-1:-1;36292:703:0;;;;;:::i;:::-;;:::i;27380:123::-;;;;;;;;;;-1:-1:-1;27380:123:0;;;;;:::i;:::-;27446:7;27473:12;;;;;;;;;;:22;;;;27380:123;;;;6627:25:1;;;6615:2;6600:18;27380:123:0;6582:76:1;37003:622:0;;;;;;;;;;-1:-1:-1;37003:622:0;;;;;:::i;:::-;;:::i;27765:147::-;;;;;;;;;;-1:-1:-1;27765:147:0;;;;;:::i;:::-;;:::i;:::-;;28813:218;;;;;;;;;;-1:-1:-1;28813:218:0;;;;;:::i;:::-;;:::i;35618:43::-;;;;;;;;;;-1:-1:-1;35618:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34546:300;;;;;;;;;;-1:-1:-1;34546:300:0;;;;;:::i;:::-;;:::i;32502:148::-;;;;;;;;;;;;;:::i;33943:60::-;;;;;;;;;;;;33980:23;33943:60;;37633:571;;;;;;:::i;:::-;;:::i;35564:47::-;;;;;;;;;;-1:-1:-1;35564:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31851:87;;;;;;;;;;-1:-1:-1;31924:6:0;;31851:87;;-1:-1:-1;;;;;31924:6:0;;;5568:51:1;;5556:2;5541:18;31851:87:0;5523:102:1;26378:139:0;;;;;;;;;;-1:-1:-1;26378:139:0;;;;;:::i;:::-;;:::i;24343:49::-;;;;;;;;;;-1:-1:-1;24343:49:0;24388:4;24343:49;;28157:149;;;;;;;;;;-1:-1:-1;28157:149:0;;;;;:::i;:::-;;:::i;32805:244::-;;;;;;;;;;-1:-1:-1;32805:244:0;;;;;:::i;:::-;;:::i;26069:217::-;26154:4;-1:-1:-1;;;;;;26178:47:0;;-1:-1:-1;;;26178:47:0;;:100;;-1:-1:-1;;;;;;;;;;21409:40:0;;;26242:36;26171:107;26069:217;-1:-1:-1;;26069:217:0:o;36292:703::-;36362:4;36387:33;33980:23;16905:10;26378:139;:::i;36387:33::-;36379:68;;;;-1:-1:-1;;;36379:68:0;;11963:2:1;36379:68:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:52;12083:18;;36379:68:0;;;;;;;;;-1:-1:-1;;;;;36467:26:0;;;;;;:15;:26;;;;;;;;36466:27;36458:58;;;;-1:-1:-1;;;36458:58:0;;8324:2:1;36458:58:0;;;8306:21:1;8363:2;8343:18;;;8336:30;-1:-1:-1;;;8382:18:1;;;8375:48;8440:18;;36458:58:0;8296:168:1;36458:58:0;36529:18;36565:9;-1:-1:-1;;;;;36550:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36550:32:0;;;;;;;;;;;;:::i;:::-;36529:53;;36593:20;36631:9;-1:-1:-1;;;;;36616:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36616:34:0;;;;;;;;;;;;:::i;:::-;36593:57;;36661:14;36693:9;-1:-1:-1;;;;;36678:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36661:53;;36756:1;36741:4;36735:18;:22;36727:45;;;;-1:-1:-1;;;36727:45:0;;9863:2:1;36727:45:0;;;9845:21:1;9902:2;9882:18;;;9875:30;-1:-1:-1;;;9921:18:1;;;9914:40;9971:18;;36727:45:0;9835:160:1;36727:45:0;36814:1;36797:6;36791:20;:24;36783:49;;;;-1:-1:-1;;;36783:49:0;;10551:2:1;36783:49:0;;;10533:21:1;10590:2;10570:18;;;10563:30;-1:-1:-1;;;10609:18:1;;;10602:42;10661:18;;36783:49:0;10523:162:1;36783:49:0;-1:-1:-1;;;;;36845:26:0;;;;;;:15;:26;;;;;:33;;-1:-1:-1;;36845:33:0;36874:4;36845:33;;;36917:12;16905:10;;16825:98;36917:12;-1:-1:-1;;;;;36896:69:0;;36942:4;36948:6;36956:8;36896:69;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;36983:4:0;;36292:703;-1:-1:-1;;;;36292:703:0:o;37003:622::-;37186:4;37211:33;33980:23;16905:10;26378:139;:::i;37211:33::-;37203:68;;;;-1:-1:-1;;;37203:68:0;;11963:2:1;37203:68:0;;;11945:21:1;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:52;12083:18;;37203:68:0;11935:172:1;37203:68:0;37291:22;;;;:11;:22;;;;;;;;37290:23;37282:57;;;;-1:-1:-1;;;37282:57:0;;10892:2:1;37282:57:0;;;10874:21:1;10931:2;10911:18;;;10904:30;-1:-1:-1;;;10950:18:1;;;10943:51;11011:18;;37282:57:0;10864:171:1;37282:57:0;-1:-1:-1;;;;;37358:26:0;;;;;;:15;:26;;;;;;;;37350:59;;;;-1:-1:-1;;;37350:59:0;;10202:2:1;37350:59:0;;;10184:21:1;10241:2;10221:18;;;10214:30;-1:-1:-1;;;10260:18:1;;;10253:50;10320:18;;37350:59:0;10174:170:1;37350:59:0;37422:22;;;;:11;:22;;;;;:29;;-1:-1:-1;;37422:29:0;37447:4;37422:29;;;37462:49;-1:-1:-1;;;;;37462:30:0;;37493:9;37504:6;37462:30;:49::i;:::-;37568:9;-1:-1:-1;;;;;37529:66:0;37557:9;37546;-1:-1:-1;;;;;37529:66:0;;37579:6;37587:7;37529:66;;;;;;14506:25:1;;;14579:4;14567:17;14562:2;14547:18;;14540:45;14494:2;14479:18;;14461:130;37529:66:0;;;;;;;;-1:-1:-1;37613:4:0;37003:622;;;;;;;:::o;27765:147::-;27446:7;27473:12;;;;;;;;;;:22;;;25947:30;25958:4;16905:10;25947;:30::i;:::-;27879:25:::1;27890:4;27896:7;27879:10;:25::i;:::-;27765:147:::0;;;:::o;28813:218::-;-1:-1:-1;;;;;28909:23:0;;16905:10;28909:23;28901:83;;;;-1:-1:-1;;;28901:83:0;;13791:2:1;28901:83:0;;;13773:21:1;13830:2;13810:18;;;13803:30;13869:34;13849:18;;;13842:62;-1:-1:-1;;;13920:18:1;;;13913:45;13975:19;;28901:83:0;13763:237:1;28901:83:0;28997:26;29009:4;29015:7;28997:11;:26::i;:::-;28813:218;;:::o;34546:300::-;31924:6;;-1:-1:-1;;;;;31924:6:0;16905:10;32071:23;32063:68;;;;-1:-1:-1;;;32063:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34623:20:0;::::1;34619:220;;34660:58;34686:7;31924:6:::0;;-1:-1:-1;;;;;31924:6:0;;31851:87;34686:7:::1;34696:21;34660:17;:58::i;:::-;34546:300:::0;:::o;34619:220::-:1;34787:39;::::0;-1:-1:-1;;;34787:39:0;;34820:4:::1;34787:39;::::0;::::1;5568:51:1::0;-1:-1:-1;;;;;34751:23:0;::::1;::::0;::::1;::::0;34775:10:::1;::::0;34751:23;;34787:24:::1;::::0;5541:18:1;;34787:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34751:76;::::0;-1:-1:-1;;;;;;34751:76:0::1;::::0;;;;;;-1:-1:-1;;;;;6202:32:1;;;34751:76:0::1;::::0;::::1;6184:51:1::0;6251:18;;;6244:34;6157:18;;34751:76:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32502:148::-:0;31924:6;;-1:-1:-1;;;;;31924:6:0;16905:10;32071:23;32063:68;;;;-1:-1:-1;;;32063:68:0;;;;;;;:::i;:::-;32593:6:::1;::::0;32572:40:::1;::::0;32609:1:::1;::::0;-1:-1:-1;;;;;32593:6:0::1;::::0;32572:40:::1;::::0;32609:1;;32572:40:::1;32623:6;:19:::0;;-1:-1:-1;;;;;;32623:19:0::1;::::0;;32502:148::o;37633:571::-;37801:4;34198:10;34477:17;34522:8;34178:67;;;;-1:-1:-1;;;34178:67:0;;11242:2:1;34178:67:0;;;11224:21:1;11281:2;11261:18;;;11254:30;11320:33;11300:18;;;11293:61;11371:18;;34178:67:0;11214:181:1;34178:67:0;34264:10;34278:9;34264:23;34256:64;;;;-1:-1:-1;;;34256:64:0;;12672:2:1;34256:64:0;;;12654:21:1;12711:2;12691:18;;;12684:30;12750;12730:18;;;12723:58;12798:18;;34256:64:0;12644:178:1;34256:64:0;-1:-1:-1;;;;;37826:26:0;::::1;;::::0;;;:15:::1;:26;::::0;;;;;::::1;;37818:59;;;::::0;-1:-1:-1;;;37818:59:0;;10202:2:1;37818:59:0::1;::::0;::::1;10184:21:1::0;10241:2;10221:18;;;10214:30;-1:-1:-1;;;10260:18:1;;;10253:50;10320:18;;37818:59:0::1;10174:170:1::0;37818:59:0::1;37896:9;37888:51;;;::::0;-1:-1:-1;;;37888:51:0;;13440:2:1;37888:51:0::1;::::0;::::1;13422:21:1::0;13479:2;13459:18;;;13452:30;-1:-1:-1;;;13498:18:1;;;13491:52;13560:18;;37888:51:0::1;13412:172:1::0;37888:51:0::1;37952:71;-1:-1:-1::0;;;;;37952:34:0;::::1;16905:10:::0;38009:4:::1;38016:6:::0;37952:34:::1;:71::i;:::-;38034:46;38060:7;31924:6:::0;;-1:-1:-1;;;;;31924:6:0;;31851:87;38060:7:::1;38070:9;38034:17;:46::i;:::-;38098:76;::::0;;14203:25:1;;;38155:9:0::1;14259:2:1::0;14244:18;;14237:34;14319:4;14307:17;;14287:18;;;14280:45;38098:76:0;;-1:-1:-1;;;;;38098:76:0;;::::1;::::0;38127:10:::1;::::0;38098:76;;::::1;::::0;::::1;::::0;;;;14191:2:1;38098:76:0;;::::1;-1:-1:-1::0;38192:4:0::1;37633:571:::0;;;;;;:::o;26378:139::-;26456:4;26480:12;;;;;;;;;;;-1:-1:-1;;;;;26480:29:0;;;;;;;;;;;;;;;26378:139::o;28157:149::-;27446:7;27473:12;;;;;;;;;;:22;;;25947:30;25958:4;16905:10;25947;:30::i;:::-;28272:26:::1;28284:4;28290:7;28272:11;:26::i;32805:244::-:0;31924:6;;-1:-1:-1;;;;;31924:6:0;16905:10;32071:23;32063:68;;;;-1:-1:-1;;;32063:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32894:22:0;::::1;32886:73;;;::::0;-1:-1:-1;;;32886:73:0;;7917:2:1;32886:73:0::1;::::0;::::1;7899:21:1::0;7956:2;7936:18;;;7929:30;7995:34;7975:18;;;7968:62;-1:-1:-1;;;8046:18:1;;;8039:36;8092:19;;32886:73:0::1;7889:228:1::0;32886:73:0::1;32996:6;::::0;32975:38:::1;::::0;-1:-1:-1;;;;;32975:38:0;;::::1;::::0;32996:6:::1;::::0;32975:38:::1;::::0;32996:6:::1;::::0;32975:38:::1;33024:6;:17:::0;;-1:-1:-1;;;;;;33024:17:0::1;-1:-1:-1::0;;;;;33024:17:0;;;::::1;::::0;;;::::1;::::0;;32805:244::o;12025:177::-;12135:58;;-1:-1:-1;;;;;6202:32:1;;12135:58:0;;;6184:51:1;6251:18;;;6244:34;;;12108:86:0;;12128:5;;-1:-1:-1;;;12158:23:0;6157:18:1;;12135:58:0;;;;-1:-1:-1;;12135:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12135:58:0;-1:-1:-1;;;;;;12135:58:0;;;;;;;;;;12108:19;:86::i;26807:384::-;26887:22;26895:4;26901:7;26887;:22::i;:::-;26883:301;;27019:41;27047:7;-1:-1:-1;;;;;27019:41:0;27057:2;27019:19;:41::i;:::-;27117:38;27145:4;27152:2;27117:19;:38::i;:::-;26940:230;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26940:230:0;;;;;;;;;;-1:-1:-1;;;26926:246:0;;;;;;;:::i;30061:229::-;30136:22;30144:4;30150:7;30136;:22::i;:::-;30131:152;;30175:6;:12;;;;;;;;;;;-1:-1:-1;;;;;30175:29:0;;;;;;;;;:36;;-1:-1:-1;;30175:36:0;30207:4;30175:36;;;30258:12;16905:10;;16825:98;30258:12;-1:-1:-1;;;;;30231:40:0;30249:7;-1:-1:-1;;;;;30231:40:0;30243:4;30231:40;;;;;;;;;;30061:229;;:::o;30298:230::-;30373:22;30381:4;30387:7;30373;:22::i;:::-;30369:152;;;30444:5;30412:12;;;;;;;;;;;-1:-1:-1;;;;;30412:29:0;;;;;;;;;;:37;;-1:-1:-1;;30412:37:0;;;30469:40;16905:10;;30412:12;;30469:40;;30444:5;30469:40;30298:230;;:::o;5137:397::-;5252:6;5227:21;:31;;5219:73;;;;-1:-1:-1;;;5219:73:0;;9098:2:1;5219:73:0;;;9080:21:1;9137:2;9117:18;;;9110:30;9176:31;9156:18;;;9149:59;9225:18;;5219:73:0;9070:179:1;5219:73:0;5384:12;5402:9;-1:-1:-1;;;;;5402:14:0;5425:6;5402:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5383:54;;;5456:7;5448:78;;;;-1:-1:-1;;;5448:78:0;;8671:2:1;5448:78:0;;;8653:21:1;8710:2;8690:18;;;8683:30;8749:34;8729:18;;;8722:62;8820:28;8800:18;;;8793:56;8866:19;;5448:78:0;8643:248:1;12210:205:0;12338:68;;-1:-1:-1;;;;;5888:15:1;;;12338:68:0;;;5870:34:1;5940:15;;5920:18;;;5913:43;5972:18;;;5965:34;;;12311:96:0;;12331:5;;-1:-1:-1;;;12361:27:0;5805:18:1;;12338:68:0;5787:218:1;12311:96:0;12210:205;;;;:::o;14459:761::-;14883:23;14909:69;14937:4;14909:69;;;;;;;;;;;;;;;;;14917:5;-1:-1:-1;;;;;14909:27:0;;;:69;;;;;:::i;:::-;14993:17;;14883:95;;-1:-1:-1;14993:21:0;14989:224;;15135:10;15124:30;;;;;;;;;;;;:::i;:::-;15116:85;;;;-1:-1:-1;;;15116:85:0;;13029:2:1;15116:85:0;;;13011:21:1;13068:2;13048:18;;;13041:30;13107:34;13087:18;;;13080:62;-1:-1:-1;;;13158:18:1;;;13151:40;13208:19;;15116:85:0;13001:232:1;18871:447:0;18946:13;18972:19;19004:10;19008:6;19004:1;:10;:::i;:::-;:14;;19017:1;19004:14;:::i;:::-;18994:25;;;;;;-1:-1:-1;;;18994:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18994:25:0;;18972:47;;-1:-1:-1;;;19030:6:0;19037:1;19030:9;;;;;;-1:-1:-1;;;19030:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;19030:15:0;;;;;;;;;-1:-1:-1;;;19056:6:0;19063:1;19056:9;;;;;;-1:-1:-1;;;19056:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;19056:15:0;;;;;;;;-1:-1:-1;19087:9:0;19099:10;19103:6;19099:1;:10;:::i;:::-;:14;;19112:1;19099:14;:::i;:::-;19087:26;;19082:131;19119:1;19115;:5;19082:131;;;-1:-1:-1;;;19163:5:0;19171:3;19163:11;19154:21;;;;;-1:-1:-1;;;19154:21:0;;;;;;;;;;;;19142:6;19149:1;19142:9;;;;;;-1:-1:-1;;;19142:9:0;;;;;;;;;;;;:33;-1:-1:-1;;;;;19142:33:0;;;;;;;;-1:-1:-1;19200:1:0;19190:11;;;;;19122:3;;;:::i;:::-;;;19082:131;;;-1:-1:-1;19231:10:0;;19223:55;;;;-1:-1:-1;;;19223:55:0;;7556:2:1;19223:55:0;;;7538:21:1;;;7575:18;;;7568:30;7634:34;7614:18;;;7607:62;7686:18;;19223:55:0;7528:182:1;19223:55:0;19303:6;18871:447;-1:-1:-1;;;18871:447:0:o;6698:195::-;6801:12;6833:52;6855:6;6863:4;6869:1;6872:12;6833:21;:52::i;:::-;6826:59;6698:195;-1:-1:-1;;;;6698:195:0:o;7750:530::-;7877:12;7935:5;7910:21;:30;;7902:81;;;;-1:-1:-1;;;7902:81:0;;9456:2:1;7902:81:0;;;9438:21:1;9495:2;9475:18;;;9468:30;9534:34;9514:18;;;9507:62;-1:-1:-1;;;9585:18:1;;;9578:36;9631:19;;7902:81:0;9428:228:1;7902:81:0;34477:17;;7994:60;;;;-1:-1:-1;;;7994:60:0;;12314:2:1;7994:60:0;;;12296:21:1;12353:2;12333:18;;;12326:30;12392:31;12372:18;;;12365:59;12441:18;;7994:60:0;12286:179:1;7994:60:0;8128:12;8142:23;8169:6;-1:-1:-1;;;;;8169:11:0;8189:5;8197:4;8169:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8127:75;;;;8220:52;8238:7;8247:10;8259:12;8220:17;:52::i;:::-;8213:59;7750:530;-1:-1:-1;;;;;;;7750:530:0:o;10290:742::-;10405:12;10434:7;10430:595;;;-1:-1:-1;10465:10:0;10458:17;;10430:595;10579:17;;:21;10575:439;;10842:10;10836:17;10903:15;10890:10;10886:2;10882:19;10875:44;10790:148;10985:12;10978:20;;-1:-1:-1;;;10978:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:196::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:470::-;477:6;485;493;501;554:3;542:9;533:7;529:23;525:33;522:2;;;576:6;568;561:22;522:2;604:29;623:9;604:29;:::i;:::-;594:39;;652:38;686:2;675:9;671:18;652:38;:::i;:::-;642:48;;737:2;726:9;722:18;709:32;699:42;;791:2;780:9;776:18;763:32;804:29;827:5;804:29;:::i;:::-;512:351;;;;-1:-1:-1;512:351:1;;-1:-1:-1;;512:351:1:o;868:297::-;935:6;988:2;976:9;967:7;963:23;959:32;956:2;;;1009:6;1001;994:22;956:2;1046:9;1040:16;1099:5;1092:13;1085:21;1078:5;1075:32;1065:2;;1126:6;1118;1111:22;1170:190;1229:6;1282:2;1270:9;1261:7;1257:23;1253:32;1250:2;;;1303:6;1295;1288:22;1250:2;-1:-1:-1;1331:23:1;;1240:120;-1:-1:-1;1240:120:1:o;1365:264::-;1433:6;1441;1494:2;1482:9;1473:7;1469:23;1465:32;1462:2;;;1515:6;1507;1500:22;1462:2;1556:9;1543:23;1533:33;;1585:38;1619:2;1608:9;1604:18;1585:38;:::i;:::-;1575:48;;1452:177;;;;;:::o;1634:539::-;1727:6;1735;1743;1751;1759;1812:3;1800:9;1791:7;1787:23;1783:33;1780:2;;;1834:6;1826;1819:22;1780:2;1875:9;1862:23;1852:33;;1904:38;1938:2;1927:9;1923:18;1904:38;:::i;:::-;1894:48;;1961:38;1995:2;1984:9;1980:18;1961:38;:::i;:::-;1951:48;;2046:2;2035:9;2031:18;2018:32;2008:42;;2100:3;2089:9;2085:19;2072:33;2114:29;2137:5;2114:29;:::i;:::-;2162:5;2152:15;;;1770:403;;;;;;;;:::o;2178:306::-;2236:6;2289:2;2277:9;2268:7;2264:23;2260:32;2257:2;;;2310:6;2302;2295:22;2257:2;2341:23;;-1:-1:-1;;;;;;2393:32:1;;2383:43;;2373:2;;2445:6;2437;2430:22;2489:924;2569:6;2622:2;2610:9;2601:7;2597:23;2593:32;2590:2;;;2643:6;2635;2628:22;2590:2;2681:9;2675:16;2710:18;2751:2;2743:6;2740:14;2737:2;;;2772:6;2764;2757:22;2737:2;2815:6;2804:9;2800:22;2790:32;;2860:7;2853:4;2849:2;2845:13;2841:27;2831:2;;2887:6;2879;2872:22;2831:2;2921;2915:9;2943:2;2939;2936:10;2933:2;;;2949:18;;:::i;:::-;3024:2;3018:9;2992:2;3078:13;;-1:-1:-1;;3074:22:1;;;3098:2;3070:31;3066:40;3054:53;;;3122:18;;;3142:22;;;3119:46;3116:2;;;3168:18;;:::i;:::-;3208:10;3204:2;3197:22;3243:2;3235:6;3228:18;3283:7;3278:2;3273;3269;3265:11;3261:20;3258:33;3255:2;;;3309:6;3301;3294:22;3255:2;3327:55;3379:2;3374;3366:6;3362:15;3357:2;3353;3349:11;3327:55;:::i;3418:194::-;3488:6;3541:2;3529:9;3520:7;3516:23;3512:32;3509:2;;;3562:6;3554;3547:22;3509:2;-1:-1:-1;3590:16:1;;3499:113;-1:-1:-1;3499:113:1:o;3617:257::-;3685:6;3738:2;3726:9;3717:7;3713:23;3709:32;3706:2;;;3759:6;3751;3744:22;3706:2;3796:9;3790:16;3815:29;3838:5;3815:29;:::i;3879:258::-;3921:3;3959:5;3953:12;3986:6;3981:3;3974:19;4002:63;4058:6;4051:4;4046:3;4042:14;4035:4;4028:5;4024:16;4002:63;:::i;:::-;4119:2;4098:15;-1:-1:-1;;4094:29:1;4085:39;;;;4126:4;4081:50;;3929:208;-1:-1:-1;;3929:208:1:o;4142:274::-;4271:3;4309:6;4303:13;4325:53;4371:6;4366:3;4359:4;4351:6;4347:17;4325:53;:::i;:::-;4394:16;;;;;4279:137;-1:-1:-1;;4279:137:1:o;4631:786::-;5042:25;5037:3;5030:38;5012:3;5097:6;5091:13;5113:62;5168:6;5163:2;5158:3;5154:12;5147:4;5139:6;5135:17;5113:62;:::i;:::-;-1:-1:-1;;;5234:2:1;5194:16;;;5226:11;;;5219:40;5284:13;;5306:63;5284:13;5355:2;5347:11;;5340:4;5328:17;;5306:63;:::i;:::-;5389:17;5408:2;5385:26;;5020:397;-1:-1:-1;;;;5020:397:1:o;6663:220::-;6812:2;6801:9;6794:21;6775:4;6832:45;6873:2;6862:9;6858:18;6850:6;6832:45;:::i;6888:461::-;7109:2;7098:9;7091:21;7072:4;7135:45;7176:2;7165:9;7161:18;7153:6;7135:45;:::i;:::-;7228:9;7220:6;7216:22;7211:2;7200:9;7196:18;7189:50;7256:33;7282:6;7274;7256:33;:::i;:::-;7248:41;;;7337:4;7329:6;7325:17;7320:2;7309:9;7305:18;7298:45;7081:268;;;;;;:::o;11400:356::-;11602:2;11584:21;;;11621:18;;;11614:30;11680:34;11675:2;11660:18;;11653:62;11747:2;11732:18;;11574:182::o;14596:128::-;14636:3;14667:1;14663:6;14660:1;14657:13;14654:2;;;14673:18;;:::i;:::-;-1:-1:-1;14709:9:1;;14644:80::o;14729:168::-;14769:7;14835:1;14831;14827:6;14823:14;14820:1;14817:21;14812:1;14805:9;14798:17;14794:45;14791:2;;;14842:18;;:::i;:::-;-1:-1:-1;14882:9:1;;14781:116::o;14902:258::-;14974:1;14984:113;14998:6;14995:1;14992:13;14984:113;;;15074:11;;;15068:18;15055:11;;;15048:39;15020:2;15013:10;14984:113;;;15115:6;15112:1;15109:13;15106:2;;;-1:-1:-1;;15150:1:1;15132:16;;15125:27;14955:205::o;15165:136::-;15204:3;15232:5;15222:2;;15241:18;;:::i;:::-;-1:-1:-1;;;15277:18:1;;15212:89::o;15306:127::-;15367:10;15362:3;15358:20;15355:1;15348:31;15398:4;15395:1;15388:15;15422:4;15419:1;15412:15;15438:127;15499:10;15494:3;15490:20;15487:1;15480:31;15530:4;15527:1;15520:15;15554:4;15551:1;15544:15;15570:114;15654:4;15647:5;15643:16;15636:5;15633:27;15623:2;;15674:1;15671;15664:12
Swarm Source
ipfs://de58d506c35c3a254557abca7d2d1548a4c5135ef18ac0b096caac5ede13ffb7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.000424 | 329.39 | $0.1397 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.