ERC-721
Overview
Max Total Supply
0 BURNER
Holders
150
Market
Volume (24H)
0.9 ETH
Min Price (24H)
$2,267.83 @ 0.900000 ETH
Max Price (24H)
$2,267.83 @ 0.900000 ETH
Other Info
Token Contract
Balance
1 BURNERLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BURNER
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-08 */ pragma solidity ^0.8.0; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns(bool); } pragma solidity ^0.8.0; 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; } pragma solidity ^0.8.0; interface IERC721Receiver { function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns(bytes4); } pragma solidity ^0.8.0; 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); } pragma solidity ^0.8.0; 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, "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, "Insufficient balance!"); 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); } } } } pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns(address) { return msg.sender; } function _msgData() internal view virtual returns(bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; 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); } } pragma solidity ^0.8.0; abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns(bool) { return interfaceId == type(IERC165).interfaceId; } } pragma solidity ^0.8.0; contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; string private _name; string private _symbol; string private _description; 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_, string memory description_) { //_name = name_; //_symbol = symbol_; //_description = description_; } 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), "Not minted yet!"); return owner; } function name() public view virtual override returns(string memory) { // Overriden return ""; } function symbol() public view virtual override returns(string memory) { // Overriden return ""; } function tokenURI(uint256 tokenId) public view virtual override returns(string memory) { //Overriden return ""; } function _baseURI() internal view virtual returns(string memory) { // Overriden return ""; } function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "Not authorized!"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "Not authorized!" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns(address) { require(_exists(tokenId), "Nonexistent token!"); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "Not authorized!"); _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), "Not authorized!"); _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), "Attempted 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), "Token does not exist!"); 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 { _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { require(tokenId != tokenId, "Disabled!"); } function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "Not authorized!"); require(to != address(0), "Cannot transfer to zero addy!"); require(to != address(0), "Cannot transfer to zero addy!"); _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 _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; } } } pragma solidity ^0.8.0; abstract contract ERC721Burnable is Context, ERC721 { function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "Not authorized!"); _burn(tokenId); } } pragma solidity ^0.8.0; pragma solidity ^0.8.0; library SafeMath { function add(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a + b; require(c >= a, "Addition overflow!"); return c; } function sub(uint256 a, uint256 b) internal pure returns(uint256) { require(b <= a, "Subtraction overflow!"); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns(uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if(a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "Multiplication overflow!"); return c; } function div(uint256 a, uint256 b) internal pure returns(uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "Division by zero!"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns(uint256) { require(b != 0, "Modulo by zero!"); return a % b; } } pragma solidity ^0.8.0; /** * @dev The contract has an owner address, and provides basic authorization control whitch * simplifies the implementation of user permissions. This contract is based on the source code at: * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol */ contract Ownable { /** * @dev Error constants. */ string public constant NOT_CURRENT_OWNER = "018001"; string public constant CANNOT_TRANSFER_TO_ZERO_ADDRESS = "018002"; /** * @dev Current owner address. */ address public owner; /** * @dev An event which is triggered when the owner is changed. * @param previousOwner The address of the previous owner. * @param newOwner The address of the new owner. */ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The constructor sets the original `owner` of the contract to the sender account. */ constructor() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner, NOT_CURRENT_OWNER); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != address(0), CANNOT_TRANSFER_TO_ZERO_ADDRESS); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } pragma solidity ^0.8.0; contract BURNER is Context, ERC721Burnable { event ReceivedRoyalties(address indexed creator, address indexed buyer, uint256 indexed amount); using SafeMath for uint256; bytes4 public constant _INTERFACE_ID_ERC2981 = 0x2a55205a; uint256 private _royaltiesPercentage = 7; uint256 private _mintFee = 50000000000000000; //0.05 ETH uint256 private _maxCap = 256; uint256 private _maxMintPerWallet = 25; uint256 private _mintedTokens = 0; address private _smartContractOwner = 0x65C7432E6662A96f4e999603991d5E929E57f60A; address private _smartContractCopilot = 0x4DaE7E6c0Ca196643012cDc526bBc6b445A2ca59; string private _name = ""; string private _symbol = ""; string private _description = ""; string private _basePath = "https://crashblossom.co/burner/"; //returns the base path. string private _projectURI = ""; // Home web page, please leave it empty unless it's stored on a new path. string private _contractURI = "contract.php"; //return a JSON with the metadata of the contract. string private _baseTokenURI = "token.php"; //return a JSON with the metadata of any given token. string private _animationURI = "presentation.php"; //animation_url, it mixes and shows the final image dynamically. string private _tokenStaticImagePath = "assets/covers/"; string private _banner_collection_URI = "assets/img/banner.jpg"; //Collection's banner. string private _contractImageURI = "assets/img/icon.jpg"; //Collection's icon. uint[16] _arrayGasTiers = [0, 3, 6, 9, 12, 15, 20, 65535]; //Tiers for layers 1-7. Layer 0 is base layer, always on. Layers 8 and 9 are special. mapping(uint => uint) private _tokenIdTracker; bool private _paused = false; bool private _frozen = false; string private _strNotAuthorized = "Not authorized!"; string private _strIDOutBounds = "ID out of bounds!"; string private _strIndexOutOfBounds = "Index out of bounds!"; string private _strNotMintedYet = "Not minted yet!"; string private _strPaused = "Contract is paused!"; string private _strFrozen = "Contract is frozen!"; string private _str1Block = "High Speed"; string private _str2Block = "Medium Speed"; string private _str4Block = "Low Speed"; string private _jsCode = ""; string private _ipfsLayers = ""; string private _serverRepo = ""; // CONSTRUCTOR constructor(string memory name, string memory symbol, string memory description) ERC721(name, symbol, description) { _name = name; _symbol = symbol; _description = description; _smartContractOwner = _msgSender(); } // INTERNAL AUX FUNCTIONS function char(bytes1 b) internal pure returns(bytes1 c) { if(uint8(b) < 10) return bytes1(uint8(b) + 0x30); else return bytes1(uint8(b) + 0x57); } function _getGasTier(uint gasCost) private view returns(uint) { uint retValue = 7; for(uint i = 0; i < 7; i++) { if(gasCost > _arrayGasTiers[i] && gasCost <= _arrayGasTiers[i + 1]) { retValue = i; break; } } return retValue; } function _getTokenTier(uint256 _tokenId) private pure returns(uint256) { if(_tokenId > 0 && _tokenId < 25) { return 3; } else if(_tokenId > 24 && _tokenId < 77) { return 2; } else { return 1; } } function _getTokenTierName(uint256 _tokenId) private pure returns(string memory) { if(_tokenId > 0 && _tokenId < 25) { return 'Bright'; } else if(_tokenId > 24 && _tokenId < 77) { return 'Dark'; } else { return 'Collective layers'; } } function _getBlocksTierName(uint256 _tokenId) private view returns(string memory) { if(_tokenId > 0 && _tokenId < 16) { return _str1Block; } else if(_tokenId > 15 && _tokenId < 22) { return _str2Block; } else if(_tokenId > 21 && _tokenId < 25) { return _str4Block; } else if(_tokenId > 24 && _tokenId < 60) { return _str1Block; } else if(_tokenId > 59 && _tokenId < 72) { return _str2Block; } else if(_tokenId > 71 && _tokenId < 77) { return _str4Block; } else if(_tokenId > 76 && _tokenId < 205) { return _str1Block; } else if(_tokenId > 204 && _tokenId < 246) { return _str2Block; } else if(_tokenId > 245 && _tokenId < 257) { return _str4Block; } } function toAsciiString(address x) internal pure returns(string memory) { bytes memory s = new bytes(40); for (uint i = 0; i < 20; i++) { bytes1 b = bytes1(uint8(uint(uint160(x)) / (2**(8*(19 - i))))); bytes1 hi = bytes1(uint8(b) / 16); bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi)); s[2*i] = char(hi); s[2*i+1] = char(lo); } return string(s); } function _uint2str(uint256 _i) internal pure returns(string memory str) { if (_i == 0) { return "0"; } uint256 j = _i; uint256 length; while (j != 0) { length++; j /= 10; } bytes memory bstr = new bytes(length); uint256 k = length; j = _i; while (j != 0) { bstr[--k] = bytes1(uint8(48 + j % 10)); j /= 10; } str = string(bstr); return str; } // GETTERS /// @dev Returns the base URL (root folder) of the server storing all the scripts. function _basePathURI() internal view virtual returns(string memory) { return _basePath; } /// @dev Returns a URI pointing to the token-level JSON. function _baseURI() internal view virtual override returns(string memory) { return string(abi.encodePacked(_basePath, _baseTokenURI)); } /// @dev Returns a URI pointing to the collection's icon. function contractImageURI() public view returns(string memory) { return string(abi.encodePacked(_basePath, _contractImageURI)); } /// @dev Returns a URI pointing to the contract-level JSON. function contractURI() public view returns(string memory) { return string(abi.encodePacked(_basePath, _contractURI)); } /// @dev Returns the description of the project. function description() public view returns(string memory) { return _description; } /// @dev Returns the max amount of allowed mints per wallet. function _getMaxMintsPerWallet() public view returns(uint) { return _maxMintPerWallet; } /// @dev Returns a string that can be the actual JSON listing of all the IPFS layers, or a URI pointing at it. function getIPFSJSON() public view returns(string memory) { return _ipfsLayers; } /// @dev Returns a string that can be the actual JS code or a URI pointing at it. function getJSCode() public view returns(string memory) { return _jsCode; } /// @dev Returns a URI pointing to a remote repo holding all the server-side scripts. function getRemoteRepo() public view returns(string memory) { return _serverRepo; } /// @dev Returns a boolean telling whether this contract has royalties or not. function hasRoyalties() public pure returns(bool) { return true; } /// @dev Returns the max amount of tokens this contract can hold (256). function maxCap() public view returns(uint256) { return _maxCap; } /// @dev Returns the mint fee, expressed in wei. function mintfee() public view returns(uint256) { return _mintFee; } /// @dev Returns the name of the project (BURNER). function name() public view override returns(string memory) { return _name; } /// @dev Returns a JSON containing all the contract-level data. function retrieveContractMetadata() public view returns(string memory data) { bytes memory json; uint royalties = _royaltiesPercentage * 100; json = abi.encodePacked('{', '"name": "'); json = abi.encodePacked(json, _name); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"description": "'); json = abi.encodePacked(json, _description); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"image": "'); json = abi.encodePacked(json, _basePath); json = abi.encodePacked(json, _contractImageURI); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"external_link": "'); json = abi.encodePacked(json, _basePath); json = abi.encodePacked(json, _projectURI); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"banner_image_url": "'); json = abi.encodePacked(json, _basePath); json = abi.encodePacked(json, _banner_collection_URI); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"seller_fee_basis_points": '); json = abi.encodePacked(json, _uint2str(royalties)); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"fee_recipient": "'); json = abi.encodePacked(json, toAsciiString(_smartContractOwner)); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, '}'); return string(json); } /// @dev Returns a list of all the minted tokens so far. /// Note: Return value is an array containing all the tokenIDs stored onchain. Unconfirmed tx will not show up here. function retrieveTokenIDList() public view returns(string memory data) { bytes memory json; json = abi.encodePacked('['); if(_mintedTokens > 0) { for(uint i = 1; i <= _mintedTokens; i++) { if(i == 1) { json = abi.encodePacked(json, _uint2str(_tokenIdTracker[i])); } else { json = abi.encodePacked(json, ',', _uint2str(_tokenIdTracker[i])); } } } json = abi.encodePacked(json, ']'); return string(json); } /// @dev Returns a JSON containing all the associated data to a given token. /// @param _tokenId Token ID. function retrieveData(uint256 _tokenId) external view returns(string memory data) { // This function returns the metadata of a given token. require(_tokenId > 0, _strIDOutBounds); require(_tokenId <= _maxCap, _strIDOutBounds); require(_exists(_tokenId), _strNotMintedYet); uint256 rarity = 0; bytes memory json; rarity = _getTokenTier(_tokenId); json = abi.encodePacked('{', '"name": "'); json = abi.encodePacked(json, _symbol); json = abi.encodePacked(json, ' #'); json = abi.encodePacked(json, _uint2str(_tokenId)); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"description": "'); json = abi.encodePacked(json, _description); json = abi.encodePacked(json, ' Artist: crashblossom, Dev: Ariel Becker.'); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"owner": "0x'); json = abi.encodePacked(json, toAsciiString(ownerOf(_tokenId))); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"external_url": "'); json = abi.encodePacked(json, _basePath); json = abi.encodePacked(json, _animationURI); json = abi.encodePacked(json, '?t=0&local=1&id='); json = abi.encodePacked(json, _uint2str(_tokenId)); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"animation_url": "'); json = abi.encodePacked(json, _basePath); json = abi.encodePacked(json, _animationURI); json = abi.encodePacked(json, '?t=1&id='); json = abi.encodePacked(json, _uint2str(_tokenId)); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"image": "'); json = abi.encodePacked(json, _basePath); json = abi.encodePacked(json, _tokenStaticImagePath); json = abi.encodePacked(json, _uint2str(_tokenId)); json = abi.encodePacked(json, '.jpg'); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"attributes": ['); json = abi.encodePacked(json, '{'); json = abi.encodePacked(json, '"trait_type": "Speed"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"value": "'); json = abi.encodePacked(json, _getBlocksTierName(_tokenId)); json = abi.encodePacked(json, '"'); json = abi.encodePacked(json, '},'); json = abi.encodePacked(json, '{'); json = abi.encodePacked(json, '"trait_type": "Layer"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"value": "Shared"'); json = abi.encodePacked(json, '}'); if(rarity == 2 || rarity == 3) { json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '{'); json = abi.encodePacked(json, '"trait_type": "Layer"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"value": "Dark"'); json = abi.encodePacked(json, '}'); } if(rarity == 3) { json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '{'); json = abi.encodePacked(json, '"trait_type": "Layer"'); json = abi.encodePacked(json, ', '); json = abi.encodePacked(json, '"value": "Bright"'); json = abi.encodePacked(json, '}'); } json = abi.encodePacked(json, ']'); json = abi.encodePacked(json, '}'); return string(json); } /// @dev Returns a URI pointing to the server-side script that will display the animation for any token. function _renderURI() internal view virtual returns(string memory) { return string(abi.encodePacked(_basePath, _animationURI)); } /// @dev Returns the royalties' percentage assigned to the project. function royaltyAmount() public view returns(uint256) { return _royaltiesPercentage; } /// @dev Returns the royalties that will be paid according to token ID and sale price. /// Note: Return value is expressed in wei. /// @param _tokenId Token ID. /// @param _salePrice Sale price, in wei. function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns(address receiver, uint256 royaltiesAmount) { require(_tokenId > 0, _strIDOutBounds); require(_tokenId <= _maxCap, _strIDOutBounds); require(_exists(_tokenId), _strNotMintedYet); require(_salePrice > 99, "Price is too small!"); uint256 retValue = _salePrice.div(100).mul(_royaltiesPercentage); return(_smartContractOwner, retValue); } /// @dev Returns a URI pointing to the token's JSON. /// @param _tokenId Token ID. function tokenURI(uint256 _tokenId) public view virtual override returns(string memory) { // Example: https://opensea-creatures-api.herokuapp.com/api/creature/3 require(_tokenId > 0, _strIDOutBounds); require(_tokenId <= _maxCap, _strIDOutBounds); require(_exists(_tokenId), _strNotMintedYet); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, "?id=", Strings.toString(_tokenId))) : ""; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns(bool) { return interfaceId == 0x2a55205a || super.supportsInterface(interfaceId); } /// @dev Returns the contract's symbol (BURNER). function symbol() public view override returns(string memory) { return _symbol; } /// @dev Returns a URI pointing to the folder containing all the layers images. function tokenImageURI() public view returns(string memory) { return string(abi.encodePacked(_basePath, _tokenStaticImagePath)); } /// @dev Returns the animation's renderer URI (the one that initializes the JS script). /// @param _tokenId Token ID. function tokenShowcaseURI(uint _tokenId) public view returns(string memory) { require(_tokenId > 0, _strIDOutBounds); require(_tokenId <= _maxCap, _strIDOutBounds); require(_exists(_tokenId), _strNotMintedYet); string memory uri = string(abi.encodePacked(_basePath, _animationURI)); return bytes(uri).length > 0 ? string(abi.encodePacked(uri, "?t=0&id=", Strings.toString(_tokenId))) : ""; } // SETTERS /// @dev Changes the contract's description. /// @param _desc New description. function changeDescription(string memory _desc) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); require(!_frozen, _strFrozen); _description = _desc; } /// @dev Freezes the contract, disabling some functions forever. /// WARNING: ONCE SET, THIS STATE CANNOT BE REVERSED. /// This is the list of functions that will be disabled by it: /// changeDescription, setMaxMintsPerWallet, setMintFee, setRoyaltyAmount, setIPFSLayers, setJS, setServerRepoURI. function freeze() public virtual { require(_msgSender() == _smartContractOwner, _strNotAuthorized); require(!_frozen, _strFrozen); _frozen = true; } /// @dev Pauses some functions of the contract, like minting. function pause() public virtual { require(_msgSender() == _smartContractOwner, _strNotAuthorized); require(!_paused, _strPaused); _paused = true; } /// @dev Sets the admin's address. /// @param _newAddress New address. function setAdmin(address _newAddress) public { require((_msgSender() == _smartContractOwner || _msgSender() == _smartContractCopilot), _strNotAuthorized); _smartContractOwner = _newAddress; } /// @dev Sets the base URI for all the relative paths. /// @param _uri Base URI. function setBasePath(string memory _uri) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); _basePath = _uri; } /// @dev Sets the relative path to token.php (or any other server-side script responsible for rendering the token's JSON). /// @param _relativePath Relative path and filename. function setBaseTokenURI(string memory _relativePath) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); _baseTokenURI = _relativePath; } /// @dev Sets the relative path to the contract's image. /// @param _relativePath Relative path and filename. function setContractImage(string memory _relativePath) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); _contractImageURI = _relativePath; } /// @dev Sets the relative path to contract.php (or any other server-side script responsible for rendering the contract's JSON). /// @param _relativePath Relative path and filename. function setContractURI(string memory _relativePath) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); _contractURI = _relativePath; } /// @dev Sets the maximum amount of tokens a single wallet can mint. /// Note: default value is 25. /// @param _maxAmount New value, expressed in percent points. function setMaxMintsPerWallet(uint256 _maxAmount) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); require(!_frozen, _strFrozen); require(_maxAmount < 257, "Cannot exceed total supply!"); require(_maxAmount > 0, "Must be 1 or higher!"); _maxMintPerWallet = _maxAmount; } /// @dev Changes the value of the minting fee. Expressed in wei. /// Note: default value is 0.01 ETH. /// @param _newfee New value, expressed in wei. function setMintFee(uint256 _newfee) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); require(!_frozen, _strFrozen); _mintFee = _newfee; } /// @dev Relative path for the webpage. /// Note: Relative to base URI. /// @param _relativePath New relative path. function setProjectURI(string memory _relativePath) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); _projectURI = _relativePath; } /// @dev Changes the value of the royalty percentage. Expressed in percent points. /// Note: default value is 7. /// @param _percentage New value, expressed in percent points. function setRoyaltyAmount(uint256 _percentage) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); require(!_frozen, _strFrozen); _royaltiesPercentage = _percentage; } /// @dev Sets the relative path where all the static imagery (gallery images) for each token is stored. /// @param _relativePath Path relative to base URL. function setTokenStaticImageURI(string memory _relativePath) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); _tokenStaticImagePath = _relativePath; } /// @dev Sets the relative path where all the dynamic imagery for each token is stored. /// @param _relativePath Path relative to base URL. function setTokenImageURI(string memory _relativePath) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); _animationURI = _relativePath; } /// @dev Stores a JSON containing the list of all the imagery used for the token layers. /// Note: It can store the list itself or a URI pointing to the actual list. /// @param _json A JSON object containing the list of all the hashes for both full-size and thumbnails, or a URI pointing to a valid JSON. function setIPFSLayers(string memory _json) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); require(!_frozen, _strFrozen); _ipfsLayers = _json; } /// @dev Stores the code of the contract, or a URI pointing to it. /// Note: You can minify then ZIP and base64 it to reduce the amount of data. Remember to modify the PHP on the gateway to reflect this. /// @param _str URI to the code, or the code itself. function setJS(string memory _str) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); require(!_frozen, _strFrozen); _jsCode = _str; } /// @dev Stores a URI pointing to the server-side code of the project. /// @param _uri URI to the repository. function setServerRepoURI(string memory _uri) public { require(_msgSender() == _smartContractOwner, _strNotAuthorized); require(!_frozen, _strFrozen); _serverRepo = _uri; } /// @dev Unpauses the contract, allowing some functions to operate again. function unpause() public virtual { require(_msgSender() == _smartContractOwner, _strNotAuthorized); require(_paused, "Contract is already unpaused!"); _paused = false; } // MINT AND OTHER FUNCTIONS function royaltiesReceived(address _creator, address _buyer, uint256 _amount) external { emit ReceivedRoyalties(_creator, _buyer, _amount); } /// @dev Allows to withdraw any ETH available on this contract. /// Note: Only the contract's owner can withdraw. function withdraw() public payable { require(!_paused, _strPaused); require(_msgSender() == _smartContractOwner, _strNotAuthorized); uint balance = address(this).balance; require(balance > 0, "No ether left to withdraw"); (bool success, ) = (msg.sender).call{value: balance}(""); require(success, "Transfer failed."); } /// @dev Allows to withdraw any ERC-20 token sent by error to this contract. /// Note: Only the contract's owner can withdraw. function withdrawERC20(IERC20 token) public payable { require(!_paused, _strPaused); require(_msgSender() == _smartContractOwner, _strNotAuthorized); require(token.transfer(msg.sender, token.balanceOf(address(this))), "Transfer failed"); } /// @dev Mints a random token. Non-admins must pay a fee for it. /// Note: The fees are always transferred, even if the user transaction fails. function mint() public payable { // Shouldn't be paused. require(!_paused, _strPaused); // Shouldn't attempt to mint more tokens than allowed per address. require(ERC721.balanceOf(_msgSender()) < (_maxMintPerWallet), "More than max mints allowed for this addy!"); // Shouldn't attempt to mint more tokens than the allowed by the contract. require(ERC721.balanceOf(_msgSender()) < (_maxCap - _mintedTokens), "This action will surpass the mint cap!"); // Shouldn't be minted by the zero addy. require(_msgSender() != address(0), "Zero address"); if(_msgSender() != _smartContractOwner) { require(msg.value >= _mintFee, "Not enough ETH!"); } bool boolBreakLoop = false; while(!boolBreakLoop) { //Create a pseudorandom seed in the form of a hash bytes32 seed = keccak256(abi.encodePacked(block.timestamp, block.difficulty, _msgSender())); // Extract the last byte. uint8 _index = uint8(bytes1(seed[0])); // Add one so it goes from 1 to 256. uint index = _index + 1; // And use that index to mint a pseudorandom tokenID. if(!_exists(index)) { if(index > 0 && index <= _maxCap) { _mint(_msgSender(), index); _mintedTokens++; _tokenIdTracker[_mintedTokens] = index; boolBreakLoop = true; } } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"description","type":"string"}],"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":true,"internalType":"address","name":"creator","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReceivedRoyalties","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":"_INTERFACE_ID_ERC2981","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getMaxMintsPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_desc","type":"string"}],"name":"changeDescription","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractImageURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIPFSJSON","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getJSCode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRemoteRepo","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasRoyalties","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","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":[],"name":"maxCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"retrieveContractMetadata","outputs":[{"internalType":"string","name":"data","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"retrieveData","outputs":[{"internalType":"string","name":"data","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"retrieveTokenIDList","outputs":[{"internalType":"string","name":"data","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_creator","type":"address"},{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"royaltiesReceived","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltiesAmount","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":"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":"_newAddress","type":"address"}],"name":"setAdmin","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":"string","name":"_uri","type":"string"}],"name":"setBasePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_relativePath","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_relativePath","type":"string"}],"name":"setContractImage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_relativePath","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_json","type":"string"}],"name":"setIPFSLayers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_str","type":"string"}],"name":"setJS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAmount","type":"uint256"}],"name":"setMaxMintsPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newfee","type":"uint256"}],"name":"setMintFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_relativePath","type":"string"}],"name":"setProjectURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setRoyaltyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setServerRepoURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_relativePath","type":"string"}],"name":"setTokenImageURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_relativePath","type":"string"}],"name":"setTokenStaticImageURI","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":[],"name":"tokenImageURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenShowcaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6007805566b1a2bc2ec500006008556101006009556019600a556000600b819055600c80546001600160a01b03199081167365c7432e6662a96f4e999603991d5e929e57f60a17909155600d8054909116734dae7e6c0ca196643012cdc526bbc6b445a2ca5917905560a06040526080908152600e90620000819082620006b8565b50604080516020810190915260008152600f90620000a09082620006b8565b50604080516020810190915260008152601090620000bf9082620006b8565b5060408051808201909152601f81527f68747470733a2f2f6372617368626c6f73736f6d2e636f2f6275726e65722f006020820152601190620001039082620006b8565b50604080516020810190915260008152601290620001229082620006b8565b5060408051808201909152600c81526b0636f6e74726163742e7068760a41b6020820152601390620001559082620006b8565b506040805180820190915260098152680746f6b656e2e7068760bc1b6020820152601490620001859082620006b8565b5060408051808201909152601081526f070726573656e746174696f6e2e7068760841b6020820152601590620001bc9082620006b8565b5060408051808201909152600e81526d6173736574732f636f766572732f60901b6020820152601690620001f19082620006b8565b5060408051808201909152601581527f6173736574732f696d672f62616e6e65722e6a706700000000000000000000006020820152601790620002359082620006b8565b5060408051808201909152601381527f6173736574732f696d672f69636f6e2e6a7067000000000000000000000000006020820152601890620002799082620006b8565b506040805161010081018252600081526003602082015260069181019190915260096060820152600c6080820152600f60a0820152601460c082015261ffff60e0820152620002cd906019906008620005b3565b50602a805461ffff1916905560408051808201909152600f81526e4e6f7420617574686f72697a65642160881b6020820152602b906200030e9082620006b8565b506040805180820190915260118152704944206f7574206f6620626f756e64732160781b6020820152602c90620003469082620006b8565b5060408051808201909152601481527f496e646578206f7574206f6620626f756e6473210000000000000000000000006020820152602d906200038a9082620006b8565b5060408051808201909152600f81526e4e6f74206d696e746564207965742160881b6020820152602e90620003c09082620006b8565b5060408051808201909152601381527f436f6e74726163742069732070617573656421000000000000000000000000006020820152602f90620004049082620006b8565b5060408051808201909152601381527f436f6e74726163742069732066726f7a656e21000000000000000000000000006020820152603090620004489082620006b8565b5060408051808201909152600a815269121a59da0814dc19595960b21b6020820152603190620004799082620006b8565b5060408051808201909152600c81526b1359591a5d5b4814dc19595960a21b6020820152603290620004ac9082620006b8565b50604080518082019091526009815268131bddc814dc19595960ba1b6020820152603390620004dc9082620006b8565b50604080516020810190915260008152603490620004fb9082620006b8565b506040805160208101909152600081526035906200051a9082620006b8565b50604080516020810190915260008152603690620005399082620006b8565b503480156200054757600080fd5b506040516200507e3803806200507e8339810160408190526200056a9162000833565b600e620005788482620006b8565b50600f620005878382620006b8565b506010620005968282620006b8565b5050600c80546001600160a01b0319163317905550620008c49050565b8260108101928215620005ea579160200282015b82811115620005ea578251829061ffff16905591602001919060010190620005c7565b50620005f8929150620005fc565b5090565b5b80821115620005f85760008155600101620005fd565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200063e57607f821691505b6020821081036200065f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006b357600081815260208120601f850160051c810160208610156200068e5750805b601f850160051c820191505b81811015620006af578281556001016200069a565b5050505b505050565b81516001600160401b03811115620006d457620006d462000613565b620006ec81620006e5845462000629565b8462000665565b602080601f8311600181146200072457600084156200070b5750858301515b600019600386901b1c1916600185901b178555620006af565b600085815260208120601f198616915b82811015620007555788860151825594840194600190910190840162000734565b5085821015620007745787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f8301126200079657600080fd5b81516001600160401b0380821115620007b357620007b362000613565b604051601f8301601f19908116603f01168101908282118183101715620007de57620007de62000613565b81604052838152602092508683858801011115620007fb57600080fd5b600091505b838210156200081f578582018301518183018401529082019062000800565b600093810190920192909252949350505050565b6000806000606084860312156200084957600080fd5b83516001600160401b03808211156200086157600080fd5b6200086f8783880162000784565b945060208601519150808211156200088657600080fd5b620008948783880162000784565b93506040860151915080821115620008ab57600080fd5b50620008ba8682870162000784565b9150509250925092565b6147aa80620008d46000396000f3fe6080604052600436106103355760003560e01c8063704b6c02116101ab578063ad9c7f7f116100f7578063dc42c25511610095578063e985e9c51161006f578063e985e9c5146108fc578063eddd0d9c1461091c578063f4f3b2001461093c578063fce58c171461094f57600080fd5b8063dc42c255146108a7578063e6120413146108c7578063e8a3d485146108e757600080fd5b8063ca83eb71116100d1578063ca83eb7114610848578063caa178c21461085d578063d3c5915a14610872578063dc1111721461088757600080fd5b8063ad9c7f7f146107e8578063b88d4fde14610808578063c87b56dd1461082857600080fd5b80638456cb5911610164578063963c35461161013e578063963c35461461075f57806397a6a8ed1461077f5780639ed6e55d146107b3578063a22cb465146107c857600080fd5b80638456cb5914610715578063938e3d7b1461072a57806395d89b411461074a57600080fd5b8063704b6c021461067657806370a08231146106965780637129e629146106b65780637284e416146106cb57806375cd9fe6146106e05780637c6e551d1461070057600080fd5b806329c744b2116102855780634f07de091161022357806362a5af3b116101fd57806362a5af3b146106185780636352211e1461062d578063656605d61461064d5780636edf6b991461066157600080fd5b80634f07de09146105b85780635244475a146105d85780635bee29b7146105f857600080fd5b80633ccfd60b1161025f5780633ccfd60b1461055b5780633f4ba83a1461056357806342842e0e1461057857806342966c681461059857600080fd5b806329c744b2146104e75780632a55205a146104fc57806330176e131461053b57600080fd5b80630f920904116102f25780631249c58b116102cc5780631249c58b14610480578063198b38b51461048857806323548b8b146104a857806323b872dd146104c757600080fd5b80630f9209041461042b5780630fa44bc11461044b578063118010821461046057600080fd5b806301ffc9a71461033a57806306fdde031461036f578063081812fc146103915780630924d84f146103c9578063095ea7b3146103e95780630be4d2b81461040b575b600080fd5b34801561034657600080fd5b5061035a610355366004613891565b610964565b60405190151581526020015b60405180910390f35b34801561037b57600080fd5b5061038461098f565b60405161036691906138fe565b34801561039d57600080fd5b506103b16103ac366004613911565b610a21565b6040516001600160a01b039091168152602001610366565b3480156103d557600080fd5b506103846103e4366004613911565b610a8e565b3480156103f557600080fd5b5061040961040436600461393f565b610b7a565b005b34801561041757600080fd5b506104096104263660046139f7565b610bff565b34801561043757600080fd5b506104096104463660046139f7565b610c47565b34801561045757600080fd5b50610384610c8b565b34801561046c57600080fd5b5061040961047b3660046139f7565b610d8e565b610409610dd2565b34801561049457600080fd5b506104096104a33660046139f7565b61103e565b3480156104b457600080fd5b506009545b604051908152602001610366565b3480156104d357600080fd5b506104096104e2366004613a40565b6110af565b3480156104f357600080fd5b506103846110e1565b34801561050857600080fd5b5061051c610517366004613a81565b6110f0565b604080516001600160a01b039093168352602083019190915201610366565b34801561054757600080fd5b506104096105563660046139f7565b6111dd565b610409611221565b34801561056f57600080fd5b5061040961135a565b34801561058457600080fd5b50610409610593366004613a40565b6113f0565b3480156105a457600080fd5b506104096105b3366004613911565b61140b565b3480156105c457600080fd5b506104096105d3366004613911565b611439565b3480156105e457600080fd5b506104096105f3366004613a40565b6114a3565b34801561060457600080fd5b50610384610613366004613911565b6114e9565b34801561062457600080fd5b50610409611e49565b34801561063957600080fd5b506103b1610648366004613911565b611ebf565b34801561065957600080fd5b50600161035a565b34801561066d57600080fd5b50610384611f16565b34801561068257600080fd5b50610409610691366004613aa3565b612367565b3480156106a257600080fd5b506104b96106b1366004613aa3565b6123df565b3480156106c257600080fd5b50610384612466565b3480156106d757600080fd5b50610384612475565b3480156106ec57600080fd5b506104096106fb3660046139f7565b612484565b34801561070c57600080fd5b506007546104b9565b34801561072157600080fd5b506104096124c8565b34801561073657600080fd5b506104096107453660046139f7565b612537565b34801561075657600080fd5b5061038461257b565b34801561076b57600080fd5b5061040961077a366004613911565b61258a565b34801561078b57600080fd5b5061079a63152a902d60e11b81565b6040516001600160e01b03199091168152602001610366565b3480156107bf57600080fd5b5061038461268c565b3480156107d457600080fd5b506104096107e3366004613ace565b61269b565b3480156107f457600080fd5b506104096108033660046139f7565b61275f565b34801561081457600080fd5b50610409610823366004613b07565b6127d0565b34801561083457600080fd5b50610384610843366004613911565b612808565b34801561085457600080fd5b50600a546104b9565b34801561086957600080fd5b506103846128c1565b34801561087e57600080fd5b506008546104b9565b34801561089357600080fd5b506104096108a23660046139f7565b6128ec565b3480156108b357600080fd5b506104096108c23660046139f7565b61295d565b3480156108d357600080fd5b506104096108e23660046139f7565b6129a1565b3480156108f357600080fd5b50610384612a12565b34801561090857600080fd5b5061035a610917366004613b87565b612a29565b34801561092857600080fd5b50610409610937366004613911565b612a57565b61040961094a366004613aa3565b612ac1565b34801561095b57600080fd5b50610384612c40565b600063152a902d60e11b6001600160e01b031983161480610989575061098982612c57565b92915050565b6060600e805461099e90613bb5565b80601f01602080910402602001604051908101604052809291908181526020018280546109ca90613bb5565b8015610a175780601f106109ec57610100808354040283529160200191610a17565b820191906000526020600020905b8154815290600101906020018083116109fa57829003601f168201915b5050505050905090565b6000610a2c82612ca7565b610a725760405162461bcd60e51b81526020600482015260126024820152714e6f6e6578697374656e7420746f6b656e2160701b60448201526064015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6060602c82610ab05760405162461bcd60e51b8152600401610a699190613bef565b50600954821115602c90610ad75760405162461bcd60e51b8152600401610a699190613bef565b50610ae182612ca7565b602e90610b015760405162461bcd60e51b8152600401610a699190613bef565b50600060116015604051602001610b19929190613ced565b60405160208183030381529060405290506000815111610b485760405180602001604052806000815250610b73565b80610b5284612cc4565b604051602001610b63929190613d02565b6040516020818303038152906040525b9392505050565b6000610b8582611ebf565b9050806001600160a01b0316836001600160a01b031603610bb85760405162461bcd60e51b8152600401610a6990613d45565b336001600160a01b0382161480610bd45750610bd48133612a29565b610bf05760405162461bcd60e51b8152600401610a6990613d45565b610bfa8383612dcd565b505050565b600c546001600160a01b0316336001600160a01b031614602b90610c365760405162461bcd60e51b8152600401610a699190613bef565b506012610c438282613dbc565b5050565b600c546001600160a01b0316336001600160a01b031614602b90610c7e5760405162461bcd60e51b8152600401610a699190613bef565b506015610c438282613dbc565b606080604051602001610ca590605b60f81b815260010190565b60405160208183030381529060405290506000600b541115610d675760015b600b548111610d655780600103610d16576000818152602960205260409020548290610cef90612e3b565b604051602001610d00929190613e7c565b6040516020818303038152906040529150610d53565b6000818152602960205260409020548290610d3090612e3b565b604051602001610d41929190613eab565b60405160208183030381529060405291505b80610d5d81613efd565b915050610cc4565b505b80604051602001610d789190613f16565b60408051601f1981840301815291905292915050565b600c546001600160a01b0316336001600160a01b031614602b90610dc55760405162461bcd60e51b8152600401610a699190613bef565b506016610c438282613dbc565b602a54602f9060ff1615610df95760405162461bcd60e51b8152600401610a699190613bef565b50600a54610e06336123df565b10610e665760405162461bcd60e51b815260206004820152602a60248201527f4d6f7265207468616e206d6178206d696e747320616c6c6f77656420666f72206044820152697468697320616464792160b01b6064820152608401610a69565b600b54600954610e769190613f3b565b610e7f336123df565b10610edb5760405162461bcd60e51b815260206004820152602660248201527f5468697320616374696f6e2077696c6c207375727061737320746865206d696e60448201526574206361702160d01b6064820152608401610a69565b33610f175760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610a69565b600c546001600160a01b0316336001600160a01b031614610f7657600854341015610f765760405162461bcd60e51b815260206004820152600f60248201526e4e6f7420656e6f756768204554482160881b6044820152606401610a69565b60005b8061103b576040805142602080830191909152448284015233606090811b6bffffffffffffffffffffffff1916908301528251605481840301815260749092019092528051910120600081811a90610fd2826001613f64565b60ff169050610fe081612ca7565b61103357600081118015610ff657506009548111155b15611033576110053382612f47565b600b805490600061101583613efd565b9091555050600b546000908152602960205260409020819055600193505b505050610f79565b50565b600c546001600160a01b0316336001600160a01b031614602b906110755760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff16156110a25760405162461bcd60e51b8152600401610a699190613bef565b506036610c438282613dbc565b6110ba335b82612fce565b6110d65760405162461bcd60e51b8152600401610a6990613d45565b610bfa838383613073565b60606036805461099e90613bb5565b600080602c846111135760405162461bcd60e51b8152600401610a699190613bef565b50600954841115602c9061113a5760405162461bcd60e51b8152600401610a699190613bef565b5061114484612ca7565b602e906111645760405162461bcd60e51b8152600401610a699190613bef565b50606383116111ab5760405162461bcd60e51b8152602060048201526013602482015272507269636520697320746f6f20736d616c6c2160681b6044820152606401610a69565b6007546000906111c6906111c086606461321b565b9061326c565b600c546001600160a01b0316969095509350505050565b600c546001600160a01b0316336001600160a01b031614602b906112145760405162461bcd60e51b8152600401610a699190613bef565b506014610c438282613dbc565b602a54602f9060ff16156112485760405162461bcd60e51b8152600401610a699190613bef565b50600c546001600160a01b0316336001600160a01b031614602b906112805760405162461bcd60e51b8152600401610a699190613bef565b5047806112cf5760405162461bcd60e51b815260206004820152601960248201527f4e6f206574686572206c65667420746f207769746864726177000000000000006044820152606401610a69565b604051600090339083908381818185875af1925050503d8060008114611311576040519150601f19603f3d011682016040523d82523d6000602084013e611316565b606091505b5050905080610c435760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610a69565b600c546001600160a01b0316336001600160a01b031614602b906113915760405162461bcd60e51b8152600401610a699190613bef565b50602a5460ff166113e45760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420697320616c726561647920756e706175736564210000006044820152606401610a69565b602a805460ff19169055565b610bfa838383604051806020016040528060008152506127d0565b611414336110b4565b6114305760405162461bcd60e51b8152600401610a6990613d45565b61103b816132e4565b600c546001600160a01b0316336001600160a01b031614602b906114705760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff161561149d5760405162461bcd60e51b8152600401610a699190613bef565b50600755565b80826001600160a01b0316846001600160a01b03167fa4835412df2a3ce32882e9e735e6d40c263d116b4f169bd11a6e281979eed06160405160405180910390a4505050565b6060602c8261150b5760405162461bcd60e51b8152600401610a699190613bef565b50600954821115602c906115325760405162461bcd60e51b8152600401610a699190613bef565b5061153c82612ca7565b602e9061155c5760405162461bcd60e51b8152600401610a699190613bef565b506000606061156a84613318565b915060405160200161157b90613f7d565b604051602081830303815290604052905080600f6040516020016115a0929190613f9c565b6040516020818303038152906040529050806040516020016115c29190613fc3565b6040516020818303038152906040529050806115dd85612e3b565b6040516020016115ee929190613e7c565b6040516020818303038152906040529050806040516020016116109190613fe9565b604051602081830303815290604052905080604051602001611632919061400e565b6040516020818303038152906040529050806040516020016116549190614034565b6040516020818303038152906040529050806010604051602001611679929190613f9c565b60405160208183030381529060405290508060405160200161169b9190614068565b6040516020818303038152906040529050806040516020016116bd9190613fe9565b6040516020818303038152906040529050806040516020016116df919061400e565b60405160208183030381529060405290508060405160200161170191906140bb565b60405160208183030381529060405290508061172461171f86611ebf565b613360565b604051602001611735929190613e7c565b6040516020818303038152906040529050806040516020016117579190613fe9565b604051602081830303815290604052905080604051602001611779919061400e565b60405160208183030381529060405290508060405160200161179b91906140eb565b60405160208183030381529060405290508060116040516020016117c0929190613f9c565b60405160208183030381529060405290508060156040516020016117e5929190613f9c565b6040516020818303038152906040529050806040516020016118079190614120565b60405160208183030381529060405290508061182285612e3b565b604051602001611833929190613e7c565b6040516020818303038152906040529050806040516020016118559190613fe9565b604051602081830303815290604052905080604051602001611877919061400e565b6040516020818303038152906040529050806040516020016118999190614154565b60405160208183030381529060405290508060116040516020016118be929190613f9c565b60405160208183030381529060405290508060156040516020016118e3929190613f9c565b604051602081830303815290604052905080604051602001611905919061418a565b60405160208183030381529060405290508061192085612e3b565b604051602001611931929190613e7c565b6040516020818303038152906040529050806040516020016119539190613fe9565b604051602081830303815290604052905080604051602001611975919061400e565b60405160208183030381529060405290508060405160200161199791906141b6565b60405160208183030381529060405290508060116040516020016119bc929190613f9c565b60405160208183030381529060405290508060166040516020016119e1929190613f9c565b6040516020818303038152906040529050806119fc85612e3b565b604051602001611a0d929190613e7c565b604051602081830303815290604052905080604051602001611a2f91906141e4565b604051602081830303815290604052905080604051602001611a519190613fe9565b604051602081830303815290604052905080604051602001611a73919061400e565b604051602081830303815290604052905080604051602001611a95919061420c565b604051602081830303815290604052905080604051602001611ab7919061423f565b604051602081830303815290604052905080604051602001611ad99190614264565b604051602081830303815290604052905080604051602001611afb919061400e565b604051602081830303815290604052905080604051602001611b1d919061429d565b604051602081830303815290604052905080611b38856134a7565b604051602001611b49929190613e7c565b604051602081830303815290604052905080604051602001611b6b9190613fe9565b604051602081830303815290604052905080604051602001611b8d91906142cb565b604051602081830303815290604052905080604051602001611baf919061423f565b604051602081830303815290604052905080604051602001611bd191906142f1565b604051602081830303815290604052905080604051602001611bf3919061400e565b604051602081830303815290604052905080604051602001611c15919061432a565b604051602081830303815290604052905080604051602001611c37919061435f565b60405160208183030381529060405290508160021480611c575750816003145b15611d295780604051602001611c6d919061400e565b604051602081830303815290604052905080604051602001611c8f919061423f565b604051602081830303815290604052905080604051602001611cb191906142f1565b604051602081830303815290604052905080604051602001611cd3919061400e565b604051602081830303815290604052905080604051602001611cf59190614384565b604051602081830303815290604052905080604051602001611d17919061435f565b60405160208183030381529060405290505b81600303611dfe5780604051602001611d42919061400e565b604051602081830303815290604052905080604051602001611d64919061423f565b604051602081830303815290604052905080604051602001611d8691906142f1565b604051602081830303815290604052905080604051602001611da8919061400e565b604051602081830303815290604052905080604051602001611dca91906143b7565b604051602081830303815290604052905080604051602001611dec919061435f565b60405160208183030381529060405290505b80604051602001611e0f9190613f16565b604051602081830303815290604052905080604051602001611e31919061435f565b60408051601f19818403018152919052949350505050565b600c546001600160a01b0316336001600160a01b031614602b90611e805760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff1615611ead5760405162461bcd60e51b8152600401610a699190613bef565b50602a805461ff001916610100179055565b6000818152600360205260408120546001600160a01b0316806109895760405162461bcd60e51b815260206004820152600f60248201526e4e6f74206d696e746564207965742160881b6044820152606401610a69565b60608060006007546064611f2a91906143ec565b9050604051602001611f3b90613f7d565b604051602081830303815290604052915081600e604051602001611f60929190613f9c565b604051602081830303815290604052915081604051602001611f829190613fe9565b604051602081830303815290604052915081604051602001611fa4919061400e565b604051602081830303815290604052915081604051602001611fc69190614034565b6040516020818303038152906040529150816010604051602001611feb929190613f9c565b60405160208183030381529060405291508160405160200161200d9190613fe9565b60405160208183030381529060405291508160405160200161202f919061400e565b60405160208183030381529060405291508160405160200161205191906141b6565b6040516020818303038152906040529150816011604051602001612076929190613f9c565b604051602081830303815290604052915081601860405160200161209b929190613f9c565b6040516020818303038152906040529150816040516020016120bd9190613fe9565b6040516020818303038152906040529150816040516020016120df919061400e565b604051602081830303815290604052915081604051602001612101919061440b565b6040516020818303038152906040529150816011604051602001612126929190613f9c565b604051602081830303815290604052915081601260405160200161214b929190613f9c565b60405160208183030381529060405291508160405160200161216d9190613fe9565b60405160208183030381529060405291508160405160200161218f919061400e565b6040516020818303038152906040529150816040516020016121b19190614441565b60405160208183030381529060405291508160116040516020016121d6929190613f9c565b60405160208183030381529060405291508160176040516020016121fb929190613f9c565b60405160208183030381529060405291508160405160200161221d9190613fe9565b60405160208183030381529060405291508160405160200161223f919061400e565b604051602081830303815290604052915081604051602001612261919061447a565b60405160208183030381529060405291508161227c82612e3b565b60405160200161228d929190613e7c565b6040516020818303038152906040529150816040516020016122af919061400e565b6040516020818303038152906040529150816040516020016122d191906144bb565b60408051601f19818403018152919052600c5490925082906122fb906001600160a01b0316613360565b60405160200161230c929190613e7c565b60405160208183030381529060405291508160405160200161232e9190613fe9565b604051602081830303815290604052915081604051602001612350919061435f565b60408051601f198184030181529190529392505050565b600c546001600160a01b0316336001600160a01b0316148061239c5750600d546001600160a01b0316336001600160a01b0316145b602b906123bc5760405162461bcd60e51b8152600401610a699190613bef565b50600c80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b03821661244a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a69565b506001600160a01b031660009081526004602052604090205490565b60606035805461099e90613bb5565b60606010805461099e90613bb5565b600c546001600160a01b0316336001600160a01b031614602b906124bb5760405162461bcd60e51b8152600401610a699190613bef565b506011610c438282613dbc565b600c546001600160a01b0316336001600160a01b031614602b906124ff5760405162461bcd60e51b8152600401610a699190613bef565b50602a54602f9060ff16156125275760405162461bcd60e51b8152600401610a699190613bef565b50602a805460ff19166001179055565b600c546001600160a01b0316336001600160a01b031614602b9061256e5760405162461bcd60e51b8152600401610a699190613bef565b506013610c438282613dbc565b6060600f805461099e90613bb5565b600c546001600160a01b0316336001600160a01b031614602b906125c15760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff16156125ee5760405162461bcd60e51b8152600401610a699190613bef565b5061010181106126405760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742065786365656420746f74616c20737570706c792100000000006044820152606401610a69565b600081116126875760405162461bcd60e51b81526020600482015260146024820152734d7573742062652031206f72206869676865722160601b6044820152606401610a69565b600a55565b60606034805461099e90613bb5565b336001600160a01b038316036126f35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a69565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600c546001600160a01b0316336001600160a01b031614602b906127965760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff16156127c35760405162461bcd60e51b8152600401610a699190613bef565b506035610c438282613dbc565b6127da3383612fce565b6127f65760405162461bcd60e51b8152600401610a6990613d45565b61280284848484613661565b50505050565b6060602c8261282a5760405162461bcd60e51b8152600401610a699190613bef565b50600954821115602c906128515760405162461bcd60e51b8152600401610a699190613bef565b5061285b82612ca7565b602e9061287b5760405162461bcd60e51b8152600401610a699190613bef565b5060006128866136e2565b905060008151116128a65760405180602001604052806000815250610b73565b806128b084612cc4565b604051602001610b639291906144f1565b6060601160186040516020016128d8929190613ced565b604051602081830303815290604052905090565b600c546001600160a01b0316336001600160a01b031614602b906129235760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff16156129505760405162461bcd60e51b8152600401610a699190613bef565b506034610c438282613dbc565b600c546001600160a01b0316336001600160a01b031614602b906129945760405162461bcd60e51b8152600401610a699190613bef565b506018610c438282613dbc565b600c546001600160a01b0316336001600160a01b031614602b906129d85760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff1615612a055760405162461bcd60e51b8152600401610a699190613bef565b506010610c438282613dbc565b6060601160136040516020016128d8929190613ced565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b600c546001600160a01b0316336001600160a01b031614602b90612a8e5760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff1615612abb5760405162461bcd60e51b8152600401610a699190613bef565b50600855565b602a54602f9060ff1615612ae85760405162461bcd60e51b8152600401610a699190613bef565b50600c546001600160a01b0316336001600160a01b031614602b90612b205760405162461bcd60e51b8152600401610a699190613bef565b506040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015612b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b939190614530565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c029190614549565b61103b5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610a69565b6060601160166040516020016128d8929190613ced565b60006001600160e01b031982166380ac58cd60e01b1480612c8857506001600160e01b03198216635b5e139f60e01b145b8061098957506301ffc9a760e01b6001600160e01b0319831614610989565b6000908152600360205260409020546001600160a01b0316151590565b606081600003612ceb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612d155780612cff81613efd565b9150612d0e9050600a8361457c565b9150612cef565b60008167ffffffffffffffff811115612d3057612d3061396b565b6040519080825280601f01601f191660200182016040528015612d5a576020820181803683370190505b5090505b8415612dc557612d6f600183613f3b565b9150612d7c600a86614590565b612d879060306145a4565b60f81b818381518110612d9c57612d9c613f4e565b60200101906001600160f81b031916908160001a905350612dbe600a8661457c565b9450612d5e565b949350505050565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612e0282611ebf565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606081600003612e625750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612e8c5780612e7681613efd565b9150612e859050600a8361457c565b9150612e66565b60008167ffffffffffffffff811115612ea757612ea761396b565b6040519080825280601f01601f191660200182016040528015612ed1576020820181803683370190505b508593509050815b8315612f3e57612eea600a85614590565b612ef59060306145a4565b60f81b82612f02836145b7565b92508281518110612f1557612f15613f4e565b60200101906001600160f81b031916908160001a905350612f37600a8561457c565b9350612ed9565b50949350505050565b6001600160a01b0382166000908152600460205260408120805460019290612f709084906145a4565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612fd982612ca7565b61301d5760405162461bcd60e51b8152602060048201526015602482015274546f6b656e20646f6573206e6f742065786973742160581b6044820152606401610a69565b600061302883611ebf565b9050806001600160a01b0316846001600160a01b031614806130635750836001600160a01b031661305884610a21565b6001600160a01b0316145b80612dc55750612dc58185612a29565b826001600160a01b031661308682611ebf565b6001600160a01b0316146130ac5760405162461bcd60e51b8152600401610a6990613d45565b6001600160a01b0382166131025760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74207472616e7366657220746f207a65726f2061646479210000006044820152606401610a69565b6001600160a01b0382166131585760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74207472616e7366657220746f207a65726f2061646479210000006044820152606401610a69565b613163600082612dcd565b6001600160a01b038316600090815260046020526040812080546001929061318c908490613f3b565b90915550506001600160a01b03821660009081526004602052604081208054600192906131ba9084906145a4565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008082116132605760405162461bcd60e51b81526020600482015260116024820152704469766973696f6e206279207a65726f2160781b6044820152606401610a69565b6000612dc5838561457c565b60008260000361327e57506000610989565b600061328a83856143ec565b905082613297858361457c565b14610b735760405162461bcd60e51b815260206004820152601860248201527f4d756c7469706c69636174696f6e206f766572666c6f772100000000000000006044820152606401610a69565b60405162461bcd60e51b815260206004820152600960248201526844697361626c65642160b81b6044820152606401610a69565b600080821180156133295750601982105b1561333657506003919050565b6018821180156133465750604d82105b1561335357506002919050565b506001919050565b919050565b60408051602880825260608281019093526000919060208201818036833701905050905060005b60148110156134a057600061339d826013613f3b565b6133a89060086143ec565b6133b39060026146b2565b6133c6906001600160a01b03871661457c565b60f81b9050600060108260f81c6133dd91906146be565b60f81b905060008160f81c60106133f491906146e0565b8360f81c6134029190614701565b60f81b9050613410826136f9565b8561341c8660026143ec565b8151811061342c5761342c613f4e565b60200101906001600160f81b031916908160001a90535061344c816136f9565b856134588660026143ec565b6134639060016145a4565b8151811061347357613473613f4e565b60200101906001600160f81b031916908160001a905350505050808061349890613efd565b915050613387565b5092915050565b60606000821180156134b95750601082105b1561355057603180546134cb90613bb5565b80601f01602080910402602001604051908101604052809291908181526020018280546134f790613bb5565b80156135445780601f1061351957610100808354040283529160200191613544565b820191906000526020600020905b81548152906001019060200180831161352757829003601f168201915b50505050509050919050565b600f821180156135605750601682105b1561357257603280546134cb90613bb5565b6015821180156135825750601982105b1561359457603380546134cb90613bb5565b6018821180156135a45750603c82105b156135b657603180546134cb90613bb5565b603b821180156135c65750604882105b156135d857603280546134cb90613bb5565b6047821180156135e85750604d82105b156135fa57603380546134cb90613bb5565b604c8211801561360a575060cd82105b1561361c57603180546134cb90613bb5565b60cc8211801561362c575060f682105b1561363e57603280546134cb90613bb5565b60f58211801561364f575061010182105b1561335b57603380546134cb90613bb5565b61366c848484613073565b6136788484848461372f565b6128025760405162461bcd60e51b815260206004820152603560248201527f417474656d70746564207472616e7366657220746f206e6f6e20455243373231604482015274526563656976657220696d706c656d656e7465722160581b6064820152608401610a69565b6060601160146040516020016128d8929190613ced565b6000600a60f883901c10156137205761371760f883901c6030613f64565b60f81b92915050565b61371760f883901c6057613f64565b60006001600160a01b0384163b1561387057604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061377390339089908890889060040161471a565b6020604051808303816000875af19250505080156137ae575060408051601f3d908101601f191682019092526137ab91810190614757565b60015b613856573d8080156137dc576040519150601f19603f3d011682016040523d82523d6000602084013e6137e1565b606091505b50805160000361384e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610a69565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612dc5565b506001949350505050565b6001600160e01b03198116811461103b57600080fd5b6000602082840312156138a357600080fd5b8135610b738161387b565b60005b838110156138c95781810151838201526020016138b1565b50506000910152565b600081518084526138ea8160208601602086016138ae565b601f01601f19169290920160200192915050565b602081526000610b7360208301846138d2565b60006020828403121561392357600080fd5b5035919050565b6001600160a01b038116811461103b57600080fd5b6000806040838503121561395257600080fd5b823561395d8161392a565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561399c5761399c61396b565b604051601f8501601f19908116603f011681019082821181831017156139c4576139c461396b565b816040528093508581528686860111156139dd57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215613a0957600080fd5b813567ffffffffffffffff811115613a2057600080fd5b8201601f81018413613a3157600080fd5b612dc584823560208401613981565b600080600060608486031215613a5557600080fd5b8335613a608161392a565b92506020840135613a708161392a565b929592945050506040919091013590565b60008060408385031215613a9457600080fd5b50508035926020909101359150565b600060208284031215613ab557600080fd5b8135610b738161392a565b801515811461103b57600080fd5b60008060408385031215613ae157600080fd5b8235613aec8161392a565b91506020830135613afc81613ac0565b809150509250929050565b60008060008060808587031215613b1d57600080fd5b8435613b288161392a565b93506020850135613b388161392a565b925060408501359150606085013567ffffffffffffffff811115613b5b57600080fd5b8501601f81018713613b6c57600080fd5b613b7b87823560208401613981565b91505092959194509250565b60008060408385031215613b9a57600080fd5b8235613ba58161392a565b91506020830135613afc8161392a565b600181811c90821680613bc957607f821691505b602082108103613be957634e487b7160e01b600052602260045260246000fd5b50919050565b6000602080835260008454613c0381613bb5565b80848701526040600180841660008114613c245760018114613c3e57613c6c565b60ff1985168984015283151560051b890183019550613c6c565b896000528660002060005b85811015613c645781548b8201860152908301908801613c49565b8a0184019650505b509398975050505050505050565b60008154613c8781613bb5565b60018281168015613c9f5760018114613cb457613ce3565b60ff1984168752821515830287019450613ce3565b8560005260208060002060005b85811015613cda5781548a820152908401908201613cc1565b50505082870194505b5050505092915050565b6000612dc5613cfc8386613c7a565b84613c7a565b60008351613d148184602088016138ae565b673f743d302669643d60c01b9083019081528351613d398160088401602088016138ae565b01600801949350505050565b6020808252600f908201526e4e6f7420617574686f72697a65642160881b604082015260600190565b601f821115610bfa57600081815260208120601f850160051c81016020861015613d955750805b601f850160051c820191505b81811015613db457828155600101613da1565b505050505050565b815167ffffffffffffffff811115613dd657613dd661396b565b613dea81613de48454613bb5565b84613d6e565b602080601f831160018114613e1f5760008415613e075750858301515b600019600386901b1c1916600185901b178555613db4565b600085815260208120601f198616915b82811015613e4e57888601518255948401946001909101908401613e2f565b5085821015613e6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008351613e8e8184602088016138ae565b835190830190613ea28183602088016138ae565b01949350505050565b60008351613ebd8184602088016138ae565b600b60fa1b9083019081528351613edb8160018401602088016138ae565b01600101949350505050565b634e487b7160e01b600052601160045260246000fd5b600060018201613f0f57613f0f613ee7565b5060010190565b60008251613f288184602087016138ae565b605d60f81b920191825250600101919050565b8181038181111561098957610989613ee7565b634e487b7160e01b600052603260045260246000fd5b60ff818116838216019081111561098957610989613ee7565b607b60f81b815268113730b6b2911d101160b91b6001820152600a0190565b60008351613fae8184602088016138ae565b613fba81840185613c7a565b95945050505050565b60008251613fd58184602087016138ae565b61202360f01b920191825250600201919050565b60008251613ffb8184602087016138ae565b601160f91b920191825250600101919050565b600082516140208184602087016138ae565b61016160f51b920191825250600201919050565b600082516140468184602087016138ae565b6f113232b9b1b934b83a34b7b7111d101160811b920191825250601001919050565b6000825161407a8184602087016138ae565b7f204172746973743a206372617368626c6f73736f6d2c204465763a20417269659201918252506836102132b1b5b2b91760b91b6020820152602901919050565b600082516140cd8184602087016138ae565b6b044deeedccae44474404460f60a31b920191825250600c01919050565b600082516140fd8184602087016138ae565b701132bc3a32b93730b62fbab936111d101160791b920191825250601101919050565b600082516141328184602087016138ae565b6f3f743d30266c6f63616c3d312669643d60801b920191825250601001919050565b600082516141668184602087016138ae565b711130b734b6b0ba34b7b72fbab936111d101160711b920191825250601201919050565b6000825161419c8184602087016138ae565b673f743d312669643d60c01b920191825250600801919050565b600082516141c88184602087016138ae565b691134b6b0b3b2911d101160b11b920191825250600a01919050565b600082516141f68184602087016138ae565b632e6a706760e01b920191825250600401919050565b6000825161421e8184602087016138ae565b6e2261747472696275746573223a205b60881b920191825250600f01919050565b600082516142518184602087016138ae565b607b60f81b920191825250600101919050565b600082516142768184602087016138ae565b74113a3930b4ba2fba3cb832911d101129b832b2b21160591b920191825250601501919050565b600082516142af8184602087016138ae565b69113b30b63ab2911d101160b11b920191825250600a01919050565b600082516142dd8184602087016138ae565b611f4b60f21b920191825250600201919050565b600082516143038184602087016138ae565b74113a3930b4ba2fba3cb832911d10112630bcb2b91160591b920191825250601501919050565b6000825161433c8184602087016138ae565b70113b30b63ab2911d101129b430b932b21160791b920191825250601101919050565b600082516143718184602087016138ae565b607d60f81b920191825250600101919050565b600082516143968184602087016138ae565b6e113b30b63ab2911d10112230b9359160891b920191825250600f01919050565b600082516143c98184602087016138ae565b70113b30b63ab2911d1011213934b3b43a1160791b920191825250601101919050565b600081600019048311821515161561440657614406613ee7565b500290565b6000825161441d8184602087016138ae565b711132bc3a32b93730b62fb634b735911d101160711b920191825250601201919050565b600082516144538184602087016138ae565b74113130b73732b92fb4b6b0b3b2afbab936111d101160591b920191825250601501919050565b6000825161448c8184602087016138ae565b7f2273656c6c65725f6665655f62617369735f706f696e7473223a200000000000920191825250601b01919050565b600082516144cd8184602087016138ae565b71113332b2afb932b1b4b834b2b73a111d101160711b920191825250601201919050565b600083516145038184602088016138ae565b633f69643d60e01b90830190815283516145248160048401602088016138ae565b01600401949350505050565b60006020828403121561454257600080fd5b5051919050565b60006020828403121561455b57600080fd5b8151610b7381613ac0565b634e487b7160e01b600052601260045260246000fd5b60008261458b5761458b614566565b500490565b60008261459f5761459f614566565b500690565b8082018082111561098957610989613ee7565b6000816145c6576145c6613ee7565b506000190190565b600181815b808511156146095781600019048211156145ef576145ef613ee7565b808516156145fc57918102915b93841c93908002906145d3565b509250929050565b60008261462057506001610989565b8161462d57506000610989565b8160018114614643576002811461464d57614669565b6001915050610989565b60ff84111561465e5761465e613ee7565b50506001821b610989565b5060208310610133831016604e8410600b841016171561468c575081810a610989565b61469683836145ce565b80600019048211156146aa576146aa613ee7565b029392505050565b6000610b738383614611565b600060ff8316806146d1576146d1614566565b8060ff84160491505092915050565b600060ff821660ff84168160ff04811182151516156146aa576146aa613ee7565b60ff828116828216039081111561098957610989613ee7565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061474d908301846138d2565b9695505050505050565b60006020828403121561476957600080fd5b8151610b738161387b56fea2646970667358221220f22338b77e09402445511ba2c5fc75d7bda789e8c5acd0a1cb1344c65f156c2464736f6c63430008100033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000064255524e4552000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064255524e45520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062d4255524e455220697320612064796e616d69632063727970746f61727420736572696573206261736564206f6e206c69766520457468657265756d2067617320707269636520646174612e204120746f74616c206f662032353620696e746572636f6e6e656374656420617274776f726b7320646570656e64656e74206f6e20746865207374617465206f662074686520626c6f636b636861696e2e20417320457468657265756d206e6574776f726b20757361676520696e637265617365732c2064756520746f20707269636520766f6c6174696c6974792c204e46542073616c6573206f72206f7468657220666163746f72732c2061206d6f726520696d7061637466756c20617274776f726b20646576656c6f70732e205c5c5c5c6e5c5c5c5c6e4761732070726963652064617461206973206d6164652066726f6d2074686520636f6d706574696e6720646573697265732c20696e74656e74696f6e7320616e642062656c69656673206f66206d696c6c696f6e73206f6620656e7469746965732e205472616e73616374696f6e73206f6e20457468657265756d20637265617465206f7665727768656c6d696e6720616d6f756e7473206f6620696e666f726d6174696f6e20696e20626c6f636b2074696d652c206379636c6963616c6c792072657665616c696e6720756e666f72657365656e207374617465732e204255524e4552207069637475726573207468697320636f6e74696e756f757320646563656e7472616c697365642070726f636573732e2054686520617274776f726b206973206e657665722066696e69736865642c207468657265277320616c776179732061206e65772076617269616e742e5c5c5c5c6e5c5c5c5c6e4974e280997320636f6d6d6f6e20746f2066657469736869736520746563686e6f6c6f677920616e642077652063616e20656173696c79206265636f6d6520686f6f6b6564206f6e20746865206e6574776f726b2073797374656d73207765207573652e2054686520457468657265756d20626c6f636b636861696e20697320696e666c75656e7469616c206f6e206f7572206c6976657320616e64207468697320617274776f726b20747269657320746f2072657665616c20736f6d65206f662069747320756e6465726c79696e67206265686176696f7572207468726f756768206162737472616374696f6e2e5c5c5c5c6e5c5c5c5c6e54686520696d6167652066696c657320696e204255524e455220626567696e206173207069637475726573206f66207472756520706879736963616c206761732e2054686579e28099726520657874727564656420696e746f20612074686972642064696d656e73696f6e2c20726f746174656420616e642070726f63657373656420756e74696c2074686579e28099726520756e7265636f676e697361626c652e205468657365206e657720666f726d7320696e74657261637420646966666572656e746c792077697468206f6e6520616e6f7468657220696e2065616368206469676974616c20617274776f726b2e5c5c5c5c6e5c5c5c5c6e4576657279204255524e455220686173206120756e69717565206261736520696d6167652c20756e69717565207365656420616e64203630206d696c6c696f6e20706f74656e7469616c207374617465732e20526172657220e280986461726be2809920616e6420e28098627269676874272074797065732063616e2068617665206f76657220312062696c6c696f6e207374617465732e2041706172742066726f6d2074686520626173652c20616c6c206c61796572732061726520736861726564206265747765656e20616c6c20636f6c6c6563746f72732c207468656e206d6978656420756e697175656c7920696e20656163682070696563652e20546865206c6179657273206172652073746f7265642061732073657061726174652066696c6573206163726f737320495046532e20536c6f77657220706965636573206861766520686967686572207261726974792e5c5c5c5c6e5c5c5c5c6e4255524e45522069736ee280997420636f6e74726f6c6c656420627920746865206172746973742c206275742062792074686520457468657265756d205669727475616c204d616368696e6520616e64206974732075736572732e00000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106103355760003560e01c8063704b6c02116101ab578063ad9c7f7f116100f7578063dc42c25511610095578063e985e9c51161006f578063e985e9c5146108fc578063eddd0d9c1461091c578063f4f3b2001461093c578063fce58c171461094f57600080fd5b8063dc42c255146108a7578063e6120413146108c7578063e8a3d485146108e757600080fd5b8063ca83eb71116100d1578063ca83eb7114610848578063caa178c21461085d578063d3c5915a14610872578063dc1111721461088757600080fd5b8063ad9c7f7f146107e8578063b88d4fde14610808578063c87b56dd1461082857600080fd5b80638456cb5911610164578063963c35461161013e578063963c35461461075f57806397a6a8ed1461077f5780639ed6e55d146107b3578063a22cb465146107c857600080fd5b80638456cb5914610715578063938e3d7b1461072a57806395d89b411461074a57600080fd5b8063704b6c021461067657806370a08231146106965780637129e629146106b65780637284e416146106cb57806375cd9fe6146106e05780637c6e551d1461070057600080fd5b806329c744b2116102855780634f07de091161022357806362a5af3b116101fd57806362a5af3b146106185780636352211e1461062d578063656605d61461064d5780636edf6b991461066157600080fd5b80634f07de09146105b85780635244475a146105d85780635bee29b7146105f857600080fd5b80633ccfd60b1161025f5780633ccfd60b1461055b5780633f4ba83a1461056357806342842e0e1461057857806342966c681461059857600080fd5b806329c744b2146104e75780632a55205a146104fc57806330176e131461053b57600080fd5b80630f920904116102f25780631249c58b116102cc5780631249c58b14610480578063198b38b51461048857806323548b8b146104a857806323b872dd146104c757600080fd5b80630f9209041461042b5780630fa44bc11461044b578063118010821461046057600080fd5b806301ffc9a71461033a57806306fdde031461036f578063081812fc146103915780630924d84f146103c9578063095ea7b3146103e95780630be4d2b81461040b575b600080fd5b34801561034657600080fd5b5061035a610355366004613891565b610964565b60405190151581526020015b60405180910390f35b34801561037b57600080fd5b5061038461098f565b60405161036691906138fe565b34801561039d57600080fd5b506103b16103ac366004613911565b610a21565b6040516001600160a01b039091168152602001610366565b3480156103d557600080fd5b506103846103e4366004613911565b610a8e565b3480156103f557600080fd5b5061040961040436600461393f565b610b7a565b005b34801561041757600080fd5b506104096104263660046139f7565b610bff565b34801561043757600080fd5b506104096104463660046139f7565b610c47565b34801561045757600080fd5b50610384610c8b565b34801561046c57600080fd5b5061040961047b3660046139f7565b610d8e565b610409610dd2565b34801561049457600080fd5b506104096104a33660046139f7565b61103e565b3480156104b457600080fd5b506009545b604051908152602001610366565b3480156104d357600080fd5b506104096104e2366004613a40565b6110af565b3480156104f357600080fd5b506103846110e1565b34801561050857600080fd5b5061051c610517366004613a81565b6110f0565b604080516001600160a01b039093168352602083019190915201610366565b34801561054757600080fd5b506104096105563660046139f7565b6111dd565b610409611221565b34801561056f57600080fd5b5061040961135a565b34801561058457600080fd5b50610409610593366004613a40565b6113f0565b3480156105a457600080fd5b506104096105b3366004613911565b61140b565b3480156105c457600080fd5b506104096105d3366004613911565b611439565b3480156105e457600080fd5b506104096105f3366004613a40565b6114a3565b34801561060457600080fd5b50610384610613366004613911565b6114e9565b34801561062457600080fd5b50610409611e49565b34801561063957600080fd5b506103b1610648366004613911565b611ebf565b34801561065957600080fd5b50600161035a565b34801561066d57600080fd5b50610384611f16565b34801561068257600080fd5b50610409610691366004613aa3565b612367565b3480156106a257600080fd5b506104b96106b1366004613aa3565b6123df565b3480156106c257600080fd5b50610384612466565b3480156106d757600080fd5b50610384612475565b3480156106ec57600080fd5b506104096106fb3660046139f7565b612484565b34801561070c57600080fd5b506007546104b9565b34801561072157600080fd5b506104096124c8565b34801561073657600080fd5b506104096107453660046139f7565b612537565b34801561075657600080fd5b5061038461257b565b34801561076b57600080fd5b5061040961077a366004613911565b61258a565b34801561078b57600080fd5b5061079a63152a902d60e11b81565b6040516001600160e01b03199091168152602001610366565b3480156107bf57600080fd5b5061038461268c565b3480156107d457600080fd5b506104096107e3366004613ace565b61269b565b3480156107f457600080fd5b506104096108033660046139f7565b61275f565b34801561081457600080fd5b50610409610823366004613b07565b6127d0565b34801561083457600080fd5b50610384610843366004613911565b612808565b34801561085457600080fd5b50600a546104b9565b34801561086957600080fd5b506103846128c1565b34801561087e57600080fd5b506008546104b9565b34801561089357600080fd5b506104096108a23660046139f7565b6128ec565b3480156108b357600080fd5b506104096108c23660046139f7565b61295d565b3480156108d357600080fd5b506104096108e23660046139f7565b6129a1565b3480156108f357600080fd5b50610384612a12565b34801561090857600080fd5b5061035a610917366004613b87565b612a29565b34801561092857600080fd5b50610409610937366004613911565b612a57565b61040961094a366004613aa3565b612ac1565b34801561095b57600080fd5b50610384612c40565b600063152a902d60e11b6001600160e01b031983161480610989575061098982612c57565b92915050565b6060600e805461099e90613bb5565b80601f01602080910402602001604051908101604052809291908181526020018280546109ca90613bb5565b8015610a175780601f106109ec57610100808354040283529160200191610a17565b820191906000526020600020905b8154815290600101906020018083116109fa57829003601f168201915b5050505050905090565b6000610a2c82612ca7565b610a725760405162461bcd60e51b81526020600482015260126024820152714e6f6e6578697374656e7420746f6b656e2160701b60448201526064015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6060602c82610ab05760405162461bcd60e51b8152600401610a699190613bef565b50600954821115602c90610ad75760405162461bcd60e51b8152600401610a699190613bef565b50610ae182612ca7565b602e90610b015760405162461bcd60e51b8152600401610a699190613bef565b50600060116015604051602001610b19929190613ced565b60405160208183030381529060405290506000815111610b485760405180602001604052806000815250610b73565b80610b5284612cc4565b604051602001610b63929190613d02565b6040516020818303038152906040525b9392505050565b6000610b8582611ebf565b9050806001600160a01b0316836001600160a01b031603610bb85760405162461bcd60e51b8152600401610a6990613d45565b336001600160a01b0382161480610bd45750610bd48133612a29565b610bf05760405162461bcd60e51b8152600401610a6990613d45565b610bfa8383612dcd565b505050565b600c546001600160a01b0316336001600160a01b031614602b90610c365760405162461bcd60e51b8152600401610a699190613bef565b506012610c438282613dbc565b5050565b600c546001600160a01b0316336001600160a01b031614602b90610c7e5760405162461bcd60e51b8152600401610a699190613bef565b506015610c438282613dbc565b606080604051602001610ca590605b60f81b815260010190565b60405160208183030381529060405290506000600b541115610d675760015b600b548111610d655780600103610d16576000818152602960205260409020548290610cef90612e3b565b604051602001610d00929190613e7c565b6040516020818303038152906040529150610d53565b6000818152602960205260409020548290610d3090612e3b565b604051602001610d41929190613eab565b60405160208183030381529060405291505b80610d5d81613efd565b915050610cc4565b505b80604051602001610d789190613f16565b60408051601f1981840301815291905292915050565b600c546001600160a01b0316336001600160a01b031614602b90610dc55760405162461bcd60e51b8152600401610a699190613bef565b506016610c438282613dbc565b602a54602f9060ff1615610df95760405162461bcd60e51b8152600401610a699190613bef565b50600a54610e06336123df565b10610e665760405162461bcd60e51b815260206004820152602a60248201527f4d6f7265207468616e206d6178206d696e747320616c6c6f77656420666f72206044820152697468697320616464792160b01b6064820152608401610a69565b600b54600954610e769190613f3b565b610e7f336123df565b10610edb5760405162461bcd60e51b815260206004820152602660248201527f5468697320616374696f6e2077696c6c207375727061737320746865206d696e60448201526574206361702160d01b6064820152608401610a69565b33610f175760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610a69565b600c546001600160a01b0316336001600160a01b031614610f7657600854341015610f765760405162461bcd60e51b815260206004820152600f60248201526e4e6f7420656e6f756768204554482160881b6044820152606401610a69565b60005b8061103b576040805142602080830191909152448284015233606090811b6bffffffffffffffffffffffff1916908301528251605481840301815260749092019092528051910120600081811a90610fd2826001613f64565b60ff169050610fe081612ca7565b61103357600081118015610ff657506009548111155b15611033576110053382612f47565b600b805490600061101583613efd565b9091555050600b546000908152602960205260409020819055600193505b505050610f79565b50565b600c546001600160a01b0316336001600160a01b031614602b906110755760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff16156110a25760405162461bcd60e51b8152600401610a699190613bef565b506036610c438282613dbc565b6110ba335b82612fce565b6110d65760405162461bcd60e51b8152600401610a6990613d45565b610bfa838383613073565b60606036805461099e90613bb5565b600080602c846111135760405162461bcd60e51b8152600401610a699190613bef565b50600954841115602c9061113a5760405162461bcd60e51b8152600401610a699190613bef565b5061114484612ca7565b602e906111645760405162461bcd60e51b8152600401610a699190613bef565b50606383116111ab5760405162461bcd60e51b8152602060048201526013602482015272507269636520697320746f6f20736d616c6c2160681b6044820152606401610a69565b6007546000906111c6906111c086606461321b565b9061326c565b600c546001600160a01b0316969095509350505050565b600c546001600160a01b0316336001600160a01b031614602b906112145760405162461bcd60e51b8152600401610a699190613bef565b506014610c438282613dbc565b602a54602f9060ff16156112485760405162461bcd60e51b8152600401610a699190613bef565b50600c546001600160a01b0316336001600160a01b031614602b906112805760405162461bcd60e51b8152600401610a699190613bef565b5047806112cf5760405162461bcd60e51b815260206004820152601960248201527f4e6f206574686572206c65667420746f207769746864726177000000000000006044820152606401610a69565b604051600090339083908381818185875af1925050503d8060008114611311576040519150601f19603f3d011682016040523d82523d6000602084013e611316565b606091505b5050905080610c435760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610a69565b600c546001600160a01b0316336001600160a01b031614602b906113915760405162461bcd60e51b8152600401610a699190613bef565b50602a5460ff166113e45760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261637420697320616c726561647920756e706175736564210000006044820152606401610a69565b602a805460ff19169055565b610bfa838383604051806020016040528060008152506127d0565b611414336110b4565b6114305760405162461bcd60e51b8152600401610a6990613d45565b61103b816132e4565b600c546001600160a01b0316336001600160a01b031614602b906114705760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff161561149d5760405162461bcd60e51b8152600401610a699190613bef565b50600755565b80826001600160a01b0316846001600160a01b03167fa4835412df2a3ce32882e9e735e6d40c263d116b4f169bd11a6e281979eed06160405160405180910390a4505050565b6060602c8261150b5760405162461bcd60e51b8152600401610a699190613bef565b50600954821115602c906115325760405162461bcd60e51b8152600401610a699190613bef565b5061153c82612ca7565b602e9061155c5760405162461bcd60e51b8152600401610a699190613bef565b506000606061156a84613318565b915060405160200161157b90613f7d565b604051602081830303815290604052905080600f6040516020016115a0929190613f9c565b6040516020818303038152906040529050806040516020016115c29190613fc3565b6040516020818303038152906040529050806115dd85612e3b565b6040516020016115ee929190613e7c565b6040516020818303038152906040529050806040516020016116109190613fe9565b604051602081830303815290604052905080604051602001611632919061400e565b6040516020818303038152906040529050806040516020016116549190614034565b6040516020818303038152906040529050806010604051602001611679929190613f9c565b60405160208183030381529060405290508060405160200161169b9190614068565b6040516020818303038152906040529050806040516020016116bd9190613fe9565b6040516020818303038152906040529050806040516020016116df919061400e565b60405160208183030381529060405290508060405160200161170191906140bb565b60405160208183030381529060405290508061172461171f86611ebf565b613360565b604051602001611735929190613e7c565b6040516020818303038152906040529050806040516020016117579190613fe9565b604051602081830303815290604052905080604051602001611779919061400e565b60405160208183030381529060405290508060405160200161179b91906140eb565b60405160208183030381529060405290508060116040516020016117c0929190613f9c565b60405160208183030381529060405290508060156040516020016117e5929190613f9c565b6040516020818303038152906040529050806040516020016118079190614120565b60405160208183030381529060405290508061182285612e3b565b604051602001611833929190613e7c565b6040516020818303038152906040529050806040516020016118559190613fe9565b604051602081830303815290604052905080604051602001611877919061400e565b6040516020818303038152906040529050806040516020016118999190614154565b60405160208183030381529060405290508060116040516020016118be929190613f9c565b60405160208183030381529060405290508060156040516020016118e3929190613f9c565b604051602081830303815290604052905080604051602001611905919061418a565b60405160208183030381529060405290508061192085612e3b565b604051602001611931929190613e7c565b6040516020818303038152906040529050806040516020016119539190613fe9565b604051602081830303815290604052905080604051602001611975919061400e565b60405160208183030381529060405290508060405160200161199791906141b6565b60405160208183030381529060405290508060116040516020016119bc929190613f9c565b60405160208183030381529060405290508060166040516020016119e1929190613f9c565b6040516020818303038152906040529050806119fc85612e3b565b604051602001611a0d929190613e7c565b604051602081830303815290604052905080604051602001611a2f91906141e4565b604051602081830303815290604052905080604051602001611a519190613fe9565b604051602081830303815290604052905080604051602001611a73919061400e565b604051602081830303815290604052905080604051602001611a95919061420c565b604051602081830303815290604052905080604051602001611ab7919061423f565b604051602081830303815290604052905080604051602001611ad99190614264565b604051602081830303815290604052905080604051602001611afb919061400e565b604051602081830303815290604052905080604051602001611b1d919061429d565b604051602081830303815290604052905080611b38856134a7565b604051602001611b49929190613e7c565b604051602081830303815290604052905080604051602001611b6b9190613fe9565b604051602081830303815290604052905080604051602001611b8d91906142cb565b604051602081830303815290604052905080604051602001611baf919061423f565b604051602081830303815290604052905080604051602001611bd191906142f1565b604051602081830303815290604052905080604051602001611bf3919061400e565b604051602081830303815290604052905080604051602001611c15919061432a565b604051602081830303815290604052905080604051602001611c37919061435f565b60405160208183030381529060405290508160021480611c575750816003145b15611d295780604051602001611c6d919061400e565b604051602081830303815290604052905080604051602001611c8f919061423f565b604051602081830303815290604052905080604051602001611cb191906142f1565b604051602081830303815290604052905080604051602001611cd3919061400e565b604051602081830303815290604052905080604051602001611cf59190614384565b604051602081830303815290604052905080604051602001611d17919061435f565b60405160208183030381529060405290505b81600303611dfe5780604051602001611d42919061400e565b604051602081830303815290604052905080604051602001611d64919061423f565b604051602081830303815290604052905080604051602001611d8691906142f1565b604051602081830303815290604052905080604051602001611da8919061400e565b604051602081830303815290604052905080604051602001611dca91906143b7565b604051602081830303815290604052905080604051602001611dec919061435f565b60405160208183030381529060405290505b80604051602001611e0f9190613f16565b604051602081830303815290604052905080604051602001611e31919061435f565b60408051601f19818403018152919052949350505050565b600c546001600160a01b0316336001600160a01b031614602b90611e805760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff1615611ead5760405162461bcd60e51b8152600401610a699190613bef565b50602a805461ff001916610100179055565b6000818152600360205260408120546001600160a01b0316806109895760405162461bcd60e51b815260206004820152600f60248201526e4e6f74206d696e746564207965742160881b6044820152606401610a69565b60608060006007546064611f2a91906143ec565b9050604051602001611f3b90613f7d565b604051602081830303815290604052915081600e604051602001611f60929190613f9c565b604051602081830303815290604052915081604051602001611f829190613fe9565b604051602081830303815290604052915081604051602001611fa4919061400e565b604051602081830303815290604052915081604051602001611fc69190614034565b6040516020818303038152906040529150816010604051602001611feb929190613f9c565b60405160208183030381529060405291508160405160200161200d9190613fe9565b60405160208183030381529060405291508160405160200161202f919061400e565b60405160208183030381529060405291508160405160200161205191906141b6565b6040516020818303038152906040529150816011604051602001612076929190613f9c565b604051602081830303815290604052915081601860405160200161209b929190613f9c565b6040516020818303038152906040529150816040516020016120bd9190613fe9565b6040516020818303038152906040529150816040516020016120df919061400e565b604051602081830303815290604052915081604051602001612101919061440b565b6040516020818303038152906040529150816011604051602001612126929190613f9c565b604051602081830303815290604052915081601260405160200161214b929190613f9c565b60405160208183030381529060405291508160405160200161216d9190613fe9565b60405160208183030381529060405291508160405160200161218f919061400e565b6040516020818303038152906040529150816040516020016121b19190614441565b60405160208183030381529060405291508160116040516020016121d6929190613f9c565b60405160208183030381529060405291508160176040516020016121fb929190613f9c565b60405160208183030381529060405291508160405160200161221d9190613fe9565b60405160208183030381529060405291508160405160200161223f919061400e565b604051602081830303815290604052915081604051602001612261919061447a565b60405160208183030381529060405291508161227c82612e3b565b60405160200161228d929190613e7c565b6040516020818303038152906040529150816040516020016122af919061400e565b6040516020818303038152906040529150816040516020016122d191906144bb565b60408051601f19818403018152919052600c5490925082906122fb906001600160a01b0316613360565b60405160200161230c929190613e7c565b60405160208183030381529060405291508160405160200161232e9190613fe9565b604051602081830303815290604052915081604051602001612350919061435f565b60408051601f198184030181529190529392505050565b600c546001600160a01b0316336001600160a01b0316148061239c5750600d546001600160a01b0316336001600160a01b0316145b602b906123bc5760405162461bcd60e51b8152600401610a699190613bef565b50600c80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b03821661244a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a69565b506001600160a01b031660009081526004602052604090205490565b60606035805461099e90613bb5565b60606010805461099e90613bb5565b600c546001600160a01b0316336001600160a01b031614602b906124bb5760405162461bcd60e51b8152600401610a699190613bef565b506011610c438282613dbc565b600c546001600160a01b0316336001600160a01b031614602b906124ff5760405162461bcd60e51b8152600401610a699190613bef565b50602a54602f9060ff16156125275760405162461bcd60e51b8152600401610a699190613bef565b50602a805460ff19166001179055565b600c546001600160a01b0316336001600160a01b031614602b9061256e5760405162461bcd60e51b8152600401610a699190613bef565b506013610c438282613dbc565b6060600f805461099e90613bb5565b600c546001600160a01b0316336001600160a01b031614602b906125c15760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff16156125ee5760405162461bcd60e51b8152600401610a699190613bef565b5061010181106126405760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742065786365656420746f74616c20737570706c792100000000006044820152606401610a69565b600081116126875760405162461bcd60e51b81526020600482015260146024820152734d7573742062652031206f72206869676865722160601b6044820152606401610a69565b600a55565b60606034805461099e90613bb5565b336001600160a01b038316036126f35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a69565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600c546001600160a01b0316336001600160a01b031614602b906127965760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff16156127c35760405162461bcd60e51b8152600401610a699190613bef565b506035610c438282613dbc565b6127da3383612fce565b6127f65760405162461bcd60e51b8152600401610a6990613d45565b61280284848484613661565b50505050565b6060602c8261282a5760405162461bcd60e51b8152600401610a699190613bef565b50600954821115602c906128515760405162461bcd60e51b8152600401610a699190613bef565b5061285b82612ca7565b602e9061287b5760405162461bcd60e51b8152600401610a699190613bef565b5060006128866136e2565b905060008151116128a65760405180602001604052806000815250610b73565b806128b084612cc4565b604051602001610b639291906144f1565b6060601160186040516020016128d8929190613ced565b604051602081830303815290604052905090565b600c546001600160a01b0316336001600160a01b031614602b906129235760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff16156129505760405162461bcd60e51b8152600401610a699190613bef565b506034610c438282613dbc565b600c546001600160a01b0316336001600160a01b031614602b906129945760405162461bcd60e51b8152600401610a699190613bef565b506018610c438282613dbc565b600c546001600160a01b0316336001600160a01b031614602b906129d85760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff1615612a055760405162461bcd60e51b8152600401610a699190613bef565b506010610c438282613dbc565b6060601160136040516020016128d8929190613ced565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b600c546001600160a01b0316336001600160a01b031614602b90612a8e5760405162461bcd60e51b8152600401610a699190613bef565b50602a54603090610100900460ff1615612abb5760405162461bcd60e51b8152600401610a699190613bef565b50600855565b602a54602f9060ff1615612ae85760405162461bcd60e51b8152600401610a699190613bef565b50600c546001600160a01b0316336001600160a01b031614602b90612b205760405162461bcd60e51b8152600401610a699190613bef565b506040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015612b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b939190614530565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c029190614549565b61103b5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610a69565b6060601160166040516020016128d8929190613ced565b60006001600160e01b031982166380ac58cd60e01b1480612c8857506001600160e01b03198216635b5e139f60e01b145b8061098957506301ffc9a760e01b6001600160e01b0319831614610989565b6000908152600360205260409020546001600160a01b0316151590565b606081600003612ceb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612d155780612cff81613efd565b9150612d0e9050600a8361457c565b9150612cef565b60008167ffffffffffffffff811115612d3057612d3061396b565b6040519080825280601f01601f191660200182016040528015612d5a576020820181803683370190505b5090505b8415612dc557612d6f600183613f3b565b9150612d7c600a86614590565b612d879060306145a4565b60f81b818381518110612d9c57612d9c613f4e565b60200101906001600160f81b031916908160001a905350612dbe600a8661457c565b9450612d5e565b949350505050565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612e0282611ebf565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606081600003612e625750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612e8c5780612e7681613efd565b9150612e859050600a8361457c565b9150612e66565b60008167ffffffffffffffff811115612ea757612ea761396b565b6040519080825280601f01601f191660200182016040528015612ed1576020820181803683370190505b508593509050815b8315612f3e57612eea600a85614590565b612ef59060306145a4565b60f81b82612f02836145b7565b92508281518110612f1557612f15613f4e565b60200101906001600160f81b031916908160001a905350612f37600a8561457c565b9350612ed9565b50949350505050565b6001600160a01b0382166000908152600460205260408120805460019290612f709084906145a4565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612fd982612ca7565b61301d5760405162461bcd60e51b8152602060048201526015602482015274546f6b656e20646f6573206e6f742065786973742160581b6044820152606401610a69565b600061302883611ebf565b9050806001600160a01b0316846001600160a01b031614806130635750836001600160a01b031661305884610a21565b6001600160a01b0316145b80612dc55750612dc58185612a29565b826001600160a01b031661308682611ebf565b6001600160a01b0316146130ac5760405162461bcd60e51b8152600401610a6990613d45565b6001600160a01b0382166131025760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74207472616e7366657220746f207a65726f2061646479210000006044820152606401610a69565b6001600160a01b0382166131585760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74207472616e7366657220746f207a65726f2061646479210000006044820152606401610a69565b613163600082612dcd565b6001600160a01b038316600090815260046020526040812080546001929061318c908490613f3b565b90915550506001600160a01b03821660009081526004602052604081208054600192906131ba9084906145a4565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008082116132605760405162461bcd60e51b81526020600482015260116024820152704469766973696f6e206279207a65726f2160781b6044820152606401610a69565b6000612dc5838561457c565b60008260000361327e57506000610989565b600061328a83856143ec565b905082613297858361457c565b14610b735760405162461bcd60e51b815260206004820152601860248201527f4d756c7469706c69636174696f6e206f766572666c6f772100000000000000006044820152606401610a69565b60405162461bcd60e51b815260206004820152600960248201526844697361626c65642160b81b6044820152606401610a69565b600080821180156133295750601982105b1561333657506003919050565b6018821180156133465750604d82105b1561335357506002919050565b506001919050565b919050565b60408051602880825260608281019093526000919060208201818036833701905050905060005b60148110156134a057600061339d826013613f3b565b6133a89060086143ec565b6133b39060026146b2565b6133c6906001600160a01b03871661457c565b60f81b9050600060108260f81c6133dd91906146be565b60f81b905060008160f81c60106133f491906146e0565b8360f81c6134029190614701565b60f81b9050613410826136f9565b8561341c8660026143ec565b8151811061342c5761342c613f4e565b60200101906001600160f81b031916908160001a90535061344c816136f9565b856134588660026143ec565b6134639060016145a4565b8151811061347357613473613f4e565b60200101906001600160f81b031916908160001a905350505050808061349890613efd565b915050613387565b5092915050565b60606000821180156134b95750601082105b1561355057603180546134cb90613bb5565b80601f01602080910402602001604051908101604052809291908181526020018280546134f790613bb5565b80156135445780601f1061351957610100808354040283529160200191613544565b820191906000526020600020905b81548152906001019060200180831161352757829003601f168201915b50505050509050919050565b600f821180156135605750601682105b1561357257603280546134cb90613bb5565b6015821180156135825750601982105b1561359457603380546134cb90613bb5565b6018821180156135a45750603c82105b156135b657603180546134cb90613bb5565b603b821180156135c65750604882105b156135d857603280546134cb90613bb5565b6047821180156135e85750604d82105b156135fa57603380546134cb90613bb5565b604c8211801561360a575060cd82105b1561361c57603180546134cb90613bb5565b60cc8211801561362c575060f682105b1561363e57603280546134cb90613bb5565b60f58211801561364f575061010182105b1561335b57603380546134cb90613bb5565b61366c848484613073565b6136788484848461372f565b6128025760405162461bcd60e51b815260206004820152603560248201527f417474656d70746564207472616e7366657220746f206e6f6e20455243373231604482015274526563656976657220696d706c656d656e7465722160581b6064820152608401610a69565b6060601160146040516020016128d8929190613ced565b6000600a60f883901c10156137205761371760f883901c6030613f64565b60f81b92915050565b61371760f883901c6057613f64565b60006001600160a01b0384163b1561387057604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061377390339089908890889060040161471a565b6020604051808303816000875af19250505080156137ae575060408051601f3d908101601f191682019092526137ab91810190614757565b60015b613856573d8080156137dc576040519150601f19603f3d011682016040523d82523d6000602084013e6137e1565b606091505b50805160000361384e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610a69565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612dc5565b506001949350505050565b6001600160e01b03198116811461103b57600080fd5b6000602082840312156138a357600080fd5b8135610b738161387b565b60005b838110156138c95781810151838201526020016138b1565b50506000910152565b600081518084526138ea8160208601602086016138ae565b601f01601f19169290920160200192915050565b602081526000610b7360208301846138d2565b60006020828403121561392357600080fd5b5035919050565b6001600160a01b038116811461103b57600080fd5b6000806040838503121561395257600080fd5b823561395d8161392a565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561399c5761399c61396b565b604051601f8501601f19908116603f011681019082821181831017156139c4576139c461396b565b816040528093508581528686860111156139dd57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215613a0957600080fd5b813567ffffffffffffffff811115613a2057600080fd5b8201601f81018413613a3157600080fd5b612dc584823560208401613981565b600080600060608486031215613a5557600080fd5b8335613a608161392a565b92506020840135613a708161392a565b929592945050506040919091013590565b60008060408385031215613a9457600080fd5b50508035926020909101359150565b600060208284031215613ab557600080fd5b8135610b738161392a565b801515811461103b57600080fd5b60008060408385031215613ae157600080fd5b8235613aec8161392a565b91506020830135613afc81613ac0565b809150509250929050565b60008060008060808587031215613b1d57600080fd5b8435613b288161392a565b93506020850135613b388161392a565b925060408501359150606085013567ffffffffffffffff811115613b5b57600080fd5b8501601f81018713613b6c57600080fd5b613b7b87823560208401613981565b91505092959194509250565b60008060408385031215613b9a57600080fd5b8235613ba58161392a565b91506020830135613afc8161392a565b600181811c90821680613bc957607f821691505b602082108103613be957634e487b7160e01b600052602260045260246000fd5b50919050565b6000602080835260008454613c0381613bb5565b80848701526040600180841660008114613c245760018114613c3e57613c6c565b60ff1985168984015283151560051b890183019550613c6c565b896000528660002060005b85811015613c645781548b8201860152908301908801613c49565b8a0184019650505b509398975050505050505050565b60008154613c8781613bb5565b60018281168015613c9f5760018114613cb457613ce3565b60ff1984168752821515830287019450613ce3565b8560005260208060002060005b85811015613cda5781548a820152908401908201613cc1565b50505082870194505b5050505092915050565b6000612dc5613cfc8386613c7a565b84613c7a565b60008351613d148184602088016138ae565b673f743d302669643d60c01b9083019081528351613d398160088401602088016138ae565b01600801949350505050565b6020808252600f908201526e4e6f7420617574686f72697a65642160881b604082015260600190565b601f821115610bfa57600081815260208120601f850160051c81016020861015613d955750805b601f850160051c820191505b81811015613db457828155600101613da1565b505050505050565b815167ffffffffffffffff811115613dd657613dd661396b565b613dea81613de48454613bb5565b84613d6e565b602080601f831160018114613e1f5760008415613e075750858301515b600019600386901b1c1916600185901b178555613db4565b600085815260208120601f198616915b82811015613e4e57888601518255948401946001909101908401613e2f565b5085821015613e6c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008351613e8e8184602088016138ae565b835190830190613ea28183602088016138ae565b01949350505050565b60008351613ebd8184602088016138ae565b600b60fa1b9083019081528351613edb8160018401602088016138ae565b01600101949350505050565b634e487b7160e01b600052601160045260246000fd5b600060018201613f0f57613f0f613ee7565b5060010190565b60008251613f288184602087016138ae565b605d60f81b920191825250600101919050565b8181038181111561098957610989613ee7565b634e487b7160e01b600052603260045260246000fd5b60ff818116838216019081111561098957610989613ee7565b607b60f81b815268113730b6b2911d101160b91b6001820152600a0190565b60008351613fae8184602088016138ae565b613fba81840185613c7a565b95945050505050565b60008251613fd58184602087016138ae565b61202360f01b920191825250600201919050565b60008251613ffb8184602087016138ae565b601160f91b920191825250600101919050565b600082516140208184602087016138ae565b61016160f51b920191825250600201919050565b600082516140468184602087016138ae565b6f113232b9b1b934b83a34b7b7111d101160811b920191825250601001919050565b6000825161407a8184602087016138ae565b7f204172746973743a206372617368626c6f73736f6d2c204465763a20417269659201918252506836102132b1b5b2b91760b91b6020820152602901919050565b600082516140cd8184602087016138ae565b6b044deeedccae44474404460f60a31b920191825250600c01919050565b600082516140fd8184602087016138ae565b701132bc3a32b93730b62fbab936111d101160791b920191825250601101919050565b600082516141328184602087016138ae565b6f3f743d30266c6f63616c3d312669643d60801b920191825250601001919050565b600082516141668184602087016138ae565b711130b734b6b0ba34b7b72fbab936111d101160711b920191825250601201919050565b6000825161419c8184602087016138ae565b673f743d312669643d60c01b920191825250600801919050565b600082516141c88184602087016138ae565b691134b6b0b3b2911d101160b11b920191825250600a01919050565b600082516141f68184602087016138ae565b632e6a706760e01b920191825250600401919050565b6000825161421e8184602087016138ae565b6e2261747472696275746573223a205b60881b920191825250600f01919050565b600082516142518184602087016138ae565b607b60f81b920191825250600101919050565b600082516142768184602087016138ae565b74113a3930b4ba2fba3cb832911d101129b832b2b21160591b920191825250601501919050565b600082516142af8184602087016138ae565b69113b30b63ab2911d101160b11b920191825250600a01919050565b600082516142dd8184602087016138ae565b611f4b60f21b920191825250600201919050565b600082516143038184602087016138ae565b74113a3930b4ba2fba3cb832911d10112630bcb2b91160591b920191825250601501919050565b6000825161433c8184602087016138ae565b70113b30b63ab2911d101129b430b932b21160791b920191825250601101919050565b600082516143718184602087016138ae565b607d60f81b920191825250600101919050565b600082516143968184602087016138ae565b6e113b30b63ab2911d10112230b9359160891b920191825250600f01919050565b600082516143c98184602087016138ae565b70113b30b63ab2911d1011213934b3b43a1160791b920191825250601101919050565b600081600019048311821515161561440657614406613ee7565b500290565b6000825161441d8184602087016138ae565b711132bc3a32b93730b62fb634b735911d101160711b920191825250601201919050565b600082516144538184602087016138ae565b74113130b73732b92fb4b6b0b3b2afbab936111d101160591b920191825250601501919050565b6000825161448c8184602087016138ae565b7f2273656c6c65725f6665655f62617369735f706f696e7473223a200000000000920191825250601b01919050565b600082516144cd8184602087016138ae565b71113332b2afb932b1b4b834b2b73a111d101160711b920191825250601201919050565b600083516145038184602088016138ae565b633f69643d60e01b90830190815283516145248160048401602088016138ae565b01600401949350505050565b60006020828403121561454257600080fd5b5051919050565b60006020828403121561455b57600080fd5b8151610b7381613ac0565b634e487b7160e01b600052601260045260246000fd5b60008261458b5761458b614566565b500490565b60008261459f5761459f614566565b500690565b8082018082111561098957610989613ee7565b6000816145c6576145c6613ee7565b506000190190565b600181815b808511156146095781600019048211156145ef576145ef613ee7565b808516156145fc57918102915b93841c93908002906145d3565b509250929050565b60008261462057506001610989565b8161462d57506000610989565b8160018114614643576002811461464d57614669565b6001915050610989565b60ff84111561465e5761465e613ee7565b50506001821b610989565b5060208310610133831016604e8410600b841016171561468c575081810a610989565b61469683836145ce565b80600019048211156146aa576146aa613ee7565b029392505050565b6000610b738383614611565b600060ff8316806146d1576146d1614566565b8060ff84160491505092915050565b600060ff821660ff84168160ff04811182151516156146aa576146aa613ee7565b60ff828116828216039081111561098957610989613ee7565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061474d908301846138d2565b9695505050505050565b60006020828403121561476957600080fd5b8151610b738161387b56fea2646970667358221220f22338b77e09402445511ba2c5fc75d7bda789e8c5acd0a1cb1344c65f156c2464736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000064255524e4552000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064255524e45520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062d4255524e455220697320612064796e616d69632063727970746f61727420736572696573206261736564206f6e206c69766520457468657265756d2067617320707269636520646174612e204120746f74616c206f662032353620696e746572636f6e6e656374656420617274776f726b7320646570656e64656e74206f6e20746865207374617465206f662074686520626c6f636b636861696e2e20417320457468657265756d206e6574776f726b20757361676520696e637265617365732c2064756520746f20707269636520766f6c6174696c6974792c204e46542073616c6573206f72206f7468657220666163746f72732c2061206d6f726520696d7061637466756c20617274776f726b20646576656c6f70732e205c5c5c5c6e5c5c5c5c6e4761732070726963652064617461206973206d6164652066726f6d2074686520636f6d706574696e6720646573697265732c20696e74656e74696f6e7320616e642062656c69656673206f66206d696c6c696f6e73206f6620656e7469746965732e205472616e73616374696f6e73206f6e20457468657265756d20637265617465206f7665727768656c6d696e6720616d6f756e7473206f6620696e666f726d6174696f6e20696e20626c6f636b2074696d652c206379636c6963616c6c792072657665616c696e6720756e666f72657365656e207374617465732e204255524e4552207069637475726573207468697320636f6e74696e756f757320646563656e7472616c697365642070726f636573732e2054686520617274776f726b206973206e657665722066696e69736865642c207468657265277320616c776179732061206e65772076617269616e742e5c5c5c5c6e5c5c5c5c6e4974e280997320636f6d6d6f6e20746f2066657469736869736520746563686e6f6c6f677920616e642077652063616e20656173696c79206265636f6d6520686f6f6b6564206f6e20746865206e6574776f726b2073797374656d73207765207573652e2054686520457468657265756d20626c6f636b636861696e20697320696e666c75656e7469616c206f6e206f7572206c6976657320616e64207468697320617274776f726b20747269657320746f2072657665616c20736f6d65206f662069747320756e6465726c79696e67206265686176696f7572207468726f756768206162737472616374696f6e2e5c5c5c5c6e5c5c5c5c6e54686520696d6167652066696c657320696e204255524e455220626567696e206173207069637475726573206f66207472756520706879736963616c206761732e2054686579e28099726520657874727564656420696e746f20612074686972642064696d656e73696f6e2c20726f746174656420616e642070726f63657373656420756e74696c2074686579e28099726520756e7265636f676e697361626c652e205468657365206e657720666f726d7320696e74657261637420646966666572656e746c792077697468206f6e6520616e6f7468657220696e2065616368206469676974616c20617274776f726b2e5c5c5c5c6e5c5c5c5c6e4576657279204255524e455220686173206120756e69717565206261736520696d6167652c20756e69717565207365656420616e64203630206d696c6c696f6e20706f74656e7469616c207374617465732e20526172657220e280986461726be2809920616e6420e28098627269676874272074797065732063616e2068617665206f76657220312062696c6c696f6e207374617465732e2041706172742066726f6d2074686520626173652c20616c6c206c61796572732061726520736861726564206265747765656e20616c6c20636f6c6c6563746f72732c207468656e206d6978656420756e697175656c7920696e20656163682070696563652e20546865206c6179657273206172652073746f7265642061732073657061726174652066696c6573206163726f737320495046532e20536c6f77657220706965636573206861766520686967686572207261726974792e5c5c5c5c6e5c5c5c5c6e4255524e45522069736ee280997420636f6e74726f6c6c656420627920746865206172746973742c206275742062792074686520457468657265756d205669727475616c204d616368696e6520616e64206974732075736572732e00000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): BURNER
Arg [1] : symbol (string): BURNER
Arg [2] : description (string): BURNER is a dynamic cryptoart series based on live Ethereum gas price data. A total of 256 interconnected artworks dependent on the state of the blockchain. As Ethereum network usage increases, due to price volatility, NFT sales or other factors, a more impactful artwork develops. \\\\n\\\\nGas price data is made from the competing desires, intentions and beliefs of millions of entities. Transactions on Ethereum create overwhelming amounts of information in block time, cyclically revealing unforeseen states. BURNER pictures this continuous decentralised process. The artwork is never finished, there's always a new variant.\\\\n\\\\nIt’s common to fetishise technology and we can easily become hooked on the network systems we use. The Ethereum blockchain is influential on our lives and this artwork tries to reveal some of its underlying behaviour through abstraction.\\\\n\\\\nThe image files in BURNER begin as pictures of true physical gas. They’re extruded into a third dimension, rotated and processed until they’re unrecognisable. These new forms interact differently with one another in each digital artwork.\\\\n\\\\nEvery BURNER has a unique base image, unique seed and 60 million potential states. Rarer ‘dark’ and ‘bright' types can have over 1 billion states. Apart from the base, all layers are shared between all collectors, then mixed uniquely in each piece. The layers are stored as separate files across IPFS. Slower pieces have higher rarity.\\\\n\\\\nBURNER isn’t controlled by the artist, but by the Ethereum Virtual Machine and its users.
-----Encoded View---------------
58 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [4] : 4255524e45520000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 4255524e45520000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000062d
Arg [8] : 4255524e455220697320612064796e616d69632063727970746f617274207365
Arg [9] : 72696573206261736564206f6e206c69766520457468657265756d2067617320
Arg [10] : 707269636520646174612e204120746f74616c206f662032353620696e746572
Arg [11] : 636f6e6e656374656420617274776f726b7320646570656e64656e74206f6e20
Arg [12] : 746865207374617465206f662074686520626c6f636b636861696e2e20417320
Arg [13] : 457468657265756d206e6574776f726b20757361676520696e63726561736573
Arg [14] : 2c2064756520746f20707269636520766f6c6174696c6974792c204e46542073
Arg [15] : 616c6573206f72206f7468657220666163746f72732c2061206d6f726520696d
Arg [16] : 7061637466756c20617274776f726b20646576656c6f70732e205c5c5c5c6e5c
Arg [17] : 5c5c5c6e4761732070726963652064617461206973206d6164652066726f6d20
Arg [18] : 74686520636f6d706574696e6720646573697265732c20696e74656e74696f6e
Arg [19] : 7320616e642062656c69656673206f66206d696c6c696f6e73206f6620656e74
Arg [20] : 69746965732e205472616e73616374696f6e73206f6e20457468657265756d20
Arg [21] : 637265617465206f7665727768656c6d696e6720616d6f756e7473206f662069
Arg [22] : 6e666f726d6174696f6e20696e20626c6f636b2074696d652c206379636c6963
Arg [23] : 616c6c792072657665616c696e6720756e666f72657365656e20737461746573
Arg [24] : 2e204255524e4552207069637475726573207468697320636f6e74696e756f75
Arg [25] : 7320646563656e7472616c697365642070726f636573732e2054686520617274
Arg [26] : 776f726b206973206e657665722066696e69736865642c207468657265277320
Arg [27] : 616c776179732061206e65772076617269616e742e5c5c5c5c6e5c5c5c5c6e49
Arg [28] : 74e280997320636f6d6d6f6e20746f2066657469736869736520746563686e6f
Arg [29] : 6c6f677920616e642077652063616e20656173696c79206265636f6d6520686f
Arg [30] : 6f6b6564206f6e20746865206e6574776f726b2073797374656d732077652075
Arg [31] : 73652e2054686520457468657265756d20626c6f636b636861696e2069732069
Arg [32] : 6e666c75656e7469616c206f6e206f7572206c6976657320616e642074686973
Arg [33] : 20617274776f726b20747269657320746f2072657665616c20736f6d65206f66
Arg [34] : 2069747320756e6465726c79696e67206265686176696f7572207468726f7567
Arg [35] : 68206162737472616374696f6e2e5c5c5c5c6e5c5c5c5c6e54686520696d6167
Arg [36] : 652066696c657320696e204255524e455220626567696e206173207069637475
Arg [37] : 726573206f66207472756520706879736963616c206761732e2054686579e280
Arg [38] : 99726520657874727564656420696e746f20612074686972642064696d656e73
Arg [39] : 696f6e2c20726f746174656420616e642070726f63657373656420756e74696c
Arg [40] : 2074686579e28099726520756e7265636f676e697361626c652e205468657365
Arg [41] : 206e657720666f726d7320696e74657261637420646966666572656e746c7920
Arg [42] : 77697468206f6e6520616e6f7468657220696e2065616368206469676974616c
Arg [43] : 20617274776f726b2e5c5c5c5c6e5c5c5c5c6e4576657279204255524e455220
Arg [44] : 686173206120756e69717565206261736520696d6167652c20756e6971756520
Arg [45] : 7365656420616e64203630206d696c6c696f6e20706f74656e7469616c207374
Arg [46] : 617465732e20526172657220e280986461726be2809920616e6420e280986272
Arg [47] : 69676874272074797065732063616e2068617665206f76657220312062696c6c
Arg [48] : 696f6e207374617465732e2041706172742066726f6d2074686520626173652c
Arg [49] : 20616c6c206c61796572732061726520736861726564206265747765656e2061
Arg [50] : 6c6c20636f6c6c6563746f72732c207468656e206d6978656420756e69717565
Arg [51] : 6c7920696e20656163682070696563652e20546865206c617965727320617265
Arg [52] : 2073746f7265642061732073657061726174652066696c6573206163726f7373
Arg [53] : 20495046532e20536c6f77657220706965636573206861766520686967686572
Arg [54] : 207261726974792e5c5c5c5c6e5c5c5c5c6e4255524e45522069736ee2809974
Arg [55] : 20636f6e74726f6c6c656420627920746865206172746973742c206275742062
Arg [56] : 792074686520457468657265756d205669727475616c204d616368696e652061
Arg [57] : 6e64206974732075736572732e00000000000000000000000000000000000000
Deployed Bytecode Sourcemap
17691:24598:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32484:180;;;;;;;;;;-1:-1:-1;32484:180:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;32484:180:0;;;;;;;;24891:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8299:177::-;;;;;;;;;;-1:-1:-1;8299:177:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;8299:177:0;1533:203:1;33155:408:0;;;;;;;;;;-1:-1:-1;33155:408:0;;;;;:::i;:::-;;:::i;7996:298::-;;;;;;;;;;-1:-1:-1;7996:298:0;;;;;:::i;:::-;;:::i;:::-;;37041:164;;;;;;;;;;-1:-1:-1;37041:164:0;;;;;:::i;:::-;;:::i;38095:169::-;;;;;;;;;;-1:-1:-1;38095:169:0;;;;;:::i;:::-;;:::i;26830:472::-;;;;;;;;;;;;;:::i;37763:183::-;;;;;;;;;;-1:-1:-1;37763:183:0;;;;;:::i;:::-;;:::i;40975:1311::-;;;:::i;39330:183::-;;;;;;;;;;-1:-1:-1;39330:183:0;;;;;:::i;:::-;;:::i;24633:71::-;;;;;;;;;;-1:-1:-1;24692:7:0;;24633:71;;;3568:25:1;;;3556:2;3541:18;24633:71:0;3422:177:1;8917:248:0;;;;;;;;;;-1:-1:-1;8917:248:0;;;;;:::i;:::-;;:::i;24309:88::-;;;;;;;;;;;;;:::i;31487:436::-;;;;;;;;;;-1:-1:-1;31487:436:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4510:32:1;;;4492:51;;4574:2;4559:18;;4552:34;;;;4465:18;31487:436:0;4318:274:1;35262:168:0;;;;;;;;;;-1:-1:-1;35262:168:0;;;;;:::i;:::-;;:::i;40085:339::-;;;:::i;39595:181::-;;;;;;;;;;;;;:::i;9170:142::-;;;;;;;;;;-1:-1:-1;9170:142:0;;;;;:::i;:::-;;:::i;12143:191::-;;;;;;;;;;-1:-1:-1;12143:191:0;;;;;:::i;:::-;;:::i;37397:200::-;;;;;;;;;;-1:-1:-1;37397:200:0;;;;;:::i;:::-;;:::i;39811:146::-;;;;;;;;;;-1:-1:-1;39811:146:0;;;;;:::i;:::-;;:::i;27418:3436::-;;;;;;;;;;-1:-1:-1;27418:3436:0;;;;;:::i;:::-;;:::i;34179:159::-;;;;;;;;;;;;;:::i;7351:191::-;;;;;;;;;;-1:-1:-1;7351:191:0;;;;;:::i;:::-;;:::i;24483:71::-;;;;;;;;;;-1:-1:-1;24545:4:0;24483:71;;25044:1598;;;;;;;;;;;;;:::i;34645:200::-;;;;;;;;;;-1:-1:-1;34645:200:0;;;;;:::i;:::-;;:::i;7154:192::-;;;;;;;;;;-1:-1:-1;7154:192:0;;;;;:::i;:::-;;:::i;23959:86::-;;;;;;;;;;;;;:::i;23592:87::-;;;;;;;;;;;;;:::i;34935:142::-;;;;;;;;;;-1:-1:-1;34935:142:0;;;;;:::i;:::-;;:::i;31175:91::-;;;;;;;;;;-1:-1:-1;31241:20:0;;31175:91;;34407:158;;;;;;;;;;;;;:::i;35913:166::-;;;;;;;;;;-1:-1:-1;35913:166:0;;;;;:::i;:::-;;:::i;32720:86::-;;;;;;;;;;;;;:::i;36257:312::-;;;;;;;;;;-1:-1:-1;36257:312:0;;;;;:::i;:::-;;:::i;17867:57::-;;;;;;;;;;-1:-1:-1;17867:57:0;-1:-1:-1;;;17867:57:0;;;;;-1:-1:-1;;;;;;5011:33:1;;;4993:52;;4981:2;4966:18;17867:57:0;4849:202:1;24135:80:0;;;;;;;;;;;;;:::i;8481:272::-;;;;;;;;;;-1:-1:-1;8481:272:0;;;;;:::i;:::-;;:::i;38586:182::-;;;;;;;;;;-1:-1:-1;38586:182:0;;;;;:::i;:::-;;:::i;9317:236::-;;;;;;;;;;-1:-1:-1;9317:236:0;;;;;:::i;:::-;;:::i;32015:464::-;;;;;;;;;;-1:-1:-1;32015:464:0;;;;;:::i;:::-;;:::i;23747:93::-;;;;;;;;;;-1:-1:-1;23818:17:0;;23747:93;;23210:134;;;;;;;;;;;;;:::i;24760:73::-;;;;;;;;;;-1:-1:-1;24820:8:0;;24760:73;;39042:168;;;;;;;;;;-1:-1:-1;39042:168:0;;;;;:::i;:::-;;:::i;35549:173::-;;;;;;;;;;-1:-1:-1;35549:173:0;;;;;:::i;:::-;;:::i;33666:187::-;;;;;;;;;;-1:-1:-1;33666:187:0;;;;;:::i;:::-;;:::i;23411:124::-;;;;;;;;;;;;;:::i;8758:154::-;;;;;;;;;;-1:-1:-1;8758:154:0;;;;;:::i;:::-;;:::i;36735:174::-;;;;;;;;;;-1:-1:-1;36735:174:0;;;;;:::i;:::-;;:::i;40566:250::-;;;;;;:::i;:::-;;:::i;32893:135::-;;;;;;;;;;;;;:::i;32484:180::-;32576:4;-1:-1:-1;;;;;;;;;32594:25:0;;;;:65;;;32623:36;32647:11;32623:23;:36::i;:::-;32587:72;32484:180;-1:-1:-1;;32484:180:0:o;24891:82::-;24936:13;24963:5;24956:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24891:82;:::o;8299:177::-;8374:7;8396:16;8404:7;8396;:16::i;:::-;8388:47;;;;-1:-1:-1;;;8388:47:0;;7613:2:1;8388:47:0;;;7595:21:1;7652:2;7632:18;;;7625:30;-1:-1:-1;;;7671:18:1;;;7664:48;7729:18;;8388:47:0;;;;;;;;;-1:-1:-1;8447:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;8447:24:0;;8299:177::o;33155:408::-;33216:13;33258:15;33244:12;33236:38;;;;-1:-1:-1;;;33236:38:0;;;;;;;;:::i;:::-;;33299:7;;33287:8;:19;;33308:15;33279:45;;;;;-1:-1:-1;;;33279:45:0;;;;;;;;:::i;:::-;;33337:17;33345:8;33337:7;:17::i;:::-;33356:16;33329:44;;;;;-1:-1:-1;;;33329:44:0;;;;;;;;:::i;:::-;;33378:17;33422:9;33433:13;33405:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33378:70;;33480:1;33466:3;33460:17;:21;:98;;;;;;;;;;;;;;;;;33508:3;33525:26;33542:8;33525:16;:26::i;:::-;33491:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33460:98;33453:105;33155:408;-1:-1:-1;;;33155:408:0:o;7996:298::-;8071:13;8087:23;8102:7;8087:14;:23::i;:::-;8071:39;;8129:5;-1:-1:-1;;;;;8123:11:0;:2;-1:-1:-1;;;;;8123:11:0;;8115:39;;;;-1:-1:-1;;;8115:39:0;;;;;;;:::i;:::-;4724:10;-1:-1:-1;;;;;8172:21:0;;;;:62;;-1:-1:-1;8197:37:0;8214:5;4724:10;8758:154;:::i;8197:37::-;8159:104;;;;-1:-1:-1;;;8159:104:0;;;;;;;:::i;:::-;8268:21;8277:2;8281:7;8268:8;:21::i;:::-;8066:228;7996:298;;:::o;37041:164::-;37129:19;;-1:-1:-1;;;;;37129:19:0;4724:10;-1:-1:-1;;;;;37113:35:0;;37150:17;37105:63;;;;;-1:-1:-1;;;37105:63:0;;;;;;;;:::i;:::-;-1:-1:-1;37173:11:0;:27;37187:13;37173:11;:27;:::i;:::-;;37041:164;:::o;38095:169::-;38186:19;;-1:-1:-1;;;;;38186:19:0;4724:10;-1:-1:-1;;;;;38170:35:0;;38207:17;38162:63;;;;;-1:-1:-1;;;38162:63:0;;;;;;;;:::i;:::-;-1:-1:-1;38230:13:0;:29;38246:13;38230;:29;:::i;26830:472::-;26881:18;26906:17;26937:21;;;;;;-1:-1:-1;;;13137:16:1;;13178:1;13169:11;;12935:251;26937:21:0;;;;;;;;;;;;;26930:28;;26984:1;26968:13;;:17;26965:266;;;27006:1;26993:233;27014:13;;27009:1;:18;26993:233;;27044:1;27049;27044:6;27041:179;;27100:18;;;;:15;:18;;;;;;27084:4;;27090:29;;:9;:29::i;:::-;27067:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27060:60;;27041:179;;;27192:18;;;;:15;:18;;;;;;27171:4;;27182:29;;:9;:29::i;:::-;27154:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27147:65;;27041:179;27029:3;;;;:::i;:::-;;;;26993:233;;;;26965:266;27261:4;27244:27;;;;;;;;:::i;:::-;;;;-1:-1:-1;;27244:27:0;;;;;;;;;;26830:472;-1:-1:-1;;26830:472:0:o;37763:183::-;37860:19;;-1:-1:-1;;;;;37860:19:0;4724:10;-1:-1:-1;;;;;37844:35:0;;37881:17;37836:63;;;;;-1:-1:-1;;;37836:63:0;;;;;;;;:::i;:::-;-1:-1:-1;37904:21:0;:37;37928:13;37904:21;:37;:::i;40975:1311::-;41047:7;;41056:10;;41047:7;;41046:8;41038:29;;;;-1:-1:-1;;;41038:29:0;;;;;;;;:::i;:::-;-1:-1:-1;41184:17:0;;41150:30;4724:10;7154:192;:::i;41150:30::-;:52;41142:107;;;;-1:-1:-1;;;41142:107:0;;15262:2:1;41142:107:0;;;15244:21:1;15301:2;15281:18;;;15274:30;15340:34;15320:18;;;15313:62;-1:-1:-1;;;15391:18:1;;;15384:40;15441:19;;41142:107:0;15060:406:1;41142:107:0;41384:13;;41374:7;;:23;;;;:::i;:::-;41340:30;4724:10;7154:192;:::i;41340:30::-;:58;41332:109;;;;-1:-1:-1;;;41332:109:0;;15806:2:1;41332:109:0;;;15788:21:1;15845:2;15825:18;;;15818:30;15884:34;15864:18;;;15857:62;-1:-1:-1;;;15935:18:1;;;15928:36;15981:19;;41332:109:0;15604:402:1;41332:109:0;4724:10;41490:51;;;;-1:-1:-1;;;41490:51:0;;16213:2:1;41490:51:0;;;16195:21:1;16252:2;16232:18;;;16225:30;-1:-1:-1;;;16271:18:1;;;16264:42;16323:18;;41490:51:0;16011:336:1;41490:51:0;41567:19;;-1:-1:-1;;;;;41567:19:0;4724:10;-1:-1:-1;;;;;41551:35:0;;41548:101;;41615:8;;41602:9;:21;;41594:49;;;;-1:-1:-1;;;41594:49:0;;16554:2:1;41594:49:0;;;16536:21:1;16593:2;16573:18;;;16566:30;-1:-1:-1;;;16612:18:1;;;16605:45;16667:18;;41594:49:0;16352:339:1;41594:49:0;41655:18;41688:594;41695:13;41688:594;;41796:65;;;41813:15;41796:65;;;;16881:19:1;;;;41830:16:0;16916:12:1;;;16909:28;4724:10:0;16975:2:1;16971:15;;;-1:-1:-1;;16967:53:1;16953:12;;;16946:75;41796:65:0;;;;;;;;;17037:12:1;;;;41796:65:0;;;41786:76;;;;;41771:12;41926:7;;;;41995:10;41926:7;42004:1;41995:10;:::i;:::-;41982:23;;;;42075:14;42083:5;42075:7;:14::i;:::-;42071:206;;42109:1;42101:5;:9;:29;;;;;42123:7;;42114:5;:16;;42101:29;42098:173;;;42140:26;4724:10;42160:5;42140;:26::i;:::-;42174:13;:15;;;:13;:15;;;:::i;:::-;;;;-1:-1:-1;;42213:13:0;;42197:30;;;;:15;:30;;;;;:38;;;42259:4;;-1:-1:-1;42098:173:0;41710:572;;;41688:594;;;41006:1280;40975:1311::o;39330:183::-;39412:19;;-1:-1:-1;;;;;39412:19:0;4724:10;-1:-1:-1;;;;;39396:35:0;;39433:17;39388:63;;;;;-1:-1:-1;;;39388:63:0;;;;;;;;:::i;:::-;-1:-1:-1;39465:7:0;;39474:10;;39465:7;;;;;39464:8;39456:29;;;;-1:-1:-1;;;39456:29:0;;;;;;;;:::i;:::-;-1:-1:-1;39490:11:0;:18;39504:4;39490:11;:18;:::i;8917:248::-;9066:41;4724:10;9085:12;9099:7;9066:18;:41::i;:::-;9058:69;;;;-1:-1:-1;;;9058:69:0;;;;;;;:::i;:::-;9132:28;9142:4;9148:2;9152:7;9132:9;:28::i;24309:88::-;24354:13;24381:11;24374:18;;;;;:::i;31487:436::-;31568:16;;31638:15;31624:12;31616:38;;;;-1:-1:-1;;;31616:38:0;;;;;;;;:::i;:::-;;31679:7;;31667:8;:19;;31688:15;31659:45;;;;;-1:-1:-1;;;31659:45:0;;;;;;;;:::i;:::-;;31717:17;31725:8;31717:7;:17::i;:::-;31736:16;31709:44;;;;;-1:-1:-1;;;31709:44:0;;;;;;;;:::i;:::-;;31779:2;31766:10;:15;31758:47;;;;-1:-1:-1;;;31758:47:0;;17547:2:1;31758:47:0;;;17529:21:1;17586:2;17566:18;;;17559:30;-1:-1:-1;;;17605:18:1;;;17598:49;17664:18;;31758:47:0;17345:343:1;31758:47:0;31855:20;;31812:16;;31831:45;;:19;:10;31846:3;31831:14;:19::i;:::-;:23;;:45::i;:::-;31888:19;;-1:-1:-1;;;;;31888:19:0;;31812:64;;-1:-1:-1;31487:436:0;-1:-1:-1;;;;31487:436:0:o;35262:168::-;35352:19;;-1:-1:-1;;;;;35352:19:0;4724:10;-1:-1:-1;;;;;35336:35:0;;35373:17;35328:63;;;;;-1:-1:-1;;;35328:63:0;;;;;;;;:::i;:::-;-1:-1:-1;35396:13:0;:29;35412:13;35396;:29;:::i;40085:339::-;40134:7;;40143:10;;40134:7;;40133:8;40125:29;;;;-1:-1:-1;;;40125:29:0;;;;;;;;:::i;:::-;-1:-1:-1;40183:19:0;;-1:-1:-1;;;;;40183:19:0;4724:10;-1:-1:-1;;;;;40167:35:0;;40204:17;40159:63;;;;;-1:-1:-1;;;40159:63:0;;;;;;;;:::i;:::-;-1:-1:-1;40242:21:0;40276:11;40268:49;;;;-1:-1:-1;;;40268:49:0;;17895:2:1;40268:49:0;;;17877:21:1;17934:2;17914:18;;;17907:30;17973:27;17953:18;;;17946:55;18018:18;;40268:49:0;17693:349:1;40268:49:0;40341:37;;40323:12;;40342:10;;40366:7;;40323:12;40341:37;40323:12;40341:37;40366:7;40342:10;40341:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40322:56;;;40391:7;40383:36;;;;-1:-1:-1;;;40383:36:0;;18459:2:1;40383:36:0;;;18441:21:1;18498:2;18478:18;;;18471:30;-1:-1:-1;;;18517:18:1;;;18510:46;18573:18;;40383:36:0;18257:340:1;39595:181:0;39658:19;;-1:-1:-1;;;;;39658:19:0;4724:10;-1:-1:-1;;;;;39642:35:0;;39679:17;39634:63;;;;;-1:-1:-1;;;39634:63:0;;;;;;;;:::i;:::-;-1:-1:-1;39710:7:0;;;;39702:49;;;;-1:-1:-1;;;39702:49:0;;18804:2:1;39702:49:0;;;18786:21:1;18843:2;18823:18;;;18816:30;18882:31;18862:18;;;18855:59;18931:18;;39702:49:0;18602:353:1;39702:49:0;39756:7;:15;;-1:-1:-1;;39756:15:0;;;39595:181::o;9170:142::-;9268:39;9285:4;9291:2;9295:7;9268:39;;;;;;;;;;;;:16;:39::i;12143:191::-;12249:41;4724:10;12268:12;4651:88;12249:41;12241:69;;;;-1:-1:-1;;;12241:69:0;;;;;;;:::i;:::-;12315:14;12321:7;12315:5;:14::i;37397:200::-;37480:19;;-1:-1:-1;;;;;37480:19:0;4724:10;-1:-1:-1;;;;;37464:35:0;;37501:17;37456:63;;;;;-1:-1:-1;;;37456:63:0;;;;;;;;:::i;:::-;-1:-1:-1;37533:7:0;;37542:10;;37533:7;;;;;37532:8;37524:29;;;;-1:-1:-1;;;37524:29:0;;;;;;;;:::i;:::-;-1:-1:-1;37558:20:0;:34;37397:200::o;39811:146::-;39944:7;39936:6;-1:-1:-1;;;;;39908:44:0;39926:8;-1:-1:-1;;;;;39908:44:0;;;;;;;;;;;39811:146;;;:::o;27418:3436::-;27480:18;27586:15;27572:12;27564:38;;;;-1:-1:-1;;;27564:38:0;;;;;;;;:::i;:::-;;27627:7;;27615:8;:19;;27636:15;27607:45;;;;;-1:-1:-1;;;27607:45:0;;;;;;;;:::i;:::-;;27665:17;27673:8;27665:7;:17::i;:::-;27684:16;27657:44;;;;;-1:-1:-1;;;27657:44:0;;;;;;;;:::i;:::-;;27708:14;27731:17;27764:23;27778:8;27764:13;:23::i;:::-;27755:32;;27801:34;;;;;;;:::i;:::-;;;;;;;;;;;;;27794:41;;27864:4;27870:7;27847:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27840:38;;27907:4;27890:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;27883:35;;27947:4;27953:19;27963:8;27953:9;:19::i;:::-;27930:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27923:50;;28002:4;27985:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;27978:34;;28041:4;28024:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;28017:35;;28081:4;28064:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;28057:49;;28135:4;28141:12;28118:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28111:43;;28183:4;28166:67;;;;;;;;:::i;:::-;;;;;;;;;;;;;28159:74;;28262:4;28245:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;28238:34;;28301:4;28284:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;28277:35;;28341:4;28324:38;;;;;;;;:::i;:::-;;;;;;;;;;;;;28317:45;;28391:4;28397:32;28411:17;28419:8;28411:7;:17::i;:::-;28397:13;:32::i;:::-;28374:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28367:63;;28459:4;28442:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;28435:34;;28498:4;28481:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;28474:35;;28538:4;28521:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;28514:50;;28593:4;28599:9;28576:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28569:40;;28638:4;28644:13;28621:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28614:44;;28687:4;28670:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;28663:49;;28741:4;28747:19;28757:8;28747:9;:19::i;:::-;28724:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28717:50;;28796:4;28779:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;28772:34;;28835:4;28818:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;28811:35;;28875:4;28858:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;28851:51;;28931:4;28937:9;28914:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28907:40;;28976:4;28982:13;28959:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28952:44;;29025:4;29008:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;29001:41;;29071:4;29077:19;29087:8;29077:9;:19::i;:::-;29054:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29047:50;;29126:4;29109:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;29102:34;;29165:4;29148:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;29141:35;;29205:4;29188:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;29181:43;;29253:4;29259:9;29236:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29229:40;;29298:4;29304:21;29281:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29274:52;;29355:4;29361:19;29371:8;29361:9;:19::i;:::-;29338:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29331:50;;29410:4;29393:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;29386:37;;29452:4;29435:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;29428:34;;29491:4;29474:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;29467:35;;29531:4;29514:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;29507:48;;29586:4;29569:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;29562:34;;29625:4;29608:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;29601:54;;29684:4;29667:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;29660:35;;29724:4;29707:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;29700:43;;29772:4;29778:28;29797:8;29778:18;:28::i;:::-;29755:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29748:59;;29836:4;29819:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;29812:34;;29875:4;29858:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;29851:35;;29917:4;29900:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;29893:34;;29956:4;29939:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;29932:54;;30015:4;29998:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;29991:35;;30055:4;30038:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;30031:50;;30110:4;30093:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;30086:34;;30130:6;30140:1;30130:11;:26;;;;30145:6;30155:1;30145:11;30130:26;30127:313;;;30188:4;30171:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;30164:35;;30229:4;30212:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;30205:34;;30269:4;30252:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;30245:54;;30329:4;30312:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;30305:35;;30370:4;30353:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;30346:48;;30424:4;30407:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;30400:34;;30127:313;30447:6;30457:1;30447:11;30444:300;;30490:4;30473:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;30466:35;;30531:4;30514:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;30507:34;;30571:4;30554:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;30547:54;;30631:4;30614:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;30607:35;;30672:4;30655:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;30648:50;;30728:4;30711:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;30704:34;;30444:300;30774:4;30757:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;30750:34;;30813:4;30796:27;;;;;;;;:::i;:::-;;;;-1:-1:-1;;30796:27:0;;;;;;;;;;27418:3436;-1:-1:-1;;;;27418:3436:0:o;34179:159::-;34241:19;;-1:-1:-1;;;;;34241:19:0;4724:10;-1:-1:-1;;;;;34225:35:0;;34262:17;34217:63;;;;;-1:-1:-1;;;34217:63:0;;;;;;;;:::i;:::-;-1:-1:-1;34294:7:0;;34303:10;;34294:7;;;;;34293:8;34285:29;;;;-1:-1:-1;;;34285:29:0;;;;;;;;:::i;:::-;-1:-1:-1;34319:7:0;:14;;-1:-1:-1;;34319:14:0;;;;;34179:159::o;7351:191::-;7422:7;7452:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7452:16:0;;7473:47;;;;-1:-1:-1;;;7473:47:0;;30574:2:1;7473:47:0;;;30556:21:1;30613:2;30593:18;;;30586:30;-1:-1:-1;;;30632:18:1;;;30625:45;30687:18;;7473:47:0;30372:339:1;25044:1598:0;25100:18;25125:17;25147:14;25164:20;;25187:3;25164:26;;;;:::i;:::-;25147:43;;25204:34;;;;;;;:::i;:::-;;;;;;;;;;;;;25197:41;;25267:4;25273:5;25250:29;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25243:36;;25308:4;25291:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;25284:34;;25349:4;25332:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;25325:35;;25389:4;25372:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;25365:49;;25443:4;25449:12;25426:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25419:43;;25491:4;25474:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;25467:34;;25532:4;25515:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;25508:35;;25572:4;25555:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;25548:43;;25620:4;25626:9;25603:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25596:40;;25665:4;25671:17;25648:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25641:48;;25718:4;25701:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;25694:34;;25759:4;25742:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;25735:35;;25799:4;25782:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;25775:51;;25855:4;25861:9;25838:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25831:40;;25900:4;25906:11;25883:35;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25876:42;;25947:4;25930:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;25923:34;;25988:4;25971:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;25964:35;;26028:4;26011:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;26004:54;;26087:4;26093:9;26070:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26063:40;;26132:4;26138:22;26115:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26108:53;;26190:4;26173:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;26166:34;;26231:4;26214:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;26207:35;;26271:4;26254:53;;;;;;;;:::i;:::-;;;;;;;;;;;;;26247:60;;26336:4;26342:20;26352:9;26342;:20::i;:::-;26319:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26312:51;;26394:4;26377:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;26370:35;;26434:4;26417:44;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26417:44:0;;;;;;;;;26510:19;;26417:44;;-1:-1:-1;26417:44:0;;26496:34;;-1:-1:-1;;;;;26510:19:0;26496:13;:34::i;:::-;26473:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26466:65;;26560:4;26543:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;26536:34;;26601:4;26584:27;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26584:27:0;;;;;;;;;;25044:1598;-1:-1:-1;;;25044:1598:0:o;34645:200::-;34721:19;;-1:-1:-1;;;;;34721:19:0;4724:10;-1:-1:-1;;;;;34705:35:0;;:76;;;-1:-1:-1;34760:21:0;;-1:-1:-1;;;;;34760:21:0;4724:10;-1:-1:-1;;;;;34744:37:0;;34705:76;34784:17;34696:106;;;;;-1:-1:-1;;;34696:106:0;;;;;;;;:::i;:::-;-1:-1:-1;34807:19:0;:33;;-1:-1:-1;;;;;;34807:33:0;-1:-1:-1;;;;;34807:33:0;;;;;;;;;;34645:200::o;7154:192::-;7225:7;-1:-1:-1;;;;;7247:19:0;;7239:74;;;;-1:-1:-1;;;7239:74:0;;33118:2:1;7239:74:0;;;33100:21:1;33157:2;33137:18;;;33130:30;33196:34;33176:18;;;33169:62;-1:-1:-1;;;33247:18:1;;;33240:40;33297:19;;7239:74:0;32916:406:1;7239:74:0;-1:-1:-1;;;;;;7325:16:0;;;;;:9;:16;;;;;;;7154:192::o;23959:86::-;24002:13;24029:11;24022:18;;;;;:::i;23592:87::-;23635:13;23662:12;23655:19;;;;;:::i;34935:142::-;35012:19;;-1:-1:-1;;;;;35012:19:0;4724:10;-1:-1:-1;;;;;34996:35:0;;35033:17;34988:63;;;;;-1:-1:-1;;;34988:63:0;;;;;;;;:::i;:::-;-1:-1:-1;35056:9:0;:16;35068:4;35056:9;:16;:::i;34407:158::-;34468:19;;-1:-1:-1;;;;;34468:19:0;4724:10;-1:-1:-1;;;;;34452:35:0;;34489:17;34444:63;;;;;-1:-1:-1;;;34444:63:0;;;;;;;;:::i;:::-;-1:-1:-1;34521:7:0;;34530:10;;34521:7;;34520:8;34512:29;;;;-1:-1:-1;;;34512:29:0;;;;;;;;:::i;:::-;-1:-1:-1;34546:7:0;:14;;-1:-1:-1;;34546:14:0;34556:4;34546:14;;;34407:158::o;35913:166::-;36002:19;;-1:-1:-1;;;;;36002:19:0;4724:10;-1:-1:-1;;;;;35986:35:0;;36023:17;35978:63;;;;;-1:-1:-1;;;35978:63:0;;;;;;;;:::i;:::-;-1:-1:-1;36046:12:0;:28;36061:13;36046:12;:28;:::i;32720:86::-;32767:13;32794:7;32787:14;;;;;:::i;36257:312::-;36343:19;;-1:-1:-1;;;;;36343:19:0;4724:10;-1:-1:-1;;;;;36327:35:0;;36364:17;36319:63;;;;;-1:-1:-1;;;36319:63:0;;;;;;;;:::i;:::-;-1:-1:-1;36396:7:0;;36405:10;;36396:7;;;;;36395:8;36387:29;;;;-1:-1:-1;;;36387:29:0;;;;;;;;:::i;:::-;;36442:3;36429:10;:16;36421:56;;;;-1:-1:-1;;;36421:56:0;;33529:2:1;36421:56:0;;;33511:21:1;33568:2;33548:18;;;33541:30;33607:29;33587:18;;;33580:57;33654:18;;36421:56:0;33327:351:1;36421:56:0;36503:1;36490:10;:14;36482:47;;;;-1:-1:-1;;;36482:47:0;;33885:2:1;36482:47:0;;;33867:21:1;33924:2;33904:18;;;33897:30;-1:-1:-1;;;33943:18:1;;;33936:50;34003:18;;36482:47:0;33683:344:1;36482:47:0;36534:17;:30;36257:312::o;24135:80::-;24176:13;24203:7;24196:14;;;;;:::i;8481:272::-;4724:10;-1:-1:-1;;;;;8578:24:0;;;8570:62;;;;-1:-1:-1;;;8570:62:0;;34234:2:1;8570:62:0;;;34216:21:1;34273:2;34253:18;;;34246:30;34312:27;34292:18;;;34285:55;34357:18;;8570:62:0;34032:349:1;8570:62:0;4724:10;8637:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;8637:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;8637:53:0;;;;;;;;;;8700:48;;540:41:1;;;8637:42:0;;4724:10;8700:48;;513:18:1;8700:48:0;;;;;;;8481:272;;:::o;38586:182::-;38666:19;;-1:-1:-1;;;;;38666:19:0;4724:10;-1:-1:-1;;;;;38650:35:0;;38687:17;38642:63;;;;;-1:-1:-1;;;38642:63:0;;;;;;;;:::i;:::-;-1:-1:-1;38719:7:0;;38728:10;;38719:7;;;;;38718:8;38710:29;;;;-1:-1:-1;;;38710:29:0;;;;;;;;:::i;:::-;-1:-1:-1;38744:11:0;:19;38758:5;38744:11;:19;:::i;9317:236::-;9443:41;4724:10;9476:7;9443:18;:41::i;:::-;9435:69;;;;-1:-1:-1;;;9435:69:0;;;;;;;:::i;:::-;9509:39;9523:4;9529:2;9533:7;9542:5;9509:13;:39::i;:::-;9317:236;;;;:::o;32015:464::-;32088:13;32204:15;32190:12;32182:38;;;;-1:-1:-1;;;32182:38:0;;;;;;;;:::i;:::-;;32245:7;;32233:8;:19;;32254:15;32225:45;;;;;-1:-1:-1;;;32225:45:0;;;;;;;;:::i;:::-;;32283:17;32291:8;32283:7;:17::i;:::-;32302:16;32275:44;;;;;-1:-1:-1;;;32275:44:0;;;;;;;;:::i;:::-;;32326:21;32350:10;:8;:10::i;:::-;32326:34;;32396:1;32378:7;32372:21;:25;:102;;;;;;;;;;;;;;;;;32424:7;32441:26;32458:8;32441:16;:26::i;:::-;32407:61;;;;;;;;;:::i;23210:134::-;23258:13;23309:9;23320:17;23292:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23278:61;;23210:134;:::o;39042:168::-;39113:19;;-1:-1:-1;;;;;39113:19:0;4724:10;-1:-1:-1;;;;;39097:35:0;;39134:17;39089:63;;;;;-1:-1:-1;;;39089:63:0;;;;;;;;:::i;:::-;-1:-1:-1;39166:7:0;;39175:10;;39166:7;;;;;39165:8;39157:29;;;;-1:-1:-1;;;39157:29:0;;;;;;;;:::i;:::-;-1:-1:-1;39191:7:0;:14;39201:4;39191:7;:14;:::i;35549:173::-;35640:19;;-1:-1:-1;;;;;35640:19:0;4724:10;-1:-1:-1;;;;;35624:35:0;;35661:17;35616:63;;;;;-1:-1:-1;;;35616:63:0;;;;;;;;:::i;:::-;-1:-1:-1;35684:17:0;:33;35704:13;35684:17;:33;:::i;33666:187::-;33750:19;;-1:-1:-1;;;;;33750:19:0;4724:10;-1:-1:-1;;;;;33734:35:0;;33771:17;33726:63;;;;;-1:-1:-1;;;33726:63:0;;;;;;;;:::i;:::-;-1:-1:-1;33803:7:0;;33812:10;;33803:7;;;;;33802:8;33794:29;;;;-1:-1:-1;;;33794:29:0;;;;;;;;:::i;:::-;-1:-1:-1;33828:12:0;:20;33843:5;33828:12;:20;:::i;23411:124::-;23454:13;23505:9;23516:12;23488:41;;;;;;;;;:::i;8758:154::-;-1:-1:-1;;;;;8872:25:0;;;8854:4;8872:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;8758:154::o;36735:174::-;36808:19;;-1:-1:-1;;;;;36808:19:0;4724:10;-1:-1:-1;;;;;36792:35:0;;36829:17;36784:63;;;;;-1:-1:-1;;;36784:63:0;;;;;;;;:::i;:::-;-1:-1:-1;36861:7:0;;36870:10;;36861:7;;;;;36860:8;36852:29;;;;-1:-1:-1;;;36852:29:0;;;;;;;;:::i;:::-;-1:-1:-1;36886:8:0;:18;36735:174::o;40566:250::-;40632:7;;40641:10;;40632:7;;40631:8;40623:29;;;;-1:-1:-1;;;40623:29:0;;;;;;;;:::i;:::-;-1:-1:-1;40681:19:0;;-1:-1:-1;;;;;40681:19:0;4724:10;-1:-1:-1;;;;;40665:35:0;;40702:17;40657:63;;;;;-1:-1:-1;;;40657:63:0;;;;;;;;:::i;:::-;-1:-1:-1;40760:30:0;;-1:-1:-1;;;40760:30:0;;40784:4;40760:30;;;1679:51:1;-1:-1:-1;;;;;40733:14:0;;;;;40748:10;;40733:14;;40760:15;;1652:18:1;;40760:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40733:58;;-1:-1:-1;;;;;;40733:58:0;;;;;;;-1:-1:-1;;;;;4510:32:1;;;40733:58:0;;;4492:51:1;4559:18;;;4552:34;4465:18;;40733:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40725:86;;;;-1:-1:-1;;;40725:86:0;;35675:2:1;40725:86:0;;;35657:21:1;35714:2;35694:18;;;35687:30;-1:-1:-1;;;35733:18:1;;;35726:45;35788:18;;40725:86:0;35473:339:1;32893:135:0;32938:13;32989:9;33000:21;32972:50;;;;;;;;;:::i;6884:265::-;6985:4;-1:-1:-1;;;;;;7006:40:0;;-1:-1:-1;;;7006:40:0;;:95;;-1:-1:-1;;;;;;;7053:48:0;;-1:-1:-1;;;7053:48:0;7006:95;:138;;;-1:-1:-1;;;;;;;;;;6201:40:0;;;7108:36;6099:147;9823:117;9887:4;9905:16;;;:7;:16;;;;;;-1:-1:-1;;;;;9905:16:0;:30;;;9823:117::o;4951:413::-;5006:13;5029:5;5038:1;5029:10;5026:37;;-1:-1:-1;;5047:10:0;;;;;;;;;;;;-1:-1:-1;;;5047:10:0;;;;;4951:413::o;5026:37::-;5082:5;5067:12;5111:54;5118:9;;5111:54;;5135:8;;;;:::i;:::-;;-1:-1:-1;5149:10:0;;-1:-1:-1;5157:2:0;5149:10;;:::i;:::-;;;5111:54;;;5169:19;5201:6;5191:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5191:17:0;;5169:39;;5213:121;5220:10;;5213:121;;5238:11;5248:1;5238:11;;:::i;:::-;;-1:-1:-1;5298:10:0;5306:2;5298:5;:10;:::i;:::-;5285:24;;:2;:24;:::i;:::-;5272:39;;5255:6;5262;5255:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5255:56:0;;;;;;;;-1:-1:-1;5317:11:0;5326:2;5317:11;;:::i;:::-;;;5213:121;;;5352:6;4951:413;-1:-1:-1;;;;4951:413:0:o;11304:159::-;11373:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11373:29:0;-1:-1:-1;;;;;11373:29:0;;;;;;;;:24;;11421:23;11373:24;11421:14;:23::i;:::-;-1:-1:-1;;;;;11412:46:0;;;;;;;;;;;11304:159;;:::o;22334:405::-;22387:17;22415:2;22421:1;22415:7;22411:36;;-1:-1:-1;;22431:10:0;;;;;;;;;;;;-1:-1:-1;;;22431:10:0;;;;;22334:405::o;22411:36::-;22463:2;22451:9;22489:48;22496:6;;22489:48;;22510:8;;;;:::i;:::-;;-1:-1:-1;22524:7:0;;-1:-1:-1;22529:2:0;22524:7;;:::i;:::-;;;22489:48;;;22541:17;22571:6;22561:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22561:17:0;-1:-1:-1;22610:2:0;;-1:-1:-1;22541:37:0;-1:-1:-1;22595:6:0;22617:78;22624:6;;22617:78;;22668:6;22672:2;22668:1;:6;:::i;:::-;22663:11;;:2;:11;:::i;:::-;22650:26;;22638:4;22643:3;;;:::i;:::-;;;;22638:9;;;;;;;;:::i;:::-;;;;:38;-1:-1:-1;;;;;22638:38:0;;;;;;;;-1:-1:-1;22682:7:0;22687:2;22682:7;;:::i;:::-;;;22617:78;;;-1:-1:-1;22712:4:0;22334:405;-1:-1:-1;;;;22334:405:0:o;10613:158::-;-1:-1:-1;;;;;10679:13:0;;;;;;:9;:13;;;;;:18;;10696:1;;10679:13;:18;;10696:1;;10679:18;:::i;:::-;;;;-1:-1:-1;;10702:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10702:21:0;-1:-1:-1;;;;;10702:21:0;;;;;;;;10733:33;;10702:16;;;10733:33;;10702:16;;10733:33;10613:158;;:::o;9945:303::-;10037:4;10056:16;10064:7;10056;:16::i;:::-;10048:50;;;;-1:-1:-1;;;10048:50:0;;36664:2:1;10048:50:0;;;36646:21:1;36703:2;36683:18;;;36676:30;-1:-1:-1;;;36722:18:1;;;36715:51;36783:18;;10048:50:0;36462:345:1;10048:50:0;10103:13;10119:23;10134:7;10119:14;:23::i;:::-;10103:39;;10166:5;-1:-1:-1;;;;;10155:16:0;:7;-1:-1:-1;;;;;10155:16:0;;:51;;;;10199:7;-1:-1:-1;;;;;10175:31:0;:20;10187:7;10175:11;:20::i;:::-;-1:-1:-1;;;;;10175:31:0;;10155:51;:87;;;;10210:32;10227:5;10234:7;10210:16;:32::i;10880:419::-;10999:4;-1:-1:-1;;;;;10972:31:0;:23;10987:7;10972:14;:23::i;:::-;-1:-1:-1;;;;;10972:31:0;;10964:59;;;;-1:-1:-1;;;10964:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11036:16:0;;11028:58;;;;-1:-1:-1;;;11028:58:0;;37014:2:1;11028:58:0;;;36996:21:1;37053:2;37033:18;;;37026:30;37092:31;37072:18;;;37065:59;37141:18;;11028:58:0;36812:353:1;11028:58:0;-1:-1:-1;;;;;11099:16:0;;11091:58;;;;-1:-1:-1;;;11091:58:0;;37014:2:1;11091:58:0;;;36996:21:1;37053:2;37033:18;;;37026:30;37092:31;37072:18;;;37065:59;37141:18;;11091:58:0;36812:353:1;11091:58:0;11154:29;11171:1;11175:7;11154:8;:29::i;:::-;-1:-1:-1;;;;;11188:15:0;;;;;;:9;:15;;;;;:20;;11207:1;;11188:15;:20;;11207:1;;11188:20;:::i;:::-;;;;-1:-1:-1;;;;;;;11213:13:0;;;;;;:9;:13;;;;;:18;;11230:1;;11213:13;:18;;11230:1;;11213:18;:::i;:::-;;;;-1:-1:-1;;11236:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;11236:21:0;-1:-1:-1;;;;;11236:21:0;;;;;;;;;11267:27;;11236:16;;11267:27;;;;;;;10880:419;;;:::o;13131:290::-;13188:7;13275:1;13271;:5;13263:35;;;;-1:-1:-1;;;13263:35:0;;37372:2:1;13263:35:0;;;37354:21:1;37411:2;37391:18;;;37384:30;-1:-1:-1;;;37430:18:1;;;37423:47;37487:18;;13263:35:0;37170:341:1;13263:35:0;13303:9;13315:5;13319:1;13315;:5;:::i;12727:399::-;12784:7;13003:1;13008;13003:6;13000:31;;-1:-1:-1;13024:1:0;13017:8;;13000:31;13037:9;13049:5;13053:1;13049;:5;:::i;:::-;13037:17;-1:-1:-1;13076:1:0;13067:5;13071:1;13037:17;13067:5;:::i;:::-;:10;13059:47;;;;-1:-1:-1;;;13059:47:0;;37718:2:1;13059:47:0;;;37700:21:1;37757:2;37737:18;;;37730:30;37796:26;37776:18;;;37769:54;37840:18;;13059:47:0;37516:348:1;10776:99:0;10830:40;;-1:-1:-1;;;10830:40:0;;38071:2:1;10830:40:0;;;38053:21:1;38110:1;38090:18;;;38083:29;-1:-1:-1;;;38128:18:1;;;38121:39;38177:18;;10830:40:0;37869:332:1;20699:227:0;20761:7;20789:1;20778:8;:12;:29;;;;;20805:2;20794:8;:13;20778:29;20775:147;;;-1:-1:-1;20822:1:0;;20699:227;-1:-1:-1;20699:227:0:o;20775:147::-;20852:2;20841:8;:13;:30;;;;;20869:2;20858:8;:13;20841:30;20838:84;;;-1:-1:-1;20886:1:0;;20699:227;-1:-1:-1;20699:227:0:o;20838:84::-;-1:-1:-1;20915:1:0;;20699:227;-1:-1:-1;20699:227:0:o;20838:84::-;20699:227;;;:::o;21951:378::-;22044:13;;;22054:2;22044:13;;;22007;22044;;;;;;22027:14;;22044:13;;;;;;;;;;;-1:-1:-1;22044:13:0;22027:30;;22067:6;22062:242;22083:2;22079:1;:6;22062:242;;;22098:8;22149:6;22154:1;22149:2;:6;:::i;:::-;22146:10;;:1;:10;:::i;:::-;22142:15;;:1;:15;:::i;:::-;22122:36;;-1:-1:-1;;;;;22122:16:0;;:36;:::i;:::-;22109:51;;22098:62;;22166:9;22196:2;22191:1;22185:8;;:13;;;;:::i;:::-;22178:21;;22166:33;;22205:9;22246:2;22240:9;;22235:2;:14;;;;:::i;:::-;22230:1;22224:8;;:25;;;;:::i;:::-;22217:33;;22205:45;;22265:8;22270:2;22265:4;:8::i;:::-;22256:1;22258:3;22260:1;22258;:3;:::i;:::-;22256:6;;;;;;;;:::i;:::-;;;;:17;-1:-1:-1;;;;;22256:17:0;;;;;;;;;22290:8;22295:2;22290:4;:8::i;:::-;22279:1;22281:3;22283:1;22281;:3;:::i;:::-;:5;;22285:1;22281:5;:::i;:::-;22279:8;;;;;;;;:::i;:::-;;;;:19;-1:-1:-1;;;;;22279:19:0;;;;;;;;;22092:212;;;22087:3;;;;;:::i;:::-;;;;22062:242;;;-1:-1:-1;22322:1:0;21951:378;-1:-1:-1;;21951:378:0:o;21203:743::-;21270:13;21304:1;21293:8;:12;:29;;;;;21320:2;21309:8;:13;21293:29;21290:652;;;21337:10;21330:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21203:743;;;:::o;21290:652::-;21376:2;21365:8;:13;:30;;;;;21393:2;21382:8;:13;21365:30;21362:580;;;21410:10;21403:17;;;;;:::i;21362:580::-;21449:2;21438:8;:13;:30;;;;;21466:2;21455:8;:13;21438:30;21435:507;;;21483:10;21476:17;;;;;:::i;21435:507::-;21522:2;21511:8;:13;:30;;;;;21539:2;21528:8;:13;21511:30;21508:434;;;21556:10;21549:17;;;;;:::i;21508:434::-;21595:2;21584:8;:13;:30;;;;;21612:2;21601:8;:13;21584:30;21581:361;;;21629:10;21622:17;;;;;:::i;21581:361::-;21668:2;21657:8;:13;:30;;;;;21685:2;21674:8;:13;21657:30;21654:288;;;21702:10;21695:17;;;;;:::i;21654:288::-;21741:2;21730:8;:13;:31;;;;;21758:3;21747:8;:14;21730:31;21727:215;;;21776:10;21769:17;;;;;:::i;21727:215::-;21815:3;21804:8;:14;:32;;;;;21833:3;21822:8;:14;21804:32;21801:141;;;21851:10;21844:17;;;;;:::i;21801:141::-;21890:3;21879:8;:14;:32;;;;;21908:3;21897:8;:14;21879:32;21876:66;;;21926:10;21919:17;;;;;:::i;9558:260::-;9666:28;9676:4;9682:2;9686:7;9666:9;:28::i;:::-;9707:48;9730:4;9736:2;9740:7;9749:5;9707:22;:48::i;:::-;9699:114;;;;-1:-1:-1;;;9699:114:0;;40351:2:1;9699:114:0;;;40333:21:1;40390:2;40370:18;;;40363:30;40429:34;40409:18;;;40402:62;-1:-1:-1;;;40480:18:1;;;40473:51;40541:19;;9699:114:0;40149:417:1;23004:141:0;23063:13;23114:9;23125:13;23097:42;;;;;;;;;:::i;20275:154::-;20321:8;20350:2;20339:8;;;;:13;20336:88;;;20368:15;:8;;;;20379:4;20368:15;:::i;:::-;20361:23;;;20275:154;-1:-1:-1;;20275:154:0:o;20336:88::-;20408:15;:8;;;;20419:4;20408:15;:::i;11468:587::-;11579:4;-1:-1:-1;;;;;11593:13:0;;1767:20;1803:8;11590:461;;11620:72;;-1:-1:-1;;;11620:72:0;;-1:-1:-1;;;;;11620:36:0;;;;;:72;;4724:10;;11671:4;;11677:7;;11686:5;;11620:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11620:72:0;;;;;;;;-1:-1:-1;;11620:72:0;;;;;;;;;;;;:::i;:::-;;;11616:398;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11827:6;:13;11844:1;11827:18;11824:184;;11855:60;;-1:-1:-1;;;11855:60:0;;41521:2:1;11855:60:0;;;41503:21:1;41560:2;41540:18;;;41533:30;41599:34;41579:18;;;41572:62;-1:-1:-1;;;41650:18:1;;;41643:48;41708:19;;11855:60:0;41319:414:1;11824:184:0;11985:6;11979:13;11970:6;11966:2;11962:15;11955:38;11616:398;-1:-1:-1;;;;;;11730:51:0;-1:-1:-1;;;11730:51:0;;-1:-1:-1;11723:58:0;;11590:461;-1:-1:-1;12041:4:0;11468:587;;;;;;:::o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:131::-;-1:-1:-1;;;;;1816:31:1;;1806:42;;1796:70;;1862:1;1859;1852:12;1877:315;1945:6;1953;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;2061:9;2048:23;2080:31;2105:5;2080:31;:::i;:::-;2130:5;2182:2;2167:18;;;;2154:32;;-1:-1:-1;;;1877:315:1:o;2197:127::-;2258:10;2253:3;2249:20;2246:1;2239:31;2289:4;2286:1;2279:15;2313:4;2310:1;2303:15;2329:632;2394:5;2424:18;2465:2;2457:6;2454:14;2451:40;;;2471:18;;:::i;:::-;2546:2;2540:9;2514:2;2600:15;;-1:-1:-1;;2596:24:1;;;2622:2;2592:33;2588:42;2576:55;;;2646:18;;;2666:22;;;2643:46;2640:72;;;2692:18;;:::i;:::-;2732:10;2728:2;2721:22;2761:6;2752:15;;2791:6;2783;2776:22;2831:3;2822:6;2817:3;2813:16;2810:25;2807:45;;;2848:1;2845;2838:12;2807:45;2898:6;2893:3;2886:4;2878:6;2874:17;2861:44;2953:1;2946:4;2937:6;2929;2925:19;2921:30;2914:41;;;;2329:632;;;;;:::o;2966:451::-;3035:6;3088:2;3076:9;3067:7;3063:23;3059:32;3056:52;;;3104:1;3101;3094:12;3056:52;3144:9;3131:23;3177:18;3169:6;3166:30;3163:50;;;3209:1;3206;3199:12;3163:50;3232:22;;3285:4;3277:13;;3273:27;-1:-1:-1;3263:55:1;;3314:1;3311;3304:12;3263:55;3337:74;3403:7;3398:2;3385:16;3380:2;3376;3372:11;3337:74;:::i;3604:456::-;3681:6;3689;3697;3750:2;3738:9;3729:7;3725:23;3721:32;3718:52;;;3766:1;3763;3756:12;3718:52;3805:9;3792:23;3824:31;3849:5;3824:31;:::i;:::-;3874:5;-1:-1:-1;3931:2:1;3916:18;;3903:32;3944:33;3903:32;3944:33;:::i;:::-;3604:456;;3996:7;;-1:-1:-1;;;4050:2:1;4035:18;;;;4022:32;;3604:456::o;4065:248::-;4133:6;4141;4194:2;4182:9;4173:7;4169:23;4165:32;4162:52;;;4210:1;4207;4200:12;4162:52;-1:-1:-1;;4233:23:1;;;4303:2;4288:18;;;4275:32;;-1:-1:-1;4065:248:1:o;4597:247::-;4656:6;4709:2;4697:9;4688:7;4684:23;4680:32;4677:52;;;4725:1;4722;4715:12;4677:52;4764:9;4751:23;4783:31;4808:5;4783:31;:::i;5056:118::-;5142:5;5135:13;5128:21;5121:5;5118:32;5108:60;;5164:1;5161;5154:12;5179:382;5244:6;5252;5305:2;5293:9;5284:7;5280:23;5276:32;5273:52;;;5321:1;5318;5311:12;5273:52;5360:9;5347:23;5379:31;5404:5;5379:31;:::i;:::-;5429:5;-1:-1:-1;5486:2:1;5471:18;;5458:32;5499:30;5458:32;5499:30;:::i;:::-;5548:7;5538:17;;;5179:382;;;;;:::o;5566:795::-;5661:6;5669;5677;5685;5738:3;5726:9;5717:7;5713:23;5709:33;5706:53;;;5755:1;5752;5745:12;5706:53;5794:9;5781:23;5813:31;5838:5;5813:31;:::i;:::-;5863:5;-1:-1:-1;5920:2:1;5905:18;;5892:32;5933:33;5892:32;5933:33;:::i;:::-;5985:7;-1:-1:-1;6039:2:1;6024:18;;6011:32;;-1:-1:-1;6094:2:1;6079:18;;6066:32;6121:18;6110:30;;6107:50;;;6153:1;6150;6143:12;6107:50;6176:22;;6229:4;6221:13;;6217:27;-1:-1:-1;6207:55:1;;6258:1;6255;6248:12;6207:55;6281:74;6347:7;6342:2;6329:16;6324:2;6320;6316:11;6281:74;:::i;:::-;6271:84;;;5566:795;;;;;;;:::o;6366:388::-;6434:6;6442;6495:2;6483:9;6474:7;6470:23;6466:32;6463:52;;;6511:1;6508;6501:12;6463:52;6550:9;6537:23;6569:31;6594:5;6569:31;:::i;:::-;6619:5;-1:-1:-1;6676:2:1;6661:18;;6648:32;6689:33;6648:32;6689:33;:::i;7026:380::-;7105:1;7101:12;;;;7148;;;7169:61;;7223:4;7215:6;7211:17;7201:27;;7169:61;7276:2;7268:6;7265:14;7245:18;7242:38;7239:161;;7322:10;7317:3;7313:20;7310:1;7303:31;7357:4;7354:1;7347:15;7385:4;7382:1;7375:15;7239:161;;7026:380;;;:::o;7884:963::-;7993:4;8022:2;8051;8040:9;8033:21;8074:1;8107:6;8101:13;8137:36;8163:9;8137:36;:::i;:::-;8209:6;8204:2;8193:9;8189:18;8182:34;8235:2;8256:1;8288:2;8277:9;8273:18;8305:1;8300:158;;;;8472:1;8467:354;;;;8266:555;;8300:158;-1:-1:-1;;8348:24:1;;8328:18;;;8321:52;8426:14;;8419:22;8416:1;8412:30;8397:46;;8393:55;;;-1:-1:-1;8300:158:1;;8467:354;8498:6;8495:1;8488:17;8546:2;8543:1;8533:16;8571:1;8585:180;8599:6;8596:1;8593:13;8585:180;;;8692:14;;8668:17;;;8664:26;;8657:50;8735:16;;;;8614:10;;8585:180;;;8789:17;;8785:26;;;-1:-1:-1;;8266:555:1;-1:-1:-1;8838:3:1;;7884:963;-1:-1:-1;;;;;;;;7884:963:1:o;8852:722::-;8902:3;8943:5;8937:12;8972:36;8998:9;8972:36;:::i;:::-;9027:1;9044:18;;;9071:133;;;;9218:1;9213:355;;;;9037:531;;9071:133;-1:-1:-1;;9104:24:1;;9092:37;;9177:14;;9170:22;9158:35;;9149:45;;;-1:-1:-1;9071:133:1;;9213:355;9244:5;9241:1;9234:16;9273:4;9318:2;9315:1;9305:16;9343:1;9357:165;9371:6;9368:1;9365:13;9357:165;;;9449:14;;9436:11;;;9429:35;9492:16;;;;9386:10;;9357:165;;;9361:3;;;9551:6;9546:3;9542:16;9535:23;;9037:531;;;;;8852:722;;;;:::o;9579:277::-;9752:3;9777:73;9811:38;9845:3;9837:6;9811:38;:::i;:::-;9803:6;9777:73;:::i;9861:647::-;10141:3;10179:6;10173:13;10195:66;10254:6;10249:3;10242:4;10234:6;10230:17;10195:66;:::i;:::-;-1:-1:-1;;;10283:16:1;;;10308:25;;;10358:13;;10380:78;10358:13;10445:1;10434:13;;10427:4;10415:17;;10380:78;:::i;:::-;10478:20;10500:1;10474:28;;9861:647;-1:-1:-1;;;;9861:647:1:o;10513:339::-;10715:2;10697:21;;;10754:2;10734:18;;;10727:30;-1:-1:-1;;;10788:2:1;10773:18;;10766:45;10843:2;10828:18;;10513:339::o;10857:545::-;10959:2;10954:3;10951:11;10948:448;;;10995:1;11020:5;11016:2;11009:17;11065:4;11061:2;11051:19;11135:2;11123:10;11119:19;11116:1;11112:27;11106:4;11102:38;11171:4;11159:10;11156:20;11153:47;;;-1:-1:-1;11194:4:1;11153:47;11249:2;11244:3;11240:12;11237:1;11233:20;11227:4;11223:31;11213:41;;11304:82;11322:2;11315:5;11312:13;11304:82;;;11367:17;;;11348:1;11337:13;11304:82;;;11308:3;;;10857:545;;;:::o;11578:1352::-;11704:3;11698:10;11731:18;11723:6;11720:30;11717:56;;;11753:18;;:::i;:::-;11782:97;11872:6;11832:38;11864:4;11858:11;11832:38;:::i;:::-;11826:4;11782:97;:::i;:::-;11934:4;;11998:2;11987:14;;12015:1;12010:663;;;;12717:1;12734:6;12731:89;;;-1:-1:-1;12786:19:1;;;12780:26;12731:89;-1:-1:-1;;11535:1:1;11531:11;;;11527:24;11523:29;11513:40;11559:1;11555:11;;;11510:57;12833:81;;11980:944;;12010:663;7831:1;7824:14;;;7868:4;7855:18;;-1:-1:-1;;12046:20:1;;;12164:236;12178:7;12175:1;12172:14;12164:236;;;12267:19;;;12261:26;12246:42;;12359:27;;;;12327:1;12315:14;;;;12194:19;;12164:236;;;12168:3;12428:6;12419:7;12416:19;12413:201;;;12489:19;;;12483:26;-1:-1:-1;;12572:1:1;12568:14;;;12584:3;12564:24;12560:37;12556:42;12541:58;12526:74;;12413:201;-1:-1:-1;;;;;12660:1:1;12644:14;;;12640:22;12627:36;;-1:-1:-1;11578:1352:1:o;13191:494::-;13368:3;13406:6;13400:13;13422:66;13481:6;13476:3;13469:4;13461:6;13457:17;13422:66;:::i;:::-;13551:13;;13510:16;;;;13573:70;13551:13;13510:16;13620:4;13608:17;;13573:70;:::i;:::-;13659:20;;13191:494;-1:-1:-1;;;;13191:494:1:o;13690:638::-;13968:3;14006:6;14000:13;14022:66;14081:6;14076:3;14069:4;14061:6;14057:17;14022:66;:::i;:::-;-1:-1:-1;;;14110:16:1;;;14135:18;;;14178:13;;14200:78;14178:13;14265:1;14254:13;;14247:4;14235:17;;14200:78;:::i;:::-;14298:20;14320:1;14294:28;;13690:638;-1:-1:-1;;;;13690:638:1:o;14333:127::-;14394:10;14389:3;14385:20;14382:1;14375:31;14425:4;14422:1;14415:15;14449:4;14446:1;14439:15;14465:135;14504:3;14525:17;;;14522:43;;14545:18;;:::i;:::-;-1:-1:-1;14592:1:1;14581:13;;14465:135::o;14605:450::-;14835:3;14873:6;14867:13;14889:66;14948:6;14943:3;14936:4;14928:6;14924:17;14889:66;:::i;:::-;-1:-1:-1;;;14977:16:1;;15002:18;;;-1:-1:-1;15047:1:1;15036:13;;14605:450;-1:-1:-1;14605:450:1:o;15471:128::-;15538:9;;;15559:11;;;15556:37;;;15573:18;;:::i;17060:127::-;17121:10;17116:3;17112:20;17109:1;17102:31;17152:4;17149:1;17142:15;17176:4;17173:1;17166:15;17192:148;17280:4;17259:12;;;17273;;;17255:31;;17298:13;;17295:39;;;17314:18;;:::i;18960:413::-;-1:-1:-1;;;19263:16:1;;-1:-1:-1;;;19304:1:1;19295:11;;19288:51;19364:2;19355:12;;18960:413::o;19378:367::-;19552:3;19590:6;19584:13;19606:66;19665:6;19660:3;19653:4;19645:6;19641:17;19606:66;:::i;:::-;19688:51;19731:6;19726:3;19722:16;19714:6;19688:51;:::i;:::-;19681:58;19378:367;-1:-1:-1;;;;;19378:367:1:o;19750:451::-;19980:3;20018:6;20012:13;20034:66;20093:6;20088:3;20081:4;20073:6;20069:17;20034:66;:::i;:::-;-1:-1:-1;;;20122:16:1;;20147:19;;;-1:-1:-1;20193:1:1;20182:13;;19750:451;-1:-1:-1;19750:451:1:o;20206:459::-;20436:3;20474:6;20468:13;20490:66;20549:6;20544:3;20537:4;20529:6;20525:17;20490:66;:::i;:::-;-1:-1:-1;;;20578:16:1;;20603:27;;;-1:-1:-1;20657:1:1;20646:13;;20206:459;-1:-1:-1;20206:459:1:o;20670:451::-;20900:3;20938:6;20932:13;20954:66;21013:6;21008:3;21001:4;20993:6;20989:17;20954:66;:::i;:::-;-1:-1:-1;;;21042:16:1;;21067:19;;;-1:-1:-1;21113:1:1;21102:13;;20670:451;-1:-1:-1;20670:451:1:o;21126:492::-;21356:3;21394:6;21388:13;21410:66;21469:6;21464:3;21457:4;21449:6;21445:17;21410:66;:::i;:::-;-1:-1:-1;;;21498:16:1;;21523:59;;;-1:-1:-1;21609:2:1;21598:14;;21126:492;-1:-1:-1;21126:492:1:o;21623:528::-;21853:3;21891:6;21885:13;21907:66;21966:6;21961:3;21954:4;21946:6;21942:17;21907:66;:::i;:::-;22034:34;21995:16;;22020:49;;;-1:-1:-1;;;;22096:4:1;22085:16;;22078:37;22142:2;22131:14;;21623:528;-1:-1:-1;21623:528:1:o;22156:484::-;22386:3;22424:6;22418:13;22440:66;22499:6;22494:3;22487:4;22479:6;22475:17;22440:66;:::i;:::-;-1:-1:-1;;;22528:16:1;;22553:51;;;-1:-1:-1;22631:2:1;22620:14;;22156:484;-1:-1:-1;22156:484:1:o;22645:494::-;22875:3;22913:6;22907:13;22929:66;22988:6;22983:3;22976:4;22968:6;22964:17;22929:66;:::i;:::-;-1:-1:-1;;;23017:16:1;;23042:61;;;-1:-1:-1;23130:2:1;23119:14;;22645:494;-1:-1:-1;22645:494:1:o;23144:466::-;23374:3;23412:6;23406:13;23428:66;23487:6;23482:3;23475:4;23467:6;23463:17;23428:66;:::i;:::-;-1:-1:-1;;;23516:16:1;;23541:33;;;-1:-1:-1;23601:2:1;23590:14;;23144:466;-1:-1:-1;23144:466:1:o;23615:496::-;23845:3;23883:6;23877:13;23899:66;23958:6;23953:3;23946:4;23938:6;23934:17;23899:66;:::i;:::-;-1:-1:-1;;;23987:16:1;;24012:63;;;-1:-1:-1;24102:2:1;24091:14;;23615:496;-1:-1:-1;23615:496:1:o;24116:457::-;24346:3;24384:6;24378:13;24400:66;24459:6;24454:3;24447:4;24439:6;24435:17;24400:66;:::i;:::-;-1:-1:-1;;;24488:16:1;;24513:25;;;-1:-1:-1;24565:1:1;24554:13;;24116:457;-1:-1:-1;24116:457:1:o;24578:480::-;24808:3;24846:6;24840:13;24862:66;24921:6;24916:3;24909:4;24901:6;24897:17;24862:66;:::i;:::-;-1:-1:-1;;;24950:16:1;;24975:47;;;-1:-1:-1;25049:2:1;25038:14;;24578:480;-1:-1:-1;24578:480:1:o;25063:453::-;25293:3;25331:6;25325:13;25347:66;25406:6;25401:3;25394:4;25386:6;25382:17;25347:66;:::i;:::-;-1:-1:-1;;;25435:16:1;;25460:21;;;-1:-1:-1;25508:1:1;25497:13;;25063:453;-1:-1:-1;25063:453:1:o;25521:490::-;25751:3;25789:6;25783:13;25805:66;25864:6;25859:3;25852:4;25844:6;25840:17;25805:66;:::i;:::-;-1:-1:-1;;;25893:16:1;;25918:57;;;-1:-1:-1;26002:2:1;25991:14;;25521:490;-1:-1:-1;25521:490:1:o;26016:450::-;26246:3;26284:6;26278:13;26300:66;26359:6;26354:3;26347:4;26339:6;26335:17;26300:66;:::i;:::-;-1:-1:-1;;;26388:16:1;;26413:18;;;-1:-1:-1;26458:1:1;26447:13;;26016:450;-1:-1:-1;26016:450:1:o;26471:501::-;26701:3;26739:6;26733:13;26755:66;26814:6;26809:3;26802:4;26794:6;26790:17;26755:66;:::i;:::-;-1:-1:-1;;;26843:16:1;;26868:68;;;-1:-1:-1;26963:2:1;26952:14;;26471:501;-1:-1:-1;26471:501:1:o;26977:480::-;27207:3;27245:6;27239:13;27261:66;27320:6;27315:3;27308:4;27300:6;27296:17;27261:66;:::i;:::-;-1:-1:-1;;;27349:16:1;;27374:47;;;-1:-1:-1;27448:2:1;27437:14;;26977:480;-1:-1:-1;26977:480:1:o;27462:451::-;27692:3;27730:6;27724:13;27746:66;27805:6;27800:3;27793:4;27785:6;27781:17;27746:66;:::i;:::-;-1:-1:-1;;;27834:16:1;;27859:19;;;-1:-1:-1;27905:1:1;27894:13;;27462:451;-1:-1:-1;27462:451:1:o;27918:501::-;28148:3;28186:6;28180:13;28202:66;28261:6;28256:3;28249:4;28241:6;28237:17;28202:66;:::i;:::-;-1:-1:-1;;;28290:16:1;;28315:68;;;-1:-1:-1;28410:2:1;28399:14;;27918:501;-1:-1:-1;27918:501:1:o;28424:494::-;28654:3;28692:6;28686:13;28708:66;28767:6;28762:3;28755:4;28747:6;28743:17;28708:66;:::i;:::-;-1:-1:-1;;;28796:16:1;;28821:61;;;-1:-1:-1;28909:2:1;28898:14;;28424:494;-1:-1:-1;28424:494:1:o;28923:450::-;29153:3;29191:6;29185:13;29207:66;29266:6;29261:3;29254:4;29246:6;29242:17;29207:66;:::i;:::-;-1:-1:-1;;;29295:16:1;;29320:18;;;-1:-1:-1;29365:1:1;29354:13;;28923:450;-1:-1:-1;28923:450:1:o;29378:490::-;29608:3;29646:6;29640:13;29662:66;29721:6;29716:3;29709:4;29701:6;29697:17;29662:66;:::i;:::-;-1:-1:-1;;;29750:16:1;;29775:57;;;-1:-1:-1;29859:2:1;29848:14;;29378:490;-1:-1:-1;29378:490:1:o;29873:494::-;30103:3;30141:6;30135:13;30157:66;30216:6;30211:3;30204:4;30196:6;30192:17;30157:66;:::i;:::-;-1:-1:-1;;;30245:16:1;;30270:61;;;-1:-1:-1;30358:2:1;30347:14;;29873:494;-1:-1:-1;29873:494:1:o;30716:168::-;30756:7;30822:1;30818;30814:6;30810:14;30807:1;30804:21;30799:1;30792:9;30785:17;30781:45;30778:71;;;30829:18;;:::i;:::-;-1:-1:-1;30869:9:1;;30716:168::o;30889:496::-;31119:3;31157:6;31151:13;31173:66;31232:6;31227:3;31220:4;31212:6;31208:17;31173:66;:::i;:::-;-1:-1:-1;;;31261:16:1;;31286:63;;;-1:-1:-1;31376:2:1;31365:14;;30889:496;-1:-1:-1;30889:496:1:o;31390:501::-;31620:3;31658:6;31652:13;31674:66;31733:6;31728:3;31721:4;31713:6;31709:17;31674:66;:::i;:::-;-1:-1:-1;;;31762:16:1;;31787:68;;;-1:-1:-1;31882:2:1;31871:14;;31390:501;-1:-1:-1;31390:501:1:o;31896:514::-;32126:3;32164:6;32158:13;32180:66;32239:6;32234:3;32227:4;32219:6;32215:17;32180:66;:::i;:::-;32307;32268:16;;32293:81;;;-1:-1:-1;32401:2:1;32390:14;;31896:514;-1:-1:-1;31896:514:1:o;32415:496::-;32645:3;32683:6;32677:13;32699:66;32758:6;32753:3;32746:4;32738:6;32734:17;32699:66;:::i;:::-;-1:-1:-1;;;32787:16:1;;32812:63;;;-1:-1:-1;32902:2:1;32891:14;;32415:496;-1:-1:-1;32415:496:1:o;34386:643::-;34666:3;34704:6;34698:13;34720:66;34779:6;34774:3;34767:4;34759:6;34755:17;34720:66;:::i;:::-;-1:-1:-1;;;34808:16:1;;;34833:21;;;34879:13;;34901:78;34879:13;34966:1;34955:13;;34948:4;34936:17;;34901:78;:::i;:::-;34999:20;35021:1;34995:28;;34386:643;-1:-1:-1;;;;34386:643:1:o;35034:184::-;35104:6;35157:2;35145:9;35136:7;35132:23;35128:32;35125:52;;;35173:1;35170;35163:12;35125:52;-1:-1:-1;35196:16:1;;35034:184;-1:-1:-1;35034:184:1:o;35223:245::-;35290:6;35343:2;35331:9;35322:7;35318:23;35314:32;35311:52;;;35359:1;35356;35349:12;35311:52;35391:9;35385:16;35410:28;35432:5;35410:28;:::i;35817:127::-;35878:10;35873:3;35869:20;35866:1;35859:31;35909:4;35906:1;35899:15;35933:4;35930:1;35923:15;35949:120;35989:1;36015;36005:35;;36020:18;;:::i;:::-;-1:-1:-1;36054:9:1;;35949:120::o;36074:112::-;36106:1;36132;36122:35;;36137:18;;:::i;:::-;-1:-1:-1;36171:9:1;;36074:112::o;36191:125::-;36256:9;;;36277:10;;;36274:36;;;36290:18;;:::i;36321:136::-;36360:3;36388:5;36378:39;;36397:18;;:::i;:::-;-1:-1:-1;;;36433:18:1;;36321:136::o;38206:422::-;38295:1;38338:5;38295:1;38352:270;38373:7;38363:8;38360:21;38352:270;;;38432:4;38428:1;38424:6;38420:17;38414:4;38411:27;38408:53;;;38441:18;;:::i;:::-;38491:7;38481:8;38477:22;38474:55;;;38511:16;;;;38474:55;38590:22;;;;38550:15;;;;38352:270;;;38356:3;38206:422;;;;;:::o;38633:806::-;38682:5;38712:8;38702:80;;-1:-1:-1;38753:1:1;38767:5;;38702:80;38801:4;38791:76;;-1:-1:-1;38838:1:1;38852:5;;38791:76;38883:4;38901:1;38896:59;;;;38969:1;38964:130;;;;38876:218;;38896:59;38926:1;38917:10;;38940:5;;;38964:130;39001:3;38991:8;38988:17;38985:43;;;39008:18;;:::i;:::-;-1:-1:-1;;39064:1:1;39050:16;;39079:5;;38876:218;;39178:2;39168:8;39165:16;39159:3;39153:4;39150:13;39146:36;39140:2;39130:8;39127:16;39122:2;39116:4;39113:12;39109:35;39106:77;39103:159;;;-1:-1:-1;39215:19:1;;;39247:5;;39103:159;39294:34;39319:8;39313:4;39294:34;:::i;:::-;39364:6;39360:1;39356:6;39352:19;39343:7;39340:32;39337:58;;;39375:18;;:::i;:::-;39413:20;;38633:806;-1:-1:-1;;;38633:806:1:o;39444:131::-;39504:5;39533:36;39560:8;39554:4;39533:36;:::i;39580:165::-;39618:1;39652:4;39649:1;39645:12;39676:3;39666:37;;39683:18;;:::i;:::-;39735:3;39728:4;39725:1;39721:12;39717:22;39712:27;;;39580:165;;;;:::o;39750:238::-;39788:7;39828:4;39825:1;39821:12;39860:4;39857:1;39853:12;39920:3;39914:4;39910:14;39905:3;39902:23;39895:3;39888:11;39881:19;39877:49;39874:75;;;39929:18;;:::i;39993:151::-;40083:4;40076:12;;;40062;;;40058:31;;40101:14;;40098:40;;;40118:18;;:::i;40571:489::-;-1:-1:-1;;;;;40840:15:1;;;40822:34;;40892:15;;40887:2;40872:18;;40865:43;40939:2;40924:18;;40917:34;;;40987:3;40982:2;40967:18;;40960:31;;;40765:4;;41008:46;;41034:19;;41026:6;41008:46;:::i;:::-;41000:54;40571:489;-1:-1:-1;;;;;;40571:489:1:o;41065:249::-;41134:6;41187:2;41175:9;41166:7;41162:23;41158:32;41155:52;;;41203:1;41200;41193:12;41155:52;41235:9;41229:16;41254:30;41278:5;41254:30;:::i
Swarm Source
ipfs://f22338b77e09402445511ba2c5fc75d7bda789e8c5acd0a1cb1344c65f156c24
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.