Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 27 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 16907521 | 1029 days ago | IN | 0 ETH | 0.00046098 | ||||
| Transfer From | 13898468 | 1481 days ago | IN | 0 ETH | 0.00707131 | ||||
| Mint Batch | 13897874 | 1481 days ago | IN | 0.04 ETH | 0.01082952 | ||||
| Mint Batch | 13897657 | 1481 days ago | IN | 0.04 ETH | 0.01194257 | ||||
| Mint Batch | 13889741 | 1482 days ago | IN | 0.04 ETH | 0.01044174 | ||||
| Mint Batch | 13884984 | 1483 days ago | IN | 0.04 ETH | 0.00975959 | ||||
| Mint Batch | 13869195 | 1485 days ago | IN | 0.08 ETH | 0.01996643 | ||||
| Mint Batch | 13859724 | 1487 days ago | IN | 0.08 ETH | 0.01559953 | ||||
| Mint Batch | 13859442 | 1487 days ago | IN | 0.08 ETH | 0.01948313 | ||||
| Mint Batch | 13859420 | 1487 days ago | IN | 0.08 ETH | 0.0159746 | ||||
| Mint Batch | 13859374 | 1487 days ago | IN | 0.04 ETH | 0.01068321 | ||||
| Mint Batch | 13858168 | 1487 days ago | IN | 0.04 ETH | 0.01136325 | ||||
| Mint Batch | 13857734 | 1487 days ago | IN | 0.04 ETH | 0.01730722 | ||||
| Mint Batch | 13857496 | 1487 days ago | IN | 0.04 ETH | 0.02179298 | ||||
| Mint Batch | 13852313 | 1488 days ago | IN | 0.16 ETH | 0.04045068 | ||||
| Mint Batch | 13838860 | 1490 days ago | IN | 0.04 ETH | 0.00992639 | ||||
| Transfer From | 13821717 | 1493 days ago | IN | 0 ETH | 0.00441991 | ||||
| Mint Batch | 13814007 | 1494 days ago | IN | 0.04 ETH | 0.01440613 | ||||
| Mint Batch | 13802139 | 1496 days ago | IN | 0.04 ETH | 0.00925519 | ||||
| Mint Batch | 13789859 | 1498 days ago | IN | 0.04 ETH | 0.00593948 | ||||
| Mint Batch | 13789840 | 1498 days ago | IN | 0.04 ETH | 0.00613471 | ||||
| Mint Batch | 13789652 | 1498 days ago | IN | 0.04 ETH | 0.00554709 | ||||
| Mint Batch | 13789416 | 1498 days ago | IN | 0.16 ETH | 0.02125043 | ||||
| Withdraw | 13789247 | 1498 days ago | IN | 0 ETH | 0.00110354 | ||||
| Mint Batch | 13789229 | 1498 days ago | IN | 0.04 ETH | 0.00620843 |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ChatPunks
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-12-16
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// File: common/meta-transactions/Initializable.sol
contract Initializable {
bool inited = false;
modifier initializer() {
require(!inited, "already inited");
_;
inited = true;
}
}
// File: common/meta-transactions/EIP712Base.sol
contract EIP712Base is Initializable {
struct EIP712Domain {
string name;
string version;
address verifyingContract;
bytes32 salt;
}
string constant public ERC712_VERSION = "1";
bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(
bytes(
"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)"
)
);
bytes32 internal domainSeperator;
function _initializeEIP712(
string memory name
)
internal
initializer
{
_setDomainSeperator(name);
}
function _setDomainSeperator(string memory name) internal {
domainSeperator = keccak256(
abi.encode(
EIP712_DOMAIN_TYPEHASH,
keccak256(bytes(name)),
keccak256(bytes(ERC712_VERSION)),
address(this),
bytes32(getChainId())
)
);
}
function getDomainSeperator() public view returns (bytes32) {
return domainSeperator;
}
function getChainId() public view returns (uint256) {
uint256 id;
assembly {
id := chainid()
}
return id;
}
function toTypedMessageHash(bytes32 messageHash)
internal
view
returns (bytes32)
{
return
keccak256(
abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash)
);
}
}
// File: common/meta-transactions/ContentMixin.sol
abstract contract ContextMixin {
function msgSender()
internal
view
returns (address payable sender)
{
if (msg.sender == address(this)) {
bytes memory array = msg.data;
uint256 index = msg.data.length;
assembly {
sender := and(
mload(add(array, index)),
0xffffffffffffffffffffffffffffffffffffffff
)
}
} else {
sender = payable(msg.sender);
}
return sender;
}
}
// File: openzeppelin-solidity/contracts/utils/math/SafeMath.sol
library SafeMath {
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// File: common/meta-transactions/NativeMetaTransaction.sol
contract NativeMetaTransaction is EIP712Base {
using SafeMath for uint256;
bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(
bytes(
"MetaTransaction(uint256 nonce,address from,bytes functionSignature)"
)
);
event MetaTransactionExecuted(
address userAddress,
address payable relayerAddress,
bytes functionSignature
);
mapping(address => uint256) nonces;
struct MetaTransaction {
uint256 nonce;
address from;
bytes functionSignature;
}
function executeMetaTransaction(
address userAddress,
bytes memory functionSignature,
bytes32 sigR,
bytes32 sigS,
uint8 sigV
) public payable returns (bytes memory) {
MetaTransaction memory metaTx = MetaTransaction({
nonce: nonces[userAddress],
from: userAddress,
functionSignature: functionSignature
});
require(
verify(userAddress, metaTx, sigR, sigS, sigV),
"Signer and signature do not match"
);
nonces[userAddress] = nonces[userAddress].add(1);
emit MetaTransactionExecuted(
userAddress,
payable(msg.sender),
functionSignature
);
(bool success, bytes memory returnData) = address(this).call(
abi.encodePacked(functionSignature, userAddress)
);
require(success, "Function call not successful");
return returnData;
}
function hashMetaTransaction(MetaTransaction memory metaTx)
internal
pure
returns (bytes32)
{
return
keccak256(
abi.encode(
META_TRANSACTION_TYPEHASH,
metaTx.nonce,
metaTx.from,
keccak256(metaTx.functionSignature)
)
);
}
function getNonce(address user) public view returns (uint256 nonce) {
nonce = nonces[user];
}
function verify(
address signer,
MetaTransaction memory metaTx,
bytes32 sigR,
bytes32 sigS,
uint8 sigV
) internal view returns (bool) {
require(signer != address(0), "NativeMetaTransaction: INVALID_SIGNER");
return
signer ==
ecrecover(
toTypedMessageHash(hashMetaTransaction(metaTx)),
sigV,
sigR,
sigS
);
}
}
// File: openzeppelin-solidity/contracts/utils/Strings.sol
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
function toString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: openzeppelin-solidity/contracts/utils/Context.sol
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: openzeppelin-solidity/contracts/access/Ownable.sol
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: openzeppelin-solidity/contracts/utils/Address.sol
library Address {
function isContract(address account) internal view returns (bool) {
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
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");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol
interface IERC721Receiver {
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: openzeppelin-solidity/contracts/utils/introspection/IERC165.sol
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: openzeppelin-solidity/contracts/utils/introspection/ERC165.sol
abstract contract ERC165 is IERC165 {
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol
interface IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function balanceOf(address owner) external view returns (uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
function approve(address to, uint256 tokenId) external;
function getApproved(uint256 tokenId) external view returns (address operator);
function setApprovalForAll(address operator, bool _approved) external;
function isApprovedForAll(address owner, address operator) external view returns (bool);
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// File: openzeppelin-solidity/contracts/token/ERC721/extensions/IERC721Enumerable.sol
interface IERC721Enumerable is IERC721 {
function totalSupply() external view returns (uint256);
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: openzeppelin-solidity/contracts/token/ERC721/extensions/IERC721Metadata.sol
interface IERC721Metadata is IERC721 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
string private _name;
string private _symbol;
mapping(uint256 => address) private _owners;
mapping(address => uint256) private _balances;
mapping(uint256 => address) private _tokenApprovals;
mapping(address => mapping(address => bool)) private _operatorApprovals;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
function _baseURI() internal view virtual returns (string memory) {
return "";
}
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: openzeppelin-solidity/contracts/token/ERC721/extensions/ERC721Enumerable.sol
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
mapping(uint256 => uint256) private _ownedTokensIndex;
uint256[] private _allTokens;
mapping(uint256 => uint256) private _allTokensIndex;
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId;
_ownedTokensIndex[lastTokenId] = tokenIndex;
}
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId;
_allTokensIndex[lastTokenId] = tokenIndex;
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// File: ERC721Tradable.sol
contract OwnableDelegateProxy {}
contract ProxyRegistry {
mapping(address => OwnableDelegateProxy) public proxies;
}
abstract contract ERC721Tradable is ContextMixin, ERC721Enumerable, NativeMetaTransaction, Ownable {
using SafeMath for uint256;
address proxyRegistryAddress;
uint256 private _currentTokenId = 0;
constructor(
string memory _name,
string memory _symbol,
address _proxyRegistryAddress
) ERC721(_name, _symbol) {
proxyRegistryAddress = _proxyRegistryAddress;
_initializeEIP712(_name);
}
function mintTo(address _to) public onlyOwner {
uint256 newTokenId = _getNextTokenId();
_mint(_to, newTokenId);
_incrementTokenId();
}
function _getNextTokenId() internal view returns (uint256) {
return _currentTokenId.add(1);
}
function _incrementTokenId() internal {
_currentTokenId++;
}
function baseTokenURI() virtual public pure returns (string memory);
function tokenURI(uint256 _tokenId) override public pure returns (string memory) {
return string(abi.encodePacked(baseTokenURI(), Strings.toString(_tokenId)));
}
function isApprovedForAll(address owner, address operator)
override
public
view
returns (bool)
{
ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
if (address(proxyRegistry.proxies(owner)) == operator) {
return true;
}
return super.isApprovedForAll(owner, operator);
}
function _msgSender()
internal
override
view
returns (address sender)
{
return ContextMixin.msgSender();
}
}
// File: ChatPunks.sol
contract ChatPunks is ERC721Tradable {
constructor(address _proxyRegistryAddress)
ERC721Tradable("ChatPunks", "CPK", _proxyRegistryAddress)
{}
function baseTokenURI() override public pure returns (string memory) {
return "https://chatpunks.appspot.com/api/chatpunks-nft/";
}
function contractURI() public pure returns (string memory) {
return "https://chatpunks.appspot.com/api/chatpunks-contract-metadata";
}
function mintBatch(uint256 mintCount, address _toAddress) public payable {
uint256 supply = totalSupply();
require(supply + mintCount < 10001, "Exceeds maximum supply");
require(msg.value >= 0.04 ether * mintCount, "Not enough ETH sent, check price");
for (uint256 i = 0; i < mintCount; i++) {
uint256 newTokenId = _getNextTokenId();
_mint(_toAddress, newTokenId);
_incrementTokenId();
}
}
function withdraw() public onlyOwner {
payable(owner()).transfer(address(this).balance);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ERC712_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDomainSeperator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintCount","type":"uint256"},{"internalType":"address","name":"_toAddress","type":"address"}],"name":"mintBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526000600a60006101000a81548160ff0219169083151502179055506000600f553480156200003157600080fd5b5060405162004cae38038062004cae833981810160405281019062000057919062000510565b6040518060400160405280600981526020017f4368617450756e6b7300000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f43504b00000000000000000000000000000000000000000000000000000000008152508282828160009080519060200190620000de92919062000449565b508060019080519060200190620000f792919062000449565b5050506200011a6200010e6200017660201b60201c565b6200019260201b60201c565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200016c836200025860201b60201c565b5050505062000706565b60006200018d620002da60201b620016561760201c565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600a60009054906101000a900460ff1615620002ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a290620005e8565b60405180910390fd5b620002bc816200038d60201b60201c565b6001600a60006101000a81548160ff02191690831515021790555050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156200038657600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff8183015116925050506200038a565b3390505b90565b6040518060800160405280604f815260200162004c5f604f91398051906020012081805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012030620004046200043c60201b60201c565b60001b6040516020016200041d9594939291906200058b565b60405160208183030381529060405280519060200120600b8190555050565b6000804690508091505090565b828054620004579062000659565b90600052602060002090601f0160209004810192826200047b5760008555620004c7565b82601f106200049657805160ff1916838001178555620004c7565b82800160010185558215620004c7579182015b82811115620004c6578251825591602001919060010190620004a9565b5b509050620004d69190620004da565b5090565b5b80821115620004f5576000816000905550600101620004db565b5090565b6000815190506200050a81620006ec565b92915050565b600060208284031215620005295762000528620006be565b5b60006200053984828501620004f9565b91505092915050565b6200054d816200061b565b82525050565b6200055e816200062f565b82525050565b600062000573600e836200060a565b91506200058082620006c3565b602082019050919050565b600060a082019050620005a2600083018862000553565b620005b1602083018762000553565b620005c0604083018662000553565b620005cf606083018562000542565b620005de608083018462000553565b9695505050505050565b60006020820190508181036000830152620006038162000564565b9050919050565b600082825260208201905092915050565b6000620006288262000639565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200067257607f821691505b602082108114156200068957620006886200068f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f616c726561647920696e69746564000000000000000000000000000000000000600082015250565b620006f7816200061b565b81146200070357600080fd5b50565b61454980620007166000396000f3fe6080604052600436106101c25760003560e01c80634f6ccce7116100f7578063a22cb46511610095578063d547cfb711610064578063d547cfb71461064c578063e8a3d48514610677578063e985e9c5146106a2578063f2fde38b146106df576101c2565b8063a22cb465146105a1578063b88d4fde146105ca578063bc4f1a7e146105f3578063c87b56dd1461060f576101c2565b8063715018a6116100d1578063715018a61461050b578063755edd17146105225780638da5cb5b1461054b57806395d89b4114610576576101c2565b80634f6ccce7146104545780636352211e1461049157806370a08231146104ce576101c2565b806320379ee5116101645780632f745c591161013e5780632f745c59146103ac5780633408e470146103e95780633ccfd60b1461041457806342842e0e1461042b576101c2565b806320379ee51461031b57806323b872dd146103465780632d0335ab1461036f576101c2565b8063095ea7b3116101a0578063095ea7b31461026c5780630c53c51c146102955780630f7e5970146102c557806318160ddd146102f0576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612e45565b610708565b6040516101fb91906134f9565b60405180910390f35b34801561021057600080fd5b50610219610782565b60405161022691906135db565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612ecc565b610814565b6040516102639190613454565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612e05565b610899565b005b6102af60048036038101906102aa9190612d6e565b6109b1565b6040516102bc91906135b9565b60405180910390f35b3480156102d157600080fd5b506102da610c23565b6040516102e791906135db565b60405180910390f35b3480156102fc57600080fd5b50610305610c5c565b60405161031291906138bd565b60405180910390f35b34801561032757600080fd5b50610330610c69565b60405161033d9190613514565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190612c58565b610c73565b005b34801561037b57600080fd5b5061039660048036038101906103919190612beb565b610cd3565b6040516103a391906138bd565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190612e05565b610d1c565b6040516103e091906138bd565b60405180910390f35b3480156103f557600080fd5b506103fe610dc1565b60405161040b91906138bd565b60405180910390f35b34801561042057600080fd5b50610429610dce565b005b34801561043757600080fd5b50610452600480360381019061044d9190612c58565b610e9a565b005b34801561046057600080fd5b5061047b60048036038101906104769190612ecc565b610eba565b60405161048891906138bd565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190612ecc565b610f2b565b6040516104c59190613454565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612beb565b610fdd565b60405161050291906138bd565b60405180910390f35b34801561051757600080fd5b50610520611095565b005b34801561052e57600080fd5b5061054960048036038101906105449190612beb565b61111d565b005b34801561055757600080fd5b506105606111bb565b60405161056d9190613454565b60405180910390f35b34801561058257600080fd5b5061058b6111e5565b60405161059891906135db565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190612d2e565b611277565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190612cab565b61128d565b005b61060d60048036038101906106089190612ef9565b6112ef565b005b34801561061b57600080fd5b5061063660048036038101906106319190612ecc565b6113e2565b60405161064391906135db565b60405180910390f35b34801561065857600080fd5b5061066161141c565b60405161066e91906135db565b60405180910390f35b34801561068357600080fd5b5061068c61143c565b60405161069991906135db565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190612c18565b61145c565b6040516106d691906134f9565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190612beb565b61155e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077b575061077a82611707565b5b9050919050565b60606000805461079190613b82565b80601f01602080910402602001604051908101604052809291908181526020018280546107bd90613b82565b801561080a5780601f106107df5761010080835404028352916020019161080a565b820191906000526020600020905b8154815290600101906020018083116107ed57829003601f168201915b5050505050905090565b600061081f826117e9565b61085e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108559061379d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a482610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c9061381d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610934611855565b73ffffffffffffffffffffffffffffffffffffffff16148061096357506109628161095d611855565b61145c565b5b6109a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109999061371d565b60405180910390fd5b6109ac8383611864565b505050565b606060006040518060600160405280600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610a34878287878761191d565b610a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6a906137fd565b60405180910390fd5b610ac66001600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a2690919063ffffffff16565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610b3c9392919061346f565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610b719291906133d1565b604051602081830303815290604052604051610b8d91906133ba565b6000604051808303816000865af19150503d8060008114610bca576040519150601f19603f3d011682016040523d82523d6000602084013e610bcf565b606091505b509150915081610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b9061365d565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6000600880549050905090565b6000600b54905090565b610c84610c7e611855565b82611a3c565b610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba9061385d565b60405180910390fd5b610cce838383611b1a565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610d2783610fdd565b8210610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f906135fd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000804690508091505090565b610dd6611855565b73ffffffffffffffffffffffffffffffffffffffff16610df46111bb565b73ffffffffffffffffffffffffffffffffffffffff1614610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e41906137bd565b60405180910390fd5b610e526111bb565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e97573d6000803e3d6000fd5b50565b610eb58383836040518060200160405280600081525061128d565b505050565b6000610ec4610c5c565b8210610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc9061387d565b60405180910390fd5b60088281548110610f1957610f18613d49565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb9061375d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561104e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110459061373d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61109d611855565b73ffffffffffffffffffffffffffffffffffffffff166110bb6111bb565b73ffffffffffffffffffffffffffffffffffffffff1614611111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611108906137bd565b60405180910390fd5b61111b6000611d76565b565b611125611855565b73ffffffffffffffffffffffffffffffffffffffff166111436111bb565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906137bd565b60405180910390fd5b60006111a3611e3c565b90506111af8282611e59565b6111b7612027565b5050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111f490613b82565b80601f016020809104026020016040519081016040528092919081815260200182805461122090613b82565b801561126d5780601f106112425761010080835404028352916020019161126d565b820191906000526020600020905b81548152906001019060200180831161125057829003601f168201915b5050505050905090565b611289611282611855565b8383612041565b5050565b61129e611298611855565b83611a3c565b6112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d49061385d565b60405180910390fd5b6112e9848484846121ae565b50505050565b60006112f9610c5c565b9050612711838261130a919061397c565b1061134a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113419061383d565b60405180910390fd5b82668e1bc9bf04000061135d9190613a03565b34101561139f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113969061389d565b60405180910390fd5b60005b838110156113dc5760006113b4611e3c565b90506113c08482611e59565b6113c8612027565b5080806113d490613be5565b9150506113a2565b50505050565b60606113ec61141c565b6113f58361220a565b6040516020016114069291906133f9565b6040516020818303038152906040529050919050565b60606040518060600160405280603081526020016144e460309139905090565b60606040518060600160405280603d81526020016144a7603d9139905090565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016114d49190613454565b60206040518083038186803b1580156114ec57600080fd5b505afa158015611500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115249190612e9f565b73ffffffffffffffffffffffffffffffffffffffff16141561154a576001915050611558565b611554848461236b565b9150505b92915050565b611566611855565b73ffffffffffffffffffffffffffffffffffffffff166115846111bb565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d1906137bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561164a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116419061363d565b60405180910390fd5b61165381611d76565b50565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561170057600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611704565b3390505b90565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806117e257506117e1826123ff565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600061185f611656565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118d783610f2b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906136fd565b60405180910390fd5b60016119a161199c87612469565b6124d1565b838686604051600081526020016040526040516119c19493929190613574565b6020604051602081039080840390855afa1580156119e3573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b60008183611a34919061397c565b905092915050565b6000611a47826117e9565b611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d906136dd565b60405180910390fd5b6000611a9183610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b0057508373ffffffffffffffffffffffffffffffffffffffff16611ae884610814565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b115750611b10818561145c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b3a82610f2b565b73ffffffffffffffffffffffffffffffffffffffff1614611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b87906137dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf79061369d565b60405180910390fd5b611c0b83838361250a565b611c16600082611864565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c669190613a5d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cbd919061397c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611e546001600f54611a2690919063ffffffff16565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec09061377d565b60405180910390fd5b611ed2816117e9565b15611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f099061367d565b60405180910390fd5b611f1e6000838361250a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f6e919061397c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600f600081548092919061203a90613be5565b9190505550565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a7906136bd565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121a191906134f9565b60405180910390a3505050565b6121b9848484611b1a565b6121c58484848461261e565b612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb9061361d565b60405180910390fd5b50505050565b60606000821415612252576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612366565b600082905060005b6000821461228457808061226d90613be5565b915050600a8261227d91906139d2565b915061225a565b60008167ffffffffffffffff8111156122a05761229f613d78565b5b6040519080825280601f01601f1916602001820160405280156122d25781602001600182028036833780820191505090505b5090505b6000851461235f576001826122eb9190613a5d565b9150600a856122fa9190613c5c565b6030612306919061397c565b60f81b81838151811061231c5761231b613d49565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561235891906139d2565b94506122d6565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006040518060800160405280604381526020016144646043913980519060200120826000015183602001518460400151805190602001206040516020016124b4949392919061352f565b604051602081830303815290604052805190602001209050919050565b60006124db610c69565b826040516020016124ed92919061341d565b604051602081830303815290604052805190602001209050919050565b6125158383836127b5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561255857612553816127ba565b612597565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612596576125958382612803565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125da576125d581612970565b612619565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612618576126178282612a41565b5b5b505050565b600061263f8473ffffffffffffffffffffffffffffffffffffffff16612ac0565b156127a8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612668611855565b8786866040518563ffffffff1660e01b815260040161268a94939291906134ad565b602060405180830381600087803b1580156126a457600080fd5b505af19250505080156126d557506040513d601f19601f820116820180604052508101906126d29190612e72565b60015b612758573d8060008114612705576040519150601f19603f3d011682016040523d82523d6000602084013e61270a565b606091505b50600081511415612750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127479061361d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127ad565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161281084610fdd565b61281a9190613a5d565b90506000600760008481526020019081526020016000205490508181146128ff576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129849190613a5d565b90506000600960008481526020019081526020016000205490506000600883815481106129b4576129b3613d49565b5b9060005260206000200154905080600883815481106129d6576129d5613d49565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a2557612a24613d1a565b5b6001900381819060005260206000200160009055905550505050565b6000612a4c83610fdd565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b6000612ae6612ae1846138fd565b6138d8565b905082815260208101848484011115612b0257612b01613dac565b5b612b0d848285613b40565b509392505050565b600081359050612b24816143c2565b92915050565b600081359050612b39816143d9565b92915050565b600081359050612b4e816143f0565b92915050565b600081359050612b6381614407565b92915050565b600081519050612b7881614407565b92915050565b600082601f830112612b9357612b92613da7565b5b8135612ba3848260208601612ad3565b91505092915050565b600081519050612bbb8161441e565b92915050565b600081359050612bd081614435565b92915050565b600081359050612be58161444c565b92915050565b600060208284031215612c0157612c00613db6565b5b6000612c0f84828501612b15565b91505092915050565b60008060408385031215612c2f57612c2e613db6565b5b6000612c3d85828601612b15565b9250506020612c4e85828601612b15565b9150509250929050565b600080600060608486031215612c7157612c70613db6565b5b6000612c7f86828701612b15565b9350506020612c9086828701612b15565b9250506040612ca186828701612bc1565b9150509250925092565b60008060008060808587031215612cc557612cc4613db6565b5b6000612cd387828801612b15565b9450506020612ce487828801612b15565b9350506040612cf587828801612bc1565b925050606085013567ffffffffffffffff811115612d1657612d15613db1565b5b612d2287828801612b7e565b91505092959194509250565b60008060408385031215612d4557612d44613db6565b5b6000612d5385828601612b15565b9250506020612d6485828601612b2a565b9150509250929050565b600080600080600060a08688031215612d8a57612d89613db6565b5b6000612d9888828901612b15565b955050602086013567ffffffffffffffff811115612db957612db8613db1565b5b612dc588828901612b7e565b9450506040612dd688828901612b3f565b9350506060612de788828901612b3f565b9250506080612df888828901612bd6565b9150509295509295909350565b60008060408385031215612e1c57612e1b613db6565b5b6000612e2a85828601612b15565b9250506020612e3b85828601612bc1565b9150509250929050565b600060208284031215612e5b57612e5a613db6565b5b6000612e6984828501612b54565b91505092915050565b600060208284031215612e8857612e87613db6565b5b6000612e9684828501612b69565b91505092915050565b600060208284031215612eb557612eb4613db6565b5b6000612ec384828501612bac565b91505092915050565b600060208284031215612ee257612ee1613db6565b5b6000612ef084828501612bc1565b91505092915050565b60008060408385031215612f1057612f0f613db6565b5b6000612f1e85828601612bc1565b9250506020612f2f85828601612b15565b9150509250929050565b612f4281613aa3565b82525050565b612f5181613a91565b82525050565b612f68612f6382613a91565b613c2e565b82525050565b612f7781613ab5565b82525050565b612f8681613ac1565b82525050565b612f9d612f9882613ac1565b613c40565b82525050565b6000612fae8261392e565b612fb88185613944565b9350612fc8818560208601613b4f565b612fd181613dbb565b840191505092915050565b6000612fe78261392e565b612ff18185613955565b9350613001818560208601613b4f565b80840191505092915050565b600061301882613939565b6130228185613960565b9350613032818560208601613b4f565b61303b81613dbb565b840191505092915050565b600061305182613939565b61305b8185613971565b935061306b818560208601613b4f565b80840191505092915050565b6000613084602b83613960565b915061308f82613dd9565b604082019050919050565b60006130a7603283613960565b91506130b282613e28565b604082019050919050565b60006130ca602683613960565b91506130d582613e77565b604082019050919050565b60006130ed601c83613960565b91506130f882613ec6565b602082019050919050565b6000613110601c83613960565b915061311b82613eef565b602082019050919050565b6000613133600283613971565b915061313e82613f18565b600282019050919050565b6000613156602483613960565b915061316182613f41565b604082019050919050565b6000613179601983613960565b915061318482613f90565b602082019050919050565b600061319c602c83613960565b91506131a782613fb9565b604082019050919050565b60006131bf602583613960565b91506131ca82614008565b604082019050919050565b60006131e2603883613960565b91506131ed82614057565b604082019050919050565b6000613205602a83613960565b9150613210826140a6565b604082019050919050565b6000613228602983613960565b9150613233826140f5565b604082019050919050565b600061324b602083613960565b915061325682614144565b602082019050919050565b600061326e602c83613960565b91506132798261416d565b604082019050919050565b6000613291602083613960565b915061329c826141bc565b602082019050919050565b60006132b4602983613960565b91506132bf826141e5565b604082019050919050565b60006132d7602183613960565b91506132e282614234565b604082019050919050565b60006132fa602183613960565b915061330582614283565b604082019050919050565b600061331d601683613960565b9150613328826142d2565b602082019050919050565b6000613340603183613960565b915061334b826142fb565b604082019050919050565b6000613363602c83613960565b915061336e8261434a565b604082019050919050565b6000613386602083613960565b915061339182614399565b602082019050919050565b6133a581613b29565b82525050565b6133b481613b33565b82525050565b60006133c68284612fdc565b915081905092915050565b60006133dd8285612fdc565b91506133e98284612f57565b6014820191508190509392505050565b60006134058285613046565b91506134118284613046565b91508190509392505050565b600061342882613126565b91506134348285612f8c565b6020820191506134448284612f8c565b6020820191508190509392505050565b60006020820190506134696000830184612f48565b92915050565b60006060820190506134846000830186612f48565b6134916020830185612f39565b81810360408301526134a38184612fa3565b9050949350505050565b60006080820190506134c26000830187612f48565b6134cf6020830186612f48565b6134dc604083018561339c565b81810360608301526134ee8184612fa3565b905095945050505050565b600060208201905061350e6000830184612f6e565b92915050565b60006020820190506135296000830184612f7d565b92915050565b60006080820190506135446000830187612f7d565b613551602083018661339c565b61355e6040830185612f48565b61356b6060830184612f7d565b95945050505050565b60006080820190506135896000830187612f7d565b61359660208301866133ab565b6135a36040830185612f7d565b6135b06060830184612f7d565b95945050505050565b600060208201905081810360008301526135d38184612fa3565b905092915050565b600060208201905081810360008301526135f5818461300d565b905092915050565b6000602082019050818103600083015261361681613077565b9050919050565b600060208201905081810360008301526136368161309a565b9050919050565b60006020820190508181036000830152613656816130bd565b9050919050565b60006020820190508181036000830152613676816130e0565b9050919050565b6000602082019050818103600083015261369681613103565b9050919050565b600060208201905081810360008301526136b681613149565b9050919050565b600060208201905081810360008301526136d68161316c565b9050919050565b600060208201905081810360008301526136f68161318f565b9050919050565b60006020820190508181036000830152613716816131b2565b9050919050565b60006020820190508181036000830152613736816131d5565b9050919050565b60006020820190508181036000830152613756816131f8565b9050919050565b600060208201905081810360008301526137768161321b565b9050919050565b600060208201905081810360008301526137968161323e565b9050919050565b600060208201905081810360008301526137b681613261565b9050919050565b600060208201905081810360008301526137d681613284565b9050919050565b600060208201905081810360008301526137f6816132a7565b9050919050565b60006020820190508181036000830152613816816132ca565b9050919050565b60006020820190508181036000830152613836816132ed565b9050919050565b6000602082019050818103600083015261385681613310565b9050919050565b6000602082019050818103600083015261387681613333565b9050919050565b6000602082019050818103600083015261389681613356565b9050919050565b600060208201905081810360008301526138b681613379565b9050919050565b60006020820190506138d2600083018461339c565b92915050565b60006138e26138f3565b90506138ee8282613bb4565b919050565b6000604051905090565b600067ffffffffffffffff82111561391857613917613d78565b5b61392182613dbb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061398782613b29565b915061399283613b29565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139c7576139c6613c8d565b5b828201905092915050565b60006139dd82613b29565b91506139e883613b29565b9250826139f8576139f7613cbc565b5b828204905092915050565b6000613a0e82613b29565b9150613a1983613b29565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a5257613a51613c8d565b5b828202905092915050565b6000613a6882613b29565b9150613a7383613b29565b925082821015613a8657613a85613c8d565b5b828203905092915050565b6000613a9c82613b09565b9050919050565b6000613aae82613b09565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613b0282613a91565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613b6d578082015181840152602081019050613b52565b83811115613b7c576000848401525b50505050565b60006002820490506001821680613b9a57607f821691505b60208210811415613bae57613bad613ceb565b5b50919050565b613bbd82613dbb565b810181811067ffffffffffffffff82111715613bdc57613bdb613d78565b5b80604052505050565b6000613bf082613b29565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c2357613c22613c8d565b5b600182019050919050565b6000613c3982613c4a565b9050919050565b6000819050919050565b6000613c5582613dcc565b9050919050565b6000613c6782613b29565b9150613c7283613b29565b925082613c8257613c81613cbc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e742c20636865636b207072696365600082015250565b6143cb81613a91565b81146143d657600080fd5b50565b6143e281613ab5565b81146143ed57600080fd5b50565b6143f981613ac1565b811461440457600080fd5b50565b61441081613acb565b811461441b57600080fd5b50565b61442781613af7565b811461443257600080fd5b50565b61443e81613b29565b811461444957600080fd5b50565b61445581613b33565b811461446057600080fd5b5056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652968747470733a2f2f6368617470756e6b732e61707073706f742e636f6d2f6170692f6368617470756e6b732d636f6e74726163742d6d6574616461746168747470733a2f2f6368617470756e6b732e61707073706f742e636f6d2f6170692f6368617470756e6b732d6e66742fa26469706673582212205b3313e5f31943a8cfb99276d5faaa7a0cc143c4001f20169bb1e77344c3e6c164736f6c63430008070033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c7429000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Deployed Bytecode
0x6080604052600436106101c25760003560e01c80634f6ccce7116100f7578063a22cb46511610095578063d547cfb711610064578063d547cfb71461064c578063e8a3d48514610677578063e985e9c5146106a2578063f2fde38b146106df576101c2565b8063a22cb465146105a1578063b88d4fde146105ca578063bc4f1a7e146105f3578063c87b56dd1461060f576101c2565b8063715018a6116100d1578063715018a61461050b578063755edd17146105225780638da5cb5b1461054b57806395d89b4114610576576101c2565b80634f6ccce7146104545780636352211e1461049157806370a08231146104ce576101c2565b806320379ee5116101645780632f745c591161013e5780632f745c59146103ac5780633408e470146103e95780633ccfd60b1461041457806342842e0e1461042b576101c2565b806320379ee51461031b57806323b872dd146103465780632d0335ab1461036f576101c2565b8063095ea7b3116101a0578063095ea7b31461026c5780630c53c51c146102955780630f7e5970146102c557806318160ddd146102f0576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612e45565b610708565b6040516101fb91906134f9565b60405180910390f35b34801561021057600080fd5b50610219610782565b60405161022691906135db565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612ecc565b610814565b6040516102639190613454565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612e05565b610899565b005b6102af60048036038101906102aa9190612d6e565b6109b1565b6040516102bc91906135b9565b60405180910390f35b3480156102d157600080fd5b506102da610c23565b6040516102e791906135db565b60405180910390f35b3480156102fc57600080fd5b50610305610c5c565b60405161031291906138bd565b60405180910390f35b34801561032757600080fd5b50610330610c69565b60405161033d9190613514565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190612c58565b610c73565b005b34801561037b57600080fd5b5061039660048036038101906103919190612beb565b610cd3565b6040516103a391906138bd565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190612e05565b610d1c565b6040516103e091906138bd565b60405180910390f35b3480156103f557600080fd5b506103fe610dc1565b60405161040b91906138bd565b60405180910390f35b34801561042057600080fd5b50610429610dce565b005b34801561043757600080fd5b50610452600480360381019061044d9190612c58565b610e9a565b005b34801561046057600080fd5b5061047b60048036038101906104769190612ecc565b610eba565b60405161048891906138bd565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190612ecc565b610f2b565b6040516104c59190613454565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612beb565b610fdd565b60405161050291906138bd565b60405180910390f35b34801561051757600080fd5b50610520611095565b005b34801561052e57600080fd5b5061054960048036038101906105449190612beb565b61111d565b005b34801561055757600080fd5b506105606111bb565b60405161056d9190613454565b60405180910390f35b34801561058257600080fd5b5061058b6111e5565b60405161059891906135db565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190612d2e565b611277565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190612cab565b61128d565b005b61060d60048036038101906106089190612ef9565b6112ef565b005b34801561061b57600080fd5b5061063660048036038101906106319190612ecc565b6113e2565b60405161064391906135db565b60405180910390f35b34801561065857600080fd5b5061066161141c565b60405161066e91906135db565b60405180910390f35b34801561068357600080fd5b5061068c61143c565b60405161069991906135db565b60405180910390f35b3480156106ae57600080fd5b506106c960048036038101906106c49190612c18565b61145c565b6040516106d691906134f9565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190612beb565b61155e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077b575061077a82611707565b5b9050919050565b60606000805461079190613b82565b80601f01602080910402602001604051908101604052809291908181526020018280546107bd90613b82565b801561080a5780601f106107df5761010080835404028352916020019161080a565b820191906000526020600020905b8154815290600101906020018083116107ed57829003601f168201915b5050505050905090565b600061081f826117e9565b61085e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108559061379d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a482610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c9061381d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610934611855565b73ffffffffffffffffffffffffffffffffffffffff16148061096357506109628161095d611855565b61145c565b5b6109a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109999061371d565b60405180910390fd5b6109ac8383611864565b505050565b606060006040518060600160405280600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610a34878287878761191d565b610a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6a906137fd565b60405180910390fd5b610ac66001600c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a2690919063ffffffff16565b600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610b3c9392919061346f565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610b719291906133d1565b604051602081830303815290604052604051610b8d91906133ba565b6000604051808303816000865af19150503d8060008114610bca576040519150601f19603f3d011682016040523d82523d6000602084013e610bcf565b606091505b509150915081610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b9061365d565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6000600880549050905090565b6000600b54905090565b610c84610c7e611855565b82611a3c565b610cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba9061385d565b60405180910390fd5b610cce838383611b1a565b505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610d2783610fdd565b8210610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f906135fd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000804690508091505090565b610dd6611855565b73ffffffffffffffffffffffffffffffffffffffff16610df46111bb565b73ffffffffffffffffffffffffffffffffffffffff1614610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e41906137bd565b60405180910390fd5b610e526111bb565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e97573d6000803e3d6000fd5b50565b610eb58383836040518060200160405280600081525061128d565b505050565b6000610ec4610c5c565b8210610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc9061387d565b60405180910390fd5b60088281548110610f1957610f18613d49565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb9061375d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561104e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110459061373d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61109d611855565b73ffffffffffffffffffffffffffffffffffffffff166110bb6111bb565b73ffffffffffffffffffffffffffffffffffffffff1614611111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611108906137bd565b60405180910390fd5b61111b6000611d76565b565b611125611855565b73ffffffffffffffffffffffffffffffffffffffff166111436111bb565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906137bd565b60405180910390fd5b60006111a3611e3c565b90506111af8282611e59565b6111b7612027565b5050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111f490613b82565b80601f016020809104026020016040519081016040528092919081815260200182805461122090613b82565b801561126d5780601f106112425761010080835404028352916020019161126d565b820191906000526020600020905b81548152906001019060200180831161125057829003601f168201915b5050505050905090565b611289611282611855565b8383612041565b5050565b61129e611298611855565b83611a3c565b6112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d49061385d565b60405180910390fd5b6112e9848484846121ae565b50505050565b60006112f9610c5c565b9050612711838261130a919061397c565b1061134a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113419061383d565b60405180910390fd5b82668e1bc9bf04000061135d9190613a03565b34101561139f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113969061389d565b60405180910390fd5b60005b838110156113dc5760006113b4611e3c565b90506113c08482611e59565b6113c8612027565b5080806113d490613be5565b9150506113a2565b50505050565b60606113ec61141c565b6113f58361220a565b6040516020016114069291906133f9565b6040516020818303038152906040529050919050565b60606040518060600160405280603081526020016144e460309139905090565b60606040518060600160405280603d81526020016144a7603d9139905090565b600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016114d49190613454565b60206040518083038186803b1580156114ec57600080fd5b505afa158015611500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115249190612e9f565b73ffffffffffffffffffffffffffffffffffffffff16141561154a576001915050611558565b611554848461236b565b9150505b92915050565b611566611855565b73ffffffffffffffffffffffffffffffffffffffff166115846111bb565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d1906137bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561164a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116419061363d565b60405180910390fd5b61165381611d76565b50565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561170057600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611704565b3390505b90565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806117e257506117e1826123ff565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600061185f611656565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118d783610f2b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906136fd565b60405180910390fd5b60016119a161199c87612469565b6124d1565b838686604051600081526020016040526040516119c19493929190613574565b6020604051602081039080840390855afa1580156119e3573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b60008183611a34919061397c565b905092915050565b6000611a47826117e9565b611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d906136dd565b60405180910390fd5b6000611a9183610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b0057508373ffffffffffffffffffffffffffffffffffffffff16611ae884610814565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b115750611b10818561145c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b3a82610f2b565b73ffffffffffffffffffffffffffffffffffffffff1614611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b87906137dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf79061369d565b60405180910390fd5b611c0b83838361250a565b611c16600082611864565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c669190613a5d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cbd919061397c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611e546001600f54611a2690919063ffffffff16565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec09061377d565b60405180910390fd5b611ed2816117e9565b15611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f099061367d565b60405180910390fd5b611f1e6000838361250a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f6e919061397c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600f600081548092919061203a90613be5565b9190505550565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a7906136bd565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121a191906134f9565b60405180910390a3505050565b6121b9848484611b1a565b6121c58484848461261e565b612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb9061361d565b60405180910390fd5b50505050565b60606000821415612252576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612366565b600082905060005b6000821461228457808061226d90613be5565b915050600a8261227d91906139d2565b915061225a565b60008167ffffffffffffffff8111156122a05761229f613d78565b5b6040519080825280601f01601f1916602001820160405280156122d25781602001600182028036833780820191505090505b5090505b6000851461235f576001826122eb9190613a5d565b9150600a856122fa9190613c5c565b6030612306919061397c565b60f81b81838151811061231c5761231b613d49565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561235891906139d2565b94506122d6565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006040518060800160405280604381526020016144646043913980519060200120826000015183602001518460400151805190602001206040516020016124b4949392919061352f565b604051602081830303815290604052805190602001209050919050565b60006124db610c69565b826040516020016124ed92919061341d565b604051602081830303815290604052805190602001209050919050565b6125158383836127b5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561255857612553816127ba565b612597565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612596576125958382612803565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125da576125d581612970565b612619565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612618576126178282612a41565b5b5b505050565b600061263f8473ffffffffffffffffffffffffffffffffffffffff16612ac0565b156127a8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612668611855565b8786866040518563ffffffff1660e01b815260040161268a94939291906134ad565b602060405180830381600087803b1580156126a457600080fd5b505af19250505080156126d557506040513d601f19601f820116820180604052508101906126d29190612e72565b60015b612758573d8060008114612705576040519150601f19603f3d011682016040523d82523d6000602084013e61270a565b606091505b50600081511415612750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127479061361d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127ad565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161281084610fdd565b61281a9190613a5d565b90506000600760008481526020019081526020016000205490508181146128ff576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129849190613a5d565b90506000600960008481526020019081526020016000205490506000600883815481106129b4576129b3613d49565b5b9060005260206000200154905080600883815481106129d6576129d5613d49565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a2557612a24613d1a565b5b6001900381819060005260206000200160009055905550505050565b6000612a4c83610fdd565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b6000612ae6612ae1846138fd565b6138d8565b905082815260208101848484011115612b0257612b01613dac565b5b612b0d848285613b40565b509392505050565b600081359050612b24816143c2565b92915050565b600081359050612b39816143d9565b92915050565b600081359050612b4e816143f0565b92915050565b600081359050612b6381614407565b92915050565b600081519050612b7881614407565b92915050565b600082601f830112612b9357612b92613da7565b5b8135612ba3848260208601612ad3565b91505092915050565b600081519050612bbb8161441e565b92915050565b600081359050612bd081614435565b92915050565b600081359050612be58161444c565b92915050565b600060208284031215612c0157612c00613db6565b5b6000612c0f84828501612b15565b91505092915050565b60008060408385031215612c2f57612c2e613db6565b5b6000612c3d85828601612b15565b9250506020612c4e85828601612b15565b9150509250929050565b600080600060608486031215612c7157612c70613db6565b5b6000612c7f86828701612b15565b9350506020612c9086828701612b15565b9250506040612ca186828701612bc1565b9150509250925092565b60008060008060808587031215612cc557612cc4613db6565b5b6000612cd387828801612b15565b9450506020612ce487828801612b15565b9350506040612cf587828801612bc1565b925050606085013567ffffffffffffffff811115612d1657612d15613db1565b5b612d2287828801612b7e565b91505092959194509250565b60008060408385031215612d4557612d44613db6565b5b6000612d5385828601612b15565b9250506020612d6485828601612b2a565b9150509250929050565b600080600080600060a08688031215612d8a57612d89613db6565b5b6000612d9888828901612b15565b955050602086013567ffffffffffffffff811115612db957612db8613db1565b5b612dc588828901612b7e565b9450506040612dd688828901612b3f565b9350506060612de788828901612b3f565b9250506080612df888828901612bd6565b9150509295509295909350565b60008060408385031215612e1c57612e1b613db6565b5b6000612e2a85828601612b15565b9250506020612e3b85828601612bc1565b9150509250929050565b600060208284031215612e5b57612e5a613db6565b5b6000612e6984828501612b54565b91505092915050565b600060208284031215612e8857612e87613db6565b5b6000612e9684828501612b69565b91505092915050565b600060208284031215612eb557612eb4613db6565b5b6000612ec384828501612bac565b91505092915050565b600060208284031215612ee257612ee1613db6565b5b6000612ef084828501612bc1565b91505092915050565b60008060408385031215612f1057612f0f613db6565b5b6000612f1e85828601612bc1565b9250506020612f2f85828601612b15565b9150509250929050565b612f4281613aa3565b82525050565b612f5181613a91565b82525050565b612f68612f6382613a91565b613c2e565b82525050565b612f7781613ab5565b82525050565b612f8681613ac1565b82525050565b612f9d612f9882613ac1565b613c40565b82525050565b6000612fae8261392e565b612fb88185613944565b9350612fc8818560208601613b4f565b612fd181613dbb565b840191505092915050565b6000612fe78261392e565b612ff18185613955565b9350613001818560208601613b4f565b80840191505092915050565b600061301882613939565b6130228185613960565b9350613032818560208601613b4f565b61303b81613dbb565b840191505092915050565b600061305182613939565b61305b8185613971565b935061306b818560208601613b4f565b80840191505092915050565b6000613084602b83613960565b915061308f82613dd9565b604082019050919050565b60006130a7603283613960565b91506130b282613e28565b604082019050919050565b60006130ca602683613960565b91506130d582613e77565b604082019050919050565b60006130ed601c83613960565b91506130f882613ec6565b602082019050919050565b6000613110601c83613960565b915061311b82613eef565b602082019050919050565b6000613133600283613971565b915061313e82613f18565b600282019050919050565b6000613156602483613960565b915061316182613f41565b604082019050919050565b6000613179601983613960565b915061318482613f90565b602082019050919050565b600061319c602c83613960565b91506131a782613fb9565b604082019050919050565b60006131bf602583613960565b91506131ca82614008565b604082019050919050565b60006131e2603883613960565b91506131ed82614057565b604082019050919050565b6000613205602a83613960565b9150613210826140a6565b604082019050919050565b6000613228602983613960565b9150613233826140f5565b604082019050919050565b600061324b602083613960565b915061325682614144565b602082019050919050565b600061326e602c83613960565b91506132798261416d565b604082019050919050565b6000613291602083613960565b915061329c826141bc565b602082019050919050565b60006132b4602983613960565b91506132bf826141e5565b604082019050919050565b60006132d7602183613960565b91506132e282614234565b604082019050919050565b60006132fa602183613960565b915061330582614283565b604082019050919050565b600061331d601683613960565b9150613328826142d2565b602082019050919050565b6000613340603183613960565b915061334b826142fb565b604082019050919050565b6000613363602c83613960565b915061336e8261434a565b604082019050919050565b6000613386602083613960565b915061339182614399565b602082019050919050565b6133a581613b29565b82525050565b6133b481613b33565b82525050565b60006133c68284612fdc565b915081905092915050565b60006133dd8285612fdc565b91506133e98284612f57565b6014820191508190509392505050565b60006134058285613046565b91506134118284613046565b91508190509392505050565b600061342882613126565b91506134348285612f8c565b6020820191506134448284612f8c565b6020820191508190509392505050565b60006020820190506134696000830184612f48565b92915050565b60006060820190506134846000830186612f48565b6134916020830185612f39565b81810360408301526134a38184612fa3565b9050949350505050565b60006080820190506134c26000830187612f48565b6134cf6020830186612f48565b6134dc604083018561339c565b81810360608301526134ee8184612fa3565b905095945050505050565b600060208201905061350e6000830184612f6e565b92915050565b60006020820190506135296000830184612f7d565b92915050565b60006080820190506135446000830187612f7d565b613551602083018661339c565b61355e6040830185612f48565b61356b6060830184612f7d565b95945050505050565b60006080820190506135896000830187612f7d565b61359660208301866133ab565b6135a36040830185612f7d565b6135b06060830184612f7d565b95945050505050565b600060208201905081810360008301526135d38184612fa3565b905092915050565b600060208201905081810360008301526135f5818461300d565b905092915050565b6000602082019050818103600083015261361681613077565b9050919050565b600060208201905081810360008301526136368161309a565b9050919050565b60006020820190508181036000830152613656816130bd565b9050919050565b60006020820190508181036000830152613676816130e0565b9050919050565b6000602082019050818103600083015261369681613103565b9050919050565b600060208201905081810360008301526136b681613149565b9050919050565b600060208201905081810360008301526136d68161316c565b9050919050565b600060208201905081810360008301526136f68161318f565b9050919050565b60006020820190508181036000830152613716816131b2565b9050919050565b60006020820190508181036000830152613736816131d5565b9050919050565b60006020820190508181036000830152613756816131f8565b9050919050565b600060208201905081810360008301526137768161321b565b9050919050565b600060208201905081810360008301526137968161323e565b9050919050565b600060208201905081810360008301526137b681613261565b9050919050565b600060208201905081810360008301526137d681613284565b9050919050565b600060208201905081810360008301526137f6816132a7565b9050919050565b60006020820190508181036000830152613816816132ca565b9050919050565b60006020820190508181036000830152613836816132ed565b9050919050565b6000602082019050818103600083015261385681613310565b9050919050565b6000602082019050818103600083015261387681613333565b9050919050565b6000602082019050818103600083015261389681613356565b9050919050565b600060208201905081810360008301526138b681613379565b9050919050565b60006020820190506138d2600083018461339c565b92915050565b60006138e26138f3565b90506138ee8282613bb4565b919050565b6000604051905090565b600067ffffffffffffffff82111561391857613917613d78565b5b61392182613dbb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061398782613b29565b915061399283613b29565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139c7576139c6613c8d565b5b828201905092915050565b60006139dd82613b29565b91506139e883613b29565b9250826139f8576139f7613cbc565b5b828204905092915050565b6000613a0e82613b29565b9150613a1983613b29565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a5257613a51613c8d565b5b828202905092915050565b6000613a6882613b29565b9150613a7383613b29565b925082821015613a8657613a85613c8d565b5b828203905092915050565b6000613a9c82613b09565b9050919050565b6000613aae82613b09565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613b0282613a91565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613b6d578082015181840152602081019050613b52565b83811115613b7c576000848401525b50505050565b60006002820490506001821680613b9a57607f821691505b60208210811415613bae57613bad613ceb565b5b50919050565b613bbd82613dbb565b810181811067ffffffffffffffff82111715613bdc57613bdb613d78565b5b80604052505050565b6000613bf082613b29565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c2357613c22613c8d565b5b600182019050919050565b6000613c3982613c4a565b9050919050565b6000819050919050565b6000613c5582613dcc565b9050919050565b6000613c6782613b29565b9150613c7283613b29565b925082613c8257613c81613cbc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e742c20636865636b207072696365600082015250565b6143cb81613a91565b81146143d657600080fd5b50565b6143e281613ab5565b81146143ed57600080fd5b50565b6143f981613ac1565b811461440457600080fd5b50565b61441081613acb565b811461441b57600080fd5b50565b61442781613af7565b811461443257600080fd5b50565b61443e81613b29565b811461444957600080fd5b50565b61445581613b33565b811461446057600080fd5b5056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652968747470733a2f2f6368617470756e6b732e61707073706f742e636f6d2f6170692f6368617470756e6b732d636f6e74726163742d6d6574616461746168747470733a2f2f6368617470756e6b732e61707073706f742e636f6d2f6170692f6368617470756e6b732d6e66742fa26469706673582212205b3313e5f31943a8cfb99276d5faaa7a0cc143c4001f20169bb1e77344c3e6c164736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
-----Decoded View---------------
Arg [0] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Deployed Bytecode Sourcemap
29784:1075:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25091:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18257:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19340:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18921:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5643:1000;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;528:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25587:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1345:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19904:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7069:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25323:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1454:161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30752:104;;;;;;;;;;;;;:::i;:::-;;20198:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25708:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18010:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17794:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10004:103;;;;;;;;;;;;;:::i;:::-;;28572:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9781:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18365:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19569:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20391:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30262:482;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29019:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29953:145;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30106:148;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29202:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10115:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25091:224;25193:4;25232:35;25217:50;;;:11;:50;;;;:90;;;;25271:36;25295:11;25271:23;:36::i;:::-;25217:90;25210:97;;25091:224;;;:::o;18257:100::-;18311:13;18344:5;18337:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18257:100;:::o;19340:221::-;19416:7;19444:16;19452:7;19444;:16::i;:::-;19436:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19529:15;:24;19545:7;19529:24;;;;;;;;;;;;;;;;;;;;;19522:31;;19340:221;;;:::o;18921:411::-;19002:13;19018:23;19033:7;19018:14;:23::i;:::-;19002:39;;19066:5;19060:11;;:2;:11;;;;19052:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;19160:5;19144:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;19169:37;19186:5;19193:12;:10;:12::i;:::-;19169:16;:37::i;:::-;19144:62;19122:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;19303:21;19312:2;19316:7;19303:8;:21::i;:::-;18991:341;18921:411;;:::o;5643:1000::-;5844:12;5869:29;5901:152;;;;;;;;5939:6;:19;5946:11;5939:19;;;;;;;;;;;;;;;;5901:152;;;;5979:11;5901:152;;;;;;6024:17;5901:152;;;5869:184;;6088:45;6095:11;6108:6;6116:4;6122;6128;6088:6;:45::i;:::-;6066:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;6229:26;6253:1;6229:6;:19;6236:11;6229:19;;;;;;;;;;;;;;;;:23;;:26;;;;:::i;:::-;6207:6;:19;6214:11;6207:19;;;;;;;;;;;;;;;:48;;;;6273:126;6311:11;6345:10;6371:17;6273:126;;;;;;;;:::i;:::-;;;;;;;;6413:12;6427:23;6462:4;6454:18;;6504:17;6523:11;6487:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6454:92;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6412:134;;;;6565:7;6557:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;6625:10;6618:17;;;;;5643:1000;;;;;;;:::o;528:43::-;;;;;;;;;;;;;;;;;;;:::o;25587:113::-;25648:7;25675:10;:17;;;;25668:24;;25587:113;:::o;1345:101::-;1396:7;1423:15;;1416:22;;1345:101;:::o;19904:286::-;20046:41;20065:12;:10;:12::i;:::-;20079:7;20046:18;:41::i;:::-;20038:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;20154:28;20164:4;20170:2;20174:7;20154:9;:28::i;:::-;19904:286;;;:::o;7069:107::-;7122:13;7156:6;:12;7163:4;7156:12;;;;;;;;;;;;;;;;7148:20;;7069:107;;;:::o;25323:256::-;25420:7;25456:23;25473:5;25456:16;:23::i;:::-;25448:5;:31;25440:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;25545:12;:19;25558:5;25545:19;;;;;;;;;;;;;;;:26;25565:5;25545:26;;;;;;;;;;;;25538:33;;25323:256;;;;:::o;1454:161::-;1497:7;1517:10;1568:9;1562:15;;1605:2;1598:9;;;1454:161;:::o;30752:104::-;9927:12;:10;:12::i;:::-;9916:23;;:7;:5;:7::i;:::-;:23;;;9908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30808:7:::1;:5;:7::i;:::-;30800:25;;:48;30826:21;30800:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30752:104::o:0;20198:185::-;20336:39;20353:4;20359:2;20363:7;20336:39;;;;;;;;;;;;:16;:39::i;:::-;20198:185;;;:::o;25708:233::-;25783:7;25819:30;:28;:30::i;:::-;25811:5;:38;25803:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;25916:10;25927:5;25916:17;;;;;;;;:::i;:::-;;;;;;;;;;25909:24;;25708:233;;;:::o;18010:239::-;18082:7;18102:13;18118:7;:16;18126:7;18118:16;;;;;;;;;;;;;;;;;;;;;18102:32;;18170:1;18153:19;;:5;:19;;;;18145:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18236:5;18229:12;;;18010:239;;;:::o;17794:208::-;17866:7;17911:1;17894:19;;:5;:19;;;;17886:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;17978:9;:16;17988:5;17978:16;;;;;;;;;;;;;;;;17971:23;;17794:208;;;:::o;10004:103::-;9927:12;:10;:12::i;:::-;9916:23;;:7;:5;:7::i;:::-;:23;;;9908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10069:30:::1;10096:1;10069:18;:30::i;:::-;10004:103::o:0;28572:166::-;9927:12;:10;:12::i;:::-;9916:23;;:7;:5;:7::i;:::-;:23;;;9908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28629:18:::1;28650:17;:15;:17::i;:::-;28629:38;;28678:22;28684:3;28689:10;28678:5;:22::i;:::-;28711:19;:17;:19::i;:::-;28618:120;28572:166:::0;:::o;9781:87::-;9827:7;9854:6;;;;;;;;;;;9847:13;;9781:87;:::o;18365:104::-;18421:13;18454:7;18447:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18365:104;:::o;19569:155::-;19664:52;19683:12;:10;:12::i;:::-;19697:8;19707;19664:18;:52::i;:::-;19569:155;;:::o;20391:328::-;20566:41;20585:12;:10;:12::i;:::-;20599:7;20566:18;:41::i;:::-;20558:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;20672:39;20686:4;20692:2;20696:7;20705:5;20672:13;:39::i;:::-;20391:328;;;;:::o;30262:482::-;30346:14;30363:13;:11;:13::i;:::-;30346:30;;30418:5;30406:9;30397:6;:18;;;;:::i;:::-;:26;30389:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30495:9;30482:10;:22;;;;:::i;:::-;30469:9;:35;;30461:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;30559:9;30554:183;30578:9;30574:1;:13;30554:183;;;30609:18;30630:17;:15;:17::i;:::-;30609:38;;30662:29;30668:10;30680;30662:5;:29::i;:::-;30706:19;:17;:19::i;:::-;30594:143;30589:3;;;;;:::i;:::-;;;;30554:183;;;;30335:409;30262:482;;:::o;29019:175::-;29085:13;29142:14;:12;:14::i;:::-;29158:26;29175:8;29158:16;:26::i;:::-;29125:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29111:75;;29019:175;;;:::o;29953:145::-;30007:13;30033:57;;;;;;;;;;;;;;;;;;;29953:145;:::o;30106:148::-;30150:13;30176:70;;;;;;;;;;;;;;;;;;;30106:148;:::o;29202:382::-;29327:4;29349:27;29393:20;;;;;;;;;;;29349:65;;29470:8;29429:49;;29437:13;:21;;;29459:5;29437:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29429:49;;;29425:93;;;29502:4;29495:11;;;;;29425:93;29537:39;29560:5;29567:8;29537:22;:39::i;:::-;29530:46;;;29202:382;;;;;:::o;10115:201::-;9927:12;:10;:12::i;:::-;9916:23;;:7;:5;:7::i;:::-;:23;;;9908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10224:1:::1;10204:22;;:8;:22;;;;10196:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10280:28;10299:8;10280:18;:28::i;:::-;10115:201:::0;:::o;1976:539::-;2047:22;2113:4;2091:27;;:10;:27;;;2087:397;;;2135:18;2156:8;;2135:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2179:13;2195:8;;:15;;2179:31;;2336:42;2306:5;2299;2295:17;2289:24;2263:134;2253:144;;2234:178;;2087:397;;;2461:10;2444:28;;2087:397;1976:539;:::o;17481:305::-;17583:4;17635:25;17620:40;;;:11;:40;;;;:105;;;;17692:33;17677:48;;;:11;:48;;;;17620:105;:158;;;;17742:36;17766:11;17742:23;:36::i;:::-;17620:158;17600:178;;17481:305;;;:::o;21050:127::-;21115:4;21167:1;21139:30;;:7;:16;21147:7;21139:16;;;;;;;;;;;;;;;;;;;;;:30;;;;21132:37;;21050:127;;;:::o;29592:161::-;29682:14;29721:24;:22;:24::i;:::-;29714:31;;29592:161;:::o;23252:174::-;23354:2;23327:15;:24;23343:7;23327:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;23410:7;23406:2;23372:46;;23381:23;23396:7;23381:14;:23::i;:::-;23372:46;;;;;;;;;;;;23252:174;;:::o;7184:486::-;7362:4;7405:1;7387:20;;:6;:20;;;;7379:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7503:159;7531:47;7550:27;7570:6;7550:19;:27::i;:::-;7531:18;:47::i;:::-;7597:4;7620;7643;7503:159;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7480:182;;:6;:182;;;7460:202;;7184:486;;;;;;;:::o;3728:98::-;3786:7;3817:1;3813;:5;;;;:::i;:::-;3806:12;;3728:98;;;;:::o;21185:348::-;21278:4;21303:16;21311:7;21303;:16::i;:::-;21295:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21379:13;21395:23;21410:7;21395:14;:23::i;:::-;21379:39;;21448:5;21437:16;;:7;:16;;;:51;;;;21481:7;21457:31;;:20;21469:7;21457:11;:20::i;:::-;:31;;;21437:51;:87;;;;21492:32;21509:5;21516:7;21492:16;:32::i;:::-;21437:87;21429:96;;;21185:348;;;;:::o;22718:526::-;22877:4;22850:31;;:23;22865:7;22850:14;:23::i;:::-;:31;;;22842:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22960:1;22946:16;;:2;:16;;;;22938:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23016:39;23037:4;23043:2;23047:7;23016:20;:39::i;:::-;23068:29;23085:1;23089:7;23068:8;:29::i;:::-;23129:1;23110:9;:15;23120:4;23110:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;23158:1;23141:9;:13;23151:2;23141:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;23189:2;23170:7;:16;23178:7;23170:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;23228:7;23224:2;23209:27;;23218:4;23209:27;;;;;;;;;;;;22718:526;;;:::o;10324:191::-;10398:16;10417:6;;;;;;;;;;;10398:25;;10443:8;10434:6;;:17;;;;;;;;;;;;;;;;;;10498:8;10467:40;;10488:8;10467:40;;;;;;;;;;;;10387:128;10324:191;:::o;28746:107::-;28796:7;28823:22;28843:1;28823:15;;:19;;:22;;;;:::i;:::-;28816:29;;28746:107;:::o;21988:382::-;22082:1;22068:16;;:2;:16;;;;22060:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22141:16;22149:7;22141;:16::i;:::-;22140:17;22132:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;22203:45;22232:1;22236:2;22240:7;22203:20;:45::i;:::-;22278:1;22261:9;:13;22271:2;22261:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;22309:2;22290:7;:16;22298:7;22290:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;22354:7;22350:2;22329:33;;22346:1;22329:33;;;;;;;;;;;;21988:382;;:::o;28861:74::-;28910:15;;:17;;;;;;;;;:::i;:::-;;;;;;28861:74::o;23434:315::-;23589:8;23580:17;;:5;:17;;;;23572:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;23676:8;23638:18;:25;23657:5;23638:25;;;;;;;;;;;;;;;:35;23664:8;23638:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23722:8;23700:41;;23715:5;23700:41;;;23732:8;23700:41;;;;;;:::i;:::-;;;;;;;;23434:315;;;:::o;20727:::-;20884:28;20894:4;20900:2;20904:7;20884:9;:28::i;:::-;20931:48;20954:4;20960:2;20964:7;20973:5;20931:22;:48::i;:::-;20923:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;20727:315;;;;:::o;7827:532::-;7883:13;7922:1;7913:5;:10;7909:53;;;7940:10;;;;;;;;;;;;;;;;;;;;;7909:53;7972:12;7987:5;7972:20;;8003:14;8028:78;8043:1;8035:4;:9;8028:78;;8061:8;;;;;:::i;:::-;;;;8092:2;8084:10;;;;;:::i;:::-;;;8028:78;;;8116:19;8148:6;8138:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8116:39;;8166:154;8182:1;8173:5;:10;8166:154;;8210:1;8200:11;;;;;:::i;:::-;;;8277:2;8269:5;:10;;;;:::i;:::-;8256:2;:24;;;;:::i;:::-;8243:39;;8226:6;8233;8226:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8306:2;8297:11;;;;;:::i;:::-;;;8166:154;;;8344:6;8330:21;;;;;7827:532;;;;:::o;19732:164::-;19829:4;19853:18;:25;19872:5;19853:25;;;;;;;;;;;;;;;:35;19879:8;19853:35;;;;;;;;;;;;;;;;;;;;;;;;;19846:42;;19732:164;;;;:::o;14717:157::-;14802:4;14841:25;14826:40;;;:11;:40;;;;14819:47;;14717:157;;;:::o;6651:410::-;6761:7;5218:100;;;;;;;;;;;;;;;;;5198:127;;;;;;6915:6;:12;;;6950:6;:11;;;6994:6;:24;;;6984:35;;;;;;6834:204;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6806:247;;;;;;6786:267;;6651:410;;;:::o;1623:258::-;1722:7;1824:20;:18;:20::i;:::-;1846:11;1795:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1767:106;;;;;;1747:126;;1623:258;;;:::o;25949:589::-;26093:45;26120:4;26126:2;26130:7;26093:26;:45::i;:::-;26171:1;26155:18;;:4;:18;;;26151:187;;;26190:40;26222:7;26190:31;:40::i;:::-;26151:187;;;26260:2;26252:10;;:4;:10;;;26248:90;;26279:47;26312:4;26318:7;26279:32;:47::i;:::-;26248:90;26151:187;26366:1;26352:16;;:2;:16;;;26348:183;;;26385:45;26422:7;26385:36;:45::i;:::-;26348:183;;;26458:4;26452:10;;:2;:10;;;26448:83;;26479:40;26507:2;26511:7;26479:27;:40::i;:::-;26448:83;26348:183;25949:589;;;:::o;23757:799::-;23912:4;23933:15;:2;:13;;;:15::i;:::-;23929:620;;;23985:2;23969:36;;;24006:12;:10;:12::i;:::-;24020:4;24026:7;24035:5;23969:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23965:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24228:1;24211:6;:13;:18;24207:272;;;24254:60;;;;;;;;;;:::i;:::-;;;;;;;;24207:272;24429:6;24423:13;24414:6;24410:2;24406:15;24399:38;23965:529;24102:41;;;24092:51;;;:6;:51;;;;24085:58;;;;;23929:620;24533:4;24526:11;;23757:799;;;;;;;:::o;24564:126::-;;;;:::o;26775:164::-;26879:10;:17;;;;26852:15;:24;26868:7;26852:24;;;;;;;;;;;:44;;;;26907:10;26923:7;26907:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26775:164;:::o;26947:557::-;27039:22;27089:1;27064:22;27081:4;27064:16;:22::i;:::-;:26;;;;:::i;:::-;27039:51;;27101:18;27122:17;:26;27140:7;27122:26;;;;;;;;;;;;27101:47;;27179:14;27165:10;:28;27161:238;;27210:19;27232:12;:18;27245:4;27232:18;;;;;;;;;;;;;;;:34;27251:14;27232:34;;;;;;;;;;;;27210:56;;27316:11;27283:12;:18;27296:4;27283:18;;;;;;;;;;;;;;;:30;27302:10;27283:30;;;;;;;;;;;:44;;;;27376:10;27343:17;:30;27361:11;27343:30;;;;;;;;;;;:43;;;;27195:204;27161:238;27418:17;:26;27436:7;27418:26;;;;;;;;;;;27411:33;;;27462:12;:18;27475:4;27462:18;;;;;;;;;;;;;;;:34;27481:14;27462:34;;;;;;;;;;;27455:41;;;27028:476;;26947:557;;:::o;27512:425::-;27594:22;27639:1;27619:10;:17;;;;:21;;;;:::i;:::-;27594:46;;27651:18;27672:15;:24;27688:7;27672:24;;;;;;;;;;;;27651:45;;27709:19;27731:10;27742:14;27731:26;;;;;;;;:::i;:::-;;;;;;;;;;27709:48;;27795:11;27770:10;27781;27770:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;27848:10;27817:15;:28;27833:11;27817:28;;;;;;;;;;;:41;;;;27878:15;:24;27894:7;27878:24;;;;;;;;;;;27871:31;;;27913:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27583:354;;;27512:425;:::o;26546:221::-;26631:14;26648:20;26665:2;26648:16;:20::i;:::-;26631:37;;26706:7;26679:12;:16;26692:2;26679:16;;;;;;;;;;;;;;;:24;26696:6;26679:24;;;;;;;;;;;:34;;;;26753:6;26724:17;:26;26742:7;26724:26;;;;;;;;;;;:35;;;;26620:147;26546:221;;:::o;10605:198::-;10665:4;10684:12;10751:7;10739:20;10731:28;;10794:1;10787:4;:8;10780:15;;;10605:198;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;707:139;;;;:::o;852:137::-;897:5;935:6;922:20;913:29;;951:32;977:5;951:32;:::i;:::-;852:137;;;;:::o;995:141::-;1051:5;1082:6;1076:13;1067:22;;1098:32;1124:5;1098:32;:::i;:::-;995:141;;;;:::o;1155:338::-;1210:5;1259:3;1252:4;1244:6;1240:17;1236:27;1226:122;;1267:79;;:::i;:::-;1226:122;1384:6;1371:20;1409:78;1483:3;1475:6;1468:4;1460:6;1456:17;1409:78;:::i;:::-;1400:87;;1216:277;1155:338;;;;:::o;1499:201::-;1585:5;1616:6;1610:13;1601:22;;1632:62;1688:5;1632:62;:::i;:::-;1499:201;;;;:::o;1706:139::-;1752:5;1790:6;1777:20;1768:29;;1806:33;1833:5;1806:33;:::i;:::-;1706:139;;;;:::o;1851:135::-;1895:5;1933:6;1920:20;1911:29;;1949:31;1974:5;1949:31;:::i;:::-;1851:135;;;;:::o;1992:329::-;2051:6;2100:2;2088:9;2079:7;2075:23;2071:32;2068:119;;;2106:79;;:::i;:::-;2068:119;2226:1;2251:53;2296:7;2287:6;2276:9;2272:22;2251:53;:::i;:::-;2241:63;;2197:117;1992:329;;;;:::o;2327:474::-;2395:6;2403;2452:2;2440:9;2431:7;2427:23;2423:32;2420:119;;;2458:79;;:::i;:::-;2420:119;2578:1;2603:53;2648:7;2639:6;2628:9;2624:22;2603:53;:::i;:::-;2593:63;;2549:117;2705:2;2731:53;2776:7;2767:6;2756:9;2752:22;2731:53;:::i;:::-;2721:63;;2676:118;2327:474;;;;;:::o;2807:619::-;2884:6;2892;2900;2949:2;2937:9;2928:7;2924:23;2920:32;2917:119;;;2955:79;;:::i;:::-;2917:119;3075:1;3100:53;3145:7;3136:6;3125:9;3121:22;3100:53;:::i;:::-;3090:63;;3046:117;3202:2;3228:53;3273:7;3264:6;3253:9;3249:22;3228:53;:::i;:::-;3218:63;;3173:118;3330:2;3356:53;3401:7;3392:6;3381:9;3377:22;3356:53;:::i;:::-;3346:63;;3301:118;2807:619;;;;;:::o;3432:943::-;3527:6;3535;3543;3551;3600:3;3588:9;3579:7;3575:23;3571:33;3568:120;;;3607:79;;:::i;:::-;3568:120;3727:1;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3698:117;3854:2;3880:53;3925:7;3916:6;3905:9;3901:22;3880:53;:::i;:::-;3870:63;;3825:118;3982:2;4008:53;4053:7;4044:6;4033:9;4029:22;4008:53;:::i;:::-;3998:63;;3953:118;4138:2;4127:9;4123:18;4110:32;4169:18;4161:6;4158:30;4155:117;;;4191:79;;:::i;:::-;4155:117;4296:62;4350:7;4341:6;4330:9;4326:22;4296:62;:::i;:::-;4286:72;;4081:287;3432:943;;;;;;;:::o;4381:468::-;4446:6;4454;4503:2;4491:9;4482:7;4478:23;4474:32;4471:119;;;4509:79;;:::i;:::-;4471:119;4629:1;4654:53;4699:7;4690:6;4679:9;4675:22;4654:53;:::i;:::-;4644:63;;4600:117;4756:2;4782:50;4824:7;4815:6;4804:9;4800:22;4782:50;:::i;:::-;4772:60;;4727:115;4381:468;;;;;:::o;4855:1085::-;4957:6;4965;4973;4981;4989;5038:3;5026:9;5017:7;5013:23;5009:33;5006:120;;;5045:79;;:::i;:::-;5006:120;5165:1;5190:53;5235:7;5226:6;5215:9;5211:22;5190:53;:::i;:::-;5180:63;;5136:117;5320:2;5309:9;5305:18;5292:32;5351:18;5343:6;5340:30;5337:117;;;5373:79;;:::i;:::-;5337:117;5478:62;5532:7;5523:6;5512:9;5508:22;5478:62;:::i;:::-;5468:72;;5263:287;5589:2;5615:53;5660:7;5651:6;5640:9;5636:22;5615:53;:::i;:::-;5605:63;;5560:118;5717:2;5743:53;5788:7;5779:6;5768:9;5764:22;5743:53;:::i;:::-;5733:63;;5688:118;5845:3;5872:51;5915:7;5906:6;5895:9;5891:22;5872:51;:::i;:::-;5862:61;;5816:117;4855:1085;;;;;;;;:::o;5946:474::-;6014:6;6022;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:53;6267:7;6258:6;6247:9;6243:22;6222:53;:::i;:::-;6212:63;;6168:117;6324:2;6350:53;6395:7;6386:6;6375:9;6371:22;6350:53;:::i;:::-;6340:63;;6295:118;5946:474;;;;;:::o;6426:327::-;6484:6;6533:2;6521:9;6512:7;6508:23;6504:32;6501:119;;;6539:79;;:::i;:::-;6501:119;6659:1;6684:52;6728:7;6719:6;6708:9;6704:22;6684:52;:::i;:::-;6674:62;;6630:116;6426:327;;;;:::o;6759:349::-;6828:6;6877:2;6865:9;6856:7;6852:23;6848:32;6845:119;;;6883:79;;:::i;:::-;6845:119;7003:1;7028:63;7083:7;7074:6;7063:9;7059:22;7028:63;:::i;:::-;7018:73;;6974:127;6759:349;;;;:::o;7114:409::-;7213:6;7262:2;7250:9;7241:7;7237:23;7233:32;7230:119;;;7268:79;;:::i;:::-;7230:119;7388:1;7413:93;7498:7;7489:6;7478:9;7474:22;7413:93;:::i;:::-;7403:103;;7359:157;7114:409;;;;:::o;7529:329::-;7588:6;7637:2;7625:9;7616:7;7612:23;7608:32;7605:119;;;7643:79;;:::i;:::-;7605:119;7763:1;7788:53;7833:7;7824:6;7813:9;7809:22;7788:53;:::i;:::-;7778:63;;7734:117;7529:329;;;;:::o;7864:474::-;7932:6;7940;7989:2;7977:9;7968:7;7964:23;7960:32;7957:119;;;7995:79;;:::i;:::-;7957:119;8115:1;8140:53;8185:7;8176:6;8165:9;8161:22;8140:53;:::i;:::-;8130:63;;8086:117;8242:2;8268:53;8313:7;8304:6;8293:9;8289:22;8268:53;:::i;:::-;8258:63;;8213:118;7864:474;;;;;:::o;8344:142::-;8447:32;8473:5;8447:32;:::i;:::-;8442:3;8435:45;8344:142;;:::o;8492:118::-;8579:24;8597:5;8579:24;:::i;:::-;8574:3;8567:37;8492:118;;:::o;8616:157::-;8721:45;8741:24;8759:5;8741:24;:::i;:::-;8721:45;:::i;:::-;8716:3;8709:58;8616:157;;:::o;8779:109::-;8860:21;8875:5;8860:21;:::i;:::-;8855:3;8848:34;8779:109;;:::o;8894:118::-;8981:24;8999:5;8981:24;:::i;:::-;8976:3;8969:37;8894:118;;:::o;9018:157::-;9123:45;9143:24;9161:5;9143:24;:::i;:::-;9123:45;:::i;:::-;9118:3;9111:58;9018:157;;:::o;9181:360::-;9267:3;9295:38;9327:5;9295:38;:::i;:::-;9349:70;9412:6;9407:3;9349:70;:::i;:::-;9342:77;;9428:52;9473:6;9468:3;9461:4;9454:5;9450:16;9428:52;:::i;:::-;9505:29;9527:6;9505:29;:::i;:::-;9500:3;9496:39;9489:46;;9271:270;9181:360;;;;:::o;9547:373::-;9651:3;9679:38;9711:5;9679:38;:::i;:::-;9733:88;9814:6;9809:3;9733:88;:::i;:::-;9726:95;;9830:52;9875:6;9870:3;9863:4;9856:5;9852:16;9830:52;:::i;:::-;9907:6;9902:3;9898:16;9891:23;;9655:265;9547:373;;;;:::o;9926:364::-;10014:3;10042:39;10075:5;10042:39;:::i;:::-;10097:71;10161:6;10156:3;10097:71;:::i;:::-;10090:78;;10177:52;10222:6;10217:3;10210:4;10203:5;10199:16;10177:52;:::i;:::-;10254:29;10276:6;10254:29;:::i;:::-;10249:3;10245:39;10238:46;;10018:272;9926:364;;;;:::o;10296:377::-;10402:3;10430:39;10463:5;10430:39;:::i;:::-;10485:89;10567:6;10562:3;10485:89;:::i;:::-;10478:96;;10583:52;10628:6;10623:3;10616:4;10609:5;10605:16;10583:52;:::i;:::-;10660:6;10655:3;10651:16;10644:23;;10406:267;10296:377;;;;:::o;10679:366::-;10821:3;10842:67;10906:2;10901:3;10842:67;:::i;:::-;10835:74;;10918:93;11007:3;10918:93;:::i;:::-;11036:2;11031:3;11027:12;11020:19;;10679:366;;;:::o;11051:::-;11193:3;11214:67;11278:2;11273:3;11214:67;:::i;:::-;11207:74;;11290:93;11379:3;11290:93;:::i;:::-;11408:2;11403:3;11399:12;11392:19;;11051:366;;;:::o;11423:::-;11565:3;11586:67;11650:2;11645:3;11586:67;:::i;:::-;11579:74;;11662:93;11751:3;11662:93;:::i;:::-;11780:2;11775:3;11771:12;11764:19;;11423:366;;;:::o;11795:::-;11937:3;11958:67;12022:2;12017:3;11958:67;:::i;:::-;11951:74;;12034:93;12123:3;12034:93;:::i;:::-;12152:2;12147:3;12143:12;12136:19;;11795:366;;;:::o;12167:::-;12309:3;12330:67;12394:2;12389:3;12330:67;:::i;:::-;12323:74;;12406:93;12495:3;12406:93;:::i;:::-;12524:2;12519:3;12515:12;12508:19;;12167:366;;;:::o;12539:400::-;12699:3;12720:84;12802:1;12797:3;12720:84;:::i;:::-;12713:91;;12813:93;12902:3;12813:93;:::i;:::-;12931:1;12926:3;12922:11;12915:18;;12539:400;;;:::o;12945:366::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:::-;14575:3;14596:67;14660:2;14655:3;14596:67;:::i;:::-;14589:74;;14672:93;14761:3;14672:93;:::i;:::-;14790:2;14785:3;14781:12;14774:19;;14433:366;;;:::o;14805:::-;14947:3;14968:67;15032:2;15027:3;14968:67;:::i;:::-;14961:74;;15044:93;15133:3;15044:93;:::i;:::-;15162:2;15157:3;15153:12;15146:19;;14805:366;;;:::o;15177:::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:::-;15691:3;15712:67;15776:2;15771:3;15712:67;:::i;:::-;15705:74;;15788:93;15877:3;15788:93;:::i;:::-;15906:2;15901:3;15897:12;15890:19;;15549:366;;;:::o;15921:::-;16063:3;16084:67;16148:2;16143:3;16084:67;:::i;:::-;16077:74;;16160:93;16249:3;16160:93;:::i;:::-;16278:2;16273:3;16269:12;16262:19;;15921:366;;;:::o;16293:::-;16435:3;16456:67;16520:2;16515:3;16456:67;:::i;:::-;16449:74;;16532:93;16621:3;16532:93;:::i;:::-;16650:2;16645:3;16641:12;16634:19;;16293:366;;;:::o;16665:::-;16807:3;16828:67;16892:2;16887:3;16828:67;:::i;:::-;16821:74;;16904:93;16993:3;16904:93;:::i;:::-;17022:2;17017:3;17013:12;17006:19;;16665:366;;;:::o;17037:::-;17179:3;17200:67;17264:2;17259:3;17200:67;:::i;:::-;17193:74;;17276:93;17365:3;17276:93;:::i;:::-;17394:2;17389:3;17385:12;17378:19;;17037:366;;;:::o;17409:::-;17551:3;17572:67;17636:2;17631:3;17572:67;:::i;:::-;17565:74;;17648:93;17737:3;17648:93;:::i;:::-;17766:2;17761:3;17757:12;17750:19;;17409:366;;;:::o;17781:::-;17923:3;17944:67;18008:2;18003:3;17944:67;:::i;:::-;17937:74;;18020:93;18109:3;18020:93;:::i;:::-;18138:2;18133:3;18129:12;18122:19;;17781:366;;;:::o;18153:::-;18295:3;18316:67;18380:2;18375:3;18316:67;:::i;:::-;18309:74;;18392:93;18481:3;18392:93;:::i;:::-;18510:2;18505:3;18501:12;18494:19;;18153:366;;;:::o;18525:::-;18667:3;18688:67;18752:2;18747:3;18688:67;:::i;:::-;18681:74;;18764:93;18853:3;18764:93;:::i;:::-;18882:2;18877:3;18873:12;18866:19;;18525:366;;;:::o;18897:::-;19039:3;19060:67;19124:2;19119:3;19060:67;:::i;:::-;19053:74;;19136:93;19225:3;19136:93;:::i;:::-;19254:2;19249:3;19245:12;19238:19;;18897:366;;;:::o;19269:118::-;19356:24;19374:5;19356:24;:::i;:::-;19351:3;19344:37;19269:118;;:::o;19393:112::-;19476:22;19492:5;19476:22;:::i;:::-;19471:3;19464:35;19393:112;;:::o;19511:271::-;19641:3;19663:93;19752:3;19743:6;19663:93;:::i;:::-;19656:100;;19773:3;19766:10;;19511:271;;;;:::o;19788:412::-;19946:3;19968:93;20057:3;20048:6;19968:93;:::i;:::-;19961:100;;20071:75;20142:3;20133:6;20071:75;:::i;:::-;20171:2;20166:3;20162:12;20155:19;;20191:3;20184:10;;19788:412;;;;;:::o;20206:435::-;20386:3;20408:95;20499:3;20490:6;20408:95;:::i;:::-;20401:102;;20520:95;20611:3;20602:6;20520:95;:::i;:::-;20513:102;;20632:3;20625:10;;20206:435;;;;;:::o;20647:663::-;20888:3;20910:148;21054:3;20910:148;:::i;:::-;20903:155;;21068:75;21139:3;21130:6;21068:75;:::i;:::-;21168:2;21163:3;21159:12;21152:19;;21181:75;21252:3;21243:6;21181:75;:::i;:::-;21281:2;21276:3;21272:12;21265:19;;21301:3;21294:10;;20647:663;;;;;:::o;21316:222::-;21409:4;21447:2;21436:9;21432:18;21424:26;;21460:71;21528:1;21517:9;21513:17;21504:6;21460:71;:::i;:::-;21316:222;;;;:::o;21544:561::-;21727:4;21765:2;21754:9;21750:18;21742:26;;21778:71;21846:1;21835:9;21831:17;21822:6;21778:71;:::i;:::-;21859:88;21943:2;21932:9;21928:18;21919:6;21859:88;:::i;:::-;21994:9;21988:4;21984:20;21979:2;21968:9;21964:18;21957:48;22022:76;22093:4;22084:6;22022:76;:::i;:::-;22014:84;;21544:561;;;;;;:::o;22111:640::-;22306:4;22344:3;22333:9;22329:19;22321:27;;22358:71;22426:1;22415:9;22411:17;22402:6;22358:71;:::i;:::-;22439:72;22507:2;22496:9;22492:18;22483:6;22439:72;:::i;:::-;22521;22589:2;22578:9;22574:18;22565:6;22521:72;:::i;:::-;22640:9;22634:4;22630:20;22625:2;22614:9;22610:18;22603:48;22668:76;22739:4;22730:6;22668:76;:::i;:::-;22660:84;;22111:640;;;;;;;:::o;22757:210::-;22844:4;22882:2;22871:9;22867:18;22859:26;;22895:65;22957:1;22946:9;22942:17;22933:6;22895:65;:::i;:::-;22757:210;;;;:::o;22973:222::-;23066:4;23104:2;23093:9;23089:18;23081:26;;23117:71;23185:1;23174:9;23170:17;23161:6;23117:71;:::i;:::-;22973:222;;;;:::o;23201:553::-;23378:4;23416:3;23405:9;23401:19;23393:27;;23430:71;23498:1;23487:9;23483:17;23474:6;23430:71;:::i;:::-;23511:72;23579:2;23568:9;23564:18;23555:6;23511:72;:::i;:::-;23593;23661:2;23650:9;23646:18;23637:6;23593:72;:::i;:::-;23675;23743:2;23732:9;23728:18;23719:6;23675:72;:::i;:::-;23201:553;;;;;;;:::o;23760:545::-;23933:4;23971:3;23960:9;23956:19;23948:27;;23985:71;24053:1;24042:9;24038:17;24029:6;23985:71;:::i;:::-;24066:68;24130:2;24119:9;24115:18;24106:6;24066:68;:::i;:::-;24144:72;24212:2;24201:9;24197:18;24188:6;24144:72;:::i;:::-;24226;24294:2;24283:9;24279:18;24270:6;24226:72;:::i;:::-;23760:545;;;;;;;:::o;24311:309::-;24422:4;24460:2;24449:9;24445:18;24437:26;;24509:9;24503:4;24499:20;24495:1;24484:9;24480:17;24473:47;24537:76;24608:4;24599:6;24537:76;:::i;:::-;24529:84;;24311:309;;;;:::o;24626:313::-;24739:4;24777:2;24766:9;24762:18;24754:26;;24826:9;24820:4;24816:20;24812:1;24801:9;24797:17;24790:47;24854:78;24927:4;24918:6;24854:78;:::i;:::-;24846:86;;24626:313;;;;:::o;24945:419::-;25111:4;25149:2;25138:9;25134:18;25126:26;;25198:9;25192:4;25188:20;25184:1;25173:9;25169:17;25162:47;25226:131;25352:4;25226:131;:::i;:::-;25218:139;;24945:419;;;:::o;25370:::-;25536:4;25574:2;25563:9;25559:18;25551:26;;25623:9;25617:4;25613:20;25609:1;25598:9;25594:17;25587:47;25651:131;25777:4;25651:131;:::i;:::-;25643:139;;25370:419;;;:::o;25795:::-;25961:4;25999:2;25988:9;25984:18;25976:26;;26048:9;26042:4;26038:20;26034:1;26023:9;26019:17;26012:47;26076:131;26202:4;26076:131;:::i;:::-;26068:139;;25795:419;;;:::o;26220:::-;26386:4;26424:2;26413:9;26409:18;26401:26;;26473:9;26467:4;26463:20;26459:1;26448:9;26444:17;26437:47;26501:131;26627:4;26501:131;:::i;:::-;26493:139;;26220:419;;;:::o;26645:::-;26811:4;26849:2;26838:9;26834:18;26826:26;;26898:9;26892:4;26888:20;26884:1;26873:9;26869:17;26862:47;26926:131;27052:4;26926:131;:::i;:::-;26918:139;;26645:419;;;:::o;27070:::-;27236:4;27274:2;27263:9;27259:18;27251:26;;27323:9;27317:4;27313:20;27309:1;27298:9;27294:17;27287:47;27351:131;27477:4;27351:131;:::i;:::-;27343:139;;27070:419;;;:::o;27495:::-;27661:4;27699:2;27688:9;27684:18;27676:26;;27748:9;27742:4;27738:20;27734:1;27723:9;27719:17;27712:47;27776:131;27902:4;27776:131;:::i;:::-;27768:139;;27495:419;;;:::o;27920:::-;28086:4;28124:2;28113:9;28109:18;28101:26;;28173:9;28167:4;28163:20;28159:1;28148:9;28144:17;28137:47;28201:131;28327:4;28201:131;:::i;:::-;28193:139;;27920:419;;;:::o;28345:::-;28511:4;28549:2;28538:9;28534:18;28526:26;;28598:9;28592:4;28588:20;28584:1;28573:9;28569:17;28562:47;28626:131;28752:4;28626:131;:::i;:::-;28618:139;;28345:419;;;:::o;28770:::-;28936:4;28974:2;28963:9;28959:18;28951:26;;29023:9;29017:4;29013:20;29009:1;28998:9;28994:17;28987:47;29051:131;29177:4;29051:131;:::i;:::-;29043:139;;28770:419;;;:::o;29195:::-;29361:4;29399:2;29388:9;29384:18;29376:26;;29448:9;29442:4;29438:20;29434:1;29423:9;29419:17;29412:47;29476:131;29602:4;29476:131;:::i;:::-;29468:139;;29195:419;;;:::o;29620:::-;29786:4;29824:2;29813:9;29809:18;29801:26;;29873:9;29867:4;29863:20;29859:1;29848:9;29844:17;29837:47;29901:131;30027:4;29901:131;:::i;:::-;29893:139;;29620:419;;;:::o;30045:::-;30211:4;30249:2;30238:9;30234:18;30226:26;;30298:9;30292:4;30288:20;30284:1;30273:9;30269:17;30262:47;30326:131;30452:4;30326:131;:::i;:::-;30318:139;;30045:419;;;:::o;30470:::-;30636:4;30674:2;30663:9;30659:18;30651:26;;30723:9;30717:4;30713:20;30709:1;30698:9;30694:17;30687:47;30751:131;30877:4;30751:131;:::i;:::-;30743:139;;30470:419;;;:::o;30895:::-;31061:4;31099:2;31088:9;31084:18;31076:26;;31148:9;31142:4;31138:20;31134:1;31123:9;31119:17;31112:47;31176:131;31302:4;31176:131;:::i;:::-;31168:139;;30895:419;;;:::o;31320:::-;31486:4;31524:2;31513:9;31509:18;31501:26;;31573:9;31567:4;31563:20;31559:1;31548:9;31544:17;31537:47;31601:131;31727:4;31601:131;:::i;:::-;31593:139;;31320:419;;;:::o;31745:::-;31911:4;31949:2;31938:9;31934:18;31926:26;;31998:9;31992:4;31988:20;31984:1;31973:9;31969:17;31962:47;32026:131;32152:4;32026:131;:::i;:::-;32018:139;;31745:419;;;:::o;32170:::-;32336:4;32374:2;32363:9;32359:18;32351:26;;32423:9;32417:4;32413:20;32409:1;32398:9;32394:17;32387:47;32451:131;32577:4;32451:131;:::i;:::-;32443:139;;32170:419;;;:::o;32595:::-;32761:4;32799:2;32788:9;32784:18;32776:26;;32848:9;32842:4;32838:20;32834:1;32823:9;32819:17;32812:47;32876:131;33002:4;32876:131;:::i;:::-;32868:139;;32595:419;;;:::o;33020:::-;33186:4;33224:2;33213:9;33209:18;33201:26;;33273:9;33267:4;33263:20;33259:1;33248:9;33244:17;33237:47;33301:131;33427:4;33301:131;:::i;:::-;33293:139;;33020:419;;;:::o;33445:::-;33611:4;33649:2;33638:9;33634:18;33626:26;;33698:9;33692:4;33688:20;33684:1;33673:9;33669:17;33662:47;33726:131;33852:4;33726:131;:::i;:::-;33718:139;;33445:419;;;:::o;33870:::-;34036:4;34074:2;34063:9;34059:18;34051:26;;34123:9;34117:4;34113:20;34109:1;34098:9;34094:17;34087:47;34151:131;34277:4;34151:131;:::i;:::-;34143:139;;33870:419;;;:::o;34295:222::-;34388:4;34426:2;34415:9;34411:18;34403:26;;34439:71;34507:1;34496:9;34492:17;34483:6;34439:71;:::i;:::-;34295:222;;;;:::o;34523:129::-;34557:6;34584:20;;:::i;:::-;34574:30;;34613:33;34641:4;34633:6;34613:33;:::i;:::-;34523:129;;;:::o;34658:75::-;34691:6;34724:2;34718:9;34708:19;;34658:75;:::o;34739:307::-;34800:4;34890:18;34882:6;34879:30;34876:56;;;34912:18;;:::i;:::-;34876:56;34950:29;34972:6;34950:29;:::i;:::-;34942:37;;35034:4;35028;35024:15;35016:23;;34739:307;;;:::o;35052:98::-;35103:6;35137:5;35131:12;35121:22;;35052:98;;;:::o;35156:99::-;35208:6;35242:5;35236:12;35226:22;;35156:99;;;:::o;35261:168::-;35344:11;35378:6;35373:3;35366:19;35418:4;35413:3;35409:14;35394:29;;35261:168;;;;:::o;35435:147::-;35536:11;35573:3;35558:18;;35435:147;;;;:::o;35588:169::-;35672:11;35706:6;35701:3;35694:19;35746:4;35741:3;35737:14;35722:29;;35588:169;;;;:::o;35763:148::-;35865:11;35902:3;35887:18;;35763:148;;;;:::o;35917:305::-;35957:3;35976:20;35994:1;35976:20;:::i;:::-;35971:25;;36010:20;36028:1;36010:20;:::i;:::-;36005:25;;36164:1;36096:66;36092:74;36089:1;36086:81;36083:107;;;36170:18;;:::i;:::-;36083:107;36214:1;36211;36207:9;36200:16;;35917:305;;;;:::o;36228:185::-;36268:1;36285:20;36303:1;36285:20;:::i;:::-;36280:25;;36319:20;36337:1;36319:20;:::i;:::-;36314:25;;36358:1;36348:35;;36363:18;;:::i;:::-;36348:35;36405:1;36402;36398:9;36393:14;;36228:185;;;;:::o;36419:348::-;36459:7;36482:20;36500:1;36482:20;:::i;:::-;36477:25;;36516:20;36534:1;36516:20;:::i;:::-;36511:25;;36704:1;36636:66;36632:74;36629:1;36626:81;36621:1;36614:9;36607:17;36603:105;36600:131;;;36711:18;;:::i;:::-;36600:131;36759:1;36756;36752:9;36741:20;;36419:348;;;;:::o;36773:191::-;36813:4;36833:20;36851:1;36833:20;:::i;:::-;36828:25;;36867:20;36885:1;36867:20;:::i;:::-;36862:25;;36906:1;36903;36900:8;36897:34;;;36911:18;;:::i;:::-;36897:34;36956:1;36953;36949:9;36941:17;;36773:191;;;;:::o;36970:96::-;37007:7;37036:24;37054:5;37036:24;:::i;:::-;37025:35;;36970:96;;;:::o;37072:104::-;37117:7;37146:24;37164:5;37146:24;:::i;:::-;37135:35;;37072:104;;;:::o;37182:90::-;37216:7;37259:5;37252:13;37245:21;37234:32;;37182:90;;;:::o;37278:77::-;37315:7;37344:5;37333:16;;37278:77;;;:::o;37361:149::-;37397:7;37437:66;37430:5;37426:78;37415:89;;37361:149;;;:::o;37516:125::-;37582:7;37611:24;37629:5;37611:24;:::i;:::-;37600:35;;37516:125;;;:::o;37647:126::-;37684:7;37724:42;37717:5;37713:54;37702:65;;37647:126;;;:::o;37779:77::-;37816:7;37845:5;37834:16;;37779:77;;;:::o;37862:86::-;37897:7;37937:4;37930:5;37926:16;37915:27;;37862:86;;;:::o;37954:154::-;38038:6;38033:3;38028;38015:30;38100:1;38091:6;38086:3;38082:16;38075:27;37954:154;;;:::o;38114:307::-;38182:1;38192:113;38206:6;38203:1;38200:13;38192:113;;;38291:1;38286:3;38282:11;38276:18;38272:1;38267:3;38263:11;38256:39;38228:2;38225:1;38221:10;38216:15;;38192:113;;;38323:6;38320:1;38317:13;38314:101;;;38403:1;38394:6;38389:3;38385:16;38378:27;38314:101;38163:258;38114:307;;;:::o;38427:320::-;38471:6;38508:1;38502:4;38498:12;38488:22;;38555:1;38549:4;38545:12;38576:18;38566:81;;38632:4;38624:6;38620:17;38610:27;;38566:81;38694:2;38686:6;38683:14;38663:18;38660:38;38657:84;;;38713:18;;:::i;:::-;38657:84;38478:269;38427:320;;;:::o;38753:281::-;38836:27;38858:4;38836:27;:::i;:::-;38828:6;38824:40;38966:6;38954:10;38951:22;38930:18;38918:10;38915:34;38912:62;38909:88;;;38977:18;;:::i;:::-;38909:88;39017:10;39013:2;39006:22;38796:238;38753:281;;:::o;39040:233::-;39079:3;39102:24;39120:5;39102:24;:::i;:::-;39093:33;;39148:66;39141:5;39138:77;39135:103;;;39218:18;;:::i;:::-;39135:103;39265:1;39258:5;39254:13;39247:20;;39040:233;;;:::o;39279:100::-;39318:7;39347:26;39367:5;39347:26;:::i;:::-;39336:37;;39279:100;;;:::o;39385:79::-;39424:7;39453:5;39442:16;;39385:79;;;:::o;39470:94::-;39509:7;39538:20;39552:5;39538:20;:::i;:::-;39527:31;;39470:94;;;:::o;39570:176::-;39602:1;39619:20;39637:1;39619:20;:::i;:::-;39614:25;;39653:20;39671:1;39653:20;:::i;:::-;39648:25;;39692:1;39682:35;;39697:18;;:::i;:::-;39682:35;39738:1;39735;39731:9;39726:14;;39570:176;;;;:::o;39752:180::-;39800:77;39797:1;39790:88;39897:4;39894:1;39887:15;39921:4;39918:1;39911:15;39938:180;39986:77;39983:1;39976:88;40083:4;40080:1;40073:15;40107:4;40104:1;40097:15;40124:180;40172:77;40169:1;40162:88;40269:4;40266:1;40259:15;40293:4;40290:1;40283:15;40310:180;40358:77;40355:1;40348:88;40455:4;40452:1;40445:15;40479:4;40476:1;40469:15;40496:180;40544:77;40541:1;40534:88;40641:4;40638:1;40631:15;40665:4;40662:1;40655:15;40682:180;40730:77;40727:1;40720:88;40827:4;40824:1;40817:15;40851:4;40848:1;40841:15;40868:117;40977:1;40974;40967:12;40991:117;41100:1;41097;41090:12;41114:117;41223:1;41220;41213:12;41237:117;41346:1;41343;41336:12;41360:102;41401:6;41452:2;41448:7;41443:2;41436:5;41432:14;41428:28;41418:38;;41360:102;;;:::o;41468:94::-;41501:8;41549:5;41545:2;41541:14;41520:35;;41468:94;;;:::o;41568:230::-;41708:34;41704:1;41696:6;41692:14;41685:58;41777:13;41772:2;41764:6;41760:15;41753:38;41568:230;:::o;41804:237::-;41944:34;41940:1;41932:6;41928:14;41921:58;42013:20;42008:2;42000:6;41996:15;41989:45;41804:237;:::o;42047:225::-;42187:34;42183:1;42175:6;42171:14;42164:58;42256:8;42251:2;42243:6;42239:15;42232:33;42047:225;:::o;42278:178::-;42418:30;42414:1;42406:6;42402:14;42395:54;42278:178;:::o;42462:::-;42602:30;42598:1;42590:6;42586:14;42579:54;42462:178;:::o;42646:214::-;42786:66;42782:1;42774:6;42770:14;42763:90;42646:214;:::o;42866:223::-;43006:34;43002:1;42994:6;42990:14;42983:58;43075:6;43070:2;43062:6;43058:15;43051:31;42866:223;:::o;43095:175::-;43235:27;43231:1;43223:6;43219:14;43212:51;43095:175;:::o;43276:231::-;43416:34;43412:1;43404:6;43400:14;43393:58;43485:14;43480:2;43472:6;43468:15;43461:39;43276:231;:::o;43513:224::-;43653:34;43649:1;43641:6;43637:14;43630:58;43722:7;43717:2;43709:6;43705:15;43698:32;43513:224;:::o;43743:243::-;43883:34;43879:1;43871:6;43867:14;43860:58;43952:26;43947:2;43939:6;43935:15;43928:51;43743:243;:::o;43992:229::-;44132:34;44128:1;44120:6;44116:14;44109:58;44201:12;44196:2;44188:6;44184:15;44177:37;43992:229;:::o;44227:228::-;44367:34;44363:1;44355:6;44351:14;44344:58;44436:11;44431:2;44423:6;44419:15;44412:36;44227:228;:::o;44461:182::-;44601:34;44597:1;44589:6;44585:14;44578:58;44461:182;:::o;44649:231::-;44789:34;44785:1;44777:6;44773:14;44766:58;44858:14;44853:2;44845:6;44841:15;44834:39;44649:231;:::o;44886:182::-;45026:34;45022:1;45014:6;45010:14;45003:58;44886:182;:::o;45074:228::-;45214:34;45210:1;45202:6;45198:14;45191:58;45283:11;45278:2;45270:6;45266:15;45259:36;45074:228;:::o;45308:220::-;45448:34;45444:1;45436:6;45432:14;45425:58;45517:3;45512:2;45504:6;45500:15;45493:28;45308:220;:::o;45534:::-;45674:34;45670:1;45662:6;45658:14;45651:58;45743:3;45738:2;45730:6;45726:15;45719:28;45534:220;:::o;45760:172::-;45900:24;45896:1;45888:6;45884:14;45877:48;45760:172;:::o;45938:236::-;46078:34;46074:1;46066:6;46062:14;46055:58;46147:19;46142:2;46134:6;46130:15;46123:44;45938:236;:::o;46180:231::-;46320:34;46316:1;46308:6;46304:14;46297:58;46389:14;46384:2;46376:6;46372:15;46365:39;46180:231;:::o;46417:182::-;46557:34;46553:1;46545:6;46541:14;46534:58;46417:182;:::o;46605:122::-;46678:24;46696:5;46678:24;:::i;:::-;46671:5;46668:35;46658:63;;46717:1;46714;46707:12;46658:63;46605:122;:::o;46733:116::-;46803:21;46818:5;46803:21;:::i;:::-;46796:5;46793:32;46783:60;;46839:1;46836;46829:12;46783:60;46733:116;:::o;46855:122::-;46928:24;46946:5;46928:24;:::i;:::-;46921:5;46918:35;46908:63;;46967:1;46964;46957:12;46908:63;46855:122;:::o;46983:120::-;47055:23;47072:5;47055:23;:::i;:::-;47048:5;47045:34;47035:62;;47093:1;47090;47083:12;47035:62;46983:120;:::o;47109:180::-;47211:53;47258:5;47211:53;:::i;:::-;47204:5;47201:64;47191:92;;47279:1;47276;47269:12;47191:92;47109:180;:::o;47295:122::-;47368:24;47386:5;47368:24;:::i;:::-;47361:5;47358:35;47348:63;;47407:1;47404;47397:12;47348:63;47295:122;:::o;47423:118::-;47494:22;47510:5;47494:22;:::i;:::-;47487:5;47484:33;47474:61;;47531:1;47528;47521:12;47474:61;47423:118;:::o
Swarm Source
ipfs://5b3313e5f31943a8cfb99276d5faaa7a0cc143c4001f20169bb1e77344c3e6c1
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.