ERC-1155
Source Code
Overview
Max Total Supply
0 SSJ
Holders
588
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
DFOSuperSaiyanToken
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-09-19
*/
// File: node_modules\@openzeppelin\contracts\introspection\IERC165.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.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);
}
// File: @openzeppelin\contracts\token\ERC1155\IERC1155.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.2;
/**
* @dev Required interface of an ERC1155 compliant contract, as defined in the
* https://eips.ethereum.org/EIPS/eip-1155[EIP].
*
* _Available since v3.1._
*/
interface IERC1155 is IERC165 {
/**
* @dev Emitted when `value` tokens of token type `id` are transfered from `from` to `to` by `operator`.
*/
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
/**
* @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
* transfers.
*/
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
/**
* @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
* `approved`.
*/
event ApprovalForAll(address indexed account, address indexed operator, bool approved);
/**
* @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
*
* If an {URI} event was emitted for `id`, the standard
* https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
* returned by {IERC1155MetadataURI-uri}.
*/
event URI(string value, uint256 indexed id);
/**
* @dev Returns the amount of tokens of token type `id` owned by `account`.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) external view returns (uint256);
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
/**
* @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
*
* Emits an {ApprovalForAll} event.
*
* Requirements:
*
* - `operator` cannot be the caller.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
*
* See {setApprovalForAll}.
*/
function isApprovedForAll(address account, address operator) external view returns (bool);
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
* - `from` must have a balance of tokens of type `id` of at least `amount`.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}
// File: @openzeppelin\contracts\token\ERC1155\IERC1155Receiver.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.0;
/**
* _Available since v3.1._
*/
interface IERC1155Receiver is IERC165 {
/**
@dev Handles the receipt of a single ERC1155 token type. This function is
called at the end of a `safeTransferFrom` after the balance has been updated.
To accept the transfer, this must return
`bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
(i.e. 0xf23a6e61, or its own function selector).
@param operator The address which initiated the transfer (i.e. msg.sender)
@param from The address which previously owned the token
@param id The ID of the token being transferred
@param value The amount of tokens being transferred
@param data Additional data with no specified format
@return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
*/
function onERC1155Received(
address operator,
address from,
uint256 id,
uint256 value,
bytes calldata data
)
external
returns(bytes4);
/**
@dev Handles the receipt of a multiple ERC1155 token types. This function
is called at the end of a `safeBatchTransferFrom` after the balances have
been updated. To accept the transfer(s), this must return
`bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
(i.e. 0xbc197c81, or its own function selector).
@param operator The address which initiated the batch transfer (i.e. msg.sender)
@param from The address which previously owned the token
@param ids An array containing ids of each token being transferred (order and length must match values array)
@param values An array containing amounts of each token being transferred (order and length must match ids array)
@param data Additional data with no specified format
@return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
*/
function onERC1155BatchReceived(
address operator,
address from,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
)
external
returns(bytes4);
}
// File: contracts\standalone\IERC1155Views.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.0;
/**
* @title IERC1155Views - An optional utility interface to improve the ERC-1155 Standard.
* @dev This interface introduces some additional capabilities for ERC-1155 Tokens.
*/
interface IERC1155Views {
/**
* @dev Returns the total supply of the given token id
* @param objectId the id of the token whose availability you want to know
*/
function totalSupply(uint256 objectId) external view returns (uint256);
/**
* @dev Returns the name of the given token id
* @param objectId the id of the token whose name you want to know
*/
function name(uint256 objectId) external view returns (string memory);
/**
* @dev Returns the symbol of the given token id
* @param objectId the id of the token whose symbol you want to know
*/
function symbol(uint256 objectId) external view returns (string memory);
/**
* @dev Returns the decimals of the given token id
* @param objectId the id of the token whose decimals you want to know
*/
function decimals(uint256 objectId) external view returns (uint256);
/**
* @dev Returns the uri of the given token id
* @param objectId the id of the token whose uri you want to know
*/
function uri(uint256 objectId) external view returns (string memory);
}
// File: @openzeppelin\contracts\token\ERC20\IERC20.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.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);
}
// File: contracts\standalone\IERC20NFTWrapper.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.0;
interface IERC20NFTWrapper is IERC20 {
function init(uint256 objectId) external;
function mainWrapper() external view returns (address);
function objectId() external view returns (uint256);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint256);
function mint(address owner, uint256 amount) external;
function burn(address owner, uint256 amount) external;
}
// File: contracts\standalone\IERC1155Data.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.0;
interface IERC1155Data {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
}
// File: contracts\standalone\ISuperSaiyanToken.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.0;
interface ISuperSaiyanToken is IERC1155, IERC1155Receiver, IERC1155Views, IERC1155Data {
function init(
address model,
address source,
string calldata name,
string calldata symbol
) external;
function fromDecimals(uint256 objectId, uint256 amount)
external
view
returns (uint256);
function toDecimals(uint256 objectId, uint256 amount)
external
view
returns (uint256);
function getMintData(uint256 objectId)
external
view
returns (
string memory,
string memory,
uint256
);
function getModel() external view returns (address);
function source() external view returns (address);
function asERC20(uint256 objectId) external view returns (IERC20NFTWrapper);
function emitTransferSingleEvent(address sender, address from, address to, uint256 objectId, uint256 amount) external;
function mint(uint256 amount, string calldata partialUri)
external
returns (uint256, address);
function burn(
uint256 objectId,
uint256 amount,
bytes calldata data
) external;
function burnBatch(
uint256[] calldata objectIds,
uint256[] calldata amounts,
bytes calldata data
) external;
event Mint(uint256 objectId, address tokenAddress);
}
// File: contracts\standalone\voting\IDFOSuperSaiyanToken.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.0;
interface IDFOSuperSaiyanToken is ISuperSaiyanToken {
function doubleProxy() external view returns(address);
function setDoubleProxy(address newDoubleProxy) external;
function setUri(uint256 objectId, string calldata uri) external;
event UriChanged(uint256 indexed objectId, string oldUri, string newUri);
}
interface IDoubleProxy {
function proxy() external view returns(address);
}
interface IMVDProxy {
function getToken() external view returns(address);
function getStateHolderAddress() external view returns(address);
function getMVDWalletAddress() external view returns(address);
function getMVDFunctionalitiesManagerAddress() external view returns(address);
function getMVDFunctionalityProposalManagerAddress() external view returns(address);
function submit(string calldata codeName, bytes calldata data) external payable returns(bytes memory returnData);
}
interface IStateHolder {
function setUint256(string calldata name, uint256 value) external returns(uint256);
function getUint256(string calldata name) external view returns(uint256);
function getBool(string calldata varName) external view returns (bool);
function clear(string calldata varName) external returns(string memory oldDataType, bytes memory oldVal);
}
interface IMVDFunctionalitiesManager {
function isAuthorizedFunctionality(address functionality) external view returns(bool);
}
// File: @openzeppelin\contracts\GSN\Context.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.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 GSN 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 payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: @openzeppelin\contracts\math\SafeMath.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin\contracts\utils\Address.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.2;
/**
* @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) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
/**
* @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");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
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);
}
}
}
}
// File: @openzeppelin\contracts\introspection\ERC165.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts may inherit from this and call {_registerInterface} to declare
* their support of an interface.
*/
contract ERC165 is IERC165 {
/*
* bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
*/
bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
/**
* @dev Mapping of interface ids to whether or not it's supported.
*/
mapping(bytes4 => bool) private _supportedInterfaces;
constructor () internal {
// Derived contracts need only register support for their own interfaces,
// we register support for ERC165 itself here
_registerInterface(_INTERFACE_ID_ERC165);
}
/**
* @dev See {IERC165-supportsInterface}.
*
* Time complexity O(1), guaranteed to always use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
return _supportedInterfaces[interfaceId];
}
/**
* @dev Registers the contract as an implementer of the interface defined by
* `interfaceId`. Support of the actual ERC165 interface is automatic and
* registering its interface id is not required.
*
* See {IERC165-supportsInterface}.
*
* Requirements:
*
* - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
*/
function _registerInterface(bytes4 interfaceId) internal virtual {
require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
_supportedInterfaces[interfaceId] = true;
}
}
// File: contracts\standalone\SuperSaiyanToken.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.0;
/**
* @title SuperSaiyanToken - An improved ERC1155 token with ERC20 trading capabilities.
* @dev In the SuperSaiyanToken standard, there is no a centralized storage where to save every objectId info.
* In fact every NFT data is saved in a specific ERC20 token that can also work as a standalone one, and let transfer parts of an atomic object.
* The ERC20 represents a unique Token Id, and its supply represents the entire supply of that Token Id.
* You can instantiate a SuperSaiyanToken as a brand-new one, or as a wrapper for pre-existent classic ERC1155 NFT.
* In the first case, you can introduce some particular permissions to mint new tokens.
* In the second case, you need to send your NFTs to the Wrapped SuperSaiyanToken (using the classic safeTransferFrom or safeBatchTransferFrom methods)
* and it will create a brand new ERC20 Token or mint new supply (in the case some tokens with the same id were transfered before yours).
*/
contract SuperSaiyanToken is ISuperSaiyanToken, Context, ERC165 {
using SafeMath for uint256;
using Address for address;
bytes4 internal constant _INTERFACEobjectId_ERC1155 = 0xd9b67a26;
address private _source;
string internal _name;
string internal _symbol;
mapping(uint256 => string) internal _objectUris;
bool private _supportsName;
bool private _supportsSymbol;
bool private _supportsDecimals;
mapping(uint256 => address) internal _dest;
mapping(address => bool) internal _isMine;
mapping(address => mapping(address => bool)) internal _operatorApprovals;
address internal _model;
/**
* @dev Constructor
* When you create a SuperSaiyanToken, you can specify if you want to create a brand new one, passing the classic data like name, symbol, amd URI,
* or wrap a pre-existent ERC1155 NFT, passing its contract address.
* You can use just one of the two modes at the same time.
* In both cases, a ERC20 token address is mandatory. It will be used as a model to be cloned for every minted NFT.
* @param model the address of the ERC20 pre-deployed model. I will not be used in the procedure, but just cloned as a brand-new one every time a new NFT is minted.
* @param source the address of the ERC1155 NFT to be wrapped. If you want to create a brand new NFT, this value must be address(0).
* @param name the name of the brand new SuperSaiyanToken to be created. If you are wrapping a pre-existing ERC1155 NFT, this must be blank.
* @param symbol the symbol of the brand new SuperSaiyanToken to be created. If you are wrapping a pre-existing ERC1155 NFT, this must be blank.
*/
constructor(
address model,
address source,
string memory name,
string memory symbol
) public {
if(model != address(0)) {
init(model, source, name, symbol);
}
}
/**
* @dev Utility method which contains the logic of the constructor.
* This is a useful trick to instantiate a contract when it is cloned.
*/
function init(
address model,
address source,
string memory name,
string memory symbol
) public virtual override {
require(
_model == address(0),
"Init already called!"
);
require(
model != address(0),
"Model should be a valid ethereum address"
);
_model = model;
_source = source;
require(
_source != address(0) || keccak256(bytes(name)) != keccak256(""),
"At least a source contract or a name must be set"
);
require(
_source != address(0) || keccak256(bytes(symbol)) != keccak256(""),
"At least a source contract or a symbol must be set"
);
_registerInterface(this.onERC1155Received.selector);
_registerInterface(this.onERC1155BatchReceived.selector);
bool safeBatchTransferFrom = _checkAndInsertSelector(
this.safeBatchTransferFrom.selector
);
bool cumulativeInterface = _checkAndInsertSelector(
_INTERFACEobjectId_ERC1155
);
require(
_source == address(0) ||
safeBatchTransferFrom ||
cumulativeInterface,
"Looks like you're not wrapping a correct ERC1155 Token"
);
_checkAndInsertSelector(this.balanceOf.selector);
_checkAndInsertSelector(this.balanceOfBatch.selector);
_checkAndInsertSelector(this.setApprovalForAll.selector);
_checkAndInsertSelector(this.isApprovedForAll.selector);
_checkAndInsertSelector(this.safeTransferFrom.selector);
_checkAndInsertSelector(this.uri.selector);
_checkAndInsertSelector(this.totalSupply.selector);
_supportsName = _checkAndInsertSelector(0x00ad800c); //name(uint256)
_supportsSymbol = _checkAndInsertSelector(0x4e41a1fb); //symbol(uint256)
_supportsDecimals = _checkAndInsertSelector(this.decimals.selector);
_supportsDecimals = _source == address(0) ? false : _supportsDecimals;
_setAndCheckNameAndSymbol(name, symbol);
}
/**
* @dev Mint
* If the SuperSaiyanToken does not wrap a pre-existent NFT, this call is used to mint new NFTs, according to the permission rules provided by the Token creator.
* @param amount The amount of tokens to be created. It must be greater than 1 unity.
* @param objectUri The Uri to locate this new token's metadata.
*/
function mint(uint256 amount, string memory objectUri)
public
virtual
override
returns (uint256 objectId, address tokenAddress)
{
require(_source == address(0), "Cannot mint unexisting tokens");
require(
keccak256(bytes(objectUri)) != keccak256(""),
"Uri cannot be empty"
);
(objectId, tokenAddress) = _mint(msg.sender, 0, amount, true);
_objectUris[objectId] = objectUri;
}
/**
* @dev Burn
* You can choose to burn your NFTs.
* In case this Token wraps a pre-existent ERC1155 NFT, you will receive the wrapped NFTs.
*/
function burn(
uint256 objectId,
uint256 amount,
bytes memory data
) public virtual override {
asERC20(objectId).burn(msg.sender, toDecimals(objectId, amount));
if (_source != address(0)) {
IERC1155(_source).safeTransferFrom(
address(this),
msg.sender,
objectId,
amount,
data
);
}
}
/**
* @dev Burn Batch
* Same as burn, but for multiple NFTs at the same time
*/
function burnBatch(
uint256[] memory objectIds,
uint256[] memory amounts,
bytes memory data
) public virtual override {
for (uint256 i = 0; i < objectIds.length; i++) {
asERC20(objectIds[i]).burn(
msg.sender,
toDecimals(objectIds[i], amounts[i])
);
}
if (_source != address(0)) {
IERC1155(_source).safeBatchTransferFrom(
address(this),
msg.sender,
objectIds,
amounts,
data
);
}
}
/**
* @dev classic ERC-1155 onERC1155Received hook.
* This method can be called only by the wrapped classic ERC1155 NFT, if it exists.
* Call this method means that someone transfer original NFTs to receive wrapped ones.
* So this method will provide brand new NFTs
*/
function onERC1155Received(
address,
address owner,
uint256 objectId,
uint256 amount,
bytes memory
) public virtual override returns (bytes4) {
require(msg.sender == _source, "Unauthorized action!");
_mint(owner, objectId, amount, false);
return this.onERC1155Received.selector;
}
/**
* @dev classic ERC-1155 onERC1155BatchReceived hook.
* Same as onERC1155Received, but for multiple tokens at the same time
*/
function onERC1155BatchReceived(
address,
address owner,
uint256[] memory objectIds,
uint256[] memory amounts,
bytes memory
) public virtual override returns (bytes4) {
require(msg.sender == _source, "Unauthorized action!");
for (uint256 i = 0; i < objectIds.length; i++) {
_mint(owner, objectIds[i], amounts[i], false);
}
return this.onERC1155BatchReceived.selector;
}
/**
* @dev this method sends the correct creation parameters for the new ERC-20 to be minted.
* It takes thata from the wrapped ERC1155 NFT or from the parameters passed at construction time.
*/
function getMintData(uint256 objectId)
public
virtual
override
view
returns (
string memory name,
string memory symbol,
uint256 decimals
)
{
name = _name;
symbol = _symbol;
decimals = 18;
if (
_source != address(0) &&
(_supportsName || _supportsSymbol || _supportsDecimals)
) {
IERC1155Views views = IERC1155Views(_source);
name = _supportsName ? views.name(objectId) : name;
symbol = _supportsSymbol ? views.symbol(objectId) : symbol;
decimals = _supportsDecimals ? views.decimals(objectId) : decimals;
}
}
/**
* @dev get the address of the ERC20 Contract used as a model
*/
function getModel() public virtual override view returns (address) {
return _model;
}
/**
* @dev Utility method to convert from decimals notation the original NFT (if any) to the ERC20 ones.
*/
function fromDecimals(uint256 objectId, uint256 amount)
public
virtual
override
view
returns (uint256)
{
return _supportsDecimals ? amount : (amount / (10**decimals(objectId)));
}
/**
* @dev Utility method to convert to decimals notation the original NFT (if any) to the ERC20 ones.
*/
function toDecimals(uint256 objectId, uint256 amount)
public
virtual
override
view
returns (uint256)
{
return _supportsDecimals ? amount : (amount * (10**decimals(objectId)));
}
/**
* @dev Returns the address of the wrapped ERC1155 NFT (if any)
*/
function source() public virtual override view returns (address) {
return _source;
}
/**
* @dev Gives back the address of the ERC20 Token representing this Token Id
*/
function asERC20(uint256 objectId)
public
virtual
override
view
returns (IERC20NFTWrapper)
{
return IERC20NFTWrapper(_dest[objectId]);
}
/**
* @dev Returns the total supply of the given token id
* @param objectId the id of the token whose availability you want to know
*/
function totalSupply(uint256 objectId)
public
virtual
override
view
returns (uint256)
{
return fromDecimals(objectId, asERC20(objectId).totalSupply());
}
/**
* @dev Returns the name of the given token id
* @param objectId the id of the token whose name you want to know
*/
function name(uint256 objectId)
public
virtual
override
view
returns (string memory)
{
return asERC20(objectId).name();
}
function name() public virtual override view returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the given token id
* @param objectId the id of the token whose symbol you want to know
*/
function symbol(uint256 objectId)
public
virtual
override
view
returns (string memory)
{
return asERC20(objectId).symbol();
}
function symbol() public virtual override view returns (string memory) {
return _symbol;
}
/**
* @dev Returns the decimals of the given token id
* @param objectId the id of the token whose decimals you want to know
*/
function decimals(uint256 objectId)
public
virtual
override
view
returns (uint256)
{
return asERC20(objectId).decimals();
}
/**
* @dev Returns the uri of the given token id
* @param objectId the id of the token whose uri you want to know
*/
function uri(uint256 objectId)
public
virtual
override
view
returns (string memory)
{
return
_source == address(0)
? _objectUris[objectId]
: IERC1155Views(_source).uri(objectId);
}
/**
* @dev Classic ERC1155 Standard Method
*/
function balanceOf(address account, uint256 objectId)
public
virtual
override
view
returns (uint256)
{
return fromDecimals(objectId, asERC20(objectId).balanceOf(account));
}
/**
* @dev Classic ERC1155 Standard Method
*/
function balanceOfBatch(
address[] memory accounts,
uint256[] memory objectIds
) public virtual override view returns (uint256[] memory) {
uint256[] memory balances = new uint256[](accounts.length);
for (uint256 i = 0; i < accounts.length; i++) {
balances[i] = balanceOf(accounts[i], objectIds[i]);
}
}
/**
* @dev Classic ERC1155 Standard Method
*/
function setApprovalForAll(address operator, bool approved)
public
virtual
override
{
address sender = _msgSender();
require(
sender != operator,
"ERC1155: setting approval status for self"
);
_operatorApprovals[sender][operator] = approved;
emit ApprovalForAll(sender, operator, approved);
}
/**
* @dev Classic ERC1155 Standard Method
*/
function isApprovedForAll(address account, address operator)
public
virtual
override
view
returns (bool)
{
return _operatorApprovals[account][operator];
}
/**
* @dev Classic ERC1155 Standard Method
*/
function safeTransferFrom(
address from,
address to,
uint256 objectId,
uint256 amount,
bytes memory data
) public virtual override {
require(to != address(0), "ERC1155: transfer to the zero address");
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: caller is not owner nor approved"
);
address operator = _msgSender();
asERC20(objectId).transferFrom(from, to, toDecimals(objectId, amount));
emit TransferSingle(operator, from, to, objectId, amount);
_doSafeTransferAcceptanceCheck(
operator,
from,
to,
objectId,
amount,
data
);
}
/**
* @dev Classic ERC1155 Standard Method
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] memory objectIds,
uint256[] memory amounts,
bytes memory data
) public virtual override {
require(to != address(0), "ERC1155: transfer to the zero address");
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: caller is not owner nor approved"
);
for (uint256 i = 0; i < objectIds.length; i++) {
asERC20(objectIds[i]).transferFrom(
from,
to,
toDecimals(objectIds[i], amounts[i])
);
}
address operator = _msgSender();
emit TransferBatch(operator, from, to, objectIds, amounts);
_doSafeBatchTransferAcceptanceCheck(
operator,
from,
to,
objectIds,
amounts,
data
);
}
function emitTransferSingleEvent(address sender, address from, address to, uint256 objectId, uint256 amount) public override {
require(_dest[objectId] == msg.sender, "Unauthorized Action!");
uint256 entireAmount = fromDecimals(objectId, amount);
if(entireAmount == 0) {
return;
}
emit TransferSingle(sender, from, to, objectId, entireAmount);
}
function _doSafeTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
) internal virtual {
if (to.isContract()) {
try
IERC1155Receiver(to).onERC1155Received(
operator,
from,
id,
amount,
data
)
returns (bytes4 response) {
if (
response != IERC1155Receiver(to).onERC1155Received.selector
) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _doSafeBatchTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {
if (to.isContract()) {
try
IERC1155Receiver(to).onERC1155BatchReceived(
operator,
from,
ids,
amounts,
data
)
returns (bytes4 response) {
if (
response !=
IERC1155Receiver(to).onERC1155BatchReceived.selector
) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _checkAndInsertSelector(bytes4 selector)
internal
virtual
returns (bool response)
{
if (_source == address(0)) {
_registerInterface(selector);
return true;
}
try ERC165(_source).supportsInterface(selector) returns (bool res) {
if (response = res) {
_registerInterface(selector);
}
} catch {}
}
function _clone(address original) internal returns (address copy) {
assembly {
mstore(
0,
or(
0x5880730000000000000000000000000000000000000000803b80938091923cF3,
mul(original, 0x1000000000000000000)
)
)
copy := create(0, 0, 32)
switch extcodesize(copy)
case 0 {
invalid()
}
}
}
function _mint(
address from,
uint256 oldObjectId,
uint256 amount,
bool generateObjectId
) internal virtual returns (uint256, address) {
uint256 objectId = oldObjectId;
IERC20NFTWrapper wrapper = IERC20NFTWrapper(_dest[objectId]);
if (_dest[objectId] == address(0) || generateObjectId) {
require(
amount > _getTokenUnity(objectId),
"You need to pass more than a token"
);
wrapper = IERC20NFTWrapper(_clone(getModel()));
if(generateObjectId) {
objectId = uint256(address(wrapper));
}
wrapper.init(objectId);
_isMine[_dest[objectId] = address(wrapper)] = true;
emit Mint(objectId, address(wrapper));
}
wrapper.mint(from, _convertForMint(objectId, amount));
emit TransferSingle(address(this), address(0), from, objectId, amount);
return (objectId, address(wrapper));
}
function _getTokenUnity(uint256 objectId)
internal
virtual
view
returns (uint256)
{
if (_source == address(0)) {
return (10**18);
}
if (_supportsDecimals) {
return (10**IERC1155Views(_source).decimals(objectId));
}
return 1;
}
function _convertForMint(uint256 objectId, uint256 amount)
internal
virtual
view
returns (uint256)
{
if (_source != address(0) && _supportsDecimals) {
return amount * (10**IERC1155Views(_source).decimals(objectId));
}
return amount;
}
function _setAndCheckNameAndSymbol(
string memory inputName,
string memory inputSymbol
) internal virtual {
_name = inputName;
_symbol = inputSymbol;
if (_source != address(0)) {
IERC1155Data data = IERC1155Data(_source);
try data.name() returns (string memory n) {
_name = n;
} catch {}
try data.symbol() returns (string memory s) {
_symbol = s;
} catch {}
}
require(keccak256(bytes(_name)) != keccak256(""), "Name is mandatory");
require(
keccak256(bytes(_symbol)) != keccak256(""),
"Symbol is mandatory"
);
}
}
// File: contracts\standalone\voting\DFOSuperSaiyanToken.sol
// SPDX_License_Identifier: MIT
pragma solidity ^0.6.0;
/**
* @title DFOSuperSaiyanToken
*/
contract DFOSuperSaiyanToken is IDFOSuperSaiyanToken, SuperSaiyanToken(address(0), address(0), "", "") {
address private _doubleProxy;
constructor(
address model,
address doubleProxy,
string memory name,
string memory symbol
) public {
if(model != address(0)) {
init(model, doubleProxy, name, symbol);
}
}
function init(
address model,
address doubleProxy,
string memory name,
string memory symbol
) public override(ISuperSaiyanToken, SuperSaiyanToken) {
super.init(model, address(0), name, symbol);
_doubleProxy = doubleProxy;
}
modifier byDFO {
if(_doubleProxy != address(0)) {
require(IMVDFunctionalitiesManager(IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getMVDFunctionalitiesManagerAddress()).isAuthorizedFunctionality(msg.sender), "Unauthorized Action!");
}
_;
}
function doubleProxy() public override view returns(address) {
return _doubleProxy;
}
function setDoubleProxy(address newDoubleProxy) public override byDFO {
_doubleProxy = newDoubleProxy;
}
function mint(uint256 amount, string memory objectUri)
public
virtual
override(ISuperSaiyanToken, SuperSaiyanToken)
byDFO
returns (uint256 objectId, address tokenAddress)
{
(objectId, tokenAddress) = super.mint(amount, objectUri);
emit UriChanged(objectId, "", objectUri);
}
function setUri(uint256 objectId, string memory newUri) public byDFO override {
emit UriChanged(objectId, _objectUris[objectId], newUri);
_objectUris[objectId] = newUri;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"model","type":"address"},{"internalType":"address","name":"doubleProxy","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"objectId","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"objectId","type":"uint256"},{"indexed":false,"internalType":"string","name":"oldUri","type":"string"},{"indexed":false,"internalType":"string","name":"newUri","type":"string"}],"name":"UriChanged","type":"event"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"asERC20","outputs":[{"internalType":"contract IERC20NFTWrapper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"objectIds","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"objectIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doubleProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitTransferSingleEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"fromDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"getMintData","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getModel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"model","type":"address"},{"internalType":"address","name":"doubleProxy","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"objectUri","type":"string"}],"name":"mint","outputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256[]","name":"objectIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"objectIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDoubleProxy","type":"address"}],"name":"setDoubleProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"string","name":"newUri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"source","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"toDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"objectId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506040516200527438038062005274833981810160405260808110156200003757600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200006357600080fd5b9083019060208201858111156200007957600080fd5b82516401000000008111828201881017156200009457600080fd5b82525081516020918201929091019080838360005b83811015620000c3578181015183820152602001620000a9565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b9083019060208201858111156200012b57600080fd5b82516401000000008111828201881017156200014657600080fd5b82525081516020918201929091019080838360005b83811015620001755781810151838201526020016200015b565b50505050905090810190601f168015620001a35780820380516001836020036101000a031916815260200191505b5060208082016040908152600080845281519283019091528082529450849350909150620001d86301ffc9a760e01b62000222565b6001600160a01b03841615620001f657620001f684848484620002a7565b505050506001600160a01b0384161562000218576200021884848484620002a7565b5050505062000c6e565b6001600160e01b0319808216141562000282576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b620002c18460008484620002e660201b62002fb31760201c565b5050600a80546001600160a01b0319166001600160a01b039290921691909117905550565b6009546001600160a01b03161562000345576040805162461bcd60e51b815260206004820152601460248201527f496e697420616c72656164792063616c6c656421000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0384166200038c5760405162461bcd60e51b8152600401808060200182810382526028815260200180620051946028913960400191505060405180910390fd5b600980546001600160a01b038087166001600160a01b031992831617909255600180548684169216919091179081905516151580620003e0575081516020830120600080516020620051bc83398151915214155b6200041d5760405162461bcd60e51b8152600401808060200182810382526030815260200180620052446030913960400191505060405180910390fd5b6001546001600160a01b03161515806200044c575080516020820120600080516020620051bc83398151915214155b620004895760405162461bcd60e51b8152600401808060200182810382526032815260200180620052126032913960400191505060405180910390fd5b6200049b63f23a6e6160e01b62000222565b620004ad63bc197c8160e01b62000222565b6000620004c1631759616b60e11b62000687565b90506000620004d7636cdb3d1360e11b62000687565b6001549091506001600160a01b03161580620004f05750815b80620004f95750805b620005365760405162461bcd60e51b8152600401808060200182810382526036815260200180620051dc6036913960400191505060405180910390fd5b62000547627eeac760e11b62000687565b506200055a6313849cfd60e21b62000687565b506200056d63a22cb46560e01b62000687565b506200058063e985e9c560e01b62000687565b5062000593637921219560e11b62000687565b50620005a66303a24d0760e21b62000687565b50620005b963bd85b03960e01b62000687565b50620005cb622b600360e21b62000687565b6005805460ff1916911515919091179055620005ee634e41a1fb60e01b62000687565b600580549115156101000261ff001990921691909117905562000618631fa3f33160e11b62000687565b60058054911515620100000262ff0000199092169190911790556001546001600160a01b031615620006565760055462010000900460ff1662000659565b60005b60058054911515620100000262ff0000199092169190911790556200067f848462000753565b505050505050565b6001546000906001600160a01b0316620006af57620006a68262000222565b5060016200074e565b600154604080516301ffc9a760e01b81526001600160e01b03198516600482015290516001600160a01b03909216916301ffc9a791602480820192602092909190829003018186803b1580156200070557600080fd5b505afa9250505080156200072c57506040513d60208110156200072757600080fd5b505160015b62000737576200074e565b80915081156200074c576200074c8362000222565b505b919050565b81516200076890600290602085019062000bd2565b5080516200077e90600390602084019062000bd2565b506001546001600160a01b03161562000a3657600154604080516306fdde0360e01b815290516001600160a01b039092169182916306fdde03916004808301926000929190829003018186803b158015620007d857600080fd5b505afa925050508015620008c657506040513d6000823e601f3d908101601f1916820160405260208110156200080d57600080fd5b81019080805160405193929190846401000000008211156200082e57600080fd5b9083019060208201858111156200084457600080fd5b82516401000000008111828201881017156200085f57600080fd5b82525081516020918201929091019080838360005b838110156200088e57818101518382015260200162000874565b50505050905090810190601f168015620008bc5780820380516001836020036101000a031916815260200191505b5060405250505060015b620008d157620008e9565b8051620008e690600290602084019062000bd2565b50505b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200092357600080fd5b505afa92505050801562000a1157506040513d6000823e601f3d908101601f1916820160405260208110156200095857600080fd5b81019080805160405193929190846401000000008211156200097957600080fd5b9083019060208201858111156200098f57600080fd5b8251640100000000811182820188101715620009aa57600080fd5b82525081516020918201929091019080838360005b83811015620009d9578181015183820152602001620009bf565b50505050905090810190601f16801562000a075780820380516001836020036101000a031916815260200191505b5060405250505060015b62000a1c5762000a34565b805162000a3190600390602084019062000bd2565b50505b505b600080516020620051bc8339815191526002604051808280546001816001161561010002031660029004801562000aa75780601f1062000a8457610100808354040283529182019162000aa7565b820191906000526020600020905b81548152906001019060200180831162000a92575b50509150506040518091039020141562000afc576040805162461bcd60e51b81526020600482015260116024820152704e616d65206973206d616e6461746f727960781b604482015290519081900360640190fd5b600080516020620051bc8339815191526003604051808280546001816001161561010002031660029004801562000b6d5780601f1062000b4a57610100808354040283529182019162000b6d565b820191906000526020600020905b81548152906001019060200180831162000b58575b50509150506040518091039020141562000bce576040805162461bcd60e51b815260206004820152601360248201527f53796d626f6c206973206d616e6461746f727900000000000000000000000000604482015290519081900360640190fd5b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000c1557805160ff191683800117855562000c45565b8280016001018555821562000c45579182015b8281111562000c4557825182559160200191906001019062000c28565b5062000c5392915062000c57565b5090565b5b8082111562000c53576000815560010162000c58565b6145168062000c7e6000396000f3fe608060405234801561001057600080fd5b50600436106101d85760003560e01c806377097fc811610104578063bc197c81116100a2578063e82b15f411610071578063e82b15f414610f7e578063e985e9c514610fc0578063f23a6e6114610fee578063f242432a146110b7576101d8565b8063bc197c8114610bb5578063bd85b03914610d93578063cbd99d0314610db0578063e090fa3c14610dd6576101d8565b806395d89b41116100de57806395d89b4114610b5a578063a0bfa1e014610b62578063a22cb46514610b6a578063a728ca8314610b98576101d8565b806377097fc814610933578063782f08ae146109ff57806380a5a37114610aaa576101d8565b80633f47e6621161017c5780634eb9b5921161014b5780634eb9b592146107e257806367e828bf1461080657806372f71b221461080e57806373f1642514610831576101d8565b80633f47e662146104f35780634d91d7d9146105105780634e1273f4146106525780634e41a1fb146107c5576101d8565b806306fdde03116101b857806306fdde03146102e85780630e89341c146102f0578063174e20e61461030d5780632eb2c2d614610330576101d8565b8062ad800c146101dd578062fdd58e1461026f57806301ffc9a7146102ad575b600080fd5b6101fa600480360360208110156101f357600080fd5b5035611180565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023457818101518382015260200161021c565b50505050905090810190601f1680156102615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61029b6004803603604081101561028557600080fd5b506001600160a01b0381351690602001356112b6565b60408051918252519081900360200190f35b6102d4600480360360208110156102c357600080fd5b50356001600160e01b03191661134b565b604080519115158252519081900360200190f35b6101fa61136a565b6101fa6004803603602081101561030657600080fd5b50356113fe565b61029b6004803603604081101561032357600080fd5b50803590602001356115ec565b6104f1600480360360a081101561034657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561037957600080fd5b82018360208201111561038b57600080fd5b803590602001918460208302840111600160201b831117156103ac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103fb57600080fd5b82018360208201111561040d57600080fd5b803590602001918460208302840111600160201b8311171561042e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561047d57600080fd5b82018360208201111561048f57600080fd5b803590602001918460018302840111600160201b831117156104b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611618945050505050565b005b61029b6004803603602081101561050957600080fd5b50356118b9565b6104f16004803603608081101561052657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561055957600080fd5b82018360208201111561056b57600080fd5b803590602001918460018302840111600160201b8311171561058c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156105de57600080fd5b8201836020820111156105f057600080fd5b803590602001918460018302840111600160201b8311171561061157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061192e945050505050565b6107756004803603604081101561066857600080fd5b810190602081018135600160201b81111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460208302840111600160201b831117156106b557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561070457600080fd5b82018360208201111561071657600080fd5b803590602001918460208302840111600160201b8311171561073757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611960945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107b1578181015183820152602001610799565b505050509050019250505060405180910390f35b6101fa600480360360208110156107db57600080fd5b5035611a0b565b6107ea611a4e565b604080516001600160a01b039092168252519081900360200190f35b6107ea611a5d565b61029b6004803603604081101561082457600080fd5b5080359060200135611a6c565b61084e6004803603602081101561084757600080fd5b5035611a99565b604051808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561089557818101518382015260200161087d565b50505050905090810190601f1680156108c25780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156108f55781810151838201526020016108dd565b50505050905090810190601f1680156109225780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b6109de6004803603604081101561094957600080fd5b81359190810190604081016020820135600160201b81111561096a57600080fd5b82018360208201111561097c57600080fd5b803590602001918460018302840111600160201b8311171561099d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f30945050505050565b604080519283526001600160a01b0390911660208301528051918290030190f35b6104f160048036036040811015610a1557600080fd5b81359190810190604081016020820135600160201b811115610a3657600080fd5b820183602082011115610a4857600080fd5b803590602001918460018302840111600160201b83111715610a6957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506121b1945050505050565b6104f160048036036060811015610ac057600080fd5b813591602081013591810190606081016040820135600160201b811115610ae657600080fd5b820183602082011115610af857600080fd5b803590602001918460018302840111600160201b83111715610b1957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506124ac945050505050565b6101fa61262f565b6107ea612690565b6104f160048036036040811015610b8057600080fd5b506001600160a01b038135169060200135151561269f565b6107ea60048036036020811015610bae57600080fd5b503561276a565b610d76600480360360a0811015610bcb57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b811115610bfe57600080fd5b820183602082011115610c1057600080fd5b803590602001918460208302840111600160201b83111715610c3157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c8057600080fd5b820183602082011115610c9257600080fd5b803590602001918460208302840111600160201b83111715610cb357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610d0257600080fd5b820183602082011115610d1457600080fd5b803590602001918460018302840111600160201b83111715610d3557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612785945050505050565b604080516001600160e01b03199092168252519081900360200190f35b61029b60048036036020811015610da957600080fd5b503561283a565b6104f160048036036020811015610dc657600080fd5b50356001600160a01b0316612881565b6104f160048036036060811015610dec57600080fd5b810190602081018135600160201b811115610e0657600080fd5b820183602082011115610e1857600080fd5b803590602001918460208302840111600160201b83111715610e3957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e8857600080fd5b820183602082011115610e9a57600080fd5b803590602001918460208302840111600160201b83111715610ebb57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f0a57600080fd5b820183602082011115610f1c57600080fd5b803590602001918460018302840111600160201b83111715610f3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612a58945050505050565b6104f1600480360360a0811015610f9457600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612c6f565b6102d460048036036040811015610fd657600080fd5b506001600160a01b0381358116916020013516612d50565b610d76600480360360a081101561100457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561104357600080fd5b82018360208201111561105557600080fd5b803590602001918460018302840111600160201b8311171561107657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612d7e945050505050565b6104f1600480360360a08110156110cd57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561110c57600080fd5b82018360208201111561111e57600080fd5b803590602001918460018302840111600160201b8311171561113f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612df8945050505050565b606061118b8261276a565b6001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156111c357600080fd5b505afa1580156111d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561120057600080fd5b8101908080516040519392919084600160201b82111561121f57600080fd5b90830190602082018581111561123457600080fd5b8251600160201b81118282018810171561124d57600080fd5b82525081516020918201929091019080838360005b8381101561127a578181015183820152602001611262565b50505050905090810190601f1680156112a75780820380516001836020036101000a031916815260200191505b5060405250505090505b919050565b6000611342826112c58461276a565b6001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d602081101561133b57600080fd5b5051611a6c565b90505b92915050565b6001600160e01b03191660009081526020819052604090205460ff1690565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156113f35780601f106113c8576101008083540402835291602001916113f3565b820191906000526020600020905b8154815290600101906020018083116113d657829003601f168201915b505050505090505b90565b6001546060906001600160a01b03161561154e57600154604080516303a24d0760e21b81526004810185905290516001600160a01b0390921691630e89341c91602480820192600092909190829003018186803b15801561145e57600080fd5b505afa158015611472573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561149b57600080fd5b8101908080516040519392919084600160201b8211156114ba57600080fd5b9083019060208201858111156114cf57600080fd5b8251600160201b8111828201881017156114e857600080fd5b82525081516020918201929091019080838360005b838110156115155781810151838201526020016114fd565b50505050905090810190601f1680156115425780820380516001836020036101000a031916815260200191505b50604052505050611345565b60008281526004602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505092915050565b60055460009062010000900460ff1661161257611608836118b9565b600a0a8202611342565b50919050565b6001600160a01b03841661165d5760405162461bcd60e51b81526004018080602001828103825260258152602001806144716025913960400191505060405180910390fd5b611665613314565b6001600160a01b0316856001600160a01b0316148061169057506116908561168b613314565b612d50565b6116cb5760405162461bcd60e51b81526004018080602001828103825260298152602001806143b06029913960400191505060405180910390fd5b60005b83518110156117bd576116f38482815181106116e657fe5b602002602001015161276a565b6001600160a01b03166323b872dd878761173388868151811061171257fe5b602002602001015188878151811061172657fe5b60200260200101516115ec565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b505050506040513d60208110156117b357600080fd5b50506001016116ce565b5060006117c8613314565b9050846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561184f578181015183820152602001611837565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561188e578181015183820152602001611876565b5050505090500194505050505060405180910390a46118b1818787878787613318565b505050505050565b60006118c48261276a565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fc57600080fd5b505afa158015611910573d6000803e3d6000fd5b505050506040513d602081101561192657600080fd5b505192915050565b61193b8460008484612fb3565b5050600a80546001600160a01b0319166001600160a01b039290921691909117905550565b606080835167ffffffffffffffff8111801561197b57600080fd5b506040519080825280602002602001820160405280156119a5578160200160208202803683370190505b50905060005b8451811015611a03576119e48582815181106119c357fe5b60200260200101518583815181106119d757fe5b60200260200101516112b6565b8282815181106119f057fe5b60209081029190910101526001016119ab565b505092915050565b6060611a168261276a565b6001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156111c357600080fd5b600a546001600160a01b031690565b6001546001600160a01b031690565b60055460009062010000900460ff1661161257611a88836118b9565b600a0a8281611a9357fe5b04611342565b60028054604080516020601f600019610100600187161502019094168590049384018190048102820181019092528281526060938493600093830182828015611b235780601f10611af857610100808354040283529160200191611b23565b820191906000526020600020905b815481529060010190602001808311611b0657829003601f168201915b505060038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815296995091945092508401905082828015611bb45780601f10611b8957610100808354040283529160200191611bb4565b820191906000526020600020905b815481529060010190602001808311611b9757829003601f168201915b5050600154939550601294505050506001600160a01b031615801590611c00575060055460ff1680611bed5750600554610100900460ff165b80611c00575060055462010000900460ff165b15611f29576001546005546001600160a01b039091169060ff16611c245783611d53565b806001600160a01b031662ad800c866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611c6757600080fd5b505afa158015611c7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ca457600080fd5b8101908080516040519392919084600160201b821115611cc357600080fd5b908301906020820185811115611cd857600080fd5b8251600160201b811182820188101715611cf157600080fd5b82525081516020918201929091019080838360005b83811015611d1e578181015183820152602001611d06565b50505050905090810190601f168015611d4b5780820380516001836020036101000a031916815260200191505b506040525050505b600554909450610100900460ff16611d6b5782611e9b565b806001600160a01b0316634e41a1fb866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611daf57600080fd5b505afa158015611dc3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611dec57600080fd5b8101908080516040519392919084600160201b821115611e0b57600080fd5b908301906020820185811115611e2057600080fd5b8251600160201b811182820188101715611e3957600080fd5b82525081516020918201929091019080838360005b83811015611e66578181015183820152602001611e4e565b50505050905090810190601f168015611e935780820380516001836020036101000a031916815260200191505b506040525050505b60055490935062010000900460ff16611eb45781611f25565b806001600160a01b0316633f47e662866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611ef857600080fd5b505afa158015611f0c573d6000803e3d6000fd5b505050506040513d6020811015611f2257600080fd5b50515b9150505b9193909250565b600a5460009081906001600160a01b0316156120ea57600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9457600080fd5b505afa158015611fa8573d6000803e3d6000fd5b505050506040513d6020811015611fbe57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561200257600080fd5b505afa158015612016573d6000803e3d6000fd5b505050506040513d602081101561202c57600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b15801561207657600080fd5b505afa15801561208a573d6000803e3d6000fd5b505050506040513d60208110156120a057600080fd5b50516120ea576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6120f484846135cc565b8092508193505050817ff1396a8c166fbd80c99871753dbc42e202aa19cb3c6f4bb476abb4a239f7703484604051808060200180602001838103835260008152602001602001838103825284818151815260200191508051906020019080838360005b8381101561216f578181015183820152602001612157565b50505050905090810190601f16801561219c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a29250929050565b600a546001600160a01b03161561236657600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561221057600080fd5b505afa158015612224573d6000803e3d6000fd5b505050506040513d602081101561223a57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561227e57600080fd5b505afa158015612292573d6000803e3d6000fd5b505050506040513d60208110156122a857600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156122f257600080fd5b505afa158015612306573d6000803e3d6000fd5b505050506040513d602081101561231c57600080fd5b5051612366576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600082815260046020908152604091829020825183815281546002600019610100600184161502019091160493810184905285937ff1396a8c166fbd80c99871753dbc42e202aa19cb3c6f4bb476abb4a239f770349386929182918201906060830190869080156124185780601f106123ed57610100808354040283529160200191612418565b820191906000526020600020905b8154815290600101906020018083116123fb57829003601f168201915b5050838103825284518152845160209182019186019080838360005b8381101561244c578181015183820152602001612434565b50505050905090810190601f1680156124795780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2600082815260046020908152604090912082516124a7928401906141cd565b505050565b6124b58361276a565b6001600160a01b0316639dc29fac336124ce86866115ec565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561251457600080fd5b505af1158015612528573d6000803e3d6000fd5b50506001546001600160a01b03161591506124a7905057600154604051637921219560e11b815230600482018181523360248401819052604484018890526064840187905260a060848501908152865160a486015286516001600160a01b039096169563f242432a9592938a938a938a93909160c40190602085019080838360005b838110156125c25781810151838201526020016125aa565b50505050905090810190601f1680156125ef5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561261257600080fd5b505af1158015612626573d6000803e3d6000fd5b50505050505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113f35780601f106113c8576101008083540402835291602001916113f3565b6009546001600160a01b031690565b60006126a9613314565b9050826001600160a01b0316816001600160a01b031614156126fc5760405162461bcd60e51b81526004018080602001828103825260298152602001806144b86029913960400191505060405180910390fd5b6001600160a01b03818116600081815260086020908152604080832094881680845294825291829020805460ff1916871515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b6000908152600660205260409020546001600160a01b031690565b6001546000906001600160a01b031633146127de576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b60005b84518110156128275761281d868683815181106127fa57fe5b602002602001015186848151811061280e57fe5b602002602001015160006136ca565b50506001016127e1565b5063bc197c8160e01b9695505050505050565b6000611345826128498461276a565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561131157600080fd5b600a546001600160a01b031615612a3657600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156128e057600080fd5b505afa1580156128f4573d6000803e3d6000fd5b505050506040513d602081101561290a57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561294e57600080fd5b505afa158015612962573d6000803e3d6000fd5b505050506040513d602081101561297857600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156129c257600080fd5b505afa1580156129d6573d6000803e3d6000fd5b505050506040513d60208110156129ec57600080fd5b5051612a36576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8351811015612b0f57612a738482815181106116e657fe5b6001600160a01b0316639dc29fac33612aa5878581518110612a9157fe5b602002602001015187868151811061172657fe5b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612aeb57600080fd5b505af1158015612aff573d6000803e3d6000fd5b505060019092019150612a5b9050565b506001546001600160a01b0316156124a757600154604051631759616b60e11b81523060048201818152336024840181905260a060448501908152885160a486015288516001600160a01b0390961695632eb2c2d69592938a938a938a9390916064810191608482019160c401906020808a01910280838360005b83811015612ba2578181015183820152602001612b8a565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612be1578181015183820152602001612bc9565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612c1d578181015183820152602001612c05565b50505050905090810190601f168015612c4a5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561261257600080fd5b6000828152600660205260409020546001600160a01b03163314612cd1576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6000612cdd8383611a6c565b905080612cea5750612d49565b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628685604051808381526020018281526020019250505060405180910390a4505b5050505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6001546000906001600160a01b03163314612dd7576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b612de485858560006136ca565b5063f23a6e6160e01b979650505050505050565b6001600160a01b038416612e3d5760405162461bcd60e51b81526004018080602001828103825260258152602001806144716025913960400191505060405180910390fd5b612e45613314565b6001600160a01b0316856001600160a01b03161480612e6b5750612e6b8561168b613314565b612ea65760405162461bcd60e51b81526004018080602001828103825260298152602001806143b06029913960400191505060405180910390fd5b6000612eb0613314565b9050612ebb8461276a565b6001600160a01b03166323b872dd8787612ed588886115ec565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015612f2b57600080fd5b505af1158015612f3f573d6000803e3d6000fd5b505050506040513d6020811015612f5557600080fd5b5050604080518581526020810185905281516001600160a01b03808916938a821693918616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629281900390910190a46118b1818787878787613908565b6009546001600160a01b031615613008576040805162461bcd60e51b8152602060048201526014602482015273496e697420616c72656164792063616c6c65642160601b604482015290519081900360640190fd5b6001600160a01b03841661304d5760405162461bcd60e51b81526004018080602001828103825260288152602001806143686028913960400191505060405180910390fd5b600980546001600160a01b038087166001600160a01b03199283161790925560018054868416921691909117908190551615158061309f57508151602083012060008051602061439083398151915214155b6130da5760405162461bcd60e51b81526004018080602001828103825260308152602001806144416030913960400191505060405180910390fd5b6001546001600160a01b031615158061310757508051602082012060008051602061439083398151915214155b6131425760405162461bcd60e51b815260040180806020018281038252603281526020018061440f6032913960400191505060405180910390fd5b61315263f23a6e6160e01b613a79565b61316263bc197c8160e01b613a79565b6000613174631759616b60e11b613afd565b90506000613188636cdb3d1360e11b613afd565b6001549091506001600160a01b031615806131a05750815b806131a85750805b6131e35760405162461bcd60e51b81526004018080602001828103825260368152602001806143d96036913960400191505060405180910390fd5b6131f2627eeac760e11b613afd565b506132036313849cfd60e21b613afd565b5061321463a22cb46560e01b613afd565b5061322563e985e9c560e01b613afd565b50613236637921219560e11b613afd565b506132476303a24d0760e21b613afd565b5061325863bd85b03960e01b613afd565b50613268622b600360e21b613afd565b6005805460ff1916911515919091179055613289634e41a1fb60e01b613afd565b600580549115156101000261ff00199092169190911790556132b1631fa3f33160e11b613afd565b60058054911515620100000262ff0000199092169190911790556001546001600160a01b0316156132ed5760055462010000900460ff166132f0565b60005b60058054911515620100000262ff0000199092169190911790556118b18484613bb6565b3390565b61332a846001600160a01b0316613ffc565b156118b157836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156133b85781810151838201526020016133a0565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156133f75781810151838201526020016133df565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561343357818101518382015260200161341b565b50505050905090810190601f1680156134605780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561348557600080fd5b505af19250505080156134aa57506040513d60208110156134a557600080fd5b505160015b61357d576134b6614266565b806134c15750613546565b8060405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561350b5781810151838201526020016134f3565b50505050905090810190601f1680156135385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60405162461bcd60e51b815260040180806020018281038252603481526020018061430c6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146126265760405162461bcd60e51b81526004018080602001828103825260288152602001806143406028913960400191505060405180910390fd5b60015460009081906001600160a01b03161561362f576040805162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74206d696e7420756e6578697374696e6720746f6b656e73000000604482015290519081900360640190fd5b82516020840120600080516020614390833981519152141561368e576040805162461bcd60e51b81526020600482015260136024820152725572692063616e6e6f7420626520656d70747960681b604482015290519081900360640190fd5b61369c3360008660016136ca565b600082815260046020908152604090912086519395509193506136c292908601906141cd565b509250929050565b600083815260066020526040812054819085906001600160a01b03168015806136f05750845b1561383b576136fe82614026565b861161373b5760405162461bcd60e51b81526004018080602001828103825260228152602001806144966022913960400191505060405180910390fd5b61374b613746612690565b6140e3565b9050841561376057806001600160a01b031691505b806001600160a01b031663b7b0422d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137a657600080fd5b505af11580156137ba573d6000803e3d6000fd5b505050600083815260066020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558084526007835292819020805460ff1916600117905580518681529182019290925281517ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010293509081900390910190a15b806001600160a01b03166340c10f1989613855858a61411f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561389b57600080fd5b505af11580156138af573d6000803e3d6000fd5b505060408051858152602081018a905281516001600160a01b038d1694506000935030927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a49097909650945050505050565b61391a846001600160a01b0316613ffc565b156118b157836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139a9578181015183820152602001613991565b50505050905090810190601f1680156139d65780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1580156139f957600080fd5b505af1925050508015613a1e57506040513d6020811015613a1957600080fd5b505160015b613a2a576134b6614266565b6001600160e01b0319811663f23a6e6160e01b146126265760405162461bcd60e51b81526004018080602001828103825260288152602001806143406028913960400191505060405180910390fd5b6001600160e01b03198082161415613ad8576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b6001546000906001600160a01b0316613b2157613b1982613a79565b5060016112b1565b600154604080516301ffc9a760e01b81526001600160e01b03198516600482015290516001600160a01b03909216916301ffc9a791602480820192602092909190829003018186803b158015613b7657600080fd5b505afa925050508015613b9b57506040513d6020811015613b9657600080fd5b505160015b613ba4576112b1565b80915081156116125761161283613a79565b8151613bc99060029060208501906141cd565b508051613bdd9060039060208401906141cd565b506001546001600160a01b031615613e7657600154604080516306fdde0360e01b815290516001600160a01b039092169182916306fdde03916004808301926000929190829003018186803b158015613c3557600080fd5b505afa925050508015613d1957506040513d6000823e601f3d908101601f191682016040526020811015613c6857600080fd5b8101908080516040519392919084600160201b821115613c8757600080fd5b908301906020820185811115613c9c57600080fd5b8251600160201b811182820188101715613cb557600080fd5b82525081516020918201929091019080838360005b83811015613ce2578181015183820152602001613cca565b50505050905090810190601f168015613d0f5780820380516001836020036101000a031916815260200191505b5060405250505060015b613d2257613d38565b8051613d359060029060208401906141cd565b50505b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015613d7157600080fd5b505afa925050508015613e5557506040513d6000823e601f3d908101601f191682016040526020811015613da457600080fd5b8101908080516040519392919084600160201b821115613dc357600080fd5b908301906020820185811115613dd857600080fd5b8251600160201b811182820188101715613df157600080fd5b82525081516020918201929091019080838360005b83811015613e1e578181015183820152602001613e06565b50505050905090810190601f168015613e4b5780820380516001836020036101000a031916815260200191505b5060405250505060015b613e5e57613e74565b8051613e719060039060208401906141cd565b50505b505b60008051602061439083398151915260026040518082805460018160011615610100020316600290048015613ee25780601f10613ec0576101008083540402835291820191613ee2565b820191906000526020600020905b815481529060010190602001808311613ece575b505091505060405180910390201415613f36576040805162461bcd60e51b81526020600482015260116024820152704e616d65206973206d616e6461746f727960781b604482015290519081900360640190fd5b60008051602061439083398151915260036040518082805460018160011615610100020316600290048015613fa25780601f10613f80576101008083540402835291820191613fa2565b820191906000526020600020905b815481529060010190602001808311613f8e575b505091505060405180910390201415613ff8576040805162461bcd60e51b815260206004820152601360248201527253796d626f6c206973206d616e6461746f727960681b604482015290519081900360640190fd5b5050565b6000813f60008051602061439083398151915281811480159061401e57508115155b949350505050565b6001546000906001600160a01b03166140485750670de0b6b3a76400006112b1565b60055462010000900460ff16156140db5760015460408051631fa3f33160e11b81526004810185905290516001600160a01b0390921691633f47e66291602480820192602092909190829003018186803b1580156140a557600080fd5b505afa1580156140b9573d6000803e3d6000fd5b505050506040513d60208110156140cf57600080fd5b5051600a0a90506112b1565b506001919050565b60006901000000000000000000820268803b80938091923cf36258807360e81b01176000526020600080f09050803b801561411d57611612565bfe5b6001546000906001600160a01b031615801590614144575060055462010000900460ff165b156116125760015460408051631fa3f33160e11b81526004810186905290516001600160a01b0390921691633f47e66291602480820192602092909190829003018186803b15801561419557600080fd5b505afa1580156141a9573d6000803e3d6000fd5b505050506040513d60208110156141bf57600080fd5b5051600a0a82029050611345565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061420e57805160ff191683800117855561423b565b8280016001018555821561423b579182015b8281111561423b578251825591602001919060010190614220565b5061424792915061424b565b5090565b5b80821115614247576000815560010161424c565b60e01c90565b600060443d1015614276576113fb565b600481823e6308c379a061428a8251614260565b14614294576113fb565b6040513d600319016004823e80513d67ffffffffffffffff81602484011181841117156142c457505050506113fb565b828401925082519150808211156142de57505050506113fb565b503d830160208284010111156142f6575050506113fb565b601f01601f191681016020016040529150509056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e734d6f64656c2073686f756c6420626520612076616c696420657468657265756d2061646472657373c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644c6f6f6b73206c696b6520796f75277265206e6f74207772617070696e67206120636f7272656374204552433131353520546f6b656e4174206c65617374206120736f7572636520636f6e7472616374206f7220612073796d626f6c206d757374206265207365744174206c65617374206120736f7572636520636f6e7472616374206f722061206e616d65206d75737420626520736574455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373596f75206e65656420746f2070617373206d6f7265207468616e206120746f6b656e455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66a26469706673582212206129495e80a4eb8f411641e2b3eb9acb50fae6eccbe2338faa1ce27e9994ada664736f6c634300060c00334d6f64656c2073686f756c6420626520612076616c696420657468657265756d2061646472657373c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4704c6f6f6b73206c696b6520796f75277265206e6f74207772617070696e67206120636f7272656374204552433131353520546f6b656e4174206c65617374206120736f7572636520636f6e7472616374206f7220612073796d626f6c206d757374206265207365744174206c65617374206120736f7572636520636f6e7472616374206f722061206e616d65206d75737420626520736574000000000000000000000000ac4a31555059a286e899422c2eeb2b5b55b5a579000000000000000000000000faf23b66314e1bef6581ee76a78ac7434989e3a6000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001553757065722053616979612d6a696e20746f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000353534a0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101d85760003560e01c806377097fc811610104578063bc197c81116100a2578063e82b15f411610071578063e82b15f414610f7e578063e985e9c514610fc0578063f23a6e6114610fee578063f242432a146110b7576101d8565b8063bc197c8114610bb5578063bd85b03914610d93578063cbd99d0314610db0578063e090fa3c14610dd6576101d8565b806395d89b41116100de57806395d89b4114610b5a578063a0bfa1e014610b62578063a22cb46514610b6a578063a728ca8314610b98576101d8565b806377097fc814610933578063782f08ae146109ff57806380a5a37114610aaa576101d8565b80633f47e6621161017c5780634eb9b5921161014b5780634eb9b592146107e257806367e828bf1461080657806372f71b221461080e57806373f1642514610831576101d8565b80633f47e662146104f35780634d91d7d9146105105780634e1273f4146106525780634e41a1fb146107c5576101d8565b806306fdde03116101b857806306fdde03146102e85780630e89341c146102f0578063174e20e61461030d5780632eb2c2d614610330576101d8565b8062ad800c146101dd578062fdd58e1461026f57806301ffc9a7146102ad575b600080fd5b6101fa600480360360208110156101f357600080fd5b5035611180565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023457818101518382015260200161021c565b50505050905090810190601f1680156102615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61029b6004803603604081101561028557600080fd5b506001600160a01b0381351690602001356112b6565b60408051918252519081900360200190f35b6102d4600480360360208110156102c357600080fd5b50356001600160e01b03191661134b565b604080519115158252519081900360200190f35b6101fa61136a565b6101fa6004803603602081101561030657600080fd5b50356113fe565b61029b6004803603604081101561032357600080fd5b50803590602001356115ec565b6104f1600480360360a081101561034657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561037957600080fd5b82018360208201111561038b57600080fd5b803590602001918460208302840111600160201b831117156103ac57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156103fb57600080fd5b82018360208201111561040d57600080fd5b803590602001918460208302840111600160201b8311171561042e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561047d57600080fd5b82018360208201111561048f57600080fd5b803590602001918460018302840111600160201b831117156104b057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611618945050505050565b005b61029b6004803603602081101561050957600080fd5b50356118b9565b6104f16004803603608081101561052657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561055957600080fd5b82018360208201111561056b57600080fd5b803590602001918460018302840111600160201b8311171561058c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156105de57600080fd5b8201836020820111156105f057600080fd5b803590602001918460018302840111600160201b8311171561061157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061192e945050505050565b6107756004803603604081101561066857600080fd5b810190602081018135600160201b81111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460208302840111600160201b831117156106b557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561070457600080fd5b82018360208201111561071657600080fd5b803590602001918460208302840111600160201b8311171561073757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611960945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156107b1578181015183820152602001610799565b505050509050019250505060405180910390f35b6101fa600480360360208110156107db57600080fd5b5035611a0b565b6107ea611a4e565b604080516001600160a01b039092168252519081900360200190f35b6107ea611a5d565b61029b6004803603604081101561082457600080fd5b5080359060200135611a6c565b61084e6004803603602081101561084757600080fd5b5035611a99565b604051808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561089557818101518382015260200161087d565b50505050905090810190601f1680156108c25780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156108f55781810151838201526020016108dd565b50505050905090810190601f1680156109225780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b6109de6004803603604081101561094957600080fd5b81359190810190604081016020820135600160201b81111561096a57600080fd5b82018360208201111561097c57600080fd5b803590602001918460018302840111600160201b8311171561099d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f30945050505050565b604080519283526001600160a01b0390911660208301528051918290030190f35b6104f160048036036040811015610a1557600080fd5b81359190810190604081016020820135600160201b811115610a3657600080fd5b820183602082011115610a4857600080fd5b803590602001918460018302840111600160201b83111715610a6957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506121b1945050505050565b6104f160048036036060811015610ac057600080fd5b813591602081013591810190606081016040820135600160201b811115610ae657600080fd5b820183602082011115610af857600080fd5b803590602001918460018302840111600160201b83111715610b1957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506124ac945050505050565b6101fa61262f565b6107ea612690565b6104f160048036036040811015610b8057600080fd5b506001600160a01b038135169060200135151561269f565b6107ea60048036036020811015610bae57600080fd5b503561276a565b610d76600480360360a0811015610bcb57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b811115610bfe57600080fd5b820183602082011115610c1057600080fd5b803590602001918460208302840111600160201b83111715610c3157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610c8057600080fd5b820183602082011115610c9257600080fd5b803590602001918460208302840111600160201b83111715610cb357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610d0257600080fd5b820183602082011115610d1457600080fd5b803590602001918460018302840111600160201b83111715610d3557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612785945050505050565b604080516001600160e01b03199092168252519081900360200190f35b61029b60048036036020811015610da957600080fd5b503561283a565b6104f160048036036020811015610dc657600080fd5b50356001600160a01b0316612881565b6104f160048036036060811015610dec57600080fd5b810190602081018135600160201b811115610e0657600080fd5b820183602082011115610e1857600080fd5b803590602001918460208302840111600160201b83111715610e3957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e8857600080fd5b820183602082011115610e9a57600080fd5b803590602001918460208302840111600160201b83111715610ebb57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f0a57600080fd5b820183602082011115610f1c57600080fd5b803590602001918460018302840111600160201b83111715610f3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612a58945050505050565b6104f1600480360360a0811015610f9457600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612c6f565b6102d460048036036040811015610fd657600080fd5b506001600160a01b0381358116916020013516612d50565b610d76600480360360a081101561100457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561104357600080fd5b82018360208201111561105557600080fd5b803590602001918460018302840111600160201b8311171561107657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612d7e945050505050565b6104f1600480360360a08110156110cd57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561110c57600080fd5b82018360208201111561111e57600080fd5b803590602001918460018302840111600160201b8311171561113f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612df8945050505050565b606061118b8261276a565b6001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156111c357600080fd5b505afa1580156111d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561120057600080fd5b8101908080516040519392919084600160201b82111561121f57600080fd5b90830190602082018581111561123457600080fd5b8251600160201b81118282018810171561124d57600080fd5b82525081516020918201929091019080838360005b8381101561127a578181015183820152602001611262565b50505050905090810190601f1680156112a75780820380516001836020036101000a031916815260200191505b5060405250505090505b919050565b6000611342826112c58461276a565b6001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d602081101561133b57600080fd5b5051611a6c565b90505b92915050565b6001600160e01b03191660009081526020819052604090205460ff1690565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156113f35780601f106113c8576101008083540402835291602001916113f3565b820191906000526020600020905b8154815290600101906020018083116113d657829003601f168201915b505050505090505b90565b6001546060906001600160a01b03161561154e57600154604080516303a24d0760e21b81526004810185905290516001600160a01b0390921691630e89341c91602480820192600092909190829003018186803b15801561145e57600080fd5b505afa158015611472573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561149b57600080fd5b8101908080516040519392919084600160201b8211156114ba57600080fd5b9083019060208201858111156114cf57600080fd5b8251600160201b8111828201881017156114e857600080fd5b82525081516020918201929091019080838360005b838110156115155781810151838201526020016114fd565b50505050905090810190601f1680156115425780820380516001836020036101000a031916815260200191505b50604052505050611345565b60008281526004602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505092915050565b60055460009062010000900460ff1661161257611608836118b9565b600a0a8202611342565b50919050565b6001600160a01b03841661165d5760405162461bcd60e51b81526004018080602001828103825260258152602001806144716025913960400191505060405180910390fd5b611665613314565b6001600160a01b0316856001600160a01b0316148061169057506116908561168b613314565b612d50565b6116cb5760405162461bcd60e51b81526004018080602001828103825260298152602001806143b06029913960400191505060405180910390fd5b60005b83518110156117bd576116f38482815181106116e657fe5b602002602001015161276a565b6001600160a01b03166323b872dd878761173388868151811061171257fe5b602002602001015188878151811061172657fe5b60200260200101516115ec565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561178957600080fd5b505af115801561179d573d6000803e3d6000fd5b505050506040513d60208110156117b357600080fd5b50506001016116ce565b5060006117c8613314565b9050846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561184f578181015183820152602001611837565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561188e578181015183820152602001611876565b5050505090500194505050505060405180910390a46118b1818787878787613318565b505050505050565b60006118c48261276a565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156118fc57600080fd5b505afa158015611910573d6000803e3d6000fd5b505050506040513d602081101561192657600080fd5b505192915050565b61193b8460008484612fb3565b5050600a80546001600160a01b0319166001600160a01b039290921691909117905550565b606080835167ffffffffffffffff8111801561197b57600080fd5b506040519080825280602002602001820160405280156119a5578160200160208202803683370190505b50905060005b8451811015611a03576119e48582815181106119c357fe5b60200260200101518583815181106119d757fe5b60200260200101516112b6565b8282815181106119f057fe5b60209081029190910101526001016119ab565b505092915050565b6060611a168261276a565b6001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156111c357600080fd5b600a546001600160a01b031690565b6001546001600160a01b031690565b60055460009062010000900460ff1661161257611a88836118b9565b600a0a8281611a9357fe5b04611342565b60028054604080516020601f600019610100600187161502019094168590049384018190048102820181019092528281526060938493600093830182828015611b235780601f10611af857610100808354040283529160200191611b23565b820191906000526020600020905b815481529060010190602001808311611b0657829003601f168201915b505060038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815296995091945092508401905082828015611bb45780601f10611b8957610100808354040283529160200191611bb4565b820191906000526020600020905b815481529060010190602001808311611b9757829003601f168201915b5050600154939550601294505050506001600160a01b031615801590611c00575060055460ff1680611bed5750600554610100900460ff165b80611c00575060055462010000900460ff165b15611f29576001546005546001600160a01b039091169060ff16611c245783611d53565b806001600160a01b031662ad800c866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611c6757600080fd5b505afa158015611c7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ca457600080fd5b8101908080516040519392919084600160201b821115611cc357600080fd5b908301906020820185811115611cd857600080fd5b8251600160201b811182820188101715611cf157600080fd5b82525081516020918201929091019080838360005b83811015611d1e578181015183820152602001611d06565b50505050905090810190601f168015611d4b5780820380516001836020036101000a031916815260200191505b506040525050505b600554909450610100900460ff16611d6b5782611e9b565b806001600160a01b0316634e41a1fb866040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611daf57600080fd5b505afa158015611dc3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611dec57600080fd5b8101908080516040519392919084600160201b821115611e0b57600080fd5b908301906020820185811115611e2057600080fd5b8251600160201b811182820188101715611e3957600080fd5b82525081516020918201929091019080838360005b83811015611e66578181015183820152602001611e4e565b50505050905090810190601f168015611e935780820380516001836020036101000a031916815260200191505b506040525050505b60055490935062010000900460ff16611eb45781611f25565b806001600160a01b0316633f47e662866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611ef857600080fd5b505afa158015611f0c573d6000803e3d6000fd5b505050506040513d6020811015611f2257600080fd5b50515b9150505b9193909250565b600a5460009081906001600160a01b0316156120ea57600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9457600080fd5b505afa158015611fa8573d6000803e3d6000fd5b505050506040513d6020811015611fbe57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561200257600080fd5b505afa158015612016573d6000803e3d6000fd5b505050506040513d602081101561202c57600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b15801561207657600080fd5b505afa15801561208a573d6000803e3d6000fd5b505050506040513d60208110156120a057600080fd5b50516120ea576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6120f484846135cc565b8092508193505050817ff1396a8c166fbd80c99871753dbc42e202aa19cb3c6f4bb476abb4a239f7703484604051808060200180602001838103835260008152602001602001838103825284818151815260200191508051906020019080838360005b8381101561216f578181015183820152602001612157565b50505050905090810190601f16801561219c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a29250929050565b600a546001600160a01b03161561236657600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561221057600080fd5b505afa158015612224573d6000803e3d6000fd5b505050506040513d602081101561223a57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561227e57600080fd5b505afa158015612292573d6000803e3d6000fd5b505050506040513d60208110156122a857600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156122f257600080fd5b505afa158015612306573d6000803e3d6000fd5b505050506040513d602081101561231c57600080fd5b5051612366576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600082815260046020908152604091829020825183815281546002600019610100600184161502019091160493810184905285937ff1396a8c166fbd80c99871753dbc42e202aa19cb3c6f4bb476abb4a239f770349386929182918201906060830190869080156124185780601f106123ed57610100808354040283529160200191612418565b820191906000526020600020905b8154815290600101906020018083116123fb57829003601f168201915b5050838103825284518152845160209182019186019080838360005b8381101561244c578181015183820152602001612434565b50505050905090810190601f1680156124795780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2600082815260046020908152604090912082516124a7928401906141cd565b505050565b6124b58361276a565b6001600160a01b0316639dc29fac336124ce86866115ec565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561251457600080fd5b505af1158015612528573d6000803e3d6000fd5b50506001546001600160a01b03161591506124a7905057600154604051637921219560e11b815230600482018181523360248401819052604484018890526064840187905260a060848501908152865160a486015286516001600160a01b039096169563f242432a9592938a938a938a93909160c40190602085019080838360005b838110156125c25781810151838201526020016125aa565b50505050905090810190601f1680156125ef5780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561261257600080fd5b505af1158015612626573d6000803e3d6000fd5b50505050505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113f35780601f106113c8576101008083540402835291602001916113f3565b6009546001600160a01b031690565b60006126a9613314565b9050826001600160a01b0316816001600160a01b031614156126fc5760405162461bcd60e51b81526004018080602001828103825260298152602001806144b86029913960400191505060405180910390fd5b6001600160a01b03818116600081815260086020908152604080832094881680845294825291829020805460ff1916871515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b6000908152600660205260409020546001600160a01b031690565b6001546000906001600160a01b031633146127de576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b60005b84518110156128275761281d868683815181106127fa57fe5b602002602001015186848151811061280e57fe5b602002602001015160006136ca565b50506001016127e1565b5063bc197c8160e01b9695505050505050565b6000611345826128498461276a565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561131157600080fd5b600a546001600160a01b031615612a3657600a60009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156128e057600080fd5b505afa1580156128f4573d6000803e3d6000fd5b505050506040513d602081101561290a57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561294e57600080fd5b505afa158015612962573d6000803e3d6000fd5b505050506040513d602081101561297857600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156129c257600080fd5b505afa1580156129d6573d6000803e3d6000fd5b505050506040513d60208110156129ec57600080fd5b5051612a36576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8351811015612b0f57612a738482815181106116e657fe5b6001600160a01b0316639dc29fac33612aa5878581518110612a9157fe5b602002602001015187868151811061172657fe5b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612aeb57600080fd5b505af1158015612aff573d6000803e3d6000fd5b505060019092019150612a5b9050565b506001546001600160a01b0316156124a757600154604051631759616b60e11b81523060048201818152336024840181905260a060448501908152885160a486015288516001600160a01b0390961695632eb2c2d69592938a938a938a9390916064810191608482019160c401906020808a01910280838360005b83811015612ba2578181015183820152602001612b8a565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612be1578181015183820152602001612bc9565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612c1d578181015183820152602001612c05565b50505050905090810190601f168015612c4a5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561261257600080fd5b6000828152600660205260409020546001600160a01b03163314612cd1576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6000612cdd8383611a6c565b905080612cea5750612d49565b836001600160a01b0316856001600160a01b0316876001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628685604051808381526020018281526020019250505060405180910390a4505b5050505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6001546000906001600160a01b03163314612dd7576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b612de485858560006136ca565b5063f23a6e6160e01b979650505050505050565b6001600160a01b038416612e3d5760405162461bcd60e51b81526004018080602001828103825260258152602001806144716025913960400191505060405180910390fd5b612e45613314565b6001600160a01b0316856001600160a01b03161480612e6b5750612e6b8561168b613314565b612ea65760405162461bcd60e51b81526004018080602001828103825260298152602001806143b06029913960400191505060405180910390fd5b6000612eb0613314565b9050612ebb8461276a565b6001600160a01b03166323b872dd8787612ed588886115ec565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015612f2b57600080fd5b505af1158015612f3f573d6000803e3d6000fd5b505050506040513d6020811015612f5557600080fd5b5050604080518581526020810185905281516001600160a01b03808916938a821693918616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629281900390910190a46118b1818787878787613908565b6009546001600160a01b031615613008576040805162461bcd60e51b8152602060048201526014602482015273496e697420616c72656164792063616c6c65642160601b604482015290519081900360640190fd5b6001600160a01b03841661304d5760405162461bcd60e51b81526004018080602001828103825260288152602001806143686028913960400191505060405180910390fd5b600980546001600160a01b038087166001600160a01b03199283161790925560018054868416921691909117908190551615158061309f57508151602083012060008051602061439083398151915214155b6130da5760405162461bcd60e51b81526004018080602001828103825260308152602001806144416030913960400191505060405180910390fd5b6001546001600160a01b031615158061310757508051602082012060008051602061439083398151915214155b6131425760405162461bcd60e51b815260040180806020018281038252603281526020018061440f6032913960400191505060405180910390fd5b61315263f23a6e6160e01b613a79565b61316263bc197c8160e01b613a79565b6000613174631759616b60e11b613afd565b90506000613188636cdb3d1360e11b613afd565b6001549091506001600160a01b031615806131a05750815b806131a85750805b6131e35760405162461bcd60e51b81526004018080602001828103825260368152602001806143d96036913960400191505060405180910390fd5b6131f2627eeac760e11b613afd565b506132036313849cfd60e21b613afd565b5061321463a22cb46560e01b613afd565b5061322563e985e9c560e01b613afd565b50613236637921219560e11b613afd565b506132476303a24d0760e21b613afd565b5061325863bd85b03960e01b613afd565b50613268622b600360e21b613afd565b6005805460ff1916911515919091179055613289634e41a1fb60e01b613afd565b600580549115156101000261ff00199092169190911790556132b1631fa3f33160e11b613afd565b60058054911515620100000262ff0000199092169190911790556001546001600160a01b0316156132ed5760055462010000900460ff166132f0565b60005b60058054911515620100000262ff0000199092169190911790556118b18484613bb6565b3390565b61332a846001600160a01b0316613ffc565b156118b157836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156133b85781810151838201526020016133a0565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156133f75781810151838201526020016133df565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561343357818101518382015260200161341b565b50505050905090810190601f1680156134605780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561348557600080fd5b505af19250505080156134aa57506040513d60208110156134a557600080fd5b505160015b61357d576134b6614266565b806134c15750613546565b8060405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561350b5781810151838201526020016134f3565b50505050905090810190601f1680156135385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b60405162461bcd60e51b815260040180806020018281038252603481526020018061430c6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146126265760405162461bcd60e51b81526004018080602001828103825260288152602001806143406028913960400191505060405180910390fd5b60015460009081906001600160a01b03161561362f576040805162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74206d696e7420756e6578697374696e6720746f6b656e73000000604482015290519081900360640190fd5b82516020840120600080516020614390833981519152141561368e576040805162461bcd60e51b81526020600482015260136024820152725572692063616e6e6f7420626520656d70747960681b604482015290519081900360640190fd5b61369c3360008660016136ca565b600082815260046020908152604090912086519395509193506136c292908601906141cd565b509250929050565b600083815260066020526040812054819085906001600160a01b03168015806136f05750845b1561383b576136fe82614026565b861161373b5760405162461bcd60e51b81526004018080602001828103825260228152602001806144966022913960400191505060405180910390fd5b61374b613746612690565b6140e3565b9050841561376057806001600160a01b031691505b806001600160a01b031663b7b0422d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137a657600080fd5b505af11580156137ba573d6000803e3d6000fd5b505050600083815260066020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558084526007835292819020805460ff1916600117905580518681529182019290925281517ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010293509081900390910190a15b806001600160a01b03166340c10f1989613855858a61411f565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561389b57600080fd5b505af11580156138af573d6000803e3d6000fd5b505060408051858152602081018a905281516001600160a01b038d1694506000935030927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a49097909650945050505050565b61391a846001600160a01b0316613ffc565b156118b157836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139a9578181015183820152602001613991565b50505050905090810190601f1680156139d65780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1580156139f957600080fd5b505af1925050508015613a1e57506040513d6020811015613a1957600080fd5b505160015b613a2a576134b6614266565b6001600160e01b0319811663f23a6e6160e01b146126265760405162461bcd60e51b81526004018080602001828103825260288152602001806143406028913960400191505060405180910390fd5b6001600160e01b03198082161415613ad8576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b6001546000906001600160a01b0316613b2157613b1982613a79565b5060016112b1565b600154604080516301ffc9a760e01b81526001600160e01b03198516600482015290516001600160a01b03909216916301ffc9a791602480820192602092909190829003018186803b158015613b7657600080fd5b505afa925050508015613b9b57506040513d6020811015613b9657600080fd5b505160015b613ba4576112b1565b80915081156116125761161283613a79565b8151613bc99060029060208501906141cd565b508051613bdd9060039060208401906141cd565b506001546001600160a01b031615613e7657600154604080516306fdde0360e01b815290516001600160a01b039092169182916306fdde03916004808301926000929190829003018186803b158015613c3557600080fd5b505afa925050508015613d1957506040513d6000823e601f3d908101601f191682016040526020811015613c6857600080fd5b8101908080516040519392919084600160201b821115613c8757600080fd5b908301906020820185811115613c9c57600080fd5b8251600160201b811182820188101715613cb557600080fd5b82525081516020918201929091019080838360005b83811015613ce2578181015183820152602001613cca565b50505050905090810190601f168015613d0f5780820380516001836020036101000a031916815260200191505b5060405250505060015b613d2257613d38565b8051613d359060029060208401906141cd565b50505b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015613d7157600080fd5b505afa925050508015613e5557506040513d6000823e601f3d908101601f191682016040526020811015613da457600080fd5b8101908080516040519392919084600160201b821115613dc357600080fd5b908301906020820185811115613dd857600080fd5b8251600160201b811182820188101715613df157600080fd5b82525081516020918201929091019080838360005b83811015613e1e578181015183820152602001613e06565b50505050905090810190601f168015613e4b5780820380516001836020036101000a031916815260200191505b5060405250505060015b613e5e57613e74565b8051613e719060039060208401906141cd565b50505b505b60008051602061439083398151915260026040518082805460018160011615610100020316600290048015613ee25780601f10613ec0576101008083540402835291820191613ee2565b820191906000526020600020905b815481529060010190602001808311613ece575b505091505060405180910390201415613f36576040805162461bcd60e51b81526020600482015260116024820152704e616d65206973206d616e6461746f727960781b604482015290519081900360640190fd5b60008051602061439083398151915260036040518082805460018160011615610100020316600290048015613fa25780601f10613f80576101008083540402835291820191613fa2565b820191906000526020600020905b815481529060010190602001808311613f8e575b505091505060405180910390201415613ff8576040805162461bcd60e51b815260206004820152601360248201527253796d626f6c206973206d616e6461746f727960681b604482015290519081900360640190fd5b5050565b6000813f60008051602061439083398151915281811480159061401e57508115155b949350505050565b6001546000906001600160a01b03166140485750670de0b6b3a76400006112b1565b60055462010000900460ff16156140db5760015460408051631fa3f33160e11b81526004810185905290516001600160a01b0390921691633f47e66291602480820192602092909190829003018186803b1580156140a557600080fd5b505afa1580156140b9573d6000803e3d6000fd5b505050506040513d60208110156140cf57600080fd5b5051600a0a90506112b1565b506001919050565b60006901000000000000000000820268803b80938091923cf36258807360e81b01176000526020600080f09050803b801561411d57611612565bfe5b6001546000906001600160a01b031615801590614144575060055462010000900460ff165b156116125760015460408051631fa3f33160e11b81526004810186905290516001600160a01b0390921691633f47e66291602480820192602092909190829003018186803b15801561419557600080fd5b505afa1580156141a9573d6000803e3d6000fd5b505050506040513d60208110156141bf57600080fd5b5051600a0a82029050611345565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061420e57805160ff191683800117855561423b565b8280016001018555821561423b579182015b8281111561423b578251825591602001919060010190614220565b5061424792915061424b565b5090565b5b80821115614247576000815560010161424c565b60e01c90565b600060443d1015614276576113fb565b600481823e6308c379a061428a8251614260565b14614294576113fb565b6040513d600319016004823e80513d67ffffffffffffffff81602484011181841117156142c457505050506113fb565b828401925082519150808211156142de57505050506113fb565b503d830160208284010111156142f6575050506113fb565b601f01601f191681016020016040529150509056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e734d6f64656c2073686f756c6420626520612076616c696420657468657265756d2061646472657373c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644c6f6f6b73206c696b6520796f75277265206e6f74207772617070696e67206120636f7272656374204552433131353520546f6b656e4174206c65617374206120736f7572636520636f6e7472616374206f7220612073796d626f6c206d757374206265207365744174206c65617374206120736f7572636520636f6e7472616374206f722061206e616d65206d75737420626520736574455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373596f75206e65656420746f2070617373206d6f7265207468616e206120746f6b656e455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66a26469706673582212206129495e80a4eb8f411641e2b3eb9acb50fae6eccbe2338faa1ce27e9994ada664736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ac4a31555059a286e899422c2eeb2b5b55b5a579000000000000000000000000faf23b66314e1bef6581ee76a78ac7434989e3a6000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001553757065722053616979612d6a696e20746f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000353534a0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : model (address): 0xAC4a31555059a286e899422c2eeB2b5B55b5a579
Arg [1] : doubleProxy (address): 0xFAF23B66314E1BEF6581Ee76a78AC7434989E3a6
Arg [2] : name (string): Super Saiya-jin token
Arg [3] : symbol (string): SSJ
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000ac4a31555059a286e899422c2eeb2b5b55b5a579
Arg [1] : 000000000000000000000000faf23b66314e1bef6581ee76a78ac7434989e3a6
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [5] : 53757065722053616979612d6a696e20746f6b656e0000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 53534a0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
53047:1777:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42096:185;;;;;;;;;;;;;;;;-1:-1:-1;42096:185:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43699:237;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;43699:237:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29433:142;;;;;;;;;;;;;;;;-1:-1:-1;29433:142:0;-1:-1:-1;;;;;;29433:142:0;;:::i;:::-;;;;;;;;;;;;;;;;;;42289:100;;;:::i;43337:291::-;;;;;;;;;;;;;;;;-1:-1:-1;43337:291:0;;:::i;40821:241::-;;;;;;;;;;;;;;;;-1:-1:-1;40821:241:0;;;;;;;:::i;46082:985::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46082:985:0;;;;;;;;-1:-1:-1;46082:985:0;;-1:-1:-1;;;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46082:985:0;;;;;;;;-1:-1:-1;46082:985:0;;-1:-1:-1;;;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46082:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46082:985:0;;-1:-1:-1;46082:985:0;;-1:-1:-1;;;;;46082:985:0:i;:::-;;43002:187;;;;;;;;;;;;;;;;-1:-1:-1;43002:187:0;;:::i;53451:287::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53451:287:0;;;;;;;;-1:-1:-1;53451:287:0;;-1:-1:-1;;;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53451:287:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53451:287:0;;-1:-1:-1;53451:287:0;;-1:-1:-1;;;;;53451:287:0:i;44007:370::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44007:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44007:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44007:370:0;;;;;;;;-1:-1:-1;44007:370:0;;-1:-1:-1;;;;;44007:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44007:370:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44007:370:0;;-1:-1:-1;44007:370:0;;-1:-1:-1;;;;;44007:370:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42543:189;;;;;;;;;;;;;;;;-1:-1:-1;42543:189:0;;:::i;54039:99::-;;;:::i;:::-;;;;-1:-1:-1;;;;;54039:99:0;;;;;;;;;;;;;;41157:98;;;:::i;40447:243::-;;;;;;;;;;;;;;;;-1:-1:-1;40447:243:0;;;;;;;:::i;39380:742::-;;;;;;;;;;;;;;;;-1:-1:-1;39380:742:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39380:742:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54272:347;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54272:347:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54272:347:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54272:347:0;;-1:-1:-1;54272:347:0;;-1:-1:-1;;;;;54272:347:0:i;:::-;;;;;;;-1:-1:-1;;;;;54272:347:0;;;;;;;;;;;;;;;;54627:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54627:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54627:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54627:194:0;;-1:-1:-1;54627:194:0;;-1:-1:-1;;;;;54627:194:0:i;36655:457::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36655:457:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36655:457:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36655:457:0;;-1:-1:-1;36655:457:0;;-1:-1:-1;;;;;36655:457:0:i;42740:104::-;;;:::i;40215:99::-;;;:::i;44448:402::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44448:402:0;;;;;;;;;;:::i;41363:200::-;;;;;;;;;;;;;;;;-1:-1:-1;41363:200:0;;:::i;38681:473::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38681:473:0;;;;;;;;-1:-1:-1;38681:473:0;;-1:-1:-1;;;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38681:473:0;;;;;;;;-1:-1:-1;38681:473:0;;-1:-1:-1;;;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38681:473:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38681:473:0;;-1:-1:-1;38681:473:0;;-1:-1:-1;;;;;38681:473:0:i;:::-;;;;-1:-1:-1;;;;;;38681:473:0;;;;;;;;;;;;;;41729:217;;;;;;;;;;;;;;;;-1:-1:-1;41729:217:0;;:::i;54146:118::-;;;;;;;;;;;;;;;;-1:-1:-1;54146:118:0;-1:-1:-1;;;;;54146:118:0;;:::i;37223:623::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37223:623:0;;;;;;;;-1:-1:-1;37223:623:0;;-1:-1:-1;;;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37223:623:0;;;;;;;;-1:-1:-1;37223:623:0;;-1:-1:-1;;;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37223:623:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37223:623:0;;-1:-1:-1;37223:623:0;;-1:-1:-1;;;;;37223:623:0:i;47075:407::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47075:407:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;44921:218::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;44921:218:0;;;;;;;;;;:::i;38158:362::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38158:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38158:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38158:362:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38158:362:0;;-1:-1:-1;38158:362:0;;-1:-1:-1;;;;;38158:362:0:i;45210:801::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45210:801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;45210:801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;45210:801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45210:801:0;;-1:-1:-1;45210:801:0;;-1:-1:-1;;;;;45210:801:0:i;42096:185::-;42211:13;42249:17;42257:8;42249:7;:17::i;:::-;-1:-1:-1;;;;;42249:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42249:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42249:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42249:24:0;;;;;;-1:-1:-1;42249:24:0;;;;;;;;;;-1:-1:-1;42249:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42242:31;;42096:185;;;;:::o;43699:237::-;43836:7;43868:60;43881:8;43891:17;43899:8;43891:7;:17::i;:::-;-1:-1:-1;;;;;43891:27:0;;43919:7;43891:36;;;;;;;;;;;;;-1:-1:-1;;;;;43891:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43891:36:0;43868:12;:60::i;:::-;43861:67;;43699:237;;;;;:::o;29433:142::-;-1:-1:-1;;;;;;29534:33:0;29510:4;29534:33;;;;;;;;;;;;;;29433:142::o;42289:100::-;42376:5;42369:12;;;;;;;-1:-1:-1;;42369:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42343:13;;42369:12;;42376:5;;42369:12;;42376:5;42369:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42289:100;;:::o;43337:291::-;43502:7;;43451:13;;-1:-1:-1;;;;;43502:7:0;:21;:118;;43598:7;;43584:36;;;-1:-1:-1;;;43584:36:0;;;;;;;;;;-1:-1:-1;;;;;43598:7:0;;;;43584:26;;:36;;;;;43598:7;;43584:36;;;;;;;;43598:7;43584:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43584:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43584:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43584:36:0;;;;;;-1:-1:-1;43584:36:0;;;;;;;;;;-1:-1:-1;43584:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43502:118;;;43543:21;;;;:11;:21;;;;;;;;;43502:118;;;;;;-1:-1:-1;;43502:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43543:21;;43502:118;;43543:21;43502:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43482:138;43337:291;-1:-1:-1;;43337:291:0:o;40821:241::-;40990:17;;40958:7;;40990:17;;;;;:64;;41034:18;41043:8;41034;:18::i;:::-;41030:2;:22;41020:6;:33;40990:64;;;-1:-1:-1;41010:6:0;40821:241;-1:-1:-1;40821:241:0:o;46082:985::-;-1:-1:-1;;;;;46307:16:0;;46299:66;;;;-1:-1:-1;;;46299:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46406:12;:10;:12::i;:::-;-1:-1:-1;;;;;46398:20:0;:4;-1:-1:-1;;;;;46398:20:0;;:60;;;;46422:36;46439:4;46445:12;:10;:12::i;:::-;46422:16;:36::i;:::-;46376:151;;;;-1:-1:-1;;;46376:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46545:9;46540:222;46564:9;:16;46560:1;:20;46540:222;;;46602:21;46610:9;46620:1;46610:12;;;;;;;;;;;;;;46602:7;:21::i;:::-;-1:-1:-1;;;;;46602:34:0;;46655:4;46678:2;46699:36;46710:9;46720:1;46710:12;;;;;;;;;;;;;;46724:7;46732:1;46724:10;;;;;;;;;;;;;;46699;:36::i;:::-;46602:148;;;;;;;;;;;;;-1:-1:-1;;;;;46602:148:0;;;;;;-1:-1:-1;;;;;46602:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;46582:3:0;;46540:222;;;;46774:16;46793:12;:10;:12::i;:::-;46774:31;;46853:2;-1:-1:-1;;;;;46823:53:0;46847:4;-1:-1:-1;;;;;46823:53:0;46837:8;-1:-1:-1;;;;;46823:53:0;;46857:9;46868:7;46823:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46889:170;46939:8;46962:4;46981:2;46998:9;47022:7;47044:4;46889:35;:170::i;:::-;46082:985;;;;;;:::o;43002:187::-;43121:7;43153:17;43161:8;43153:7;:17::i;:::-;-1:-1:-1;;;;;43153:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43153:28:0;;43002:187;-1:-1:-1;;43002:187:0:o;53451:287::-;53650:43;53661:5;53676:1;53680:4;53686:6;53650:10;:43::i;:::-;-1:-1:-1;;53704:12:0;:26;;-1:-1:-1;;;;;;53704:26:0;-1:-1:-1;;;;;53704:26:0;;;;;;;;;;-1:-1:-1;53451:287:0:o;44007:370::-;44149:16;44178:25;44220:8;:15;44206:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44206:30:0;;44178:58;;44252:9;44247:123;44271:8;:15;44267:1;:19;44247:123;;;44322:36;44332:8;44341:1;44332:11;;;;;;;;;;;;;;44345:9;44355:1;44345:12;;;;;;;;;;;;;;44322:9;:36::i;:::-;44308:8;44317:1;44308:11;;;;;;;;;;;;;;;;;:50;44288:3;;44247:123;;;;44007:370;;;;;:::o;42543:189::-;42660:13;42698:17;42706:8;42698:7;:17::i;:::-;-1:-1:-1;;;;;42698:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54039:99;54118:12;;-1:-1:-1;;;;;54118:12:0;54039:99;:::o;41157:98::-;41240:7;;-1:-1:-1;;;;;41240:7:0;41157:98;:::o;40447:243::-;40618:17;;40586:7;;40618:17;;;;;:64;;40662:18;40671:8;40662;:18::i;:::-;40658:2;:22;40648:6;:33;;;;;;40618:64;;39380:742;39635:5;39628:12;;;;;;;-1:-1:-1;;39628:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39516:18;;;;39584:16;;39628:12;;39635:5;39628:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39660:7:0;39651:16;;;;;;;;-1:-1:-1;;39651:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39628:12;;-1:-1:-1;39660:7:0;;-1:-1:-1;39651:16:0;-1:-1:-1;39651:16:0;;;-1:-1:-1;39660:7:0;39651:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39720:7:0;;39651:16;;-1:-1:-1;39689:2:0;;-1:-1:-1;;;;;;;;;39720:7:0;:21;;;;:93;;-1:-1:-1;39759:13:0;;;;;:32;;-1:-1:-1;39776:15:0;;;;;;;39759:32;:53;;;-1:-1:-1;39795:17:0;;;;;;;39759:53;39702:413;;;39876:7;;39906:13;;-1:-1:-1;;;;;39876:7:0;;;;39906:13;;:43;;39945:4;39906:43;;;39922:5;-1:-1:-1;;;;;39922:10:0;;39933:8;39922:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39922:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39922:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39922:20:0;;;;;;-1:-1:-1;39922:20:0;;;;;;;;;;-1:-1:-1;39922:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39906:43;39973:15;;39899:50;;-1:-1:-1;39973:15:0;;;;;:49;;40016:6;39973:49;;;39991:5;-1:-1:-1;;;;;39991:12:0;;40004:8;39991:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39991:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39991:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39991:22:0;;;;;;-1:-1:-1;39991:22:0;;;;;;;;;;-1:-1:-1;39991:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39973:49;40048:17;;39964:58;;-1:-1:-1;40048:17:0;;;;;:55;;40095:8;40048:55;;;40068:5;-1:-1:-1;;;;;40068:14:0;;40083:8;40068:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40068:24:0;40048:55;40037:66;;39702:413;;39380:742;;;;;:::o;54272:347::-;53775:12;;54448:16;;;;-1:-1:-1;;;;;53775:12:0;:26;53772:240;;53876:12;;;;;;;;;-1:-1:-1;;;;;53876:12:0;-1:-1:-1;;;;;53863:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53863:34:0;53853:83;;;-1:-1:-1;;;53853:83:0;;;;-1:-1:-1;;;;;53853:81:0;;;;;;:83;;;;;53863:34;;53853:83;;;;;;;;:81;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53853:83:0;53826:149;;;-1:-1:-1;;;53826:149:0;;53964:10;53826:149;;;;;;-1:-1:-1;;;;;53826:137:0;;;;;;:149;;;;;53853:83;;53826:149;;;;;;;;:137;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53826:149:0;53818:182;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;;;;54531:29:::1;54542:6;54550:9;54531:10;:29::i;:::-;54504:56;;;;;;;;54587:8;54576:35;54601:9;54576:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54272:347:::0;;;;;:::o;54627:194::-;53775:12;;-1:-1:-1;;;;;53775:12:0;:26;53772:240;;53876:12;;;;;;;;;-1:-1:-1;;;;;53876:12:0;-1:-1:-1;;;;;53863:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53863:34:0;53853:83;;;-1:-1:-1;;;53853:83:0;;;;-1:-1:-1;;;;;53853:81:0;;;;;;:83;;;;;53863:34;;53853:83;;;;;;;;:81;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53853:83:0;53826:149;;;-1:-1:-1;;;53826:149:0;;53964:10;53826:149;;;;;;-1:-1:-1;;;;;53826:137:0;;;;;;:149;;;;;53853:83;;53826:149;;;;;;;;:137;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53826:149:0;53818:182;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;;;;54742:21:::1;::::0;;;:11:::1;:21;::::0;;;;;;;;54721:51;;;;;;;::::1;-1:-1:-1::0;;54721:51:0::1;;::::0;::::1;;;::::0;;;::::1;;::::0;;;;;;54732:8;;54721:51:::1;::::0;54765:6;;54721:51;;;;::::1;::::0;;;;;54742:21;;54721:51;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;54721:51:0;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54783:21;::::0;;;:11:::1;:21;::::0;;;;;;;:30;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;54627:194:::0;;:::o;36655:457::-;36791:17;36799:8;36791:7;:17::i;:::-;-1:-1:-1;;;;;36791:22:0;;36814:10;36826:28;36837:8;36847:6;36826:10;:28::i;:::-;36791:64;;;;;;;;;;;;;-1:-1:-1;;;;;36791:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36870:7:0;;-1:-1:-1;;;;;36870:7:0;:21;;-1:-1:-1;36866:239:0;;-1:-1:-1;36866:239:0;36917:7;;36908:185;;-1:-1:-1;;;36908:185:0;;36969:4;36908:185;;;;;;36993:10;36908:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36917:7:0;;;;36908:34;;36993:10;;37022:8;;37049:6;;37074:4;;36908:185;;;;;;;;;;;;36917:7;36908:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36655:457;;;:::o;42740:104::-;42829:7;42822:14;;;;;;;;-1:-1:-1;;42822:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42796:13;;42822:14;;42829:7;;42822:14;;42829:7;42822:14;;;;;;;;;;;;;;;;;;;;;;;;40215:99;40300:6;;-1:-1:-1;;;;;40300:6:0;40215:99;:::o;44448:402::-;44575:14;44592:12;:10;:12::i;:::-;44575:29;;44647:8;-1:-1:-1;;;;;44637:18:0;:6;-1:-1:-1;;;;;44637:18:0;;;44615:109;;;;-1:-1:-1;;;44615:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44737:26:0;;;;;;;:18;:26;;;;;;;;:36;;;;;;;;;;;;;:47;;-1:-1:-1;;44737:47:0;;;;;;;;;;44800:42;;;;;;;;;;;;;;;;;44448:402;;;:::o;41363:200::-;41481:16;41539:15;;;:5;:15;;;;;;-1:-1:-1;;;;;41539:15:0;;41363:200::o;38681:473::-;38931:7;;38890:6;;-1:-1:-1;;;;;38931:7:0;38917:10;:21;38909:54;;;;;-1:-1:-1;;;38909:54:0;;;;;;;;;;;;-1:-1:-1;;;38909:54:0;;;;;;;;;;;;;;;38979:9;38974:119;38998:9;:16;38994:1;:20;38974:119;;;39036:45;39042:5;39049:9;39059:1;39049:12;;;;;;;;;;;;;;39063:7;39071:1;39063:10;;;;;;;;;;;;;;39075:5;39036;:45::i;:::-;-1:-1:-1;;39016:3:0;;38974:119;;;-1:-1:-1;;;;39110:36:0;38681:473;-1:-1:-1;;;;;;38681:473:0:o;41729:217::-;41851:7;41883:55;41896:8;41906:17;41914:8;41906:7;:17::i;:::-;-1:-1:-1;;;;;41906:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54146:118;53775:12;;-1:-1:-1;;;;;53775:12:0;:26;53772:240;;53876:12;;;;;;;;;-1:-1:-1;;;;;53876:12:0;-1:-1:-1;;;;;53863:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53863:34:0;53853:83;;;-1:-1:-1;;;53853:83:0;;;;-1:-1:-1;;;;;53853:81:0;;;;;;:83;;;;;53863:34;;53853:83;;;;;;;;:81;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53853:83:0;53826:149;;;-1:-1:-1;;;53826:149:0;;53964:10;53826:149;;;;;;-1:-1:-1;;;;;53826:137:0;;;;;;:149;;;;;53853:83;;53826:149;;;;;;;;:137;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53826:149:0;53818:182;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;-1:-1:-1;;;53818:182:0;;;;;;;;;;;;;;;54227:12:::1;:29:::0;;-1:-1:-1;;;;;;54227:29:0::1;-1:-1:-1::0;;;;;54227:29:0;;;::::1;::::0;;;::::1;::::0;;54146:118::o;37223:623::-;37389:9;37384:199;37408:9;:16;37404:1;:20;37384:199;;;37446:21;37454:9;37464:1;37454:12;;;;;;;37446:21;-1:-1:-1;;;;;37446:26:0;;37491:10;37520:36;37531:9;37541:1;37531:12;;;;;;;;;;;;;;37545:7;37553:1;37545:10;;;;;;;37520:36;37446:125;;;;;;;;;;;;;-1:-1:-1;;;;;37446:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37426:3:0;;;;;-1:-1:-1;37384:199:0;;-1:-1:-1;37384:199:0;;-1:-1:-1;37597:7:0;;-1:-1:-1;;;;;37597:7:0;:21;37593:246;;37644:7;;37635:192;;-1:-1:-1;;;37635:192:0;;37701:4;37635:192;;;;;;37725:10;37635:192;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37644:7:0;;;;37635:39;;37725:10;;37754:9;;37782:7;;37808:4;;37635:192;;;;;;;;;;;;;;;;;;;;;;37644:7;37635:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47075:407;47219:15;;;;:5;:15;;;;;;-1:-1:-1;;;;;47219:15:0;47238:10;47219:29;47211:62;;;;;-1:-1:-1;;;47211:62:0;;;;;;;;;;;;-1:-1:-1;;;47211:62:0;;;;;;;;;;;;;;;47284:20;47307:30;47320:8;47330:6;47307:12;:30::i;:::-;47284:53;-1:-1:-1;47351:17:0;47348:55;;47385:7;;;47348:55;47447:2;-1:-1:-1;;;;;47418:56:0;47441:4;-1:-1:-1;;;;;47418:56:0;47433:6;-1:-1:-1;;;;;47418:56:0;;47451:8;47461:12;47418:56;;;;;;;;;;;;;;;;;;;;;;;;47075:407;;;;;;;:::o;44921:218::-;-1:-1:-1;;;;;45094:27:0;;;45065:4;45094:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;44921:218::o;38158:362::-;38383:7;;38342:6;;-1:-1:-1;;;;;38383:7:0;38369:10;:21;38361:54;;;;;-1:-1:-1;;;38361:54:0;;;;;;;;;;;;-1:-1:-1;;;38361:54:0;;;;;;;;;;;;;;;38426:37;38432:5;38439:8;38449:6;38457:5;38426;:37::i;:::-;-1:-1:-1;;;;38481:31:0;38158:362;-1:-1:-1;;;;;;;38158:362:0:o;45210:801::-;-1:-1:-1;;;;;45410:16:0;;45402:66;;;;-1:-1:-1;;;45402:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45509:12;:10;:12::i;:::-;-1:-1:-1;;;;;45501:20:0;:4;-1:-1:-1;;;;;45501:20:0;;:60;;;;45525:36;45542:4;45548:12;:10;:12::i;45525:36::-;45479:151;;;;-1:-1:-1;;;45479:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45643:16;45662:12;:10;:12::i;:::-;45643:31;;45687:17;45695:8;45687:7;:17::i;:::-;-1:-1:-1;;;;;45687:30:0;;45718:4;45724:2;45728:28;45739:8;45749:6;45728:10;:28::i;:::-;45687:70;;;;;;;;;;;;;-1:-1:-1;;;;;45687:70:0;;;;;;-1:-1:-1;;;;;45687:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45775:52:0;;;;;;45687:70;45775:52;;;;;;;-1:-1:-1;;;;;45775:52:0;;;;;;;;;;;;;;;;;;;;;;45840:163;45885:8;45908:4;45927:2;45944:8;45967:6;45988:4;45840:30;:163::i;33429:2181::-;33616:6;;-1:-1:-1;;;;;33616:6:0;:20;33594:90;;;;;-1:-1:-1;;;33594:90:0;;;;;;;;;;;;-1:-1:-1;;;33594:90:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33719:19:0;;33697:109;;;;-1:-1:-1;;;33697:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33817:6;:14;;-1:-1:-1;;;;;33817:14:0;;;-1:-1:-1;;;;;;33817:14:0;;;;;;;;33844:16;;;;;;;;;;;;;;;33895:7;:21;;;:64;;-1:-1:-1;33920:22:0;;;;;;-1:-1:-1;;;;;;;;;;;33920:39:0;;33895:64;33873:162;;;;-1:-1:-1;;;33873:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34068:7;;-1:-1:-1;;;;;34068:7:0;:21;;;:66;;-1:-1:-1;34093:24:0;;;;;;-1:-1:-1;;;;;;;;;;;34093:41:0;;34068:66;34046:166;;;;-1:-1:-1;;;34046:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34225:51;-1:-1:-1;;;34225:18:0;:51::i;:::-;34287:56;-1:-1:-1;;;34287:18:0;:56::i;:::-;34354:26;34383:84;-1:-1:-1;;;34383:23:0;:84::i;:::-;34354:113;-1:-1:-1;34478:24:0;34505:75;-1:-1:-1;;;34505:23:0;:75::i;:::-;34613:7;;34478:102;;-1:-1:-1;;;;;;34613:7:0;:21;;:63;;;34655:21;34613:63;:103;;;;34697:19;34613:103;34591:207;;;;-1:-1:-1;;;34591:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34809:48;-1:-1:-1;;;34809:23:0;:48::i;:::-;-1:-1:-1;34868:53:0;-1:-1:-1;;;34868:23:0;:53::i;:::-;-1:-1:-1;34932:56:0;-1:-1:-1;;;34932:23:0;:56::i;:::-;-1:-1:-1;34999:55:0;-1:-1:-1;;;34999:23:0;:55::i;:::-;-1:-1:-1;35065:55:0;-1:-1:-1;;;35065:23:0;:55::i;:::-;-1:-1:-1;35131:42:0;-1:-1:-1;;;35131:23:0;:42::i;:::-;-1:-1:-1;35184:50:0;-1:-1:-1;;;35184:23:0;:50::i;:::-;-1:-1:-1;35261:35:0;-1:-1:-1;;;35261:23:0;:35::i;:::-;35245:13;:51;;-1:-1:-1;;35245:51:0;;;;;;;;;;35341:35;-1:-1:-1;;;35341:23:0;:35::i;:::-;35323:15;:53;;;;;;;-1:-1:-1;;35323:53:0;;;;;;;;;35425:47;-1:-1:-1;;;35425:23:0;:47::i;:::-;35405:17;:67;;;;;;;-1:-1:-1;;35405:67:0;;;;;;;;;-1:-1:-1;35503:7:0;-1:-1:-1;;;;;35503:7:0;:21;:49;;35535:17;;;;;;;35503:49;;;35527:5;35503:49;35483:17;:69;;;;;;;-1:-1:-1;;35483:69:0;;;;;;;;;35563:39;35589:4;35595:6;35563:25;:39::i;16370:106::-;16458:10;16370:106;:::o;48449:1009::-;48698:15;:2;-1:-1:-1;;;;;48698:13:0;;:15::i;:::-;48694:757;;;48768:2;-1:-1:-1;;;;;48751:43:0;;48817:8;48848:4;48875:3;48901:7;48931:4;48751:203;;;;;;;;;;;;;-1:-1:-1;;;;;48751:203:0;;;;;;-1:-1:-1;;;;;48751:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48751:203:0;;;48730:710;;;;:::i;:::-;;;;;;;;49313:6;49306:14;;-1:-1:-1;;;49306:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48730:710;49362:62;;-1:-1:-1;;;49362:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48730:710;-1:-1:-1;;;;;;49039:85:0;;-1:-1:-1;;;49039:85:0;49013:224;;49167:50;;-1:-1:-1;;;49167:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35982:491;36170:7;;36106:16;;;;-1:-1:-1;;;;;36170:7:0;:21;36162:63;;;;;-1:-1:-1;;;36162:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36258:27;;;;;;-1:-1:-1;;;;;;;;;;;36258:44:0;;36236:113;;;;;-1:-1:-1;;;36236:113:0;;;;;;;;;;;;-1:-1:-1;;;36236:113:0;;;;;;;;;;;;;;;36387:34;36393:10;36405:1;36408:6;36416:4;36387:5;:34::i;:::-;36432:21;;;;:11;:21;;;;;;;;:33;;36360:61;;-1:-1:-1;36360:61:0;;-1:-1:-1;36432:33:0;;;;;;;:::i;:::-;;35982:491;;;;;:::o;50426:1029::-;50584:7;50698:15;;;:5;:15;;;;;;50584:7;;50632:11;;-1:-1:-1;;;;;50698:15:0;50729:29;;;:49;;;50762:16;50729:49;50725:532;;;50830:24;50845:8;50830:14;:24::i;:::-;50821:6;:33;50795:129;;;;-1:-1:-1;;;50795:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50966:18;50973:10;:8;:10::i;:::-;50966:6;:18::i;:::-;50939:46;;51003:16;51000:92;;;51067:7;-1:-1:-1;;;;;51051:25:0;51040:36;;51000:92;51106:7;-1:-1:-1;;;;;51106:12:0;;51119:8;51106:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;51143:43:0;51151:15;;;:5;:15;;;;;;;;:34;;-1:-1:-1;;;;;;51151:34:0;-1:-1:-1;;;;;51151:34:0;;;;;;;;51143:43;;;:7;:43;;;;;;:50;;-1:-1:-1;;51143:50:0;-1:-1:-1;51143:50:0;;;51213:32;;;;;;;;;;;;;;;;-1:-1:-1;51213:32:0;;;;;;;;;50725:532;51267:7;-1:-1:-1;;;;;51267:12:0;;51280:4;51286:33;51302:8;51312:6;51286:15;:33::i;:::-;51267:53;;;;;;;;;;;;;-1:-1:-1;;;;;51267:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51336:65:0;;;;;;;;;;;;;;-1:-1:-1;;;;;51336:65:0;;;-1:-1:-1;51374:1:0;;-1:-1:-1;51359:4:0;;51336:65;;;;;;;;51420:8;;;;-1:-1:-1;50426:1029:0;-1:-1:-1;;;;;50426:1029:0:o;47490:951::-;47714:15;:2;-1:-1:-1;;;;;47714:13:0;;:15::i;:::-;47710:724;;;47784:2;-1:-1:-1;;;;;47767:38:0;;47828:8;47859:4;47886:2;47911:6;47940:4;47767:196;;;;;;;;;;;;;-1:-1:-1;;;;;47767:196:0;;;;;;-1:-1:-1;;;;;47767:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47767:196:0;;;47746:677;;;;:::i;:::-;-1:-1:-1;;;;;;48048:59:0;;-1:-1:-1;;;48048:59:0;48022:198;;48150:50;;-1:-1:-1;;;48150:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29982:201;-1:-1:-1;;;;;;30066:25:0;;;;;30058:66;;;;;-1:-1:-1;;;30058:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30135:33:0;:20;:33;;;;;;;;;;:40;;-1:-1:-1;;30135:40:0;30171:4;30135:40;;;29982:201::o;49466:444::-;49604:7;;49569:13;;-1:-1:-1;;;;;49604:7:0;49600:108;;49642:28;49661:8;49642:18;:28::i;:::-;-1:-1:-1;49692:4:0;49685:11;;49600:108;49729:7;;49722:43;;;-1:-1:-1;;;49722:43:0;;-1:-1:-1;;;;;;49722:43:0;;;;;;;;-1:-1:-1;;;;;49729:7:0;;;;49722:33;;:43;;;;;;;;;;;;;;;49729:7;49722:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49722:43:0;;;49718:185;;;;;49815:3;49804:14;;;49800:83;;;49839:28;49858:8;49839:18;:28::i;52142:727::-;52282:17;;;;:5;;:17;;;;;:::i;:::-;-1:-1:-1;52310:21:0;;;;:7;;:21;;;;;:::i;:::-;-1:-1:-1;52346:7:0;;-1:-1:-1;;;;;52346:7:0;:21;52342:317;;52417:7;;52444:11;;;-1:-1:-1;;;52444:11:0;;;;-1:-1:-1;;;;;52417:7:0;;;;;;52444:9;;:11;;;;;52384:17;;52444:11;;;;;;;52417:7;52444:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52444:11:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52444:11:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52444:11:0;;;;;;-1:-1:-1;52444:11:0;;;;;;;;;;-1:-1:-1;52444:11:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52440:95;;;;;52501:9;;;;:5;;:9;;;;;:::i;:::-;;52456:70;52440:95;52553:4;-1:-1:-1;;;;;52553:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52553:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52553:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;52553:13:0;;;;;;-1:-1:-1;52553:13:0;;;;;;;;;;-1:-1:-1;52553:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52549:99;;;;;52612:11;;;;:7;;:11;;;;;:::i;:::-;;52567:72;52549:99;52342:317;;-1:-1:-1;;;;;;;;;;;52693:5:0;52677:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;52669:70;;;;;-1:-1:-1;;;52669:70:0;;;;;;;;;;;;-1:-1:-1;;;52669:70:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;52788:7:0;52772:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;52750:111;;;;;-1:-1:-1;;;52750:111:0;;;;;;;;;;;;-1:-1:-1;;;52750:111:0;;;;;;;;;;;;;;;52142:727;;:::o;22937:619::-;22997:4;23465:20;;-1:-1:-1;;;;;;;;;;;23505:23:0;;;;;;:42;;-1:-1:-1;23532:15:0;;;23505:42;23497:51;22937:619;-1:-1:-1;;;;22937:619:0:o;51463:343::-;51601:7;;51572;;-1:-1:-1;;;;;51601:7:0;51597:69;;-1:-1:-1;51647:6:0;51639:15;;51597:69;51680:17;;;;;;;51676:104;;;51740:7;;51726:41;;;-1:-1:-1;;;51726:41:0;;;;;;;;;;-1:-1:-1;;;;;51740:7:0;;;;51726:31;;:41;;;;;;;;;;;;;;;51740:7;51726:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51726:41:0;51722:2;:45;;-1:-1:-1;51714:54:0;;51676:104;-1:-1:-1;51797:1:0;51463:343;;;:::o;49918:500::-;49970:12;50192:21;50182:8;50178:36;-1:-1:-1;;;;;50064:169:0;50044:1;50019:229;50283:2;50280:1;50277;50270:16;50262:24;-1:-1:-1;50307:17:0;;50342:58;;;;50300:100;;50342:58;50372:9;51814:320;51969:7;;51940;;-1:-1:-1;;;;;51969:7:0;:21;;;;:42;;-1:-1:-1;51994:17:0;;;;;;;51969:42;51965:138;;;52063:7;;52049:41;;;-1:-1:-1;;;52049:41:0;;;;;;;;;;-1:-1:-1;;;;;52063:7:0;;;;52049:31;;:41;;;;;;;;;;;;;;;52063:7;52049:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52049:41:0;52045:2;:45;52035:56;;;-1:-1:-1;52028:63:0;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;110:106;195:3;191:15;;163:53::o;224:739::-;;297:4;279:16;276:26;273:2;;;305:5;;273:2;339:1;-1:-1;;318:23;414:10;357:34;-1:-1;382:8;357:34;:::i;:::-;406:19;396:2;;429:5;;396:2;460;454:9;496:16;-1:-1;;492:24;339:1;454:9;468:49;543:4;537:11;624:16;576:18;624:16;617:4;609:6;605:17;602:39;576:18;568:6;565:30;556:91;553:2;;;655:5;;;;;;553:2;693:6;687:4;683:17;672:28;;725:3;719:10;705:24;;576:18;740:6;737:30;734:2;;;770:5;;;;;;734:2;;847:16;841:4;837:27;807:4;814:6;802:3;794:27;;829:36;826:2;;;868:5;;;;;826:2;89:7;73:14;-1:-1;;69:28;892:50;;807:4;892:50;460:2;881:62;900:3;-1:-1;;267:696;:::o
Swarm Source
ipfs://6129495e80a4eb8f411641e2b3eb9acb50fae6eccbe2338faa1ce27e9994ada6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.