[ { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "getHashData", "outputs": [ { "components": [ { "internalType": "string", "name": "id", "type": "string" }, { "internalType": "string", "name": "country", "type": "string" }, { "internalType": "string", "name": "state", "type": "string" }, { "internalType": "string", "name": "ecorregion", "type": "string" }, { "internalType": "int256", "name": "latitude", "type": "int256" }, { "internalType": "int256", "name": "longitude", "type": "int256" }, { "internalType": "string", "name": "date", "type": "string" }, { "internalType": "int256", "name": "temperature", "type": "int256" }, { "internalType": "string", "name": "camera", "type": "string" }, { "internalType": "uint256", "name": "resolution", "type": "uint256" }, { "internalType": "string", "name": "ppp", "type": "string" }, { "internalType": "string", "name": "species", "type": "string" } ], "internalType": "struct Proyungas.Metadata", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "idToMetadata", "outputs": [ { "internalType": "string", "name": "id", "type": "string" }, { "internalType": "string", "name": "country", "type": "string" }, { "internalType": "string", "name": "state", "type": "string" }, { "internalType": "string", "name": "ecorregion", "type": "string" }, { "internalType": "int256", "name": "latitude", "type": "int256" }, { "internalType": "int256", "name": "longitude", "type": "int256" }, { "internalType": "string", "name": "date", "type": "string" }, { "internalType": "int256", "name": "temperature", "type": "int256" }, { "internalType": "string", "name": "camera", "type": "string" }, { "internalType": "uint256", "name": "resolution", "type": "uint256" }, { "internalType": "string", "name": "ppp", "type": "string" }, { "internalType": "string", "name": "species", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" }, { "components": [ { "internalType": "string", "name": "id", "type": "string" }, { "internalType": "string", "name": "country", "type": "string" }, { "internalType": "string", "name": "state", "type": "string" }, { "internalType": "string", "name": "ecorregion", "type": "string" }, { "internalType": "int256", "name": "latitude", "type": "int256" }, { "internalType": "int256", "name": "longitude", "type": "int256" }, { "internalType": "string", "name": "date", "type": "string" }, { "internalType": "int256", "name": "temperature", "type": "int256" }, { "internalType": "string", "name": "camera", "type": "string" }, { "internalType": "uint256", "name": "resolution", "type": "uint256" }, { "internalType": "string", "name": "ppp", "type": "string" }, { "internalType": "string", "name": "species", "type": "string" } ], "internalType": "struct Proyungas.Metadata", "name": "metadata", "type": "tuple" } ], "name": "safeMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162003dc938038062003dc9833981810160405281019062000037919062000288565b806040518060400160405280600981526020017f50726f79756e67617300000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f50595300000000000000000000000000000000000000000000000000000000008152508160009081620000b5919062000534565b508060019081620000c7919062000534565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200013f5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200013691906200062c565b60405180910390fd5b62000150816200015860201b60201c565b505062000649565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002508262000223565b9050919050565b620002628162000243565b81146200026e57600080fd5b50565b600081519050620002828162000257565b92915050565b600060208284031215620002a157620002a06200021e565b5b6000620002b18482850162000271565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033c57607f821691505b602082108103620003525762000351620002f4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003bc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200037d565b620003c886836200037d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004156200040f6200040984620003e0565b620003ea565b620003e0565b9050919050565b6000819050919050565b6200043183620003f4565b6200044962000440826200041c565b8484546200038a565b825550505050565b600090565b6200046062000451565b6200046d81848462000426565b505050565b5b8181101562000495576200048960008262000456565b60018101905062000473565b5050565b601f821115620004e457620004ae8162000358565b620004b9846200036d565b81016020851015620004c9578190505b620004e1620004d8856200036d565b83018262000472565b50505b505050565b600082821c905092915050565b60006200050960001984600802620004e9565b1980831691505092915050565b6000620005248383620004f6565b9150826002028217905092915050565b6200053f82620002ba565b67ffffffffffffffff8111156200055b576200055a620002c5565b5b62000567825462000323565b6200057482828562000499565b600060209050601f831160018114620005ac576000841562000597578287015190505b620005a3858262000516565b86555062000613565b601f198416620005bc8662000358565b60005b82811015620005e657848901518255600182019150602085019450602081019050620005bf565b8683101562000606578489015162000602601f891682620004f6565b8355505b6001600288020188555050505b505050505050565b620006268162000243565b82525050565b60006020820190506200064360008301846200061b565b92915050565b61377080620006596000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638da5cb5b116100ad578063b88d4fde11610071578063b88d4fde1461032f578063c87b56dd1461034b578063e985e9c51461037b578063f2fde38b146103ab578063f307101a146103c75761012c565b80638da5cb5b1461028b57806395d89b41146102a9578063a22cb465146102c7578063a61e81c7146102e3578063aceaf4a0146102ff5761012c565b8063313ce567116100f4578063313ce567146101e757806342842e0e146102055780636352211e1461022157806370a0823114610251578063715018a6146102815761012c565b806301ffc9a71461013157806306fdde0314610161578063081812fc1461017f578063095ea7b3146101af57806323b872dd146101cb575b600080fd5b61014b60048036038101906101469190612660565b610402565b60405161015891906126a8565b60405180910390f35b610169610414565b6040516101769190612753565b60405180910390f35b610199600480360381019061019491906127ab565b6104a6565b6040516101a69190612819565b60405180910390f35b6101c960048036038101906101c49190612860565b6104c2565b005b6101e560048036038101906101e091906128a0565b6104d8565b005b6101ef6105da565b6040516101fc919061290f565b60405180910390f35b61021f600480360381019061021a91906128a0565b6105df565b005b61023b600480360381019061023691906127ab565b6105ff565b6040516102489190612819565b60405180910390f35b61026b6004803603810190610266919061292a565b610611565b6040516102789190612966565b60405180910390f35b6102896106cb565b005b6102936106df565b6040516102a09190612819565b60405180910390f35b6102b1610709565b6040516102be9190612753565b60405180910390f35b6102e160048036038101906102dc91906129ad565b61079b565b005b6102fd60048036038101906102f89190612d64565b6107b1565b005b610319600480360381019061031491906127ab565b6108e1565b6040516103269190612f8c565b60405180910390f35b6103496004803603810190610344919061304f565b610dc7565b005b610365600480360381019061036091906127ab565b610de4565b6040516103729190612753565b60405180910390f35b610395600480360381019061039091906130d2565b610df6565b6040516103a291906126a8565b60405180910390f35b6103c560048036038101906103c0919061292a565b610e8a565b005b6103e160048036038101906103dc91906127ab565b610f10565b6040516103f99c9b9a99989796959493929190613121565b60405180910390f35b600061040d826113b0565b9050919050565b60606000805461042390613242565b80601f016020809104026020016040519081016040528092919081815260200182805461044f90613242565b801561049c5780601f106104715761010080835404028352916020019161049c565b820191906000526020600020905b81548152906001019060200180831161047f57829003601f168201915b5050505050905090565b60006104b182611411565b506104bb82611499565b9050919050565b6104d482826104cf6114d6565b6114de565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361054a5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016105419190612819565b60405180910390fd5b600061055e83836105596114d6565b6114f0565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105d4578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016105cb93929190613273565b60405180910390fd5b50505050565b600a81565b6105fa83838360405180602001604052806000815250610dc7565b505050565b600061060a82611411565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106845760006040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161067b9190612819565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6106d361170a565b6106dd6000611791565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461071890613242565b80601f016020809104026020016040519081016040528092919081815260200182805461074490613242565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b5050505050905090565b6107ad6107a66114d6565b8383611857565b5050565b6107b961170a565b6000600860008154809291906107ce906132d9565b9190505590506107de84826119c6565b6107e881846119e4565b8160096000838152602001908152602001600020600082015181600001908161081191906134cd565b50602082015181600101908161082791906134cd565b50604082015181600201908161083d91906134cd565b50606082015181600301908161085391906134cd565b506080820151816004015560a0820151816005015560c082015181600601908161087d91906134cd565b5060e0820151816007015561010082015181600801908161089e91906134cd565b50610120820151816009015561014082015181600a0190816108c091906134cd565b5061016082015181600b0190816108d791906134cd565b5090505050505050565b6108e9612593565b600960008381526020019081526020016000206040518061018001604052908160008201805461091890613242565b80601f016020809104026020016040519081016040528092919081815260200182805461094490613242565b80156109915780601f1061096657610100808354040283529160200191610991565b820191906000526020600020905b81548152906001019060200180831161097457829003601f168201915b505050505081526020016001820180546109aa90613242565b80601f01602080910402602001604051908101604052809291908181526020018280546109d690613242565b8015610a235780601f106109f857610100808354040283529160200191610a23565b820191906000526020600020905b815481529060010190602001808311610a0657829003601f168201915b50505050508152602001600282018054610a3c90613242565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6890613242565b8015610ab55780601f10610a8a57610100808354040283529160200191610ab5565b820191906000526020600020905b815481529060010190602001808311610a9857829003601f168201915b50505050508152602001600382018054610ace90613242565b80601f0160208091040260200160405190810160405280929190818152602001828054610afa90613242565b8015610b475780601f10610b1c57610100808354040283529160200191610b47565b820191906000526020600020905b815481529060010190602001808311610b2a57829003601f168201915b505050505081526020016004820154815260200160058201548152602001600682018054610b7490613242565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba090613242565b8015610bed5780601f10610bc257610100808354040283529160200191610bed565b820191906000526020600020905b815481529060010190602001808311610bd057829003601f168201915b5050505050815260200160078201548152602001600882018054610c1090613242565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3c90613242565b8015610c895780601f10610c5e57610100808354040283529160200191610c89565b820191906000526020600020905b815481529060010190602001808311610c6c57829003601f168201915b5050505050815260200160098201548152602001600a82018054610cac90613242565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd890613242565b8015610d255780601f10610cfa57610100808354040283529160200191610d25565b820191906000526020600020905b815481529060010190602001808311610d0857829003601f168201915b50505050508152602001600b82018054610d3e90613242565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6a90613242565b8015610db75780601f10610d8c57610100808354040283529160200191610db7565b820191906000526020600020905b815481529060010190602001808311610d9a57829003601f168201915b5050505050815250509050919050565b610dd28484846104d8565b610dde84848484611a40565b50505050565b6060610def82611bf7565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e9261170a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f045760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610efb9190612819565b60405180910390fd5b610f0d81611791565b50565b6009602052806000526040600020600091509050806000018054610f3390613242565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5f90613242565b8015610fac5780601f10610f8157610100808354040283529160200191610fac565b820191906000526020600020905b815481529060010190602001808311610f8f57829003601f168201915b505050505090806001018054610fc190613242565b80601f0160208091040260200160405190810160405280929190818152602001828054610fed90613242565b801561103a5780601f1061100f5761010080835404028352916020019161103a565b820191906000526020600020905b81548152906001019060200180831161101d57829003601f168201915b50505050509080600201805461104f90613242565b80601f016020809104026020016040519081016040528092919081815260200182805461107b90613242565b80156110c85780601f1061109d576101008083540402835291602001916110c8565b820191906000526020600020905b8154815290600101906020018083116110ab57829003601f168201915b5050505050908060030180546110dd90613242565b80601f016020809104026020016040519081016040528092919081815260200182805461110990613242565b80156111565780601f1061112b57610100808354040283529160200191611156565b820191906000526020600020905b81548152906001019060200180831161113957829003601f168201915b50505050509080600401549080600501549080600601805461117790613242565b80601f01602080910402602001604051908101604052809291908181526020018280546111a390613242565b80156111f05780601f106111c5576101008083540402835291602001916111f0565b820191906000526020600020905b8154815290600101906020018083116111d357829003601f168201915b50505050509080600701549080600801805461120b90613242565b80601f016020809104026020016040519081016040528092919081815260200182805461123790613242565b80156112845780601f1061125957610100808354040283529160200191611284565b820191906000526020600020905b81548152906001019060200180831161126757829003601f168201915b50505050509080600901549080600a01805461129f90613242565b80601f01602080910402602001604051908101604052809291908181526020018280546112cb90613242565b80156113185780601f106112ed57610100808354040283529160200191611318565b820191906000526020600020905b8154815290600101906020018083116112fb57829003601f168201915b50505050509080600b01805461132d90613242565b80601f016020809104026020016040519081016040528092919081815260200182805461135990613242565b80156113a65780601f1061137b576101008083540402835291602001916113a6565b820191906000526020600020905b81548152906001019060200180831161138957829003601f168201915b505050505090508c565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061140a575061140982611d0a565b5b9050919050565b60008061141d83611dec565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361149057826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016114879190612966565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6114eb8383836001611e29565b505050565b6000806114fc84611dec565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461153e5761153d818486611fee565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115cf57611580600085600080611e29565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611652576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b6117126114d6565b73ffffffffffffffffffffffffffffffffffffffff166117306106df565b73ffffffffffffffffffffffffffffffffffffffff161461178f576117536114d6565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016117869190612819565b60405180910390fd5b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118c857816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016118bf9190612819565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119b991906126a8565b60405180910390a3505050565b6119e08282604051806020016040528060008152506120b2565b5050565b80600660008481526020019081526020016000209081611a0491906134cd565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce782604051611a349190612966565b60405180910390a15050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611bf1578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611a846114d6565b8685856040518563ffffffff1660e01b8152600401611aa694939291906135f4565b6020604051808303816000875af1925050508015611ae257506040513d601f19601f82011682018060405250810190611adf9190613655565b60015b611b66573d8060008114611b12576040519150601f19603f3d011682016040523d82523d6000602084013e611b17565b606091505b506000815103611b5e57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611b559190612819565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611bef57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611be69190612819565b60405180910390fd5b505b50505050565b6060611c0282611411565b506000600660008481526020019081526020016000208054611c2390613242565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4f90613242565b8015611c9c5780601f10611c7157610100808354040283529160200191611c9c565b820191906000526020600020905b815481529060010190602001808311611c7f57829003601f168201915b505050505090506000611cad6120ce565b90506000815103611cc2578192505050611d05565b600082511115611cf7578082604051602001611cdf9291906136be565b60405160208183030381529060405292505050611d05565b611d00846120e5565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611dd557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611de55750611de48261214e565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080611e625750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611f96576000611e7284611411565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611edd57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611ef05750611eee8184610df6565b155b15611f3257826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611f299190612819565b60405180910390fd5b8115611f9457838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611ff98383836121b8565b6120ad57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361206e57806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016120659190612966565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016120a49291906136e2565b60405180910390fd5b505050565b6120bc8383612279565b6120c96000848484611a40565b505050565b606060405180602001604052806000815250905090565b60606120f082611411565b5060006120fb6120ce565b9050600081511161211b5760405180602001604052806000815250612146565b8061212584612372565b6040516020016121369291906136be565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561227057508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061223157506122308484610df6565b5b8061226f57508273ffffffffffffffffffffffffffffffffffffffff1661225783611499565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122eb5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016122e29190612819565b60405180910390fd5b60006122f9838360006114f0565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461236d5760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016123649190612819565b60405180910390fd5b505050565b60606000600161238184612440565b01905060008167ffffffffffffffff8111156123a05761239f6129f7565b5b6040519080825280601f01601f1916602001820160405280156123d25781602001600182028036833780820191505090505b509050600082602001820190505b600115612435578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816124295761242861370b565b5b049450600085036123e0575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061249e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816124945761249361370b565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106124db576d04ee2d6d415b85acef810000000083816124d1576124d061370b565b5b0492506020810190505b662386f26fc10000831061250a57662386f26fc100008381612500576124ff61370b565b5b0492506010810190505b6305f5e1008310612533576305f5e10083816125295761252861370b565b5b0492506008810190505b612710831061255857612710838161254e5761254d61370b565b5b0492506004810190505b6064831061257b57606483816125715761257061370b565b5b0492506002810190505b600a831061258a576001810190505b80915050919050565b6040518061018001604052806060815260200160608152602001606081526020016060815260200160008152602001600081526020016060815260200160008152602001606081526020016000815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61263d81612608565b811461264857600080fd5b50565b60008135905061265a81612634565b92915050565b600060208284031215612676576126756125fe565b5b60006126848482850161264b565b91505092915050565b60008115159050919050565b6126a28161268d565b82525050565b60006020820190506126bd6000830184612699565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126fd5780820151818401526020810190506126e2565b60008484015250505050565b6000601f19601f8301169050919050565b6000612725826126c3565b61272f81856126ce565b935061273f8185602086016126df565b61274881612709565b840191505092915050565b6000602082019050818103600083015261276d818461271a565b905092915050565b6000819050919050565b61278881612775565b811461279357600080fd5b50565b6000813590506127a58161277f565b92915050565b6000602082840312156127c1576127c06125fe565b5b60006127cf84828501612796565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612803826127d8565b9050919050565b612813816127f8565b82525050565b600060208201905061282e600083018461280a565b92915050565b61283d816127f8565b811461284857600080fd5b50565b60008135905061285a81612834565b92915050565b60008060408385031215612877576128766125fe565b5b60006128858582860161284b565b925050602061289685828601612796565b9150509250929050565b6000806000606084860312156128b9576128b86125fe565b5b60006128c78682870161284b565b93505060206128d88682870161284b565b92505060406128e986828701612796565b9150509250925092565b600060ff82169050919050565b612909816128f3565b82525050565b60006020820190506129246000830184612900565b92915050565b6000602082840312156129405761293f6125fe565b5b600061294e8482850161284b565b91505092915050565b61296081612775565b82525050565b600060208201905061297b6000830184612957565b92915050565b61298a8161268d565b811461299557600080fd5b50565b6000813590506129a781612981565b92915050565b600080604083850312156129c4576129c36125fe565b5b60006129d28582860161284b565b92505060206129e385828601612998565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612a2f82612709565b810181811067ffffffffffffffff82111715612a4e57612a4d6129f7565b5b80604052505050565b6000612a616125f4565b9050612a6d8282612a26565b919050565b600067ffffffffffffffff821115612a8d57612a8c6129f7565b5b612a9682612709565b9050602081019050919050565b82818337600083830152505050565b6000612ac5612ac084612a72565b612a57565b905082815260208101848484011115612ae157612ae06129f2565b5b612aec848285612aa3565b509392505050565b600082601f830112612b0957612b086129ed565b5b8135612b19848260208601612ab2565b91505092915050565b600080fd5b600080fd5b6000819050919050565b612b3f81612b2c565b8114612b4a57600080fd5b50565b600081359050612b5c81612b36565b92915050565b60006101808284031215612b7957612b78612b22565b5b612b84610180612a57565b9050600082013567ffffffffffffffff811115612ba457612ba3612b27565b5b612bb084828501612af4565b600083015250602082013567ffffffffffffffff811115612bd457612bd3612b27565b5b612be084828501612af4565b602083015250604082013567ffffffffffffffff811115612c0457612c03612b27565b5b612c1084828501612af4565b604083015250606082013567ffffffffffffffff811115612c3457612c33612b27565b5b612c4084828501612af4565b6060830152506080612c5484828501612b4d565b60808301525060a0612c6884828501612b4d565b60a08301525060c082013567ffffffffffffffff811115612c8c57612c8b612b27565b5b612c9884828501612af4565b60c08301525060e0612cac84828501612b4d565b60e08301525061010082013567ffffffffffffffff811115612cd157612cd0612b27565b5b612cdd84828501612af4565b61010083015250610120612cf384828501612796565b6101208301525061014082013567ffffffffffffffff811115612d1957612d18612b27565b5b612d2584828501612af4565b6101408301525061016082013567ffffffffffffffff811115612d4b57612d4a612b27565b5b612d5784828501612af4565b6101608301525092915050565b600080600060608486031215612d7d57612d7c6125fe565b5b6000612d8b8682870161284b565b935050602084013567ffffffffffffffff811115612dac57612dab612603565b5b612db886828701612af4565b925050604084013567ffffffffffffffff811115612dd957612dd8612603565b5b612de586828701612b62565b9150509250925092565b600082825260208201905092915050565b6000612e0b826126c3565b612e158185612def565b9350612e258185602086016126df565b612e2e81612709565b840191505092915050565b612e4281612b2c565b82525050565b612e5181612775565b82525050565b6000610180830160008301518482036000860152612e758282612e00565b91505060208301518482036020860152612e8f8282612e00565b91505060408301518482036040860152612ea98282612e00565b91505060608301518482036060860152612ec38282612e00565b9150506080830151612ed86080860182612e39565b5060a0830151612eeb60a0860182612e39565b5060c083015184820360c0860152612f038282612e00565b91505060e0830151612f1860e0860182612e39565b50610100830151848203610100860152612f328282612e00565b915050610120830151612f49610120860182612e48565b50610140830151848203610140860152612f638282612e00565b915050610160830151848203610160860152612f7f8282612e00565b9150508091505092915050565b60006020820190508181036000830152612fa68184612e57565b905092915050565b600067ffffffffffffffff821115612fc957612fc86129f7565b5b612fd282612709565b9050602081019050919050565b6000612ff2612fed84612fae565b612a57565b90508281526020810184848401111561300e5761300d6129f2565b5b613019848285612aa3565b509392505050565b600082601f830112613036576130356129ed565b5b8135613046848260208601612fdf565b91505092915050565b60008060008060808587031215613069576130686125fe565b5b60006130778782880161284b565b94505060206130888782880161284b565b935050604061309987828801612796565b925050606085013567ffffffffffffffff8111156130ba576130b9612603565b5b6130c687828801613021565b91505092959194509250565b600080604083850312156130e9576130e86125fe565b5b60006130f78582860161284b565b92505060206131088582860161284b565b9150509250929050565b61311b81612b2c565b82525050565b600061018082019050818103600083015261313c818f61271a565b90508181036020830152613150818e61271a565b90508181036040830152613164818d61271a565b90508181036060830152613178818c61271a565b9050613187608083018b613112565b61319460a083018a613112565b81810360c08301526131a6818961271a565b90506131b560e0830188613112565b8181036101008301526131c8818761271a565b90506131d8610120830186612957565b8181036101408301526131eb818561271a565b9050818103610160830152613200818461271a565b90509d9c50505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061325a57607f821691505b60208210810361326d5761326c613213565b5b50919050565b6000606082019050613288600083018661280a565b6132956020830185612957565b6132a2604083018461280a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006132e482612775565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613316576133156132aa565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026133837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613346565b61338d8683613346565b95508019841693508086168417925050509392505050565b6000819050919050565b60006133ca6133c56133c084612775565b6133a5565b612775565b9050919050565b6000819050919050565b6133e4836133af565b6133f86133f0826133d1565b848454613353565b825550505050565b600090565b61340d613400565b6134188184846133db565b505050565b5b8181101561343c57613431600082613405565b60018101905061341e565b5050565b601f8211156134815761345281613321565b61345b84613336565b8101602085101561346a578190505b61347e61347685613336565b83018261341d565b50505b505050565b600082821c905092915050565b60006134a460001984600802613486565b1980831691505092915050565b60006134bd8383613493565b9150826002028217905092915050565b6134d6826126c3565b67ffffffffffffffff8111156134ef576134ee6129f7565b5b6134f98254613242565b613504828285613440565b600060209050601f8311600181146135375760008415613525578287015190505b61352f85826134b1565b865550613597565b601f19841661354586613321565b60005b8281101561356d57848901518255600182019150602085019450602081019050613548565b8683101561358a5784890151613586601f891682613493565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b600082825260208201905092915050565b60006135c68261359f565b6135d081856135aa565b93506135e08185602086016126df565b6135e981612709565b840191505092915050565b6000608082019050613609600083018761280a565b613616602083018661280a565b6136236040830185612957565b818103606083015261363581846135bb565b905095945050505050565b60008151905061364f81612634565b92915050565b60006020828403121561366b5761366a6125fe565b5b600061367984828501613640565b91505092915050565b600081905092915050565b6000613698826126c3565b6136a28185613682565b93506136b28185602086016126df565b80840191505092915050565b60006136ca828561368d565b91506136d6828461368d565b91508190509392505050565b60006040820190506136f7600083018561280a565b6137046020830184612957565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea2646970667358221220d212e01c7d5f49c38ec0af02127be70f679d037a124e522c52780c7cc8b9c9ca64736f6c63430008180033000000000000000000000000482d908dda3d2cb3e646e4f80cfe224865795c63