Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
Dogewood
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-01 */ pragma solidity 0.8.7; // SPDX-License-Identifier: Unlicense /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// Taken from Solmate: https://github.com/Rari-Capital/solmate abstract contract ERC20 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); /*/////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ function name() external view virtual returns (string memory); function symbol() external view virtual returns (string memory); function decimals() external view virtual returns (uint8); // string public constant name = "TREAT"; // string public constant symbol = "TREAT"; // uint8 public constant decimals = 18; /*/////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; mapping(address => bool) public isMinter; address public ruler; /*/////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ constructor() { ruler = msg.sender;} function approve(address spender, uint256 value) external returns (bool) { allowance[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function transfer(address to, uint256 value) external returns (bool) { balanceOf[msg.sender] -= value; // This is safe because the sum of all user // balances can't exceed type(uint256).max! unchecked { balanceOf[to] += value; } emit Transfer(msg.sender, to, value); return true; } function transferFrom( address from, address to, uint256 value ) external returns (bool) { if (allowance[from][msg.sender] != type(uint256).max) { allowance[from][msg.sender] -= value; } balanceOf[from] -= value; // This is safe because the sum of all user // balances can't exceed type(uint256).max! unchecked { balanceOf[to] += value; } emit Transfer(from, to, value); return true; } /*/////////////////////////////////////////////////////////////// PRIVILEGE //////////////////////////////////////////////////////////////*/ function mint(address to, uint256 value) external { require(isMinter[msg.sender], "FORBIDDEN TO MINT"); _mint(to, value); } function burn(address from, uint256 value) external { require(isMinter[msg.sender], "FORBIDDEN TO BURN"); _burn(from, value); } /*/////////////////////////////////////////////////////////////// Ruler Function //////////////////////////////////////////////////////////////*/ function setMinter(address minter, bool status) external { require(msg.sender == ruler, "NOT ALLOWED TO RULE"); isMinter[minter] = status; } function setRuler(address ruler_) external { require(msg.sender == ruler ||ruler == address(0), "NOT ALLOWED TO RULE"); ruler = ruler_; } /*/////////////////////////////////////////////////////////////// INTERNAL UTILS //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 value) internal { totalSupply += value; // This is safe because the sum of all user // balances can't exceed type(uint256).max! unchecked { balanceOf[to] += value; } emit Transfer(address(0), to, value); } function _burn(address from, uint256 value) internal { balanceOf[from] -= value; // This is safe because a user won't ever // have a balance larger than totalSupply! unchecked { totalSupply -= value; } emit Transfer(from, address(0), value); } } /// @notice Modern and gas efficient ERC-721 + ERC-20/EIP-2612-like implementation, /// including the MetaData, and partially, Enumerable extensions. contract ERC721 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed spender, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /*/////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ address implementation_; address public admin; //Lame requirement from opensea /*/////////////////////////////////////////////////////////////// ERC-721 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; uint256 public oldSupply; uint256 public minted; mapping(address => uint256) public balanceOf; mapping(uint256 => address) public ownerOf; mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; /*/////////////////////////////////////////////////////////////// VIEW FUNCTION //////////////////////////////////////////////////////////////*/ function owner() external view returns (address) { return admin; } /*/////////////////////////////////////////////////////////////// ERC-20-LIKE LOGIC //////////////////////////////////////////////////////////////*/ function transfer(address to, uint256 tokenId) external { require(msg.sender == ownerOf[tokenId], "NOT_OWNER"); _transfer(msg.sender, to, tokenId); } /*/////////////////////////////////////////////////////////////// ERC-721 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) external pure returns (bool supported) { supported = interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f; } function approve(address spender, uint256 tokenId) external { address owner_ = ownerOf[tokenId]; require(msg.sender == owner_ || isApprovedForAll[owner_][msg.sender], "NOT_APPROVED"); getApproved[tokenId] = spender; emit Approval(owner_, spender, tokenId); } function setApprovalForAll(address operator, bool approved) external { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function transferFrom(address from, address to, uint256 tokenId) public { require( msg.sender == from || msg.sender == getApproved[tokenId] || isApprovedForAll[from][msg.sender], "NOT_APPROVED" ); _transfer(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) external { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public { transferFrom(from, to, tokenId); if (to.code.length != 0) { // selector = `onERC721Received(address,address,uint,bytes)` (, bytes memory returned) = to.staticcall(abi.encodeWithSelector(0x150b7a02, msg.sender, from, tokenId, data)); bytes4 selector = abi.decode(returned, (bytes4)); require(selector == 0x150b7a02, "NOT_ERC721_RECEIVER"); } } /*/////////////////////////////////////////////////////////////// INTERNAL UTILS //////////////////////////////////////////////////////////////*/ function _transfer(address from, address to, uint256 tokenId) internal { require(ownerOf[tokenId] == from, "not owner"); balanceOf[from]--; balanceOf[to]++; delete getApproved[tokenId]; ownerOf[tokenId] = to; emit Transfer(from, to, tokenId); } function _mint(address to, uint256 tokenId) internal { require(ownerOf[tokenId] == address(0), "ALREADY_MINTED"); totalSupply++; // This is safe because the sum of all user // balances can't exceed type(uint256).max! unchecked { balanceOf[to]++; } ownerOf[tokenId] = to; emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal { address owner_ = ownerOf[tokenId]; require(ownerOf[tokenId] != address(0), "NOT_MINTED"); totalSupply--; balanceOf[owner_]--; delete ownerOf[tokenId]; emit Transfer(owner_, address(0), tokenId); } } interface ITraits { function tokenURI(uint256 tokenId) external view returns (string memory); function tokenURINotRevealed(uint256 tokenId) external view returns (string memory); function tokenURITopTalents(uint8 topTalentNo, uint256 tokenId) external view returns (string memory); } interface IDrawSvg { function drawSvg( string memory svgBreedColor, string memory svgBreedHead, string memory svgOffhand, string memory svgArmor, string memory svgMainhand ) external view returns (string memory); function drawSvgNew( string memory svgBreedColor, string memory svgBreedHead, string memory svgOffhand, string memory svgArmor, string memory svgMainhand ) external view returns (string memory); } interface INameChange { function changeName(address owner, uint256 id, string memory newName) external; } interface IDogewood { // struct to store each token's traits struct Doge2 { uint8 head; uint8 breed; uint8 color; uint8 class; uint8 armor; uint8 offhand; uint8 mainhand; uint16 level; uint16 breedRerollCount; uint16 classRerollCount; uint8 artStyle; // 0: new, 1: old } function getTokenTraits(uint256 tokenId) external view returns (Doge2 memory); function getGenesisSupply() external view returns (uint256); function validateOwnerOfDoge(uint256 id, address who_) external view returns (bool); function unstakeForQuest(address[] memory owners, uint256[] memory ids) external; function updateQuestCooldown(uint256[] memory doges, uint88 timestamp) external; function pull(address owner, uint256[] calldata ids) external; function manuallyAdjustDoge(uint256 id, uint8 head, uint8 breed, uint8 color, uint8 class, uint8 armor, uint8 offhand, uint8 mainhand, uint16 level, uint16 breedRerollCount, uint16 classRerollCount, uint8 artStyle) external; function transfer(address to, uint256 tokenId) external; // function doges(uint256 id) external view returns(uint8 head, uint8 breed, uint8 color, uint8 class, uint8 armor, uint8 offhand, uint8 mainhand, uint16 level); } interface IDogewoodForCommonerSale { function validateDogeOwnerForClaim(uint256 id, address who_) external view returns (bool); } interface ICastleForCommonerSale { function dogeOwner(uint256 id) external view returns (address); } // interface DogeLike { // function pull(address owner, uint256[] calldata ids) external; // function manuallyAdjustDoge(uint256 id, uint8 head, uint8 breed, uint8 color, uint8 class, uint8 armor, uint8 offhand, uint8 mainhand, uint16 level) external; // function transfer(address to, uint256 tokenId) external; // function doges(uint256 id) external view returns(uint8 head, uint8 breed, uint8 color, uint8 class, uint8 armor, uint8 offhand, uint8 mainhand, uint16 level); // } interface PortalLike { function sendMessage(bytes calldata message_) external; } interface CastleLike { function pullCallback(address owner, uint256[] calldata ids) external; } interface ERC20Like { function balanceOf(address from) external view returns(uint256 balance); function burn(address from, uint256 amount) external; function mint(address from, uint256 amount) external; function transfer(address to, uint256 amount) external; function transferFrom(address from, address to, uint256 value) external; } interface ERC1155Like { function mint(address to, uint256 id, uint256 amount) external; function burn(address from, uint256 id, uint256 amount) external; } interface ERC721Like { function transferFrom(address from, address to, uint256 id) external; function transfer(address to, uint256 id) external; function ownerOf(uint256 id) external view returns (address owner); function mint(address to, uint256 tokenid) external; } interface QuestLike { struct GroupConfig { uint16 lvlFrom; uint16 lvlTo; uint256 entryFee; // additional entry $TREAT uint256 initPrize; // init prize pool $TREAT } struct Action { uint256 id; // unique id to distinguish activities uint88 timestamp; uint256 doge; address owner; uint256 score; uint256 finalScore; } function doQuestByAdmin(uint256 doge, address owner, uint256 score, uint8 groupIndex, uint256 combatId) external; } interface IOracle { function request() external returns (uint64 key); function getRandom(uint64 id) external view returns(uint256 rand); } interface IVRF { function getRandom(uint256 seed) external returns (uint256); function getRandom(string memory seed) external returns (uint256); function getRand(uint256 nonce) external view returns (uint256); function getRange(uint min, uint max,uint nonce) external view returns(uint); } interface ICommoner { // struct to store each token's traits struct Commoner { uint8 head; uint8 breed; uint8 palette; uint8 bodyType; uint8 clothes; uint8 accessory; uint8 background; uint8 smithing; uint8 alchemy; uint8 cooking; } function getTokenTraits(uint256 tokenId) external view returns (Commoner memory); function getGenesisSupply() external view returns (uint256); function validateOwner(uint256 id, address who_) external view returns (bool); function pull(address owner, uint256[] calldata ids) external; function adjust(uint256 id, uint8 head, uint8 breed, uint8 palette, uint8 bodyType, uint8 clothes, uint8 accessory, uint8 background, uint8 smithing, uint8 alchemy, uint8 cooking) external; function transfer(address to, uint256 tokenId) external; } contract Dogewood is ERC721 { /*/////////////////////////////////////////////////////////////// Global STATE //////////////////////////////////////////////////////////////*/ // max number of tokens that can be minted - 5000 in production uint256 public constant MAX_SUPPLY = 5000; uint256 public constant GENESIS_SUPPLY = 2500; uint256 public constant mintCooldown = 12 hours; // Helpers to get Percentages uint256 constant tenPct = (type(uint16).max / 100) * 10; uint256 constant fifteenPct = (type(uint16).max / 100) * 15; uint256 constant fiftyPct = (type(uint16).max / 100) * 50; bool public presaleActive; bool public saleActive; mapping (address => uint8) public whitelist; mapping (address => uint8) public ogWhitelist; uint256 public mintPriceEth; uint256 public mintPriceZug; uint16 public constant MAX_ZUG_MINT = 200; uint16 public zugMintCount; // list of probabilities for each trait type // 0 - 6 are associated with head, breed, color, class, armor, offhand, mainhand uint8[][7] public rarities; // list of aliases for Walker's Alias algorithm // 0 - 6 are associated with head, breed, color, class, armor, offhand, mainhand uint8[][7] public aliases; // mapping from hashed(tokenTrait) to the tokenId it's associated with // used to ensure there are no duplicates mapping(uint256 => uint256) public existingCombinations; bool public rerollTreatOnly; uint256 public rerollPriceEth; uint256 public rerollPriceZug; uint256[] public rerollPrice; // level 1-20 uint256[] public upgradeLevelPrice; bytes32 internal entropySauce; ERC20 public treat; ERC20 public zug; mapping(address => bool) public auth; mapping(uint256 => Doge) internal doges; mapping(uint256 => Action) public activities; mapping(uint256 => Log) public mintLogs; mapping(RerollTypes => mapping(uint256 => uint256)) public rerollCountHistory; // rerollType => tokenId => rerollCount // reference to Traits ITraits public traits; mapping(uint256 => uint256) public rerollBlocks; // Layer2 migration data ------------- // MetadataHandlerLike public metadaHandler; mapping(bytes4 => address) implementer; // TODO -- remove fallback? address constant impl = 0x7ef61741D9a2b483E75D8AA0876Ce864d98cE331; address public castle; mapping(uint256 => uint8) public artStyles; // tokenId => style (0: new, 1: old) /*/////////////////////////////////////////////////////////////// End of data //////////////////////////////////////////////////////////////*/ function setImplementer(bytes4[] calldata funcs, address source) external onlyOwner { for (uint256 index = 0; index < funcs.length; index++) { implementer[funcs[index]] = source; } } function setAddresses( address _traits, address _treat, address _zug, address _castle ) external onlyOwner { traits = ITraits(_traits); treat = ERC20(_treat); zug = ERC20(_zug); castle = _castle; } function setTreat(address t_) external { require(msg.sender == admin); treat = ERC20(t_); } function setZug(address z_) external { require(msg.sender == admin); zug = ERC20(z_); } function setCastle(address c_) external { require(msg.sender == admin); castle = c_; } function setTraits(address t_) external { require(msg.sender == admin); traits = ITraits(t_); } function setAuth(address add, bool isAuth) external onlyOwner { auth[add] = isAuth; } function transferOwnership(address newOwner) external onlyOwner { admin = newOwner; } function setPresaleStatus(bool _status) external onlyOwner { presaleActive = _status; } function setSaleStatus(bool _status) external onlyOwner { saleActive = _status; } function setMintPrice(uint256 _mintPriceEth, uint256 _mintPriceZug) external onlyOwner { mintPriceEth = _mintPriceEth; mintPriceZug = _mintPriceZug; } function setRerollTreatOnly(bool _rerollTreatOnly) external onlyOwner { rerollTreatOnly = _rerollTreatOnly; } function setRerollPrice( uint256 _rerollPriceEth, uint256 _rerollPriceZug, uint256[] calldata _rerollPriceTreat ) external onlyOwner { rerollPriceEth = _rerollPriceEth; rerollPriceZug = _rerollPriceZug; rerollPrice = _rerollPriceTreat; } function setUpgradeLevelPrice(uint256[] calldata _upgradeLevelPrice) external onlyOwner { upgradeLevelPrice = _upgradeLevelPrice; } // function editWhitelist(address[] calldata wlAddresses) external onlyOwner { // for(uint256 i; i < wlAddresses.length; i++){ // whitelist[wlAddresses[i]] = 2; // } // } // function editOGWhitelist(address[] calldata wlAddresses) external onlyOwner { // for(uint256 i; i < wlAddresses.length; i++){ // ogWhitelist[wlAddresses[i]] = 1; // } // } /** RENDER */ function tokenURI(uint256 tokenId) public view returns (string memory) { // doges[tokenId] empty check require(rerollBlocks[tokenId] != block.number, "ERC721Metadata: URI query for nonexistent token"); return traits.tokenURI(tokenId); } event ActionMade( address owner, uint256 id, uint256 timestamp, uint8 activity ); /*/////////////////////////////////////////////////////////////// DATA STRUCTURES //////////////////////////////////////////////////////////////*/ struct Doge { uint8 head; uint8 breed; uint8 color; uint8 class; uint8 armor; uint8 offhand; uint8 mainhand; uint16 level; } struct Doge2 { uint8 head; uint8 breed; uint8 color; uint8 class; uint8 armor; uint8 offhand; uint8 mainhand; uint16 level; uint16 breedRerollCount; uint16 classRerollCount; uint8 artStyle; } enum Actions { UNSTAKED, FARMING } struct Action { address owner; uint88 timestamp; Actions action; } struct Log { address owner; uint88 timestamp; } enum RerollTypes { BREED, CLASS } /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ function initialize() public onlyOwner { admin = msg.sender; auth[msg.sender] = true; // initialize state presaleActive = false; saleActive = false; mintPriceEth = 0.065 ether; mintPriceZug = 300 ether; // I know this looks weird but it saves users gas by making lookup O(1) // A.J. Walker's Alias Algorithm // head rarities[0] = [173, 155, 255, 206, 206, 206, 114, 114, 114]; aliases[0] = [2, 2, 8, 0, 0, 0, 0, 1, 1]; // breed rarities[1] = [255, 255, 255, 255, 255, 255, 255, 255]; aliases[1] = [7, 7, 7, 7, 7, 7, 7, 7]; // color rarities[2] = [255, 188, 255, 229, 153, 76]; aliases[2] = [2, 2, 5, 0, 0, 1]; // class rarities[3] = [229, 127, 178, 255, 204, 204, 204, 102]; aliases[3] = [2, 2, 3, 7, 0, 0, 1, 1]; // armor rarities[4] = [255]; aliases[4] = [0]; // offhand rarities[5] = [255]; aliases[5] = [0]; // mainhand rarities[6] = [255]; aliases[6] = [0]; rerollTreatOnly = false; // set reroll price rerollPriceEth = 0.01 ether; rerollPriceZug = 50 ether; rerollPrice = [ 6 ether, 12 ether, 24 ether, 48 ether, 96 ether ]; // set upgrade level price // level 1-20 upgradeLevelPrice = [ 0 ether, 12 ether, 16 ether, 20 ether, 24 ether, 30 ether, 36 ether, 42 ether, 48 ether, 54 ether, 62 ether, 70 ether, 78 ether, 86 ether, 96 ether, 106 ether, 116 ether, 126 ether, 138 ether, 150 ether ]; } /*/////////////////////////////////////////////////////////////// MODIFIERS //////////////////////////////////////////////////////////////*/ modifier noCheaters() { uint256 size = 0; address acc = msg.sender; assembly { size := extcodesize(acc) } require( auth[msg.sender] || (msg.sender == tx.origin && size == 0), "you're trying to cheat!" ); _; // We'll use the last caller hash to add entropy to next caller entropySauce = keccak256(abi.encodePacked(acc, block.coinbase, entropySauce)); } modifier mintCoolDownPassed(uint256 id) { Log memory log_ = mintLogs[id]; require( block.timestamp >= log_.timestamp + mintCooldown, "still in cool down" ); _; } modifier isOwnerOfDoge(uint256 id) { require( ownerOf[id] == msg.sender || activities[id].owner == msg.sender, "not your doge" ); _; } modifier ownerOfDoge(uint256 id, address who_) { require(ownerOf[id] == who_ || activities[id].owner == who_, "not your doge"); _; } modifier onlyOwner() { require(msg.sender == admin); _; } modifier genesisMinting(uint8 amount) { require(totalSupply + amount <= GENESIS_SUPPLY, "genesis all minted"); _; } /*/////////////////////////////////////////////////////////////// PUBLIC FUNCTIONS //////////////////////////////////////////////////////////////*/ function validateDogeOwnerForClaim(uint256 id, address who_) external view returns (bool) { return (ownerOf[id] == who_ || activities[id].owner == who_ || ICastleForCommonerSale(castle).dogeOwner(id) == who_); } // function mintReserved(address to, uint8 amount) public genesisMinting(amount) onlyOwner { // for (uint256 i = 0; i < amount; i++) { // _mintDoge(to); // } // } // function mintOG(address to, uint8 amount) public genesisMinting(amount) noCheaters { // require(amount <= ogWhitelist[msg.sender], "Exceeds amount"); // ogWhitelist[msg.sender] = ogWhitelist[msg.sender] - amount; // for (uint256 i = 0; i < amount; i++) { // _mintDoge(to); // } // } // function presaleMintWithEth(uint8 amount) public payable genesisMinting(amount) noCheaters { // require(presaleActive, "Presale must be active to mint"); // require(amount <= whitelist[msg.sender], "Exceeds max amount"); // require(msg.value >= mintPriceEth * amount, "Value below price"); // whitelist[msg.sender] = whitelist[msg.sender] - amount; // for (uint256 i = 0; i < amount; i++) { // _mintDoge(msg.sender); // } // } // function presaleMintWithZug(uint8 amount) public genesisMinting(amount) noCheaters { // require(presaleActive, "Presale must be active to mint"); // require(whitelist[msg.sender] > 0, "No tokens reserved for this address"); // require(amount <= whitelist[msg.sender], "Exceeds max amount"); // require(zugMintCount+amount <= MAX_ZUG_MINT, "Exceeds max zug mint"); // whitelist[msg.sender] = whitelist[msg.sender] - amount; // zug.transferFrom(msg.sender, address(this), mintPriceZug * amount); // zugMintCount = zugMintCount + amount; // for (uint256 i = 0; i < amount; i++) { // _mintDoge(msg.sender); // } // } // function mintWithEth(uint8 amount) public payable genesisMinting(amount) noCheaters { // require(saleActive, "Sale must be active to mint"); // require(amount <= 2, "Exceeds max amount"); // require(msg.value >= mintPriceEth * amount, "Value below price"); // for (uint256 i = 0; i < amount; i++) { // _mintDoge(msg.sender); // } // } // function mintWithZug(uint8 amount) public genesisMinting(amount) noCheaters { // require(saleActive, "Sale must be active to mint"); // require(amount <= 2, "Exceeds max amount"); // require(zugMintCount+amount <= MAX_ZUG_MINT, "Exceeds max zug mint"); // zug.transferFrom(msg.sender, address(this), mintPriceZug * amount); // zugMintCount = zugMintCount + amount; // for (uint256 i = 0; i < amount; i++) { // _mintDoge(msg.sender); // } // } function recruit(uint256 id) public ownerOfDoge(id, msg.sender) mintCoolDownPassed(id) noCheaters { require(totalSupply <= MAX_SUPPLY, "all supply minted"); uint256 cost = _getMintingPrice(); if (cost > 0) treat.burn(msg.sender, cost); mintLogs[id].timestamp = uint88(block.timestamp); _mintDoge(msg.sender); } function upgradeLevelWithTreat(uint256 id) public ownerOfDoge(id, msg.sender) mintCoolDownPassed(id) noCheaters { _claim(id); // Need to claim to not have equipment reatroactively multiplying uint16 curVal = doges[id].level; require(curVal < 20, "already max level"); treat.burn(msg.sender, upgradeLevelPrice[curVal]); doges[id].level = curVal + 1; } function upgradeMultipleLevelWithTreat(uint256 id, uint16 toLevel) public ownerOfDoge(id, msg.sender) mintCoolDownPassed(id) noCheaters { uint16 curVal = doges[id].level; require(curVal < toLevel, "invalid level"); require(toLevel <= 20, "exceeds max level"); _claim(id); // Need to claim to not have equipment reatroactively multiplying treat.burn(msg.sender, getUpgradeLevelPrice(curVal, toLevel)); doges[id].level = toLevel; } function getUpgradeLevelPrice(uint16 curLevel, uint16 toLevel) public view returns(uint256) { uint256 _price = 0; for (uint16 i = curLevel; i < toLevel; i++) { _price += upgradeLevelPrice[i]; } return _price; } function changeArtStyle(uint256 id, uint8 style_) public ownerOfDoge(id, msg.sender) noCheaters { require(artStyles[id] != style_, "the same art style"); artStyles[id] = style_; } // function rerollWithEth(uint256 id, RerollTypes rerollType) // public // payable // ownerOfDoge(id, msg.sender) // mintCoolDownPassed(id) // noCheaters // { // require(!rerollTreatOnly, "Only TREAT for reroll"); // require(msg.value >= rerollPriceEth, "Value below price"); // _reroll(id, rerollType); // } // function rerollWithZug(uint256 id, RerollTypes rerollType) // public // ownerOfDoge(id, msg.sender) // mintCoolDownPassed(id) // noCheaters // { // require(!rerollTreatOnly, "Only TREAT for reroll"); // zug.transferFrom(msg.sender, address(this), rerollPriceZug); // _reroll(id, rerollType); // } function rerollWithTreat(uint256 id, RerollTypes rerollType) public ownerOfDoge(id, msg.sender) mintCoolDownPassed(id) noCheaters { uint256 price_ = rerollPrice[ rerollCountHistory[rerollType][id] < 5 ? rerollCountHistory[rerollType][id] : 4 ]; treat.burn(msg.sender, price_); _reroll(id, rerollType); } function _reroll( uint256 id, RerollTypes rerollType ) internal { rerollBlocks[id] = block.number; uint256 rand_ = _rand(); if (rerollType == RerollTypes.BREED) { doges[id].breed = uint8(_randomize(rand_, "BREED", id)) % uint8(rarities[1].length); } else if (rerollType == RerollTypes.CLASS) { uint16 randClass = uint16(_randomize(rand_, "CLASS", id)); doges[id].class = selectTrait(randClass, 3); } rerollCountHistory[rerollType][id]++; } /** * allows owner to withdraw funds from minting */ function withdraw() external onlyOwner { payable(msg.sender).transfer(address(this).balance); zug.transfer(msg.sender, zug.balanceOf(address(this))); } function doAction(uint256 id, Actions action_) public ownerOfDoge(id, msg.sender) noCheaters { _doAction(id, msg.sender, action_, msg.sender); } function _doAction( uint256 id, address dogeOwner, Actions action_, address who_ ) internal ownerOfDoge(id, who_) { Action memory action = activities[id]; require(action.action != action_, "already doing that"); // Picking the largest value between block.timestamp, action.timestamp and startingTime uint88 timestamp = uint88( block.timestamp > action.timestamp ? block.timestamp : action.timestamp ); if (action.action == Actions.UNSTAKED) { require(doges[id].level == 20, "can't stake under level 20"); _transfer(dogeOwner, address(this), id); } else { if (block.timestamp > action.timestamp) _claim(id); timestamp = timestamp > action.timestamp ? timestamp : action.timestamp; } address owner_ = action_ == Actions.UNSTAKED ? address(0) : dogeOwner; if (action_ == Actions.UNSTAKED) _transfer(address(this), dogeOwner, id); activities[id] = Action({ owner: owner_, timestamp: timestamp, action: action_ }); emit ActionMade(dogeOwner, id, block.timestamp, uint8(action_)); } function doActionWithManyDoges(uint256[] calldata ids, Actions action_) external { for (uint256 index = 0; index < ids.length; index++) { require( ownerOf[ids[index]] == msg.sender || activities[ids[index]].owner == msg.sender, "not your doge" ); _doAction(ids[index], msg.sender, action_, msg.sender); } } function claim(uint256[] calldata ids) external { for (uint256 index = 0; index < ids.length; index++) { _claim(ids[index]); } } function _claim(uint256 id) internal noCheaters { Action memory action = activities[id]; if (block.timestamp <= action.timestamp) return; uint256 timeDiff = uint256(block.timestamp - action.timestamp); if (action.action == Actions.FARMING && doges[id].level == 20) treat.mint( action.owner, claimableTreat(timeDiff, id, action.owner) ); activities[id].timestamp = uint88(block.timestamp); } function pull(address owner_, uint256[] calldata ids) external { require (msg.sender == castle, "not castle"); for (uint256 index = 0; index < ids.length; index++) { if (activities[ids[index]].action != Actions.UNSTAKED) _doAction(ids[index], owner_, Actions.UNSTAKED, owner_); _transfer(owner_, msg.sender, ids[index]); } CastleLike(msg.sender).pullCallback(owner_, ids); } function manuallyAdjustDoge(uint256 id, uint8 head, uint8 breed, uint8 color, uint8 class, uint8 armor, uint8 offhand, uint8 mainhand, uint16 level, uint16 breedRerollCount, uint16 classRerollCount, uint8 artStyle) external { require(msg.sender == admin || auth[msg.sender], "not authorized"); doges[id].head = head; doges[id].breed = breed; doges[id].color = color; doges[id].class = class; doges[id].armor = armor; doges[id].offhand = offhand; doges[id].mainhand = mainhand; doges[id].level = level; rerollCountHistory[RerollTypes.BREED][id] = breedRerollCount; rerollCountHistory[RerollTypes.CLASS][id] = classRerollCount; artStyles[id] = artStyle; } /*/////////////////////////////////////////////////////////////// VIEWERS //////////////////////////////////////////////////////////////*/ function getTokenTraits(uint256 tokenId) external view returns (Doge2 memory) { if (rerollBlocks[tokenId] == block.number) return Doge2({ head: 0, breed: 0, color: 0, class: 0, armor: 0, offhand: 0, mainhand: 0, level: 0, breedRerollCount: 0, classRerollCount: 0, artStyle: 0 }); return Doge2({ head: doges[tokenId].head, breed: doges[tokenId].breed, color: doges[tokenId].color, class: doges[tokenId].class, armor: doges[tokenId].armor, offhand: doges[tokenId].offhand, mainhand: doges[tokenId].mainhand, level: doges[tokenId].level, breedRerollCount: uint16(rerollCountHistory[RerollTypes.BREED][tokenId]), classRerollCount: uint16(rerollCountHistory[RerollTypes.CLASS][tokenId]), artStyle: artStyles[tokenId] }); } function claimable(uint256 id) external view returns (uint256) { if (activities[id].action == Actions.FARMING) { uint256 timeDiff = block.timestamp > activities[id].timestamp ? uint256(block.timestamp - activities[id].timestamp) : 0; return claimableTreat(timeDiff, id, activities[id].owner); } return 0; } function getGenesisSupply() external pure returns (uint256) { return GENESIS_SUPPLY; } function name() external pure returns (string memory) { return "Doges"; } function symbol() external pure returns (string memory) { return "Doges"; } /*/////////////////////////////////////////////////////////////// MINT FUNCTION //////////////////////////////////////////////////////////////*/ function _mintDoge(address to) internal { uint16 id = uint16(totalSupply + 1); rerollBlocks[id] = block.number; uint256 seed = random(id); generate(id, seed); _mint(to, id); mintLogs[id] = Log({ owner: to, timestamp: uint88(block.timestamp) }); } /*/////////////////////////////////////////////////////////////// INTERNAL HELPERS //////////////////////////////////////////////////////////////*/ function claimableTreat(uint256 timeDiff, uint256 id, address owner_) internal view returns (uint256) { Doge memory doge = doges[id]; uint256 rand_ = _rand(); uint256 treatAmount = (timeDiff * 1 ether) / 1 days; if (doge.class == 0) { // Warrior uint16 randPlus = uint16(_randomize(rand_, "Warrior1", id)); if (randPlus < fifteenPct) return treatAmount * 115 / 100; randPlus = uint16(_randomize(rand_, "Warrior2", id)); if (randPlus < fifteenPct) return treatAmount * 85 / 100; return treatAmount; } else if(doge.class == 1) { // Rogue uint16 randPlus = uint16(_randomize(rand_, "Rogue", id)); if (randPlus < tenPct) return treatAmount * 3; return treatAmount; } else if(doge.class == 2) { // Mage uint16 randPlus = uint16(_randomize(rand_, "Mage", id)); if (randPlus < fiftyPct) return treatAmount * 5 / 10; return treatAmount * 2; } else if(doge.class == 3) { // Hunter return treatAmount * 125 / 100; } else if(doge.class == 4) { // Cleric return treatAmount; } else if(doge.class == 5) { // Bard uint256 balance = balanceOf[owner_]; uint256 boost = 10 + (balance > 10 ? 10 : balance); return treatAmount * boost / 10; } else if(doge.class == 6) { // Merchant return treatAmount * (8 + (rand_ % 6)) / 10; } else if(doge.class == 7) { // Forager return treatAmount * (3 + doge.level) / 3; } return treatAmount; } /** * generates traits for a specific token, checking to make sure it's unique * @param tokenId the id of the token to generate traits for * @param seed a pseudorandom 256 bit number to derive traits from * @return t - a struct of traits for the given token ID */ function generate(uint256 tokenId, uint256 seed) internal returns (Doge memory t) { t = selectTraits(seed); doges[tokenId] = t; return t; // keep the following code for future use, current version using different seed, so no need for now // if (existingCombinations[structToHash(t)] == 0) { // doges[tokenId] = t; // existingCombinations[structToHash(t)] = tokenId; // return t; // } // return generate(tokenId, random(seed)); } /** * uses A.J. Walker's Alias algorithm for O(1) rarity table lookup * ensuring O(1) instead of O(n) reduces mint cost by more than 50% * probability & alias tables are generated off-chain beforehand * @param seed portion of the 256 bit seed to remove trait correlation * @param traitType the trait type to select a trait for * @return the ID of the randomly selected trait */ function selectTrait(uint16 seed, uint8 traitType) internal view returns (uint8) { uint8 trait = uint8(seed) % uint8(rarities[traitType].length); if (seed >> 8 < rarities[traitType][trait]) return trait; return aliases[traitType][trait]; } /** * selects the species and all of its traits based on the seed value * @param seed a pseudorandom 256 bit number to derive traits from * @return t - a struct of randomly selected traits */ function selectTraits(uint256 seed) internal view returns (Doge memory t) { t.head = selectTrait(uint16(seed & 0xFFFF), 0); seed >>= 16; t.breed = selectTrait(uint16(seed & 0xFFFF), 1); seed >>= 16; t.color = selectTrait(uint16(seed & 0xFFFF), 2); seed >>= 16; t.class = selectTrait(uint16(seed & 0xFFFF), 3); seed >>= 16; t.armor = selectTrait(uint16(seed & 0xFFFF), 4); seed >>= 16; t.offhand = selectTrait(uint16(seed & 0xFFFF), 5); seed >>= 16; t.mainhand = selectTrait(uint16(seed & 0xFFFF), 6); t.level = 1; } /** * converts a struct to a 256 bit hash to check for uniqueness * @param s the struct to pack into a hash * @return the 256 bit hash of the struct */ function structToHash(Doge memory s) internal pure returns (uint256) { return uint256(bytes32( abi.encodePacked( s.head, s.breed, s.color, s.class, s.armor, s.offhand, s.mainhand, s.level ) )); } /// @dev Create a bit more of randomness function _randomize( uint256 rand, string memory val, uint256 spicy ) internal pure returns (uint256) { return uint256(keccak256(abi.encode(rand, val, spicy))); } function _rand() internal view returns (uint256) { return uint256( keccak256( abi.encodePacked( tx.origin, blockhash(block.number - 1), block.timestamp, entropySauce ) ) ); } /** * generates a pseudorandom number * @param seed a value ensure different outcomes for different sources in the same block * @return a pseudorandom value */ function random(uint256 seed) internal view returns (uint256) { return uint256(keccak256(abi.encodePacked( tx.origin, blockhash(block.number - 1), block.timestamp, seed ))); } function _getMintingPrice() internal view returns (uint256) { uint256 supply = totalSupply; if (supply < 2500) return 0; if (supply < 3000) return 4 ether; if (supply < 4600) return 25 ether; if (supply < 5000) return 85 ether; return 85 ether; } /*/////////////////////////////////////////////////////////////// FALLBACK HANDLER //////////////////////////////////////////////////////////////*/ function _delegate(address implementation) internal virtual { assembly { // Copy msg.data. We take full control of memory in this inline assembly // block because it will not return to Solidity code. We overwrite the // Solidity scratch pad at memory position 0. calldatacopy(0, 0, calldatasize()) // Call the implementation. // out and outsize are 0 because we don't know the size yet. let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) // Copy the returned data. returndatacopy(0, 0, returndatasize()) switch result // delegatecall returns 0 on error. case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } fallback() external { if(implementer[msg.sig] == address(0)) { _delegate(impl); } else { _delegate(implementer[msg.sig]); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"activity","type":"uint8"}],"name":"ActionMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"GENESIS_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ZUG_MINT","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"activities","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint88","name":"timestamp","type":"uint88"},{"internalType":"enum Dogewood.Actions","name":"action","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"aliases","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"artStyles","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"auth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"castle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint8","name":"style_","type":"uint8"}],"name":"changeArtStyle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"enum Dogewood.Actions","name":"action_","type":"uint8"}],"name":"doAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"enum Dogewood.Actions","name":"action_","type":"uint8"}],"name":"doActionWithManyDoges","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"existingCombinations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGenesisSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenTraits","outputs":[{"components":[{"internalType":"uint8","name":"head","type":"uint8"},{"internalType":"uint8","name":"breed","type":"uint8"},{"internalType":"uint8","name":"color","type":"uint8"},{"internalType":"uint8","name":"class","type":"uint8"},{"internalType":"uint8","name":"armor","type":"uint8"},{"internalType":"uint8","name":"offhand","type":"uint8"},{"internalType":"uint8","name":"mainhand","type":"uint8"},{"internalType":"uint16","name":"level","type":"uint16"},{"internalType":"uint16","name":"breedRerollCount","type":"uint16"},{"internalType":"uint16","name":"classRerollCount","type":"uint16"},{"internalType":"uint8","name":"artStyle","type":"uint8"}],"internalType":"struct Dogewood.Doge2","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"curLevel","type":"uint16"},{"internalType":"uint16","name":"toLevel","type":"uint16"}],"name":"getUpgradeLevelPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint8","name":"head","type":"uint8"},{"internalType":"uint8","name":"breed","type":"uint8"},{"internalType":"uint8","name":"color","type":"uint8"},{"internalType":"uint8","name":"class","type":"uint8"},{"internalType":"uint8","name":"armor","type":"uint8"},{"internalType":"uint8","name":"offhand","type":"uint8"},{"internalType":"uint8","name":"mainhand","type":"uint8"},{"internalType":"uint16","name":"level","type":"uint16"},{"internalType":"uint16","name":"breedRerollCount","type":"uint16"},{"internalType":"uint16","name":"classRerollCount","type":"uint16"},{"internalType":"uint8","name":"artStyle","type":"uint8"}],"name":"manuallyAdjustDoge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintLogs","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint88","name":"timestamp","type":"uint88"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPriceEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPriceZug","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ogWhitelist","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"pull","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rarities","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"recruit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rerollBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum Dogewood.RerollTypes","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rerollCountHistory","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rerollPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rerollPriceEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rerollPriceZug","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rerollTreatOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"enum Dogewood.RerollTypes","name":"rerollType","type":"uint8"}],"name":"rerollWithTreat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_traits","type":"address"},{"internalType":"address","name":"_treat","type":"address"},{"internalType":"address","name":"_zug","type":"address"},{"internalType":"address","name":"_castle","type":"address"}],"name":"setAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"},{"internalType":"bool","name":"isAuth","type":"bool"}],"name":"setAuth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"c_","type":"address"}],"name":"setCastle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4[]","name":"funcs","type":"bytes4[]"},{"internalType":"address","name":"source","type":"address"}],"name":"setImplementer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPriceEth","type":"uint256"},{"internalType":"uint256","name":"_mintPriceZug","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setPresaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rerollPriceEth","type":"uint256"},{"internalType":"uint256","name":"_rerollPriceZug","type":"uint256"},{"internalType":"uint256[]","name":"_rerollPriceTreat","type":"uint256[]"}],"name":"setRerollPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_rerollTreatOnly","type":"bool"}],"name":"setRerollTreatOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"t_","type":"address"}],"name":"setTraits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"t_","type":"address"}],"name":"setTreat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_upgradeLevelPrice","type":"uint256[]"}],"name":"setUpgradeLevelPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"z_","type":"address"}],"name":"setZug","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"supported","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"traits","outputs":[{"internalType":"contract ITraits","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treat","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"upgradeLevelPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"upgradeLevelWithTreat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint16","name":"toLevel","type":"uint16"}],"name":"upgradeMultipleLevelWithTreat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"who_","type":"address"}],"name":"validateDogeOwnerForClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zug","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zugMintCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50614ffc806100206000396000f3fe608060405234801561001057600080fd5b50600436106104745760003560e01c806370a0823111610257578063aeb94dcd11610146578063d897833e116100c3578063f2fde38b11610087578063f2fde38b14610b6b578063f4b2afc514610b7e578063f851a44014610ba1578063f9915c5214610bb4578063ffeef3cc14610bc757610474565b8063d897833e14610ad9578063dda8f65f14610aec578063e1fc334f14610b17578063e985e9c514610b2a578063ee75c24114610b5857610474565b8063c87b56dd1161010a578063c87b56dd14610a74578063c955947a14610a87578063cc02b89314610a9a578063cd5d211814610aa3578063d1d58b2514610ac657610474565b8063aeb94dcd14610a15578063afe455e814610a28578063b0c8df2514610a3b578063b88d4fde14610a4e578063c488051314610a6157610474565b80638da5cb5b116101d457806399ec67651161019857806399ec6765146109a35780639b19251a146109ac578063a1b8f374146109cf578063a22cb465146109ef578063a9059cbb14610a0257610474565b80638da5cb5b146109525780638ed5088a1461096357806394e568471461097657806395d89b41146105635780639690aeb61461099657610474565b80638129fc1c1161021b5780638129fc1c146108f85780638393f4781461090057806387982da21461092357806387cb802f146109365780638895283f1461093f57610474565b806370a082311461088c57806376bba70f146108ac57806376f0d51a146108bf5780637aef1b5e146108d25780637b1c9034146108e557610474565b806333df4b2c116103735780635aa450ac116102f05780636781013b116102b45780636781013b1461082e57806368428a1b1461084157806369491e9d146108535780636ba4c138146108665780636f4f73661461087957610474565b80635aa450ac146107cf5780635fce793e146107e25780636095a5fc146107ea5780636352211e146107fd57806366d4a16e1461082657610474565b806342842e0e1161033757806342842e0e14610780578063478241d1146107935780634a945f8d146107a65780634f02c420146107b957806353135ca0146107c257610474565b806333df4b2c1461072457806336838391146107495780633998251d1461075c5780633ccfd60b146107655780633f19ac881461076d57610474565b80630f47e751116104015780632000d430116103c55780632000d430146106e357806323b872dd146106ec57806326302a3c146106ff5780632c6962201461070857806332cb6b0c1461071b57610474565b80630f47e751146106315780630f5f3f2014610693578063174ffcdb146106a657806318160ddd146106c75780631e73ff4f146106d057610474565b806306fdde031161044857806306fdde0314610563578063081812fc1461058d578063095ea7b3146105b65780630b44a218146105c95780630d1657e8146105dc57610474565b8062f66038146104e657806301ffc9a7146105165780630442bfa814610539578063058508441461054c575b600080356001600160e01b0319168152602d60205260409020546001600160a01b03166104ba576104b8737ef61741d9a2b483e75d8aa0876ce864d98ce331610be7565b005b600080356001600160e01b0319168152602d60205260409020546104b8906001600160a01b0316610be7565b6025546104f9906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610529610524366004614749565b610c10565b604051901515815260200161050d565b6104b86105473660046148ea565b610c47565b61055560035481565b60405190815260200161050d565b604080518082019091526005815264446f67657360d81b60208201525b60405161050d9190614b93565b6104f961059b36600461484b565b6007602052600090815260409020546001600160a01b031681565b6104b86105c43660046145fe565b610c69565b6104b86105d73660046145d0565b610d4e565b6106226105ea36600461484b565b6028602052600090815260409020546001600160a01b03811690600160a01b81046001600160581b031690600160f81b900460ff1683565b60405161050d93929190614b48565b61066c61063f36600461484b565b6029602052600090815260409020546001600160a01b03811690600160a01b90046001600160581b031682565b604080516001600160a01b0390931683526001600160581b0390911660208301520161050d565b6104b86106a13660046143bc565b610d90565b600e546106b49061ffff1681565b60405161ffff909116815260200161050d565b61055560025481565b6104b86106de36600461484b565b610dc9565b61055561a8c081565b6104b86106fa36600461448b565b61100f565b61055560205481565b610555610716366004614818565b6110b0565b61055561138881565b6107376107323660046148ea565b61110e565b60405160ff909116815260200161050d565b6107376107573660046148ea565b611154565b610555601f5481565b6104b8611164565b602e546104f9906001600160a01b031681565b6104b861078e36600461448b565b6112ae565b6104b86107a13660046143bc565b6112c9565b6104b86107b436600461442f565b611302565b61055560045481565b6009546105299060ff1681565b6105556107dd36600461484b565b611369565b6109c4610555565b6104b86107f83660046146c3565b61138a565b6104f961080b36600461484b565b6006602052600090815260409020546001600160a01b031681565b6106b460c881565b6104b861083c36600461462a565b61146a565b60095461052990610100900460ff1681565b6104b86108613660046143bc565b611502565b6104b8610874366004614681565b61153b565b6104b86108873660046143bc565b611579565b61055561089a3660046143bc565b60056020526000908152604090205481565b6104b86108ba36600461495f565b6115b2565b6104b86108cd3660046148a2565b611704565b6105296108e036600461487d565b6117cb565b6104b86108f33660046148a2565b6118a2565b6104b8611b1d565b61073761090e36600461484b565b602f6020526000908152604090205460ff1681565b6024546104f9906001600160a01b031681565b610555600d5481565b6104b861094d36600461470f565b612079565b6001546001600160a01b03166104f9565b6104b861097136600461490c565b6120a3565b61098961098436600461484b565b6120d7565b60405161050d9190614c30565b601e546105299060ff1681565b6105556109c481565b6107376109ba3660046143bc565b600a6020526000908152604090205460ff1681565b6105556109dd36600461484b565b601d6020526000908152604090205481565b6104b86109fd3660046145d0565b6122a7565b6104b8610a103660046145fe565b612313565b6104b8610a233660046148c7565b612374565b6104b8610a3636600461484b565b6125ec565b6104b8610a49366004614982565b612850565b6104b8610a5c3660046144cc565b612af1565b6104b8610a6f36600461470f565b612c27565b610580610a8236600461484b565b612c51565b610555610a9536600461484b565b612d4a565b610555600c5481565b610529610ab13660046143bc565b60266020526000908152604090205460ff1681565b610555610ad436600461484b565b612d5a565b6104b8610ae736600461470f565b612e13565b610555610afa366004614783565b602a60209081526000928352604080842090915290825290205481565b602b546104f9906001600160a01b031681565b610529610b383660046143f6565b600860209081526000928352604080842090915290825290205460ff1681565b6104b8610b66366004614681565b612e44565b6104b8610b793660046143bc565b612e67565b610737610b8c3660046143bc565b600b6020526000908152604090205460ff1681565b6001546104f9906001600160a01b031681565b6104b8610bc236600461457b565b612ea0565b610555610bd536600461484b565b602c6020526000908152604090205481565b3660008037600080366000845af43d6000803e808015610c06573d6000f35b3d6000fd5b505050565b60006380ac58cd60e01b6001600160e01b031983161480610c415750635b5e139f60e01b6001600160e01b03198316145b92915050565b6001546001600160a01b03163314610c5e57600080fd5b600c91909155600d55565b6000818152600660205260409020546001600160a01b031633811480610cb257506001600160a01b038116600090815260086020908152604080832033845290915290205460ff165b610cf25760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b60448201526064015b60405180910390fd5b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6001546001600160a01b03163314610d6557600080fd5b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314610da757600080fd5b602480546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260066020526040902054819033906001600160a01b0316811480610e0b57506000828152602860205260409020546001600160a01b038281169116145b610e275760405162461bcd60e51b8152600401610ce990614ba6565b6000838152602960209081526040918290208251808401909352546001600160a01b0381168352600160a01b90046001600160581b0316908201819052849190610e749061a8c090614daf565b421015610e935760405162461bcd60e51b8152600401610ce990614c04565b33600081815260266020526040902054813b919060ff1680610ebd57503332148015610ebd575081155b610ed95760405162461bcd60e51b8152600401610ce990614bcd565b6113886002541115610f215760405162461bcd60e51b8152602060048201526011602482015270185b1b081cdd5c1c1b1e481b5a5b9d1959607a1b6044820152606401610ce9565b6000610f2b612fff565b90508015610f965760248054604051632770a7eb60e21b81523360048201529182018390526001600160a01b031690639dc29fac90604401600060405180830381600087803b158015610f7d57600080fd5b505af1158015610f91573d6000803e3d6000fd5b505050505b600088815260296020526040902080546affffffffffffffffffffff60a01b1916600160a01b426001600160581b031602179055610fd333613074565b508041602354604051602001610feb93929190614a83565b60408051601f19818403018152919052805160209091012060235550505050505050565b336001600160a01b038416148061103c57506000818152600760205260409020546001600160a01b031633145b8061106a57506001600160a01b038316600090815260086020908152604080832033845290915290205460ff165b6110a55760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b6044820152606401610ce9565b610c0b83838361312c565b600080835b8361ffff168161ffff1610156111065760228161ffff16815481106110dc576110dc614f54565b9060005260206000200154826110f29190614daf565b9150806110fe81614e9f565b9150506110b5565b509392505050565b600f826007811061111e57600080fd5b01818154811061112d57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6016826007811061111e57600080fd5b6001546001600160a01b0316331461117b57600080fd5b60405133904780156108fc02916000818181858888f193505050501580156111a7573d6000803e3d6000fd5b506025546040516370a0823160e01b81523060048201526001600160a01b039091169063a9059cbb90339083906370a082319060240160206040518083038186803b1580156111f557600080fd5b505afa158015611209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122d9190614864565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561127357600080fd5b505af1158015611287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ab919061472c565b50565b610c0b83838360405180602001604052806000815250612af1565b6001546001600160a01b031633146112e057600080fd5b602e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331461131957600080fd5b602b80546001600160a01b039586166001600160a01b03199182161790915560248054948616948216949094179093556025805492851692841692909217909155602e8054919093169116179055565b6021818154811061137957600080fd5b600091825260209091200154905081565b60005b828110156114645733600660008686858181106113ac576113ac614f54565b60209081029290920135835250810191909152604001600020546001600160a01b03161480611412575033602860008686858181106113ed576113ed614f54565b60209081029290920135835250810191909152604001600020546001600160a01b0316145b61142e5760405162461bcd60e51b8152600401610ce990614ba6565b61145284848381811061144357611443614f54565b90506020020135338433613244565b8061145c81614ec1565b91505061138d565b50505050565b6001546001600160a01b0316331461148157600080fd5b60005b828110156114645781602d60008686858181106114a3576114a3614f54565b90506020020160208101906114b89190614749565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b0392909216919091179055806114fa81614ec1565b915050611484565b6001546001600160a01b0316331461151957600080fd5b602580546001600160a01b0319166001600160a01b0392909216919091179055565b60005b81811015610c0b5761156783838381811061155b5761155b614f54565b90506020020135613603565b8061157181614ec1565b91505061153e565b6001546001600160a01b0316331461159057600080fd5b602b80546001600160a01b0319166001600160a01b0392909216919091179055565b600082815260066020526040902054829033906001600160a01b03168114806115f457506000828152602860205260409020546001600160a01b038281169116145b6116105760405162461bcd60e51b8152600401610ce990614ba6565b33600081815260266020526040902054813b919060ff168061163a5750333214801561163a575081155b6116565760405162461bcd60e51b8152600401610ce990614bcd565b6000868152602f602052604090205460ff868116911614156116af5760405162461bcd60e51b81526020600482015260126024820152717468652073616d6520617274207374796c6560701b6044820152606401610ce9565b6000868152602f6020908152604091829020805460ff191660ff891617905560235491516116e1928492419201614a83565b60408051601f198184030181529190528051602090910120602355505050505050565b600082815260066020526040902054829033906001600160a01b031681148061174657506000828152602860205260409020546001600160a01b038281169116145b6117625760405162461bcd60e51b8152600401610ce990614ba6565b33600081815260266020526040902054813b919060ff168061178c5750333214801561178c575081155b6117a85760405162461bcd60e51b8152600401610ce990614bcd565b6117b486338733613244565b80416023546040516020016116e193929190614a83565b6000828152600660205260408120546001600160a01b038381169116148061180c57506000838152602860205260409020546001600160a01b038381169116145b8061189b5750602e54604051630fb9a53760e31b8152600481018590526001600160a01b03848116921690637dcd29b89060240160206040518083038186803b15801561185857600080fd5b505afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189091906143d9565b6001600160a01b0316145b9392505050565b600082815260066020526040902054829033906001600160a01b03168114806118e457506000828152602860205260409020546001600160a01b038281169116145b6119005760405162461bcd60e51b8152600401610ce990614ba6565b6000848152602960209081526040918290208251808401909352546001600160a01b0381168352600160a01b90046001600160581b031690820181905285919061194d9061a8c090614daf565b42101561196c5760405162461bcd60e51b8152600401610ce990614c04565b33600081815260266020526040902054813b919060ff168061199657503332148015611996575081155b6119b25760405162461bcd60e51b8152600401610ce990614bcd565b600060216005602a60008b60018111156119ce576119ce614f3e565b60018111156119df576119df614f3e565b815260200190815260200160002060008c81526020019081526020016000205410611a0b576004611a53565b602a60008a6001811115611a2157611a21614f3e565b6001811115611a3257611a32614f3e565b815260200190815260200160002060008b8152602001908152602001600020545b81548110611a6357611a63614f54565b60009182526020909120015460248054604051632770a7eb60e21b81523360048201529182018390529192506001600160a01b0390911690639dc29fac90604401600060405180830381600087803b158015611abe57600080fd5b505af1158015611ad2573d6000803e3d6000fd5b50505050611ae08989613828565b508041602354604051602001611af893929190614a83565b60408051601f1981840301815291905280516020909101206023555050505050505050565b6001546001600160a01b03163314611b3457600080fd5b600180546001600160a01b031916339081178255600090815260266020908152604091829020805460ff19169093179092556009805461ffff1916815566e6ed27d6668000600c55681043561a8829300000600d5581516101208101835260ad8152609b9381019390935260ff9183019190915260ce606083018190526080830181905260a0830152607260c0830181905260e08301819052610100830152611bdf91600f916141c6565b506040805161012081018252600280825260208201526008918101919091526000606082018190526080820181905260a0820181905260c0820152600160e08201819052610100820152611c379060169060096141c6565b50604080516101008101825260ff80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152611c879060109060086141c6565b506040805161010081018252600780825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152611cd79060179060086141c6565b506040805160c08101825260ff80825260bc60208301529181019190915260e5606082015260996080820152604c60a0820152611d189060119060066141c6565b506040805160c081018252600280825260208201526005918101919091526000606082018190526080820152600160a0820152611d599060189060066141c6565b50604080516101008101825260e58152607f602082015260b29181019190915260ff606082015260cc6080820181905260a0820181905260c0820152606660e0820152611daa9060129060086141c6565b506040805161010081018252600280825260208201526003918101919091526007606082015260006080820181905260a0820152600160c0820181905260e0820152611dfa9060199060086141c6565b50604080516020810190915260ff8152611e189060139060016141c6565b50604080516020810190915260008152611e3690601a9060016141c6565b50604080516020810190915260ff8152611e549060149060016141c6565b50604080516020810190915260008152611e7290601b9060016141c6565b50604080516020810190915260ff8152611e909060159060016141c6565b50604080516020810190915260008152611eae90601c9060016141c6565b50601e805460ff19169055662386f26fc10000601f556802b5e3af16b188000060209081556040805160a0810182526753444835ec580000815267a688906bd8b000009281019290925268014d1120d7b16000009082015268029a2241af62c00000606082015268053444835ec58000006080820152611f3290602190600561426c565b5060408051610280810182526000815267a688906bd8b00000602082015267de0b6b3a76400000918101919091526801158e460913d00000606082015268014d1120d7b160000060808201526801a055690d9db8000060a08201526801f399b1438a10000060c0820152680246ddf9797668000060e082015268029a2241af62c000006101008201526802ed6689e54f18000061012082015268035c6c3f828a3800006101408201526803cb71f51fc558000061016082015268043a77aabd007800006101808201526804a97d605a3b9800006101a082015268053444835ec58000006101c08201526805bf0ba6634f6800006101e0820152680649d2c967d95000006102008201526806d499ec6c6338000061022082015268077b227cd83be80000610240820152680821ab0d44149800006102608201526112ab90602290601461426c565b6001546001600160a01b0316331461209057600080fd5b6009805460ff1916911515919091179055565b6001546001600160a01b031633146120ba57600080fd5b601f84905560208390556120d0602183836142b4565b5050505050565b6040805161016081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526000828152602c60205260409020544314156121a45750506040805161016081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b5060408051610160810182526000838152602760209081528382205460ff80821685526101008083048216848701526201000083048216868801526301000000830482166060870152640100000000830482166080870152650100000000008304821660a0870152600160301b8304821660c087015261ffff600160381b909304831660e08701528785527f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424a9c8452868520548316908601528684527f3f32b1e6928a174926c4b104dac81e478b6c8ab881d899ad155ded3e9d1b4426835285842054909116610120850152948252602f9052919091205490911661014082015290565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000818152600660205260409020546001600160a01b031633146123655760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b6044820152606401610ce9565b61237033838361312c565b5050565b600082815260066020526040902054829033906001600160a01b03168114806123b657506000828152602860205260409020546001600160a01b038281169116145b6123d25760405162461bcd60e51b8152600401610ce990614ba6565b6000848152602960209081526040918290208251808401909352546001600160a01b0381168352600160a01b90046001600160581b031690820181905285919061241f9061a8c090614daf565b42101561243e5760405162461bcd60e51b8152600401610ce990614c04565b33600081815260266020526040902054813b919060ff168061246857503332148015612468575081155b6124845760405162461bcd60e51b8152600401610ce990614bcd565b60008881526027602052604090205461ffff600160381b909104811690881681106124e15760405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081b195d995b609a1b6044820152606401610ce9565b60148861ffff16111561252a5760405162461bcd60e51b8152602060048201526011602482015270195e18d959591cc81b585e081b195d995b607a1b6044820152606401610ce9565b61253389613603565b6024546001600160a01b0316639dc29fac3361254f848c6110b0565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561259557600080fd5b505af11580156125a9573d6000803e3d6000fd5b50505060008a815260276020908152604091829020805461ffff60381b1916600160381b61ffff8e16021790556023549151611af8945085935041929101614a83565b600081815260066020526040902054819033906001600160a01b031681148061262e57506000828152602860205260409020546001600160a01b038281169116145b61264a5760405162461bcd60e51b8152600401610ce990614ba6565b6000838152602960209081526040918290208251808401909352546001600160a01b0381168352600160a01b90046001600160581b03169082018190528491906126979061a8c090614daf565b4210156126b65760405162461bcd60e51b8152600401610ce990614c04565b33600081815260266020526040902054813b919060ff16806126e0575033321480156126e0575081155b6126fc5760405162461bcd60e51b8152600401610ce990614bcd565b61270587613603565b600087815260276020526040902054600160381b900461ffff16601481106127635760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481b585e081b195d995b607a1b6044820152606401610ce9565b602454602280546001600160a01b0390921691639dc29fac91339161ffff861690811061279257612792614f54565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156127e457600080fd5b505af11580156127f8573d6000803e3d6000fd5b505050508060016128099190614d89565b600089815260276020908152604091829020805461ffff94909416600160381b0261ffff60381b19909416939093179092556023549051610feb9350849241929101614a83565b6001546001600160a01b031633148061287857503360009081526026602052604090205460ff165b6128b55760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610ce9565b8a602760008e815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555089602760008e815260200190815260200160002060000160016101000a81548160ff021916908360ff16021790555088602760008e815260200190815260200160002060000160026101000a81548160ff021916908360ff16021790555087602760008e815260200190815260200160002060000160036101000a81548160ff021916908360ff16021790555086602760008e815260200190815260200160002060000160046101000a81548160ff021916908360ff16021790555085602760008e815260200190815260200160002060000160056101000a81548160ff021916908360ff16021790555084602760008e815260200190815260200160002060000160066101000a81548160ff021916908360ff16021790555083602760008e815260200190815260200160002060000160076101000a81548161ffff021916908361ffff1602179055508261ffff16602a6000806001811115612a4a57612a4a614f3e565b6001811115612a5b57612a5b614f3e565b815260200190815260200160002060008e8152602001908152602001600020819055508161ffff16602a6000600180811115612a9957612a99614f3e565b6001811115612aaa57612aaa614f3e565b8152602080820192909252604090810160009081209f81529e8252808f2092909255602f9052909b20805460ff191660ff909c169b909b17909a5550505050505050505050565b612afc84848461100f565b6001600160a01b0383163b15611464576000836001600160a01b031663150b7a0233878686604051602401612b349493929190614ac8565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051612b6d9190614aac565b600060405180830381855afa9150503d8060008114612ba8576040519150601f19603f3d011682016040523d82523d6000602084013e612bad565b606091505b50915050600081806020019051810190612bc79190614766565b9050630a85bd0160e11b6001600160e01b0319821614612c1f5760405162461bcd60e51b81526020600482015260136024820152722727aa2fa2a9219b9918afa922a1a2a4ab22a960691b6044820152606401610ce9565b505050505050565b6001546001600160a01b03163314612c3e57600080fd5b601e805460ff1916911515919091179055565b6000818152602c6020526040902054606090431415612cca5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610ce9565b602b5460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd9060240160006040518083038186803b158015612d0e57600080fd5b505afa158015612d22573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c4191908101906147a1565b6022818154811061137957600080fd5b60006001600083815260286020526040902054600160f81b900460ff166001811115612d8857612d88614f3e565b1415612e0b57600082815260286020526040812054600160a01b90046001600160581b03164211612dba576000612de3565b600083815260286020526040902054612de390600160a01b90046001600160581b031642614e45565b60008481526028602052604090205490915061189b90829085906001600160a01b0316613996565b506000919050565b6001546001600160a01b03163314612e2a57600080fd5b600980549115156101000261ff0019909216919091179055565b6001546001600160a01b03163314612e5b57600080fd5b610c0b602283836142b4565b6001546001600160a01b03163314612e7e57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b602e546001600160a01b03163314612ee75760405162461bcd60e51b815260206004820152600a6024820152696e6f7420636173746c6560b01b6044820152606401610ce9565b60005b81811015612fa057600060286000858585818110612f0a57612f0a614f54565b905060200201358152602001908152602001600020600001601f9054906101000a900460ff166001811115612f4157612f41614f3e565b14612f6b57612f6b838383818110612f5b57612f5b614f54565b9050602002013585600087613244565b612f8e8433858585818110612f8257612f82614f54565b9050602002013561312c565b80612f9881614ec1565b915050612eea565b506040516397adec1160e01b815233906397adec1190612fc890869086908690600401614afb565b600060405180830381600087803b158015612fe257600080fd5b505af1158015612ff6573d6000803e3d6000fd5b50505050505050565b6002546000906109c481101561301757600091505090565b610bb881101561303057673782dace9d90000091505090565b6111f881101561304a5768015af1d78b58c4000091505090565b6113888110156130645768049b9ca9a69434000091505090565b68049b9ca9a69434000091505090565b600060025460016130859190614daf565b61ffff81166000818152602c602052604081204390559192506130a790613d4d565b90506130b78261ffff1682613da7565b506130c6838361ffff16613ea5565b506040805180820182526001600160a01b0393841681526001600160581b03428116602080840191825261ffff9095166000908152602990955292909320905181549251909316600160a01b026001600160f81b03199092169290931691909117179055565b6000818152600660205260409020546001600160a01b038481169116146131815760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610ce9565b6001600160a01b03831660009081526005602052604081208054916131a583614e88565b90915550506001600160a01b03821660009081526005602052604081208054916131ce83614ec1565b9091555050600081815260076020908152604080832080546001600160a01b0319908116909155600690925280832080546001600160a01b038781169190941681179091559051849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600084815260066020526040902054849082906001600160a01b038083169116148061328957506000828152602860205260409020546001600160a01b038281169116145b6132a55760405162461bcd60e51b8152600401610ce990614ba6565b6000868152602860209081526040808320815160608101835281546001600160a01b0381168252600160a01b81046001600160581b031694820194909452929091830190600160f81b900460ff16600181111561330457613304614f3e565b600181111561331557613315614f3e565b905250905084600181111561332c5761332c614f3e565b8160400151600181111561334257613342614f3e565b14156133855760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e48191bda5b99c81d1a185d60721b6044820152606401610ce9565b600081602001516001600160581b031642116133ae5781602001516001600160581b03166133b0565b425b90506000826040015160018111156133ca576133ca614f3e565b141561344957600088815260276020526040902054600160381b900461ffff166014146134395760405162461bcd60e51b815260206004820152601a60248201527f63616e2774207374616b6520756e646572206c6576656c2032300000000000006044820152606401610ce9565b61344487308a61312c565b613493565b81602001516001600160581b03164211156134675761346788613603565b81602001516001600160581b0316816001600160581b03161161348e578160200151613490565b805b90505b6000808760018111156134a8576134a8614f3e565b146134b357876134b6565b60005b905060008760018111156134cc576134cc614f3e565b14156134dd576134dd30898b61312c565b6040518060600160405280826001600160a01b03168152602001836001600160581b0316815260200188600181111561351857613518614f3e565b905260008a81526028602090815260409182902083518154928501516001600160581b0316600160a01b026001600160f81b03199093166001600160a01b03909116179190911780825591830151909182906001600160f81b0316600160f81b83600181111561358a5761358a614f3e565b02179055509050507f12e0cc56edd6c3536e9da2076ca9a265cc04a9b2064bc61ebbe5c25ea280c036888a428a60018111156135c8576135c8614f3e565b604080516001600160a01b03909516855260208501939093529183015260ff16606082015260800160405180910390a1505050505050505050565b33600081815260266020526040902054813b919060ff168061362d5750333214801561362d575081155b6136495760405162461bcd60e51b8152600401610ce990614bcd565b6000838152602860209081526040808320815160608101835281546001600160a01b0381168252600160a01b81046001600160581b031694820194909452929091830190600160f81b900460ff1660018111156136a8576136a8614f3e565b60018111156136b9576136b9614f3e565b81525050905080602001516001600160581b031642116136d957506137f1565b600081602001516001600160581b0316426136f49190614e45565b905060018260400151600181111561370e5761370e614f3e565b1480156137345750600085815260276020526040902054600160381b900461ffff166014145b156137ba5760245482516001600160a01b03909116906340c10f199061375b848983613996565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156137a157600080fd5b505af11580156137b5573d6000803e3d6000fd5b505050505b5050600083815260286020526040902080546affffffffffffffffffffff60a01b1916600160a01b426001600160581b0316021790555b804160235460405160200161380893929190614a83565b60408051601f198184030181529190528051602090910120602355505050565b6000828152602c60205260408120439055613841613f7b565b9050600082600181111561385757613857614f3e565b14156138be57601054604080518082019091526005815264109491515160da1b602082015261388890839086613fd7565b6138929190614ef0565b6000848152602760205260409020805460ff929092166101000261ff001990921691909117905561393c565b60018260018111156138d2576138d2614f3e565b141561393c5760006139028260405180604001604052806005815260200164434c41535360d81b81525086613fd7565b905061390f81600361400e565b6000858152602760205260409020805460ff9290921663010000000263ff00000019909216919091179055505b602a600083600181111561395257613952614f3e565b600181111561396357613963614f3e565b815260208082019290925260409081016000908120868252909252812080549161398c83614ec1565b9190505550505050565b600082815260276020908152604080832081516101008082018452915460ff80821683529281048316948201949094526201000084048216928101929092526301000000830481166060830152640100000000830481166080830152650100000000008304811660a0830152600160301b83041660c0820152600160381b90910461ffff1660e082015281613a29613f7b565b9050600062015180613a4388670de0b6b3a7640000614e26565b613a4d9190614de8565b9050826060015160ff1660001415613b43576000613a8c836040518060400160405280600881526020016757617272696f723160c01b81525089613fd7565b9050613a9b606461ffff614dc7565b613aa690600f614dfc565b61ffff168161ffff161015613ad7576064613ac2836073614e26565b613acc9190614de8565b94505050505061189b565b613b0283604051806040016040528060088152602001672bb0b93934b7b91960c11b81525089613fd7565b9050613b11606461ffff614dc7565b613b1c90600f614dfc565b61ffff168161ffff161015613b38576064613ac2836055614e26565b50925061189b915050565b826060015160ff1660011415613bb1576000613b7d8360405180604001604052806005815260200164526f67756560d81b81525089613fd7565b9050613b8c606461ffff614dc7565b613b9790600a614dfc565b61ffff168161ffff161015613b3857613acc826003614e26565b826060015160ff1660021415613c2b576000613bea83604051806040016040528060048152602001634d61676560e01b81525089613fd7565b9050613bf9606461ffff614dc7565b613c04906032614dfc565b61ffff168161ffff161015613c2057600a613ac2836005614e26565b613acc826002614e26565b826060015160ff1660031415613c5c576064613c4882607d614e26565b613c529190614de8565b935050505061189b565b826060015160ff1660041415613c7657925061189b915050565b826060015160ff1660051415613ce0576001600160a01b03851660009081526005602052604081205490600a8211613cae5781613cb1565b600a5b613cbc90600a614daf565b9050600a613cca8285614e26565b613cd49190614de8565b9550505050505061189b565b826060015160ff1660061415613d1257600a613cfd600684614edc565b613d08906008614daf565b613c489083614e26565b826060015160ff1660071415613d435760038360e001516003613d359190614d89565b613c489061ffff1683614e26565b9695505050505050565b600032613d5b600143614e45565b60405160609290921b6001600160601b03191660208301524060348201524260548201526074810183905260940160408051601f19818403018152919052805160209091012092915050565b613daf6142ef565b613db8826140ea565b6000938452602760209081526040948590208251815492840151968401516060850151608086015160a087015160c088015160e089015160ff96871661ffff19909916989098176101009c87169c909c029b909b1763ffff00001916620100009486169490940263ff0000001916939093176301000000928516929092029190911765ffff0000000019166401000000009184169190910265ff000000000019161765010000000000918316919091021768ffffff0000000000001916600160301b919097160261ffff60381b191695909517600160381b61ffff90921691909102179093555090919050565b6000818152600660205260409020546001600160a01b031615613efb5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610ce9565b60028054906000613f0b83614ec1565b90915550506001600160a01b038216600081815260056020908152604080832080546001019055848352600690915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600032613f89600143614e45565b60235460405160609390931b6001600160601b03191660208401529040603483015242605483015260748201526094016040516020818303038152906040528051906020012060001c905090565b6000838383604051602001613fee93929190614d07565b60408051601f198184030181529190528051602090910120949350505050565b600080600f8360ff166007811061402757614027614f54565b01546140339085614ef0565b9050600f8360ff166007811061404b5761404b614f54565b018160ff168154811061406057614060614f54565b60009182526020918290209181049091015460ff601f9092166101000a90048116600886901c9091161015614096579050610c41565b60168360ff16600781106140ac576140ac614f54565b018160ff16815481106140c1576140c1614f54565b90600052602060002090602091828204019190069054906101000a900460ff1691505092915050565b6140f26142ef565b6141018261ffff16600061400e565b60ff16815260109190911c9061411c61ffff8316600161400e565b60ff16602082015260109190911c9061413a61ffff8316600261400e565b60ff16604082015260109190911c9061415861ffff8316600361400e565b60ff16606082015260109190911c9061417661ffff8316600461400e565b60ff16608082015260109190911c9061419461ffff8316600561400e565b60ff1660a082015260109190911c906141b261ffff8316600661400e565b60ff1660c0820152600160e0820152919050565b82805482825590600052602060002090601f0160209004810192821561425c5791602002820160005b8382111561422d57835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026141ef565b801561425a5782816101000a81549060ff021916905560010160208160000104928301926001030261422d565b505b50614268929150614333565b5090565b82805482825590600052602060002090810192821561425c579160200282015b8281111561425c578251829068ffffffffffffffffff1690559160200191906001019061428c565b82805482825590600052602060002090810192821561425c579160200282015b8281111561425c5782358255916020019190600101906142d4565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b5b808211156142685760008155600101614334565b60008083601f84011261435a57600080fd5b50813567ffffffffffffffff81111561437257600080fd5b6020830191508360208260051b850101111561438d57600080fd5b9250929050565b803561ffff811681146143a657600080fd5b919050565b803560ff811681146143a657600080fd5b6000602082840312156143ce57600080fd5b813561189b81614f80565b6000602082840312156143eb57600080fd5b815161189b81614f80565b6000806040838503121561440957600080fd5b823561441481614f80565b9150602083013561442481614f80565b809150509250929050565b6000806000806080858703121561444557600080fd5b843561445081614f80565b9350602085013561446081614f80565b9250604085013561447081614f80565b9150606085013561448081614f80565b939692955090935050565b6000806000606084860312156144a057600080fd5b83356144ab81614f80565b925060208401356144bb81614f80565b929592945050506040919091013590565b600080600080608085870312156144e257600080fd5b84356144ed81614f80565b935060208501356144fd81614f80565b925060408501359150606085013567ffffffffffffffff81111561452057600080fd5b8501601f8101871361453157600080fd5b803561454461453f82614d61565b614d30565b81815288602083850101111561455957600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060006040848603121561459057600080fd5b833561459b81614f80565b9250602084013567ffffffffffffffff8111156145b757600080fd5b6145c386828701614348565b9497909650939450505050565b600080604083850312156145e357600080fd5b82356145ee81614f80565b9150602083013561442481614f95565b6000806040838503121561461157600080fd5b823561461c81614f80565b946020939093013593505050565b60008060006040848603121561463f57600080fd5b833567ffffffffffffffff81111561465657600080fd5b61466286828701614348565b909450925050602084013561467681614f80565b809150509250925092565b6000806020838503121561469457600080fd5b823567ffffffffffffffff8111156146ab57600080fd5b6146b785828601614348565b90969095509350505050565b6000806000604084860312156146d857600080fd5b833567ffffffffffffffff8111156146ef57600080fd5b6146fb86828701614348565b909450925050602084013561467681614fb9565b60006020828403121561472157600080fd5b813561189b81614f95565b60006020828403121561473e57600080fd5b815161189b81614f95565b60006020828403121561475b57600080fd5b813561189b81614fa3565b60006020828403121561477857600080fd5b815161189b81614fa3565b6000806040838503121561479657600080fd5b823561461c81614fb9565b6000602082840312156147b357600080fd5b815167ffffffffffffffff8111156147ca57600080fd5b8201601f810184136147db57600080fd5b80516147e961453f82614d61565b8181528560208385010111156147fe57600080fd5b61480f826020830160208601614e5c565b95945050505050565b6000806040838503121561482b57600080fd5b61483483614394565b915061484260208401614394565b90509250929050565b60006020828403121561485d57600080fd5b5035919050565b60006020828403121561487657600080fd5b5051919050565b6000806040838503121561489057600080fd5b82359150602083013561442481614f80565b600080604083850312156148b557600080fd5b82359150602083013561442481614fb9565b600080604083850312156148da57600080fd5b8235915061484260208401614394565b600080604083850312156148fd57600080fd5b50508035926020909101359150565b6000806000806060858703121561492257600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561494757600080fd5b61495387828801614348565b95989497509550505050565b6000806040838503121561497257600080fd5b82359150614842602084016143ab565b6000806000806000806000806000806000806101808d8f0312156149a557600080fd5b8c359b506149b560208e016143ab565b9a506149c360408e016143ab565b99506149d160608e016143ab565b98506149df60808e016143ab565b97506149ed60a08e016143ab565b96506149fb60c08e016143ab565b9550614a0960e08e016143ab565b9450614a186101008e01614394565b9350614a276101208e01614394565b9250614a366101408e01614394565b9150614a456101608e016143ab565b90509295989b509295989b509295989b565b60008151808452614a6f816020860160208601614e5c565b601f01601f19169290920160200192915050565b6001600160601b0319606094851b811682529290931b9091166014830152602882015260480190565b60008251614abe818460208701614e5c565b9190910192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613d4390830184614a57565b6001600160a01b0384168152604060208201819052810182905260006001600160fb1b03831115614b2b57600080fd5b8260051b8085606085013760009201606001918252509392505050565b6001600160a01b03841681526001600160581b03831660208201526060810160028310614b8557634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b60208152600061189b6020830184614a57565b6020808252600d908201526c6e6f7420796f757220646f676560981b604082015260600190565b60208082526017908201527f796f7527726520747279696e6720746f20636865617421000000000000000000604082015260600190565b60208082526012908201527139ba34b6361034b71031b7b7b6103237bbb760711b604082015260600190565b815160ff16815261016081016020830151614c50602084018260ff169052565b506040830151614c65604084018260ff169052565b506060830151614c7a606084018260ff169052565b506080830151614c8f608084018260ff169052565b5060a0830151614ca460a084018260ff169052565b5060c0830151614cb960c084018260ff169052565b5060e0830151614ccf60e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101409283015160ff16929091019190915290565b838152606060208201526000614d206060830185614a57565b9050826040830152949350505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614d5957614d59614f6a565b604052919050565b600067ffffffffffffffff821115614d7b57614d7b614f6a565b50601f01601f191660200190565b600061ffff808316818516808303821115614da657614da6614f12565b01949350505050565b60008219821115614dc257614dc2614f12565b500190565b600061ffff80841680614ddc57614ddc614f28565b92169190910492915050565b600082614df757614df7614f28565b500490565b600061ffff80831681851681830481118215151615614e1d57614e1d614f12565b02949350505050565b6000816000190483118215151615614e4057614e40614f12565b500290565b600082821015614e5757614e57614f12565b500390565b60005b83811015614e77578181015183820152602001614e5f565b838111156114645750506000910152565b600081614e9757614e97614f12565b506000190190565b600061ffff80831681811415614eb757614eb7614f12565b6001019392505050565b6000600019821415614ed557614ed5614f12565b5060010190565b600082614eeb57614eeb614f28565b500690565b600060ff831680614f0357614f03614f28565b8060ff84160691505092915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146112ab57600080fd5b80151581146112ab57600080fd5b6001600160e01b0319811681146112ab57600080fd5b600281106112ab57600080fdfea2646970667358221220161fd5ed520acdcbab9955034cd43b5bc93e0d7fadb24d770e0129aed9df08f764736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106104745760003560e01c806370a0823111610257578063aeb94dcd11610146578063d897833e116100c3578063f2fde38b11610087578063f2fde38b14610b6b578063f4b2afc514610b7e578063f851a44014610ba1578063f9915c5214610bb4578063ffeef3cc14610bc757610474565b8063d897833e14610ad9578063dda8f65f14610aec578063e1fc334f14610b17578063e985e9c514610b2a578063ee75c24114610b5857610474565b8063c87b56dd1161010a578063c87b56dd14610a74578063c955947a14610a87578063cc02b89314610a9a578063cd5d211814610aa3578063d1d58b2514610ac657610474565b8063aeb94dcd14610a15578063afe455e814610a28578063b0c8df2514610a3b578063b88d4fde14610a4e578063c488051314610a6157610474565b80638da5cb5b116101d457806399ec67651161019857806399ec6765146109a35780639b19251a146109ac578063a1b8f374146109cf578063a22cb465146109ef578063a9059cbb14610a0257610474565b80638da5cb5b146109525780638ed5088a1461096357806394e568471461097657806395d89b41146105635780639690aeb61461099657610474565b80638129fc1c1161021b5780638129fc1c146108f85780638393f4781461090057806387982da21461092357806387cb802f146109365780638895283f1461093f57610474565b806370a082311461088c57806376bba70f146108ac57806376f0d51a146108bf5780637aef1b5e146108d25780637b1c9034146108e557610474565b806333df4b2c116103735780635aa450ac116102f05780636781013b116102b45780636781013b1461082e57806368428a1b1461084157806369491e9d146108535780636ba4c138146108665780636f4f73661461087957610474565b80635aa450ac146107cf5780635fce793e146107e25780636095a5fc146107ea5780636352211e146107fd57806366d4a16e1461082657610474565b806342842e0e1161033757806342842e0e14610780578063478241d1146107935780634a945f8d146107a65780634f02c420146107b957806353135ca0146107c257610474565b806333df4b2c1461072457806336838391146107495780633998251d1461075c5780633ccfd60b146107655780633f19ac881461076d57610474565b80630f47e751116104015780632000d430116103c55780632000d430146106e357806323b872dd146106ec57806326302a3c146106ff5780632c6962201461070857806332cb6b0c1461071b57610474565b80630f47e751146106315780630f5f3f2014610693578063174ffcdb146106a657806318160ddd146106c75780631e73ff4f146106d057610474565b806306fdde031161044857806306fdde0314610563578063081812fc1461058d578063095ea7b3146105b65780630b44a218146105c95780630d1657e8146105dc57610474565b8062f66038146104e657806301ffc9a7146105165780630442bfa814610539578063058508441461054c575b600080356001600160e01b0319168152602d60205260409020546001600160a01b03166104ba576104b8737ef61741d9a2b483e75d8aa0876ce864d98ce331610be7565b005b600080356001600160e01b0319168152602d60205260409020546104b8906001600160a01b0316610be7565b6025546104f9906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610529610524366004614749565b610c10565b604051901515815260200161050d565b6104b86105473660046148ea565b610c47565b61055560035481565b60405190815260200161050d565b604080518082019091526005815264446f67657360d81b60208201525b60405161050d9190614b93565b6104f961059b36600461484b565b6007602052600090815260409020546001600160a01b031681565b6104b86105c43660046145fe565b610c69565b6104b86105d73660046145d0565b610d4e565b6106226105ea36600461484b565b6028602052600090815260409020546001600160a01b03811690600160a01b81046001600160581b031690600160f81b900460ff1683565b60405161050d93929190614b48565b61066c61063f36600461484b565b6029602052600090815260409020546001600160a01b03811690600160a01b90046001600160581b031682565b604080516001600160a01b0390931683526001600160581b0390911660208301520161050d565b6104b86106a13660046143bc565b610d90565b600e546106b49061ffff1681565b60405161ffff909116815260200161050d565b61055560025481565b6104b86106de36600461484b565b610dc9565b61055561a8c081565b6104b86106fa36600461448b565b61100f565b61055560205481565b610555610716366004614818565b6110b0565b61055561138881565b6107376107323660046148ea565b61110e565b60405160ff909116815260200161050d565b6107376107573660046148ea565b611154565b610555601f5481565b6104b8611164565b602e546104f9906001600160a01b031681565b6104b861078e36600461448b565b6112ae565b6104b86107a13660046143bc565b6112c9565b6104b86107b436600461442f565b611302565b61055560045481565b6009546105299060ff1681565b6105556107dd36600461484b565b611369565b6109c4610555565b6104b86107f83660046146c3565b61138a565b6104f961080b36600461484b565b6006602052600090815260409020546001600160a01b031681565b6106b460c881565b6104b861083c36600461462a565b61146a565b60095461052990610100900460ff1681565b6104b86108613660046143bc565b611502565b6104b8610874366004614681565b61153b565b6104b86108873660046143bc565b611579565b61055561089a3660046143bc565b60056020526000908152604090205481565b6104b86108ba36600461495f565b6115b2565b6104b86108cd3660046148a2565b611704565b6105296108e036600461487d565b6117cb565b6104b86108f33660046148a2565b6118a2565b6104b8611b1d565b61073761090e36600461484b565b602f6020526000908152604090205460ff1681565b6024546104f9906001600160a01b031681565b610555600d5481565b6104b861094d36600461470f565b612079565b6001546001600160a01b03166104f9565b6104b861097136600461490c565b6120a3565b61098961098436600461484b565b6120d7565b60405161050d9190614c30565b601e546105299060ff1681565b6105556109c481565b6107376109ba3660046143bc565b600a6020526000908152604090205460ff1681565b6105556109dd36600461484b565b601d6020526000908152604090205481565b6104b86109fd3660046145d0565b6122a7565b6104b8610a103660046145fe565b612313565b6104b8610a233660046148c7565b612374565b6104b8610a3636600461484b565b6125ec565b6104b8610a49366004614982565b612850565b6104b8610a5c3660046144cc565b612af1565b6104b8610a6f36600461470f565b612c27565b610580610a8236600461484b565b612c51565b610555610a9536600461484b565b612d4a565b610555600c5481565b610529610ab13660046143bc565b60266020526000908152604090205460ff1681565b610555610ad436600461484b565b612d5a565b6104b8610ae736600461470f565b612e13565b610555610afa366004614783565b602a60209081526000928352604080842090915290825290205481565b602b546104f9906001600160a01b031681565b610529610b383660046143f6565b600860209081526000928352604080842090915290825290205460ff1681565b6104b8610b66366004614681565b612e44565b6104b8610b793660046143bc565b612e67565b610737610b8c3660046143bc565b600b6020526000908152604090205460ff1681565b6001546104f9906001600160a01b031681565b6104b8610bc236600461457b565b612ea0565b610555610bd536600461484b565b602c6020526000908152604090205481565b3660008037600080366000845af43d6000803e808015610c06573d6000f35b3d6000fd5b505050565b60006380ac58cd60e01b6001600160e01b031983161480610c415750635b5e139f60e01b6001600160e01b03198316145b92915050565b6001546001600160a01b03163314610c5e57600080fd5b600c91909155600d55565b6000818152600660205260409020546001600160a01b031633811480610cb257506001600160a01b038116600090815260086020908152604080832033845290915290205460ff165b610cf25760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b60448201526064015b60405180910390fd5b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6001546001600160a01b03163314610d6557600080fd5b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6001546001600160a01b03163314610da757600080fd5b602480546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260066020526040902054819033906001600160a01b0316811480610e0b57506000828152602860205260409020546001600160a01b038281169116145b610e275760405162461bcd60e51b8152600401610ce990614ba6565b6000838152602960209081526040918290208251808401909352546001600160a01b0381168352600160a01b90046001600160581b0316908201819052849190610e749061a8c090614daf565b421015610e935760405162461bcd60e51b8152600401610ce990614c04565b33600081815260266020526040902054813b919060ff1680610ebd57503332148015610ebd575081155b610ed95760405162461bcd60e51b8152600401610ce990614bcd565b6113886002541115610f215760405162461bcd60e51b8152602060048201526011602482015270185b1b081cdd5c1c1b1e481b5a5b9d1959607a1b6044820152606401610ce9565b6000610f2b612fff565b90508015610f965760248054604051632770a7eb60e21b81523360048201529182018390526001600160a01b031690639dc29fac90604401600060405180830381600087803b158015610f7d57600080fd5b505af1158015610f91573d6000803e3d6000fd5b505050505b600088815260296020526040902080546affffffffffffffffffffff60a01b1916600160a01b426001600160581b031602179055610fd333613074565b508041602354604051602001610feb93929190614a83565b60408051601f19818403018152919052805160209091012060235550505050505050565b336001600160a01b038416148061103c57506000818152600760205260409020546001600160a01b031633145b8061106a57506001600160a01b038316600090815260086020908152604080832033845290915290205460ff165b6110a55760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b6044820152606401610ce9565b610c0b83838361312c565b600080835b8361ffff168161ffff1610156111065760228161ffff16815481106110dc576110dc614f54565b9060005260206000200154826110f29190614daf565b9150806110fe81614e9f565b9150506110b5565b509392505050565b600f826007811061111e57600080fd5b01818154811061112d57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6016826007811061111e57600080fd5b6001546001600160a01b0316331461117b57600080fd5b60405133904780156108fc02916000818181858888f193505050501580156111a7573d6000803e3d6000fd5b506025546040516370a0823160e01b81523060048201526001600160a01b039091169063a9059cbb90339083906370a082319060240160206040518083038186803b1580156111f557600080fd5b505afa158015611209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122d9190614864565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561127357600080fd5b505af1158015611287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ab919061472c565b50565b610c0b83838360405180602001604052806000815250612af1565b6001546001600160a01b031633146112e057600080fd5b602e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331461131957600080fd5b602b80546001600160a01b039586166001600160a01b03199182161790915560248054948616948216949094179093556025805492851692841692909217909155602e8054919093169116179055565b6021818154811061137957600080fd5b600091825260209091200154905081565b60005b828110156114645733600660008686858181106113ac576113ac614f54565b60209081029290920135835250810191909152604001600020546001600160a01b03161480611412575033602860008686858181106113ed576113ed614f54565b60209081029290920135835250810191909152604001600020546001600160a01b0316145b61142e5760405162461bcd60e51b8152600401610ce990614ba6565b61145284848381811061144357611443614f54565b90506020020135338433613244565b8061145c81614ec1565b91505061138d565b50505050565b6001546001600160a01b0316331461148157600080fd5b60005b828110156114645781602d60008686858181106114a3576114a3614f54565b90506020020160208101906114b89190614749565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b0392909216919091179055806114fa81614ec1565b915050611484565b6001546001600160a01b0316331461151957600080fd5b602580546001600160a01b0319166001600160a01b0392909216919091179055565b60005b81811015610c0b5761156783838381811061155b5761155b614f54565b90506020020135613603565b8061157181614ec1565b91505061153e565b6001546001600160a01b0316331461159057600080fd5b602b80546001600160a01b0319166001600160a01b0392909216919091179055565b600082815260066020526040902054829033906001600160a01b03168114806115f457506000828152602860205260409020546001600160a01b038281169116145b6116105760405162461bcd60e51b8152600401610ce990614ba6565b33600081815260266020526040902054813b919060ff168061163a5750333214801561163a575081155b6116565760405162461bcd60e51b8152600401610ce990614bcd565b6000868152602f602052604090205460ff868116911614156116af5760405162461bcd60e51b81526020600482015260126024820152717468652073616d6520617274207374796c6560701b6044820152606401610ce9565b6000868152602f6020908152604091829020805460ff191660ff891617905560235491516116e1928492419201614a83565b60408051601f198184030181529190528051602090910120602355505050505050565b600082815260066020526040902054829033906001600160a01b031681148061174657506000828152602860205260409020546001600160a01b038281169116145b6117625760405162461bcd60e51b8152600401610ce990614ba6565b33600081815260266020526040902054813b919060ff168061178c5750333214801561178c575081155b6117a85760405162461bcd60e51b8152600401610ce990614bcd565b6117b486338733613244565b80416023546040516020016116e193929190614a83565b6000828152600660205260408120546001600160a01b038381169116148061180c57506000838152602860205260409020546001600160a01b038381169116145b8061189b5750602e54604051630fb9a53760e31b8152600481018590526001600160a01b03848116921690637dcd29b89060240160206040518083038186803b15801561185857600080fd5b505afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189091906143d9565b6001600160a01b0316145b9392505050565b600082815260066020526040902054829033906001600160a01b03168114806118e457506000828152602860205260409020546001600160a01b038281169116145b6119005760405162461bcd60e51b8152600401610ce990614ba6565b6000848152602960209081526040918290208251808401909352546001600160a01b0381168352600160a01b90046001600160581b031690820181905285919061194d9061a8c090614daf565b42101561196c5760405162461bcd60e51b8152600401610ce990614c04565b33600081815260266020526040902054813b919060ff168061199657503332148015611996575081155b6119b25760405162461bcd60e51b8152600401610ce990614bcd565b600060216005602a60008b60018111156119ce576119ce614f3e565b60018111156119df576119df614f3e565b815260200190815260200160002060008c81526020019081526020016000205410611a0b576004611a53565b602a60008a6001811115611a2157611a21614f3e565b6001811115611a3257611a32614f3e565b815260200190815260200160002060008b8152602001908152602001600020545b81548110611a6357611a63614f54565b60009182526020909120015460248054604051632770a7eb60e21b81523360048201529182018390529192506001600160a01b0390911690639dc29fac90604401600060405180830381600087803b158015611abe57600080fd5b505af1158015611ad2573d6000803e3d6000fd5b50505050611ae08989613828565b508041602354604051602001611af893929190614a83565b60408051601f1981840301815291905280516020909101206023555050505050505050565b6001546001600160a01b03163314611b3457600080fd5b600180546001600160a01b031916339081178255600090815260266020908152604091829020805460ff19169093179092556009805461ffff1916815566e6ed27d6668000600c55681043561a8829300000600d5581516101208101835260ad8152609b9381019390935260ff9183019190915260ce606083018190526080830181905260a0830152607260c0830181905260e08301819052610100830152611bdf91600f916141c6565b506040805161012081018252600280825260208201526008918101919091526000606082018190526080820181905260a0820181905260c0820152600160e08201819052610100820152611c379060169060096141c6565b50604080516101008101825260ff80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152611c879060109060086141c6565b506040805161010081018252600780825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152611cd79060179060086141c6565b506040805160c08101825260ff80825260bc60208301529181019190915260e5606082015260996080820152604c60a0820152611d189060119060066141c6565b506040805160c081018252600280825260208201526005918101919091526000606082018190526080820152600160a0820152611d599060189060066141c6565b50604080516101008101825260e58152607f602082015260b29181019190915260ff606082015260cc6080820181905260a0820181905260c0820152606660e0820152611daa9060129060086141c6565b506040805161010081018252600280825260208201526003918101919091526007606082015260006080820181905260a0820152600160c0820181905260e0820152611dfa9060199060086141c6565b50604080516020810190915260ff8152611e189060139060016141c6565b50604080516020810190915260008152611e3690601a9060016141c6565b50604080516020810190915260ff8152611e549060149060016141c6565b50604080516020810190915260008152611e7290601b9060016141c6565b50604080516020810190915260ff8152611e909060159060016141c6565b50604080516020810190915260008152611eae90601c9060016141c6565b50601e805460ff19169055662386f26fc10000601f556802b5e3af16b188000060209081556040805160a0810182526753444835ec580000815267a688906bd8b000009281019290925268014d1120d7b16000009082015268029a2241af62c00000606082015268053444835ec58000006080820152611f3290602190600561426c565b5060408051610280810182526000815267a688906bd8b00000602082015267de0b6b3a76400000918101919091526801158e460913d00000606082015268014d1120d7b160000060808201526801a055690d9db8000060a08201526801f399b1438a10000060c0820152680246ddf9797668000060e082015268029a2241af62c000006101008201526802ed6689e54f18000061012082015268035c6c3f828a3800006101408201526803cb71f51fc558000061016082015268043a77aabd007800006101808201526804a97d605a3b9800006101a082015268053444835ec58000006101c08201526805bf0ba6634f6800006101e0820152680649d2c967d95000006102008201526806d499ec6c6338000061022082015268077b227cd83be80000610240820152680821ab0d44149800006102608201526112ab90602290601461426c565b6001546001600160a01b0316331461209057600080fd5b6009805460ff1916911515919091179055565b6001546001600160a01b031633146120ba57600080fd5b601f84905560208390556120d0602183836142b4565b5050505050565b6040805161016081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526000828152602c60205260409020544314156121a45750506040805161016081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b5060408051610160810182526000838152602760209081528382205460ff80821685526101008083048216848701526201000083048216868801526301000000830482166060870152640100000000830482166080870152650100000000008304821660a0870152600160301b8304821660c087015261ffff600160381b909304831660e08701528785527f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424a9c8452868520548316908601528684527f3f32b1e6928a174926c4b104dac81e478b6c8ab881d899ad155ded3e9d1b4426835285842054909116610120850152948252602f9052919091205490911661014082015290565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000818152600660205260409020546001600160a01b031633146123655760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b6044820152606401610ce9565b61237033838361312c565b5050565b600082815260066020526040902054829033906001600160a01b03168114806123b657506000828152602860205260409020546001600160a01b038281169116145b6123d25760405162461bcd60e51b8152600401610ce990614ba6565b6000848152602960209081526040918290208251808401909352546001600160a01b0381168352600160a01b90046001600160581b031690820181905285919061241f9061a8c090614daf565b42101561243e5760405162461bcd60e51b8152600401610ce990614c04565b33600081815260266020526040902054813b919060ff168061246857503332148015612468575081155b6124845760405162461bcd60e51b8152600401610ce990614bcd565b60008881526027602052604090205461ffff600160381b909104811690881681106124e15760405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081b195d995b609a1b6044820152606401610ce9565b60148861ffff16111561252a5760405162461bcd60e51b8152602060048201526011602482015270195e18d959591cc81b585e081b195d995b607a1b6044820152606401610ce9565b61253389613603565b6024546001600160a01b0316639dc29fac3361254f848c6110b0565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561259557600080fd5b505af11580156125a9573d6000803e3d6000fd5b50505060008a815260276020908152604091829020805461ffff60381b1916600160381b61ffff8e16021790556023549151611af8945085935041929101614a83565b600081815260066020526040902054819033906001600160a01b031681148061262e57506000828152602860205260409020546001600160a01b038281169116145b61264a5760405162461bcd60e51b8152600401610ce990614ba6565b6000838152602960209081526040918290208251808401909352546001600160a01b0381168352600160a01b90046001600160581b03169082018190528491906126979061a8c090614daf565b4210156126b65760405162461bcd60e51b8152600401610ce990614c04565b33600081815260266020526040902054813b919060ff16806126e0575033321480156126e0575081155b6126fc5760405162461bcd60e51b8152600401610ce990614bcd565b61270587613603565b600087815260276020526040902054600160381b900461ffff16601481106127635760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481b585e081b195d995b607a1b6044820152606401610ce9565b602454602280546001600160a01b0390921691639dc29fac91339161ffff861690811061279257612792614f54565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156127e457600080fd5b505af11580156127f8573d6000803e3d6000fd5b505050508060016128099190614d89565b600089815260276020908152604091829020805461ffff94909416600160381b0261ffff60381b19909416939093179092556023549051610feb9350849241929101614a83565b6001546001600160a01b031633148061287857503360009081526026602052604090205460ff165b6128b55760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610ce9565b8a602760008e815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555089602760008e815260200190815260200160002060000160016101000a81548160ff021916908360ff16021790555088602760008e815260200190815260200160002060000160026101000a81548160ff021916908360ff16021790555087602760008e815260200190815260200160002060000160036101000a81548160ff021916908360ff16021790555086602760008e815260200190815260200160002060000160046101000a81548160ff021916908360ff16021790555085602760008e815260200190815260200160002060000160056101000a81548160ff021916908360ff16021790555084602760008e815260200190815260200160002060000160066101000a81548160ff021916908360ff16021790555083602760008e815260200190815260200160002060000160076101000a81548161ffff021916908361ffff1602179055508261ffff16602a6000806001811115612a4a57612a4a614f3e565b6001811115612a5b57612a5b614f3e565b815260200190815260200160002060008e8152602001908152602001600020819055508161ffff16602a6000600180811115612a9957612a99614f3e565b6001811115612aaa57612aaa614f3e565b8152602080820192909252604090810160009081209f81529e8252808f2092909255602f9052909b20805460ff191660ff909c169b909b17909a5550505050505050505050565b612afc84848461100f565b6001600160a01b0383163b15611464576000836001600160a01b031663150b7a0233878686604051602401612b349493929190614ac8565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051612b6d9190614aac565b600060405180830381855afa9150503d8060008114612ba8576040519150601f19603f3d011682016040523d82523d6000602084013e612bad565b606091505b50915050600081806020019051810190612bc79190614766565b9050630a85bd0160e11b6001600160e01b0319821614612c1f5760405162461bcd60e51b81526020600482015260136024820152722727aa2fa2a9219b9918afa922a1a2a4ab22a960691b6044820152606401610ce9565b505050505050565b6001546001600160a01b03163314612c3e57600080fd5b601e805460ff1916911515919091179055565b6000818152602c6020526040902054606090431415612cca5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610ce9565b602b5460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd9060240160006040518083038186803b158015612d0e57600080fd5b505afa158015612d22573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c4191908101906147a1565b6022818154811061137957600080fd5b60006001600083815260286020526040902054600160f81b900460ff166001811115612d8857612d88614f3e565b1415612e0b57600082815260286020526040812054600160a01b90046001600160581b03164211612dba576000612de3565b600083815260286020526040902054612de390600160a01b90046001600160581b031642614e45565b60008481526028602052604090205490915061189b90829085906001600160a01b0316613996565b506000919050565b6001546001600160a01b03163314612e2a57600080fd5b600980549115156101000261ff0019909216919091179055565b6001546001600160a01b03163314612e5b57600080fd5b610c0b602283836142b4565b6001546001600160a01b03163314612e7e57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b602e546001600160a01b03163314612ee75760405162461bcd60e51b815260206004820152600a6024820152696e6f7420636173746c6560b01b6044820152606401610ce9565b60005b81811015612fa057600060286000858585818110612f0a57612f0a614f54565b905060200201358152602001908152602001600020600001601f9054906101000a900460ff166001811115612f4157612f41614f3e565b14612f6b57612f6b838383818110612f5b57612f5b614f54565b9050602002013585600087613244565b612f8e8433858585818110612f8257612f82614f54565b9050602002013561312c565b80612f9881614ec1565b915050612eea565b506040516397adec1160e01b815233906397adec1190612fc890869086908690600401614afb565b600060405180830381600087803b158015612fe257600080fd5b505af1158015612ff6573d6000803e3d6000fd5b50505050505050565b6002546000906109c481101561301757600091505090565b610bb881101561303057673782dace9d90000091505090565b6111f881101561304a5768015af1d78b58c4000091505090565b6113888110156130645768049b9ca9a69434000091505090565b68049b9ca9a69434000091505090565b600060025460016130859190614daf565b61ffff81166000818152602c602052604081204390559192506130a790613d4d565b90506130b78261ffff1682613da7565b506130c6838361ffff16613ea5565b506040805180820182526001600160a01b0393841681526001600160581b03428116602080840191825261ffff9095166000908152602990955292909320905181549251909316600160a01b026001600160f81b03199092169290931691909117179055565b6000818152600660205260409020546001600160a01b038481169116146131815760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610ce9565b6001600160a01b03831660009081526005602052604081208054916131a583614e88565b90915550506001600160a01b03821660009081526005602052604081208054916131ce83614ec1565b9091555050600081815260076020908152604080832080546001600160a01b0319908116909155600690925280832080546001600160a01b038781169190941681179091559051849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600084815260066020526040902054849082906001600160a01b038083169116148061328957506000828152602860205260409020546001600160a01b038281169116145b6132a55760405162461bcd60e51b8152600401610ce990614ba6565b6000868152602860209081526040808320815160608101835281546001600160a01b0381168252600160a01b81046001600160581b031694820194909452929091830190600160f81b900460ff16600181111561330457613304614f3e565b600181111561331557613315614f3e565b905250905084600181111561332c5761332c614f3e565b8160400151600181111561334257613342614f3e565b14156133855760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e48191bda5b99c81d1a185d60721b6044820152606401610ce9565b600081602001516001600160581b031642116133ae5781602001516001600160581b03166133b0565b425b90506000826040015160018111156133ca576133ca614f3e565b141561344957600088815260276020526040902054600160381b900461ffff166014146134395760405162461bcd60e51b815260206004820152601a60248201527f63616e2774207374616b6520756e646572206c6576656c2032300000000000006044820152606401610ce9565b61344487308a61312c565b613493565b81602001516001600160581b03164211156134675761346788613603565b81602001516001600160581b0316816001600160581b03161161348e578160200151613490565b805b90505b6000808760018111156134a8576134a8614f3e565b146134b357876134b6565b60005b905060008760018111156134cc576134cc614f3e565b14156134dd576134dd30898b61312c565b6040518060600160405280826001600160a01b03168152602001836001600160581b0316815260200188600181111561351857613518614f3e565b905260008a81526028602090815260409182902083518154928501516001600160581b0316600160a01b026001600160f81b03199093166001600160a01b03909116179190911780825591830151909182906001600160f81b0316600160f81b83600181111561358a5761358a614f3e565b02179055509050507f12e0cc56edd6c3536e9da2076ca9a265cc04a9b2064bc61ebbe5c25ea280c036888a428a60018111156135c8576135c8614f3e565b604080516001600160a01b03909516855260208501939093529183015260ff16606082015260800160405180910390a1505050505050505050565b33600081815260266020526040902054813b919060ff168061362d5750333214801561362d575081155b6136495760405162461bcd60e51b8152600401610ce990614bcd565b6000838152602860209081526040808320815160608101835281546001600160a01b0381168252600160a01b81046001600160581b031694820194909452929091830190600160f81b900460ff1660018111156136a8576136a8614f3e565b60018111156136b9576136b9614f3e565b81525050905080602001516001600160581b031642116136d957506137f1565b600081602001516001600160581b0316426136f49190614e45565b905060018260400151600181111561370e5761370e614f3e565b1480156137345750600085815260276020526040902054600160381b900461ffff166014145b156137ba5760245482516001600160a01b03909116906340c10f199061375b848983613996565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156137a157600080fd5b505af11580156137b5573d6000803e3d6000fd5b505050505b5050600083815260286020526040902080546affffffffffffffffffffff60a01b1916600160a01b426001600160581b0316021790555b804160235460405160200161380893929190614a83565b60408051601f198184030181529190528051602090910120602355505050565b6000828152602c60205260408120439055613841613f7b565b9050600082600181111561385757613857614f3e565b14156138be57601054604080518082019091526005815264109491515160da1b602082015261388890839086613fd7565b6138929190614ef0565b6000848152602760205260409020805460ff929092166101000261ff001990921691909117905561393c565b60018260018111156138d2576138d2614f3e565b141561393c5760006139028260405180604001604052806005815260200164434c41535360d81b81525086613fd7565b905061390f81600361400e565b6000858152602760205260409020805460ff9290921663010000000263ff00000019909216919091179055505b602a600083600181111561395257613952614f3e565b600181111561396357613963614f3e565b815260208082019290925260409081016000908120868252909252812080549161398c83614ec1565b9190505550505050565b600082815260276020908152604080832081516101008082018452915460ff80821683529281048316948201949094526201000084048216928101929092526301000000830481166060830152640100000000830481166080830152650100000000008304811660a0830152600160301b83041660c0820152600160381b90910461ffff1660e082015281613a29613f7b565b9050600062015180613a4388670de0b6b3a7640000614e26565b613a4d9190614de8565b9050826060015160ff1660001415613b43576000613a8c836040518060400160405280600881526020016757617272696f723160c01b81525089613fd7565b9050613a9b606461ffff614dc7565b613aa690600f614dfc565b61ffff168161ffff161015613ad7576064613ac2836073614e26565b613acc9190614de8565b94505050505061189b565b613b0283604051806040016040528060088152602001672bb0b93934b7b91960c11b81525089613fd7565b9050613b11606461ffff614dc7565b613b1c90600f614dfc565b61ffff168161ffff161015613b38576064613ac2836055614e26565b50925061189b915050565b826060015160ff1660011415613bb1576000613b7d8360405180604001604052806005815260200164526f67756560d81b81525089613fd7565b9050613b8c606461ffff614dc7565b613b9790600a614dfc565b61ffff168161ffff161015613b3857613acc826003614e26565b826060015160ff1660021415613c2b576000613bea83604051806040016040528060048152602001634d61676560e01b81525089613fd7565b9050613bf9606461ffff614dc7565b613c04906032614dfc565b61ffff168161ffff161015613c2057600a613ac2836005614e26565b613acc826002614e26565b826060015160ff1660031415613c5c576064613c4882607d614e26565b613c529190614de8565b935050505061189b565b826060015160ff1660041415613c7657925061189b915050565b826060015160ff1660051415613ce0576001600160a01b03851660009081526005602052604081205490600a8211613cae5781613cb1565b600a5b613cbc90600a614daf565b9050600a613cca8285614e26565b613cd49190614de8565b9550505050505061189b565b826060015160ff1660061415613d1257600a613cfd600684614edc565b613d08906008614daf565b613c489083614e26565b826060015160ff1660071415613d435760038360e001516003613d359190614d89565b613c489061ffff1683614e26565b9695505050505050565b600032613d5b600143614e45565b60405160609290921b6001600160601b03191660208301524060348201524260548201526074810183905260940160408051601f19818403018152919052805160209091012092915050565b613daf6142ef565b613db8826140ea565b6000938452602760209081526040948590208251815492840151968401516060850151608086015160a087015160c088015160e089015160ff96871661ffff19909916989098176101009c87169c909c029b909b1763ffff00001916620100009486169490940263ff0000001916939093176301000000928516929092029190911765ffff0000000019166401000000009184169190910265ff000000000019161765010000000000918316919091021768ffffff0000000000001916600160301b919097160261ffff60381b191695909517600160381b61ffff90921691909102179093555090919050565b6000818152600660205260409020546001600160a01b031615613efb5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610ce9565b60028054906000613f0b83614ec1565b90915550506001600160a01b038216600081815260056020908152604080832080546001019055848352600690915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600032613f89600143614e45565b60235460405160609390931b6001600160601b03191660208401529040603483015242605483015260748201526094016040516020818303038152906040528051906020012060001c905090565b6000838383604051602001613fee93929190614d07565b60408051601f198184030181529190528051602090910120949350505050565b600080600f8360ff166007811061402757614027614f54565b01546140339085614ef0565b9050600f8360ff166007811061404b5761404b614f54565b018160ff168154811061406057614060614f54565b60009182526020918290209181049091015460ff601f9092166101000a90048116600886901c9091161015614096579050610c41565b60168360ff16600781106140ac576140ac614f54565b018160ff16815481106140c1576140c1614f54565b90600052602060002090602091828204019190069054906101000a900460ff1691505092915050565b6140f26142ef565b6141018261ffff16600061400e565b60ff16815260109190911c9061411c61ffff8316600161400e565b60ff16602082015260109190911c9061413a61ffff8316600261400e565b60ff16604082015260109190911c9061415861ffff8316600361400e565b60ff16606082015260109190911c9061417661ffff8316600461400e565b60ff16608082015260109190911c9061419461ffff8316600561400e565b60ff1660a082015260109190911c906141b261ffff8316600661400e565b60ff1660c0820152600160e0820152919050565b82805482825590600052602060002090601f0160209004810192821561425c5791602002820160005b8382111561422d57835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026141ef565b801561425a5782816101000a81549060ff021916905560010160208160000104928301926001030261422d565b505b50614268929150614333565b5090565b82805482825590600052602060002090810192821561425c579160200282015b8281111561425c578251829068ffffffffffffffffff1690559160200191906001019061428c565b82805482825590600052602060002090810192821561425c579160200282015b8281111561425c5782358255916020019190600101906142d4565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b5b808211156142685760008155600101614334565b60008083601f84011261435a57600080fd5b50813567ffffffffffffffff81111561437257600080fd5b6020830191508360208260051b850101111561438d57600080fd5b9250929050565b803561ffff811681146143a657600080fd5b919050565b803560ff811681146143a657600080fd5b6000602082840312156143ce57600080fd5b813561189b81614f80565b6000602082840312156143eb57600080fd5b815161189b81614f80565b6000806040838503121561440957600080fd5b823561441481614f80565b9150602083013561442481614f80565b809150509250929050565b6000806000806080858703121561444557600080fd5b843561445081614f80565b9350602085013561446081614f80565b9250604085013561447081614f80565b9150606085013561448081614f80565b939692955090935050565b6000806000606084860312156144a057600080fd5b83356144ab81614f80565b925060208401356144bb81614f80565b929592945050506040919091013590565b600080600080608085870312156144e257600080fd5b84356144ed81614f80565b935060208501356144fd81614f80565b925060408501359150606085013567ffffffffffffffff81111561452057600080fd5b8501601f8101871361453157600080fd5b803561454461453f82614d61565b614d30565b81815288602083850101111561455957600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060006040848603121561459057600080fd5b833561459b81614f80565b9250602084013567ffffffffffffffff8111156145b757600080fd5b6145c386828701614348565b9497909650939450505050565b600080604083850312156145e357600080fd5b82356145ee81614f80565b9150602083013561442481614f95565b6000806040838503121561461157600080fd5b823561461c81614f80565b946020939093013593505050565b60008060006040848603121561463f57600080fd5b833567ffffffffffffffff81111561465657600080fd5b61466286828701614348565b909450925050602084013561467681614f80565b809150509250925092565b6000806020838503121561469457600080fd5b823567ffffffffffffffff8111156146ab57600080fd5b6146b785828601614348565b90969095509350505050565b6000806000604084860312156146d857600080fd5b833567ffffffffffffffff8111156146ef57600080fd5b6146fb86828701614348565b909450925050602084013561467681614fb9565b60006020828403121561472157600080fd5b813561189b81614f95565b60006020828403121561473e57600080fd5b815161189b81614f95565b60006020828403121561475b57600080fd5b813561189b81614fa3565b60006020828403121561477857600080fd5b815161189b81614fa3565b6000806040838503121561479657600080fd5b823561461c81614fb9565b6000602082840312156147b357600080fd5b815167ffffffffffffffff8111156147ca57600080fd5b8201601f810184136147db57600080fd5b80516147e961453f82614d61565b8181528560208385010111156147fe57600080fd5b61480f826020830160208601614e5c565b95945050505050565b6000806040838503121561482b57600080fd5b61483483614394565b915061484260208401614394565b90509250929050565b60006020828403121561485d57600080fd5b5035919050565b60006020828403121561487657600080fd5b5051919050565b6000806040838503121561489057600080fd5b82359150602083013561442481614f80565b600080604083850312156148b557600080fd5b82359150602083013561442481614fb9565b600080604083850312156148da57600080fd5b8235915061484260208401614394565b600080604083850312156148fd57600080fd5b50508035926020909101359150565b6000806000806060858703121561492257600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561494757600080fd5b61495387828801614348565b95989497509550505050565b6000806040838503121561497257600080fd5b82359150614842602084016143ab565b6000806000806000806000806000806000806101808d8f0312156149a557600080fd5b8c359b506149b560208e016143ab565b9a506149c360408e016143ab565b99506149d160608e016143ab565b98506149df60808e016143ab565b97506149ed60a08e016143ab565b96506149fb60c08e016143ab565b9550614a0960e08e016143ab565b9450614a186101008e01614394565b9350614a276101208e01614394565b9250614a366101408e01614394565b9150614a456101608e016143ab565b90509295989b509295989b509295989b565b60008151808452614a6f816020860160208601614e5c565b601f01601f19169290920160200192915050565b6001600160601b0319606094851b811682529290931b9091166014830152602882015260480190565b60008251614abe818460208701614e5c565b9190910192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613d4390830184614a57565b6001600160a01b0384168152604060208201819052810182905260006001600160fb1b03831115614b2b57600080fd5b8260051b8085606085013760009201606001918252509392505050565b6001600160a01b03841681526001600160581b03831660208201526060810160028310614b8557634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b60208152600061189b6020830184614a57565b6020808252600d908201526c6e6f7420796f757220646f676560981b604082015260600190565b60208082526017908201527f796f7527726520747279696e6720746f20636865617421000000000000000000604082015260600190565b60208082526012908201527139ba34b6361034b71031b7b7b6103237bbb760711b604082015260600190565b815160ff16815261016081016020830151614c50602084018260ff169052565b506040830151614c65604084018260ff169052565b506060830151614c7a606084018260ff169052565b506080830151614c8f608084018260ff169052565b5060a0830151614ca460a084018260ff169052565b5060c0830151614cb960c084018260ff169052565b5060e0830151614ccf60e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101409283015160ff16929091019190915290565b838152606060208201526000614d206060830185614a57565b9050826040830152949350505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614d5957614d59614f6a565b604052919050565b600067ffffffffffffffff821115614d7b57614d7b614f6a565b50601f01601f191660200190565b600061ffff808316818516808303821115614da657614da6614f12565b01949350505050565b60008219821115614dc257614dc2614f12565b500190565b600061ffff80841680614ddc57614ddc614f28565b92169190910492915050565b600082614df757614df7614f28565b500490565b600061ffff80831681851681830481118215151615614e1d57614e1d614f12565b02949350505050565b6000816000190483118215151615614e4057614e40614f12565b500290565b600082821015614e5757614e57614f12565b500390565b60005b83811015614e77578181015183820152602001614e5f565b838111156114645750506000910152565b600081614e9757614e97614f12565b506000190190565b600061ffff80831681811415614eb757614eb7614f12565b6001019392505050565b6000600019821415614ed557614ed5614f12565b5060010190565b600082614eeb57614eeb614f28565b500690565b600060ff831680614f0357614f03614f28565b8060ff84160691505092915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146112ab57600080fd5b80151581146112ab57600080fd5b6001600160e01b0319811681146112ab57600080fd5b600281106112ab57600080fdfea2646970667358221220161fd5ed520acdcbab9955034cd43b5bc93e0d7fadb24d770e0129aed9df08f764736f6c63430008070033
Deployed Bytecode Sourcemap
16294:31403:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47577:1;47557:7;;-1:-1:-1;;;;;;47557:7:0;47545:20;;:11;:20;;;;;;-1:-1:-1;;;;;47545:20:0;47542:145;;47596:15;18718:42;47596:9;:15::i;:::-;16294:31403;47542:145;47654:20;47666:7;;-1:-1:-1;;;;;;47666:7:0;47654:20;;:11;:20;;;;;;47644:31;;-1:-1:-1;;;;;47654:20:0;47644:9;:31::i;18069:16::-;;;;;-1:-1:-1;;;;;18069:16:0;;;;;;-1:-1:-1;;;;;14750:32:1;;;14732:51;;14720:2;14705:18;18069:16:0;;;;;;;;7258:171;;;;;;:::i;:::-;;:::i;:::-;;;17598:14:1;;17591:22;17573:41;;17561:2;17546:18;7258:171:0;17433:187:1;20486:196:0;;;;;;:::i;:::-;;:::i;6073:24::-;;;;;;;;;26394:25:1;;;26382:2;26367:18;6073:24:0;26248:177:1;39415:87:0;39480:14;;;;;;;;;;;;-1:-1:-1;;;39480:14:0;;;;39415:87;;;;;;;:::i;6254:46::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;6254:46:0;;;7441:330;;;;;;:::i;:::-;;:::i;20060:99::-;;;;;;:::i;:::-;;:::i;18183:44::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;18183:44:0;;;-1:-1:-1;;;18183:44:0;;-1:-1:-1;;;;;18183:44:0;;-1:-1:-1;;;18183:44:0;;;;;;;;;;;;;;;:::i;18234:39::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;18234:39:0;;;-1:-1:-1;;;18234:39:0;;-1:-1:-1;;;;;18234:39:0;;;;;;;-1:-1:-1;;;;;16773:32:1;;;16755:51;;-1:-1:-1;;;;;16842:37:1;;;16837:2;16822:18;;16815:65;16728:18;18234:39:0;16583:303:1;19577:114:0;;;;;;:::i;:::-;;:::i;17239:26::-;;;;;;;;;;;;26229:6:1;26217:19;;;26199:38;;26187:2;26172:18;17239:26:0;26055:188:1;6040:26:0;;;;;;29971:360;;;;;;:::i;:::-;;:::i;16673:47::-;;16712:8;16673:47;;8000:334;;;;;;:::i;:::-;;:::i;17871:29::-;;;;;;31329:264;;;;;;:::i;:::-;;:::i;16573:41::-;;16610:4;16573:41;;17410:26;;;;;;:::i;:::-;;:::i;:::-;;;26968:4:1;26956:17;;;26938:36;;26926:2;26911:18;17410:26:0;26796:184:1;17582:25:0;;;;;;:::i;:::-;;:::i;17835:29::-;;;;;;33669:174;;;:::i;18769:21::-;;;;;-1:-1:-1;;;;;18769:21:0;;;8346:136;;;;;;:::i;:::-;;:::i;19817:109::-;;;;;;:::i;:::-;;:::i;19290:279::-;;;;;;:::i;:::-;;:::i;6104:21::-;;;;;;16958:25;;;;;;;;;17907:28;;;;;;:::i;:::-;;:::i;39307:100::-;16662:4;39307:100;;35342:416;;;;;;:::i;:::-;;:::i;6195:42::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;6195:42:0;;;17191:41;;17229:3;17191:41;;19063:219;;;;;;:::i;:::-;;:::i;16990:22::-;;;;;;;;;;;;19699:110;;;;;;:::i;:::-;;:::i;35766:164::-;;;;;;:::i;:::-;;:::i;19934:118::-;;;;;;:::i;:::-;;:::i;6138:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;31601:202;;;;;;:::i;:::-;;:::i;33851:190::-;;;;;;:::i;:::-;;:::i;26997:226::-;;;;;;:::i;:::-;;:::i;32591:432::-;;;;;;:::i;:::-;;:::i;23312:1999::-;;;:::i;18799:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18044:18;;;;;-1:-1:-1;;;;;18044:18:0;;;17157:27;;;;;;20274:101;;;;;;:::i;:::-;;:::i;6574:80::-;6641:5;;-1:-1:-1;;;;;6641:5:0;6574:80;;20821:301;;;;;;:::i;:::-;;:::i;37849:1044::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17801:27::-;;;;;;;;;16621:45;;16662:4;16621:45;;17019:43;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17737:55;;;;;;:::i;:::-;;;;;;;;;;;;;;7783:209;;;;;;:::i;:::-;;:::i;6862:192::-;;;;;;:::i;:::-;;:::i;30790:531::-;;;;;;:::i;:::-;;:::i;30339:443::-;;;;;;:::i;:::-;;:::i;36903:766::-;;;;;;:::i;:::-;;:::i;8494:583::-;;;;;;:::i;:::-;;:::i;20690:123::-;;;;;;:::i;:::-;;:::i;21736:268::-;;;;;;:::i;:::-;;:::i;17963:34::-;;;;;;:::i;:::-;;:::i;17123:27::-;;;;;;18094:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38901:398;;;;;;:::i;:::-;;:::i;20383:95::-;;;;;;:::i;:::-;;:::i;18280:77::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;18434:21;;;;;-1:-1:-1;;;;;18434:21:0;;;6310:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;21130:145;;;;;;:::i;:::-;;:::i;20167:99::-;;;;;;:::i;:::-;;:::i;17069:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5786:20;;;;;-1:-1:-1;;;;;5786:20:0;;;36454:441;;;;;;:::i;:::-;;:::i;18464:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;46579:918;46922:14;46919:1;46916;46903:34;47140:1;47137;47121:14;47118:1;47102:14;47095:5;47082:60;47219:16;47216:1;47213;47198:38;47259:6;47328:68;;;;47447:16;47444:1;47437:27;47328:68;47364:16;47361:1;47354:27;47252:227;;;46579:918;:::o;7258:171::-;7328:14;-1:-1:-1;;;;;;;;;7367:25:0;;;;:54;;-1:-1:-1;;;;;;;;;;7396:25:0;;;7367:54;7355:66;7258:171;-1:-1:-1;;7258:171:0:o;20486:196::-;26636:5;;-1:-1:-1;;;;;26636:5:0;26622:10;:19;26614:28;;;;;;20607:12:::1;:28:::0;;;;20646:12:::1;:28:::0;20486:196::o;7441:330::-;7512:14;7529:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7529:16:0;7574:10;:20;;;:60;;-1:-1:-1;;;;;;7598:24:0;;;;;;:16;:24;;;;;;;;7623:10;7598:36;;;;;;;;;;7574:60;7566:85;;;;-1:-1:-1;;;7566:85:0;;19871:2:1;7566:85:0;;;19853:21:1;19910:2;19890:18;;;19883:30;-1:-1:-1;;;19929:18:1;;;19922:42;19981:18;;7566:85:0;;;;;;;;;7672:20;;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;7672:30:0;-1:-1:-1;;;;;7672:30:0;;;;;;;;;7728:34;;7672:20;;7728:34;;;;;;;7501:270;7441:330;;:::o;20060:99::-;26636:5;;-1:-1:-1;;;;;26636:5:0;26622:10;:19;26614:28;;;;;;-1:-1:-1;;;;;20133:9:0;;;::::1;;::::0;;;:4:::1;:9;::::0;;;;:18;;-1:-1:-1;;20133:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20060:99::o;19577:114::-;19649:5;;-1:-1:-1;;;;;19649:5:0;19635:10;:19;19627:28;;;;;;19666:5;:17;;-1:-1:-1;;;;;;19666:17:0;-1:-1:-1;;;;;19666:17:0;;;;;;;;;;19577:114::o;29971:360::-;26485:11;;;;:7;:11;;;;;;30019:2;;30023:10;;-1:-1:-1;;;;;26485:11:0;:19;;;:51;;-1:-1:-1;26508:14:0;;;;:10;:14;;;;;:20;-1:-1:-1;;;;;26508:28:0;;;:20;;:28;26485:51;26477:77;;;;-1:-1:-1;;;26477:77:0;;;;;;;:::i;:::-;26033:15:::1;26051:12:::0;;;:8:::1;:12;::::0;;;;;;;;26033:30;;;;::::1;::::0;;;;-1:-1:-1;;;;;26033:30:0;::::1;::::0;;-1:-1:-1;;;26033:30:0;::::1;-1:-1:-1::0;;;;;26033:30:0::1;::::0;;::::1;::::0;;;26051:12;;26033:30;26115:29:::1;::::0;16712:8:::1;::::0;26115:29:::1;:::i;:::-;26096:15;:48;;26074:116;;;;-1:-1:-1::0;;;26074:116:0::1;;;;;;;:::i;:::-;25568:10:::2;25527:12;25682:16:::0;;;:4:::2;:16;::::0;;;;;25621;::::2;::::0;25568:10;25682:16:::2;;::::0;:58:::2;;-1:-1:-1::0;25703:10:0::2;25717:9;25703:23;:36:::0;::::2;;;-1:-1:-1::0;25730:9:0;;25703:36:::2;25660:131;;;;-1:-1:-1::0;;;25660:131:0::2;;;;;;;:::i;:::-;16610:4:::3;30088:11;;:25;;30080:55;;;::::0;-1:-1:-1;;;30080:55:0;;19525:2:1;30080:55:0::3;::::0;::::3;19507:21:1::0;19564:2;19544:18;;;19537:30;-1:-1:-1;;;19583:18:1;;;19576:47;19640:18;;30080:55:0::3;19323:341:1::0;30080:55:0::3;30146:12;30161:18;:16;:18::i;:::-;30146:33:::0;-1:-1:-1;30194:8:0;;30190:42:::3;;30204:5;::::0;;:28:::3;::::0;-1:-1:-1;;;30204:28:0;;30215:10:::3;30204:28;::::0;::::3;16049:51:1::0;16116:18;;;16109:34;;;-1:-1:-1;;;;;30204:5:0::3;::::0;:10:::3;::::0;16022:18:1;;30204:28:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;30190:42;30243:12;::::0;;;:8:::3;:12;::::0;;;;:48;;-1:-1:-1;;;;30243:48:0::3;-1:-1:-1::0;;;30275:15:0::3;-1:-1:-1::0;;;;;30243:48:0::3;;;::::0;;30302:21:::3;30312:10;30302:9;:21::i;:::-;30069:262;25931:3:::2;25936:14;25952:12;;25914:51;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;25914:51:0;;::::2;::::0;;;;;;25904:62;;25914:51:::2;25904:62:::0;;::::2;::::0;25889:12:::2;:77:::0;-1:-1:-1;;;;;;;29971:360:0:o;8000:334::-;8105:10;-1:-1:-1;;;;;8105:18:0;;;;:70;;-1:-1:-1;8155:20:0;;;;:11;:20;;;;;;-1:-1:-1;;;;;8155:20:0;8141:10;:34;8105:70;:121;;;-1:-1:-1;;;;;;8192:22:0;;;;;;:16;:22;;;;;;;;8215:10;8192:34;;;;;;;;;;8105:121;8083:184;;;;-1:-1:-1;;;8083:184:0;;19871:2:1;8083:184:0;;;19853:21:1;19910:2;19890:18;;;19883:30;-1:-1:-1;;;19929:18:1;;;19922:42;19981:18;;8083:184:0;19669:336:1;8083:184:0;8288:28;8298:4;8304:2;8308:7;8288:9;:28::i;31329:264::-;31412:7;;31477:8;31461:101;31491:7;31487:11;;:1;:11;;;31461:101;;;31530:17;31548:1;31530:20;;;;;;;;;;:::i;:::-;;;;;;;;;31520:30;;;;;:::i;:::-;;-1:-1:-1;31500:3:0;;;;:::i;:::-;;;;31461:101;;;-1:-1:-1;31579:6:0;31329:264;-1:-1:-1;;;31329:264:0:o;17410:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17582:25::-;;;;;;;;;;;33669:174;26636:5;;-1:-1:-1;;;;;26636:5:0;26622:10;:19;26614:28;;;;;;33719:51:::1;::::0;33727:10:::1;::::0;33748:21:::1;33719:51:::0;::::1;;;::::0;::::1;::::0;;;33748:21;33727:10;33719:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;33781:3:0::1;::::0;33806:28:::1;::::0;-1:-1:-1;;;33806:28:0;;33828:4:::1;33806:28;::::0;::::1;14732:51:1::0;-1:-1:-1;;;;;33781:3:0;;::::1;::::0;:12:::1;::::0;33794:10:::1;::::0;33781:3;;33806:13:::1;::::0;14705:18:1;;33806:28:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33781:54;::::0;-1:-1:-1;;;;;;33781:54:0::1;::::0;;;;;;-1:-1:-1;;;;;16067:32:1;;;33781:54:0::1;::::0;::::1;16049:51:1::0;16116:18;;;16109:34;16022:18;;33781:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33669:174::o:0;8346:136::-;8435:39;8452:4;8458:2;8462:7;8435:39;;;;;;;;;;;;:16;:39::i;19817:109::-;19890:5;;-1:-1:-1;;;;;19890:5:0;19876:10;:19;19868:28;;;;;;19907:6;:11;;-1:-1:-1;;;;;;19907:11:0;-1:-1:-1;;;;;19907:11:0;;;;;;;;;;19817:109::o;19290:279::-;26636:5;;-1:-1:-1;;;;;26636:5:0;26622:10;:19;26614:28;;;;;;19449:6:::1;:25:::0;;-1:-1:-1;;;;;19449:25:0;;::::1;-1:-1:-1::0;;;;;;19449:25:0;;::::1;;::::0;;;19485:5:::1;:21:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;19517:3:::1;:17:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;19545:6:::1;:16:::0;;;;;::::1;::::0;::::1;;::::0;;19290:279::o;17907:28::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17907:28:0;:::o;35342:416::-;35453:13;35448:303;35472:18;;;35448:303;;;35565:10;35542:7;:19;35550:3;;35554:5;35550:10;;;;;;;:::i;:::-;;;;;;;;;;35542:19;;-1:-1:-1;35542:19:0;;;;;;;;-1:-1:-1;35542:19:0;;-1:-1:-1;;;;;35542:19:0;:33;;:79;;-1:-1:-1;35611:10:0;35579;:22;35590:3;;35594:5;35590:10;;;;;;;:::i;:::-;;;;;;;;;;35579:22;;-1:-1:-1;35579:22:0;;;;;;;;-1:-1:-1;35579:22:0;:28;-1:-1:-1;;;;;35579:28:0;:42;35542:79;35516:154;;;;-1:-1:-1;;;35516:154:0;;;;;;;:::i;:::-;35685:54;35695:3;;35699:5;35695:10;;;;;;;:::i;:::-;;;;;;;35707;35719:7;35728:10;35685:9;:54::i;:::-;35492:7;;;;:::i;:::-;;;;35448:303;;;;35342:416;;;:::o;19063:219::-;26636:5;;-1:-1:-1;;;;;26636:5:0;26622:10;:19;26614:28;;;;;;19163:13:::1;19158:117;19182:20:::0;;::::1;19158:117;;;19256:6;19228:11;:25;19240:5;;19246;19240:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;19228:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19228:25:0;:34;;-1:-1:-1;;;;;;19228:34:0::1;-1:-1:-1::0;;;;;19228:34:0;;;::::1;::::0;;;::::1;::::0;;19204:7;::::1;::::0;::::1;:::i;:::-;;;;19158:117;;19699:110:::0;19769:5;;-1:-1:-1;;;;;19769:5:0;19755:10;:19;19747:28;;;;;;19786:3;:15;;-1:-1:-1;;;;;;19786:15:0;-1:-1:-1;;;;;19786:15:0;;;;;;;;;;19699:110::o;35766:164::-;35830:13;35825:98;35849:18;;;35825:98;;;35893:18;35900:3;;35904:5;35900:10;;;;;;;:::i;:::-;;;;;;;35893:6;:18::i;:::-;35869:7;;;;:::i;:::-;;;;35825:98;;19934:118;20007:5;;-1:-1:-1;;;;;20007:5:0;19993:10;:19;19985:28;;;;;;20024:6;:20;;-1:-1:-1;;;;;;20024:20:0;-1:-1:-1;;;;;20024:20:0;;;;;;;;;;19934:118::o;31601:202::-;26485:11;;;;:7;:11;;;;;;31670:2;;31674:10;;-1:-1:-1;;;;;26485:11:0;:19;;;:51;;-1:-1:-1;26508:14:0;;;;:10;:14;;;;;:20;-1:-1:-1;;;;;26508:28:0;;;:20;;:28;26485:51;26477:77;;;;-1:-1:-1;;;26477:77:0;;;;;;;:::i;:::-;25568:10:::1;25527:12;25682:16:::0;;;:4:::1;:16;::::0;;;;;25621;::::1;::::0;25568:10;25682:16:::1;;::::0;:58:::1;;-1:-1:-1::0;25703:10:0::1;25717:9;25703:23;:36:::0;::::1;;;-1:-1:-1::0;25730:9:0;;25703:36:::1;25660:131;;;;-1:-1:-1::0;;;25660:131:0::1;;;;;;;:::i;:::-;31716:13:::2;::::0;;;:9:::2;:13;::::0;;;;;:23:::2;::::0;;::::2;:13:::0;::::2;:23;;31708:54;;;::::0;-1:-1:-1;;;31708:54:0;;20903:2:1;31708:54:0::2;::::0;::::2;20885:21:1::0;20942:2;20922:18;;;20915:30;-1:-1:-1;;;20961:18:1;;;20954:48;21019:18;;31708:54:0::2;20701:342:1::0;31708:54:0::2;31773:13;::::0;;;:9:::2;:13;::::0;;;;;;;;:22;;-1:-1:-1;;31773:22:0::2;;::::0;::::2;;::::0;;25952:12:::1;::::0;25914:51;;::::1;::::0;25931:3;;25936:14:::1;::::0;25914:51:::1;;:::i;:::-;;::::0;;-1:-1:-1;;25914:51:0;;::::1;::::0;;;;;;25904:62;;25914:51:::1;25904:62:::0;;::::1;::::0;25889:12:::1;:77:::0;-1:-1:-1;;;;;;31601:202:0:o;33851:190::-;26485:11;;;;:7;:11;;;;;;33935:2;;33939:10;;-1:-1:-1;;;;;26485:11:0;:19;;;:51;;-1:-1:-1;26508:14:0;;;;:10;:14;;;;;:20;-1:-1:-1;;;;;26508:28:0;;;:20;;:28;26485:51;26477:77;;;;-1:-1:-1;;;26477:77:0;;;;;;;:::i;:::-;25568:10:::1;25527:12;25682:16:::0;;;:4:::1;:16;::::0;;;;;25621;::::1;::::0;25568:10;25682:16:::1;;::::0;:58:::1;;-1:-1:-1::0;25703:10:0::1;25717:9;25703:23;:36:::0;::::1;;;-1:-1:-1::0;25730:9:0;;25703:36:::1;25660:131;;;;-1:-1:-1::0;;;25660:131:0::1;;;;;;;:::i;:::-;33987:46:::2;33997:2;34001:10;34013:7;34022:10;33987:9;:46::i;:::-;25931:3:::1;25936:14;25952:12;;25914:51;;;;;;;;;;:::i;26997:226::-:0;27081:4;27107:11;;;:7;:11;;;;;;-1:-1:-1;;;;;27107:19:0;;;:11;;:19;;:51;;-1:-1:-1;27130:14:0;;;;:10;:14;;;;;:20;-1:-1:-1;;;;;27130:28:0;;;:20;;:28;27107:51;:107;;;-1:-1:-1;27185:6:0;;27162:44;;-1:-1:-1;;;27162:44:0;;;;;26394:25:1;;;-1:-1:-1;;;;;27162:52:0;;;;27185:6;;27162:40;;26367:18:1;;27162:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27162:52:0;;27107:107;27099:116;26997:226;-1:-1:-1;;;26997:226:0:o;32591:432::-;26485:11;;;;:7;:11;;;;;;32689:2;;32693:10;;-1:-1:-1;;;;;26485:11:0;:19;;;:51;;-1:-1:-1;26508:14:0;;;;:10;:14;;;;;:20;-1:-1:-1;;;;;26508:28:0;;;:20;;:28;26485:51;26477:77;;;;-1:-1:-1;;;26477:77:0;;;;;;;:::i;:::-;26033:15:::1;26051:12:::0;;;:8:::1;:12;::::0;;;;;;;;26033:30;;;;::::1;::::0;;;;-1:-1:-1;;;;;26033:30:0;::::1;::::0;;-1:-1:-1;;;26033:30:0;::::1;-1:-1:-1::0;;;;;26033:30:0::1;::::0;;::::1;::::0;;;26051:12;;26033:30;26115:29:::1;::::0;16712:8:::1;::::0;26115:29:::1;:::i;:::-;26096:15;:48;;26074:116;;;;-1:-1:-1::0;;;26074:116:0::1;;;;;;;:::i;:::-;25568:10:::2;25527:12;25682:16:::0;;;:4:::2;:16;::::0;;;;;25621;::::2;::::0;25568:10;25682:16:::2;;::::0;:58:::2;;-1:-1:-1::0;25703:10:0::2;25717:9;25703:23;:36:::0;::::2;;;-1:-1:-1::0;25730:9:0;;25703:36:::2;25660:131;;;;-1:-1:-1::0;;;25660:131:0::2;;;;;;;:::i;:::-;32773:14:::3;32790:11;32853:1;32816:18;:30;32835:10;32816:30;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:34;32847:2;32816:34;;;;;;;;;;;;:38;:113;;32928:1;32816:113;;;32874:18;:30;32893:10;32874:30;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:34;32905:2;32874:34;;;;;;;;;;;;32816:113;32790:150;;;;;;;;:::i;:::-;;::::0;;;::::3;::::0;;;::::3;::::0;32951:5:::3;::::0;;:30:::3;::::0;-1:-1:-1;;;32951:30:0;;32962:10:::3;32951:30;::::0;::::3;16049:51:1::0;16116:18;;;16109:34;;;32790:150:0;;-1:-1:-1;;;;;;32951:5:0;;::::3;::::0;:10:::3;::::0;16022:18:1;;32951:30:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;32992:23;33000:2;33004:10;32992:7;:23::i;:::-;32762:261;25931:3:::2;25936:14;25952:12;;25914:51;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;25914:51:0;;::::2;::::0;;;;;;25904:62;;25914:51:::2;25904:62:::0;;::::2;::::0;25889:12:::2;:77:::0;-1:-1:-1;;;;;;;;32591:432:0:o;23312:1999::-;26636:5;;-1:-1:-1;;;;;26636:5:0;26622:10;:19;26614:28;;;;;;23362:5:::1;:18:::0;;-1:-1:-1;;;;;;23362:18:0::1;23370:10;23362:18:::0;;::::1;::::0;;-1:-1:-1;23391:16:0;;;:4:::1;:16;::::0;;;;;;;;:23;;-1:-1:-1;;23391:23:0::1;::::0;;::::1;::::0;;;23456:13:::1;:21:::0;;-1:-1:-1;;23488:18:0;;;23532:11:::1;23517:12;:26:::0;23569:9:::1;23554:12;:24:::0;23731:59;;::::1;::::0;::::1;::::0;;23746:3:::1;23731:59:::0;;23751:3:::1;23731:59:::0;;::::1;::::0;;;;23391:23:::1;23731:59:::0;;;;;;;23761:3:::1;23731:59:::0;;;;;;;;;;;;;;;;23776:3:::1;23731:59:::0;;;;;;;;;;;;23362:18:::1;23731:59:::0;;;::::1;::::0;:8:::1;::::0;:59:::1;:::i;:::-;-1:-1:-1::0;23801:40:0::1;::::0;;::::1;::::0;::::1;::::0;;23815:1:::1;23801:40:::0;;;::::1;::::0;::::1;::::0;23821:1:::1;23801:40:::0;;;;;;;-1:-1:-1;23801:40:0;;;;;;;;;;;;;;;;;;;;;;23836:1:::1;23801:40:::0;;;;;;;;;;::::1;::::0;:7:::1;::::0;:40:::1;;:::i;:::-;-1:-1:-1::0;23870:54:0::1;::::0;;::::1;::::0;::::1;::::0;;23885:3:::1;23870:54:::0;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;:11;;:54:::1;;:::i;:::-;-1:-1:-1::0;23935:37:0::1;::::0;;::::1;::::0;::::1;::::0;;23949:1:::1;23935:37:::0;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;:10;;:37:::1;;:::i;:::-;-1:-1:-1::0;24001:43:0::1;::::0;;::::1;::::0;::::1;::::0;;24016:3:::1;24001:43:::0;;;24021:3:::1;24001:43;::::0;::::1;::::0;;;;;;;;24031:3:::1;24001:43:::0;;;;24036:3:::1;24001:43:::0;;;;24041:2:::1;24001:43:::0;;;;::::1;::::0;:11;;:43:::1;;:::i;:::-;-1:-1:-1::0;24055:31:0::1;::::0;;::::1;::::0;::::1;::::0;;24069:1:::1;24055:31:::0;;;::::1;::::0;::::1;::::0;24075:1:::1;24055:31:::0;;;;;;;-1:-1:-1;24055:31:0;;;;;;;;;;24084:1:::1;24055:31:::0;;;;::::1;::::0;:10;;:31:::1;;:::i;:::-;-1:-1:-1::0;24115:54:0::1;::::0;;::::1;::::0;::::1;::::0;;24130:3:::1;24115:54:::0;;24135:3:::1;24115:54;::::0;::::1;::::0;24140:3:::1;24115:54:::0;;;;;;;::::1;::::0;;;;24150:3:::1;24115:54:::0;;;;;;;;;;;;;;;;24165:3:::1;24115:54:::0;;;;::::1;::::0;:11;;:54:::1;;:::i;:::-;-1:-1:-1::0;24180:37:0::1;::::0;;::::1;::::0;::::1;::::0;;24194:1:::1;24180:37:::0;;;::::1;::::0;::::1;::::0;24200:1:::1;24180:37:::0;;;;;;;24203:1:::1;24180:37:::0;;;;-1:-1:-1;24180:37:0;;;;;;;;;;24212:1:::1;24180:37:::0;;;;;;;;;;::::1;::::0;:10;;:37:::1;;:::i;:::-;-1:-1:-1::0;24246:19:0::1;::::0;;::::1;::::0;::::1;::::0;;;24261:3:::1;24246:19:::0;;::::1;::::0;:11;;:19:::1;;:::i;:::-;-1:-1:-1::0;24276:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;24276:16:0;;::::1;::::0;:10;;:16:::1;;:::i;:::-;-1:-1:-1::0;24323:19:0::1;::::0;;::::1;::::0;::::1;::::0;;;24338:3:::1;24323:19:::0;;::::1;::::0;:11;;:19:::1;;:::i;:::-;-1:-1:-1::0;24353:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;24353:16:0;;::::1;::::0;:10;;:16:::1;;:::i;:::-;-1:-1:-1::0;24401:19:0::1;::::0;;::::1;::::0;::::1;::::0;;;24416:3:::1;24401:19:::0;;::::1;::::0;:11;;:19:::1;;:::i;:::-;-1:-1:-1::0;24431:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;24431:16:0;;::::1;::::0;:10;;:16:::1;;:::i;:::-;-1:-1:-1::0;24460:15:0::1;:23:::0;;-1:-1:-1;;24460:23:0::1;::::0;;24540:10:::1;24523:14;:27:::0;24578:8:::1;24561:14;:25:::0;;;24597:139:::1;::::0;;::::1;::::0;::::1;::::0;;24626:7:::1;24597:139:::0;;24648:8:::1;24597:139:::0;;::::1;::::0;;;;24671:8:::1;24597:139:::0;;;;24694:8:::1;24597:139:::0;;;;24717:8:::1;24597:139:::0;;;;::::1;::::0;:11:::1;::::0;:139:::1;;:::i;:::-;-1:-1:-1::0;24808:495:0::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24808:495:0;;24865:8:::1;24808:495;::::0;::::1;::::0;24888:8:::1;24808:495:::0;;;;;;;24911:8:::1;24808:495:::0;;;;24934:8:::1;24808:495:::0;;;;24957:8:::1;24808:495:::0;;;;24980:8:::1;24808:495:::0;;;;25003:8:::1;24808:495:::0;;;;25026:8:::1;24808:495:::0;;;;25049:8:::1;24808:495:::0;;;;25072:8:::1;24808:495:::0;;;;25095:8:::1;24808:495:::0;;;;25118:8:::1;24808:495:::0;;;;25141:8:::1;24808:495:::0;;;;25164:8:::1;24808:495:::0;;;;25187:9:::1;24808:495:::0;;;;25211:9:::1;24808:495:::0;;;;25235:9:::1;24808:495:::0;;;;25259:9:::1;24808:495:::0;;;;25283:9:::1;24808:495:::0;;;;::::1;::::0;:17:::1;::::0;:495:::1;;:::i;20274:101::-:0;26636:5;;-1:-1:-1;;;;;26636:5:0;26622:10;:19;26614:28;;;;;;20344:13:::1;:23:::0;;-1:-1:-1;;20344:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20274:101::o;20821:301::-;26636:5;;-1:-1:-1;;;;;26636:5:0;26622:10;:19;26614:28;;;;;;20997:14:::1;:32:::0;;;21040:14:::1;:32:::0;;;21083:31:::1;:11;21097:17:::0;;21083:31:::1;:::i;:::-;;20821:301:::0;;;;:::o;37849:1044::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37942:21:0;;;;:12;:21;;;;;;37967:12;37942:37;37938:350;;;-1:-1:-1;;37988:300:0;;;;;;;;-1:-1:-1;37988:300:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37849:1044::o;37938:350::-;-1:-1:-1;38306:579:0;;;;;;;;-1:-1:-1;38333:14:0;;;:5;:14;;;;;;;:19;;;;;38306:579;;38333:19;38374:20;;;;;38306:579;;;;38416:20;;;;;38306:579;;;;38458:20;;;;;38306:579;;;;38500:20;;;;;38306:579;;;;38544:22;;;;;38306:579;;;;-1:-1:-1;;;38591:23:0;;;;38306:579;;;;38636:20;-1:-1:-1;;;38636:20:0;;;;;38306:579;;;;38696:46;;;:37;:46;;;;;;38306:579;;;;;;38783:46;;;:37;:46;;;;;;38306:579;;;;;;;38855:18;;;:9;:18;;;;;;;;;;38306:579;;;;;37849:1044::o;7783:209::-;7880:10;7863:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;7863:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;7863:49:0;;;;;;;;;;7938:46;;17573:41:1;;;7863:38:0;;7880:10;7938:46;;17546:18:1;7938:46:0;;;;;;;7783:209;;:::o;6862:192::-;6951:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;6951:16:0;6937:10;:30;6929:52;;;;-1:-1:-1;;;6929:52:0;;23405:2:1;6929:52:0;;;23387:21:1;23444:1;23424:18;;;23417:29;-1:-1:-1;;;23462:18:1;;;23455:39;23511:18;;6929:52:0;23203:332:1;6929:52:0;7002:34;7012:10;7024:2;7028:7;7002:9;:34::i;:::-;6862:192;;:::o;30790:531::-;26485:11;;;;:7;:11;;;;;;30894:2;;30898:10;;-1:-1:-1;;;;;26485:11:0;:19;;;:51;;-1:-1:-1;26508:14:0;;;;:10;:14;;;;;:20;-1:-1:-1;;;;;26508:28:0;;;:20;;:28;26485:51;26477:77;;;;-1:-1:-1;;;26477:77:0;;;;;;;:::i;:::-;26033:15:::1;26051:12:::0;;;:8:::1;:12;::::0;;;;;;;;26033:30;;;;::::1;::::0;;;;-1:-1:-1;;;;;26033:30:0;::::1;::::0;;-1:-1:-1;;;26033:30:0;::::1;-1:-1:-1::0;;;;;26033:30:0::1;::::0;;::::1;::::0;;;26051:12;;26033:30;26115:29:::1;::::0;16712:8:::1;::::0;26115:29:::1;:::i;:::-;26096:15;:48;;26074:116;;;;-1:-1:-1::0;;;26074:116:0::1;;;;;;;:::i;:::-;25568:10:::2;25527:12;25682:16:::0;;;:4:::2;:16;::::0;;;;;25621;::::2;::::0;25568:10;25682:16:::2;;::::0;:58:::2;;-1:-1:-1::0;25703:10:0::2;25717:9;25703:23;:36:::0;::::2;;;-1:-1:-1::0;25730:9:0;;25703:36:::2;25660:131;;;;-1:-1:-1::0;;;25660:131:0::2;;;;;;;:::i;:::-;30978:13:::3;30994:9:::0;;;:5:::3;:9;::::0;;;;:15;::::3;-1:-1:-1::0;;;30994:15:0;;::::3;::::0;::::3;::::0;31028:16;::::3;::::0;::::3;31020:42;;;::::0;-1:-1:-1;;;31020:42:0;;19183:2:1;31020:42:0::3;::::0;::::3;19165:21:1::0;19222:2;19202:18;;;19195:30;-1:-1:-1;;;19241:18:1;;;19234:43;19294:18;;31020:42:0::3;18981:337:1::0;31020:42:0::3;31092:2;31081:7;:13;;;;31073:43;;;::::0;-1:-1:-1;;;31073:43:0;;18495:2:1;31073:43:0::3;::::0;::::3;18477:21:1::0;18534:2;18514:18;;;18507:30;-1:-1:-1;;;18553:18:1;;;18546:47;18610:18;;31073:43:0::3;18293:341:1::0;31073:43:0::3;31127:10;31134:2;31127:6;:10::i;:::-;31216:5;::::0;-1:-1:-1;;;;;31216:5:0::3;:10;31227;31239:37;31260:6:::0;31268:7;31239:20:::3;:37::i;:::-;31216:61;::::0;-1:-1:-1;;;;;;31216:61:0::3;::::0;;;;;;-1:-1:-1;;;;;16067:32:1;;;31216:61:0::3;::::0;::::3;16049:51:1::0;16116:18;;;16109:34;16022:18;;31216:61:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;;31288:9:0::3;::::0;;;:5:::3;:9;::::0;;;;;;;;:25;;-1:-1:-1;;;;31288:25:0::3;-1:-1:-1::0;;;31288:25:0::3;::::0;::::3;;;::::0;;25952:12:::2;::::0;25914:51;;::::2;::::0;-1:-1:-1;25931:3:0;;-1:-1:-1;25936:14:0::2;::::0;25952:12;25914:51:::2;;:::i;30339:443::-:0;26485:11;;;;:7;:11;;;;;;30419:2;;30423:10;;-1:-1:-1;;;;;26485:11:0;:19;;;:51;;-1:-1:-1;26508:14:0;;;;:10;:14;;;;;:20;-1:-1:-1;;;;;26508:28:0;;;:20;;:28;26485:51;26477:77;;;;-1:-1:-1;;;26477:77:0;;;;;;;:::i;:::-;26033:15:::1;26051:12:::0;;;:8:::1;:12;::::0;;;;;;;;26033:30;;;;::::1;::::0;;;;-1:-1:-1;;;;;26033:30:0;::::1;::::0;;-1:-1:-1;;;26033:30:0;::::1;-1:-1:-1::0;;;;;26033:30:0::1;::::0;;::::1;::::0;;;26051:12;;26033:30;26115:29:::1;::::0;16712:8:::1;::::0;26115:29:::1;:::i;:::-;26096:15;:48;;26074:116;;;;-1:-1:-1::0;;;26074:116:0::1;;;;;;;:::i;:::-;25568:10:::2;25527:12;25682:16:::0;;;:4:::2;:16;::::0;;;;;25621;::::2;::::0;25568:10;25682:16:::2;;::::0;:58:::2;;-1:-1:-1::0;25703:10:0::2;25717:9;25703:23;:36:::0;::::2;;;-1:-1:-1::0;25730:9:0;;25703:36:::2;25660:131;;;;-1:-1:-1::0;;;25660:131:0::2;;;;;;;:::i;:::-;30503:10:::3;30510:2;30503:6;:10::i;:::-;30592:13;30608:9:::0;;;:5:::3;:9;::::0;;;;:15;-1:-1:-1;;;30608:15:0;::::3;;;30651:2;30642:11:::0;::::3;30634:41;;;::::0;-1:-1:-1;;;30634:41:0;;23059:2:1;30634:41:0::3;::::0;::::3;23041:21:1::0;23098:2;23078:18;;;23071:30;-1:-1:-1;;;23117:18:1;;;23110:47;23174:18;;30634:41:0::3;22857:341:1::0;30634:41:0::3;30686:5;::::0;30709:17:::3;:25:::0;;-1:-1:-1;;;;;30686:5:0;;::::3;::::0;:10:::3;::::0;30697::::3;::::0;30709:25:::3;::::0;::::3;::::0;;::::3;;;;;:::i;:::-;;::::0;;;::::3;::::0;;;::::3;::::0;30686:49:::3;::::0;-1:-1:-1;;;;;;30686:49:0::3;::::0;;;;;;-1:-1:-1;;;;;16067:32:1;;;30686:49:0::3;::::0;::::3;16049:51:1::0;16116:18;;;16109:34;16022:18;;30686:49:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;30764:6;30773:1;30764:10;;;;:::i;:::-;30746:9;::::0;;;:5:::3;:9;::::0;;;;;;;;:28;;::::3;::::0;;;::::3;-1:-1:-1::0;;;30746:28:0::3;-1:-1:-1::0;;;;30746:28:0;;::::3;::::0;;;::::3;::::0;;;25952:12:::2;::::0;25914:51;;::::2;::::0;-1:-1:-1;25931:3:0;;25936:14:::2;::::0;25952:12;25914:51:::2;;:::i;36903:766::-:0;37160:5;;-1:-1:-1;;;;;37160:5:0;37146:10;:19;;:39;;-1:-1:-1;37174:10:0;37169:16;;;;:4;:16;;;;;;;;37146:39;37138:66;;;;-1:-1:-1;;;37138:66:0;;21605:2:1;37138:66:0;;;21587:21:1;21644:2;21624:18;;;21617:30;-1:-1:-1;;;21663:18:1;;;21656:44;21717:18;;37138:66:0;21403:338:1;37138:66:0;37232:4;37215:5;:9;37221:2;37215:9;;;;;;;;;;;:14;;;:21;;;;;;;;;;;;;;;;;;37265:5;37247;:9;37253:2;37247:9;;;;;;;;;;;:15;;;:23;;;;;;;;;;;;;;;;;;37299:5;37281;:9;37287:2;37281:9;;;;;;;;;;;:15;;;:23;;;;;;;;;;;;;;;;;;37333:5;37315;:9;37321:2;37315:9;;;;;;;;;;;:15;;;:23;;;;;;;;;;;;;;;;;;37367:5;37349;:9;37355:2;37349:9;;;;;;;;;;;:15;;;:23;;;;;;;;;;;;;;;;;;37403:7;37383:5;:9;37389:2;37383:9;;;;;;;;;;;:17;;;:27;;;;;;;;;;;;;;;;;;37442:8;37421:5;:9;37427:2;37421:9;;;;;;;;;;;:18;;;:29;;;;;;;;;;;;;;;;;;37479:5;37461;:9;37467:2;37461:9;;;;;;;;;;;:15;;;:23;;;;;;;;;;;;;;;;;;37539:16;37495:60;;:18;:37;37514:17;37495:37;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:41;37533:2;37495:41;;;;;;;;;;;:60;;;;37610:16;37566:60;;:18;:37;37585:17;37566:37;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;37566:37:0;;;:41;;;;;;;;;:60;;;;37637:9;:13;;;;;:24;;-1:-1:-1;;37637:24:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;36903:766:0:o;8494:583::-;8600:31;8613:4;8619:2;8623:7;8600:12;:31::i;:::-;-1:-1:-1;;;;;8657:14:0;;;:19;8653:417;;8770:21;8795:2;-1:-1:-1;;;;;8795:13:0;8832:10;8861;8873:4;8879:7;8888:4;8809:84;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8809:84:0;;;;;;;;;;;8795:99;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8767:127;;;8927:15;8956:8;8945:30;;;;;;;;;;;;:::i;:::-;8927:48;-1:-1:-1;;;;;;;;;;9012:22:0;;;9004:54;;;;-1:-1:-1;;;9004:54:0;;22711:2:1;9004:54:0;;;22693:21:1;22750:2;22730:18;;;22723:30;-1:-1:-1;;;22769:18:1;;;22762:49;22828:18;;9004:54:0;22509:343:1;9004:54:0;8678:392;;8494:583;;;;:::o;20690:123::-;26636:5;;-1:-1:-1;;;;;26636:5:0;26622:10;:19;26614:28;;;;;;20771:15:::1;:34:::0;;-1:-1:-1;;20771:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20690:123::o;21736:268::-;21865:21;;;;:12;:21;;;;;;21792:13;;21890:12;21865:37;;21857:97;;;;-1:-1:-1;;;21857:97:0;;22295:2:1;21857:97:0;;;22277:21:1;22334:2;22314:18;;;22307:30;22373:34;22353:18;;;22346:62;-1:-1:-1;;;22424:18:1;;;22417:45;22479:19;;21857:97:0;22093:411:1;21857:97:0;21972:6;;:24;;-1:-1:-1;;;21972:24:0;;;;;26394:25:1;;;-1:-1:-1;;;;;21972:6:0;;;;:15;;26367:18:1;;21972:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21972:24:0;;;;;;;;;;;;:::i;17963:34::-;;;;;;;;;;;;38901:398;38955:7;39004:15;38979:14;;;;:10;:14;;;;;:21;-1:-1:-1;;;38979:21:0;;;;:40;;;;;;;;:::i;:::-;;38975:298;;;39036:16;39073:14;;;:10;:14;;;;;:24;-1:-1:-1;;;39073:24:0;;-1:-1:-1;;;;;39073:24:0;39055:15;:42;:134;;39188:1;39055:134;;;39143:14;;;;:10;:14;;;;;:24;39125:42;;-1:-1:-1;;;39143:24:0;;-1:-1:-1;;;;;39143:24:0;39125:15;:42;:::i;:::-;39240:14;;;;:10;:14;;;;;:20;39036:153;;-1:-1:-1;39211:50:0;;39036:153;;39236:2;;-1:-1:-1;;;;;39240:20:0;39211:14;:50::i;38975:298::-;-1:-1:-1;39290:1:0;;38901:398;-1:-1:-1;38901:398:0:o;20383:95::-;26636:5;;-1:-1:-1;;;;;26636:5:0;26622:10;:19;26614:28;;;;;;20450:10:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;20450:20:0;;::::1;::::0;;;::::1;::::0;;20383:95::o;21130:145::-;26636:5;;-1:-1:-1;;;;;26636:5:0;26622:10;:19;26614:28;;;;;;21229:38:::1;:17;21249:18:::0;;21229:38:::1;:::i;20167:99::-:0;26636:5;;-1:-1:-1;;;;;26636:5:0;26622:10;:19;26614:28;;;;;;20242:5:::1;:16:::0;;-1:-1:-1;;;;;;20242:16:0::1;-1:-1:-1::0;;;;;20242:16:0;;;::::1;::::0;;;::::1;::::0;;20167:99::o;36454:441::-;36551:6;;-1:-1:-1;;;;;36551:6:0;36537:10;:20;36528:44;;;;-1:-1:-1;;;36528:44:0;;20564:2:1;36528:44:0;;;20546:21:1;20603:2;20583:18;;;20576:30;-1:-1:-1;;;20622:18:1;;;20615:40;20672:18;;36528:44:0;20362:334:1;36528:44:0;36588:13;36583:246;36607:18;;;36583:246;;;36688:16;36655:10;:22;36666:3;;36670:5;36666:10;;;;;;;:::i;:::-;;;;;;;36655:22;;;;;;;;;;;:29;;;;;;;;;;;;:49;;;;;;;;:::i;:::-;;36651:110;;36706:55;36716:3;;36720:5;36716:10;;;;;;;:::i;:::-;;;;;;;36728:6;36736:16;36754:6;36706:9;:55::i;:::-;36776:41;36786:6;36794:10;36806:3;;36810:5;36806:10;;;;;;;:::i;:::-;;;;;;;36776:9;:41::i;:::-;36627:7;;;;:::i;:::-;;;;36583:246;;;-1:-1:-1;36839:48:0;;-1:-1:-1;;;36839:48:0;;36850:10;;36839:35;;:48;;36875:6;;36883:3;;;;36839:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36454:441;;;:::o;46080:305::-;46168:11;;46131:7;;46203:4;46194:13;;46190:27;;;46216:1;46209:8;;;46080:305;:::o;46190:27::-;46241:4;46232:6;:13;46228:33;;;46254:7;46247:14;;;46080:305;:::o;46228:33::-;46285:4;46276:6;:13;46272:34;;;46298:8;46291:15;;;46080:305;:::o;46272:34::-;46330:4;46321:6;:13;46317:34;;;46343:8;46336:15;;;46080:305;:::o;46317:34::-;46369:8;46362:15;;;46080:305;:::o;39785:340::-;39836:9;39855:11;;39869:1;39855:15;;;;:::i;:::-;39882:16;;;;;;;:12;:16;;;;;39901:12;39882:31;;39836:35;;-1:-1:-1;39939:10:0;;:6;:10::i;:::-;39924:25;;39960:18;39969:2;39960:18;;39973:4;39960:8;:18::i;:::-;;39989:13;39995:2;39999;39989:13;;:5;:13::i;:::-;-1:-1:-1;40028:89:0;;;;;;;;-1:-1:-1;;;;;40028:89:0;;;;;-1:-1:-1;;;;;40089:15:0;40028:89;;;;;;;;;40013:12;;;;-1:-1:-1;40013:12:0;;;:8;:12;;;;;;;:104;;;;;;;;;-1:-1:-1;;;40013:104:0;-1:-1:-1;;;;;;40013:104:0;;;;;;;;;;;;;;39785:340::o;9274:329::-;9364:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;9364:24:0;;;:16;;:24;9356:46;;;;-1:-1:-1;;;9356:46:0;;24432:2:1;9356:46:0;;;24414:21:1;24471:1;24451:18;;;24444:29;-1:-1:-1;;;24489:18:1;;;24482:39;24538:18;;9356:46:0;24230:332:1;9356:46:0;-1:-1:-1;;;;;9415:15:0;;;;;;:9;:15;;;;;:17;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;9444:13:0;;;;;;:9;:13;;;;;:15;;;;;;:::i;:::-;;;;-1:-1:-1;;9487:20:0;;;;:11;:20;;;;;;;;9480:27;;-1:-1:-1;;;;;;9480:27:0;;;;;;9528:7;:16;;;;;;:21;;-1:-1:-1;;;;;9528:21:0;;;;;;;;;;;;9565:27;;9499:7;;9528:21;;9565:27;;;;;;9274:329;;;:::o;34049:1285::-;26485:11;;;;:7;:11;;;;;;;;34198:4;;-1:-1:-1;;;;;26485:19:0;;;:11;;:19;;:51;;-1:-1:-1;26508:14:0;;;;:10;:14;;;;;:20;-1:-1:-1;;;;;26508:28:0;;;:20;;:28;26485:51;26477:77;;;;-1:-1:-1;;;26477:77:0;;;;;;;:::i;:::-;34215:20:::1;34238:14:::0;;;:10:::1;:14;::::0;;;;;;;34215:37;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;34215:37:0;::::1;::::0;;-1:-1:-1;;;34215:37:0;::::1;-1:-1:-1::0;;;;;34215:37:0::1;::::0;;::::1;::::0;;;;;34238:14;;34215:37;;;-1:-1:-1;;;34215:37:0;::::1;;;::::0;;::::1;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;-1:-1:-1;34215:37:0;-1:-1:-1;34288:7:0;34271:24:::1;::::0;::::1;;;;;;:::i;:::-;:6;:13;;;:24;;;;;;;;:::i;:::-;;;34263:55;;;::::0;-1:-1:-1;;;34263:55:0;;23742:2:1;34263:55:0::1;::::0;::::1;23724:21:1::0;23781:2;23761:18;;;23754:30;-1:-1:-1;;;23800:18:1;;;23793:48;23858:18;;34263:55:0::1;23540:342:1::0;34263:55:0::1;34428:16;34486:6;:16;;;-1:-1:-1::0;;;;;34468:34:0::1;:15;:34;:105;;34557:6;:16;;;-1:-1:-1::0;;;;;34468:105:0::1;;;;34522:15;34468:105;34428:156:::0;-1:-1:-1;34618:16:0::1;34601:6;:13;;;:33;;;;;;;;:::i;:::-;;34597:349;;;34659:9;::::0;;;:5:::1;:9;::::0;;;;:15;-1:-1:-1;;;34659:15:0;::::1;;;34678:2;34659:21;34651:60;;;::::0;-1:-1:-1;;;34651:60:0;;21250:2:1;34651:60:0::1;::::0;::::1;21232:21:1::0;21289:2;21269:18;;;21262:30;21328:28;21308:18;;;21301:56;21374:18;;34651:60:0::1;21048:350:1::0;34651:60:0::1;34726:39;34736:9;34755:4;34762:2;34726:9;:39::i;:::-;34597:349;;;34820:6;:16;;;-1:-1:-1::0;;;;;34802:34:0::1;:15;:34;34798:50;;;34838:10;34845:2;34838:6;:10::i;:::-;34887:6;:16;;;-1:-1:-1::0;;;;;34875:28:0::1;:9;-1:-1:-1::0;;;;;34875:28:0::1;;:59;;34918:6;:16;;;34875:59;;;34906:9;34875:59;34863:71;;34597:349;34958:14;::::0;34975:7:::1;:27;;;;;;;;:::i;:::-;;:52;;35018:9;34975:52;;;35013:1;34975:52;34958:69:::0;-1:-1:-1;35053:16:0::1;35042:7;:27;;;;;;;;:::i;:::-;;35038:72;;;35071:39;35089:4;35096:9;35107:2;35071:9;:39::i;:::-;35140:112;;;;;;;;35169:6;-1:-1:-1::0;;;;;35140:112:0::1;;;;;35201:9;-1:-1:-1::0;;;;;35140:112:0::1;;;;;35233:7;35140:112;;;;;;;;:::i;:::-;::::0;;35123:14:::1;::::0;;;:10:::1;:14;::::0;;;;;;;;:129;;;;;;::::1;::::0;-1:-1:-1;;;;;35123:129:0::1;-1:-1:-1::0;;;35123:129:0::1;-1:-1:-1::0;;;;;;35123:129:0;;;-1:-1:-1;;;;;35123:129:0;;::::1;::::0;;;;::::1;::::0;;;;;::::1;::::0;:14;;;;-1:-1:-1;;;;;35123:129:0::1;-1:-1:-1::0;;;35123:129:0;;;::::1;;;;;;:::i;:::-;;;;;;;;;35268:58;35279:9;35290:2;35294:15;35317:7;35311:14;;;;;;;;:::i;:::-;35268:58;::::0;;-1:-1:-1;;;;;16399:32:1;;;16381:51;;16463:2;16448:18;;16441:34;;;;16491:18;;;16484:34;16566:4;16554:17;16549:2;16534:18;;16527:45;16368:3;16353:19;35268:58:0::1;;;;;;;34204:1130;;;34049:1285:::0;;;;;;:::o;35938:508::-;25568:10;25527:12;25682:16;;;:4;:16;;;;;;25621;;;25568:10;25682:16;;;:58;;-1:-1:-1;25703:10:0;25717:9;25703:23;:36;;;;-1:-1:-1;25730:9:0;;25703:36;25660:131;;;;-1:-1:-1;;;25660:131:0;;;;;;;:::i;:::-;35997:20:::1;36020:14:::0;;;:10:::1;:14;::::0;;;;;;;35997:37;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;35997:37:0;::::1;::::0;;-1:-1:-1;;;35997:37:0;::::1;-1:-1:-1::0;;;;;35997:37:0::1;::::0;;::::1;::::0;;;;;36020:14;;35997:37;;;-1:-1:-1;;;35997:37:0;::::1;;;::::0;;::::1;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;::::0;::::1;;;36070:6;:16;;;-1:-1:-1::0;;;;;36051:35:0::1;:15;:35;36047:48;;36088:7;;;36047:48;36107:16;36152:6;:16;;;-1:-1:-1::0;;;;;36134:34:0::1;:15;:34;;;;:::i;:::-;36107:62:::0;-1:-1:-1;36203:15:0::1;36186:6;:13;;;:32;;;;;;;;:::i;:::-;;:57;;;;-1:-1:-1::0;36222:9:0::1;::::0;;;:5:::1;:9;::::0;;;;:15;-1:-1:-1;;;36222:15:0;::::1;;;36241:2;36222:21;36186:57;36182:193;;;36258:5;::::0;36287:12;;-1:-1:-1;;;;;36258:5:0;;::::1;::::0;:10:::1;::::0;36318:42:::1;36333:8:::0;36343:2;36287:12;36318:14:::1;:42::i;:::-;36258:117;::::0;-1:-1:-1;;;;;;36258:117:0::1;::::0;;;;;;-1:-1:-1;;;;;16067:32:1;;;36258:117:0::1;::::0;::::1;16049:51:1::0;16116:18;;;16109:34;16022:18;;36258:117:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36182:193;-1:-1:-1::0;;36388:14:0::1;::::0;;;:10:::1;:14;::::0;;;;:50;;-1:-1:-1;;;;36388:50:0::1;-1:-1:-1::0;;;36422:15:0::1;-1:-1:-1::0;;;;;36388:50:0::1;;;::::0;;25802:1:::1;25931:3:::0;25936:14;25952:12;;25914:51;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;25914:51:0;;;;;;;;;25904:62;;25914:51;25904:62;;;;25889:12;:77;-1:-1:-1;;;35938:508:0:o;33031:562::-;33129:16;;;;:12;:16;;;;;33148:12;33129:31;;33187:7;:5;:7::i;:::-;33171:23;-1:-1:-1;33225:17:0;33211:10;:31;;;;;;;;:::i;:::-;;33207:332;;;33323:11;:18;33283:30;;;;;;;;;;;;-1:-1:-1;;;33283:30:0;;;;;;33294:5;;33310:2;33283:10;:30::i;:::-;33277:65;;;;:::i;:::-;33259:9;;;;:5;:9;;;;;:83;;;;;;;;;-1:-1:-1;;33259:83:0;;;;;;;;;33207:332;;;33378:17;33364:10;:31;;;;;;;;:::i;:::-;;33360:179;;;33412:16;33438:30;33449:5;33438:30;;;;;;;;;;;;;-1:-1:-1;;;33438:30:0;;;33465:2;33438:10;:30::i;:::-;33412:57;;33502:25;33514:9;33525:1;33502:11;:25::i;:::-;33484:9;;;;:5;:9;;;;;:43;;;;;;;;;-1:-1:-1;;33484:43:0;;;;;;;;;-1:-1:-1;33360:179:0;33549:18;:30;33568:10;33549:30;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;33549:30:0;;;:34;;;;;;;;:36;;;;;;:::i;:::-;;;;;;33118:475;33031:562;;:::o;40315:1716::-;40435:7;40479:9;;;:5;:9;;;;;;;;40460:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40460:28:0;;;;;;;-1:-1:-1;;;40460:28:0;;;;;;;;;40435:7;40515;:5;:7::i;:::-;40499:23;-1:-1:-1;40535:19:0;40580:6;40558:18;:8;40569:7;40558:18;:::i;:::-;40557:29;;;;:::i;:::-;40535:51;;40601:4;:10;;;:15;;40615:1;40601:15;40597:1388;;;40644:15;40669:33;40680:5;40669:33;;;;;;;;;;;;;-1:-1:-1;;;40669:33:0;;;40699:2;40669:10;:33::i;:::-;40644:59;-1:-1:-1;16857:22:0;16876:3;16857:16;:22;:::i;:::-;16856:29;;16883:2;16856:29;:::i;:::-;40733:10;;40722:8;:21;;;40718:57;;;40772:3;40752:17;:11;40766:3;40752:17;:::i;:::-;:23;;;;:::i;:::-;40745:30;;;;;;;;40718:57;40810:33;40821:5;40810:33;;;;;;;;;;;;;-1:-1:-1;;;40810:33:0;;;40840:2;40810:10;:33::i;:::-;40792:52;-1:-1:-1;16857:22:0;16876:3;16857:16;:22;:::i;:::-;16856:29;;16883:2;16856:29;:::i;:::-;40874:10;;40863:8;:21;;;40859:56;;;40912:3;40893:16;:11;40907:2;40893:16;:::i;40859:56::-;-1:-1:-1;40937:11:0;-1:-1:-1;40930:18:0;;-1:-1:-1;;40930:18:0;40597:1388;40969:4;:10;;;:15;;40983:1;40969:15;40966:1019;;;41010:15;41035:30;41046:5;41035:30;;;;;;;;;;;;;-1:-1:-1;;;41035:30:0;;;41062:2;41035:10;:30::i;:::-;41010:56;-1:-1:-1;16791:22:0;16810:3;16791:16;:22;:::i;:::-;16790:29;;16817:2;16790:29;:::i;:::-;41096:6;;41085:8;:17;;;41081:45;;;41111:15;:11;41125:1;41111:15;:::i;40966:1019::-;41180:4;:10;;;:15;;41194:1;41180:15;41177:808;;;41220:15;41245:29;41256:5;41245:29;;;;;;;;;;;;;-1:-1:-1;;;41245:29:0;;;41271:2;41245:10;:29::i;:::-;41220:55;-1:-1:-1;16921:22:0;16940:3;16921:16;:22;:::i;:::-;16920:29;;16947:2;16920:29;:::i;:::-;41305:8;;41294;:19;;;41290:52;;;41340:2;41322:15;:11;41336:1;41322:15;:::i;41290:52::-;41364:15;:11;41378:1;41364:15;:::i;41177:808::-;41400:4;:10;;;:15;;41414:1;41400:15;41397:588;;;41469:3;41449:17;:11;41463:3;41449:17;:::i;:::-;:23;;;;:::i;:::-;41442:30;;;;;;;41397:588;41493:4;:10;;;:15;;41507:1;41493:15;41490:495;;;41542:11;-1:-1:-1;41535:18:0;;-1:-1:-1;;41535:18:0;41490:495;41574:4;:10;;;:15;;41588:1;41574:15;41571:414;;;-1:-1:-1;;;;;41632:17:0;;41614:15;41632:17;;;:9;:17;;;;;;;41696:2;41686:12;;:27;;41706:7;41686:27;;;41701:2;41686:27;41680:34;;:2;:34;:::i;:::-;41664:50;-1:-1:-1;41758:2:0;41736:19;41664:50;41736:11;:19;:::i;:::-;:24;;;;:::i;:::-;41729:31;;;;;;;;;41571:414;41781:4;:10;;;:15;;41795:1;41781:15;41778:207;;;41866:2;41852:9;41860:1;41852:5;:9;:::i;:::-;41847:15;;:1;:15;:::i;:::-;41832:31;;:11;:31;:::i;41778:207::-;41889:4;:10;;;:15;;41903:1;41889:15;41886:99;;;41972:1;41958:4;:10;;;41954:1;:14;;;;:::i;:::-;41939:30;;;;:11;:30;:::i;41886:99::-;42012:11;40315:1716;-1:-1:-1;;;;;;40315:1716:0:o;45822:250::-;45875:7;45951:9;45985:16;46000:1;45985:12;:16;:::i;:::-;45920:142;;13680:2:1;13676:15;;;;-1:-1:-1;;;;;;13672:53:1;45920:142:0;;;13660:66:1;45975:27:0;13742:12:1;;;13735:28;46017:15:0;13779:12:1;;;13772:28;13816:12;;;13809:28;;;13853:13;;45920:142:0;;;-1:-1:-1;;45920:142:0;;;;;;;;;45910:153;;45920:142;45910:153;;;;;45822:250;-1:-1:-1;;45822:250:0:o;42333:537::-;42400:13;;:::i;:::-;42430:18;42443:4;42430:12;:18::i;:::-;42459:14;;;;:5;:14;;;;;;;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42459:18:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42459:18:0;;;;;;;;;-1:-1:-1;;42459:18:0;;;;;;;;;;;;;;;;;-1:-1:-1;;42459:18:0;;;;;;;;;-1:-1:-1;;42459:18:0;;;;;;;;;;;-1:-1:-1;;42459:18:0;-1:-1:-1;;;42459:18:0;;;;;-1:-1:-1;;;;42459:18:0;;;;;-1:-1:-1;;;42459:18:0;;;;;;;;;;;;-1:-1:-1;42459:18:0;;42333:537;-1:-1:-1;42333:537:0:o;9611:436::-;9712:1;9684:16;;;:7;:16;;;;;;-1:-1:-1;;;;;9684:16:0;:30;9676:57;;;;-1:-1:-1;;;9676:57:0;;24089:2:1;9676:57:0;;;24071:21:1;24128:2;24108:18;;;24101:30;-1:-1:-1;;;24147:18:1;;;24140:44;24201:18;;9676:57:0;23887:338:1;9676:57:0;9746:11;:13;;;:11;:13;;;:::i;:::-;;;;-1:-1:-1;;;;;;;9903:13:0;;;;;;:9;:13;;;;;;;;:15;;;;;;9950:16;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9950:21:0;;;;;10005:33;9958:7;;9903:13;;10005:33;;9903:13;;10005:33;9611:436;;:::o;45239:390::-;45279:7;45420:9;45466:16;45481:1;45466:12;:16;:::i;:::-;45552:12;;45377:210;;13680:2:1;13676:15;;;;-1:-1:-1;;;;;;13672:53:1;45377:210:0;;;13660:66:1;45456:27:0;;13742:12:1;;;13735:28;45510:15:0;13779:12:1;;;13772:28;13816:12;;;13809:28;13853:13;;45377:210:0;;;;;;;;;;;;45345:261;;;;;;45319:302;;45299:322;;45239:390;:::o;45023:208::-;45148:7;45204:4;45210:3;45215:5;45193:28;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;45193:28:0;;;;;;;;;45183:39;;45193:28;45183:39;;;;;45023:208;-1:-1:-1;;;;45023:208:0:o;43297:271::-;43371:5;43389:11;43423:8;43432:9;43423:19;;;;;;;;;:::i;:::-;;:26;43403:47;;43409:4;43403:47;:::i;:::-;43389:61;;43477:8;43486:9;43477:19;;;;;;;;;:::i;:::-;;43497:5;43477:26;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;43473:1;43465:9;;;;;;:38;43461:56;;;43512:5;-1:-1:-1;43505:12:0;;43461:56;43535:7;43543:9;43535:18;;;;;;;;;:::i;:::-;;43554:5;43535:25;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;43528:32;;;43297:271;;;;:::o;43794:650::-;43853:13;;:::i;:::-;43892:37;43911:4;43918:6;43911:13;43927:1;43892:11;:37::i;:::-;43883:46;;;;43949:2;43940:11;;;;;43972:37;43998:6;43991:13;;44007:1;43972:11;:37::i;:::-;43962:47;;:7;;;:47;44029:2;44020:11;;;;;44052:37;44078:6;44071:13;;44087:1;44052:11;:37::i;:::-;44042:47;;:7;;;:47;44109:2;44100:11;;;;;44132:37;44158:6;44151:13;;44167:1;44132:11;:37::i;:::-;44122:47;;:7;;;:47;44189:2;44180:11;;;;;44212:37;44238:6;44231:13;;44247:1;44212:11;:37::i;:::-;44202:47;;:7;;;:47;44269:2;44260:11;;;;;44294:37;44320:6;44313:13;;44329:1;44294:11;:37::i;:::-;44282:49;;:9;;;:49;44351:2;44342:11;;;;;44377:37;44403:6;44396:13;;44412:1;44377:11;:37::i;:::-;44364:50;;:10;;;:50;44435:1;44425:7;;;:11;44364:1;43794:650;-1:-1:-1;43794:650:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:366:1;76:8;86:6;140:3;133:4;125:6;121:17;117:27;107:55;;158:1;155;148:12;107:55;-1:-1:-1;181:20:1;;224:18;213:30;;210:50;;;256:1;253;246:12;210:50;293:4;285:6;281:17;269:29;;353:3;346:4;336:6;333:1;329:14;321:6;317:27;313:38;310:47;307:67;;;370:1;367;360:12;307:67;14:366;;;;;:::o;385:159::-;452:20;;512:6;501:18;;491:29;;481:57;;534:1;531;524:12;481:57;385:159;;;:::o;549:156::-;615:20;;675:4;664:16;;654:27;;644:55;;695:1;692;685:12;710:247;769:6;822:2;810:9;801:7;797:23;793:32;790:52;;;838:1;835;828:12;790:52;877:9;864:23;896:31;921:5;896:31;:::i;962:251::-;1032:6;1085:2;1073:9;1064:7;1060:23;1056:32;1053:52;;;1101:1;1098;1091:12;1053:52;1133:9;1127:16;1152:31;1177:5;1152:31;:::i;1218:388::-;1286:6;1294;1347:2;1335:9;1326:7;1322:23;1318:32;1315:52;;;1363:1;1360;1353:12;1315:52;1402:9;1389:23;1421:31;1446:5;1421:31;:::i;:::-;1471:5;-1:-1:-1;1528:2:1;1513:18;;1500:32;1541:33;1500:32;1541:33;:::i;:::-;1593:7;1583:17;;;1218:388;;;;;:::o;1611:671::-;1697:6;1705;1713;1721;1774:3;1762:9;1753:7;1749:23;1745:33;1742:53;;;1791:1;1788;1781:12;1742:53;1830:9;1817:23;1849:31;1874:5;1849:31;:::i;:::-;1899:5;-1:-1:-1;1956:2:1;1941:18;;1928:32;1969:33;1928:32;1969:33;:::i;:::-;2021:7;-1:-1:-1;2080:2:1;2065:18;;2052:32;2093:33;2052:32;2093:33;:::i;:::-;2145:7;-1:-1:-1;2204:2:1;2189:18;;2176:32;2217:33;2176:32;2217:33;:::i;:::-;1611:671;;;;-1:-1:-1;1611:671:1;;-1:-1:-1;;1611:671:1:o;2287:456::-;2364:6;2372;2380;2433:2;2421:9;2412:7;2408:23;2404:32;2401:52;;;2449:1;2446;2439:12;2401:52;2488:9;2475:23;2507:31;2532:5;2507:31;:::i;:::-;2557:5;-1:-1:-1;2614:2:1;2599:18;;2586:32;2627:33;2586:32;2627:33;:::i;:::-;2287:456;;2679:7;;-1:-1:-1;;;2733:2:1;2718:18;;;;2705:32;;2287:456::o;2748:1016::-;2843:6;2851;2859;2867;2920:3;2908:9;2899:7;2895:23;2891:33;2888:53;;;2937:1;2934;2927:12;2888:53;2976:9;2963:23;2995:31;3020:5;2995:31;:::i;:::-;3045:5;-1:-1:-1;3102:2:1;3087:18;;3074:32;3115:33;3074:32;3115:33;:::i;:::-;3167:7;-1:-1:-1;3221:2:1;3206:18;;3193:32;;-1:-1:-1;3276:2:1;3261:18;;3248:32;3303:18;3292:30;;3289:50;;;3335:1;3332;3325:12;3289:50;3358:22;;3411:4;3403:13;;3399:27;-1:-1:-1;3389:55:1;;3440:1;3437;3430:12;3389:55;3476:2;3463:16;3501:48;3517:31;3545:2;3517:31;:::i;:::-;3501:48;:::i;:::-;3572:2;3565:5;3558:17;3612:7;3607:2;3602;3598;3594:11;3590:20;3587:33;3584:53;;;3633:1;3630;3623:12;3584:53;3688:2;3683;3679;3675:11;3670:2;3663:5;3659:14;3646:45;3732:1;3727:2;3722;3715:5;3711:14;3707:23;3700:34;3753:5;3743:15;;;;;2748:1016;;;;;;;:::o;3769:571::-;3864:6;3872;3880;3933:2;3921:9;3912:7;3908:23;3904:32;3901:52;;;3949:1;3946;3939:12;3901:52;3988:9;3975:23;4007:31;4032:5;4007:31;:::i;:::-;4057:5;-1:-1:-1;4113:2:1;4098:18;;4085:32;4140:18;4129:30;;4126:50;;;4172:1;4169;4162:12;4126:50;4211:69;4272:7;4263:6;4252:9;4248:22;4211:69;:::i;:::-;3769:571;;4299:8;;-1:-1:-1;4185:95:1;;-1:-1:-1;;;;3769:571:1:o;4345:382::-;4410:6;4418;4471:2;4459:9;4450:7;4446:23;4442:32;4439:52;;;4487:1;4484;4477:12;4439:52;4526:9;4513:23;4545:31;4570:5;4545:31;:::i;:::-;4595:5;-1:-1:-1;4652:2:1;4637:18;;4624:32;4665:30;4624:32;4665:30;:::i;4732:315::-;4800:6;4808;4861:2;4849:9;4840:7;4836:23;4832:32;4829:52;;;4877:1;4874;4867:12;4829:52;4916:9;4903:23;4935:31;4960:5;4935:31;:::i;:::-;4985:5;5037:2;5022:18;;;;5009:32;;-1:-1:-1;;;4732:315:1:o;5052:570::-;5146:6;5154;5162;5215:2;5203:9;5194:7;5190:23;5186:32;5183:52;;;5231:1;5228;5221:12;5183:52;5271:9;5258:23;5304:18;5296:6;5293:30;5290:50;;;5336:1;5333;5326:12;5290:50;5375:69;5436:7;5427:6;5416:9;5412:22;5375:69;:::i;:::-;5463:8;;-1:-1:-1;5349:95:1;-1:-1:-1;;5548:2:1;5533:18;;5520:32;5561:31;5520:32;5561:31;:::i;:::-;5611:5;5601:15;;;5052:570;;;;;:::o;5627:436::-;5713:6;5721;5774:2;5762:9;5753:7;5749:23;5745:32;5742:52;;;5790:1;5787;5780:12;5742:52;5830:9;5817:23;5863:18;5855:6;5852:30;5849:50;;;5895:1;5892;5885:12;5849:50;5934:69;5995:7;5986:6;5975:9;5971:22;5934:69;:::i;:::-;6022:8;;5908:95;;-1:-1:-1;5627:436:1;-1:-1:-1;;;;5627:436:1:o;6068:588::-;6175:6;6183;6191;6244:2;6232:9;6223:7;6219:23;6215:32;6212:52;;;6260:1;6257;6250:12;6212:52;6300:9;6287:23;6333:18;6325:6;6322:30;6319:50;;;6365:1;6362;6355:12;6319:50;6404:69;6465:7;6456:6;6445:9;6441:22;6404:69;:::i;:::-;6492:8;;-1:-1:-1;6378:95:1;-1:-1:-1;;6577:2:1;6562:18;;6549:32;6590:36;6549:32;6590:36;:::i;6661:241::-;6717:6;6770:2;6758:9;6749:7;6745:23;6741:32;6738:52;;;6786:1;6783;6776:12;6738:52;6825:9;6812:23;6844:28;6866:5;6844:28;:::i;6907:245::-;6974:6;7027:2;7015:9;7006:7;7002:23;6998:32;6995:52;;;7043:1;7040;7033:12;6995:52;7075:9;7069:16;7094:28;7116:5;7094:28;:::i;7157:245::-;7215:6;7268:2;7256:9;7247:7;7243:23;7239:32;7236:52;;;7284:1;7281;7274:12;7236:52;7323:9;7310:23;7342:30;7366:5;7342:30;:::i;7407:249::-;7476:6;7529:2;7517:9;7508:7;7504:23;7500:32;7497:52;;;7545:1;7542;7535:12;7497:52;7577:9;7571:16;7596:30;7620:5;7596:30;:::i;7661:336::-;7745:6;7753;7806:2;7794:9;7785:7;7781:23;7777:32;7774:52;;;7822:1;7819;7812:12;7774:52;7861:9;7848:23;7880:36;7910:5;7880:36;:::i;8002:635::-;8082:6;8135:2;8123:9;8114:7;8110:23;8106:32;8103:52;;;8151:1;8148;8141:12;8103:52;8184:9;8178:16;8217:18;8209:6;8206:30;8203:50;;;8249:1;8246;8239:12;8203:50;8272:22;;8325:4;8317:13;;8313:27;-1:-1:-1;8303:55:1;;8354:1;8351;8344:12;8303:55;8383:2;8377:9;8408:48;8424:31;8452:2;8424:31;:::i;8408:48::-;8479:2;8472:5;8465:17;8519:7;8514:2;8509;8505;8501:11;8497:20;8494:33;8491:53;;;8540:1;8537;8530:12;8491:53;8553:54;8604:2;8599;8592:5;8588:14;8583:2;8579;8575:11;8553:54;:::i;:::-;8626:5;8002:635;-1:-1:-1;;;;;8002:635:1:o;8642:256::-;8708:6;8716;8769:2;8757:9;8748:7;8744:23;8740:32;8737:52;;;8785:1;8782;8775:12;8737:52;8808:28;8826:9;8808:28;:::i;:::-;8798:38;;8855:37;8888:2;8877:9;8873:18;8855:37;:::i;:::-;8845:47;;8642:256;;;;;:::o;8903:180::-;8962:6;9015:2;9003:9;8994:7;8990:23;8986:32;8983:52;;;9031:1;9028;9021:12;8983:52;-1:-1:-1;9054:23:1;;8903:180;-1:-1:-1;8903:180:1:o;9088:184::-;9158:6;9211:2;9199:9;9190:7;9186:23;9182:32;9179:52;;;9227:1;9224;9217:12;9179:52;-1:-1:-1;9250:16:1;;9088:184;-1:-1:-1;9088:184:1:o;9277:315::-;9345:6;9353;9406:2;9394:9;9385:7;9381:23;9377:32;9374:52;;;9422:1;9419;9412:12;9374:52;9458:9;9445:23;9435:33;;9518:2;9507:9;9503:18;9490:32;9531:31;9556:5;9531:31;:::i;9597:332::-;9677:6;9685;9738:2;9726:9;9717:7;9713:23;9709:32;9706:52;;;9754:1;9751;9744:12;9706:52;9790:9;9777:23;9767:33;;9850:2;9839:9;9835:18;9822:32;9863:36;9893:5;9863:36;:::i;10275:252::-;10342:6;10350;10403:2;10391:9;10382:7;10378:23;10374:32;10371:52;;;10419:1;10416;10409:12;10371:52;10455:9;10442:23;10432:33;;10484:37;10517:2;10506:9;10502:18;10484:37;:::i;10532:248::-;10600:6;10608;10661:2;10649:9;10640:7;10636:23;10632:32;10629:52;;;10677:1;10674;10667:12;10629:52;-1:-1:-1;;10700:23:1;;;10770:2;10755:18;;;10742:32;;-1:-1:-1;10532:248:1:o;10785:572::-;10889:6;10897;10905;10913;10966:2;10954:9;10945:7;10941:23;10937:32;10934:52;;;10982:1;10979;10972:12;10934:52;11018:9;11005:23;10995:33;;11075:2;11064:9;11060:18;11047:32;11037:42;;11130:2;11119:9;11115:18;11102:32;11157:18;11149:6;11146:30;11143:50;;;11189:1;11186;11179:12;11143:50;11228:69;11289:7;11280:6;11269:9;11265:22;11228:69;:::i;:::-;10785:572;;;;-1:-1:-1;11316:8:1;-1:-1:-1;;;;10785:572:1:o;11362:250::-;11428:6;11436;11489:2;11477:9;11468:7;11464:23;11460:32;11457:52;;;11505:1;11502;11495:12;11457:52;11541:9;11528:23;11518:33;;11570:36;11602:2;11591:9;11587:18;11570:36;:::i;11617:969::-;11756:6;11764;11772;11780;11788;11796;11804;11812;11820;11828;11836:7;11845;11899:3;11887:9;11878:7;11874:23;11870:33;11867:53;;;11916:1;11913;11906:12;11867:53;11952:9;11939:23;11929:33;;11981:36;12013:2;12002:9;11998:18;11981:36;:::i;:::-;11971:46;;12036:36;12068:2;12057:9;12053:18;12036:36;:::i;:::-;12026:46;;12091:36;12123:2;12112:9;12108:18;12091:36;:::i;:::-;12081:46;;12146:37;12178:3;12167:9;12163:19;12146:37;:::i;:::-;12136:47;;12202:37;12234:3;12223:9;12219:19;12202:37;:::i;:::-;12192:47;;12258:37;12290:3;12279:9;12275:19;12258:37;:::i;:::-;12248:47;;12314:37;12346:3;12335:9;12331:19;12314:37;:::i;:::-;12304:47;;12370:38;12403:3;12392:9;12388:19;12370:38;:::i;:::-;12360:48;;12427:38;12460:3;12449:9;12445:19;12427:38;:::i;:::-;12417:48;;12485:38;12518:3;12507:9;12503:19;12485:38;:::i;:::-;12474:49;;12543:37;12575:3;12564:9;12560:19;12543:37;:::i;:::-;12532:48;;11617:969;;;;;;;;;;;;;;:::o;12591:257::-;12632:3;12670:5;12664:12;12697:6;12692:3;12685:19;12713:63;12769:6;12762:4;12757:3;12753:14;12746:4;12739:5;12735:16;12713:63;:::i;:::-;12830:2;12809:15;-1:-1:-1;;12805:29:1;12796:39;;;;12837:4;12792:50;;12591:257;-1:-1:-1;;12591:257:1:o;13028:414::-;-1:-1:-1;;;;;;13299:2:1;13295:15;;;13291:24;;13279:37;;13350:15;;;;13346:24;;;13341:2;13332:12;;13325:46;13396:2;13387:12;;13380:28;13433:2;13424:12;;13028:414::o;14307:274::-;14436:3;14474:6;14468:13;14490:53;14536:6;14531:3;14524:4;14516:6;14512:17;14490:53;:::i;:::-;14559:16;;;;;14307:274;-1:-1:-1;;14307:274:1:o;14794:488::-;-1:-1:-1;;;;;15063:15:1;;;15045:34;;15115:15;;15110:2;15095:18;;15088:43;15162:2;15147:18;;15140:34;;;15210:3;15205:2;15190:18;;15183:31;;;14988:4;;15231:45;;15256:19;;15248:6;15231:45;:::i;15287:583::-;-1:-1:-1;;;;;15504:32:1;;15486:51;;15573:2;15568;15553:18;;15546:30;;;15592:18;;15585:34;;;-1:-1:-1;;;;;;15631:31:1;;15628:51;;;15675:1;15672;15665:12;15628:51;15709:6;15706:1;15702:14;15766:6;15758;15753:2;15742:9;15738:18;15725:48;15843:1;15796:22;;15820:2;15792:31;15832:13;;;-1:-1:-1;15792:31:1;15287:583;-1:-1:-1;;;15287:583:1:o;16891:537::-;-1:-1:-1;;;;;17119:32:1;;17101:51;;-1:-1:-1;;;;;17188:37:1;;17183:2;17168:18;;17161:65;17089:2;17074:18;;17256:1;17245:13;;17235:144;;17301:10;17296:3;17292:20;17289:1;17282:31;17336:4;17333:1;17326:15;17364:4;17361:1;17354:15;17235:144;17415:6;17410:2;17399:9;17395:18;17388:34;16891:537;;;;;;:::o;18069:219::-;18218:2;18207:9;18200:21;18181:4;18238:44;18278:2;18267:9;18263:18;18255:6;18238:44;:::i;18639:337::-;18841:2;18823:21;;;18880:2;18860:18;;;18853:30;-1:-1:-1;;;18914:2:1;18899:18;;18892:43;18967:2;18952:18;;18639:337::o;20010:347::-;20212:2;20194:21;;;20251:2;20231:18;;;20224:30;20290:25;20285:2;20270:18;;20263:53;20348:2;20333:18;;20010:347::o;21746:342::-;21948:2;21930:21;;;21987:2;21967:18;;;21960:30;-1:-1:-1;;;22021:2:1;22006:18;;21999:48;22079:2;22064:18;;21746:342::o;24567:1483::-;24777:13;;13015:4;13004:16;12992:29;;24747:3;24732:19;;24849:4;24841:6;24837:17;24831:24;24864:52;24910:4;24899:9;24895:20;24881:12;13015:4;13004:16;12992:29;;12948:75;24864:52;;24965:4;24957:6;24953:17;24947:24;24980:54;25028:4;25017:9;25013:20;24997:14;13015:4;13004:16;12992:29;;12948:75;24980:54;;25083:4;25075:6;25071:17;25065:24;25098:54;25146:4;25135:9;25131:20;25115:14;13015:4;13004:16;12992:29;;12948:75;25098:54;;25201:4;25193:6;25189:17;25183:24;25216:54;25264:4;25253:9;25249:20;25233:14;13015:4;13004:16;12992:29;;12948:75;25216:54;;25319:4;25311:6;25307:17;25301:24;25334:54;25382:4;25371:9;25367:20;25351:14;13015:4;13004:16;12992:29;;12948:75;25334:54;;25437:4;25429:6;25425:17;25419:24;25452:54;25500:4;25489:9;25485:20;25469:14;13015:4;13004:16;12992:29;;12948:75;25452:54;;25555:4;25547:6;25543:17;25537:24;25570:55;25619:4;25608:9;25604:20;25588:14;12929:6;12918:18;12906:31;;12853:90;25570:55;-1:-1:-1;25644:6:1;25687:15;;;25681:22;12929:6;12918:18;;;25746;;;12906:31;;;;25784:6;25827:15;;;25821:22;12918:18;;;25886;;;12906:31;25924:6;25967:15;;;25961:22;13015:4;13004:16;26025:18;;;;12992:29;;;;24567:1483;:::o;26430:361::-;26635:6;26624:9;26617:25;26678:2;26673;26662:9;26658:18;26651:30;26598:4;26698:44;26738:2;26727:9;26723:18;26715:6;26698:44;:::i;:::-;26690:52;;26778:6;26773:2;26762:9;26758:18;26751:34;26430:361;;;;;;:::o;26985:275::-;27056:2;27050:9;27121:2;27102:13;;-1:-1:-1;;27098:27:1;27086:40;;27156:18;27141:34;;27177:22;;;27138:62;27135:88;;;27203:18;;:::i;:::-;27239:2;27232:22;26985:275;;-1:-1:-1;26985:275:1:o;27265:186::-;27313:4;27346:18;27338:6;27335:30;27332:56;;;27368:18;;:::i;:::-;-1:-1:-1;27434:2:1;27413:15;-1:-1:-1;;27409:29:1;27440:4;27405:40;;27265:186::o;27456:224::-;27495:3;27523:6;27556:2;27553:1;27549:10;27586:2;27583:1;27579:10;27617:3;27613:2;27609:12;27604:3;27601:21;27598:47;;;27625:18;;:::i;:::-;27661:13;;27456:224;-1:-1:-1;;;;27456:224:1:o;27685:128::-;27725:3;27756:1;27752:6;27749:1;27746:13;27743:39;;;27762:18;;:::i;:::-;-1:-1:-1;27798:9:1;;27685:128::o;27818:187::-;27857:1;27883:6;27916:2;27913:1;27909:10;27938:3;27928:37;;27945:18;;:::i;:::-;27983:10;;27979:20;;;;;27818:187;-1:-1:-1;;27818:187:1:o;28010:120::-;28050:1;28076;28066:35;;28081:18;;:::i;:::-;-1:-1:-1;28115:9:1;;28010:120::o;28135:258::-;28174:7;28206:6;28239:2;28236:1;28232:10;28269:2;28266:1;28262:10;28325:3;28321:2;28317:12;28312:3;28309:21;28302:3;28295:11;28288:19;28284:47;28281:73;;;28334:18;;:::i;:::-;28374:13;;28135:258;-1:-1:-1;;;;28135:258:1:o;28398:168::-;28438:7;28504:1;28500;28496:6;28492:14;28489:1;28486:21;28481:1;28474:9;28467:17;28463:45;28460:71;;;28511:18;;:::i;:::-;-1:-1:-1;28551:9:1;;28398:168::o;28571:125::-;28611:4;28639:1;28636;28633:8;28630:34;;;28644:18;;:::i;:::-;-1:-1:-1;28681:9:1;;28571:125::o;28701:258::-;28773:1;28783:113;28797:6;28794:1;28791:13;28783:113;;;28873:11;;;28867:18;28854:11;;;28847:39;28819:2;28812:10;28783:113;;;28914:6;28911:1;28908:13;28905:48;;;-1:-1:-1;;28949:1:1;28931:16;;28924:27;28701:258::o;28964:136::-;29003:3;29031:5;29021:39;;29040:18;;:::i;:::-;-1:-1:-1;;;29076:18:1;;28964:136::o;29105:197::-;29143:3;29171:6;29212:2;29205:5;29201:14;29239:2;29230:7;29227:15;29224:41;;;29245:18;;:::i;:::-;29294:1;29281:15;;29105:197;-1:-1:-1;;;29105:197:1:o;29307:135::-;29346:3;-1:-1:-1;;29367:17:1;;29364:43;;;29387:18;;:::i;:::-;-1:-1:-1;29434:1:1;29423:13;;29307:135::o;29447:112::-;29479:1;29505;29495:35;;29510:18;;:::i;:::-;-1:-1:-1;29544:9:1;;29447:112::o;29564:157::-;29594:1;29628:4;29625:1;29621:12;29652:3;29642:37;;29659:18;;:::i;:::-;29711:3;29704:4;29701:1;29697:12;29693:22;29688:27;;;29564:157;;;;:::o;29726:127::-;29787:10;29782:3;29778:20;29775:1;29768:31;29818:4;29815:1;29808:15;29842:4;29839:1;29832:15;29858:127;29919:10;29914:3;29910:20;29907:1;29900:31;29950:4;29947:1;29940:15;29974:4;29971:1;29964:15;29990:127;30051:10;30046:3;30042:20;30039:1;30032:31;30082:4;30079:1;30072:15;30106:4;30103:1;30096:15;30122:127;30183:10;30178:3;30174:20;30171:1;30164:31;30214:4;30211:1;30204:15;30238:4;30235:1;30228:15;30254:127;30315:10;30310:3;30306:20;30303:1;30296:31;30346:4;30343:1;30336:15;30370:4;30367:1;30360:15;30386:131;-1:-1:-1;;;;;30461:31:1;;30451:42;;30441:70;;30507:1;30504;30497:12;30522:118;30608:5;30601:13;30594:21;30587:5;30584:32;30574:60;;30630:1;30627;30620:12;30645:131;-1:-1:-1;;;;;;30719:32:1;;30709:43;;30699:71;;30766:1;30763;30756:12;30781:106;30861:1;30854:5;30851:12;30841:40;;30877:1;30874;30867:12
Swarm Source
ipfs://161fd5ed520acdcbab9955034cd43b5bc93e0d7fadb24d770e0129aed9df08f7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.