From f14e661aea013a27789a0ef1476b19ff625f247f Mon Sep 17 00:00:00 2001 From: Sean McCaffery Date: Thu, 15 Aug 2024 09:21:55 -0400 Subject: [PATCH] chore: check canceled (#2102) --- packages/forge/src/governance/Governor.sol | 26 +- packages/forge/src/modules/RewardsModule.sol | 2 +- .../Contest.json | 1 + .../flattenedContest.sol | 3375 +++++++++++++++++ .../bytecodeAndAbi/Contest.sol/Contest.json | 2 +- .../Contest.sol/flattenedContest.sol | 28 +- .../RewardsModule.json | 1 + .../flattenedRewardsModule.sol | 3209 ++++++++++++++++ .../RewardsModule.sol/RewardsModule.json | 2 +- .../flattenedRewardsModule.sol | 28 +- .../helpers/getContestContractVersion.ts | 5 +- .../getRewardsModuleContractVersion.ts | 5 +- 12 files changed, 6650 insertions(+), 34 deletions(-) create mode 100644 packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.4.32.checkCanceled.sol/Contest.json create mode 100644 packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.4.32.checkCanceled.sol/flattenedContest.sol create mode 100644 packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.4.32.checkCanceled.sol/RewardsModule.json create mode 100644 packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.4.32.checkCanceled.sol/flattenedRewardsModule.sol diff --git a/packages/forge/src/governance/Governor.sol b/packages/forge/src/governance/Governor.sol index 4fa8ae063..b63dadf97 100644 --- a/packages/forge/src/governance/Governor.sol +++ b/packages/forge/src/governance/Governor.sol @@ -99,7 +99,7 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { uint256 public constant MAX_FIELDS_METADATA_LENGTH = 10; uint256 public constant AMOUNT_FOR_SUMBITTER_PROOF = 10000000000000000000; address public constant JK_LABS_ADDRESS = 0xDc652C746A8F85e18Ce632d97c6118e8a52fa738; // our hot wallet that we operate from if need be, and collect revenue to on most chains - string private constant VERSION = "4.31"; // Private as to not clutter the ABI + string private constant VERSION = "4.32"; // Private as to not clutter the ABI string public name; // The title of the contest string public prompt; @@ -157,12 +157,12 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { error NeedToVoteWithProofFirst(); error OnlyCreatorCanDelete(); - error CannotDeleteWhenCompleted(); + error CannotDeleteWhenCompletedOrCanceled(); error OnlyJkLabsOrCreatorCanCancel(); - error ContestAlreadyCancelled(); + error ContestAlreadyCanceled(); - error CannotUpdateAfterCompleted(); + error CannotUpdateWhenCompletedOrCanceled(); error OnlyJkLabsCanAmend(); error OnlyCreatorCanAmend(); @@ -447,7 +447,9 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { */ function deleteProposals(uint256[] calldata proposalIdsToDelete) public { if (msg.sender != creator) revert OnlyCreatorCanDelete(); - if (state() == ContestState.Completed) revert CannotDeleteWhenCompleted(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotDeleteWhenCompletedOrCanceled(); + } for (uint256 index = 0; index < proposalIdsToDelete.length; index++) { uint256 currentProposalId = proposalIdsToDelete[index]; @@ -478,7 +480,7 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { if (((msg.sender != creator) && (msg.sender != JK_LABS_ADDRESS))) revert OnlyJkLabsOrCreatorCanCancel(); ContestState status = state(); - if (status == ContestState.Canceled) revert ContestAlreadyCancelled(); + if (status == ContestState.Canceled) revert ContestAlreadyCanceled(); canceled = true; @@ -556,19 +558,25 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { function setSubmissionMerkleRoot(bytes32 newSubmissionMerkleRoot) public { if (msg.sender != JK_LABS_ADDRESS) revert OnlyJkLabsCanAmend(); - if (state() == ContestState.Completed) revert CannotUpdateAfterCompleted(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } submissionMerkleRoot = newSubmissionMerkleRoot; } function setVotingMerkleRoot(bytes32 newVotingMerkleRoot) public { if (msg.sender != JK_LABS_ADDRESS) revert OnlyJkLabsCanAmend(); - if (state() == ContestState.Completed) revert CannotUpdateAfterCompleted(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } votingMerkleRoot = newVotingMerkleRoot; } function setCreatorSplitDestination(address newCreatorSplitDestination) public { if (msg.sender != creator) revert OnlyCreatorCanAmend(); - if (state() == ContestState.Completed) revert CannotUpdateAfterCompleted(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } creatorSplitDestination = newCreatorSplitDestination; } } diff --git a/packages/forge/src/modules/RewardsModule.sol b/packages/forge/src/modules/RewardsModule.sol index b48ad6f1e..949b03cc8 100644 --- a/packages/forge/src/modules/RewardsModule.sol +++ b/packages/forge/src/modules/RewardsModule.sol @@ -38,7 +38,7 @@ contract RewardsModule { mapping(uint256 => uint256) public shares; // Getter for the amount of shares held by a ranking. mapping(uint256 => uint256) public released; // Getter for the amount of Ether already released to a ranking. uint256[] public payees; - string private constant VERSION = "4.31"; // Private as to not clutter the ABI + string private constant VERSION = "4.32"; // Private as to not clutter the ABI mapping(IERC20 => uint256) public erc20TotalReleased; mapping(IERC20 => mapping(uint256 => uint256)) public erc20Released; diff --git a/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.4.32.checkCanceled.sol/Contest.json b/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.4.32.checkCanceled.sol/Contest.json new file mode 100644 index 000000000..5c345a741 --- /dev/null +++ b/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.4.32.checkCanceled.sol/Contest.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_name","type":"string","internalType":"string"},{"name":"_prompt","type":"string","internalType":"string"},{"name":"_submissionMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"_votingMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"_constructorArgs","type":"tuple","internalType":"struct Governor.ConstructorArgs","components":[{"name":"intConstructorArgs","type":"tuple","internalType":"struct Governor.IntConstructorArgs","components":[{"name":"contestStart","type":"uint256","internalType":"uint256"},{"name":"votingDelay","type":"uint256","internalType":"uint256"},{"name":"votingPeriod","type":"uint256","internalType":"uint256"},{"name":"numAllowedProposalSubmissions","type":"uint256","internalType":"uint256"},{"name":"maxProposalCount","type":"uint256","internalType":"uint256"},{"name":"downvotingAllowed","type":"uint256","internalType":"uint256"},{"name":"sortingEnabled","type":"uint256","internalType":"uint256"},{"name":"rankLimit","type":"uint256","internalType":"uint256"},{"name":"percentageToCreator","type":"uint256","internalType":"uint256"},{"name":"costToPropose","type":"uint256","internalType":"uint256"},{"name":"costToVote","type":"uint256","internalType":"uint256"},{"name":"payPerVote","type":"uint256","internalType":"uint256"}]},{"name":"creatorSplitDestination","type":"address","internalType":"address"},{"name":"jkLabsSplitDestination","type":"address","internalType":"address"},{"name":"metadataFieldsSchema","type":"string","internalType":"string"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"AMOUNT_FOR_SUMBITTER_PROOF","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"JK_LABS_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"MAX_FIELDS_METADATA_LENGTH","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"METADATAS_COUNT","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addressSubmitterVerified","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"addressTotalCastVoteCounts","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addressTotalVotes","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addressTotalVotesVerified","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"addressesThatHaveVoted","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"allProposalTotalVotes","inputs":[],"outputs":[{"name":"proposalIdsReturn","type":"uint256[]","internalType":"uint256[]"},{"name":"proposalVoteCountsArrayReturn","type":"tuple[]","internalType":"struct GovernorCountingSimple.VoteCounts[]","components":[{"name":"forVotes","type":"uint256","internalType":"uint256"},{"name":"againstVotes","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"cancel","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"canceled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"castVote","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"support","type":"uint8","internalType":"uint8"},{"name":"totalVotes","type":"uint256","internalType":"uint256"},{"name":"numVotes","type":"uint256","internalType":"uint256"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"castVoteWithoutProof","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"support","type":"uint8","internalType":"uint8"},{"name":"numVotes","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"checkProof","inputs":[{"name":"addressToCheck","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"},{"name":"voting","type":"bool","internalType":"bool"}],"outputs":[{"name":"verified","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"comment","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"commentContent","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"commentIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commentIsDeleted","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"comments","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"author","type":"address","internalType":"address"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"commentContent","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"contestAddressTotalVotesCast","inputs":[{"name":"userAddress","type":"address","internalType":"address"}],"outputs":[{"name":"userTotalVotesCast","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"contestDeadline","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"contestStart","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"costToPropose","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"costToVote","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"creator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"creatorSplitDestination","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"deleteComments","inputs":[{"name":"commentIdsParam","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deleteProposals","inputs":[{"name":"proposalIdsToDelete","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deletedCommentIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"deletedProposalIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"downvotingAllowed","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"forVotesToProposalIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAllAddressesThatHaveVoted","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getAllAuthorsOfDeletedProposals","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getAllCommentIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getAllDeletedCommentIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getAllDeletedProposalIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getAllProposalAuthors","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getAllProposalIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getComment","inputs":[{"name":"commentId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct GovernorEngagement.CommentCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"commentContent","type":"string","internalType":"string"}]}],"stateMutability":"view"},{"type":"function","name":"getNumProposalsWithThisManyForVotes","inputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"count","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getOnlyProposalIdWithThisManyForVotes","inputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getProposal","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]}],"stateMutability":"view"},{"type":"function","name":"getProposalComments","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getProposalsWithThisManyForVotes","inputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"proposalsWithThisManyForVotes","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getRankIndex","inputs":[{"name":"rank","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"rankIndex","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getSortedRanks","inputs":[],"outputs":[{"name":"sortedRanksArray","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"hashComment","inputs":[{"name":"commentObj","type":"tuple","internalType":"struct GovernorEngagement.CommentCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"commentContent","type":"string","internalType":"string"}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"hashProposal","inputs":[{"name":"proposal","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"isOrIsBelowTiedRank","inputs":[{"name":"idx","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"atOrBelowTiedRank","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"jkLabsSplitDestination","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"maxProposalCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"metadataFieldsSchema","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"numAllowedProposalSubmissions","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"numSubmissions","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"officialRewardsModule","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract RewardsModule"}],"stateMutability":"view"},{"type":"function","name":"payPerVote","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"percentageToCreator","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"prompt","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"proposalAddressVotes","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"userAddress","type":"address","internalType":"address"}],"outputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"},{"name":"againstVotes","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposalAddressesHaveVoted","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"proposalAuthors","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"proposalComments","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposalIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposalIsDeleted","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proposalVotes","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"},{"name":"againstVotes","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposalVotesStructs","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"proposalVoteCounts","type":"tuple","internalType":"struct GovernorCountingSimple.VoteCounts","components":[{"name":"forVotes","type":"uint256","internalType":"uint256"},{"name":"againstVotes","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"proposals","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}],"stateMutability":"view"},{"type":"function","name":"propose","inputs":[{"name":"proposal","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"proposeWithoutProof","inputs":[{"name":"proposal","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"rankLimit","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setCreatorSplitDestination","inputs":[{"name":"newCreatorSplitDestination","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOfficialRewardsModule","inputs":[{"name":"officialRewardsModule_","type":"address","internalType":"contract RewardsModule"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSubmissionMerkleRoot","inputs":[{"name":"newSubmissionMerkleRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setVotingMerkleRoot","inputs":[{"name":"newVotingMerkleRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sortedRanks","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"sortingEnabled","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"state","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"enum Governor.ContestState"}],"stateMutability":"view"},{"type":"function","name":"submissionMerkleRoot","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"totalVotesCast","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validateProposalData","inputs":[{"name":"proposal","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"verifyProposer","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyVoter","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"totalVotes","type":"uint256","internalType":"uint256"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"voteStart","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"votingDelay","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"votingMerkleRoot","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"votingPeriod","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"CommentCreated","inputs":[{"name":"commentId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CommentsDeleted","inputs":[{"name":"commentIds","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"ContestCanceled","inputs":[],"anonymous":false},{"type":"event","name":"CreatorPaymentReleased","inputs":[{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"JkLabsPaymentReleased","inputs":[{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"JokeraceCreated","inputs":[{"name":"version","type":"string","indexed":false,"internalType":"string"},{"name":"name","type":"string","indexed":false,"internalType":"string"},{"name":"prompt","type":"string","indexed":false,"internalType":"string"},{"name":"creator","type":"address","indexed":false,"internalType":"address"},{"name":"contestStart","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"votingDelay","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"votingPeriod","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OfficialRewardsModuleSet","inputs":[{"name":"oldOfficialRewardsModule","type":"address","indexed":false,"internalType":"contract RewardsModule"},{"name":"newOfficialRewardsModule","type":"address","indexed":false,"internalType":"contract RewardsModule"}],"anonymous":false},{"type":"event","name":"ProposalCreated","inputs":[{"name":"proposalId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"proposer","type":"address","indexed":false,"internalType":"address"},{"name":"proposalDescription","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"ProposalsDeleted","inputs":[{"name":"proposalIds","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"VoteCast","inputs":[{"name":"voter","type":"address","indexed":true,"internalType":"address"},{"name":"proposalId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"support","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"numVotes","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AddressFieldMetadataArrayTooLong","inputs":[]},{"type":"error","name":"AddressNotPermissionedToSubmit","inputs":[]},{"type":"error","name":"AuthorIsNotSender","inputs":[{"name":"author","type":"address","internalType":"address"},{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"CannotDeleteWhenCompletedOrCanceled","inputs":[]},{"type":"error","name":"CannotUpdateWhenCompletedOrCanceled","inputs":[]},{"type":"error","name":"CannotVoteLessThanOneVoteInPayPerVote","inputs":[]},{"type":"error","name":"CannotVoteOnDeletedProposal","inputs":[]},{"type":"error","name":"ContestAlreadyCanceled","inputs":[]},{"type":"error","name":"ContestMustBeActiveToVote","inputs":[{"name":"currentState","type":"uint8","internalType":"enum Governor.ContestState"}]},{"type":"error","name":"ContestMustBeQueuedToPropose","inputs":[{"name":"currentState","type":"uint8","internalType":"enum Governor.ContestState"}]},{"type":"error","name":"ContestSubmissionLimitReached","inputs":[{"name":"maxProposalCount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DownvotingNotEnabled","inputs":[]},{"type":"error","name":"DuplicateSubmission","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"EmptyProposalDescription","inputs":[]},{"type":"error","name":"IncorrectCostSent","inputs":[{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"costToVote","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"IndexHasNotBeenPopulated","inputs":[]},{"type":"error","name":"InvalidVoteType","inputs":[]},{"type":"error","name":"MoreThanOneProposalWithThisManyVotes","inputs":[]},{"type":"error","name":"NeedAtLeastOneVoteToVote","inputs":[]},{"type":"error","name":"NeedToSubmitWithProofFirst","inputs":[]},{"type":"error","name":"NeedToVoteWithProofFirst","inputs":[]},{"type":"error","name":"NotEnoughVotesLeft","inputs":[]},{"type":"error","name":"NotInMerkle","inputs":[]},{"type":"error","name":"OnlyCreatorCanAmend","inputs":[]},{"type":"error","name":"OnlyCreatorCanDelete","inputs":[]},{"type":"error","name":"OnlyCreatorCanSetRewardsModule","inputs":[]},{"type":"error","name":"OnlyCreatorOrAuthorCanDeleteComments","inputs":[{"name":"failedToDeleteCommentId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlyJkLabsCanAmend","inputs":[]},{"type":"error","name":"OnlyJkLabsOrCreatorCanCancel","inputs":[]},{"type":"error","name":"PayPerVoteMustBeEnabledForAnyoneCanVote","inputs":[]},{"type":"error","name":"RankCannotBeZero","inputs":[]},{"type":"error","name":"RankIsNotInSortedRanks","inputs":[]},{"type":"error","name":"SenderSubmissionLimitReached","inputs":[{"name":"numAllowedProposalSubmissions","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SortingAndDownvotingCannotBothBeEnabled","inputs":[]},{"type":"error","name":"StringFieldMetadataArrayTooLong","inputs":[]},{"type":"error","name":"UintFieldMetadataArrayTooLong","inputs":[]},{"type":"error","name":"UnexpectedMetadata","inputs":[{"name":"unexpectedMetadata","type":"uint8","internalType":"enum Governor.Metadatas"}]},{"type":"error","name":"ZeroSignersInSafeMetadata","inputs":[]},{"type":"error","name":"ZeroThresholdInSafeMetadata","inputs":[]}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b50604051620056ab380380620056ab83398101604081905262000034916200033c565b805160c081015160e09091015160009190915560015560038390556004829055848482600562000065848262000570565b50600662000074838262000570565b5060078054336001600160a01b03199182161790915581518051600855602080820151600955604080830151600a55606080840151600b556080840151600c5560a0840151600d55610100840151600e55610120840151600f5561014084015160105561016090930151601155908401516012805485166001600160a01b0392831617905590840151601380549094169116179091558101516014906200011c908262000570565b5060408051808201825260048152631a17199960e11b60208083019190915283518051918101519084015193517f9a9bca21e4e51607db64fbdbcd7b2284a909c6a8969821f0d161efbdcae70160946200017e9493899389933393906200066a565b60405180910390a15050815160c0015160011490508015620001a55750805160a001516001145b15620001c457604051636bff10c960e01b815260040160405180910390fd5b81158015620001d7575080516101600151155b15620001f6576040516397b6be7d60e01b815260040160405180910390fd5b5050505050620006d9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200023c576200023c62000201565b60405290565b60405161018081016001600160401b03811182821017156200023c576200023c62000201565b60005b83811015620002855781810151838201526020016200026b565b50506000910152565b600082601f830112620002a057600080fd5b81516001600160401b0380821115620002bd57620002bd62000201565b604051601f8301601f19908116603f01168101908282118183101715620002e857620002e862000201565b816040528381528660208588010111156200030257600080fd5b6200031584602083016020890162000268565b9695505050505050565b80516001600160a01b03811681146200033757600080fd5b919050565b600080600080600060a086880312156200035557600080fd5b85516001600160401b03808211156200036d57600080fd5b6200037b89838a016200028e565b965060208801519150808211156200039257600080fd5b620003a089838a016200028e565b955060408801519450606088015193506080880151915080821115620003c557600080fd5b908701908189036101e0811215620003dc57600080fd5b620003e662000217565b61018080831215620003f757600080fd5b6200040162000242565b9250845183526020850151602084015260408501516040840152606085015160608401526080850151608084015260a085015160a084015260c085015160c084015260e085015160e08401526101008086015181850152506101208086015181850152506101408086015181850152506101608086015181850152508282526200048d8186016200031f565b602083015250620004a26101a085016200031f565b60408201526101c0840151915082821115620004bd57600080fd5b620004cb8b8386016200028e565b6060820152809450505050509295509295909350565b600181811c90821680620004f657607f821691505b6020821081036200051757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200056b57600081815260208120601f850160051c81016020861015620005465750805b601f850160051c820191505b81811015620005675782815560010162000552565b5050505b505050565b81516001600160401b038111156200058c576200058c62000201565b620005a4816200059d8454620004e1565b846200051d565b602080601f831160018114620005dc5760008415620005c35750858301515b600019600386901b1c1916600185901b17855562000567565b600085815260208120601f198616915b828110156200060d57888601518255948401946001909101908401620005ec565b50858210156200062c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600081518084526200065681602086016020860162000268565b601f01601f19169290920160200192915050565b60e0815260006200067f60e083018a6200063c565b828103602084015262000693818a6200063c565b90508281036040840152620006a981896200063c565b6001600160a01b039790971660608401525050608081019390935260a083019190915260c0909101529392505050565b614fc280620006e96000396000f3fe6080604052600436106104d55760003560e01c8063711effc811610281578063c19d93fb1161015a578063e11db9d8116100cc578063f4f3d7ec11610085578063f4f3d7ec14610f5c578063f5c3641114610f7c578063f61736f414610f9c578063f79c017214610fbc578063f823f11014610fec578063fb9bf8d414610fff57600080fd5b8063e11db9d814610ebf578063ea8a1af014610ed4578063edcd1be414610ee9578063eef18e1714610eff578063efa90d3614610f27578063f0a7db0a14610f3c57600080fd5b8063d140d9f01161011e578063d140d9f014610e07578063d798902514610e27578063daf762db14610e47578063dd96a19d14610e67578063dea5f6a614610e7d578063e031535b14610eaa57600080fd5b8063c19d93fb14610d53578063c7f758a814610d75578063c9a1b6b214610da2578063cb85395014610dc2578063cbdc27cb14610df257600080fd5b80639ba197af116101f3578063aec116b6116101b7578063aec116b614610c92578063b323580d14610cc8578063b382543f14610ce8578063b66d1da314610cfd578063bddc164114610d1d578063c05f410414610d3357600080fd5b80639ba197af14610bd5578063a1ac6cb214610c02578063ab5e694714610c2f578063ac67f80114610c42578063ae66b8ad14610c6257600080fd5b8063832009af11610245578063832009af14610b0a5780638ebb4c1514610b205780639174778c14610b50578063930de97914610b70578063946369b514610ba05780639b644a2314610bb557600080fd5b8063711effc814610a7257806375e509c514610a92578063785ddfe514610abf5780637c65d71114610adf5780637de418d514610af457600080fd5b80633932abb1116103b3578063544c7bb41161032557806360506ff6116102e957806360506ff6146109e957806360ed97a9146109ff57806365f1626314610a145780636e4eb81014610a275780636ed815ad14610a475780636fd3636b14610a5d57600080fd5b8063544c7bb41461091d578063544ffc9c1461093d57806354fd4d50146109875780635c7107d8146109b45780635cb718a1146109d457600080fd5b80634a587ad4116103775780634a587ad41461086f5780634d24a67f1461088f57806350a5e524146108a457806350c4b616146108c757806351a41dec146108e7578063531bd812146108fd57600080fd5b80633932abb1146107ec5780633f9942ff146108025780633fb57c921461081c578063409fd0301461083c578063419c533c1461085c57600080fd5b8063102613d81161044c578063262e59e911610410578063262e59e9146107335780632c39805f14610748578063325cc6d91461076a57806332763c221461078a578063347cf665146107ba578063366ecf5b146107d657600080fd5b8063102613d81461068f5780631242b737146106af578063146230f6146106d15780631805c523146106f357806320b3e8451461071357600080fd5b80630414126a1161049e5780630414126a1461059957806305846cae146105af57806306fdde03146105cf578063070dc5d9146105f15780630800e300146106425780630aa25e441461066f57600080fd5b80624114a8146104da578063013cf08b1461050357806302a251a31461053557806302d05d3f1461054b57806303f7eed614610583575b600080fd5b3480156104e657600080fd5b506104f060085481565b6040519081526020015b60405180910390f35b34801561050f57600080fd5b5061052361051e366004613f85565b611015565b6040516104fa96959493929190614115565b34801561054157600080fd5b506104f0600a5481565b34801561055757600080fd5b5060075461056b906001600160a01b031681565b6040516001600160a01b0390911681526020016104fa565b34801561058f57600080fd5b506104f060115481565b3480156105a557600080fd5b506104f060015481565b3480156105bb57600080fd5b506104f06105ca366004613f85565b611300565b3480156105db57600080fd5b506105e4611321565b6040516104fa919061416f565b3480156105fd57600080fd5b5061063561060c366004613f85565b602260209081526000918252604091829020825180840190935280548352600101549082015281565b6040516104fa9190614182565b34801561064e57600080fd5b5061066261065d366004613f85565b6113af565b6040516104fa9190614199565b34801561067b57600080fd5b5061056b61068a366004613f85565b6114c3565b34801561069b57600080fd5b5060135461056b906001600160a01b031681565b3480156106bb57600080fd5b506106c46114ed565b6040516104fa91906141e2565b3480156106dd57600080fd5b506106f16106ec36600461421a565b611545565b005b3480156106ff57600080fd5b506104f061070e366004614336565b6115ef565b34801561071f57600080fd5b506106f161072e3660046143c0565b611710565b34801561073f57600080fd5b506104f061177f565b34801561075457600080fd5b5061075d61179b565b6040516104fa9190614414565b34801561077657600080fd5b506104f0610785366004613f85565b6117fc565b34801561079657600080fd5b506107aa6107a5366004614471565b61180c565b60405190151581526020016104fa565b3480156107c657600080fd5b506104f0678ac7230489e8000081565b3480156107e257600080fd5b506104f060005481565b3480156107f857600080fd5b506104f060095481565b34801561080e57600080fd5b506018546107aa9060ff1681565b34801561082857600080fd5b506104f0610837366004613f85565b61190b565b34801561084857600080fd5b506104f06108573660046144e1565b61191b565b6104f061086a36600461459d565b61194c565b34801561087b57600080fd5b5060125461056b906001600160a01b031681565b34801561089b57600080fd5b506104f06119ba565b3480156108b057600080fd5b506108b96119c9565b6040516104fa92919061460d565b3480156108d357600080fd5b5061056b6108e2366004613f85565b611acf565b3480156108f357600080fd5b506104f060105481565b34801561090957600080fd5b506106f1610918366004614676565b611adf565b34801561092957600080fd5b506106f1610938366004613f85565b611b54565b34801561094957600080fd5b50610972610958366004613f85565b600090815260226020526040902080546001909101549091565b604080519283526020830191909152016104fa565b34801561099357600080fd5b506040805180820190915260048152631a17199960e11b60208201526105e4565b3480156109c057600080fd5b506104f06109cf366004613f85565b611bea565b3480156109e057600080fd5b506106c4611cf1565b3480156109f557600080fd5b506104f0600d5481565b348015610a0b57600080fd5b506105e4611d47565b6104f0610a223660046146d1565b611d54565b348015610a3357600080fd5b50610972610a42366004614706565b611df2565b348015610a5357600080fd5b506104f0600f5481565b348015610a6957600080fd5b506106c4611e27565b348015610a7e57600080fd5b506104f0610a8d366004614736565b611e7d565b348015610a9e57600080fd5b506104f0610aad36600461421a565b601a6020526000908152604090205481565b348015610acb57600080fd5b5060245461056b906001600160a01b031681565b348015610aeb57600080fd5b506105e4611eae565b348015610b0057600080fd5b506104f060205481565b348015610b1657600080fd5b506104f0600b5481565b348015610b2c57600080fd5b50610b40610b3b366004613f85565b611ebb565b6040516104fa9493929190614758565b348015610b5c57600080fd5b506107aa610b6b366004613f85565b611f78565b348015610b7c57600080fd5b506107aa610b8b36600461421a565b601e6020526000908152604090205460ff1681565b348015610bac57600080fd5b5061075d61201e565b348015610bc157600080fd5b506104f0610bd0366004613f85565b61207e565b348015610be157600080fd5b506104f0610bf0366004613f85565b60009081526023602052604090205490565b348015610c0e57600080fd5b506104f0610c1d36600461421a565b60216020526000908152604090205481565b6104f0610c3d3660046147a7565b61208e565b348015610c4e57600080fd5b506106f1610c5d366004614869565b612108565b348015610c6e57600080fd5b506107aa610c7d366004613f85565b60296020526000908152604090205460ff1681565b348015610c9e57600080fd5b506104f0610cad36600461421a565b6001600160a01b031660009081526021602052604090205490565b348015610cd457600080fd5b5061075d610ce3366004613f85565b612242565b348015610cf457600080fd5b506104f0600a81565b348015610d0957600080fd5b506104f0610d18366004613f85565b6122b4565b348015610d2957600080fd5b506104f060035481565b348015610d3f57600080fd5b506106c4610d4e366004613f85565b612314565b348015610d5f57600080fd5b50610d68612376565b6040516104fa91906148b3565b348015610d8157600080fd5b50610d95610d90366004613f85565b6123c7565b6040516104fa91906148cd565b348015610dae57600080fd5b506106c4610dbd366004613f85565b6126e7565b348015610dce57600080fd5b506107aa610ddd36600461421a565b601f6020526000908152604090205460ff1681565b348015610dfe57600080fd5b5061075d612747565b348015610e1357600080fd5b506106f1610e22366004614c3c565b612877565b348015610e3357600080fd5b506104f0610e42366004614c3c565b612a5e565b348015610e5357600080fd5b506106f1610e62366004613f85565b612a71565b348015610e7357600080fd5b506104f060045481565b348015610e8957600080fd5b506104f0610e9836600461421a565b601d6020526000908152604090205481565b348015610eb657600080fd5b506104f0612b07565b348015610ecb57600080fd5b506106c4612b19565b348015610ee057600080fd5b506106f1612b6f565b348015610ef557600080fd5b506104f0600e5481565b348015610f0b57600080fd5b5061056b73dc652c746a8f85e18ce632d97c6118e8a52fa73881565b348015610f3357600080fd5b506106c4612c33565b348015610f4857600080fd5b506106f1610f57366004614c70565b612c89565b348015610f6857600080fd5b506106f1610f7736600461421a565b612e08565b348015610f8857600080fd5b506104f0610f97366004613f85565b612e8d565b348015610fa857600080fd5b506104f0610fb7366004614736565b612e9d565b348015610fc857600080fd5b506107aa610fd7366004613f85565b60176020526000908152604090205460ff1681565b6104f0610ffa366004614cb1565b612eb9565b34801561100b57600080fd5b506104f0600c5481565b601960205260009081526040902080546001820180546001600160a01b03831693600160a01b90930460ff1692919061104d90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461107990614d0c565b80156110c65780601f1061109b576101008083540402835291602001916110c6565b820191906000526020600020905b8154815290600101906020018083116110a957829003601f168201915b5050604080516020808201835260028801546001600160a01b03168252825160038901805460609381028301840186529482018581529899939893975090955093508492849184018282801561114557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611127575b505050505081526020016001820154815250509080600501604051806060016040529081600082018054806020026020016040519081016040528092919081815260200182805480156111c157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111a3575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101561129b57838290600052602060002001805461120e90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461123a90614d0c565b80156112875780601f1061125c57610100808354040283529160200191611287565b820191906000526020600020905b81548152906001019060200180831161126a57829003601f168201915b5050505050815260200190600101906111ef565b505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156112f257602002820191906000526020600020905b8154815260200190600101908083116112de575b505050505081525050905086565b6016818154811061131057600080fd5b600091825260209091200154905081565b6005805461132e90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461135a90614d0c565b80156113a75780601f1061137c576101008083540402835291602001916113a7565b820191906000526020600020905b81548152906001019060200180831161138a57829003601f168201915b505050505081565b6113e3604051806080016040528060006001600160a01b031681526020016000815260200160008152602001606081525090565b600082815260276020908152604091829020825160808101845281546001600160a01b0316815260018201549281019290925260028101549282019290925260038201805491929160608401919061143a90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461146690614d0c565b80156114b35780601f10611488576101008083540402835291602001916114b3565b820191906000526020600020905b81548152906001019060200180831161149657829003601f168201915b5050505050815250509050919050565b601b81815481106114d357600080fd5b6000918252602090912001546001600160a01b0316905081565b6060601680548060200260200160405190810160405280929190818152602001828054801561153b57602002820191906000526020600020905b815481526020019060010190808311611527575b5050505050905090565b6007546001600160a01b031633146115705760405163141dbb4960e21b815260040160405180910390fd5b600461157a612376565b600481111561158b5761158b61489d565b14806115af5750600261159c612376565b60048111156115ad576115ad61489d565b145b156115cd576040516398fe99a560e01b815260040160405180910390fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b60408051608081018252338152426020820152908101839052606081018290526000908161161c8261191b565b6025805460018082019092557f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c01829055600082815260276020908152604091829020865181546001600160a01b0319166001600160a01b03909116178155908601519281019290925584015160028201556060840151919250839160038201906116a79082614d8e565b505050600085815260286020908152604080832080546001810182559084529190922001829055517f5a1a930fed43f34b3a07db782ebcac28a661c273e662bb98458cfba5a8ccd220906116fe9083815260200190565b60405180910390a19150505b92915050565b6001600160a01b0383166000908152601f602052604090205460ff1661177a5760035460000361173f57505050565b61175583678ac7230489e800008484600061180c565b506001600160a01b0383166000908152601f60205260409020805460ff191660011790555b505050565b6000600a5461178c612b07565b6117969190614e63565b905090565b6060601c80548060200260200160405190810160405280929190818152602001828054801561153b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117d5575050505050905090565b6002818154811061131057600080fd5b6040516bffffffffffffffffffffffff19606087901b16602082015260348101859052600090819060540160405160208183030381529060405280519060200120905060008361189c57611897868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506003549150859050612ef9565b6118dd565b6118dd868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506004549150859050612ef9565b9050806118fd5760405163452c2df160e11b815260040160405180910390fd5b506001979650505050505050565b6026818154811061131057600080fd5b60008160405160200161192e9190614199565b60408051601f19818403018152919052805160209091012092915050565b60008061195a600186612f0f565b60008981526017602052604090205490915060ff161561198d576040516358f1119560e01b815260040160405180910390fd5b61199933878686611adf565b6119a281612fdb565b6119ae883389886130e2565b98975050505050505050565b6119c660026001614e63565b81565b60608060006119d6612c33565b9050600081516001600160401b038111156119f3576119f3614237565b604051908082528060200260200182016040528015611a3857816020015b6040805180820190915260008082526020820152815260200190600190039081611a115790505b50905060005b8251811015611ac55760226000848381518110611a5d57611a5d614e76565b6020026020010151815260200190815260200160002060000160405180604001604052908160008201548152602001600182015481525050828281518110611aa757611aa7614e76565b60200260200101819052508080611abd90614e8c565b915050611a3e565b5090939092509050565b601c81815481106114d357600080fd5b60045415801590611b0957506001600160a01b0384166000908152601e602052604090205460ff16155b15611b4e57611b1c84848484600161180c565b506001600160a01b0384166000908152601d60209081526040808320869055601e9091529020805460ff191660011790555b50505050565b3373dc652c746a8f85e18ce632d97c6118e8a52fa73814611b885760405163de07280160e01b815260040160405180910390fd5b6004611b92612376565b6004811115611ba357611ba361489d565b1480611bc757506002611bb4612376565b6004811115611bc557611bc561489d565b145b15611be5576040516398fe99a560e01b815260040160405180910390fd5b600455565b600081600003611c0d57604051630ec90a1760e31b815260040160405180910390fd5b60028054604080516020808402820181019092528281529192600092918490830182828015611c5b57602002820191906000526020600020905b815481526020019060010190808311611c47575b5050505050905060006001905060005b83811015611cd757611ca2838281518110611c8857611c88614e76565b602002602001015160009081526023602052604090205490565b15611cc557858203611cb75795945050505050565b81611cc181614e8c565b9250505b80611ccf81614e8c565b915050611c6b565b50604051632cc2ab7360e11b815260040160405180910390fd5b6060602680548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6014805461132e90614d0c565b600080611d62600184612f0f565b60008681526017602052604090205490915060ff1615611d95576040516358f1119560e01b815260040160405180910390fd5b60045415801590611db65750336000908152601e602052604090205460ff16155b15611dd45760405163126ec6d160e31b815260040160405180910390fd5b611ddd81612fdb565b611de9853386866130e2565b95945050505050565b60008281526022602090815260408083206001600160a01b0385168452600301909152902080546001909101545b9250929050565b6060600280548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b60236020528160005260406000208181548110611e9957600080fd5b90600052602060002001600091509150505481565b6006805461132e90614d0c565b60276020526000908152604090208054600182015460028301546003840180546001600160a01b03909416949293919291611ef590614d0c565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2190614d0c565b8015611f6e5780601f10611f4357610100808354040283529160200191611f6e565b820191906000526020600020905b815481529060010190602001808311611f5157829003601f168201915b5050505050905084565b600254600090611f8a90600190614ea5565b821115611faa576040516365d6f35160e11b815260040160405180910390fd5b60005b611fb8836001614e63565b811015612015576001611ff460028381548110611fd757611fd7614e76565b906000526020600020015460009081526023602052604090205490565b11156120035750600192915050565b8061200d81614e8c565b915050611fad565b50600092915050565b6060601b80548060200260200160405190810160405280929190818152602001828054801561153b576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116117d5575050505050905090565b6015818154811061131057600080fd5b60008061209c600080612f0f565b600354909150156120d757336000908152601f602052604090205460ff166120d757604051631f22097560e01b815260040160405180910390fd5b6120e3610e2284614eb8565b60006120f66120f185614eb8565b613229565b905061210182612fdb565b9392505050565b805160005b8181101561220657600083828151811061212957612129614e76565b60209081029190910101516007549091506001600160a01b0316331480159061216957506000818152602760205260409020546001600160a01b03163314155b1561218f57604051635450763d60e11b8152600481018290526024015b60405180910390fd5b60008181526029602052604090205460ff166121f3576000818152602960205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594018190555b50806121fe81614e8c565b91505061210d565b507f788a4349d25bc08585923ae212bce8bb346a623bce753eeecb85fd9ce58dcb4b8260405161223691906141e2565b60405180910390a15050565b60008181526022602090815260409182902060028101805484518185028101850190955280855260609492938301828280156122a757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612289575b5050505050915050919050565b6000818152602360205260408120546001146122e357604051633832a15560e21b815260040160405180910390fd5b6000828152602360205260408120805490919061230257612302614e76565b90600052602060002001549050919050565b60008181526028602090815260409182902080548351818402810184019094528084526060939283018282801561236a57602002820191906000526020600020905b815481526020019060010190808311612356575b50505050509050919050565b60185460009060ff161561238a5750600290565b42600854106123995750600090565b426123a2612b07565b106123ad5750600390565b426123b661177f565b106123c15750600190565b50600490565b6123cf613d8d565b600082815260196020908152604091829020825160c08101845281546001600160a01b0381168252600160a01b900460ff16151592810192909252600181018054929391929184019161242190614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461244d90614d0c565b801561249a5780601f1061246f5761010080835404028352916020019161249a565b820191906000526020600020905b81548152906001019060200180831161247d57829003601f168201915b5050509183525050604080516020818101835260028501546001600160a01b0316825280840191909152815160038501805460609381028301840185528285018181529490950194919390928492849184018282801561252357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612505575b50505050508152602001600182015481525050815260200160058201604051806060016040529081600082018054806020026020016040519081016040528092919081815260200182805480156125a357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612585575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101561267d5783829060005260206000200180546125f090614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461261c90614d0c565b80156126695780601f1061263e57610100808354040283529160200191612669565b820191906000526020600020905b81548152906001019060200180831161264c57829003601f168201915b5050505050815260200190600101906125d1565b505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156126d457602002820191906000526020600020905b8154815260200190600101908083116126c0575b5050509190925250505090525092915050565b60008181526023602090815260409182902080548351818402810184019094528084526060939283018282801561236a57602002820191906000526020600020908154815260200190600101908083116123565750505050509050919050565b60606000601680548060200260200160405190810160405280929190818152602001828054801561279757602002820191906000526020600020905b815481526020019060010190808311612783575b50505050509050600081516001600160401b038111156127b9576127b9614237565b6040519080825280602002602001820160405280156127e2578160200160208202803683370190505b50905060005b8251811015612870576019600084838151811061280757612807614e76565b6020026020010151815260200190815260200160002060000160009054906101000a90046001600160a01b031682828151811061284657612846614e76565b6001600160a01b03909216602092830291909101909101528061286881614e8c565b9150506127e8565b5092915050565b80516001600160a01b031633146128b557805160405163fbbf4d7f60e01b81526001600160a01b039091166004820152336024820152604401612186565b60005b6128c460026001614e63565b811015612a345760008160028111156128df576128df61489d565b905060008160028111156128f5576128f561489d565b036129005750612a22565b60018160028111156129145761291461489d565b0361296e57608083015151516000036129405760405163c3b2798b60e01b815260040160405180910390fd5b826080015160200151600003612969576040516392fb9a3560e01b815260040160405180910390fd5b612a20565b60028160028111156129825761298261489d565b03612a055760a08301515151600a10156129af57604051631e38b1b160e11b815260040160405180910390fd5b600a8360a00151602001515111156129da5760405163a3b7dd7760e01b815260040160405180910390fd5b600a8360a00151604001515111156129695760405163f696406560e01b815260040160405180910390fd5b8060405163d2277d4960e01b81526004016121869190614ec4565b505b80612a2c81614e8c565b9150506128b8565b50806040015151600003612a5b5760405163e182473360e01b815260040160405180910390fd5b50565b60008160405160200161192e91906148cd565b3373dc652c746a8f85e18ce632d97c6118e8a52fa73814612aa55760405163de07280160e01b815260040160405180910390fd5b6004612aaf612376565b6004811115612ac057612ac061489d565b1480612ae457506002612ad1612376565b6004811115612ae257612ae261489d565b145b15612b02576040516398fe99a560e01b815260040160405180910390fd5b600355565b60006009546008546117969190614e63565b6060602580548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6007546001600160a01b03163314801590612b9e57503373dc652c746a8f85e18ce632d97c6118e8a52fa73814155b15612bbc576040516301dbf46f60e71b815260040160405180910390fd5b6000612bc6612376565b90506002816004811115612bdc57612bdc61489d565b03612bfa57604051636f79584d60e01b815260040160405180910390fd5b6018805460ff191660011790556040517f4cd963a081760a54f571abc0f1db4dde31b4a07d8d6da3e844b8c6f47eeaaa4290600090a150565b6060601580548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6007546001600160a01b03163314612cb45760405163b8d4540960e01b815260040160405180910390fd5b6004612cbe612376565b6004811115612ccf57612ccf61489d565b1480612cf357506002612ce0612376565b6004811115612cf157612cf161489d565b145b15612d1157604051631e71d28360e21b815260040160405180910390fd5b60005b81811015612db6576000838383818110612d3057612d30614e76565b60209081029290920135600081815260179093526040909220549192505060ff16612da3576000818152601760205260408120805460ff191660019081179091556016805491820181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289018190555b5080612dae81614e8c565b915050612d14565b50600d54158015612dc957506000546001145b15612dd857612dd88282613500565b7f75a75cf5c561892f4cc5b26c1b8e933849b42238c96dd073d080d1ae96c5141660156040516122369190614ed8565b6007546001600160a01b03163314612e3357604051630f4cb1bd60e11b815260040160405180910390fd5b602480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f753a2cf8d360cff631674504210913e48247f8e56b3e6d2006c2103d4095999f9101612236565b6025818154811061131057600080fd5b60286020528160005260406000208181548110611e9957600080fd5b600080612ec7600080612f0f565b9050612ed4338585611710565b612ee0610e2286614eb8565b6000612eee6120f187614eb8565b9050611de982612fdb565b600082612f06858461355d565b14949350505050565b60008080846001811115612f2557612f2561489d565b03612f335750600f54612fb2565b6001846001811115612f4757612f4761489d565b03612fae57601154600103612fa557670de0b6b3a7640000831015612f7f576040516346ddb8d160e01b815260040160405180910390fd5b612f91670de0b6b3a764000084614f13565b601054612f9e9190614f35565b9050612fb2565b50601054612fb2565b5060005b803414612101576040516372c3eaa760e01b815234600482015260248101829052604401612186565b8015612a5b5760006064600e546064612ff49190614ea5565b612ffe9034614f35565b6130089190614f13565b9050801561306d57601354613026906001600160a01b0316826135aa565b601354604080516001600160a01b039092168252602082018390527f9df63d1c00d2e332f573be591c0579caafb256b2c5a17abcc8ad471cccda1b81910160405180910390a15b60006130798234614ea5565b9050801561177a57601254613097906001600160a01b0316826135aa565b600754604080516001600160a01b039092168252602082018390527f6dff55337c8458ae8c536a63869a48bc33541733422a796390c131d91f4238ed910160405180910390a1505050565b600060016130ee612376565b60048111156130ff576130ff61489d565b146131265761310c612376565b60405163049cab4960e51b815260040161218691906148b3565b816000036131475760405163502e1c2960e01b815260040160405180910390fd5b61317985858585601d60008a6001600160a01b03166001600160a01b03168152602001908152602001600020546136c3565b601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b031916331790556040805186815260ff851660208201529081018390526001600160a01b038516907f2c9deb38f462962eadbd85a9d3a4120503ee091f1582eaaa10aa8c6797651d299060600160405180910390a25050506001600160a01b03166000908152601d6020526040902054919050565b60006003613235612376565b60048111156132465761324661489d565b1461326d57613253612376565b604051632889531360e01b815260040161218691906148b3565b600b54336000908152601a6020526040902054036132a457600b54604051632bd6d93960e21b815260040161218691815260200190565b600c546016546015546132b79190614ea5565b036132db57600c546040516302217f5360e51b815260040161218691815260200190565b60006132e683612a5e565b600081815260196020526040902054909150600160a01b900460ff16156133235760405163baffc42360e01b815260048101829052602401612186565b6015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750182905560008281526019602090815260409182902086518154928801511515600160a01b026001600160a81b03199093166001600160a01b03909116179190911781559085015185928201906133a79082614d8e565b506060820151516002820180546001600160a01b0319166001600160a01b0390921691909117905560808201518051805160038401916133ec91839160200190613e27565b5060209182015160019091015560a083015180518051919260058501926134169284920190613e27565b50602082810151805161342f9260018501920190613e8c565b506040820151805161344b916002840191602090910190613ede565b5050336000908152601a60205260408120805460019550909350909150613473908490614e63565b9091555050601b80546001810182556000919091527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319163390811790915560408085015190517f7585f467599d0f008985f231af99293be388626ac16ca59505c2f8f88969cd63926134f2928592614f4c565b60405180910390a192915050565b60005b8181101561177a57600083838381811061351f5761351f614e76565b602090810292909201356000818152602290935260409092205491925061354890508282613938565b5050808061355590614e8c565b915050613503565b600081815b84518110156135a25761358e8286838151811061358157613581614e76565b6020026020010151613a69565b91508061359a81614e8c565b915050613562565b509392505050565b804710156135fa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401612186565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613647576040519150601f19603f3d011682016040523d82523d6000602084013e61364c565b606091505b505090508061177a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401612186565b60008581526022602052604090206004541580159061370357506001600160a01b0385166000908152602160205260409020546137009083614ea5565b83115b156137215760405163660fa07360e11b815260040160405180910390fd5b6001600160a01b038516600090815260038201602052604081205415801561376457506001600160a01b0386166000908152600383016020526040902060010154155b905060ff85166137bc57815484908390600090613782908490614e63565b90915550506001600160a01b0386166000908152600383016020526040812080548692906137b1908490614e63565b9091555061384d9050565b60001960ff86160161383457600d546001146137eb57604051639755958f60e01b815260040160405180910390fd5b838260000160010160008282546138029190614e63565b90915550506001600160a01b0386166000908152600383016020526040812060010180548692906137b1908490614e63565b604051638eed55d160e01b815260040160405180910390fd5b801561388457600282018054600181018255600091825260209091200180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b038616600090815260216020526040812080548692906138ac908490614e63565b9250508190555083602060008282546138c59190614e63565b9091555050600d541580156138dc57506000546001145b1561392f57815460006138ef8683614ea5565b90508015613901576139018982613938565b60008281526023602090815260408220805460018101825590835291200189905561392c8183613a98565b50505b50505050505050565b60008181526023602090815260408083208054825181850281018501909352808352919290919083018282801561398e57602002820191906000526020600020905b81548152602001906001019080831161397a575b5050505050905060005b8151811015611b4e57838282815181106139b4576139b4614e76565b602002602001015103613a575781600183516139d09190614ea5565b815181106139e0576139e0614e76565b6020026020010151602360008581526020019081526020016000208281548110613a0c57613a0c614e76565b906000526020600020018190555060236000848152602001908152602001600020805480613a3c57613a3c614f76565b60019003818190600052602060002001600090559055611b4e565b80613a6181614e8c565b915050613998565b6000818310613a85576000828152602084905260409020612101565b6000838152602083905260409020612101565b60028054604080516020808402820181019092528281529192600092918490830182828015613ae657602002820191906000526020600020905b815481526020019060010190808311613ad2575b5050505050905081600003613b2d575050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015550565b80613b39600184614ea5565b81518110613b4957613b49614e76565b6020026020010151831015613b9f576001548203613b675750505050565b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015550565b611b4e848484846000805b83811015613c1457828181518110613bc457613bc4614e76565b60200260200101518503613bd9575050611b4e565b828181518110613beb57613beb614e76565b6020026020010151851115613c0257809150613c14565b80613c0c81614e8c565b915050613baa565b5060008086118015613c325750600086815260236020526040902054155b90506000818015613c5b575086848481518110613c5157613c51614e76565b6020026020010151145b613d6457613c6a600186614ea5565b8314613d12576000613c7d846001614e63565b90505b85811015613d105784613c94600183614ea5565b81518110613ca457613ca4614e76565b602002602001015160028281548110613cbf57613cbf614e76565b600091825260209091200155828015613cf0575087858281518110613ce657613ce6614e76565b6020026020010151145b15613cfe5760019150613d10565b80613d0881614e8c565b915050613c80565b505b80158015613d21575060015485105b15613d6457600284613d34600188614ea5565b81518110613d4457613d44614e76565b602090810291909101810151825460018101845560009384529190922001555b8560028481548110613d7857613d78614e76565b60009182526020909120015550505050505050565b6040518060c0016040528060006001600160a01b0316815260200160001515815260200160608152602001613dd7604051806020016040528060006001600160a01b031681525090565b8152602001613df9604051806040016040528060608152602001600081525090565b8152602001613e2260405180606001604052806060815260200160608152602001606081525090565b905290565b828054828255906000526020600020908101928215613e7c579160200282015b82811115613e7c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613e47565b50613e88929150613f19565b5090565b828054828255906000526020600020908101928215613ed2579160200282015b82811115613ed25782518290613ec29082614d8e565b5091602001919060010190613eac565b50613e88929150613f2e565b828054828255906000526020600020908101928215613e7c579160200282015b82811115613e7c578251825591602001919060010190613efe565b5b80821115613e885760008155600101613f1a565b80821115613e88576000613f428282613f4b565b50600101613f2e565b508054613f5790614d0c565b6000825580601f10613f67575050565b601f016020900490600052602060002090810190612a5b9190613f19565b600060208284031215613f9757600080fd5b5035919050565b6000815180845260005b81811015613fc457602081850181015186830182015201613fa8565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b8381101561401d5781516001600160a01b031687529582019590820190600101613ff8565b509495945050505050565b600081516040845261403d6040850182613fe4565b602093840151949093019390935250919050565b600081518084526020808501945080840160005b8381101561401d57815187529582019590820190600101614065565b60008151606084526140966060850182613fe4565b9050602080840151858303828701528281518085528385019150838160051b860101848401935060005b828110156140ee57601f198783030184526140dc828651613f9e565b948601949386019391506001016140c0565b506040880151955088810360408a01526141088187614051565b9998505050505050505050565b600060018060a01b038089168352871515602084015260c0604084015261413f60c0840188613f9e565b818751166060850152838103608085015261415a8187614028565b91505082810360a08401526141088185614081565b6020815260006121016020830184613f9e565b81518152602080830151908201526040810161170a565b6020815260018060a01b0382511660208201526020820151604082015260408201516060820152600060608301516080808401526141da60a0840182613f9e565b949350505050565b6020815260006121016020830184614051565b6001600160a01b0381168114612a5b57600080fd5b8035614215816141f5565b919050565b60006020828403121561422c57600080fd5b8135612101816141f5565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561426f5761426f614237565b60405290565b60405160c081016001600160401b038111828210171561426f5761426f614237565b604051601f8201601f191681016001600160401b03811182821017156142bf576142bf614237565b604052919050565b600082601f8301126142d857600080fd5b81356001600160401b038111156142f1576142f1614237565b614304601f8201601f1916602001614297565b81815284602083860101111561431957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561434957600080fd5b8235915060208301356001600160401b0381111561436657600080fd5b614372858286016142c7565b9150509250929050565b60008083601f84011261438e57600080fd5b5081356001600160401b038111156143a557600080fd5b6020830191508360208260051b8501011115611e2057600080fd5b6000806000604084860312156143d557600080fd5b83356143e0816141f5565b925060208401356001600160401b038111156143fb57600080fd5b6144078682870161437c565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156144555783516001600160a01b031683529284019291840191600101614430565b50909695505050505050565b8035801515811461421557600080fd5b60008060008060006080868803121561448957600080fd5b8535614494816141f5565b94506020860135935060408601356001600160401b038111156144b657600080fd5b6144c28882890161437c565b90945092506144d5905060608701614461565b90509295509295909350565b6000602082840312156144f357600080fd5b81356001600160401b038082111561450a57600080fd5b908301906080828603121561451e57600080fd5b60405160808101818110838211171561453957614539614237565b6040528235614547816141f5565b80825250602083013560208201526040830135604082015260608301358281111561457157600080fd5b61457d878286016142c7565b60608301525095945050505050565b803560ff8116811461421557600080fd5b60008060008060008060a087890312156145b657600080fd5b863595506145c66020880161458c565b9450604087013593506060870135925060808701356001600160401b038111156145ef57600080fd5b6145fb89828a0161437c565b979a9699509497509295939492505050565b6000604080835261462081840186614051565b83810360208581019190915285518083528682019282019060005b818110156146685761465883865180518252602090810151910152565b938301939185019160010161463b565b509098975050505050505050565b6000806000806060858703121561468c57600080fd5b8435614697816141f5565b93506020850135925060408501356001600160401b038111156146b957600080fd5b6146c58782880161437c565b95989497509550505050565b6000806000606084860312156146e657600080fd5b833592506146f66020850161458c565b9150604084013590509250925092565b6000806040838503121561471957600080fd5b82359150602083013561472b816141f5565b809150509250929050565b6000806040838503121561474957600080fd5b50508035926020909101359150565b60018060a01b03851681528360208201528260408201526080606082015260006147856080830184613f9e565b9695505050505050565b600060c082840312156147a157600080fd5b50919050565b6000602082840312156147b957600080fd5b81356001600160401b038111156147cf57600080fd5b6141da8482850161478f565b60006001600160401b038211156147f4576147f4614237565b5060051b60200190565b600082601f83011261480f57600080fd5b8135602061482461481f836147db565b614297565b82815260059290921b8401810191818101908684111561484357600080fd5b8286015b8481101561485e5780358352918301918301614847565b509695505050505050565b60006020828403121561487b57600080fd5b81356001600160401b0381111561489157600080fd5b6141da848285016147fe565b634e487b7160e01b600052602160045260246000fd5b60208101600583106148c7576148c761489d565b91905290565b60208152600060018060a01b03808451166020840152602084015115156040840152604084015160c0606085015261490860e0850182613f9e565b90508160608601515116608085015260808501519150601f19808583030160a08601526149358284614028565b925060a08601519150808584030160c086015250611de98282614081565b60006020828403121561496557600080fd5b604051602081018181106001600160401b038211171561498757614987614237565b6040529050808235614998816141f5565b905292915050565b600082601f8301126149b157600080fd5b813560206149c161481f836147db565b82815260059290921b840181019181810190868411156149e057600080fd5b8286015b8481101561485e5780356149f7816141f5565b83529183019183016149e4565b600060408284031215614a1657600080fd5b604051604081016001600160401b038282108183111715614a3957614a39614237565b816040528293508435915080821115614a5157600080fd5b50614a5e858286016149a0565b825250602083013560208201525092915050565b600060608284031215614a8457600080fd5b614a8c61424d565b905081356001600160401b0380821115614aa557600080fd5b614ab1858386016149a0565b8352602091508184013581811115614ac857600080fd5b8401601f81018613614ad957600080fd5b8035614ae761481f826147db565b81815260059190911b82018401908481019088831115614b0657600080fd5b8584015b83811015614b3e57803586811115614b225760008081fd5b614b308b89838901016142c7565b845250918601918601614b0a565b508086880152505050506040840135915080821115614b5c57600080fd5b50614b69848285016147fe565b60408301525092915050565b600060c08284031215614b8757600080fd5b614b8f614275565b9050614b9a8261420a565b8152614ba860208301614461565b602082015260408201356001600160401b0380821115614bc757600080fd5b614bd3858386016142c7565b6040840152614be58560608601614953565b60608401526080840135915080821115614bfe57600080fd5b614c0a85838601614a04565b608084015260a0840135915080821115614c2357600080fd5b50614c3084828501614a72565b60a08301525092915050565b600060208284031215614c4e57600080fd5b81356001600160401b03811115614c6457600080fd5b6141da84828501614b75565b60008060208385031215614c8357600080fd5b82356001600160401b03811115614c9957600080fd5b614ca58582860161437c565b90969095509350505050565b600080600060408486031215614cc657600080fd5b83356001600160401b0380821115614cdd57600080fd5b614ce98783880161478f565b94506020860135915080821115614cff57600080fd5b506144078682870161437c565b600181811c90821680614d2057607f821691505b6020821081036147a157634e487b7160e01b600052602260045260246000fd5b601f82111561177a57600081815260208120601f850160051c81016020861015614d675750805b601f850160051c820191505b81811015614d8657828155600101614d73565b505050505050565b81516001600160401b03811115614da757614da7614237565b614dbb81614db58454614d0c565b84614d40565b602080601f831160018114614df05760008415614dd85750858301515b600019600386901b1c1916600185901b178555614d86565b600085815260208120601f198616915b82811015614e1f57888601518255948401946001909101908401614e00565b5085821015614e3d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111561170a5761170a614e4d565b634e487b7160e01b600052603260045260246000fd5b600060018201614e9e57614e9e614e4d565b5060010190565b8181038181111561170a5761170a614e4d565b600061170a3683614b75565b60208101600383106148c7576148c761489d565b6020808252825482820181905260008481528281209092916040850190845b8181101561445557835483526001938401939285019201614ef7565b600082614f3057634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761170a5761170a614e4d565b8381526001600160a01b0383166020820152606060408201819052600090611de990830184613f9e565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220ca65dc4df782810f3b2446949a961894eeb141ba020da8bc308cea9329cfdb4f64736f6c63430008130033","sourceMap":"248:1066:34:-:0;;;448:864;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;724:35;;:50;;;;776:45;;;;;724:35;2151:32:40;;;;2193:9;:22;1001:20:39;:44;;;1070:16;:36;;;666:5:34;673:7;682:16;6215:4:35;:12;666:5:34;6215:4:35;:12;:::i;:::-;-1:-1:-1;6237:6:35;:16;6246:7;6237:6;:16;:::i;:::-;-1:-1:-1;6263:7:35;:20;;6273:10;-1:-1:-1;;;;;;6263:20:35;;;;;;;6308:35;;:48;;6293:12;:63;6380:47;;;;;6366:11;:61;6452:48;;;;;6437:12;:63;6542:65;;;;;6510:29;:97;6636:52;;;;6617:16;:71;6718:53;;;;6698:17;:73;6263:20;6803:55;;;6781:19;:77;6884:49;;;;6868:13;:65;6956:46;;;;6943:10;:59;7025:46;;;;;7012:10;:59;7107:40;;;;7081:23;:66;;;;-1:-1:-1;;;;;7081:66:35;;;;;;7182:39;;;;7157:22;:64;;;;;;;;;;;7254:37;;;7231:20;;:60;;:20;:60;:::i;:::-;-1:-1:-1;7336:7:35;;;;;;;;;;;-1:-1:-1;;;7336:7:35;;;;;;;;7421:35;;:48;;7483:47;;;;7544:48;;;;7307:295;;;;;;7336:7;7357:5;;7376:7;;7397:10;;7544:48;7307:295;:::i;:::-;;;;;;;;-1:-1:-1;;924:35:34;;:50:::3;;::::0;978:1:::3;924:55;::::0;-1:-1:-1;924:133:34;::::3;;;-1:-1:-1::0;999:35:34;;:53:::3;;::::0;1056:1:::3;999:58;924:133;907:234;;;1089:41;;-1:-1:-1::0;;;1089:41:34::3;;;;;;;;;;;907:234;1154:22:::0;;:77;::::3;;;-1:-1:-1::0;1180:35:34;;:46:::3;;::::0;:51;1154:77:::3;1150:156;;;1254:41;;-1:-1:-1::0;;;1254:41:34::3;;;;;;;;;;;1150:156;448:864:::0;;;;;248:1066;;14:127:44;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:252;218:2;212:9;260:3;248:16;;-1:-1:-1;;;;;279:34:44;;315:22;;;276:62;273:88;;;341:18;;:::i;:::-;377:2;370:22;146:252;:::o;403:250::-;470:2;464:9;512:6;500:19;;-1:-1:-1;;;;;534:34:44;;570:22;;;531:62;528:88;;;596:18;;:::i;658:250::-;743:1;753:113;767:6;764:1;761:13;753:113;;;843:11;;;837:18;824:11;;;817:39;789:2;782:10;753:113;;;-1:-1:-1;;900:1:44;882:16;;875:27;658:250::o;913:699::-;967:5;1020:3;1013:4;1005:6;1001:17;997:27;987:55;;1038:1;1035;1028:12;987:55;1061:13;;-1:-1:-1;;;;;1123:10:44;;;1120:36;;;1136:18;;:::i;:::-;1211:2;1205:9;1179:2;1265:13;;-1:-1:-1;;1261:22:44;;;1285:2;1257:31;1253:40;1241:53;;;1309:18;;;1329:22;;;1306:46;1303:72;;;1355:18;;:::i;:::-;1395:10;1391:2;1384:22;1430:2;1422:6;1415:18;1476:3;1469:4;1464:2;1456:6;1452:15;1448:26;1445:35;1442:55;;;1493:1;1490;1483:12;1442:55;1506:76;1579:2;1572:4;1564:6;1560:17;1553:4;1545:6;1541:17;1506:76;:::i;:::-;1600:6;913:699;-1:-1:-1;;;;;;913:699:44:o;1617:177::-;1696:13;;-1:-1:-1;;;;;1738:31:44;;1728:42;;1718:70;;1784:1;1781;1774:12;1718:70;1617:177;;;:::o;1799:2202::-;1959:6;1967;1975;1983;1991;2044:3;2032:9;2023:7;2019:23;2015:33;2012:53;;;2061:1;2058;2051:12;2012:53;2088:16;;-1:-1:-1;;;;;2153:14:44;;;2150:34;;;2180:1;2177;2170:12;2150:34;2203:61;2256:7;2247:6;2236:9;2232:22;2203:61;:::i;:::-;2193:71;;2310:2;2299:9;2295:18;2289:25;2273:41;;2339:2;2329:8;2326:16;2323:36;;;2355:1;2352;2345:12;2323:36;2378:63;2433:7;2422:8;2411:9;2407:24;2378:63;:::i;:::-;2368:73;;2481:2;2470:9;2466:18;2460:25;2450:35;;2525:2;2514:9;2510:18;2504:25;2494:35;;2575:3;2564:9;2560:19;2554:26;2538:42;;2605:2;2595:8;2592:16;2589:36;;;2621:1;2618;2611:12;2589:36;2644:24;;;;2687:16;;;2723:6;2715:15;;2712:35;;;2743:1;2740;2733:12;2712:35;2769:22;;:::i;:::-;2810:6;2836:2;2832;2828:11;2825:31;;;2852:1;2849;2842:12;2825:31;2880:17;;:::i;:::-;2865:32;;2928:2;2922:9;2913:7;2906:26;2980:2;2976;2972:11;2966:18;2961:2;2952:7;2948:16;2941:44;3033:2;3029;3025:11;3019:18;3014:2;3005:7;3001:16;2994:44;3086:2;3082;3078:11;3072:18;3067:2;3058:7;3054:16;3047:44;3140:3;3136:2;3132:12;3126:19;3120:3;3111:7;3107:17;3100:46;3195:3;3191:2;3187:12;3181:19;3175:3;3166:7;3162:17;3155:46;3250:3;3246:2;3242:12;3236:19;3230:3;3221:7;3217:17;3210:46;3305:3;3301:2;3297:12;3291:19;3285:3;3276:7;3272:17;3265:46;3330:3;3381:2;3377;3373:11;3367:18;3362:2;3353:7;3349:16;3342:44;;3405:3;3456:2;3452;3448:11;3442:18;3437:2;3428:7;3424:16;3417:44;;3480:3;3531:2;3527;3523:11;3517:18;3512:2;3503:7;3499:16;3492:44;;3555:3;3606:2;3602;3598:11;3592:18;3587:2;3578:7;3574:16;3567:44;;3634:7;3627:5;3620:22;3674:42;3712:2;3708;3704:11;3674:42;:::i;:::-;3669:2;3662:5;3658:14;3651:66;;3749:43;3787:3;3783:2;3779:12;3749:43;:::i;:::-;3744:2;3737:5;3733:14;3726:67;3832:3;3828:2;3824:12;3818:19;3802:35;;3862:2;3852:8;3849:16;3846:36;;;3878:1;3875;3868:12;3846:36;3914:56;3962:7;3951:8;3947:2;3943:17;3914:56;:::i;:::-;3909:2;3902:5;3898:14;3891:80;3990:5;3980:15;;;;;;1799:2202;;;;;;;;:::o;4006:380::-;4085:1;4081:12;;;;4128;;;4149:61;;4203:4;4195:6;4191:17;4181:27;;4149:61;4256:2;4248:6;4245:14;4225:18;4222:38;4219:161;;4302:10;4297:3;4293:20;4290:1;4283:31;4337:4;4334:1;4327:15;4365:4;4362:1;4355:15;4219:161;;4006:380;;;:::o;4517:545::-;4619:2;4614:3;4611:11;4608:448;;;4655:1;4680:5;4676:2;4669:17;4725:4;4721:2;4711:19;4795:2;4783:10;4779:19;4776:1;4772:27;4766:4;4762:38;4831:4;4819:10;4816:20;4813:47;;;-1:-1:-1;4854:4:44;4813:47;4909:2;4904:3;4900:12;4897:1;4893:20;4887:4;4883:31;4873:41;;4964:82;4982:2;4975:5;4972:13;4964:82;;;5027:17;;;5008:1;4997:13;4964:82;;;4968:3;;;4608:448;4517:545;;;:::o;5238:1352::-;5358:10;;-1:-1:-1;;;;;5380:30:44;;5377:56;;;5413:18;;:::i;:::-;5442:97;5532:6;5492:38;5524:4;5518:11;5492:38;:::i;:::-;5486:4;5442:97;:::i;:::-;5594:4;;5658:2;5647:14;;5675:1;5670:663;;;;6377:1;6394:6;6391:89;;;-1:-1:-1;6446:19:44;;;6440:26;6391:89;-1:-1:-1;;5195:1:44;5191:11;;;5187:24;5183:29;5173:40;5219:1;5215:11;;;5170:57;6493:81;;5640:944;;5670:663;4464:1;4457:14;;;4501:4;4488:18;;-1:-1:-1;;5706:20:44;;;5824:236;5838:7;5835:1;5832:14;5824:236;;;5927:19;;;5921:26;5906:42;;6019:27;;;;5987:1;5975:14;;;;5854:19;;5824:236;;;5828:3;6088:6;6079:7;6076:19;6073:201;;;6149:19;;;6143:26;-1:-1:-1;;6232:1:44;6228:14;;;6244:3;6224:24;6220:37;6216:42;6201:58;6186:74;;6073:201;-1:-1:-1;;;;;6320:1:44;6304:14;;;6300:22;6287:36;;-1:-1:-1;5238:1352:44:o;6595:271::-;6637:3;6675:5;6669:12;6702:6;6697:3;6690:19;6718:76;6787:6;6780:4;6775:3;6771:14;6764:4;6757:5;6753:16;6718:76;:::i;:::-;6848:2;6827:15;-1:-1:-1;;6823:29:44;6814:39;;;;6855:4;6810:50;;6595:271;-1:-1:-1;;6595:271:44:o;6871:861::-;7228:3;7217:9;7210:22;7191:4;7255:46;7296:3;7285:9;7281:19;7273:6;7255:46;:::i;:::-;7349:9;7341:6;7337:22;7332:2;7321:9;7317:18;7310:50;7383:33;7409:6;7401;7383:33;:::i;:::-;7369:47;;7464:9;7456:6;7452:22;7447:2;7436:9;7432:18;7425:50;7492:33;7518:6;7510;7492:33;:::i;:::-;-1:-1:-1;;;;;7561:32:44;;;;7556:2;7541:18;;7534:60;-1:-1:-1;;7625:3:44;7610:19;;7603:35;;;;7581:3;7654:19;;7647:35;;;;7713:3;7698:19;;;7691:35;7484:41;6871:861;-1:-1:-1;;;6871:861:44:o;:::-;248:1066:34;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106104d55760003560e01c8063711effc811610281578063c19d93fb1161015a578063e11db9d8116100cc578063f4f3d7ec11610085578063f4f3d7ec14610f5c578063f5c3641114610f7c578063f61736f414610f9c578063f79c017214610fbc578063f823f11014610fec578063fb9bf8d414610fff57600080fd5b8063e11db9d814610ebf578063ea8a1af014610ed4578063edcd1be414610ee9578063eef18e1714610eff578063efa90d3614610f27578063f0a7db0a14610f3c57600080fd5b8063d140d9f01161011e578063d140d9f014610e07578063d798902514610e27578063daf762db14610e47578063dd96a19d14610e67578063dea5f6a614610e7d578063e031535b14610eaa57600080fd5b8063c19d93fb14610d53578063c7f758a814610d75578063c9a1b6b214610da2578063cb85395014610dc2578063cbdc27cb14610df257600080fd5b80639ba197af116101f3578063aec116b6116101b7578063aec116b614610c92578063b323580d14610cc8578063b382543f14610ce8578063b66d1da314610cfd578063bddc164114610d1d578063c05f410414610d3357600080fd5b80639ba197af14610bd5578063a1ac6cb214610c02578063ab5e694714610c2f578063ac67f80114610c42578063ae66b8ad14610c6257600080fd5b8063832009af11610245578063832009af14610b0a5780638ebb4c1514610b205780639174778c14610b50578063930de97914610b70578063946369b514610ba05780639b644a2314610bb557600080fd5b8063711effc814610a7257806375e509c514610a92578063785ddfe514610abf5780637c65d71114610adf5780637de418d514610af457600080fd5b80633932abb1116103b3578063544c7bb41161032557806360506ff6116102e957806360506ff6146109e957806360ed97a9146109ff57806365f1626314610a145780636e4eb81014610a275780636ed815ad14610a475780636fd3636b14610a5d57600080fd5b8063544c7bb41461091d578063544ffc9c1461093d57806354fd4d50146109875780635c7107d8146109b45780635cb718a1146109d457600080fd5b80634a587ad4116103775780634a587ad41461086f5780634d24a67f1461088f57806350a5e524146108a457806350c4b616146108c757806351a41dec146108e7578063531bd812146108fd57600080fd5b80633932abb1146107ec5780633f9942ff146108025780633fb57c921461081c578063409fd0301461083c578063419c533c1461085c57600080fd5b8063102613d81161044c578063262e59e911610410578063262e59e9146107335780632c39805f14610748578063325cc6d91461076a57806332763c221461078a578063347cf665146107ba578063366ecf5b146107d657600080fd5b8063102613d81461068f5780631242b737146106af578063146230f6146106d15780631805c523146106f357806320b3e8451461071357600080fd5b80630414126a1161049e5780630414126a1461059957806305846cae146105af57806306fdde03146105cf578063070dc5d9146105f15780630800e300146106425780630aa25e441461066f57600080fd5b80624114a8146104da578063013cf08b1461050357806302a251a31461053557806302d05d3f1461054b57806303f7eed614610583575b600080fd5b3480156104e657600080fd5b506104f060085481565b6040519081526020015b60405180910390f35b34801561050f57600080fd5b5061052361051e366004613f85565b611015565b6040516104fa96959493929190614115565b34801561054157600080fd5b506104f0600a5481565b34801561055757600080fd5b5060075461056b906001600160a01b031681565b6040516001600160a01b0390911681526020016104fa565b34801561058f57600080fd5b506104f060115481565b3480156105a557600080fd5b506104f060015481565b3480156105bb57600080fd5b506104f06105ca366004613f85565b611300565b3480156105db57600080fd5b506105e4611321565b6040516104fa919061416f565b3480156105fd57600080fd5b5061063561060c366004613f85565b602260209081526000918252604091829020825180840190935280548352600101549082015281565b6040516104fa9190614182565b34801561064e57600080fd5b5061066261065d366004613f85565b6113af565b6040516104fa9190614199565b34801561067b57600080fd5b5061056b61068a366004613f85565b6114c3565b34801561069b57600080fd5b5060135461056b906001600160a01b031681565b3480156106bb57600080fd5b506106c46114ed565b6040516104fa91906141e2565b3480156106dd57600080fd5b506106f16106ec36600461421a565b611545565b005b3480156106ff57600080fd5b506104f061070e366004614336565b6115ef565b34801561071f57600080fd5b506106f161072e3660046143c0565b611710565b34801561073f57600080fd5b506104f061177f565b34801561075457600080fd5b5061075d61179b565b6040516104fa9190614414565b34801561077657600080fd5b506104f0610785366004613f85565b6117fc565b34801561079657600080fd5b506107aa6107a5366004614471565b61180c565b60405190151581526020016104fa565b3480156107c657600080fd5b506104f0678ac7230489e8000081565b3480156107e257600080fd5b506104f060005481565b3480156107f857600080fd5b506104f060095481565b34801561080e57600080fd5b506018546107aa9060ff1681565b34801561082857600080fd5b506104f0610837366004613f85565b61190b565b34801561084857600080fd5b506104f06108573660046144e1565b61191b565b6104f061086a36600461459d565b61194c565b34801561087b57600080fd5b5060125461056b906001600160a01b031681565b34801561089b57600080fd5b506104f06119ba565b3480156108b057600080fd5b506108b96119c9565b6040516104fa92919061460d565b3480156108d357600080fd5b5061056b6108e2366004613f85565b611acf565b3480156108f357600080fd5b506104f060105481565b34801561090957600080fd5b506106f1610918366004614676565b611adf565b34801561092957600080fd5b506106f1610938366004613f85565b611b54565b34801561094957600080fd5b50610972610958366004613f85565b600090815260226020526040902080546001909101549091565b604080519283526020830191909152016104fa565b34801561099357600080fd5b506040805180820190915260048152631a17199960e11b60208201526105e4565b3480156109c057600080fd5b506104f06109cf366004613f85565b611bea565b3480156109e057600080fd5b506106c4611cf1565b3480156109f557600080fd5b506104f0600d5481565b348015610a0b57600080fd5b506105e4611d47565b6104f0610a223660046146d1565b611d54565b348015610a3357600080fd5b50610972610a42366004614706565b611df2565b348015610a5357600080fd5b506104f0600f5481565b348015610a6957600080fd5b506106c4611e27565b348015610a7e57600080fd5b506104f0610a8d366004614736565b611e7d565b348015610a9e57600080fd5b506104f0610aad36600461421a565b601a6020526000908152604090205481565b348015610acb57600080fd5b5060245461056b906001600160a01b031681565b348015610aeb57600080fd5b506105e4611eae565b348015610b0057600080fd5b506104f060205481565b348015610b1657600080fd5b506104f0600b5481565b348015610b2c57600080fd5b50610b40610b3b366004613f85565b611ebb565b6040516104fa9493929190614758565b348015610b5c57600080fd5b506107aa610b6b366004613f85565b611f78565b348015610b7c57600080fd5b506107aa610b8b36600461421a565b601e6020526000908152604090205460ff1681565b348015610bac57600080fd5b5061075d61201e565b348015610bc157600080fd5b506104f0610bd0366004613f85565b61207e565b348015610be157600080fd5b506104f0610bf0366004613f85565b60009081526023602052604090205490565b348015610c0e57600080fd5b506104f0610c1d36600461421a565b60216020526000908152604090205481565b6104f0610c3d3660046147a7565b61208e565b348015610c4e57600080fd5b506106f1610c5d366004614869565b612108565b348015610c6e57600080fd5b506107aa610c7d366004613f85565b60296020526000908152604090205460ff1681565b348015610c9e57600080fd5b506104f0610cad36600461421a565b6001600160a01b031660009081526021602052604090205490565b348015610cd457600080fd5b5061075d610ce3366004613f85565b612242565b348015610cf457600080fd5b506104f0600a81565b348015610d0957600080fd5b506104f0610d18366004613f85565b6122b4565b348015610d2957600080fd5b506104f060035481565b348015610d3f57600080fd5b506106c4610d4e366004613f85565b612314565b348015610d5f57600080fd5b50610d68612376565b6040516104fa91906148b3565b348015610d8157600080fd5b50610d95610d90366004613f85565b6123c7565b6040516104fa91906148cd565b348015610dae57600080fd5b506106c4610dbd366004613f85565b6126e7565b348015610dce57600080fd5b506107aa610ddd36600461421a565b601f6020526000908152604090205460ff1681565b348015610dfe57600080fd5b5061075d612747565b348015610e1357600080fd5b506106f1610e22366004614c3c565b612877565b348015610e3357600080fd5b506104f0610e42366004614c3c565b612a5e565b348015610e5357600080fd5b506106f1610e62366004613f85565b612a71565b348015610e7357600080fd5b506104f060045481565b348015610e8957600080fd5b506104f0610e9836600461421a565b601d6020526000908152604090205481565b348015610eb657600080fd5b506104f0612b07565b348015610ecb57600080fd5b506106c4612b19565b348015610ee057600080fd5b506106f1612b6f565b348015610ef557600080fd5b506104f0600e5481565b348015610f0b57600080fd5b5061056b73dc652c746a8f85e18ce632d97c6118e8a52fa73881565b348015610f3357600080fd5b506106c4612c33565b348015610f4857600080fd5b506106f1610f57366004614c70565b612c89565b348015610f6857600080fd5b506106f1610f7736600461421a565b612e08565b348015610f8857600080fd5b506104f0610f97366004613f85565b612e8d565b348015610fa857600080fd5b506104f0610fb7366004614736565b612e9d565b348015610fc857600080fd5b506107aa610fd7366004613f85565b60176020526000908152604090205460ff1681565b6104f0610ffa366004614cb1565b612eb9565b34801561100b57600080fd5b506104f0600c5481565b601960205260009081526040902080546001820180546001600160a01b03831693600160a01b90930460ff1692919061104d90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461107990614d0c565b80156110c65780601f1061109b576101008083540402835291602001916110c6565b820191906000526020600020905b8154815290600101906020018083116110a957829003601f168201915b5050604080516020808201835260028801546001600160a01b03168252825160038901805460609381028301840186529482018581529899939893975090955093508492849184018282801561114557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611127575b505050505081526020016001820154815250509080600501604051806060016040529081600082018054806020026020016040519081016040528092919081815260200182805480156111c157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111a3575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101561129b57838290600052602060002001805461120e90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461123a90614d0c565b80156112875780601f1061125c57610100808354040283529160200191611287565b820191906000526020600020905b81548152906001019060200180831161126a57829003601f168201915b5050505050815260200190600101906111ef565b505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156112f257602002820191906000526020600020905b8154815260200190600101908083116112de575b505050505081525050905086565b6016818154811061131057600080fd5b600091825260209091200154905081565b6005805461132e90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461135a90614d0c565b80156113a75780601f1061137c576101008083540402835291602001916113a7565b820191906000526020600020905b81548152906001019060200180831161138a57829003601f168201915b505050505081565b6113e3604051806080016040528060006001600160a01b031681526020016000815260200160008152602001606081525090565b600082815260276020908152604091829020825160808101845281546001600160a01b0316815260018201549281019290925260028101549282019290925260038201805491929160608401919061143a90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461146690614d0c565b80156114b35780601f10611488576101008083540402835291602001916114b3565b820191906000526020600020905b81548152906001019060200180831161149657829003601f168201915b5050505050815250509050919050565b601b81815481106114d357600080fd5b6000918252602090912001546001600160a01b0316905081565b6060601680548060200260200160405190810160405280929190818152602001828054801561153b57602002820191906000526020600020905b815481526020019060010190808311611527575b5050505050905090565b6007546001600160a01b031633146115705760405163141dbb4960e21b815260040160405180910390fd5b600461157a612376565b600481111561158b5761158b61489d565b14806115af5750600261159c612376565b60048111156115ad576115ad61489d565b145b156115cd576040516398fe99a560e01b815260040160405180910390fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b60408051608081018252338152426020820152908101839052606081018290526000908161161c8261191b565b6025805460018082019092557f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c01829055600082815260276020908152604091829020865181546001600160a01b0319166001600160a01b03909116178155908601519281019290925584015160028201556060840151919250839160038201906116a79082614d8e565b505050600085815260286020908152604080832080546001810182559084529190922001829055517f5a1a930fed43f34b3a07db782ebcac28a661c273e662bb98458cfba5a8ccd220906116fe9083815260200190565b60405180910390a19150505b92915050565b6001600160a01b0383166000908152601f602052604090205460ff1661177a5760035460000361173f57505050565b61175583678ac7230489e800008484600061180c565b506001600160a01b0383166000908152601f60205260409020805460ff191660011790555b505050565b6000600a5461178c612b07565b6117969190614e63565b905090565b6060601c80548060200260200160405190810160405280929190818152602001828054801561153b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117d5575050505050905090565b6002818154811061131057600080fd5b6040516bffffffffffffffffffffffff19606087901b16602082015260348101859052600090819060540160405160208183030381529060405280519060200120905060008361189c57611897868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506003549150859050612ef9565b6118dd565b6118dd868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506004549150859050612ef9565b9050806118fd5760405163452c2df160e11b815260040160405180910390fd5b506001979650505050505050565b6026818154811061131057600080fd5b60008160405160200161192e9190614199565b60408051601f19818403018152919052805160209091012092915050565b60008061195a600186612f0f565b60008981526017602052604090205490915060ff161561198d576040516358f1119560e01b815260040160405180910390fd5b61199933878686611adf565b6119a281612fdb565b6119ae883389886130e2565b98975050505050505050565b6119c660026001614e63565b81565b60608060006119d6612c33565b9050600081516001600160401b038111156119f3576119f3614237565b604051908082528060200260200182016040528015611a3857816020015b6040805180820190915260008082526020820152815260200190600190039081611a115790505b50905060005b8251811015611ac55760226000848381518110611a5d57611a5d614e76565b6020026020010151815260200190815260200160002060000160405180604001604052908160008201548152602001600182015481525050828281518110611aa757611aa7614e76565b60200260200101819052508080611abd90614e8c565b915050611a3e565b5090939092509050565b601c81815481106114d357600080fd5b60045415801590611b0957506001600160a01b0384166000908152601e602052604090205460ff16155b15611b4e57611b1c84848484600161180c565b506001600160a01b0384166000908152601d60209081526040808320869055601e9091529020805460ff191660011790555b50505050565b3373dc652c746a8f85e18ce632d97c6118e8a52fa73814611b885760405163de07280160e01b815260040160405180910390fd5b6004611b92612376565b6004811115611ba357611ba361489d565b1480611bc757506002611bb4612376565b6004811115611bc557611bc561489d565b145b15611be5576040516398fe99a560e01b815260040160405180910390fd5b600455565b600081600003611c0d57604051630ec90a1760e31b815260040160405180910390fd5b60028054604080516020808402820181019092528281529192600092918490830182828015611c5b57602002820191906000526020600020905b815481526020019060010190808311611c47575b5050505050905060006001905060005b83811015611cd757611ca2838281518110611c8857611c88614e76565b602002602001015160009081526023602052604090205490565b15611cc557858203611cb75795945050505050565b81611cc181614e8c565b9250505b80611ccf81614e8c565b915050611c6b565b50604051632cc2ab7360e11b815260040160405180910390fd5b6060602680548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6014805461132e90614d0c565b600080611d62600184612f0f565b60008681526017602052604090205490915060ff1615611d95576040516358f1119560e01b815260040160405180910390fd5b60045415801590611db65750336000908152601e602052604090205460ff16155b15611dd45760405163126ec6d160e31b815260040160405180910390fd5b611ddd81612fdb565b611de9853386866130e2565b95945050505050565b60008281526022602090815260408083206001600160a01b0385168452600301909152902080546001909101545b9250929050565b6060600280548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b60236020528160005260406000208181548110611e9957600080fd5b90600052602060002001600091509150505481565b6006805461132e90614d0c565b60276020526000908152604090208054600182015460028301546003840180546001600160a01b03909416949293919291611ef590614d0c565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2190614d0c565b8015611f6e5780601f10611f4357610100808354040283529160200191611f6e565b820191906000526020600020905b815481529060010190602001808311611f5157829003601f168201915b5050505050905084565b600254600090611f8a90600190614ea5565b821115611faa576040516365d6f35160e11b815260040160405180910390fd5b60005b611fb8836001614e63565b811015612015576001611ff460028381548110611fd757611fd7614e76565b906000526020600020015460009081526023602052604090205490565b11156120035750600192915050565b8061200d81614e8c565b915050611fad565b50600092915050565b6060601b80548060200260200160405190810160405280929190818152602001828054801561153b576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116117d5575050505050905090565b6015818154811061131057600080fd5b60008061209c600080612f0f565b600354909150156120d757336000908152601f602052604090205460ff166120d757604051631f22097560e01b815260040160405180910390fd5b6120e3610e2284614eb8565b60006120f66120f185614eb8565b613229565b905061210182612fdb565b9392505050565b805160005b8181101561220657600083828151811061212957612129614e76565b60209081029190910101516007549091506001600160a01b0316331480159061216957506000818152602760205260409020546001600160a01b03163314155b1561218f57604051635450763d60e11b8152600481018290526024015b60405180910390fd5b60008181526029602052604090205460ff166121f3576000818152602960205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594018190555b50806121fe81614e8c565b91505061210d565b507f788a4349d25bc08585923ae212bce8bb346a623bce753eeecb85fd9ce58dcb4b8260405161223691906141e2565b60405180910390a15050565b60008181526022602090815260409182902060028101805484518185028101850190955280855260609492938301828280156122a757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612289575b5050505050915050919050565b6000818152602360205260408120546001146122e357604051633832a15560e21b815260040160405180910390fd5b6000828152602360205260408120805490919061230257612302614e76565b90600052602060002001549050919050565b60008181526028602090815260409182902080548351818402810184019094528084526060939283018282801561236a57602002820191906000526020600020905b815481526020019060010190808311612356575b50505050509050919050565b60185460009060ff161561238a5750600290565b42600854106123995750600090565b426123a2612b07565b106123ad5750600390565b426123b661177f565b106123c15750600190565b50600490565b6123cf613d8d565b600082815260196020908152604091829020825160c08101845281546001600160a01b0381168252600160a01b900460ff16151592810192909252600181018054929391929184019161242190614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461244d90614d0c565b801561249a5780601f1061246f5761010080835404028352916020019161249a565b820191906000526020600020905b81548152906001019060200180831161247d57829003601f168201915b5050509183525050604080516020818101835260028501546001600160a01b0316825280840191909152815160038501805460609381028301840185528285018181529490950194919390928492849184018282801561252357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612505575b50505050508152602001600182015481525050815260200160058201604051806060016040529081600082018054806020026020016040519081016040528092919081815260200182805480156125a357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612585575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101561267d5783829060005260206000200180546125f090614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461261c90614d0c565b80156126695780601f1061263e57610100808354040283529160200191612669565b820191906000526020600020905b81548152906001019060200180831161264c57829003601f168201915b5050505050815260200190600101906125d1565b505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156126d457602002820191906000526020600020905b8154815260200190600101908083116126c0575b5050509190925250505090525092915050565b60008181526023602090815260409182902080548351818402810184019094528084526060939283018282801561236a57602002820191906000526020600020908154815260200190600101908083116123565750505050509050919050565b60606000601680548060200260200160405190810160405280929190818152602001828054801561279757602002820191906000526020600020905b815481526020019060010190808311612783575b50505050509050600081516001600160401b038111156127b9576127b9614237565b6040519080825280602002602001820160405280156127e2578160200160208202803683370190505b50905060005b8251811015612870576019600084838151811061280757612807614e76565b6020026020010151815260200190815260200160002060000160009054906101000a90046001600160a01b031682828151811061284657612846614e76565b6001600160a01b03909216602092830291909101909101528061286881614e8c565b9150506127e8565b5092915050565b80516001600160a01b031633146128b557805160405163fbbf4d7f60e01b81526001600160a01b039091166004820152336024820152604401612186565b60005b6128c460026001614e63565b811015612a345760008160028111156128df576128df61489d565b905060008160028111156128f5576128f561489d565b036129005750612a22565b60018160028111156129145761291461489d565b0361296e57608083015151516000036129405760405163c3b2798b60e01b815260040160405180910390fd5b826080015160200151600003612969576040516392fb9a3560e01b815260040160405180910390fd5b612a20565b60028160028111156129825761298261489d565b03612a055760a08301515151600a10156129af57604051631e38b1b160e11b815260040160405180910390fd5b600a8360a00151602001515111156129da5760405163a3b7dd7760e01b815260040160405180910390fd5b600a8360a00151604001515111156129695760405163f696406560e01b815260040160405180910390fd5b8060405163d2277d4960e01b81526004016121869190614ec4565b505b80612a2c81614e8c565b9150506128b8565b50806040015151600003612a5b5760405163e182473360e01b815260040160405180910390fd5b50565b60008160405160200161192e91906148cd565b3373dc652c746a8f85e18ce632d97c6118e8a52fa73814612aa55760405163de07280160e01b815260040160405180910390fd5b6004612aaf612376565b6004811115612ac057612ac061489d565b1480612ae457506002612ad1612376565b6004811115612ae257612ae261489d565b145b15612b02576040516398fe99a560e01b815260040160405180910390fd5b600355565b60006009546008546117969190614e63565b6060602580548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6007546001600160a01b03163314801590612b9e57503373dc652c746a8f85e18ce632d97c6118e8a52fa73814155b15612bbc576040516301dbf46f60e71b815260040160405180910390fd5b6000612bc6612376565b90506002816004811115612bdc57612bdc61489d565b03612bfa57604051636f79584d60e01b815260040160405180910390fd5b6018805460ff191660011790556040517f4cd963a081760a54f571abc0f1db4dde31b4a07d8d6da3e844b8c6f47eeaaa4290600090a150565b6060601580548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6007546001600160a01b03163314612cb45760405163b8d4540960e01b815260040160405180910390fd5b6004612cbe612376565b6004811115612ccf57612ccf61489d565b1480612cf357506002612ce0612376565b6004811115612cf157612cf161489d565b145b15612d1157604051631e71d28360e21b815260040160405180910390fd5b60005b81811015612db6576000838383818110612d3057612d30614e76565b60209081029290920135600081815260179093526040909220549192505060ff16612da3576000818152601760205260408120805460ff191660019081179091556016805491820181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289018190555b5080612dae81614e8c565b915050612d14565b50600d54158015612dc957506000546001145b15612dd857612dd88282613500565b7f75a75cf5c561892f4cc5b26c1b8e933849b42238c96dd073d080d1ae96c5141660156040516122369190614ed8565b6007546001600160a01b03163314612e3357604051630f4cb1bd60e11b815260040160405180910390fd5b602480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f753a2cf8d360cff631674504210913e48247f8e56b3e6d2006c2103d4095999f9101612236565b6025818154811061131057600080fd5b60286020528160005260406000208181548110611e9957600080fd5b600080612ec7600080612f0f565b9050612ed4338585611710565b612ee0610e2286614eb8565b6000612eee6120f187614eb8565b9050611de982612fdb565b600082612f06858461355d565b14949350505050565b60008080846001811115612f2557612f2561489d565b03612f335750600f54612fb2565b6001846001811115612f4757612f4761489d565b03612fae57601154600103612fa557670de0b6b3a7640000831015612f7f576040516346ddb8d160e01b815260040160405180910390fd5b612f91670de0b6b3a764000084614f13565b601054612f9e9190614f35565b9050612fb2565b50601054612fb2565b5060005b803414612101576040516372c3eaa760e01b815234600482015260248101829052604401612186565b8015612a5b5760006064600e546064612ff49190614ea5565b612ffe9034614f35565b6130089190614f13565b9050801561306d57601354613026906001600160a01b0316826135aa565b601354604080516001600160a01b039092168252602082018390527f9df63d1c00d2e332f573be591c0579caafb256b2c5a17abcc8ad471cccda1b81910160405180910390a15b60006130798234614ea5565b9050801561177a57601254613097906001600160a01b0316826135aa565b600754604080516001600160a01b039092168252602082018390527f6dff55337c8458ae8c536a63869a48bc33541733422a796390c131d91f4238ed910160405180910390a1505050565b600060016130ee612376565b60048111156130ff576130ff61489d565b146131265761310c612376565b60405163049cab4960e51b815260040161218691906148b3565b816000036131475760405163502e1c2960e01b815260040160405180910390fd5b61317985858585601d60008a6001600160a01b03166001600160a01b03168152602001908152602001600020546136c3565b601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b031916331790556040805186815260ff851660208201529081018390526001600160a01b038516907f2c9deb38f462962eadbd85a9d3a4120503ee091f1582eaaa10aa8c6797651d299060600160405180910390a25050506001600160a01b03166000908152601d6020526040902054919050565b60006003613235612376565b60048111156132465761324661489d565b1461326d57613253612376565b604051632889531360e01b815260040161218691906148b3565b600b54336000908152601a6020526040902054036132a457600b54604051632bd6d93960e21b815260040161218691815260200190565b600c546016546015546132b79190614ea5565b036132db57600c546040516302217f5360e51b815260040161218691815260200190565b60006132e683612a5e565b600081815260196020526040902054909150600160a01b900460ff16156133235760405163baffc42360e01b815260048101829052602401612186565b6015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750182905560008281526019602090815260409182902086518154928801511515600160a01b026001600160a81b03199093166001600160a01b03909116179190911781559085015185928201906133a79082614d8e565b506060820151516002820180546001600160a01b0319166001600160a01b0390921691909117905560808201518051805160038401916133ec91839160200190613e27565b5060209182015160019091015560a083015180518051919260058501926134169284920190613e27565b50602082810151805161342f9260018501920190613e8c565b506040820151805161344b916002840191602090910190613ede565b5050336000908152601a60205260408120805460019550909350909150613473908490614e63565b9091555050601b80546001810182556000919091527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319163390811790915560408085015190517f7585f467599d0f008985f231af99293be388626ac16ca59505c2f8f88969cd63926134f2928592614f4c565b60405180910390a192915050565b60005b8181101561177a57600083838381811061351f5761351f614e76565b602090810292909201356000818152602290935260409092205491925061354890508282613938565b5050808061355590614e8c565b915050613503565b600081815b84518110156135a25761358e8286838151811061358157613581614e76565b6020026020010151613a69565b91508061359a81614e8c565b915050613562565b509392505050565b804710156135fa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401612186565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613647576040519150601f19603f3d011682016040523d82523d6000602084013e61364c565b606091505b505090508061177a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401612186565b60008581526022602052604090206004541580159061370357506001600160a01b0385166000908152602160205260409020546137009083614ea5565b83115b156137215760405163660fa07360e11b815260040160405180910390fd5b6001600160a01b038516600090815260038201602052604081205415801561376457506001600160a01b0386166000908152600383016020526040902060010154155b905060ff85166137bc57815484908390600090613782908490614e63565b90915550506001600160a01b0386166000908152600383016020526040812080548692906137b1908490614e63565b9091555061384d9050565b60001960ff86160161383457600d546001146137eb57604051639755958f60e01b815260040160405180910390fd5b838260000160010160008282546138029190614e63565b90915550506001600160a01b0386166000908152600383016020526040812060010180548692906137b1908490614e63565b604051638eed55d160e01b815260040160405180910390fd5b801561388457600282018054600181018255600091825260209091200180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b038616600090815260216020526040812080548692906138ac908490614e63565b9250508190555083602060008282546138c59190614e63565b9091555050600d541580156138dc57506000546001145b1561392f57815460006138ef8683614ea5565b90508015613901576139018982613938565b60008281526023602090815260408220805460018101825590835291200189905561392c8183613a98565b50505b50505050505050565b60008181526023602090815260408083208054825181850281018501909352808352919290919083018282801561398e57602002820191906000526020600020905b81548152602001906001019080831161397a575b5050505050905060005b8151811015611b4e57838282815181106139b4576139b4614e76565b602002602001015103613a575781600183516139d09190614ea5565b815181106139e0576139e0614e76565b6020026020010151602360008581526020019081526020016000208281548110613a0c57613a0c614e76565b906000526020600020018190555060236000848152602001908152602001600020805480613a3c57613a3c614f76565b60019003818190600052602060002001600090559055611b4e565b80613a6181614e8c565b915050613998565b6000818310613a85576000828152602084905260409020612101565b6000838152602083905260409020612101565b60028054604080516020808402820181019092528281529192600092918490830182828015613ae657602002820191906000526020600020905b815481526020019060010190808311613ad2575b5050505050905081600003613b2d575050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015550565b80613b39600184614ea5565b81518110613b4957613b49614e76565b6020026020010151831015613b9f576001548203613b675750505050565b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015550565b611b4e848484846000805b83811015613c1457828181518110613bc457613bc4614e76565b60200260200101518503613bd9575050611b4e565b828181518110613beb57613beb614e76565b6020026020010151851115613c0257809150613c14565b80613c0c81614e8c565b915050613baa565b5060008086118015613c325750600086815260236020526040902054155b90506000818015613c5b575086848481518110613c5157613c51614e76565b6020026020010151145b613d6457613c6a600186614ea5565b8314613d12576000613c7d846001614e63565b90505b85811015613d105784613c94600183614ea5565b81518110613ca457613ca4614e76565b602002602001015160028281548110613cbf57613cbf614e76565b600091825260209091200155828015613cf0575087858281518110613ce657613ce6614e76565b6020026020010151145b15613cfe5760019150613d10565b80613d0881614e8c565b915050613c80565b505b80158015613d21575060015485105b15613d6457600284613d34600188614ea5565b81518110613d4457613d44614e76565b602090810291909101810151825460018101845560009384529190922001555b8560028481548110613d7857613d78614e76565b60009182526020909120015550505050505050565b6040518060c0016040528060006001600160a01b0316815260200160001515815260200160608152602001613dd7604051806020016040528060006001600160a01b031681525090565b8152602001613df9604051806040016040528060608152602001600081525090565b8152602001613e2260405180606001604052806060815260200160608152602001606081525090565b905290565b828054828255906000526020600020908101928215613e7c579160200282015b82811115613e7c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613e47565b50613e88929150613f19565b5090565b828054828255906000526020600020908101928215613ed2579160200282015b82811115613ed25782518290613ec29082614d8e565b5091602001919060010190613eac565b50613e88929150613f2e565b828054828255906000526020600020908101928215613e7c579160200282015b82811115613e7c578251825591602001919060010190613efe565b5b80821115613e885760008155600101613f1a565b80821115613e88576000613f428282613f4b565b50600101613f2e565b508054613f5790614d0c565b6000825580601f10613f67575050565b601f016020900490600052602060002090810190612a5b9190613f19565b600060208284031215613f9757600080fd5b5035919050565b6000815180845260005b81811015613fc457602081850181015186830182015201613fa8565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b8381101561401d5781516001600160a01b031687529582019590820190600101613ff8565b509495945050505050565b600081516040845261403d6040850182613fe4565b602093840151949093019390935250919050565b600081518084526020808501945080840160005b8381101561401d57815187529582019590820190600101614065565b60008151606084526140966060850182613fe4565b9050602080840151858303828701528281518085528385019150838160051b860101848401935060005b828110156140ee57601f198783030184526140dc828651613f9e565b948601949386019391506001016140c0565b506040880151955088810360408a01526141088187614051565b9998505050505050505050565b600060018060a01b038089168352871515602084015260c0604084015261413f60c0840188613f9e565b818751166060850152838103608085015261415a8187614028565b91505082810360a08401526141088185614081565b6020815260006121016020830184613f9e565b81518152602080830151908201526040810161170a565b6020815260018060a01b0382511660208201526020820151604082015260408201516060820152600060608301516080808401526141da60a0840182613f9e565b949350505050565b6020815260006121016020830184614051565b6001600160a01b0381168114612a5b57600080fd5b8035614215816141f5565b919050565b60006020828403121561422c57600080fd5b8135612101816141f5565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561426f5761426f614237565b60405290565b60405160c081016001600160401b038111828210171561426f5761426f614237565b604051601f8201601f191681016001600160401b03811182821017156142bf576142bf614237565b604052919050565b600082601f8301126142d857600080fd5b81356001600160401b038111156142f1576142f1614237565b614304601f8201601f1916602001614297565b81815284602083860101111561431957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561434957600080fd5b8235915060208301356001600160401b0381111561436657600080fd5b614372858286016142c7565b9150509250929050565b60008083601f84011261438e57600080fd5b5081356001600160401b038111156143a557600080fd5b6020830191508360208260051b8501011115611e2057600080fd5b6000806000604084860312156143d557600080fd5b83356143e0816141f5565b925060208401356001600160401b038111156143fb57600080fd5b6144078682870161437c565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156144555783516001600160a01b031683529284019291840191600101614430565b50909695505050505050565b8035801515811461421557600080fd5b60008060008060006080868803121561448957600080fd5b8535614494816141f5565b94506020860135935060408601356001600160401b038111156144b657600080fd5b6144c28882890161437c565b90945092506144d5905060608701614461565b90509295509295909350565b6000602082840312156144f357600080fd5b81356001600160401b038082111561450a57600080fd5b908301906080828603121561451e57600080fd5b60405160808101818110838211171561453957614539614237565b6040528235614547816141f5565b80825250602083013560208201526040830135604082015260608301358281111561457157600080fd5b61457d878286016142c7565b60608301525095945050505050565b803560ff8116811461421557600080fd5b60008060008060008060a087890312156145b657600080fd5b863595506145c66020880161458c565b9450604087013593506060870135925060808701356001600160401b038111156145ef57600080fd5b6145fb89828a0161437c565b979a9699509497509295939492505050565b6000604080835261462081840186614051565b83810360208581019190915285518083528682019282019060005b818110156146685761465883865180518252602090810151910152565b938301939185019160010161463b565b509098975050505050505050565b6000806000806060858703121561468c57600080fd5b8435614697816141f5565b93506020850135925060408501356001600160401b038111156146b957600080fd5b6146c58782880161437c565b95989497509550505050565b6000806000606084860312156146e657600080fd5b833592506146f66020850161458c565b9150604084013590509250925092565b6000806040838503121561471957600080fd5b82359150602083013561472b816141f5565b809150509250929050565b6000806040838503121561474957600080fd5b50508035926020909101359150565b60018060a01b03851681528360208201528260408201526080606082015260006147856080830184613f9e565b9695505050505050565b600060c082840312156147a157600080fd5b50919050565b6000602082840312156147b957600080fd5b81356001600160401b038111156147cf57600080fd5b6141da8482850161478f565b60006001600160401b038211156147f4576147f4614237565b5060051b60200190565b600082601f83011261480f57600080fd5b8135602061482461481f836147db565b614297565b82815260059290921b8401810191818101908684111561484357600080fd5b8286015b8481101561485e5780358352918301918301614847565b509695505050505050565b60006020828403121561487b57600080fd5b81356001600160401b0381111561489157600080fd5b6141da848285016147fe565b634e487b7160e01b600052602160045260246000fd5b60208101600583106148c7576148c761489d565b91905290565b60208152600060018060a01b03808451166020840152602084015115156040840152604084015160c0606085015261490860e0850182613f9e565b90508160608601515116608085015260808501519150601f19808583030160a08601526149358284614028565b925060a08601519150808584030160c086015250611de98282614081565b60006020828403121561496557600080fd5b604051602081018181106001600160401b038211171561498757614987614237565b6040529050808235614998816141f5565b905292915050565b600082601f8301126149b157600080fd5b813560206149c161481f836147db565b82815260059290921b840181019181810190868411156149e057600080fd5b8286015b8481101561485e5780356149f7816141f5565b83529183019183016149e4565b600060408284031215614a1657600080fd5b604051604081016001600160401b038282108183111715614a3957614a39614237565b816040528293508435915080821115614a5157600080fd5b50614a5e858286016149a0565b825250602083013560208201525092915050565b600060608284031215614a8457600080fd5b614a8c61424d565b905081356001600160401b0380821115614aa557600080fd5b614ab1858386016149a0565b8352602091508184013581811115614ac857600080fd5b8401601f81018613614ad957600080fd5b8035614ae761481f826147db565b81815260059190911b82018401908481019088831115614b0657600080fd5b8584015b83811015614b3e57803586811115614b225760008081fd5b614b308b89838901016142c7565b845250918601918601614b0a565b508086880152505050506040840135915080821115614b5c57600080fd5b50614b69848285016147fe565b60408301525092915050565b600060c08284031215614b8757600080fd5b614b8f614275565b9050614b9a8261420a565b8152614ba860208301614461565b602082015260408201356001600160401b0380821115614bc757600080fd5b614bd3858386016142c7565b6040840152614be58560608601614953565b60608401526080840135915080821115614bfe57600080fd5b614c0a85838601614a04565b608084015260a0840135915080821115614c2357600080fd5b50614c3084828501614a72565b60a08301525092915050565b600060208284031215614c4e57600080fd5b81356001600160401b03811115614c6457600080fd5b6141da84828501614b75565b60008060208385031215614c8357600080fd5b82356001600160401b03811115614c9957600080fd5b614ca58582860161437c565b90969095509350505050565b600080600060408486031215614cc657600080fd5b83356001600160401b0380821115614cdd57600080fd5b614ce98783880161478f565b94506020860135915080821115614cff57600080fd5b506144078682870161437c565b600181811c90821680614d2057607f821691505b6020821081036147a157634e487b7160e01b600052602260045260246000fd5b601f82111561177a57600081815260208120601f850160051c81016020861015614d675750805b601f850160051c820191505b81811015614d8657828155600101614d73565b505050505050565b81516001600160401b03811115614da757614da7614237565b614dbb81614db58454614d0c565b84614d40565b602080601f831160018114614df05760008415614dd85750858301515b600019600386901b1c1916600185901b178555614d86565b600085815260208120601f198616915b82811015614e1f57888601518255948401946001909101908401614e00565b5085821015614e3d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111561170a5761170a614e4d565b634e487b7160e01b600052603260045260246000fd5b600060018201614e9e57614e9e614e4d565b5060010190565b8181038181111561170a5761170a614e4d565b600061170a3683614b75565b60208101600383106148c7576148c761489d565b6020808252825482820181905260008481528281209092916040850190845b8181101561445557835483526001938401939285019201614ef7565b600082614f3057634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761170a5761170a614e4d565b8381526001600160a01b0383166020820152606060408201819052600090611de990830184613f9e565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220ca65dc4df782810f3b2446949a961894eeb141ba020da8bc308cea9329cfdb4f64736f6c63430008130033","sourceMap":"248:1066:34:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3234:27:35;;;;;;;;;;;;;;;;;;;160:25:44;;;148:2;133:18;3234:27:35;;;;;;;;4426:49;;;;;;;;;;-1:-1:-1;4426:49:35;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;3397:27::-;;;;;;;;;;;;;;;;3206:22;;;;;;;;;;-1:-1:-1;3206:22:35;;;;-1:-1:-1;;;;;3206:22:35;;;;;;-1:-1:-1;;;;;4252:32:44;;;4234:51;;4222:2;4207:18;3206:22:35;4088:203:44;3899:25:35;;;;;;;;;;;;;;;;1809:24:40;;;;;;;;;;;;;;;;4304:35:35;;;;;;;;;;-1:-1:-1;4304:35:35;;;;;:::i;:::-;;:::i;3128:18::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;891:60:36:-;;;;;;;;;;-1:-1:-1;891:60:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1546:123:37:-;;;;;;;;;;-1:-1:-1;1546:123:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4536:32:35:-;;;;;;;;;;-1:-1:-1;4536:32:35;;;;;:::i;:::-;;:::i;4095:37::-;;;;;;;;;;-1:-1:-1;4095:37:35;;;;-1:-1:-1;;;;;4095:37:35;;;8999:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22084:366::-;;;;;;;;;;-1:-1:-1;22084:366:35;;;;;:::i;:::-;;:::i;:::-;;2000:579:37;;;;;;;;;;-1:-1:-1;2000:579:37;;;;;:::i;:::-;;:::i;10947:469:35:-;;;;;;;;;;-1:-1:-1;10947:469:35;;;;;:::i;:::-;;:::i;9971:107::-;;;;;;;;;;;;;:::i;8810:125::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1977:28:40:-;;;;;;;;;;-1:-1:-1;1977:28:40;;;;;:::i;:::-;;:::i;1536:539:39:-;;;;;;;;;;-1:-1:-1;1536:539:39;;;;;:::i;:::-;;:::i;:::-;;;11247:14:44;;11240:22;11222:41;;11210:2;11195:18;1536:539:39;11082:187:44;2786:73:35;;;;;;;;;;;;2839:20;2786:73;;1738:29:40;;;;;;;;;;;;;;;;3317:26:35;;;;;;;;;;;;;;;;4400:20;;;;;;;;;;-1:-1:-1;4400:20:35;;;;;;;;612:34:37;;;;;;;;;;-1:-1:-1;612:34:37;;;;;:::i;:::-;;:::i;1001:148::-;;;;;;;;;;-1:-1:-1;1001:148:37;;;;;:::i;:::-;;:::i;19394:509:35:-;;;;;;:::i;:::-;;:::i;4007:38::-;;;;;;;;;;-1:-1:-1;4007:38:35;;;;-1:-1:-1;;;;;4007:38:35;;;2645:74;;;;;;;;;;;;;:::i;2866:580:36:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;4574:39:35:-;;;;;;;;;;-1:-1:-1;4574:39:35;;;;;:::i;:::-;;:::i;3868:25::-;;;;;;;;;;;;;;;;18932:395;;;;;;;;;;-1:-1:-1;18932:395:35;;;;;:::i;:::-;;:::i;21733:345::-;;;;;;;;;;-1:-1:-1;21733:345:35;;;;;:::i;:::-;;:::i;1361:294:36:-;;;;;;;;;;-1:-1:-1;1361:294:36;;;;;:::i;:::-;1425:16;1511:32;;;:20;:32;;;;;1561:40;;1603:44;;;;;1561:40;;1361:294;;;;;15076:25:44;;;15132:2;15117:18;;15110:34;;;;15049:18;1361:294:36;14902:248:44;7684:86:35;;;;;;;;;;-1:-1:-1;7756:7:35;;;;;;;;;;;;-1:-1:-1;;;7756:7:35;;;;7684:86;;4829:1027:36;;;;;;;;;;-1:-1:-1;4829:1027:36;;;;;:::i;:::-;;:::i;1372:115:37:-;;;;;;;;;;;;;:::i;3711:32:35:-;;;;;;;;;;;;;;;;4182:34;;;;;;;;;;;;;:::i;20005:535::-;;;;;;:::i;:::-;;:::i;1758:408:36:-;;;;;;;;;;-1:-1:-1;1758:408:36;;;;;:::i;:::-;;:::i;3834:28:35:-;;;;;;;;;;;;;;;;2490:117:40;;;;;;;;;;;;;:::i;958:58:36:-;;;;;;;;;;-1:-1:-1;958:58:36;;;;;:::i;:::-;;:::i;4481:49:35:-;;;;;;;;;;-1:-1:-1;4481:49:35;;;;;:::i;:::-;;;;;;;;;;;;;;376:42:38;;;;;;;;;;-1:-1:-1;376:42:38;;;;-1:-1:-1;;;;;376:42:38;;;3180:20:35;;;;;;;;;;;;;:::i;751:29:36:-;;;;;;;;;;;;;;;;3472:44:35;;;;;;;;;;;;;;;;652:47:37;;;;;;;;;;-1:-1:-1;652:47:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;5968:523:36:-;;;;;;;;;;-1:-1:-1;5968:523:36;;;;;:::i;:::-;;:::i;4678:57:35:-;;;;;;;;;;-1:-1:-1;4678:57:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;8627:111;;;;;;;;;;;;;:::i;4270:28::-;;;;;;;;;;-1:-1:-1;4270:28:35;;;;;:::i;:::-;;:::i;3874:170:36:-;;;;;;;;;;-1:-1:-1;3874:170:36;;;;;:::i;:::-;3967:13;3999:31;;;:21;:31;;;;;:38;;3874:170;824:61;;;;;;;;;;-1:-1:-1;824:61:36;;;;;:::i;:::-;;;;;;;;;;;;;;15421:602:35;;;;;;:::i;:::-;;:::i;2677:709:37:-;;;;;;;;;;-1:-1:-1;2677:709:37;;;;;:::i;:::-;;:::i;764:48::-;;;;;;;;;;-1:-1:-1;764:48:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;2602:171:36;;;;;;;;;;-1:-1:-1;2602:171:36;;;;;:::i;:::-;-1:-1:-1;;;;;2727:39:36;2682:26;2727:39;;;:26;:39;;;;;;;2602:171;2267:224;;;;;;;;;;-1:-1:-1;2267:224:36;;;;;:::i;:::-;;:::i;2725:55:35:-;;;;;;;;;;;;2778:2;2725:55;;4360:268:36;;;;;;;;;;-1:-1:-1;4360:268:36;;;;;:::i;:::-;;:::i;497:35:39:-;;;;;;;;;;;;;;;;1757:140:37;;;;;;;;;;-1:-1:-1;1757:140:37;;;;;:::i;:::-;;:::i;7928:477:35:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10136:128::-;;;;;;;;;;-1:-1:-1;10136:128:35;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3558:212:36:-;;;;;;;;;;-1:-1:-1;3558:212:36;;;;;:::i;:::-;;:::i;4741:56:35:-;;;;;;;;;;-1:-1:-1;4741:56:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;9191:437;;;;;;;;;;;;;:::i;11510:1474::-;;;;;;;;;;-1:-1:-1;11510:1474:35;;;;;:::i;:::-;;:::i;7776:146::-;;;;;;;;;;-1:-1:-1;7776:146:35;;;;;:::i;:::-;;:::i;21366:361::-;;;;;;;;;;-1:-1:-1;21366:361:35;;;;;:::i;:::-;;:::i;538:31:39:-;;;;;;;;;;;;;;;;4620:52:35;;;;;;;;;;-1:-1:-1;4620:52:35;;;;;:::i;:::-;;;;;;;;;;;;;;9789:101;;;;;;;;;;;;;:::i;1206::37:-;;;;;;;;;;;;;:::i;18492:322:35:-;;;;;;;;;;;;;:::i;3794:34::-;;;;;;;;;;;;;;;;2865:84;;;;;;;;;;;;2907:42;2865:84;;8461:103;;;;;;;;;;;;;:::i;17048:1332::-;;;;;;;;;;-1:-1:-1;17048:1332:35;;;;;:::i;:::-;;:::i;586:379:38:-;;;;;;;;;;-1:-1:-1;586:379:38;;;;;:::i;:::-;;:::i;579:27:37:-;;;;;;;;;;-1:-1:-1;579:27:37;;;;;:::i;:::-;;:::i;705:53::-;;;;;;;;;;-1:-1:-1;705:53:37;;;;;:::i;:::-;;:::i;4345:49:35:-;;;;;;;;;;-1:-1:-1;4345:49:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;14910:396;;;;;;:::i;:::-;;:::i;3622:31::-;;;;;;;;;;;;;;;;4426:49;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4426:49:35;;;-1:-1:-1;;;4426:49:35;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4426:49:35;;;;;;;;;;;;;-1:-1:-1;;;;;4426:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4426:49:35;;-1:-1:-1;4426:49:35;-1:-1:-1;4426:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4426:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4426:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4304:35::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4304:35:35;:::o;3128:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1546:123:37:-;1606:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1606:18:37;1643:19;;;;:8;:19;;;;;;;;;1636:26;;;;;;;;;-1:-1:-1;;;;;1636:26:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1643:19;1636:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1546:123;;;:::o;4536:32:35:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4536:32:35;;-1:-1:-1;4536:32:35;:::o;8999:117::-;9056:16;9091:18;9084:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8999:117;:::o;22084:366::-;22191:7;;-1:-1:-1;;;;;22191:7:35;22177:10;:21;22173:55;;22207:21;;-1:-1:-1;;;22207:21:35;;;;;;;;;;;22173:55;22253:22;22242:7;:5;:7::i;:::-;:33;;;;;;;;:::i;:::-;;:69;;;-1:-1:-1;22290:21:35;22279:7;:5;:7::i;:::-;:32;;;;;;;;:::i;:::-;;22242:69;22238:144;;;22334:37;;-1:-1:-1;;;22334:37:35;;;;;;;;;;;22238:144;22391:23;:52;;-1:-1:-1;;;;;;22391:52:35;-1:-1:-1;;;;;22391:52:35;;;;;;;;;;22084:366::o;2000:579:37:-;2137:175;;;;;;;;2171:10;2137:175;;2206:15;2137:175;;;;;;;;;;;;;;;;2083:7;;;2342:26;2137:175;2342:11;:26::i;:::-;2379:10;:26;;;;;;;;;;;;;;-1:-1:-1;2415:19:37;;;:8;2379:26;2415:19;;;;;;;;:35;;;;-1:-1:-1;;;;;;2415:35:37;-1:-1:-1;;;;;2415:35:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;2379:26;;-1:-1:-1;2415:35:37;;;;;;;;;;:::i;:::-;-1:-1:-1;;;2460:28:37;;;;:16;:28;;;;;;;;:44;;;;;;;;;;;;;;;;;;2520:25;;;;;2494:9;160:25:44;;148:2;133:18;;14:177;2520:25:37;;;;;;;;2563:9;-1:-1:-1;;2000:579:37;;;;;:::o;10947:469:35:-;-1:-1:-1;;;;;11036:33:35;;;;;;:24;:33;;;;;;;;11031:379;;11089:20;;11113:1;11089:25;11085:141;;10947:469;;;:::o;11085:141::-;11239:61;11250:7;2839:20;11287:5;;11294;11239:10;:61::i;:::-;-1:-1:-1;;;;;;11359:33:35;;;;;;:24;:33;;;;;:40;;-1:-1:-1;;11359:40:35;11395:4;11359:40;;;11031:379;10947:469;;;:::o;9971:107::-;10019:7;10059:12;;10045:11;:9;:11::i;:::-;:26;;;;:::i;:::-;10038:33;;9971:107;:::o;8810:125::-;8871:16;8906:22;8899:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8899:29:35;;;;;;;;;;;;;;;;;;;;;;8810:125;:::o;1977:28:40:-;;;;;;;;;;;;1536:539:39;1791:40;;-1:-1:-1;;29316:2:44;29312:15;;;29308:53;1791:40:39;;;29296:66:44;29378:12;;;29371:28;;;1680:13:39;;;;29415:12:44;;1791:40:39;;;;;;;;;;;;1781:51;;;;;;1766:66;;1842:16;1861:6;:138;;1946:53;1965:5;;1946:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1972:20:39;;;-1:-1:-1;1994:4:39;;-1:-1:-1;1946:18:39;:53::i;:::-;1861:138;;;1882:49;1901:5;;1882:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1908:16:39;;;-1:-1:-1;1926:4:39;;-1:-1:-1;1882:18:39;:49::i;:::-;1842:157;;2014:11;2009:38;;2034:13;;-1:-1:-1;;;2034:13:39;;;;;;;;;;;2009:38;-1:-1:-1;2064:4:39;;1536:539;-1:-1:-1;;;;;;;1536:539:39:o;612:34:37:-;;;;;;;;;;;;1001:148;1074:7;1129:10;1118:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1118:22:37;;;;;;;;;1108:33;;1118:22;1108:33;;;;;1001:148;-1:-1:-1;;1001:148:37:o;19394:509:35:-;19559:7;19582:18;19603:51;19631:12;19645:8;19603:27;:51::i;:::-;19669:29;;;;:17;:29;;;;;;19582:72;;-1:-1:-1;19669:29:35;;19665:71;;;19707:29;;-1:-1:-1;;;19707:29:35;;;;;;;;;;;19665:71;19746:42;19758:10;19770;19782:5;;19746:11;:42::i;:::-;19799:27;19815:10;19799:15;:27::i;:::-;19844:52;19854:10;19866;19878:7;19887:8;19844:9;:52::i;:::-;19837:59;19394:509;-1:-1:-1;;;;;;;;19394:509:35:o;2645:74::-;2687:32;2695:19;2718:1;2687:32;:::i;:::-;2645:74;:::o;2866:580:36:-;2944:34;2980:49;3045:34;3082:19;:17;:19::i;:::-;3045:56;;3111:43;3174:17;:24;-1:-1:-1;;;;;3157:42:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;3157:42:36;;;;;;;;;;;;;;;;3111:88;;3214:9;3209:170;3233:17;:24;3229:1;:28;3209:170;;;3307:20;:42;3328:17;3346:1;3328:20;;;;;;;;:::i;:::-;;;;;;;3307:42;;;;;;;;;;;:61;;3278:90;;;;;;;;;;;;;;;;;;;;;;;;;:23;3302:1;3278:26;;;;;;;;:::i;:::-;;;;;;:90;;;;3259:3;;;;;:::i;:::-;;;;3209:170;;;-1:-1:-1;3396:17:36;;3415:23;;-1:-1:-1;2866:580:36;-1:-1:-1;2866:580:36:o;4574:39:35:-;;;;;;;;;;;;18932:395;19037:16;;:21;;;;:60;;-1:-1:-1;;;;;;19063:34:35;;;;;;:25;:34;;;;;;;;19062:35;19037:60;19033:288;;;19113:44;19124:7;19133:10;19145:5;;19152:4;19113:10;:44::i;:::-;-1:-1:-1;;;;;;19216:26:35;;;;;;:17;:26;;;;;;;;:39;;;19269:25;:34;;;;;:41;;-1:-1:-1;;19269:41:35;19306:4;19269:41;;;19033:288;18932:395;;;;:::o;21733:345::-;21812:10;2907:42;21812:29;21808:62;;21850:20;;-1:-1:-1;;;21850:20:35;;;;;;;;;;;21808:62;21895:22;21884:7;:5;:7::i;:::-;:33;;;;;;;;:::i;:::-;;:69;;;-1:-1:-1;21932:21:35;21921:7;:5;:7::i;:::-;:32;;;;;;;;:::i;:::-;;21884:69;21880:144;;;21976:37;;-1:-1:-1;;;21976:37:35;;;;;;;;;;;21880:144;22033:16;:38;21733:345::o;4829:1027:36:-;4886:17;4919:4;4927:1;4919:9;4915:40;;4937:18;;-1:-1:-1;;;4937:18:36;;;;;;;;;;;4915:40;4994:11;:18;;5066:48;;;;;;;;;;;;;;;;;4994:18;;4966:25;;5066:48;4994:18;;5066:48;;4994:11;:18;5066:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5169:15;5187:1;5169:19;;5203:13;5198:536;5230:17;5222:5;:25;5198:536;;;5428:61;5464:17;5482:5;5464:24;;;;;;;;:::i;:::-;;;;;;;3967:13;3999:31;;;:21;:31;;;;;:38;;3874:170;5428:61;5424:113;5514:8;5424:113;5650:4;5639:7;:15;5635:66;;5681:5;4829:1027;-1:-1:-1;;;;;4829:1027:36:o;5635:66::-;5714:9;;;;:::i;:::-;;;;5198:536;5249:7;;;;:::i;:::-;;;;5198:536;;;;5825:24;;-1:-1:-1;;;5825:24:36;;;;;;;;;;;1372:115:37;1428:16;1463:17;1456:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1372:115;:::o;4182:34:35:-;;;;;;;:::i;20005:535::-;20136:7;20159:18;20180:51;20208:12;20222:8;20180:27;:51::i;:::-;20246:29;;;;:17;:29;;;;;;20159:72;;-1:-1:-1;20246:29:35;;20242:71;;;20284:29;;-1:-1:-1;;;20284:29:35;;;;;;;;;;;20242:71;20327:16;;:21;;;;:63;;-1:-1:-1;20379:10:35;20353:37;;;;:25;:37;;;;;;;;20352:38;20327:63;20323:102;;;20399:26;;-1:-1:-1;;;20399:26:35;;;;;;;;;;;20323:102;20436:27;20452:10;20436:15;:27::i;:::-;20481:52;20491:10;20503;20515:7;20524:8;20481:9;:52::i;:::-;20474:59;20005:535;-1:-1:-1;;;;;20005:535:35:o;1758:408:36:-;1874:16;1964:32;;;:20;:32;;;;;;;;-1:-1:-1;;;;;2027:43:36;;;;:30;;:43;;;;;:52;;2093:56;;;;;1758:408;;;;;;:::o;2490:117:40:-;2537:33;2589:11;2582:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2490:117;:::o;958:58:36:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3180:20:35:-;;;;;;;:::i;652:47:37:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;652:47:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5968:523:36:-;6075:11;:18;6031:22;;6075;;6096:1;;6075:22;:::i;:::-;6069:3;:28;6065:205;;;6233:26;;-1:-1:-1;;;6233:26:36;;;;;;;;;;;6065:205;6285:13;6280:183;6312:7;:3;6318:1;6312:7;:::i;:::-;6304:5;:15;6280:183;;;6406:1;6348:55;6384:11;6396:5;6384:18;;;;;;;;:::i;:::-;;;;;;;;;3967:13;3999:31;;;:21;:31;;;;;:38;;3874:170;6348:55;:59;6344:109;;;-1:-1:-1;6434:4:36;;5968:523;-1:-1:-1;;5968:523:36:o;6344:109::-;6321:7;;;;:::i;:::-;;;;6280:183;;;-1:-1:-1;6479:5:36;;5968:523;-1:-1:-1;;5968:523:36:o;8627:111:35:-;8681:16;8716:15;8709:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8709:22:35;;;;;;;;;;;;;;;;;;;;;;8627:111;:::o;4270:28::-;;;;;;;;;;;;15421:602;15506:7;15525:18;15546:46;15574:14;15590:1;15546:27;:46::i;:::-;15607:20;;15525:67;;-1:-1:-1;15607:25:35;15603:254;;15798:10;15773:36;;;;:24;:36;;;;;;;;15768:78;;15818:28;;-1:-1:-1;;;15818:28:35;;;;;;;;;;;15768:78;15866:30;;15887:8;15866:30;:::i;:::-;15906:18;15927:23;;15941:8;15927:23;:::i;:::-;:13;:23::i;:::-;15906:44;;15961:27;15977:10;15961:15;:27::i;:::-;16006:10;15421:602;-1:-1:-1;;;15421:602:35:o;2677:709:37:-;2784:22;;2752:29;2817:515;2849:21;2841:5;:29;2817:515;;;2895:24;2922:15;2938:5;2922:22;;;;;;;;:::i;:::-;;;;;;;;;;;2978:7;;2922:22;;-1:-1:-1;;;;;;2978:7:37;2964:10;:21;;;;2963:76;;-1:-1:-1;3005:26:37;;;;:8;:26;;;;;:33;-1:-1:-1;;;;;3005:33:37;2991:10;:47;;2963:76;2959:176;;;3066:54;;-1:-1:-1;;;3066:54:37;;;;;160:25:44;;;133:18;;3066:54:37;;;;;;;;2959:176;3154:34;;;;:16;:34;;;;;;;;3149:173;;3208:34;;;;:16;:34;;;;;:41;;-1:-1:-1;;3208:41:37;3245:4;3208:41;;;;;;3267:17;:40;;;;;;;;;;;;;;;3149:173;-1:-1:-1;2872:7:37;;;;:::i;:::-;;;;2817:515;;;;3347:32;3363:15;3347:32;;;;;;:::i;:::-;;;;;;;;2742:644;2677:709;:::o;2267:224:36:-;2372:33;2408:32;;;:20;:32;;;;;;;;;2457:27;;;2450:34;;;;;;;;;;;;;;;;;2344:16;;2408:32;;2450:34;;2457:27;2450:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2450:34:36;;;;;;;;;;;;;;;;;;;;;;;;2267:224;;;:::o;4360:268::-;4446:18;4480:31;;;:21;:31;;;;;:38;4522:1;4480:43;4476:94;;4532:38;;-1:-1:-1;;;4532:38:36;;;;;;;;;;;4476:94;4587:31;;;;:21;:31;;;;;:34;;:31;;;:34;;;;:::i;:::-;;;;;;;;;4580:41;;4360:268;;;:::o;1757:140:37:-;1862:28;;;;:16;:28;;;;;;;;;1855:35;;;;;;;;;;;;;;;;;1827:16;;1855:35;;;1862:28;1855:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:140;;;:::o;7928:477:35:-;7994:8;;7966:12;;7994:8;;7990:67;;;-1:-1:-1;8025:21:35;;7928:477::o;7990:67::-;8087:15;8071:12;;:31;8067:92;;-1:-1:-1;8125:23:35;;7928:477::o;8067:92::-;8188:15;8173:11;:9;:11::i;:::-;:30;8169:87;;-1:-1:-1;8226:19:35;;7928:477::o;8169:87::-;8291:15;8270:17;:15;:17::i;:::-;:36;8266:93;;-1:-1:-1;8329:19:35;;7928:477::o;8266:93::-;-1:-1:-1;8376:22:35;;7928:477::o;10136:128::-;10198:19;;:::i;:::-;10236:21;;;;:9;:21;;;;;;;;;10229:28;;;;;;;;;-1:-1:-1;;;;;10229:28:35;;;;-1:-1:-1;;;10229:28:35;;;;;;;;;;;;;;;;;;;;10236:21;;10229:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10229:28:35;;;-1:-1:-1;;10229:28:35;;;;;;;;;;;;;-1:-1:-1;;;;;10229:28:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10229:28:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10229:28:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10229:28:35;;;;-1:-1:-1;;;10229:28:35;;-1:-1:-1;10229:28:35;10136:128;-1:-1:-1;;10136:128:35:o;3558:212:36:-;3732:31;;;;:21;:31;;;;;;;;;3725:38;;;;;;;;;;;;;;;;;3663:46;;3725:38;;;3732:31;3725:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3558:212;;;:::o;9191:437:35:-;9255:16;9283:41;9327:18;9283:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9355:29;9401:24;:31;-1:-1:-1;;;;;9387:46:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9387:46:35;;9355:78;;9448:9;9443:150;9467:24;:31;9463:1;:35;9443:150;;;9537:9;:38;9547:24;9572:1;9547:27;;;;;;;;:::i;:::-;;;;;;;9537:38;;;;;;;;;;;:45;;;;;;;;;;-1:-1:-1;;;;;9537:45:35;9519:12;9532:1;9519:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9519:63:35;;;:15;;;;;;;;;;;:63;9500:3;;;;:::i;:::-;;;;9443:150;;;-1:-1:-1;9609:12:35;9191:437;-1:-1:-1;;9191:437:35:o;11510:1474::-;11596:15;;-1:-1:-1;;;;;11596:29:35;11615:10;11596:29;11592:88;;11652:15;;11634:46;;-1:-1:-1;;;11634:46:35;;-1:-1:-1;;;;;30288:15:44;;;11634:46:35;;;30270:34:44;11669:10:35;30320:18:44;;;30313:43;30205:18;;11634:46:35;30058:304:44;11592:88:35;11695:13;11690:1200;2687:32;2695:19;2718:1;2687:32;:::i;:::-;11714:5;:23;11690:1200;;;11762:25;11800:5;11790:16;;;;;;;;:::i;:::-;11762:44;-1:-1:-1;11843:16:35;11824:15;:35;;;;;;;;:::i;:::-;;11820:1060;;11879:8;;;11820:1060;11988:14;11969:15;:33;;;;;;;;:::i;:::-;;11965:915;;12026:21;;;;:29;:36;:29;:41;12022:81;;12076:27;;-1:-1:-1;;;12076:27:35;;;;;;;;;;;12022:81;12125:8;:21;;;:31;;;12160:1;12125:36;12121:78;;12170:29;;-1:-1:-1;;;12170:29:35;;;;;;;;;;;12121:78;11965:915;;;12243:16;12224:15;:35;;;;;;;;:::i;:::-;;12220:660;;12283:23;;;;:36;:43;2778:2;-1:-1:-1;12279:160:35;;;12386:34;;-1:-1:-1;;;12386:34:35;;;;;;;;;;;12279:160;2778:2;12460:8;:23;;;:35;;;:42;:71;12456:158;;;12562:33;;-1:-1:-1;;;12562:33:35;;;;;;;;;;;12456:158;2778:2;12635:8;:23;;;:33;;;:40;:69;12631:154;;;12735:31;;-1:-1:-1;;;12735:31:35;;;;;;;;;;;12220:660;12849:15;12830:35;;-1:-1:-1;;;12830:35:35;;;;;;;;:::i;12220:660::-;11748:1142;11690:1200;11739:7;;;;:::i;:::-;;;;11690:1200;;;;12909:8;:20;;;12903:34;12941:1;12903:39;12899:78;;12951:26;;-1:-1:-1;;;12951:26:35;;;;;;;;;;;12899:78;11510:1474;:::o;7776:146::-;7849:7;7904:8;7893:20;;;;;;;;:::i;21366:361::-;21453:10;2907:42;21453:29;21449:62;;21491:20;;-1:-1:-1;;;21491:20:35;;;;;;;;;;;21449:62;21536:22;21525:7;:5;:7::i;:::-;:33;;;;;;;;:::i;:::-;;:69;;;-1:-1:-1;21573:21:35;21562:7;:5;:7::i;:::-;:32;;;;;;;;:::i;:::-;;21525:69;21521:144;;;21617:37;;-1:-1:-1;;;21617:37:35;;;;;;;;;;;21521:144;21674:20;:46;21366:361::o;9789:101::-;9831:7;9872:11;;9857:12;;:26;;;;:::i;1206:101:37:-;1255:16;1290:10;1283:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1206:101;:::o;18492:322:35:-;18547:7;;-1:-1:-1;;;;;18547:7:35;18533:10;:21;;;;18532:58;;-1:-1:-1;18560:10:35;2907:42;18560:29;;18532:58;18527:103;;;18600:30;;-1:-1:-1;;;18600:30:35;;;;;;;;;;;18527:103;18641:19;18663:7;:5;:7::i;:::-;18641:29;-1:-1:-1;18694:21:35;18684:6;:31;;;;;;;;:::i;:::-;;18680:68;;18724:24;;-1:-1:-1;;;18724:24:35;;;;;;;;;;;18680:68;18759:8;:15;;-1:-1:-1;;18759:15:35;18770:4;18759:15;;;18790:17;;;;18759:8;;18790:17;18517:297;18492:322::o;8461:103::-;8511:16;8546:11;8539:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8461:103;:::o;17048:1332::-;17148:7;;-1:-1:-1;;;;;17148:7:35;17134:10;:21;17130:56;;17164:22;;-1:-1:-1;;;17164:22:35;;;;;;;;;;;17130:56;17211:22;17200:7;:5;:7::i;:::-;:33;;;;;;;;:::i;:::-;;:69;;;-1:-1:-1;17248:21:35;17237:7;:5;:7::i;:::-;:32;;;;;;;;:::i;:::-;;17200:69;17196:144;;;17292:37;;-1:-1:-1;;;17292:37:35;;;;;;;;;;;17196:144;17355:13;17350:620;17374:34;;;17350:620;;;17433:25;17461:19;;17481:5;17461:26;;;;;;;:::i;:::-;;;;;;;;;;17506:36;;;;:17;:36;;;;;;;;17461:26;;-1:-1:-1;;17506:36:35;;17501:459;;17626:36;;;;:17;:36;;;;;:43;;-1:-1:-1;;17626:43:35;17665:4;17626:43;;;;;;17903:18;:42;;;;;;;;;;;;;;;17501:459;-1:-1:-1;17410:7:35;;;;:::i;:::-;;;;17350:620;;;-1:-1:-1;18066:17:35;;:22;:45;;;;;18092:14;;18110:1;18092:19;18066:45;18062:267;;;18264:54;18298:19;;18264:33;:54::i;:::-;18344:29;18361:11;18344:29;;;;;;:::i;586:379:38:-;693:7;;-1:-1:-1;;;;;693:7:38;679:10;:21;675:66;;709:32;;-1:-1:-1;;;709:32:38;;;;;;;;;;;675:66;792:21;;;-1:-1:-1;;;;;823:46:38;;;-1:-1:-1;;;;;;823:46:38;;;;;;;884:74;;;792:21;;;;30270:34:44;;;30335:2;30320:18;;30313:43;;;;884:74:38;;30205:18:44;884:74:38;30058:304:44;579:27:37;;;;;;;;;;;;705:53;;;;;;;;;;;;;;;;;;;;14910:396:35;15009:7;15028:18;15049:46;15077:14;15093:1;15049:27;:46::i;:::-;15028:67;;15106:33;15121:10;15133:5;;15106:14;:33::i;:::-;15149:30;;15170:8;15149:30;:::i;:::-;15189:18;15210:23;;15224:8;15210:23;:::i;:::-;15189:44;;15244:27;15260:10;15244:15;:27::i;1156:154:32:-;1247:4;1299;1270:25;1283:5;1290:4;1270:12;:25::i;:::-;:33;;1156:154;-1:-1:-1;;;;1156:154:32:o;13116:798:35:-;13212:7;;;13263:13;:31;;;;;;;;:::i;:::-;;13259:535;;-1:-1:-1;13323:13:35;;13259:535;;;13374:12;13357:13;:29;;;;;;;;:::i;:::-;;13353:441;;13406:10;;13420:1;13406:15;13402:337;;13456:7;13445:8;:18;13441:70;;;13472:39;;-1:-1:-1;;;13472:39:35;;;;;;;;;;;13441:70;13556:18;13567:7;13556:8;:18;:::i;:::-;13542:10;;:33;;;;:::i;:::-;13529:46;;13353:441;;13402:337;-1:-1:-1;13714:10:35;;13353:441;;;-1:-1:-1;13782:1:35;13353:441;13821:10;13808:9;:23;13804:76;;13840:40;;-1:-1:-1;;;13840:40:35;;13858:9;13840:40;;;15076:25:44;15117:18;;;15110:34;;;15049:18;;13840:40:35;14902:248:44;14039:814:35;14107:14;;14103:744;;14204:23;14274:3;14250:19;;14244:3;:25;;;;:::i;:::-;14231:39;;:9;:39;:::i;:::-;14230:47;;;;:::i;:::-;14204:73;-1:-1:-1;14295:19:35;;14291:210;;14360:22;;14334:67;;-1:-1:-1;;;;;14360:22:35;14385:15;14334:17;:67::i;:::-;14446:22;;14424:62;;;-1:-1:-1;;;;;14446:22:35;;;32218:51:44;;32300:2;32285:18;;32278:34;;;14424:62:35;;32191:18:44;14424:62:35;;;;;;;14291:210;14515:24;14542:27;14554:15;14542:9;:27;:::i;:::-;14515:54;-1:-1:-1;14587:20:35;;14583:254;;14653:23;;14627:69;;-1:-1:-1;;;;;14653:23:35;14679:16;14627:17;:69::i;:::-;14796:7;;14773:49;;;-1:-1:-1;;;;;14796:7:35;;;32218:51:44;;32300:2;32285:18;;32278:34;;;14773:49:35;;32191:18:44;14773:49:35;;;;;;;14123:724;;14039:814;:::o;20821:539::-;20944:7;20982:19;20971:7;:5;:7::i;:::-;:30;;;;;;;;:::i;:::-;;20967:77;;21036:7;:5;:7::i;:::-;21010:34;;-1:-1:-1;;;21010:34:35;;;;;;;;:::i;20967:77::-;21058:8;21070:1;21058:13;21054:52;;21080:26;;-1:-1:-1;;;21080:26:35;;;;;;;;;;;21054:52;21117:78;21128:10;21140:7;21149;21158:8;21168:17;:26;21186:7;-1:-1:-1;;;;;21168:26:35;-1:-1:-1;;;;;21168:26:35;;;;;;;;;;;;;21117:10;:78::i;:::-;21206:22;:39;;;;;;;-1:-1:-1;21206:39:35;;;;;;;;-1:-1:-1;;;;;;21206:39:35;21234:10;21206:39;;;21261:48;;;32521:25:44;;;32594:4;32582:17;;32577:2;32562:18;;32555:45;32616:18;;;32609:34;;;-1:-1:-1;;;;;21261:48:35;;;;;32509:2:44;32494:18;21261:48:35;;;;;;;-1:-1:-1;;;;;;;;21327:26:35;;;;;:17;:26;;;;;;;20821:539;-1:-1:-1;20821:539:35:o;16029:909::-;16100:7;16134:19;16123:7;:5;:7::i;:::-;:30;;;;;;;;:::i;:::-;;16119:80;;16191:7;:5;:7::i;:::-;16162:37;;-1:-1:-1;;;16162:37:35;;;;;;;;:::i;16119:80::-;16243:29;;16228:10;16213:26;;;;:14;:26;;;;;;:59;16209:156;;16324:29;;16295:59;;-1:-1:-1;;;16295:59:35;;;;;;160:25:44;;148:2;133:18;;14:177;16209:156:35;16430:16;;16400:18;:25;16379:11;:18;:46;;16400:25;16379:46;:::i;:::-;16378:68;16374:153;;16499:16;;16469:47;;-1:-1:-1;;;16469:47:35;;;;;;160:25:44;;148:2;133:18;;14:177;16374:153:35;16537:18;16558:22;16571:8;16558:12;:22::i;:::-;16594:21;;;;:9;:21;;;;;:28;:21;;-1:-1:-1;;;;16594:28:35;;;;16590:72;;;16631:31;;-1:-1:-1;;;16631:31:35;;;;;160:25:44;;;133:18;;16631:31:35;14:177:44;16590:72:35;16673:11;:28;;;;;;;;;;;;;;-1:-1:-1;16711:21:35;;;:9;16673:28;16711:21;;;;;;;;:32;;;;;;;;;;-1:-1:-1;;;16711:32:35;-1:-1:-1;;;;;;16711:32:35;;;-1:-1:-1;;;;;16711:32:35;;;;;;;;;;;;;;16735:8;;16711:32;;;;;;;:::i;:::-;-1:-1:-1;16711:32:35;;;;;;;;;;-1:-1:-1;;;;;;16711:32:35;-1:-1:-1;;;;;16711:32:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16711:32:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16711:32:35;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16711:32:35;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;16768:10:35;16753:26;;;;:14;:26;;;;;:31;;16783:1;;-1:-1:-1;16753:26:35;;-1:-1:-1;16753:26:35;;-1:-1:-1;16753:31:35;;16783:1;;16753:31;:::i;:::-;;;;-1:-1:-1;;16794:15:35;:32;;;;;;;-1:-1:-1;16794:32:35;;;;;;;;-1:-1:-1;;;;;;16794:32:35;16815:10;16794:32;;;;;;16882:20;;;;;16842:61;;;;;;16858:10;;16842:61;:::i;:::-;;;;;;;;16921:10;16029:909;-1:-1:-1;;16029:909:35:o;7589:606:36:-;7705:9;7700:489;7720:30;;;7700:489;;;7771:25;7799:19;;7819:1;7799:22;;;;;;;:::i;:::-;;;;;;;;;;7835:32;7870:39;;;:20;:39;;;;;;;:67;7799:22;;-1:-1:-1;8105:73:36;;-1:-1:-1;7799:22:36;7870:67;8105:28;:73::i;:::-;7757:432;;7752:3;;;;;:::i;:::-;;;;7700:489;;1934:290:32;2017:7;2059:4;2017:7;2073:116;2097:5;:12;2093:1;:16;2073:116;;;2145:33;2155:12;2169:5;2175:1;2169:8;;;;;;;;:::i;:::-;;;;;;;2145:9;:33::i;:::-;2130:48;-1:-1:-1;2111:3:32;;;;:::i;:::-;;;;2073:116;;;-1:-1:-1;2205:12:32;1934:290;-1:-1:-1;;;1934:290:32:o;2647:312:30:-;2761:6;2736:21;:31;;2728:73;;;;-1:-1:-1;;;2728:73:30;;33249:2:44;2728:73:30;;;33231:21:44;33288:2;33268:18;;;33261:30;33327:31;33307:18;;;33300:59;33376:18;;2728:73:30;33047:353:44;2728:73:30;2813:12;2831:9;-1:-1:-1;;;;;2831:14:30;2853:6;2831:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2812:52;;;2882:7;2874:78;;;;-1:-1:-1;;;2874:78:30;;33817:2:44;2874:78:30;;;33799:21:44;33856:2;33836:18;;;33829:30;33895:34;33875:18;;;33868:62;33966:28;33946:18;;;33939:56;34012:19;;2874:78:30;33615:422:44;8335:2129:36;8493:33;8529:32;;;:20;:32;;;;;8577:16;;:21;;;;8576:90;;-1:-1:-1;;;;;;8629:35:36;;;;;;:26;:35;;;;;;8616:48;;:10;:48;:::i;:::-;8604:8;:61;8576:90;8572:148;;;8689:20;;-1:-1:-1;;;8689:20:36;;;;;;;;;;;8572:148;-1:-1:-1;;;;;8767:39:36;;8730:20;8767:39;;;:30;;;:39;;;;;:48;:53;:130;;;;-1:-1:-1;;;;;;8840:39:36;;;;;;:30;;;:39;;;;;:52;;;:57;8767:130;8730:177;-1:-1:-1;8922:30:36;;;8918:518;;8968:52;;9012:8;;8968:12;;:31;;:52;;9012:8;;8968:52;:::i;:::-;;;;-1:-1:-1;;;;;;;9034:39:36;;;;;;:30;;;:39;;;;;:60;;9086:8;;9034:39;:60;;9086:8;;9034:60;:::i;:::-;;;;-1:-1:-1;8918:518:36;;-1:-1:-1;8918:518:36;;-1:-1:-1;;9115:34:36;;;;9111:325;;9169:17;;9190:1;9169:22;9165:57;;9200:22;;-1:-1:-1;;;9200:22:36;;;;;;;;;;;9165:57;9284:8;9236:12;:31;;:44;;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;9306:39:36;;;;;;:30;;;:39;;;;;:52;;:64;;9362:8;;9306:39;:64;;9362:8;;9306:64;:::i;9111:325::-;9408:17;;-1:-1:-1;;;9408:17:36;;;;;;;;;;;9111:325;9450:15;9446:87;;;9481:27;;;:41;;;;;;;-1:-1:-1;9481:41:36;;;;;;;;;;-1:-1:-1;;;;;;9481:41:36;-1:-1:-1;;;;;9481:41:36;;;;;9446:87;-1:-1:-1;;;;;9542:35:36;;;;;;:26;:35;;;;;:47;;9581:8;;9542:35;:47;;9581:8;;9542:47;:::i;:::-;;;;;;;;9617:8;9599:14;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;9770:17:36;;:22;9769:49;;;;;9798:14;;9816:1;9798:19;9769:49;9765:693;;;9856:40;;9834:19;9976:22;9990:8;9856:40;9976:22;:::i;:::-;9954:44;-1:-1:-1;10227:15:36;;10223:107;;10262:53;10291:10;10303:11;10262:28;:53::i;:::-;10343:34;;;;:21;:34;;;;;;;:51;;;;;;;;;;;;;;;;10409:38;10422:11;10365;10409:12;:38::i;:::-;9820:638;;9765:693;8483:1981;;8335:2129;;;;;:::o;6653:852::-;6748:39;6790:31;;;:21;:31;;;;;;;;6748:73;;;;;;;;;;;;;;;;;;;6790:31;;6748:73;;;6790:31;6748:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6880:9;6875:624;6899:22;:29;6895:1;:33;6875:624;;;6982:10;6953:22;6976:1;6953:25;;;;;;;;:::i;:::-;;;;;;;:39;6949:540;;7339:22;7394:1;7362:22;:29;:33;;;;:::i;:::-;7339:57;;;;;;;;:::i;:::-;;;;;;;7302:21;:31;7324:8;7302:31;;;;;;;;;;;7334:1;7302:34;;;;;;;;:::i;:::-;;;;;;;;:94;;;;7414:21;:31;7436:8;7414:31;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7469:5;;6949:540;6930:3;;;;:::i;:::-;;;;6875:624;;9205:147:32;9268:7;9298:1;9294;:5;:51;;9426:13;9517:15;;;9552:4;9545:15;;;9598:4;9582:21;;9294:51;;;9426:13;9517:15;;;9552:4;9545:15;;;9598:4;9582:21;;9302:20;9358:261;6318:1337:40;6423:11;:18;;6495:48;;;;;;;;;;;;;;;;;6423:18;;6395:25;;6495:48;6423:18;;6495:48;;6423:11;:18;6495:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6710:17;6731:1;6710:22;6706:99;;-1:-1:-1;;6748:11:40;:26;;;;;;;-1:-1:-1;6748:26:40;;;;;;;-1:-1:-1;6318:1337:40:o;6706:99::-;7060:17;7078:21;7098:1;7078:17;:21;:::i;:::-;7060:40;;;;;;;;:::i;:::-;;;;;;;7049:8;:51;7045:424;;;7141:9;;7120:17;:30;7116:343;;7258:7;;6318:1337;;:::o;7116:343::-;-1:-1:-1;;7394:11:40;:26;;;;;;;-1:-1:-1;7394:26:40;;;;;;;-1:-1:-1;6318:1337:40:o;7116:343::-;7579:69;7591:8;7601;7611:17;7630;3047:22;;3079:494;3111:17;3103:5;:25;3079:494;;;3258:17;3276:5;3258:24;;;;;;;;:::i;:::-;;;;;;;3246:8;:36;3242:188;;3409:7;;;;3242:188;3459:17;3477:5;3459:24;;;;;;;;:::i;:::-;;;;;;;3448:8;:35;3444:119;;;3520:5;3503:22;;3543:5;;3444:119;3130:7;;;;:::i;:::-;;;;3079:494;;;;3628:21;3664:1;3653:8;:12;3652:70;;;;-1:-1:-1;3967:13:36;3999:31;;;:21;:31;;;;;:38;3671:50:40;3652:70;3628:94;;3807:22;4071:16;:67;;;;;4129:8;4092:17;4110:14;4092:33;;;;;;;;:::i;:::-;;;;;;;:45;4071:67;4065:1656;;4508:21;4528:1;4508:17;:21;:::i;:::-;4490:14;:39;4484:844;;4803:13;4819:18;:14;4836:1;4819:18;:::i;:::-;4803:34;;4798:516;4847:17;4839:5;:25;4798:516;;;4918:17;4936:9;4944:1;4936:5;:9;:::i;:::-;4918:28;;;;;;;;:::i;:::-;;;;;;;4897:11;4909:5;4897:18;;;;;;;;:::i;:::-;;;;;;;;;;:49;5132:16;:58;;;;;5181:8;5153:17;5171:5;5153:24;;;;;;;;:::i;:::-;;;;;;;:36;5132:58;5128:168;;;5238:4;5218:24;;5268:5;;5128:168;4866:7;;;;:::i;:::-;;;;4798:516;;;;4484:844;5566:17;5565:18;:53;;;;;5608:9;;5588:17;:29;5565:53;5561:150;;;5638:11;5655:17;5673:21;5693:1;5673:17;:21;:::i;:::-;5655:40;;;;;;;;:::i;:::-;;;;;;;;;;;;5638:58;;;;;;;-1:-1:-1;5638:58:40;;;;;;;;;5561:150;5882:8;5852:11;5864:14;5852:27;;;;;;;;:::i;:::-;;;;;;;;;;:38;-1:-1:-1;;;2822:3075:40;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;196:180:44:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:44;;196:180;-1:-1:-1;196:180:44:o;381:423::-;423:3;461:5;455:12;488:6;483:3;476:19;513:1;523:162;537:6;534:1;531:13;523:162;;;599:4;655:13;;;651:22;;645:29;627:11;;;623:20;;616:59;552:12;523:162;;;527:3;730:1;723:4;714:6;709:3;705:16;701:27;694:38;793:4;786:2;782:7;777:2;769:6;765:15;761:29;756:3;752:39;748:50;741:57;;;381:423;;;;:::o;809:461::-;862:3;900:5;894:12;927:6;922:3;915:19;953:4;982:2;977:3;973:12;966:19;;1019:2;1012:5;1008:14;1040:1;1050:195;1064:6;1061:1;1058:13;1050:195;;;1129:13;;-1:-1:-1;;;;;1125:39:44;1113:52;;1185:12;;;;1220:15;;;;1161:1;1079:9;1050:195;;;-1:-1:-1;1261:3:44;;809:461;-1:-1:-1;;;;;809:461:44:o;1275:292::-;1330:3;1374:5;1368:12;1401:4;1396:3;1389:17;1427:58;1479:4;1474:3;1470:14;1456:12;1427:58;:::i;:::-;1534:4;1523:16;;;1517:23;1501:14;;;;1494:47;;;;-1:-1:-1;1415:70:44;1275:292;-1:-1:-1;1275:292:44:o;1572:446::-;1636:3;1674:5;1668:12;1701:6;1696:3;1689:19;1727:4;1756:2;1751:3;1747:12;1740:19;;1793:2;1786:5;1782:14;1814:1;1824:169;1838:6;1835:1;1832:13;1824:169;;;1899:13;;1887:26;;1933:12;;;;1968:15;;;;1860:1;1853:9;1824:169;;2023:1037;2080:3;2124:5;2118:12;2151:4;2146:3;2139:17;2177:58;2229:4;2224:3;2220:14;2206:12;2177:58;:::i;:::-;2165:70;;2254:4;2306:2;2299:5;2295:14;2289:21;2350:3;2344:4;2340:14;2335:2;2330:3;2326:12;2319:36;2377:4;2410:14;2404:21;2447:6;2441:4;2434:20;2482:2;2476:4;2472:13;2463:22;;2539:2;2529:6;2526:1;2522:14;2516:4;2512:25;2508:34;2585:2;2569:14;2565:23;2551:37;;2606:1;2616:256;2630:6;2627:1;2624:13;2616:256;;;2720:2;2716:7;2709:4;2701:6;2697:17;2693:31;2686:5;2679:46;2748:40;2781:6;2772;2766:13;2748:40;:::i;:::-;2811:15;;;;2848:14;;;;2738:50;-1:-1:-1;2652:1:44;2645:9;2616:256;;;2620:3;2920:4;2913:5;2909:16;2903:23;2881:45;;2970:3;2962:6;2958:16;2951:4;2946:3;2942:14;2935:40;2991:63;3047:6;3031:14;2991:63;:::i;:::-;2984:70;2023:1037;-1:-1:-1;;;;;;;;;2023:1037:44:o;3065:1018::-;3505:4;3551:1;3547;3542:3;3538:11;3534:19;3592:2;3584:6;3580:15;3569:9;3562:34;3646:6;3639:14;3632:22;3627:2;3616:9;3612:18;3605:50;3691:3;3686:2;3675:9;3671:18;3664:31;3718:46;3759:3;3748:9;3744:19;3736:6;3718:46;:::i;:::-;3819:2;3810:6;3804:13;3800:22;3795:2;3784:9;3780:18;3773:50;3872:9;3864:6;3860:22;3854:3;3843:9;3839:19;3832:51;3906:46;3945:6;3937;3906:46;:::i;:::-;3892:60;;;4001:9;3993:6;3989:22;3983:3;3972:9;3968:19;3961:51;4029:48;4070:6;4062;4029:48;:::i;4296:220::-;4445:2;4434:9;4427:21;4408:4;4465:45;4506:2;4495:9;4491:18;4483:6;4465:45;:::i;4677:257::-;4597:12;;4585:25;;4659:4;4648:16;;;4642:23;4626:14;;;4619:47;4869:2;4854:18;;4881:47;4521:151;4939:555;5128:2;5117:9;5110:21;5203:1;5199;5194:3;5190:11;5186:19;5177:6;5171:13;5167:39;5162:2;5151:9;5147:18;5140:67;5261:2;5253:6;5249:15;5243:22;5238:2;5227:9;5223:18;5216:50;5320:2;5312:6;5308:15;5302:22;5297:2;5286:9;5282:18;5275:50;5091:4;5372:2;5364:6;5360:15;5354:22;5414:4;5407;5396:9;5392:20;5385:34;5436:52;5483:3;5472:9;5468:19;5454:12;5436:52;:::i;:::-;5428:60;4939:555;-1:-1:-1;;;;4939:555:44:o;5939:261::-;6118:2;6107:9;6100:21;6081:4;6138:56;6190:2;6179:9;6175:18;6167:6;6138:56;:::i;6205:131::-;-1:-1:-1;;;;;6280:31:44;;6270:42;;6260:70;;6326:1;6323;6316:12;6341:134;6409:20;;6438:31;6409:20;6438:31;:::i;:::-;6341:134;;;:::o;6480:247::-;6539:6;6592:2;6580:9;6571:7;6567:23;6563:32;6560:52;;;6608:1;6605;6598:12;6560:52;6647:9;6634:23;6666:31;6691:5;6666:31;:::i;6732:127::-;6793:10;6788:3;6784:20;6781:1;6774:31;6824:4;6821:1;6814:15;6848:4;6845:1;6838:15;6864:253;6936:2;6930:9;6978:4;6966:17;;-1:-1:-1;;;;;6998:34:44;;7034:22;;;6995:62;6992:88;;;7060:18;;:::i;:::-;7096:2;7089:22;6864:253;:::o;7122:::-;7194:2;7188:9;7236:4;7224:17;;-1:-1:-1;;;;;7256:34:44;;7292:22;;;7253:62;7250:88;;;7318:18;;:::i;7380:275::-;7451:2;7445:9;7516:2;7497:13;;-1:-1:-1;;7493:27:44;7481:40;;-1:-1:-1;;;;;7536:34:44;;7572:22;;;7533:62;7530:88;;;7598:18;;:::i;:::-;7634:2;7627:22;7380:275;;-1:-1:-1;7380:275:44:o;7660:531::-;7703:5;7756:3;7749:4;7741:6;7737:17;7733:27;7723:55;;7774:1;7771;7764:12;7723:55;7810:6;7797:20;-1:-1:-1;;;;;7832:2:44;7829:26;7826:52;;;7858:18;;:::i;:::-;7902:55;7945:2;7926:13;;-1:-1:-1;;7922:27:44;7951:4;7918:38;7902:55;:::i;:::-;7982:2;7973:7;7966:19;8028:3;8021:4;8016:2;8008:6;8004:15;8000:26;7997:35;7994:55;;;8045:1;8042;8035:12;7994:55;8110:2;8103:4;8095:6;8091:17;8084:4;8075:7;8071:18;8058:55;8158:1;8133:16;;;8151:4;8129:27;8122:38;;;;8137:7;7660:531;-1:-1:-1;;;7660:531:44:o;8196:390::-;8274:6;8282;8335:2;8323:9;8314:7;8310:23;8306:32;8303:52;;;8351:1;8348;8341:12;8303:52;8387:9;8374:23;8364:33;;8448:2;8437:9;8433:18;8420:32;-1:-1:-1;;;;;8467:6:44;8464:30;8461:50;;;8507:1;8504;8497:12;8461:50;8530;8572:7;8563:6;8552:9;8548:22;8530:50;:::i;:::-;8520:60;;;8196:390;;;;;:::o;8591:367::-;8654:8;8664:6;8718:3;8711:4;8703:6;8699:17;8695:27;8685:55;;8736:1;8733;8726:12;8685:55;-1:-1:-1;8759:20:44;;-1:-1:-1;;;;;8791:30:44;;8788:50;;;8834:1;8831;8824:12;8788:50;8871:4;8863:6;8859:17;8847:29;;8931:3;8924:4;8914:6;8911:1;8907:14;8899:6;8895:27;8891:38;8888:47;8885:67;;;8948:1;8945;8938:12;8963:572;9058:6;9066;9074;9127:2;9115:9;9106:7;9102:23;9098:32;9095:52;;;9143:1;9140;9133:12;9095:52;9182:9;9169:23;9201:31;9226:5;9201:31;:::i;:::-;9251:5;-1:-1:-1;9307:2:44;9292:18;;9279:32;-1:-1:-1;;;;;9323:30:44;;9320:50;;;9366:1;9363;9356:12;9320:50;9405:70;9467:7;9458:6;9447:9;9443:22;9405:70;:::i;:::-;8963:572;;9494:8;;-1:-1:-1;9379:96:44;;-1:-1:-1;;;;8963:572:44:o;9540:658::-;9711:2;9763:21;;;9833:13;;9736:18;;;9855:22;;;9682:4;;9711:2;9934:15;;;;9908:2;9893:18;;;9682:4;9977:195;9991:6;9988:1;9985:13;9977:195;;;10056:13;;-1:-1:-1;;;;;10052:39:44;10040:52;;10147:15;;;;10112:12;;;;10088:1;10006:9;9977:195;;;-1:-1:-1;10189:3:44;;9540:658;-1:-1:-1;;;;;;9540:658:44:o;10203:160::-;10268:20;;10324:13;;10317:21;10307:32;;10297:60;;10353:1;10350;10343:12;10368:709;10478:6;10486;10494;10502;10510;10563:3;10551:9;10542:7;10538:23;10534:33;10531:53;;;10580:1;10577;10570:12;10531:53;10619:9;10606:23;10638:31;10663:5;10638:31;:::i;:::-;10688:5;-1:-1:-1;10740:2:44;10725:18;;10712:32;;-1:-1:-1;10795:2:44;10780:18;;10767:32;-1:-1:-1;;;;;10811:30:44;;10808:50;;;10854:1;10851;10844:12;10808:50;10893:70;10955:7;10946:6;10935:9;10931:22;10893:70;:::i;:::-;10982:8;;-1:-1:-1;10867:96:44;-1:-1:-1;11036:35:44;;-1:-1:-1;11067:2:44;11052:18;;11036:35;:::i;:::-;11026:45;;10368:709;;;;;;;;:::o;11274:1004::-;11363:6;11416:2;11404:9;11395:7;11391:23;11387:32;11384:52;;;11432:1;11429;11422:12;11384:52;11472:9;11459:23;-1:-1:-1;;;;;11542:2:44;11534:6;11531:14;11528:34;;;11558:1;11555;11548:12;11528:34;11581:22;;;;11637:4;11619:16;;;11615:27;11612:47;;;11655:1;11652;11645:12;11612:47;11688:2;11682:9;11730:4;11722:6;11718:17;11785:6;11773:10;11770:22;11765:2;11753:10;11750:18;11747:46;11744:72;;;11796:18;;:::i;:::-;11832:2;11825:22;11869:16;;11894:31;11869:16;11894:31;:::i;:::-;11949:5;11941:6;11934:21;;12009:2;12005;12001:11;11988:25;11983:2;11975:6;11971:15;11964:50;12068:2;12064;12060:11;12047:25;12042:2;12034:6;12030:15;12023:50;12119:2;12115;12111:11;12098:25;12148:2;12138:8;12135:16;12132:36;;;12164:1;12161;12154:12;12132:36;12201:45;12238:7;12227:8;12223:2;12219:17;12201:45;:::i;:::-;12196:2;12184:15;;12177:70;-1:-1:-1;12188:6:44;11274:1004;-1:-1:-1;;;;;11274:1004:44:o;12283:156::-;12349:20;;12409:4;12398:16;;12388:27;;12378:55;;12429:1;12426;12419:12;12444:713;12564:6;12572;12580;12588;12596;12604;12657:3;12645:9;12636:7;12632:23;12628:33;12625:53;;;12674:1;12671;12664:12;12625:53;12710:9;12697:23;12687:33;;12739:36;12771:2;12760:9;12756:18;12739:36;:::i;:::-;12729:46;;12822:2;12811:9;12807:18;12794:32;12784:42;;12873:2;12862:9;12858:18;12845:32;12835:42;;12928:3;12917:9;12913:19;12900:33;-1:-1:-1;;;;;12948:6:44;12945:30;12942:50;;;12988:1;12985;12978:12;12942:50;13027:70;13089:7;13080:6;13069:9;13065:22;13027:70;:::i;:::-;12444:713;;;;-1:-1:-1;12444:713:44;;-1:-1:-1;12444:713:44;;13116:8;;12444:713;-1:-1:-1;;;12444:713:44:o;13162:905::-;13440:4;13469:2;13498;13487:9;13480:21;13524:56;13576:2;13565:9;13561:18;13553:6;13524:56;:::i;:::-;13637:22;;;13599:2;13617:18;;;13610:50;;;;13709:13;;13731:22;;;13807:15;;;;13769;;;13840:1;13850:191;13864:6;13861:1;13858:13;13850:191;;;13913:48;13957:3;13948:6;13942:13;4597:12;;4585:25;;4659:4;4648:16;;;4642:23;4626:14;;4619:47;4521:151;13913:48;14016:15;;;;13981:12;;;;13886:1;13879:9;13850:191;;;-1:-1:-1;14058:3:44;;13162:905;-1:-1:-1;;;;;;;;13162:905:44:o;14072:640::-;14176:6;14184;14192;14200;14253:2;14241:9;14232:7;14228:23;14224:32;14221:52;;;14269:1;14266;14259:12;14221:52;14308:9;14295:23;14327:31;14352:5;14327:31;:::i;:::-;14377:5;-1:-1:-1;14429:2:44;14414:18;;14401:32;;-1:-1:-1;14484:2:44;14469:18;;14456:32;-1:-1:-1;;;;;14500:30:44;;14497:50;;;14543:1;14540;14533:12;14497:50;14582:70;14644:7;14635:6;14624:9;14620:22;14582:70;:::i;:::-;14072:640;;;;-1:-1:-1;14671:8:44;-1:-1:-1;;;;14072:640:44:o;15155:318::-;15230:6;15238;15246;15299:2;15287:9;15278:7;15274:23;15270:32;15267:52;;;15315:1;15312;15305:12;15267:52;15351:9;15338:23;15328:33;;15380:36;15412:2;15401:9;15397:18;15380:36;:::i;:::-;15370:46;;15463:2;15452:9;15448:18;15435:32;15425:42;;15155:318;;;;;:::o;15478:315::-;15546:6;15554;15607:2;15595:9;15586:7;15582:23;15578:32;15575:52;;;15623:1;15620;15613:12;15575:52;15659:9;15646:23;15636:33;;15719:2;15708:9;15704:18;15691:32;15732:31;15757:5;15732:31;:::i;:::-;15782:5;15772:15;;;15478:315;;;;;:::o;15798:248::-;15866:6;15874;15927:2;15915:9;15906:7;15902:23;15898:32;15895:52;;;15943:1;15940;15933:12;15895:52;-1:-1:-1;;15966:23:44;;;16036:2;16021:18;;;16008:32;;-1:-1:-1;15798:248:44:o;16290:461::-;16552:1;16548;16543:3;16539:11;16535:19;16527:6;16523:32;16512:9;16505:51;16592:6;16587:2;16576:9;16572:18;16565:34;16635:6;16630:2;16619:9;16615:18;16608:34;16678:3;16673:2;16662:9;16658:18;16651:31;16486:4;16699:46;16740:3;16729:9;16725:19;16717:6;16699:46;:::i;:::-;16691:54;16290:461;-1:-1:-1;;;;;;16290:461:44:o;16756:161::-;16821:5;16866:3;16857:6;16852:3;16848:16;16844:26;16841:46;;;16883:1;16880;16873:12;16841:46;-1:-1:-1;16905:6:44;16756:161;-1:-1:-1;16756:161:44:o;16922:367::-;17014:6;17067:2;17055:9;17046:7;17042:23;17038:32;17035:52;;;17083:1;17080;17073:12;17035:52;17123:9;17110:23;-1:-1:-1;;;;;17148:6:44;17145:30;17142:50;;;17188:1;17185;17178:12;17142:50;17211:72;17275:7;17266:6;17255:9;17251:22;17211:72;:::i;17294:183::-;17354:4;-1:-1:-1;;;;;17379:6:44;17376:30;17373:56;;;17409:18;;:::i;:::-;-1:-1:-1;17454:1:44;17450:14;17466:4;17446:25;;17294:183::o;17482:662::-;17536:5;17589:3;17582:4;17574:6;17570:17;17566:27;17556:55;;17607:1;17604;17597:12;17556:55;17643:6;17630:20;17669:4;17693:60;17709:43;17749:2;17709:43;:::i;:::-;17693:60;:::i;:::-;17787:15;;;17873:1;17869:10;;;;17857:23;;17853:32;;;17818:12;;;;17897:15;;;17894:35;;;17925:1;17922;17915:12;17894:35;17961:2;17953:6;17949:15;17973:142;17989:6;17984:3;17981:15;17973:142;;;18055:17;;18043:30;;18093:12;;;;18006;;17973:142;;;-1:-1:-1;18133:5:44;17482:662;-1:-1:-1;;;;;;17482:662:44:o;18149:348::-;18233:6;18286:2;18274:9;18265:7;18261:23;18257:32;18254:52;;;18302:1;18299;18292:12;18254:52;18342:9;18329:23;-1:-1:-1;;;;;18367:6:44;18364:30;18361:50;;;18407:1;18404;18397:12;18361:50;18430:61;18483:7;18474:6;18463:9;18459:22;18430:61;:::i;18684:127::-;18745:10;18740:3;18736:20;18733:1;18726:31;18776:4;18773:1;18766:15;18800:4;18797:1;18790:15;18816:249;18966:2;18951:18;;18999:1;18988:13;;18978:47;;19005:18;;:::i;:::-;19034:25;;;18816:249;:::o;19070:1038::-;19261:2;19250:9;19243:21;19224:4;19300:1;19296;19291:3;19287:11;19283:19;19357:2;19348:6;19342:13;19338:22;19333:2;19322:9;19318:18;19311:50;19429:2;19421:6;19417:15;19411:22;19404:30;19397:38;19392:2;19381:9;19377:18;19370:66;19483:2;19475:6;19471:15;19465:22;19523:4;19518:2;19507:9;19503:18;19496:32;19551:52;19598:3;19587:9;19583:19;19569:12;19551:52;:::i;:::-;19537:66;;19675:2;19668;19660:6;19656:15;19650:22;19644:29;19640:38;19634:3;19623:9;19619:19;19612:67;19728:3;19720:6;19716:16;19710:23;19688:45;;19756:2;19752:7;19824:2;19812:9;19804:6;19800:22;19796:31;19790:3;19779:9;19775:19;19768:60;19851:54;19898:6;19882:14;19851:54;:::i;:::-;19837:68;;19954:3;19946:6;19942:16;19936:23;19914:45;;20025:2;20013:9;20005:6;20001:22;19997:31;19990:4;19979:9;19975:20;19968:61;;20046:56;20095:6;20079:14;20046:56;:::i;20113:486::-;20174:5;20222:4;20210:9;20205:3;20201:19;20197:30;20194:50;;;20240:1;20237;20230:12;20194:50;20273:2;20267:9;20315:4;20307:6;20303:17;20386:6;20374:10;20371:22;-1:-1:-1;;;;;20338:10:44;20335:34;20332:62;20329:88;;;20397:18;;:::i;:::-;20433:2;20426:22;20466:6;-1:-1:-1;20466:6:44;20496:23;;20528:33;20496:23;20528:33;:::i;:::-;20570:23;;20113:486;;-1:-1:-1;;20113:486:44:o;20604:737::-;20658:5;20711:3;20704:4;20696:6;20692:17;20688:27;20678:55;;20729:1;20726;20719:12;20678:55;20765:6;20752:20;20791:4;20815:60;20831:43;20871:2;20831:43;:::i;20815:60::-;20909:15;;;20995:1;20991:10;;;;20979:23;;20975:32;;;20940:12;;;;21019:15;;;21016:35;;;21047:1;21044;21037:12;21016:35;21083:2;21075:6;21071:15;21095:217;21111:6;21106:3;21103:15;21095:217;;;21191:3;21178:17;21208:31;21233:5;21208:31;:::i;:::-;21252:18;;21290:12;;;;21128;;21095:217;;21346:625;21405:5;21453:4;21441:9;21436:3;21432:19;21428:30;21425:50;;;21471:1;21468;21461:12;21425:50;21504:4;21498:11;21548:4;21540:6;21536:17;-1:-1:-1;;;;;21640:6:44;21628:10;21625:22;21620:2;21608:10;21605:18;21602:46;21599:72;;;21651:18;;:::i;:::-;21693:10;21687:4;21680:24;21722:6;21713:15;;21764:9;21751:23;21737:37;;21797:2;21789:6;21786:14;21783:34;;;21813:1;21810;21803:12;21783:34;;21841:57;21894:3;21885:6;21874:9;21870:22;21841:57;:::i;:::-;21833:6;21826:73;;21960:2;21949:9;21945:18;21932:32;21927:2;21919:6;21915:15;21908:57;;21346:625;;;;:::o;21976:1518::-;22037:5;22085:4;22073:9;22068:3;22064:19;22060:30;22057:50;;;22103:1;22100;22093:12;22057:50;22125:22;;:::i;:::-;22116:31;;22183:9;22170:23;-1:-1:-1;;;;;22253:2:44;22245:6;22242:14;22239:34;;;22269:1;22266;22259:12;22239:34;22296:57;22349:3;22340:6;22329:9;22325:22;22296:57;:::i;:::-;22289:5;22282:72;22373:2;22363:12;;22428:2;22417:9;22413:18;22400:32;22457:2;22447:8;22444:16;22441:36;;;22473:1;22470;22463:12;22441:36;22496:24;;22551:4;22543:13;;22539:23;-1:-1:-1;22529:51:44;;22576:1;22573;22566:12;22529:51;22612:2;22599:16;22635:60;22651:43;22691:2;22651:43;:::i;22635:60::-;22729:15;;;22811:1;22807:10;;;;22799:19;;22795:28;;;22760:12;;;;22835:15;;;22832:35;;;22863:1;22860;22853:12;22832:35;22895:2;22891;22887:11;22907:349;22923:6;22918:3;22915:15;22907:349;;;23009:3;22996:17;23045:2;23032:11;23029:19;23026:109;;;23089:1;23118:2;23114;23107:14;23026:109;23160:53;23209:3;23204:2;23190:11;23186:2;23182:20;23178:29;23160:53;:::i;:::-;23148:66;;-1:-1:-1;23234:12:44;;;;22940;;22907:349;;;22911:3;23288:5;23283:2;23276:5;23272:14;23265:29;;;;;23347:2;23336:9;23332:18;23319:32;23303:48;;23376:2;23366:8;23363:16;23360:36;;;23392:1;23389;23382:12;23360:36;;23428:59;23483:3;23472:8;23461:9;23457:24;23428:59;:::i;:::-;23423:2;23416:5;23412:14;23405:83;;21976:1518;;;;:::o;23499:998::-;23558:5;23606:4;23594:9;23589:3;23585:19;23581:30;23578:50;;;23624:1;23621;23614:12;23578:50;23646:22;;:::i;:::-;23637:31;;23691:29;23710:9;23691:29;:::i;:::-;23684:5;23677:44;23753:35;23784:2;23773:9;23769:18;23753:35;:::i;:::-;23748:2;23741:5;23737:14;23730:59;23840:2;23829:9;23825:18;23812:32;-1:-1:-1;;;;;23904:2:44;23896:6;23893:14;23890:34;;;23920:1;23917;23910:12;23890:34;23956:46;23998:3;23989:6;23978:9;23974:22;23956:46;:::i;:::-;23951:2;23944:5;23940:14;23933:70;24035:57;24088:3;24083:2;24072:9;24068:18;24035:57;:::i;:::-;24030:2;24023:5;24019:14;24012:81;24146:3;24135:9;24131:19;24118:33;24102:49;;24176:2;24166:8;24163:16;24160:36;;;24192:1;24189;24182:12;24160:36;24229:61;24286:3;24275:8;24264:9;24260:24;24229:61;:::i;:::-;24223:3;24216:5;24212:15;24205:86;24344:3;24333:9;24329:19;24316:33;24300:49;;24374:2;24364:8;24361:16;24358:36;;;24390:1;24387;24380:12;24358:36;;24427:63;24486:3;24475:8;24464:9;24460:24;24427:63;:::i;:::-;24421:3;24414:5;24410:15;24403:88;;23499:998;;;;:::o;24502:356::-;24592:6;24645:2;24633:9;24624:7;24620:23;24616:32;24613:52;;;24661:1;24658;24651:12;24613:52;24701:9;24688:23;-1:-1:-1;;;;;24726:6:44;24723:30;24720:50;;;24766:1;24763;24756:12;24720:50;24789:63;24844:7;24835:6;24824:9;24820:22;24789:63;:::i;24863:437::-;24949:6;24957;25010:2;24998:9;24989:7;24985:23;24981:32;24978:52;;;25026:1;25023;25016:12;24978:52;25066:9;25053:23;-1:-1:-1;;;;;25091:6:44;25088:30;25085:50;;;25131:1;25128;25121:12;25085:50;25170:70;25232:7;25223:6;25212:9;25208:22;25170:70;:::i;:::-;25259:8;;25144:96;;-1:-1:-1;24863:437:44;-1:-1:-1;;;;24863:437:44:o;25580:703::-;25708:6;25716;25724;25777:2;25765:9;25756:7;25752:23;25748:32;25745:52;;;25793:1;25790;25783:12;25745:52;25833:9;25820:23;-1:-1:-1;;;;;25903:2:44;25895:6;25892:14;25889:34;;;25919:1;25916;25909:12;25889:34;25942:72;26006:7;25997:6;25986:9;25982:22;25942:72;:::i;:::-;25932:82;;26067:2;26056:9;26052:18;26039:32;26023:48;;26096:2;26086:8;26083:16;26080:36;;;26112:1;26109;26102:12;26080:36;;26151:72;26215:7;26204:8;26193:9;26189:24;26151:72;:::i;26288:380::-;26367:1;26363:12;;;;26410;;;26431:61;;26485:4;26477:6;26473:17;26463:27;;26431:61;26538:2;26530:6;26527:14;26507:18;26504:38;26501:161;;26584:10;26579:3;26575:20;26572:1;26565:31;26619:4;26616:1;26609:15;26647:4;26644:1;26637:15;26799:545;26901:2;26896:3;26893:11;26890:448;;;26937:1;26962:5;26958:2;26951:17;27007:4;27003:2;26993:19;27077:2;27065:10;27061:19;27058:1;27054:27;27048:4;27044:38;27113:4;27101:10;27098:20;27095:47;;;-1:-1:-1;27136:4:44;27095:47;27191:2;27186:3;27182:12;27179:1;27175:20;27169:4;27165:31;27155:41;;27246:82;27264:2;27257:5;27254:13;27246:82;;;27309:17;;;27290:1;27279:13;27246:82;;;27250:3;;;26799:545;;;:::o;27520:1352::-;27646:3;27640:10;-1:-1:-1;;;;;27665:6:44;27662:30;27659:56;;;27695:18;;:::i;:::-;27724:97;27814:6;27774:38;27806:4;27800:11;27774:38;:::i;:::-;27768:4;27724:97;:::i;:::-;27876:4;;27940:2;27929:14;;27957:1;27952:663;;;;28659:1;28676:6;28673:89;;;-1:-1:-1;28728:19:44;;;28722:26;28673:89;-1:-1:-1;;27477:1:44;27473:11;;;27469:24;27465:29;27455:40;27501:1;27497:11;;;27452:57;28775:81;;27922:944;;27952:663;26746:1;26739:14;;;26783:4;26770:18;;-1:-1:-1;;27988:20:44;;;28106:236;28120:7;28117:1;28114:14;28106:236;;;28209:19;;;28203:26;28188:42;;28301:27;;;;28269:1;28257:14;;;;28136:19;;28106:236;;;28110:3;28370:6;28361:7;28358:19;28355:201;;;28431:19;;;28425:26;-1:-1:-1;;28514:1:44;28510:14;;;28526:3;28506:24;28502:37;28498:42;28483:58;28468:74;;28355:201;-1:-1:-1;;;;;28602:1:44;28586:14;;;28582:22;28569:36;;-1:-1:-1;27520:1352:44:o;28877:127::-;28938:10;28933:3;28929:20;28926:1;28919:31;28969:4;28966:1;28959:15;28993:4;28990:1;28983:15;29009:125;29074:9;;;29095:10;;;29092:36;;;29108:18;;:::i;29438:127::-;29499:10;29494:3;29490:20;29487:1;29480:31;29530:4;29527:1;29520:15;29554:4;29551:1;29544:15;29570:135;29609:3;29630:17;;;29627:43;;29650:18;;:::i;:::-;-1:-1:-1;29697:1:44;29686:13;;29570:135::o;29710:128::-;29777:9;;;29798:11;;;29795:37;;;29812:18;;:::i;29843:210::-;29957:9;29994:53;30032:14;30025:5;29994:53;:::i;30367:246::-;30514:2;30499:18;;30547:1;30536:13;;30526:47;;30553:18;;:::i;30618:655::-;30786:2;30838:21;;;30908:13;;30811:18;;;30930:22;;;30757:4;30995:17;;;31035:16;;;30757:4;;30786:2;30983;30968:18;;;30757:4;31079:168;31093:6;31090:1;31087:13;31079:168;;;31154:13;;31142:26;;31235:1;31223:14;;;;31188:12;;;;31108:9;31079:168;;31649:217;31689:1;31715;31705:132;;31759:10;31754:3;31750:20;31747:1;31740:31;31794:4;31791:1;31784:15;31822:4;31819:1;31812:15;31705:132;-1:-1:-1;31851:9:44;;31649:217::o;31871:168::-;31944:9;;;31975;;31992:15;;;31986:22;;31972:37;31962:71;;32013:18;;:::i;32654:388::-;32841:25;;;-1:-1:-1;;;;;32902:32:44;;32897:2;32882:18;;32875:60;32971:2;32966;32951:18;;32944:30;;;-1:-1:-1;;32991:45:44;;33017:18;;33009:6;32991:45;:::i;34042:127::-;34103:10;34098:3;34094:20;34091:1;34084:31;34134:4;34131:1;34124:15;34158:4;34155:1;34148:15","linkReferences":{}},"methodIdentifiers":{"AMOUNT_FOR_SUMBITTER_PROOF()":"347cf665","JK_LABS_ADDRESS()":"eef18e17","MAX_FIELDS_METADATA_LENGTH()":"b382543f","METADATAS_COUNT()":"4d24a67f","addressSubmitterVerified(address)":"cb853950","addressTotalCastVoteCounts(address)":"a1ac6cb2","addressTotalVotes(address)":"dea5f6a6","addressTotalVotesVerified(address)":"930de979","addressesThatHaveVoted(uint256)":"50c4b616","allProposalTotalVotes()":"50a5e524","cancel()":"ea8a1af0","canceled()":"3f9942ff","castVote(uint256,uint8,uint256,uint256,bytes32[])":"419c533c","castVoteWithoutProof(uint256,uint8,uint256)":"65f16263","checkProof(address,uint256,bytes32[],bool)":"32763c22","comment(uint256,string)":"1805c523","commentIds(uint256)":"f5c36411","commentIsDeleted(uint256)":"ae66b8ad","comments(uint256)":"8ebb4c15","contestAddressTotalVotesCast(address)":"aec116b6","contestDeadline()":"262e59e9","contestStart()":"004114a8","costToPropose()":"6ed815ad","costToVote()":"51a41dec","creator()":"02d05d3f","creatorSplitDestination()":"4a587ad4","deleteComments(uint256[])":"ac67f801","deleteProposals(uint256[])":"f0a7db0a","deletedCommentIds(uint256)":"3fb57c92","deletedProposalIds(uint256)":"05846cae","downvotingAllowed()":"60506ff6","forVotesToProposalIds(uint256,uint256)":"711effc8","getAllAddressesThatHaveVoted()":"2c39805f","getAllAuthorsOfDeletedProposals()":"cbdc27cb","getAllCommentIds()":"e11db9d8","getAllDeletedCommentIds()":"5cb718a1","getAllDeletedProposalIds()":"1242b737","getAllProposalAuthors()":"946369b5","getAllProposalIds()":"efa90d36","getComment(uint256)":"0800e300","getNumProposalsWithThisManyForVotes(uint256)":"9ba197af","getOnlyProposalIdWithThisManyForVotes(uint256)":"b66d1da3","getProposal(uint256)":"c7f758a8","getProposalComments(uint256)":"c05f4104","getProposalsWithThisManyForVotes(uint256)":"c9a1b6b2","getRankIndex(uint256)":"5c7107d8","getSortedRanks()":"6fd3636b","hashComment((address,uint256,uint256,string))":"409fd030","hashProposal((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":"d7989025","isOrIsBelowTiedRank(uint256)":"9174778c","jkLabsSplitDestination()":"102613d8","maxProposalCount()":"fb9bf8d4","metadataFieldsSchema()":"60ed97a9","name()":"06fdde03","numAllowedProposalSubmissions()":"832009af","numSubmissions(address)":"75e509c5","officialRewardsModule()":"785ddfe5","payPerVote()":"03f7eed6","percentageToCreator()":"edcd1be4","prompt()":"7c65d711","proposalAddressVotes(uint256,address)":"6e4eb810","proposalAddressesHaveVoted(uint256)":"b323580d","proposalAuthors(uint256)":"0aa25e44","proposalComments(uint256,uint256)":"f61736f4","proposalIds(uint256)":"9b644a23","proposalIsDeleted(uint256)":"f79c0172","proposalVotes(uint256)":"544ffc9c","proposalVotesStructs(uint256)":"070dc5d9","proposals(uint256)":"013cf08b","propose((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])),bytes32[])":"f823f110","proposeWithoutProof((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":"ab5e6947","rankLimit()":"0414126a","setCreatorSplitDestination(address)":"146230f6","setOfficialRewardsModule(address)":"f4f3d7ec","setSubmissionMerkleRoot(bytes32)":"daf762db","setVotingMerkleRoot(bytes32)":"544c7bb4","sortedRanks(uint256)":"325cc6d9","sortingEnabled()":"366ecf5b","state()":"c19d93fb","submissionMerkleRoot()":"bddc1641","totalVotesCast()":"7de418d5","validateProposalData((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":"d140d9f0","verifyProposer(address,bytes32[])":"20b3e845","verifyVoter(address,uint256,bytes32[])":"531bd812","version()":"54fd4d50","voteStart()":"e031535b","votingDelay()":"3932abb1","votingMerkleRoot()":"dd96a19d","votingPeriod()":"02a251a3"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_prompt\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"_submissionMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_votingMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"contestStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numAllowedProposalSubmissions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxProposalCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"downvotingAllowed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sortingEnabled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rankLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"percentageToCreator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"costToPropose\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"costToVote\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"payPerVote\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.IntConstructorArgs\",\"name\":\"intConstructorArgs\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"creatorSplitDestination\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jkLabsSplitDestination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadataFieldsSchema\",\"type\":\"string\"}],\"internalType\":\"struct Governor.ConstructorArgs\",\"name\":\"_constructorArgs\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AddressFieldMetadataArrayTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AddressNotPermissionedToSubmit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AuthorIsNotSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotDeleteWhenCompletedOrCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotUpdateWhenCompletedOrCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotVoteLessThanOneVoteInPayPerVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotVoteOnDeletedProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContestAlreadyCanceled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum Governor.ContestState\",\"name\":\"currentState\",\"type\":\"uint8\"}],\"name\":\"ContestMustBeActiveToVote\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum Governor.ContestState\",\"name\":\"currentState\",\"type\":\"uint8\"}],\"name\":\"ContestMustBeQueuedToPropose\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxProposalCount\",\"type\":\"uint256\"}],\"name\":\"ContestSubmissionLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DownvotingNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"DuplicateSubmission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyProposalDescription\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"costToVote\",\"type\":\"uint256\"}],\"name\":\"IncorrectCostSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexHasNotBeenPopulated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVoteType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MoreThanOneProposalWithThisManyVotes\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NeedAtLeastOneVoteToVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NeedToSubmitWithProofFirst\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NeedToVoteWithProofFirst\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughVotesLeft\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInMerkle\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCreatorCanAmend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCreatorCanDelete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCreatorCanSetRewardsModule\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"failedToDeleteCommentId\",\"type\":\"uint256\"}],\"name\":\"OnlyCreatorOrAuthorCanDeleteComments\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJkLabsCanAmend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJkLabsOrCreatorCanCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PayPerVoteMustBeEnabledForAnyoneCanVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RankCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RankIsNotInSortedRanks\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numAllowedProposalSubmissions\",\"type\":\"uint256\"}],\"name\":\"SenderSubmissionLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SortingAndDownvotingCannotBothBeEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StringFieldMetadataArrayTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UintFieldMetadataArrayTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum Governor.Metadatas\",\"name\":\"unexpectedMetadata\",\"type\":\"uint8\"}],\"name\":\"UnexpectedMetadata\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroSignersInSafeMetadata\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroThresholdInSafeMetadata\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"commentId\",\"type\":\"uint256\"}],\"name\":\"CommentCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"commentIds\",\"type\":\"uint256[]\"}],\"name\":\"CommentsDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ContestCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CreatorPaymentReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"JkLabsPaymentReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"prompt\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"contestStart\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"}],\"name\":\"JokeraceCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract RewardsModule\",\"name\":\"oldOfficialRewardsModule\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract RewardsModule\",\"name\":\"newOfficialRewardsModule\",\"type\":\"address\"}],\"name\":\"OfficialRewardsModuleSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"proposalDescription\",\"type\":\"string\"}],\"name\":\"ProposalCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"proposalIds\",\"type\":\"uint256[]\"}],\"name\":\"ProposalsDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numVotes\",\"type\":\"uint256\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMOUNT_FOR_SUMBITTER_PROOF\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"JK_LABS_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_FIELDS_METADATA_LENGTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"METADATAS_COUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressSubmitterVerified\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressTotalCastVoteCounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressTotalVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressTotalVotesVerified\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"addressesThatHaveVoted\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allProposalTotalVotes\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"proposalIdsReturn\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"}],\"internalType\":\"struct GovernorCountingSimple.VoteCounts[]\",\"name\":\"proposalVoteCountsArrayReturn\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"canceled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"totalVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numVotes\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"castVote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"numVotes\",\"type\":\"uint256\"}],\"name\":\"castVoteWithoutProof\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressToCheck\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bool\",\"name\":\"voting\",\"type\":\"bool\"}],\"name\":\"checkProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"verified\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"commentContent\",\"type\":\"string\"}],\"name\":\"comment\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"commentIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"commentIsDeleted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"comments\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"commentContent\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"}],\"name\":\"contestAddressTotalVotesCast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"userTotalVotesCast\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contestDeadline\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contestStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"costToPropose\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"costToVote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creatorSplitDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"commentIdsParam\",\"type\":\"uint256[]\"}],\"name\":\"deleteComments\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"proposalIdsToDelete\",\"type\":\"uint256[]\"}],\"name\":\"deleteProposals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deletedCommentIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deletedProposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"downvotingAllowed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"forVotesToProposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAddressesThatHaveVoted\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorsOfDeletedProposals\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllCommentIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllDeletedCommentIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllDeletedProposalIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllProposalAuthors\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllProposalIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"commentId\",\"type\":\"uint256\"}],\"name\":\"getComment\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"commentContent\",\"type\":\"string\"}],\"internalType\":\"struct GovernorEngagement.CommentCore\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"}],\"name\":\"getNumProposalsWithThisManyForVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"}],\"name\":\"getOnlyProposalIdWithThisManyForVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"getProposal\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"getProposalComments\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"}],\"name\":\"getProposalsWithThisManyForVotes\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"proposalsWithThisManyForVotes\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rank\",\"type\":\"uint256\"}],\"name\":\"getRankIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rankIndex\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSortedRanks\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"sortedRanksArray\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"commentContent\",\"type\":\"string\"}],\"internalType\":\"struct GovernorEngagement.CommentCore\",\"name\":\"commentObj\",\"type\":\"tuple\"}],\"name\":\"hashComment\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"proposal\",\"type\":\"tuple\"}],\"name\":\"hashProposal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"isOrIsBelowTiedRank\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"atOrBelowTiedRank\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jkLabsSplitDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxProposalCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"metadataFieldsSchema\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numAllowedProposalSubmissions\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"numSubmissions\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"officialRewardsModule\",\"outputs\":[{\"internalType\":\"contract RewardsModule\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payPerVote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"percentageToCreator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prompt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"}],\"name\":\"proposalAddressVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"proposalAddressesHaveVoted\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalAuthors\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalComments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalIsDeleted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"proposalVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalVotesStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"}],\"internalType\":\"struct GovernorCountingSimple.VoteCounts\",\"name\":\"proposalVoteCounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposals\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"proposal\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"propose\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"proposal\",\"type\":\"tuple\"}],\"name\":\"proposeWithoutProof\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rankLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newCreatorSplitDestination\",\"type\":\"address\"}],\"name\":\"setCreatorSplitDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract RewardsModule\",\"name\":\"officialRewardsModule_\",\"type\":\"address\"}],\"name\":\"setOfficialRewardsModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newSubmissionMerkleRoot\",\"type\":\"bytes32\"}],\"name\":\"setSubmissionMerkleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newVotingMerkleRoot\",\"type\":\"bytes32\"}],\"name\":\"setVotingMerkleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sortedRanks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sortingEnabled\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"internalType\":\"enum Governor.ContestState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submissionMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalVotesCast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"proposal\",\"type\":\"tuple\"}],\"name\":\"validateProposalData\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"verifyProposer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalVotes\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"verifyVoter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"voteStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"CommentCreated(uint256)\":{\"details\":\"Emitted when a comment is created.\"},\"CommentsDeleted(uint256[])\":{\"details\":\"Emitted when comments are deleted.\"}},\"kind\":\"dev\",\"methods\":{\"allProposalTotalVotes()\":{\"details\":\"Accessor to the internal vote counts for a given proposal.\"},\"cancel()\":{\"details\":\"Cancels the contest. Emits a {IGovernor-ContestCanceled} event.\"},\"castVote(uint256,uint8,uint256,uint256,bytes32[])\":{\"details\":\"Cast a vote with a merkle proof.\"},\"castVoteWithoutProof(uint256,uint8,uint256)\":{\"details\":\"Cast a vote without a proof if you have already voted with a proof.\"},\"checkProof(address,uint256,bytes32[],bool)\":{\"params\":{\"addressToCheck\":\"address of participant\",\"amount\":\"to check that the participant has the correct amount\",\"proof\":\"merkle proof to prove address and amount are in tree\",\"voting\":\"true if this is for a voting proof, false if this is for a submission proof\"}},\"comment(uint256,string)\":{\"details\":\"Comment on a proposal. Emits a {CommentCreated} event.\"},\"contestAddressTotalVotesCast(address)\":{\"details\":\"Accessor to how many votes an address has cast total for the contest so far.\"},\"contestDeadline()\":{\"details\":\"Returns if a proposal has been deleted or not.\"},\"deleteComments(uint256[])\":{\"details\":\"Delete comments. Emits a {CommentsDeleted} event.\"},\"deleteProposals(uint256[])\":{\"details\":\"Delete proposals. Emits a {IGovernor-ProposalsDeleted} event.\"},\"getAllAddressesThatHaveVoted()\":{\"details\":\"Return all addresses that have voted.\"},\"getAllAuthorsOfDeletedProposals()\":{\"details\":\"Return all authors of deleted proposals.\"},\"getAllCommentIds()\":{\"details\":\"Return all commentIds.\"},\"getAllDeletedCommentIds()\":{\"details\":\"Return all deleted commentIds.\"},\"getAllDeletedProposalIds()\":{\"details\":\"Return all deleted proposals.\"},\"getAllProposalAuthors()\":{\"details\":\"Return all proposal authors.\"},\"getAllProposalIds()\":{\"details\":\"Return all proposals.\"},\"getComment(uint256)\":{\"details\":\"Return a comment object.\"},\"getNumProposalsWithThisManyForVotes(uint256)\":{\"details\":\"Get the number of proposals that have `forVotes` number of for votes.\"},\"getOnlyProposalIdWithThisManyForVotes(uint256)\":{\"details\":\"Get the only proposal id with this many for votes. NOTE: Should only get called at a point at which you are sure there is only one proposal id with a certain number of forVotes (we only use it in the RewardsModule after ties have been checked for).\"},\"getProposal(uint256)\":{\"details\":\"Retrieve proposal data.\"},\"getProposalComments(uint256)\":{\"details\":\"Return the array of commentIds on a given proposalId.\"},\"getProposalsWithThisManyForVotes(uint256)\":{\"details\":\"Get the whole array in `forVotesToProposalIds` for a given `forVotes` amount.\"},\"getRankIndex(uint256)\":{\"details\":\"Get the idx of sortedRanks considered to hold the queried rank taking deleted proposals into account. A rank has to have > 0 votes to be considered valid.\"},\"getSortedRanks()\":{\"details\":\"Get the sortedRanks array.\"},\"hashComment((address,uint256,uint256,string))\":{\"details\":\"Hashing function used to build the comment id from the comment details.\"},\"isOrIsBelowTiedRank(uint256)\":{\"details\":\"Returns whether a given index in sortedRanks is tied or is below a tied rank.\"},\"proposalAddressVotes(uint256,address)\":{\"details\":\"Accessor to how many votes an address has cast for a given proposal.\"},\"proposalAddressesHaveVoted(uint256)\":{\"details\":\"Accessor to which addresses have cast a vote for a given proposal.\"},\"proposalVotes(uint256)\":{\"details\":\"Accessor to the internal vote counts for a given proposal.\"},\"propose((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])),bytes32[])\":{\"details\":\"Create a new proposal.\"},\"proposeWithoutProof((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))\":{\"details\":\"Create a new proposal without a proof if you have already proposed with a proof.\"},\"setOfficialRewardsModule(address)\":{\"details\":\"Get the official rewards module contract for this contest (effectively reverse record).\"},\"validateProposalData((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))\":{\"details\":\"Verifies that all of the metadata in the proposal is valid.\"},\"verifyProposer(address,bytes32[])\":{\"details\":\"Verifies that `account` is permissioned to propose via merkle proof.\"},\"verifyVoter(address,uint256,bytes32[])\":{\"details\":\"Verifies that `account` is permissioned to vote with `totalVotes` via merkle proof.\"},\"voteStart()\":{\"details\":\"Timestamp the contest vote begins. Votes open at the end of this block, so it is possible to propose during this block.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"NotInMerkle()\":[{\"notice\":\"Thrown if address/amount are not part of Merkle tree\"}]},\"kind\":\"user\",\"methods\":{\"checkProof(address,uint256,bytes32[],bool)\":{\"notice\":\"Allows checking of proofs for an address\"},\"submissionMerkleRoot()\":{\"notice\":\"Participant inclusion roots\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Contest.sol\":\"Contest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71\",\"dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68\",\"dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04\",\"dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"src/Contest.sol\":{\"keccak256\":\"0x0cbc5d92e6f07f4fda4299bfc475a52fc8baa348986f26715fd7a13e3c9d52fd\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://b0367c3d5fe1ff0a7b3f53b4969498e3795a925c5a853e9aa2139d74b737e99c\",\"dweb:/ipfs/Qmc3MpoXwjz4DNUxHPr5WRGo1M9tpdRwc1Pu5hbbEeTW85\"]},\"src/governance/Governor.sol\":{\"keccak256\":\"0x903f59bd11124b9fdcb79918dd174d4a74727e61bfd4ce0c00b293d757199914\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://1882f0edad71aee39791f0fbaa0d204deb350662a7a47738c2be2f18f0142e81\",\"dweb:/ipfs/QmWh6kL3CfXK1nUboCTNHFDqjwaf8N8ynHmaypNHpXoDM4\"]},\"src/governance/extensions/GovernorCountingSimple.sol\":{\"keccak256\":\"0x926939a083bcb63478d84c9f13c87f34dbd9aa248f2257f9cd1bc6a2e8a26b24\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://966641c9ea61d00b1a536158fb57b091d4687204b5a77a2dbc2b664067a035e0\",\"dweb:/ipfs/Qmd3cfwmg4nqkXCew8nrDsEMR2qe9YFAdFXs8q45LcswiQ\"]},\"src/governance/extensions/GovernorEngagement.sol\":{\"keccak256\":\"0xa1aeabd1c062378f8176707d55601dfe64e3fcc71b4d10c6a3f19f332f4bf7f5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://62057ab67e44db7596ed2cc52966ee71fb1b45dcdccb9aa372b819cb44e97229\",\"dweb:/ipfs/QmZMTyYtK5jZFFZjmfQ3QeTxbaMZxWDawp7J9qbfSgnAHQ\"]},\"src/governance/extensions/GovernorModuleRegistry.sol\":{\"keccak256\":\"0xfa31daaf9d0dbeebd6fddbd13194cc0300eb02b63a07ff70ed3d823dc514a171\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://92cf3840c51124707053c65d4cbc0d0ffc9baff14fd0a66582481d0b1e3d7257\",\"dweb:/ipfs/QmT6eN74UBnrx1cWwo8eHDZ9pjefCtpUTRFJg5YbbVrF3u\"]},\"src/governance/utils/GovernorMerkleVotes.sol\":{\"keccak256\":\"0x02d81049154ff4a8c009126a7470c9f49d076a534576a6fc3fe3f8de2c5cd608\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://21056ce53dd97ffff192a7834bd0ea2cc7691fce7e90e8c7943a9213242ba28a\",\"dweb:/ipfs/QmNzbxrT8Q2FLLQkdNUAKZyZzy4QMGm4zQsdWePWk1sxDb\"]},\"src/governance/utils/GovernorSorting.sol\":{\"keccak256\":\"0xde18aec0c9ebe63b6e210e03151770b4e470fafe53390227244615ffd9b86ad5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d02b203d82cb2773a2a97850533d67dee9e3c729475cb438c2e625c71b15a7d5\",\"dweb:/ipfs/QmXsa98RbxoxfZqRAJmP6Sw8uTYssv3HcTyKzYBtXhQE1H\"]},\"src/modules/RewardsModule.sol\":{\"keccak256\":\"0x487a8508cbdb78886d4570c650f8b1faa7f570ac1553db9cdfbd98fd213501d5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d12f2f1c565208465cf6906d478d6e851b8ae6795cc8481cd25503fb20c224a9\",\"dweb:/ipfs/QmP2uKA2gHMcabQ9TRRJchTBncyc65hFG41Fcf6gwzBE3W\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_prompt","type":"string"},{"internalType":"bytes32","name":"_submissionMerkleRoot","type":"bytes32"},{"internalType":"bytes32","name":"_votingMerkleRoot","type":"bytes32"},{"internalType":"struct Governor.ConstructorArgs","name":"_constructorArgs","type":"tuple","components":[{"internalType":"struct Governor.IntConstructorArgs","name":"intConstructorArgs","type":"tuple","components":[{"internalType":"uint256","name":"contestStart","type":"uint256"},{"internalType":"uint256","name":"votingDelay","type":"uint256"},{"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"internalType":"uint256","name":"numAllowedProposalSubmissions","type":"uint256"},{"internalType":"uint256","name":"maxProposalCount","type":"uint256"},{"internalType":"uint256","name":"downvotingAllowed","type":"uint256"},{"internalType":"uint256","name":"sortingEnabled","type":"uint256"},{"internalType":"uint256","name":"rankLimit","type":"uint256"},{"internalType":"uint256","name":"percentageToCreator","type":"uint256"},{"internalType":"uint256","name":"costToPropose","type":"uint256"},{"internalType":"uint256","name":"costToVote","type":"uint256"},{"internalType":"uint256","name":"payPerVote","type":"uint256"}]},{"internalType":"address","name":"creatorSplitDestination","type":"address"},{"internalType":"address","name":"jkLabsSplitDestination","type":"address"},{"internalType":"string","name":"metadataFieldsSchema","type":"string"}]}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AddressFieldMetadataArrayTooLong"},{"inputs":[],"type":"error","name":"AddressNotPermissionedToSubmit"},{"inputs":[{"internalType":"address","name":"author","type":"address"},{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"AuthorIsNotSender"},{"inputs":[],"type":"error","name":"CannotDeleteWhenCompletedOrCanceled"},{"inputs":[],"type":"error","name":"CannotUpdateWhenCompletedOrCanceled"},{"inputs":[],"type":"error","name":"CannotVoteLessThanOneVoteInPayPerVote"},{"inputs":[],"type":"error","name":"CannotVoteOnDeletedProposal"},{"inputs":[],"type":"error","name":"ContestAlreadyCanceled"},{"inputs":[{"internalType":"enum Governor.ContestState","name":"currentState","type":"uint8"}],"type":"error","name":"ContestMustBeActiveToVote"},{"inputs":[{"internalType":"enum Governor.ContestState","name":"currentState","type":"uint8"}],"type":"error","name":"ContestMustBeQueuedToPropose"},{"inputs":[{"internalType":"uint256","name":"maxProposalCount","type":"uint256"}],"type":"error","name":"ContestSubmissionLimitReached"},{"inputs":[],"type":"error","name":"DownvotingNotEnabled"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"type":"error","name":"DuplicateSubmission"},{"inputs":[],"type":"error","name":"EmptyProposalDescription"},{"inputs":[{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"uint256","name":"costToVote","type":"uint256"}],"type":"error","name":"IncorrectCostSent"},{"inputs":[],"type":"error","name":"IndexHasNotBeenPopulated"},{"inputs":[],"type":"error","name":"InvalidVoteType"},{"inputs":[],"type":"error","name":"MoreThanOneProposalWithThisManyVotes"},{"inputs":[],"type":"error","name":"NeedAtLeastOneVoteToVote"},{"inputs":[],"type":"error","name":"NeedToSubmitWithProofFirst"},{"inputs":[],"type":"error","name":"NeedToVoteWithProofFirst"},{"inputs":[],"type":"error","name":"NotEnoughVotesLeft"},{"inputs":[],"type":"error","name":"NotInMerkle"},{"inputs":[],"type":"error","name":"OnlyCreatorCanAmend"},{"inputs":[],"type":"error","name":"OnlyCreatorCanDelete"},{"inputs":[],"type":"error","name":"OnlyCreatorCanSetRewardsModule"},{"inputs":[{"internalType":"uint256","name":"failedToDeleteCommentId","type":"uint256"}],"type":"error","name":"OnlyCreatorOrAuthorCanDeleteComments"},{"inputs":[],"type":"error","name":"OnlyJkLabsCanAmend"},{"inputs":[],"type":"error","name":"OnlyJkLabsOrCreatorCanCancel"},{"inputs":[],"type":"error","name":"PayPerVoteMustBeEnabledForAnyoneCanVote"},{"inputs":[],"type":"error","name":"RankCannotBeZero"},{"inputs":[],"type":"error","name":"RankIsNotInSortedRanks"},{"inputs":[{"internalType":"uint256","name":"numAllowedProposalSubmissions","type":"uint256"}],"type":"error","name":"SenderSubmissionLimitReached"},{"inputs":[],"type":"error","name":"SortingAndDownvotingCannotBothBeEnabled"},{"inputs":[],"type":"error","name":"StringFieldMetadataArrayTooLong"},{"inputs":[],"type":"error","name":"UintFieldMetadataArrayTooLong"},{"inputs":[{"internalType":"enum Governor.Metadatas","name":"unexpectedMetadata","type":"uint8"}],"type":"error","name":"UnexpectedMetadata"},{"inputs":[],"type":"error","name":"ZeroSignersInSafeMetadata"},{"inputs":[],"type":"error","name":"ZeroThresholdInSafeMetadata"},{"inputs":[{"internalType":"uint256","name":"commentId","type":"uint256","indexed":false}],"type":"event","name":"CommentCreated","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"commentIds","type":"uint256[]","indexed":false}],"type":"event","name":"CommentsDeleted","anonymous":false},{"inputs":[],"type":"event","name":"ContestCanceled","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"CreatorPaymentReleased","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"JkLabsPaymentReleased","anonymous":false},{"inputs":[{"internalType":"string","name":"version","type":"string","indexed":false},{"internalType":"string","name":"name","type":"string","indexed":false},{"internalType":"string","name":"prompt","type":"string","indexed":false},{"internalType":"address","name":"creator","type":"address","indexed":false},{"internalType":"uint256","name":"contestStart","type":"uint256","indexed":false},{"internalType":"uint256","name":"votingDelay","type":"uint256","indexed":false},{"internalType":"uint256","name":"votingPeriod","type":"uint256","indexed":false}],"type":"event","name":"JokeraceCreated","anonymous":false},{"inputs":[{"internalType":"contract RewardsModule","name":"oldOfficialRewardsModule","type":"address","indexed":false},{"internalType":"contract RewardsModule","name":"newOfficialRewardsModule","type":"address","indexed":false}],"type":"event","name":"OfficialRewardsModuleSet","anonymous":false},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256","indexed":false},{"internalType":"address","name":"proposer","type":"address","indexed":false},{"internalType":"string","name":"proposalDescription","type":"string","indexed":false}],"type":"event","name":"ProposalCreated","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"proposalIds","type":"uint256[]","indexed":false}],"type":"event","name":"ProposalsDeleted","anonymous":false},{"inputs":[{"internalType":"address","name":"voter","type":"address","indexed":true},{"internalType":"uint256","name":"proposalId","type":"uint256","indexed":false},{"internalType":"uint8","name":"support","type":"uint8","indexed":false},{"internalType":"uint256","name":"numVotes","type":"uint256","indexed":false}],"type":"event","name":"VoteCast","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"AMOUNT_FOR_SUMBITTER_PROOF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"JK_LABS_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_FIELDS_METADATA_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"METADATAS_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"addressSubmitterVerified","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"addressTotalCastVoteCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"addressTotalVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"addressTotalVotesVerified","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"addressesThatHaveVoted","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"allProposalTotalVotes","outputs":[{"internalType":"uint256[]","name":"proposalIdsReturn","type":"uint256[]"},{"internalType":"struct GovernorCountingSimple.VoteCounts[]","name":"proposalVoteCountsArrayReturn","type":"tuple[]","components":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}]}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"cancel"},{"inputs":[],"stateMutability":"view","type":"function","name":"canceled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint256","name":"totalVotes","type":"uint256"},{"internalType":"uint256","name":"numVotes","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"payable","type":"function","name":"castVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint256","name":"numVotes","type":"uint256"}],"stateMutability":"payable","type":"function","name":"castVoteWithoutProof","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"addressToCheck","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bool","name":"voting","type":"bool"}],"stateMutability":"view","type":"function","name":"checkProof","outputs":[{"internalType":"bool","name":"verified","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"string","name":"commentContent","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"comment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"commentIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"commentIsDeleted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"comments","outputs":[{"internalType":"address","name":"author","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"string","name":"commentContent","type":"string"}]},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"stateMutability":"view","type":"function","name":"contestAddressTotalVotesCast","outputs":[{"internalType":"uint256","name":"userTotalVotesCast","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"contestDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"contestStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"costToPropose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"costToVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"creatorSplitDestination","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256[]","name":"commentIdsParam","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"deleteComments"},{"inputs":[{"internalType":"uint256[]","name":"proposalIdsToDelete","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"deleteProposals"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"deletedCommentIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"deletedProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"downvotingAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"forVotesToProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllAddressesThatHaveVoted","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllAuthorsOfDeletedProposals","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllCommentIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllDeletedCommentIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllDeletedProposalIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllProposalAuthors","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllProposalIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"commentId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getComment","outputs":[{"internalType":"struct GovernorEngagement.CommentCore","name":"","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"string","name":"commentContent","type":"string"}]}]},{"inputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"}],"stateMutability":"view","type":"function","name":"getNumProposalsWithThisManyForVotes","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"}],"stateMutability":"view","type":"function","name":"getOnlyProposalIdWithThisManyForVotes","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getProposal","outputs":[{"internalType":"struct Governor.ProposalCore","name":"","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getProposalComments","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"}],"stateMutability":"view","type":"function","name":"getProposalsWithThisManyForVotes","outputs":[{"internalType":"uint256[]","name":"proposalsWithThisManyForVotes","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"rank","type":"uint256"}],"stateMutability":"view","type":"function","name":"getRankIndex","outputs":[{"internalType":"uint256","name":"rankIndex","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getSortedRanks","outputs":[{"internalType":"uint256[]","name":"sortedRanksArray","type":"uint256[]"}]},{"inputs":[{"internalType":"struct GovernorEngagement.CommentCore","name":"commentObj","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"string","name":"commentContent","type":"string"}]}],"stateMutability":"pure","type":"function","name":"hashComment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Governor.ProposalCore","name":"proposal","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]}],"stateMutability":"pure","type":"function","name":"hashProposal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"stateMutability":"view","type":"function","name":"isOrIsBelowTiedRank","outputs":[{"internalType":"bool","name":"atOrBelowTiedRank","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"jkLabsSplitDestination","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"maxProposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"metadataFieldsSchema","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"numAllowedProposalSubmissions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"numSubmissions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"officialRewardsModule","outputs":[{"internalType":"contract RewardsModule","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"payPerVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"percentageToCreator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"prompt","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"stateMutability":"view","type":"function","name":"proposalAddressVotes","outputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalAddressesHaveVoted","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalAuthors","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalComments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalIsDeleted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalVotes","outputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalVotesStructs","outputs":[{"internalType":"struct GovernorCountingSimple.VoteCounts","name":"proposalVoteCounts","type":"tuple","components":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}]}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposals","outputs":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]},{"inputs":[{"internalType":"struct Governor.ProposalCore","name":"proposal","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"payable","type":"function","name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Governor.ProposalCore","name":"proposal","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]}],"stateMutability":"payable","type":"function","name":"proposeWithoutProof","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rankLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newCreatorSplitDestination","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setCreatorSplitDestination"},{"inputs":[{"internalType":"contract RewardsModule","name":"officialRewardsModule_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setOfficialRewardsModule"},{"inputs":[{"internalType":"bytes32","name":"newSubmissionMerkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"setSubmissionMerkleRoot"},{"inputs":[{"internalType":"bytes32","name":"newVotingMerkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"setVotingMerkleRoot"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"sortedRanks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"sortingEnabled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"state","outputs":[{"internalType":"enum Governor.ContestState","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"submissionMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalVotesCast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Governor.ProposalCore","name":"proposal","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]}],"stateMutability":"view","type":"function","name":"validateProposalData"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"verifyProposer"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"totalVotes","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"verifyVoter"},{"inputs":[],"stateMutability":"pure","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"voteStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"votingMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"allProposalTotalVotes()":{"details":"Accessor to the internal vote counts for a given proposal."},"cancel()":{"details":"Cancels the contest. Emits a {IGovernor-ContestCanceled} event."},"castVote(uint256,uint8,uint256,uint256,bytes32[])":{"details":"Cast a vote with a merkle proof."},"castVoteWithoutProof(uint256,uint8,uint256)":{"details":"Cast a vote without a proof if you have already voted with a proof."},"checkProof(address,uint256,bytes32[],bool)":{"params":{"addressToCheck":"address of participant","amount":"to check that the participant has the correct amount","proof":"merkle proof to prove address and amount are in tree","voting":"true if this is for a voting proof, false if this is for a submission proof"}},"comment(uint256,string)":{"details":"Comment on a proposal. Emits a {CommentCreated} event."},"contestAddressTotalVotesCast(address)":{"details":"Accessor to how many votes an address has cast total for the contest so far."},"contestDeadline()":{"details":"Returns if a proposal has been deleted or not."},"deleteComments(uint256[])":{"details":"Delete comments. Emits a {CommentsDeleted} event."},"deleteProposals(uint256[])":{"details":"Delete proposals. Emits a {IGovernor-ProposalsDeleted} event."},"getAllAddressesThatHaveVoted()":{"details":"Return all addresses that have voted."},"getAllAuthorsOfDeletedProposals()":{"details":"Return all authors of deleted proposals."},"getAllCommentIds()":{"details":"Return all commentIds."},"getAllDeletedCommentIds()":{"details":"Return all deleted commentIds."},"getAllDeletedProposalIds()":{"details":"Return all deleted proposals."},"getAllProposalAuthors()":{"details":"Return all proposal authors."},"getAllProposalIds()":{"details":"Return all proposals."},"getComment(uint256)":{"details":"Return a comment object."},"getNumProposalsWithThisManyForVotes(uint256)":{"details":"Get the number of proposals that have `forVotes` number of for votes."},"getOnlyProposalIdWithThisManyForVotes(uint256)":{"details":"Get the only proposal id with this many for votes. NOTE: Should only get called at a point at which you are sure there is only one proposal id with a certain number of forVotes (we only use it in the RewardsModule after ties have been checked for)."},"getProposal(uint256)":{"details":"Retrieve proposal data."},"getProposalComments(uint256)":{"details":"Return the array of commentIds on a given proposalId."},"getProposalsWithThisManyForVotes(uint256)":{"details":"Get the whole array in `forVotesToProposalIds` for a given `forVotes` amount."},"getRankIndex(uint256)":{"details":"Get the idx of sortedRanks considered to hold the queried rank taking deleted proposals into account. A rank has to have > 0 votes to be considered valid."},"getSortedRanks()":{"details":"Get the sortedRanks array."},"hashComment((address,uint256,uint256,string))":{"details":"Hashing function used to build the comment id from the comment details."},"isOrIsBelowTiedRank(uint256)":{"details":"Returns whether a given index in sortedRanks is tied or is below a tied rank."},"proposalAddressVotes(uint256,address)":{"details":"Accessor to how many votes an address has cast for a given proposal."},"proposalAddressesHaveVoted(uint256)":{"details":"Accessor to which addresses have cast a vote for a given proposal."},"proposalVotes(uint256)":{"details":"Accessor to the internal vote counts for a given proposal."},"propose((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])),bytes32[])":{"details":"Create a new proposal."},"proposeWithoutProof((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":{"details":"Create a new proposal without a proof if you have already proposed with a proof."},"setOfficialRewardsModule(address)":{"details":"Get the official rewards module contract for this contest (effectively reverse record)."},"validateProposalData((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":{"details":"Verifies that all of the metadata in the proposal is valid."},"verifyProposer(address,bytes32[])":{"details":"Verifies that `account` is permissioned to propose via merkle proof."},"verifyVoter(address,uint256,bytes32[])":{"details":"Verifies that `account` is permissioned to vote with `totalVotes` via merkle proof."},"voteStart()":{"details":"Timestamp the contest vote begins. Votes open at the end of this block, so it is possible to propose during this block."}},"version":1},"userdoc":{"kind":"user","methods":{"checkProof(address,uint256,bytes32[],bool)":{"notice":"Allows checking of proofs for an address"},"submissionMerkleRoot()":{"notice":"Participant inclusion roots"}},"version":1}},"settings":{"remappings":["@forge-std/=lib/forge-std/src/","@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Contest.sol":"Contest"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305","urls":["bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5","dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69","urls":["bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71","dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1","urls":["bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68","dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa","urls":["bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931","dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol":{"keccak256":"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac","urls":["bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04","dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad","urls":["bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278","dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH"],"license":"MIT"},"src/Contest.sol":{"keccak256":"0x0cbc5d92e6f07f4fda4299bfc475a52fc8baa348986f26715fd7a13e3c9d52fd","urls":["bzz-raw://b0367c3d5fe1ff0a7b3f53b4969498e3795a925c5a853e9aa2139d74b737e99c","dweb:/ipfs/Qmc3MpoXwjz4DNUxHPr5WRGo1M9tpdRwc1Pu5hbbEeTW85"],"license":"AGPL-3.0-only"},"src/governance/Governor.sol":{"keccak256":"0x903f59bd11124b9fdcb79918dd174d4a74727e61bfd4ce0c00b293d757199914","urls":["bzz-raw://1882f0edad71aee39791f0fbaa0d204deb350662a7a47738c2be2f18f0142e81","dweb:/ipfs/QmWh6kL3CfXK1nUboCTNHFDqjwaf8N8ynHmaypNHpXoDM4"],"license":"AGPL-3.0-only"},"src/governance/extensions/GovernorCountingSimple.sol":{"keccak256":"0x926939a083bcb63478d84c9f13c87f34dbd9aa248f2257f9cd1bc6a2e8a26b24","urls":["bzz-raw://966641c9ea61d00b1a536158fb57b091d4687204b5a77a2dbc2b664067a035e0","dweb:/ipfs/Qmd3cfwmg4nqkXCew8nrDsEMR2qe9YFAdFXs8q45LcswiQ"],"license":"AGPL-3.0-only"},"src/governance/extensions/GovernorEngagement.sol":{"keccak256":"0xa1aeabd1c062378f8176707d55601dfe64e3fcc71b4d10c6a3f19f332f4bf7f5","urls":["bzz-raw://62057ab67e44db7596ed2cc52966ee71fb1b45dcdccb9aa372b819cb44e97229","dweb:/ipfs/QmZMTyYtK5jZFFZjmfQ3QeTxbaMZxWDawp7J9qbfSgnAHQ"],"license":"AGPL-3.0-only"},"src/governance/extensions/GovernorModuleRegistry.sol":{"keccak256":"0xfa31daaf9d0dbeebd6fddbd13194cc0300eb02b63a07ff70ed3d823dc514a171","urls":["bzz-raw://92cf3840c51124707053c65d4cbc0d0ffc9baff14fd0a66582481d0b1e3d7257","dweb:/ipfs/QmT6eN74UBnrx1cWwo8eHDZ9pjefCtpUTRFJg5YbbVrF3u"],"license":"AGPL-3.0-only"},"src/governance/utils/GovernorMerkleVotes.sol":{"keccak256":"0x02d81049154ff4a8c009126a7470c9f49d076a534576a6fc3fe3f8de2c5cd608","urls":["bzz-raw://21056ce53dd97ffff192a7834bd0ea2cc7691fce7e90e8c7943a9213242ba28a","dweb:/ipfs/QmNzbxrT8Q2FLLQkdNUAKZyZzy4QMGm4zQsdWePWk1sxDb"],"license":"AGPL-3.0-only"},"src/governance/utils/GovernorSorting.sol":{"keccak256":"0xde18aec0c9ebe63b6e210e03151770b4e470fafe53390227244615ffd9b86ad5","urls":["bzz-raw://d02b203d82cb2773a2a97850533d67dee9e3c729475cb438c2e625c71b15a7d5","dweb:/ipfs/QmXsa98RbxoxfZqRAJmP6Sw8uTYssv3HcTyKzYBtXhQE1H"],"license":"AGPL-3.0-only"},"src/modules/RewardsModule.sol":{"keccak256":"0x487a8508cbdb78886d4570c650f8b1faa7f570ac1553db9cdfbd98fd213501d5","urls":["bzz-raw://d12f2f1c565208465cf6906d478d6e851b8ae6795cc8481cd25503fb20c224a9","dweb:/ipfs/QmP2uKA2gHMcabQ9TRRJchTBncyc65hFG41Fcf6gwzBE3W"],"license":"AGPL-3.0-only"}},"version":1},"id":34} \ No newline at end of file diff --git a/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.4.32.checkCanceled.sol/flattenedContest.sol b/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.4.32.checkCanceled.sol/flattenedContest.sol new file mode 100644 index 000000000..7210cff72 --- /dev/null +++ b/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.4.32.checkCanceled.sol/flattenedContest.sol @@ -0,0 +1,3375 @@ +// SPDX-License-Identifier: AGPL-3.0-only +pragma solidity ^0.8.0 ^0.8.1 ^0.8.19; + +// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol + +// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) + +/** + * @dev Interface of the ERC20 standard as defined in the EIP. + */ +interface IERC20 { + /** + * @dev Emitted when `value` tokens are moved from one account (`from`) to + * another (`to`). + * + * Note that `value` may be zero. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev Emitted when the allowance of a `spender` for an `owner` is set by + * a call to {approve}. `value` is the new allowance. + */ + event Approval(address indexed owner, address indexed spender, uint256 value); + + /** + * @dev Returns the amount of tokens in existence. + */ + function totalSupply() external view returns (uint256); + + /** + * @dev Returns the amount of tokens owned by `account`. + */ + function balanceOf(address account) external view returns (uint256); + + /** + * @dev Moves `amount` tokens from the caller's account to `to`. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transfer(address to, uint256 amount) external returns (bool); + + /** + * @dev Returns the remaining number of tokens that `spender` will be + * allowed to spend on behalf of `owner` through {transferFrom}. This is + * zero by default. + * + * This value changes when {approve} or {transferFrom} are called. + */ + function allowance(address owner, address spender) external view returns (uint256); + + /** + * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * IMPORTANT: Beware that changing an allowance with this method brings the risk + * that someone may use both the old and the new allowance by unfortunate + * transaction ordering. One possible solution to mitigate this race + * condition is to first reduce the spender's allowance to 0 and set the + * desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + * Emits an {Approval} event. + */ + function approve(address spender, uint256 amount) external returns (bool); + + /** + * @dev Moves `amount` tokens from `from` to `to` using the + * allowance mechanism. `amount` is then deducted from the caller's + * allowance. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transferFrom(address from, address to, uint256 amount) external returns (bool); +} + +// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol + +// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol) + +/** + * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in + * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. + * + * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by + * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't + * need to send a transaction, and thus is not required to hold Ether at all. + * + * ==== Security Considerations + * + * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature + * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be + * considered as an intention to spend the allowance in any specific way. The second is that because permits have + * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should + * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be + * generally recommended is: + * + * ```solidity + * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { + * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} + * doThing(..., value); + * } + * + * function doThing(..., uint256 value) public { + * token.safeTransferFrom(msg.sender, address(this), value); + * ... + * } + * ``` + * + * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of + * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also + * {SafeERC20-safeTransferFrom}). + * + * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so + * contracts should have entry points that don't rely on permit. + */ +interface IERC20Permit { + /** + * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, + * given ``owner``'s signed approval. + * + * IMPORTANT: The same issues {IERC20-approve} has related to transaction + * ordering also apply here. + * + * Emits an {Approval} event. + * + * Requirements: + * + * - `spender` cannot be the zero address. + * - `deadline` must be a timestamp in the future. + * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` + * over the EIP712-formatted function arguments. + * - the signature must use ``owner``'s current nonce (see {nonces}). + * + * For more information on the signature format, see the + * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP + * section]. + * + * CAUTION: See Security Considerations above. + */ + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) external; + + /** + * @dev Returns the current nonce for `owner`. This value must be + * included whenever a signature is generated for {permit}. + * + * Every successful call to {permit} increases ``owner``'s nonce by one. This + * prevents a signature from being used multiple times. + */ + function nonces(address owner) external view returns (uint256); + + /** + * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. + */ + // solhint-disable-next-line func-name-mixedcase + function DOMAIN_SEPARATOR() external view returns (bytes32); +} + +// lib/openzeppelin-contracts/contracts/utils/Address.sol + +// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) + +/** + * @dev Collection of functions related to the address type + */ +library Address { + /** + * @dev Returns true if `account` is a contract. + * + * [IMPORTANT] + * ==== + * It is unsafe to assume that an address for which this function returns + * false is an externally-owned account (EOA) and not a contract. + * + * Among others, `isContract` will return false for the following + * types of addresses: + * + * - an externally-owned account + * - a contract in construction + * - an address where a contract will be created + * - an address where a contract lived, but was destroyed + * + * Furthermore, `isContract` will also return true if the target contract within + * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, + * which only has an effect at the end of a transaction. + * ==== + * + * [IMPORTANT] + * ==== + * You shouldn't rely on `isContract` to protect against flash loan attacks! + * + * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets + * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract + * constructor. + * ==== + */ + function isContract(address account) internal view returns (bool) { + // This method relies on extcodesize/address.code.length, which returns 0 + // for contracts in construction, since the code is only stored at the end + // of the constructor execution. + + return account.code.length > 0; + } + + /** + * @dev Replacement for Solidity's `transfer`: sends `amount` wei to + * `recipient`, forwarding all available gas and reverting on errors. + * + * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost + * of certain opcodes, possibly making contracts go over the 2300 gas limit + * imposed by `transfer`, making them unable to receive funds via + * `transfer`. {sendValue} removes this limitation. + * + * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. + * + * IMPORTANT: because control is transferred to `recipient`, care must be + * taken to not create reentrancy vulnerabilities. Consider using + * {ReentrancyGuard} or the + * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. + */ + function sendValue(address payable recipient, uint256 amount) internal { + require(address(this).balance >= amount, "Address: insufficient balance"); + + (bool success, ) = recipient.call{value: amount}(""); + require(success, "Address: unable to send value, recipient may have reverted"); + } + + /** + * @dev Performs a Solidity function call using a low level `call`. A + * plain `call` is an unsafe replacement for a function call: use this + * function instead. + * + * If `target` reverts with a revert reason, it is bubbled up by this + * function (like regular Solidity function calls). + * + * Returns the raw returned data. To convert to the expected return value, + * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. + * + * Requirements: + * + * - `target` must be a contract. + * - calling `target` with `data` must not revert. + * + * _Available since v3.1._ + */ + function functionCall(address target, bytes memory data) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0, "Address: low-level call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with + * `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCall( + address target, + bytes memory data, + string memory errorMessage + ) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but also transferring `value` wei to `target`. + * + * Requirements: + * + * - the calling contract must have an ETH balance of at least `value`. + * - the called Solidity function must be `payable`. + * + * _Available since v3.1._ + */ + function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { + return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); + } + + /** + * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but + * with `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCallWithValue( + address target, + bytes memory data, + uint256 value, + string memory errorMessage + ) internal returns (bytes memory) { + require(address(this).balance >= value, "Address: insufficient balance for call"); + (bool success, bytes memory returndata) = target.call{value: value}(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { + return functionStaticCall(target, data, "Address: low-level static call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall( + address target, + bytes memory data, + string memory errorMessage + ) internal view returns (bytes memory) { + (bool success, bytes memory returndata) = target.staticcall(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a delegate call. + * + * _Available since v3.4._ + */ + function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { + return functionDelegateCall(target, data, "Address: low-level delegate call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a delegate call. + * + * _Available since v3.4._ + */ + function functionDelegateCall( + address target, + bytes memory data, + string memory errorMessage + ) internal returns (bytes memory) { + (bool success, bytes memory returndata) = target.delegatecall(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling + * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. + * + * _Available since v4.8._ + */ + function verifyCallResultFromTarget( + address target, + bool success, + bytes memory returndata, + string memory errorMessage + ) internal view returns (bytes memory) { + if (success) { + if (returndata.length == 0) { + // only check isContract if the call was successful and the return data is empty + // otherwise we already know that it was a contract + require(isContract(target), "Address: call to non-contract"); + } + return returndata; + } else { + _revert(returndata, errorMessage); + } + } + + /** + * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the + * revert reason or using the provided one. + * + * _Available since v4.3._ + */ + function verifyCallResult( + bool success, + bytes memory returndata, + string memory errorMessage + ) internal pure returns (bytes memory) { + if (success) { + return returndata; + } else { + _revert(returndata, errorMessage); + } + } + + function _revert(bytes memory returndata, string memory errorMessage) private pure { + // Look for revert reason and bubble it up if present + if (returndata.length > 0) { + // The easiest way to bubble the revert reason is using memory via assembly + /// @solidity memory-safe-assembly + assembly { + let returndata_size := mload(returndata) + revert(add(32, returndata), returndata_size) + } + } else { + revert(errorMessage); + } + } +} + +// lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol + +// OpenZeppelin Contracts (last updated v4.9.2) (utils/cryptography/MerkleProof.sol) + +/** + * @dev These functions deal with verification of Merkle Tree proofs. + * + * The tree and the proofs can be generated using our + * https://github.com/OpenZeppelin/merkle-tree[JavaScript library]. + * You will find a quickstart guide in the readme. + * + * WARNING: You should avoid using leaf values that are 64 bytes long prior to + * hashing, or use a hash function other than keccak256 for hashing leaves. + * This is because the concatenation of a sorted pair of internal nodes in + * the merkle tree could be reinterpreted as a leaf value. + * OpenZeppelin's JavaScript library generates merkle trees that are safe + * against this attack out of the box. + */ +library MerkleProof { + /** + * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree + * defined by `root`. For this, a `proof` must be provided, containing + * sibling hashes on the branch from the leaf to the root of the tree. Each + * pair of leaves and each pair of pre-images are assumed to be sorted. + */ + function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { + return processProof(proof, leaf) == root; + } + + /** + * @dev Calldata version of {verify} + * + * _Available since v4.7._ + */ + function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { + return processProofCalldata(proof, leaf) == root; + } + + /** + * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up + * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt + * hash matches the root of the tree. When processing the proof, the pairs + * of leafs & pre-images are assumed to be sorted. + * + * _Available since v4.4._ + */ + function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { + bytes32 computedHash = leaf; + for (uint256 i = 0; i < proof.length; i++) { + computedHash = _hashPair(computedHash, proof[i]); + } + return computedHash; + } + + /** + * @dev Calldata version of {processProof} + * + * _Available since v4.7._ + */ + function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { + bytes32 computedHash = leaf; + for (uint256 i = 0; i < proof.length; i++) { + computedHash = _hashPair(computedHash, proof[i]); + } + return computedHash; + } + + /** + * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by + * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. + * + * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. + * + * _Available since v4.7._ + */ + function multiProofVerify( + bytes32[] memory proof, + bool[] memory proofFlags, + bytes32 root, + bytes32[] memory leaves + ) internal pure returns (bool) { + return processMultiProof(proof, proofFlags, leaves) == root; + } + + /** + * @dev Calldata version of {multiProofVerify} + * + * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. + * + * _Available since v4.7._ + */ + function multiProofVerifyCalldata( + bytes32[] calldata proof, + bool[] calldata proofFlags, + bytes32 root, + bytes32[] memory leaves + ) internal pure returns (bool) { + return processMultiProofCalldata(proof, proofFlags, leaves) == root; + } + + /** + * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction + * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another + * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false + * respectively. + * + * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree + * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the + * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). + * + * _Available since v4.7._ + */ + function processMultiProof( + bytes32[] memory proof, + bool[] memory proofFlags, + bytes32[] memory leaves + ) internal pure returns (bytes32 merkleRoot) { + // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by + // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the + // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of + // the merkle tree. + uint256 leavesLen = leaves.length; + uint256 proofLen = proof.length; + uint256 totalHashes = proofFlags.length; + + // Check proof validity. + require(leavesLen + proofLen - 1 == totalHashes, "MerkleProof: invalid multiproof"); + + // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using + // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". + bytes32[] memory hashes = new bytes32[](totalHashes); + uint256 leafPos = 0; + uint256 hashPos = 0; + uint256 proofPos = 0; + // At each step, we compute the next hash using two values: + // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we + // get the next hash. + // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the + // `proof` array. + for (uint256 i = 0; i < totalHashes; i++) { + bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; + bytes32 b = proofFlags[i] + ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) + : proof[proofPos++]; + hashes[i] = _hashPair(a, b); + } + + if (totalHashes > 0) { + require(proofPos == proofLen, "MerkleProof: invalid multiproof"); + unchecked { + return hashes[totalHashes - 1]; + } + } else if (leavesLen > 0) { + return leaves[0]; + } else { + return proof[0]; + } + } + + /** + * @dev Calldata version of {processMultiProof}. + * + * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. + * + * _Available since v4.7._ + */ + function processMultiProofCalldata( + bytes32[] calldata proof, + bool[] calldata proofFlags, + bytes32[] memory leaves + ) internal pure returns (bytes32 merkleRoot) { + // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by + // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the + // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of + // the merkle tree. + uint256 leavesLen = leaves.length; + uint256 proofLen = proof.length; + uint256 totalHashes = proofFlags.length; + + // Check proof validity. + require(leavesLen + proofLen - 1 == totalHashes, "MerkleProof: invalid multiproof"); + + // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using + // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". + bytes32[] memory hashes = new bytes32[](totalHashes); + uint256 leafPos = 0; + uint256 hashPos = 0; + uint256 proofPos = 0; + // At each step, we compute the next hash using two values: + // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we + // get the next hash. + // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the + // `proof` array. + for (uint256 i = 0; i < totalHashes; i++) { + bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; + bytes32 b = proofFlags[i] + ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) + : proof[proofPos++]; + hashes[i] = _hashPair(a, b); + } + + if (totalHashes > 0) { + require(proofPos == proofLen, "MerkleProof: invalid multiproof"); + unchecked { + return hashes[totalHashes - 1]; + } + } else if (leavesLen > 0) { + return leaves[0]; + } else { + return proof[0]; + } + } + + function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { + return a < b ? _efficientHash(a, b) : _efficientHash(b, a); + } + + function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { + /// @solidity memory-safe-assembly + assembly { + mstore(0x00, a) + mstore(0x20, b) + value := keccak256(0x00, 0x40) + } + } +} + +// lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol + +// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SafeCast.sol) +// This file was procedurally generated from scripts/generate/templates/SafeCast.js. + +/** + * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow + * checks. + * + * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can + * easily result in undesired exploitation or bugs, since developers usually + * assume that overflows raise errors. `SafeCast` restores this intuition by + * reverting the transaction when such an operation overflows. + * + * Using this library instead of the unchecked operations eliminates an entire + * class of bugs, so it's recommended to use it always. + * + * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing + * all math on `uint256` and `int256` and then downcasting. + */ +library SafeCast { + /** + * @dev Returns the downcasted uint248 from uint256, reverting on + * overflow (when the input is greater than largest uint248). + * + * Counterpart to Solidity's `uint248` operator. + * + * Requirements: + * + * - input must fit into 248 bits + * + * _Available since v4.7._ + */ + function toUint248(uint256 value) internal pure returns (uint248) { + require(value <= type(uint248).max, "SafeCast: value doesn't fit in 248 bits"); + return uint248(value); + } + + /** + * @dev Returns the downcasted uint240 from uint256, reverting on + * overflow (when the input is greater than largest uint240). + * + * Counterpart to Solidity's `uint240` operator. + * + * Requirements: + * + * - input must fit into 240 bits + * + * _Available since v4.7._ + */ + function toUint240(uint256 value) internal pure returns (uint240) { + require(value <= type(uint240).max, "SafeCast: value doesn't fit in 240 bits"); + return uint240(value); + } + + /** + * @dev Returns the downcasted uint232 from uint256, reverting on + * overflow (when the input is greater than largest uint232). + * + * Counterpart to Solidity's `uint232` operator. + * + * Requirements: + * + * - input must fit into 232 bits + * + * _Available since v4.7._ + */ + function toUint232(uint256 value) internal pure returns (uint232) { + require(value <= type(uint232).max, "SafeCast: value doesn't fit in 232 bits"); + return uint232(value); + } + + /** + * @dev Returns the downcasted uint224 from uint256, reverting on + * overflow (when the input is greater than largest uint224). + * + * Counterpart to Solidity's `uint224` operator. + * + * Requirements: + * + * - input must fit into 224 bits + * + * _Available since v4.2._ + */ + function toUint224(uint256 value) internal pure returns (uint224) { + require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); + return uint224(value); + } + + /** + * @dev Returns the downcasted uint216 from uint256, reverting on + * overflow (when the input is greater than largest uint216). + * + * Counterpart to Solidity's `uint216` operator. + * + * Requirements: + * + * - input must fit into 216 bits + * + * _Available since v4.7._ + */ + function toUint216(uint256 value) internal pure returns (uint216) { + require(value <= type(uint216).max, "SafeCast: value doesn't fit in 216 bits"); + return uint216(value); + } + + /** + * @dev Returns the downcasted uint208 from uint256, reverting on + * overflow (when the input is greater than largest uint208). + * + * Counterpart to Solidity's `uint208` operator. + * + * Requirements: + * + * - input must fit into 208 bits + * + * _Available since v4.7._ + */ + function toUint208(uint256 value) internal pure returns (uint208) { + require(value <= type(uint208).max, "SafeCast: value doesn't fit in 208 bits"); + return uint208(value); + } + + /** + * @dev Returns the downcasted uint200 from uint256, reverting on + * overflow (when the input is greater than largest uint200). + * + * Counterpart to Solidity's `uint200` operator. + * + * Requirements: + * + * - input must fit into 200 bits + * + * _Available since v4.7._ + */ + function toUint200(uint256 value) internal pure returns (uint200) { + require(value <= type(uint200).max, "SafeCast: value doesn't fit in 200 bits"); + return uint200(value); + } + + /** + * @dev Returns the downcasted uint192 from uint256, reverting on + * overflow (when the input is greater than largest uint192). + * + * Counterpart to Solidity's `uint192` operator. + * + * Requirements: + * + * - input must fit into 192 bits + * + * _Available since v4.7._ + */ + function toUint192(uint256 value) internal pure returns (uint192) { + require(value <= type(uint192).max, "SafeCast: value doesn't fit in 192 bits"); + return uint192(value); + } + + /** + * @dev Returns the downcasted uint184 from uint256, reverting on + * overflow (when the input is greater than largest uint184). + * + * Counterpart to Solidity's `uint184` operator. + * + * Requirements: + * + * - input must fit into 184 bits + * + * _Available since v4.7._ + */ + function toUint184(uint256 value) internal pure returns (uint184) { + require(value <= type(uint184).max, "SafeCast: value doesn't fit in 184 bits"); + return uint184(value); + } + + /** + * @dev Returns the downcasted uint176 from uint256, reverting on + * overflow (when the input is greater than largest uint176). + * + * Counterpart to Solidity's `uint176` operator. + * + * Requirements: + * + * - input must fit into 176 bits + * + * _Available since v4.7._ + */ + function toUint176(uint256 value) internal pure returns (uint176) { + require(value <= type(uint176).max, "SafeCast: value doesn't fit in 176 bits"); + return uint176(value); + } + + /** + * @dev Returns the downcasted uint168 from uint256, reverting on + * overflow (when the input is greater than largest uint168). + * + * Counterpart to Solidity's `uint168` operator. + * + * Requirements: + * + * - input must fit into 168 bits + * + * _Available since v4.7._ + */ + function toUint168(uint256 value) internal pure returns (uint168) { + require(value <= type(uint168).max, "SafeCast: value doesn't fit in 168 bits"); + return uint168(value); + } + + /** + * @dev Returns the downcasted uint160 from uint256, reverting on + * overflow (when the input is greater than largest uint160). + * + * Counterpart to Solidity's `uint160` operator. + * + * Requirements: + * + * - input must fit into 160 bits + * + * _Available since v4.7._ + */ + function toUint160(uint256 value) internal pure returns (uint160) { + require(value <= type(uint160).max, "SafeCast: value doesn't fit in 160 bits"); + return uint160(value); + } + + /** + * @dev Returns the downcasted uint152 from uint256, reverting on + * overflow (when the input is greater than largest uint152). + * + * Counterpart to Solidity's `uint152` operator. + * + * Requirements: + * + * - input must fit into 152 bits + * + * _Available since v4.7._ + */ + function toUint152(uint256 value) internal pure returns (uint152) { + require(value <= type(uint152).max, "SafeCast: value doesn't fit in 152 bits"); + return uint152(value); + } + + /** + * @dev Returns the downcasted uint144 from uint256, reverting on + * overflow (when the input is greater than largest uint144). + * + * Counterpart to Solidity's `uint144` operator. + * + * Requirements: + * + * - input must fit into 144 bits + * + * _Available since v4.7._ + */ + function toUint144(uint256 value) internal pure returns (uint144) { + require(value <= type(uint144).max, "SafeCast: value doesn't fit in 144 bits"); + return uint144(value); + } + + /** + * @dev Returns the downcasted uint136 from uint256, reverting on + * overflow (when the input is greater than largest uint136). + * + * Counterpart to Solidity's `uint136` operator. + * + * Requirements: + * + * - input must fit into 136 bits + * + * _Available since v4.7._ + */ + function toUint136(uint256 value) internal pure returns (uint136) { + require(value <= type(uint136).max, "SafeCast: value doesn't fit in 136 bits"); + return uint136(value); + } + + /** + * @dev Returns the downcasted uint128 from uint256, reverting on + * overflow (when the input is greater than largest uint128). + * + * Counterpart to Solidity's `uint128` operator. + * + * Requirements: + * + * - input must fit into 128 bits + * + * _Available since v2.5._ + */ + function toUint128(uint256 value) internal pure returns (uint128) { + require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); + return uint128(value); + } + + /** + * @dev Returns the downcasted uint120 from uint256, reverting on + * overflow (when the input is greater than largest uint120). + * + * Counterpart to Solidity's `uint120` operator. + * + * Requirements: + * + * - input must fit into 120 bits + * + * _Available since v4.7._ + */ + function toUint120(uint256 value) internal pure returns (uint120) { + require(value <= type(uint120).max, "SafeCast: value doesn't fit in 120 bits"); + return uint120(value); + } + + /** + * @dev Returns the downcasted uint112 from uint256, reverting on + * overflow (when the input is greater than largest uint112). + * + * Counterpart to Solidity's `uint112` operator. + * + * Requirements: + * + * - input must fit into 112 bits + * + * _Available since v4.7._ + */ + function toUint112(uint256 value) internal pure returns (uint112) { + require(value <= type(uint112).max, "SafeCast: value doesn't fit in 112 bits"); + return uint112(value); + } + + /** + * @dev Returns the downcasted uint104 from uint256, reverting on + * overflow (when the input is greater than largest uint104). + * + * Counterpart to Solidity's `uint104` operator. + * + * Requirements: + * + * - input must fit into 104 bits + * + * _Available since v4.7._ + */ + function toUint104(uint256 value) internal pure returns (uint104) { + require(value <= type(uint104).max, "SafeCast: value doesn't fit in 104 bits"); + return uint104(value); + } + + /** + * @dev Returns the downcasted uint96 from uint256, reverting on + * overflow (when the input is greater than largest uint96). + * + * Counterpart to Solidity's `uint96` operator. + * + * Requirements: + * + * - input must fit into 96 bits + * + * _Available since v4.2._ + */ + function toUint96(uint256 value) internal pure returns (uint96) { + require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); + return uint96(value); + } + + /** + * @dev Returns the downcasted uint88 from uint256, reverting on + * overflow (when the input is greater than largest uint88). + * + * Counterpart to Solidity's `uint88` operator. + * + * Requirements: + * + * - input must fit into 88 bits + * + * _Available since v4.7._ + */ + function toUint88(uint256 value) internal pure returns (uint88) { + require(value <= type(uint88).max, "SafeCast: value doesn't fit in 88 bits"); + return uint88(value); + } + + /** + * @dev Returns the downcasted uint80 from uint256, reverting on + * overflow (when the input is greater than largest uint80). + * + * Counterpart to Solidity's `uint80` operator. + * + * Requirements: + * + * - input must fit into 80 bits + * + * _Available since v4.7._ + */ + function toUint80(uint256 value) internal pure returns (uint80) { + require(value <= type(uint80).max, "SafeCast: value doesn't fit in 80 bits"); + return uint80(value); + } + + /** + * @dev Returns the downcasted uint72 from uint256, reverting on + * overflow (when the input is greater than largest uint72). + * + * Counterpart to Solidity's `uint72` operator. + * + * Requirements: + * + * - input must fit into 72 bits + * + * _Available since v4.7._ + */ + function toUint72(uint256 value) internal pure returns (uint72) { + require(value <= type(uint72).max, "SafeCast: value doesn't fit in 72 bits"); + return uint72(value); + } + + /** + * @dev Returns the downcasted uint64 from uint256, reverting on + * overflow (when the input is greater than largest uint64). + * + * Counterpart to Solidity's `uint64` operator. + * + * Requirements: + * + * - input must fit into 64 bits + * + * _Available since v2.5._ + */ + function toUint64(uint256 value) internal pure returns (uint64) { + require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); + return uint64(value); + } + + /** + * @dev Returns the downcasted uint56 from uint256, reverting on + * overflow (when the input is greater than largest uint56). + * + * Counterpart to Solidity's `uint56` operator. + * + * Requirements: + * + * - input must fit into 56 bits + * + * _Available since v4.7._ + */ + function toUint56(uint256 value) internal pure returns (uint56) { + require(value <= type(uint56).max, "SafeCast: value doesn't fit in 56 bits"); + return uint56(value); + } + + /** + * @dev Returns the downcasted uint48 from uint256, reverting on + * overflow (when the input is greater than largest uint48). + * + * Counterpart to Solidity's `uint48` operator. + * + * Requirements: + * + * - input must fit into 48 bits + * + * _Available since v4.7._ + */ + function toUint48(uint256 value) internal pure returns (uint48) { + require(value <= type(uint48).max, "SafeCast: value doesn't fit in 48 bits"); + return uint48(value); + } + + /** + * @dev Returns the downcasted uint40 from uint256, reverting on + * overflow (when the input is greater than largest uint40). + * + * Counterpart to Solidity's `uint40` operator. + * + * Requirements: + * + * - input must fit into 40 bits + * + * _Available since v4.7._ + */ + function toUint40(uint256 value) internal pure returns (uint40) { + require(value <= type(uint40).max, "SafeCast: value doesn't fit in 40 bits"); + return uint40(value); + } + + /** + * @dev Returns the downcasted uint32 from uint256, reverting on + * overflow (when the input is greater than largest uint32). + * + * Counterpart to Solidity's `uint32` operator. + * + * Requirements: + * + * - input must fit into 32 bits + * + * _Available since v2.5._ + */ + function toUint32(uint256 value) internal pure returns (uint32) { + require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); + return uint32(value); + } + + /** + * @dev Returns the downcasted uint24 from uint256, reverting on + * overflow (when the input is greater than largest uint24). + * + * Counterpart to Solidity's `uint24` operator. + * + * Requirements: + * + * - input must fit into 24 bits + * + * _Available since v4.7._ + */ + function toUint24(uint256 value) internal pure returns (uint24) { + require(value <= type(uint24).max, "SafeCast: value doesn't fit in 24 bits"); + return uint24(value); + } + + /** + * @dev Returns the downcasted uint16 from uint256, reverting on + * overflow (when the input is greater than largest uint16). + * + * Counterpart to Solidity's `uint16` operator. + * + * Requirements: + * + * - input must fit into 16 bits + * + * _Available since v2.5._ + */ + function toUint16(uint256 value) internal pure returns (uint16) { + require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); + return uint16(value); + } + + /** + * @dev Returns the downcasted uint8 from uint256, reverting on + * overflow (when the input is greater than largest uint8). + * + * Counterpart to Solidity's `uint8` operator. + * + * Requirements: + * + * - input must fit into 8 bits + * + * _Available since v2.5._ + */ + function toUint8(uint256 value) internal pure returns (uint8) { + require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); + return uint8(value); + } + + /** + * @dev Converts a signed int256 into an unsigned uint256. + * + * Requirements: + * + * - input must be greater than or equal to 0. + * + * _Available since v3.0._ + */ + function toUint256(int256 value) internal pure returns (uint256) { + require(value >= 0, "SafeCast: value must be positive"); + return uint256(value); + } + + /** + * @dev Returns the downcasted int248 from int256, reverting on + * overflow (when the input is less than smallest int248 or + * greater than largest int248). + * + * Counterpart to Solidity's `int248` operator. + * + * Requirements: + * + * - input must fit into 248 bits + * + * _Available since v4.7._ + */ + function toInt248(int256 value) internal pure returns (int248 downcasted) { + downcasted = int248(value); + require(downcasted == value, "SafeCast: value doesn't fit in 248 bits"); + } + + /** + * @dev Returns the downcasted int240 from int256, reverting on + * overflow (when the input is less than smallest int240 or + * greater than largest int240). + * + * Counterpart to Solidity's `int240` operator. + * + * Requirements: + * + * - input must fit into 240 bits + * + * _Available since v4.7._ + */ + function toInt240(int256 value) internal pure returns (int240 downcasted) { + downcasted = int240(value); + require(downcasted == value, "SafeCast: value doesn't fit in 240 bits"); + } + + /** + * @dev Returns the downcasted int232 from int256, reverting on + * overflow (when the input is less than smallest int232 or + * greater than largest int232). + * + * Counterpart to Solidity's `int232` operator. + * + * Requirements: + * + * - input must fit into 232 bits + * + * _Available since v4.7._ + */ + function toInt232(int256 value) internal pure returns (int232 downcasted) { + downcasted = int232(value); + require(downcasted == value, "SafeCast: value doesn't fit in 232 bits"); + } + + /** + * @dev Returns the downcasted int224 from int256, reverting on + * overflow (when the input is less than smallest int224 or + * greater than largest int224). + * + * Counterpart to Solidity's `int224` operator. + * + * Requirements: + * + * - input must fit into 224 bits + * + * _Available since v4.7._ + */ + function toInt224(int256 value) internal pure returns (int224 downcasted) { + downcasted = int224(value); + require(downcasted == value, "SafeCast: value doesn't fit in 224 bits"); + } + + /** + * @dev Returns the downcasted int216 from int256, reverting on + * overflow (when the input is less than smallest int216 or + * greater than largest int216). + * + * Counterpart to Solidity's `int216` operator. + * + * Requirements: + * + * - input must fit into 216 bits + * + * _Available since v4.7._ + */ + function toInt216(int256 value) internal pure returns (int216 downcasted) { + downcasted = int216(value); + require(downcasted == value, "SafeCast: value doesn't fit in 216 bits"); + } + + /** + * @dev Returns the downcasted int208 from int256, reverting on + * overflow (when the input is less than smallest int208 or + * greater than largest int208). + * + * Counterpart to Solidity's `int208` operator. + * + * Requirements: + * + * - input must fit into 208 bits + * + * _Available since v4.7._ + */ + function toInt208(int256 value) internal pure returns (int208 downcasted) { + downcasted = int208(value); + require(downcasted == value, "SafeCast: value doesn't fit in 208 bits"); + } + + /** + * @dev Returns the downcasted int200 from int256, reverting on + * overflow (when the input is less than smallest int200 or + * greater than largest int200). + * + * Counterpart to Solidity's `int200` operator. + * + * Requirements: + * + * - input must fit into 200 bits + * + * _Available since v4.7._ + */ + function toInt200(int256 value) internal pure returns (int200 downcasted) { + downcasted = int200(value); + require(downcasted == value, "SafeCast: value doesn't fit in 200 bits"); + } + + /** + * @dev Returns the downcasted int192 from int256, reverting on + * overflow (when the input is less than smallest int192 or + * greater than largest int192). + * + * Counterpart to Solidity's `int192` operator. + * + * Requirements: + * + * - input must fit into 192 bits + * + * _Available since v4.7._ + */ + function toInt192(int256 value) internal pure returns (int192 downcasted) { + downcasted = int192(value); + require(downcasted == value, "SafeCast: value doesn't fit in 192 bits"); + } + + /** + * @dev Returns the downcasted int184 from int256, reverting on + * overflow (when the input is less than smallest int184 or + * greater than largest int184). + * + * Counterpart to Solidity's `int184` operator. + * + * Requirements: + * + * - input must fit into 184 bits + * + * _Available since v4.7._ + */ + function toInt184(int256 value) internal pure returns (int184 downcasted) { + downcasted = int184(value); + require(downcasted == value, "SafeCast: value doesn't fit in 184 bits"); + } + + /** + * @dev Returns the downcasted int176 from int256, reverting on + * overflow (when the input is less than smallest int176 or + * greater than largest int176). + * + * Counterpart to Solidity's `int176` operator. + * + * Requirements: + * + * - input must fit into 176 bits + * + * _Available since v4.7._ + */ + function toInt176(int256 value) internal pure returns (int176 downcasted) { + downcasted = int176(value); + require(downcasted == value, "SafeCast: value doesn't fit in 176 bits"); + } + + /** + * @dev Returns the downcasted int168 from int256, reverting on + * overflow (when the input is less than smallest int168 or + * greater than largest int168). + * + * Counterpart to Solidity's `int168` operator. + * + * Requirements: + * + * - input must fit into 168 bits + * + * _Available since v4.7._ + */ + function toInt168(int256 value) internal pure returns (int168 downcasted) { + downcasted = int168(value); + require(downcasted == value, "SafeCast: value doesn't fit in 168 bits"); + } + + /** + * @dev Returns the downcasted int160 from int256, reverting on + * overflow (when the input is less than smallest int160 or + * greater than largest int160). + * + * Counterpart to Solidity's `int160` operator. + * + * Requirements: + * + * - input must fit into 160 bits + * + * _Available since v4.7._ + */ + function toInt160(int256 value) internal pure returns (int160 downcasted) { + downcasted = int160(value); + require(downcasted == value, "SafeCast: value doesn't fit in 160 bits"); + } + + /** + * @dev Returns the downcasted int152 from int256, reverting on + * overflow (when the input is less than smallest int152 or + * greater than largest int152). + * + * Counterpart to Solidity's `int152` operator. + * + * Requirements: + * + * - input must fit into 152 bits + * + * _Available since v4.7._ + */ + function toInt152(int256 value) internal pure returns (int152 downcasted) { + downcasted = int152(value); + require(downcasted == value, "SafeCast: value doesn't fit in 152 bits"); + } + + /** + * @dev Returns the downcasted int144 from int256, reverting on + * overflow (when the input is less than smallest int144 or + * greater than largest int144). + * + * Counterpart to Solidity's `int144` operator. + * + * Requirements: + * + * - input must fit into 144 bits + * + * _Available since v4.7._ + */ + function toInt144(int256 value) internal pure returns (int144 downcasted) { + downcasted = int144(value); + require(downcasted == value, "SafeCast: value doesn't fit in 144 bits"); + } + + /** + * @dev Returns the downcasted int136 from int256, reverting on + * overflow (when the input is less than smallest int136 or + * greater than largest int136). + * + * Counterpart to Solidity's `int136` operator. + * + * Requirements: + * + * - input must fit into 136 bits + * + * _Available since v4.7._ + */ + function toInt136(int256 value) internal pure returns (int136 downcasted) { + downcasted = int136(value); + require(downcasted == value, "SafeCast: value doesn't fit in 136 bits"); + } + + /** + * @dev Returns the downcasted int128 from int256, reverting on + * overflow (when the input is less than smallest int128 or + * greater than largest int128). + * + * Counterpart to Solidity's `int128` operator. + * + * Requirements: + * + * - input must fit into 128 bits + * + * _Available since v3.1._ + */ + function toInt128(int256 value) internal pure returns (int128 downcasted) { + downcasted = int128(value); + require(downcasted == value, "SafeCast: value doesn't fit in 128 bits"); + } + + /** + * @dev Returns the downcasted int120 from int256, reverting on + * overflow (when the input is less than smallest int120 or + * greater than largest int120). + * + * Counterpart to Solidity's `int120` operator. + * + * Requirements: + * + * - input must fit into 120 bits + * + * _Available since v4.7._ + */ + function toInt120(int256 value) internal pure returns (int120 downcasted) { + downcasted = int120(value); + require(downcasted == value, "SafeCast: value doesn't fit in 120 bits"); + } + + /** + * @dev Returns the downcasted int112 from int256, reverting on + * overflow (when the input is less than smallest int112 or + * greater than largest int112). + * + * Counterpart to Solidity's `int112` operator. + * + * Requirements: + * + * - input must fit into 112 bits + * + * _Available since v4.7._ + */ + function toInt112(int256 value) internal pure returns (int112 downcasted) { + downcasted = int112(value); + require(downcasted == value, "SafeCast: value doesn't fit in 112 bits"); + } + + /** + * @dev Returns the downcasted int104 from int256, reverting on + * overflow (when the input is less than smallest int104 or + * greater than largest int104). + * + * Counterpart to Solidity's `int104` operator. + * + * Requirements: + * + * - input must fit into 104 bits + * + * _Available since v4.7._ + */ + function toInt104(int256 value) internal pure returns (int104 downcasted) { + downcasted = int104(value); + require(downcasted == value, "SafeCast: value doesn't fit in 104 bits"); + } + + /** + * @dev Returns the downcasted int96 from int256, reverting on + * overflow (when the input is less than smallest int96 or + * greater than largest int96). + * + * Counterpart to Solidity's `int96` operator. + * + * Requirements: + * + * - input must fit into 96 bits + * + * _Available since v4.7._ + */ + function toInt96(int256 value) internal pure returns (int96 downcasted) { + downcasted = int96(value); + require(downcasted == value, "SafeCast: value doesn't fit in 96 bits"); + } + + /** + * @dev Returns the downcasted int88 from int256, reverting on + * overflow (when the input is less than smallest int88 or + * greater than largest int88). + * + * Counterpart to Solidity's `int88` operator. + * + * Requirements: + * + * - input must fit into 88 bits + * + * _Available since v4.7._ + */ + function toInt88(int256 value) internal pure returns (int88 downcasted) { + downcasted = int88(value); + require(downcasted == value, "SafeCast: value doesn't fit in 88 bits"); + } + + /** + * @dev Returns the downcasted int80 from int256, reverting on + * overflow (when the input is less than smallest int80 or + * greater than largest int80). + * + * Counterpart to Solidity's `int80` operator. + * + * Requirements: + * + * - input must fit into 80 bits + * + * _Available since v4.7._ + */ + function toInt80(int256 value) internal pure returns (int80 downcasted) { + downcasted = int80(value); + require(downcasted == value, "SafeCast: value doesn't fit in 80 bits"); + } + + /** + * @dev Returns the downcasted int72 from int256, reverting on + * overflow (when the input is less than smallest int72 or + * greater than largest int72). + * + * Counterpart to Solidity's `int72` operator. + * + * Requirements: + * + * - input must fit into 72 bits + * + * _Available since v4.7._ + */ + function toInt72(int256 value) internal pure returns (int72 downcasted) { + downcasted = int72(value); + require(downcasted == value, "SafeCast: value doesn't fit in 72 bits"); + } + + /** + * @dev Returns the downcasted int64 from int256, reverting on + * overflow (when the input is less than smallest int64 or + * greater than largest int64). + * + * Counterpart to Solidity's `int64` operator. + * + * Requirements: + * + * - input must fit into 64 bits + * + * _Available since v3.1._ + */ + function toInt64(int256 value) internal pure returns (int64 downcasted) { + downcasted = int64(value); + require(downcasted == value, "SafeCast: value doesn't fit in 64 bits"); + } + + /** + * @dev Returns the downcasted int56 from int256, reverting on + * overflow (when the input is less than smallest int56 or + * greater than largest int56). + * + * Counterpart to Solidity's `int56` operator. + * + * Requirements: + * + * - input must fit into 56 bits + * + * _Available since v4.7._ + */ + function toInt56(int256 value) internal pure returns (int56 downcasted) { + downcasted = int56(value); + require(downcasted == value, "SafeCast: value doesn't fit in 56 bits"); + } + + /** + * @dev Returns the downcasted int48 from int256, reverting on + * overflow (when the input is less than smallest int48 or + * greater than largest int48). + * + * Counterpart to Solidity's `int48` operator. + * + * Requirements: + * + * - input must fit into 48 bits + * + * _Available since v4.7._ + */ + function toInt48(int256 value) internal pure returns (int48 downcasted) { + downcasted = int48(value); + require(downcasted == value, "SafeCast: value doesn't fit in 48 bits"); + } + + /** + * @dev Returns the downcasted int40 from int256, reverting on + * overflow (when the input is less than smallest int40 or + * greater than largest int40). + * + * Counterpart to Solidity's `int40` operator. + * + * Requirements: + * + * - input must fit into 40 bits + * + * _Available since v4.7._ + */ + function toInt40(int256 value) internal pure returns (int40 downcasted) { + downcasted = int40(value); + require(downcasted == value, "SafeCast: value doesn't fit in 40 bits"); + } + + /** + * @dev Returns the downcasted int32 from int256, reverting on + * overflow (when the input is less than smallest int32 or + * greater than largest int32). + * + * Counterpart to Solidity's `int32` operator. + * + * Requirements: + * + * - input must fit into 32 bits + * + * _Available since v3.1._ + */ + function toInt32(int256 value) internal pure returns (int32 downcasted) { + downcasted = int32(value); + require(downcasted == value, "SafeCast: value doesn't fit in 32 bits"); + } + + /** + * @dev Returns the downcasted int24 from int256, reverting on + * overflow (when the input is less than smallest int24 or + * greater than largest int24). + * + * Counterpart to Solidity's `int24` operator. + * + * Requirements: + * + * - input must fit into 24 bits + * + * _Available since v4.7._ + */ + function toInt24(int256 value) internal pure returns (int24 downcasted) { + downcasted = int24(value); + require(downcasted == value, "SafeCast: value doesn't fit in 24 bits"); + } + + /** + * @dev Returns the downcasted int16 from int256, reverting on + * overflow (when the input is less than smallest int16 or + * greater than largest int16). + * + * Counterpart to Solidity's `int16` operator. + * + * Requirements: + * + * - input must fit into 16 bits + * + * _Available since v3.1._ + */ + function toInt16(int256 value) internal pure returns (int16 downcasted) { + downcasted = int16(value); + require(downcasted == value, "SafeCast: value doesn't fit in 16 bits"); + } + + /** + * @dev Returns the downcasted int8 from int256, reverting on + * overflow (when the input is less than smallest int8 or + * greater than largest int8). + * + * Counterpart to Solidity's `int8` operator. + * + * Requirements: + * + * - input must fit into 8 bits + * + * _Available since v3.1._ + */ + function toInt8(int256 value) internal pure returns (int8 downcasted) { + downcasted = int8(value); + require(downcasted == value, "SafeCast: value doesn't fit in 8 bits"); + } + + /** + * @dev Converts an unsigned uint256 into a signed int256. + * + * Requirements: + * + * - input must be less than or equal to maxInt256. + * + * _Available since v3.0._ + */ + function toInt256(uint256 value) internal pure returns (int256) { + // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive + require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); + return int256(value); + } +} + +// src/governance/utils/GovernorSorting.sol + +/** + * @dev Logic for sorting and ranking. + */ +abstract contract GovernorSorting { + // TLDR: This code maintains a sorted array. + + // Because of the array rule below, the actual number of rankings that this contract will be able to track is determined by three things: + // - RANK_LIMIT + // - Woulda Beens (WBs) + // The number of would-be ranked proposals (at the end of the contest if rankings were counted + // without taking out deleted proposals) within the limit that are deleted and do not have other, non-deleted proposals + // with the same amounts of votes/that are tied with them. + // - To Tied or Deleted (TTDs), or to a previous TTD + // The number of times a proposal's newValue goes into an index to tie it; an index that is already tied; an index that was last deleted; + // or an index that wasn't garbage collected because it went to either one of last three cases or an index that also wasn't garbage + // collected because of the same recursive logic, from a ranking that was in the tracked rankings at the time that vote was cast. + // + // The equation to calcluate how many rankings this contract will actually be able to track is: + // # of rankings GovernorSorting can track for a given contest = RANK_LIMIT - WBs - TTDs + // + // With this in mind, it is strongly reccomended to set RANK_LIMIT sufficiently high to create a buffer for + // WBs and TTDs that may occur in your contest. The thing to consider with regard to making it too high is just + // that it is more gas for users on average the higher that RANK_LIMIT is set. + + uint256 public sortingEnabled; // Either 0 for false or 1 for true + uint256 public rankLimit; // RULE: Cannot be 0 + + // RULE: array length can never end lower than it started a transaction, otherwise erroneous ranking can happen + uint256[] public sortedRanks; // value is forVotes counts, has the constraint of no duplicate values. + + constructor(uint256 sortingEnabled_, uint256 rankLimit_) { + sortingEnabled = sortingEnabled_; + rankLimit = rankLimit_; + } + + /** + * @dev See {GovernorCountingSimple-getNumProposalsWithThisManyForVotes}. + */ + function getNumProposalsWithThisManyForVotes(uint256 forVotes) public view virtual returns (uint256 count); + + /** + * @dev Get the sortedRanks array. + */ + function getSortedRanks() public view returns (uint256[] memory sortedRanksArray) { + return sortedRanks; + } + + /** + * @dev Insert a new value into sortedRanks (this function is strictly O(n) or better). + * We know at this point that the idx where it should go is in [0, sortedRanks.length - 1]. + */ + function _insertRank( + uint256 oldValue, + uint256 newValue, + uint256 sortedRanksLength, + uint256[] memory sortedRanksMemVar + ) internal { + // find the index to insert newValue at + uint256 insertingIndex; + for (uint256 index = 0; index < sortedRanksLength; index++) { + // is this value already in the array? (is this a TTD or to a previous TTD?) + if (newValue == sortedRanksMemVar[index]) { + // if so, we don't need to insert anything and the oldValue of this doesn't get cleaned up + return; + } + + if (newValue > sortedRanksMemVar[index]) { + insertingIndex = index; + break; + } + } + + // are we checking for the oldValue? + bool checkForOldValue = (oldValue > 0) && (getNumProposalsWithThisManyForVotes(oldValue) == 0); // if there are props left with oldValue votes, we don't want to remove it + bool haveFoundOldValue = false; + + // DO ANY SHIFTING? - we do not need to if 1. if we're checking for oldValue and 2. oldValue is at insertingIndex - if both of those are the case, then we don't need to update anything besides insertingIndex. + if (!(checkForOldValue && (sortedRanksMemVar[insertingIndex] == oldValue))) { + // DO SHIFTING FROM (insertingIndex, sortedRanksLength)? + // - if insertingIndex == sortedRanksLength - 1, then there's nothing after it to shift down. + // - also if this is the case + oldValue's not at insertingIndex, then don't need to worry about oldValue bc it's not in the array. + if (!(insertingIndex == sortedRanksLength - 1)) { + // SHIFT UNTIL/IF YOU FIND OLD VALUE IN THE RANGE (insertingIndex, sortedRanksLength) - go through and shift everything down until/if we hit oldValue. + // if we hit the limit then the last item will just be dropped). + for (uint256 index = insertingIndex + 1; index < sortedRanksLength; index++) { + sortedRanks[index] = sortedRanksMemVar[index - 1]; + + // STOP ONCE YOU FIND OLD VALUE - if I'm looking for it, once I shift a value into the index oldValue was in (if it's in here) I can stop! + if (checkForOldValue && (sortedRanksMemVar[index] == oldValue)) { + haveFoundOldValue = true; + break; + } + } + } + + // SHIFT INTO NEW INDEX? - if we didn't run into oldValue and we wouldn't be trying to shift into index RANK_LIMIT, then + // go ahead and shift what was in sortedRanksLength - 1 into the next idx + if (!haveFoundOldValue && (sortedRanksLength < rankLimit)) { + sortedRanks.push(sortedRanksMemVar[sortedRanksLength - 1]); + } + } + + // SET INSERTING IDX - now that everything's been accounted for, let's correctly set sortedRanks[insertingIndex] + sortedRanks[insertingIndex] = newValue; + } + + /** + * @dev Keep things sorted as we go. + * Only works for no downvoting bc dealing w what happens when something leaves the top ranks and needs to be *replaced* is an issue that necessitates the sorting of all the others, which we don't want to do bc gas. + * Invariant: Because of no downvoting, and that a vote of 0 is not allowed, newValue will always be greater than oldValue. + */ + function _updateRanks(uint256 oldValue, uint256 newValue) internal { + uint256 sortedRanksLength = sortedRanks.length; // only check state var once to save on gas + uint256[] memory sortedRanksMemVar = sortedRanks; // only check state var once to save on gas + + // FIRST ENTRY? - if this is the first item ever then we just need to put it in idx 0 and that's it + if (sortedRanksLength == 0) { + sortedRanks.push(newValue); + return; + } + + // SMALLER THAN CURRENT SMALLEST VAL? + // this also means that the old value was 0 (or less than the lowest value if sortedRanks.length == RANK_LIMIT and/or the array is full), so all good with regards to oldValue. + if (newValue < sortedRanksMemVar[sortedRanksLength - 1]) { + if (sortedRanksLength == rankLimit) { + // if we've reached the size limit of sortedRanks, then we're done here + return; + } else { + // otherwise, put this value in the index after the current smallest value + sortedRanks.push(newValue); + return; + } + } + + // SO IT'S IN [0, sortedRanksLength - 1]! + // find where it should go and insert it. + _insertRank(oldValue, newValue, sortedRanksLength, sortedRanksMemVar); + } +} + +// src/governance/utils/GovernorMerkleVotes.sol + +// Forked from https://github.com/Anish-Agnihotri/merkle-airdrop-starter/blob/master/contracts/src/MerkleClaimERC20.sol + +/// ============ Imports ============ + + // OZ: MerkleProof + +/// @title GovernorMerkleVotes +abstract contract GovernorMerkleVotes { + /// ============ Immutable storage ============ + + /// @notice Participant inclusion roots + bytes32 public submissionMerkleRoot; + bytes32 public votingMerkleRoot; + + /// ============ Errors ============ + + /// @notice Thrown if address/amount are not part of Merkle tree + error NotInMerkle(); + + /// ============ Constructor ============ + + /// @notice Creates a new GovernorMerkleVotes contract + /// @param _submissionMerkleRoot of participants + /// @param _votingMerkleRoot of participants + constructor(bytes32 _submissionMerkleRoot, bytes32 _votingMerkleRoot) { + submissionMerkleRoot = _submissionMerkleRoot; // Update root + votingMerkleRoot = _votingMerkleRoot; // Update root + } + + /// ============ Functions ============ + + /// @notice Allows checking of proofs for an address + /// @param addressToCheck address of participant + /// @param amount to check that the participant has the correct amount + /// @param proof merkle proof to prove address and amount are in tree + /// @param voting true if this is for a voting proof, false if this is for a submission proof + function checkProof(address addressToCheck, uint256 amount, bytes32[] calldata proof, bool voting) + public + view + returns (bool verified) + { + // Verify merkle proof, or revert if not in tree + bytes32 leaf = keccak256(abi.encodePacked(addressToCheck, amount)); + bool isValidLeaf = voting + ? MerkleProof.verify(proof, votingMerkleRoot, leaf) + : MerkleProof.verify(proof, submissionMerkleRoot, leaf); + if (!isValidLeaf) revert NotInMerkle(); + return true; + } +} + +// lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol + +// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol) + +/** + * @title SafeERC20 + * @dev Wrappers around ERC20 operations that throw on failure (when the token + * contract returns false). Tokens that return no value (and instead revert or + * throw on failure) are also supported, non-reverting calls are assumed to be + * successful. + * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, + * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. + */ +library SafeERC20 { + using Address for address; + + /** + * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, + * non-reverting calls are assumed to be successful. + */ + function safeTransfer(IERC20 token, address to, uint256 value) internal { + _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); + } + + /** + * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the + * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. + */ + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { + _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); + } + + /** + * @dev Deprecated. This function has issues similar to the ones found in + * {IERC20-approve}, and its usage is discouraged. + * + * Whenever possible, use {safeIncreaseAllowance} and + * {safeDecreaseAllowance} instead. + */ + function safeApprove(IERC20 token, address spender, uint256 value) internal { + // safeApprove should only be called when setting an initial allowance, + // or when resetting it to zero. To increase and decrease it, use + // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' + require( + (value == 0) || (token.allowance(address(this), spender) == 0), + "SafeERC20: approve from non-zero to non-zero allowance" + ); + _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); + } + + /** + * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, + * non-reverting calls are assumed to be successful. + */ + function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { + uint256 oldAllowance = token.allowance(address(this), spender); + _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value)); + } + + /** + * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value, + * non-reverting calls are assumed to be successful. + */ + function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { + unchecked { + uint256 oldAllowance = token.allowance(address(this), spender); + require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); + _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value)); + } + } + + /** + * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, + * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval + * to be set to zero before setting it to a non-zero value, such as USDT. + */ + function forceApprove(IERC20 token, address spender, uint256 value) internal { + bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value); + + if (!_callOptionalReturnBool(token, approvalCall)) { + _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0)); + _callOptionalReturn(token, approvalCall); + } + } + + /** + * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`. + * Revert on invalid signature. + */ + function safePermit( + IERC20Permit token, + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) internal { + uint256 nonceBefore = token.nonces(owner); + token.permit(owner, spender, value, deadline, v, r, s); + uint256 nonceAfter = token.nonces(owner); + require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); + } + + /** + * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement + * on the return value: the return value is optional (but if data is returned, it must not be false). + * @param token The token targeted by the call. + * @param data The call data (encoded using abi.encode or one of its variants). + */ + function _callOptionalReturn(IERC20 token, bytes memory data) private { + // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since + // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that + // the target address contains contract code and also asserts for success in the low-level call. + + bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); + require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); + } + + /** + * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement + * on the return value: the return value is optional (but if data is returned, it must not be false). + * @param token The token targeted by the call. + * @param data The call data (encoded using abi.encode or one of its variants). + * + * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. + */ + function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { + // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since + // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false + // and not revert is the subcall reverts. + + (bool success, bytes memory returndata) = address(token).call(data); + return + success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token)); + } +} + +// src/governance/Governor.sol + +// Forked from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/governance/Governor.sol + +/** + * @dev Core of the governance system, designed to be extended though various modules. + */ +abstract contract Governor is GovernorSorting, GovernorMerkleVotes { + using SafeCast for uint256; + + enum ContestState { + NotStarted, + Active, + Canceled, + Queued, + Completed + } + + enum Metadatas { + Target, + Safe, + Fields + } + + enum Actions { + Submit, + Vote + } + + struct IntConstructorArgs { + uint256 contestStart; + uint256 votingDelay; + uint256 votingPeriod; + uint256 numAllowedProposalSubmissions; + uint256 maxProposalCount; + uint256 downvotingAllowed; + uint256 sortingEnabled; + uint256 rankLimit; + uint256 percentageToCreator; + uint256 costToPropose; + uint256 costToVote; + uint256 payPerVote; + } + + struct ConstructorArgs { + IntConstructorArgs intConstructorArgs; + address creatorSplitDestination; + address jkLabsSplitDestination; + string metadataFieldsSchema; + } + + struct TargetMetadata { + address targetAddress; + } + + struct SafeMetadata { + address[] signers; + uint256 threshold; + } + + struct FieldsMetadata { + // all of these have max length of MAX_FIELDS_METADATA_LENGTH as enforced in validateProposalData() + address[] addressArray; + string[] stringArray; + uint256[] uintArray; + } + + struct ProposalCore { + address author; + bool exists; + string description; + TargetMetadata targetMetadata; + SafeMetadata safeMetadata; + FieldsMetadata fieldsMetadata; + } + + event JokeraceCreated( + string version, + string name, + string prompt, + address creator, + uint256 contestStart, + uint256 votingDelay, + uint256 votingPeriod + ); + event ProposalCreated(uint256 proposalId, address proposer, string proposalDescription); + event ProposalsDeleted(uint256[] proposalIds); + event ContestCanceled(); + event VoteCast(address indexed voter, uint256 proposalId, uint8 support, uint256 numVotes); + event CreatorPaymentReleased(address to, uint256 amount); + event JkLabsPaymentReleased(address to, uint256 amount); + + uint256 public constant METADATAS_COUNT = uint256(type(Metadatas).max) + 1; + uint256 public constant MAX_FIELDS_METADATA_LENGTH = 10; + uint256 public constant AMOUNT_FOR_SUMBITTER_PROOF = 10000000000000000000; + address public constant JK_LABS_ADDRESS = 0xDc652C746A8F85e18Ce632d97c6118e8a52fa738; // our hot wallet that we operate from if need be, and collect revenue to on most chains + string private constant VERSION = "4.32"; // Private as to not clutter the ABI + + string public name; // The title of the contest + string public prompt; + address public creator; + uint256 public contestStart; // The Unix timestamp that the contest starts at. + uint256 public votingDelay; // Number of seconds that submissions are open. + uint256 public votingPeriod; // Number of seconds that voting is open. + uint256 public numAllowedProposalSubmissions; // The number of proposals that an address who is qualified to propose can submit for this contest. + uint256 public maxProposalCount; // Max number of proposals allowed in this contest. + uint256 public downvotingAllowed; // If downvoting is enabled in this contest. + uint256 public percentageToCreator; + uint256 public costToPropose; + uint256 public costToVote; + uint256 public payPerVote; // If this contest is pay per vote (as opposed to pay per vote transaction). + address public creatorSplitDestination; // Where the creator split of revenue goes. + address public jkLabsSplitDestination; // Where the jk labs split of revenue goes. + string public metadataFieldsSchema; // JSON Schema of what the metadata fields are + + uint256[] public proposalIds; + uint256[] public deletedProposalIds; + mapping(uint256 => bool) public proposalIsDeleted; + bool public canceled; + mapping(uint256 => ProposalCore) public proposals; + mapping(address => uint256) public numSubmissions; + address[] public proposalAuthors; + address[] public addressesThatHaveVoted; + + mapping(address => uint256) public addressTotalVotes; + mapping(address => bool) public addressTotalVotesVerified; + mapping(address => bool) public addressSubmitterVerified; + + error AuthorIsNotSender(address author, address sender); + error ZeroSignersInSafeMetadata(); + error ZeroThresholdInSafeMetadata(); + error AddressFieldMetadataArrayTooLong(); + error StringFieldMetadataArrayTooLong(); + error UintFieldMetadataArrayTooLong(); + error UnexpectedMetadata(Metadatas unexpectedMetadata); + error EmptyProposalDescription(); + + error IncorrectCostSent(uint256 msgValue, uint256 costToVote); + + error AddressNotPermissionedToSubmit(); + error ContestMustBeQueuedToPropose(ContestState currentState); + error ContestMustBeActiveToVote(ContestState currentState); + error SenderSubmissionLimitReached(uint256 numAllowedProposalSubmissions); + error ContestSubmissionLimitReached(uint256 maxProposalCount); + error DuplicateSubmission(uint256 proposalId); + + error CannotVoteOnDeletedProposal(); + error NeedAtLeastOneVoteToVote(); + error CannotVoteLessThanOneVoteInPayPerVote(); + + error NeedToSubmitWithProofFirst(); + error NeedToVoteWithProofFirst(); + + error OnlyCreatorCanDelete(); + error CannotDeleteWhenCompletedOrCanceled(); + + error OnlyJkLabsOrCreatorCanCancel(); + error ContestAlreadyCanceled(); + + error CannotUpdateWhenCompletedOrCanceled(); + + error OnlyJkLabsCanAmend(); + error OnlyCreatorCanAmend(); + + constructor(string memory name_, string memory prompt_, ConstructorArgs memory constructorArgs_) { + name = name_; + prompt = prompt_; + creator = msg.sender; + contestStart = constructorArgs_.intConstructorArgs.contestStart; + votingDelay = constructorArgs_.intConstructorArgs.votingDelay; + votingPeriod = constructorArgs_.intConstructorArgs.votingPeriod; + numAllowedProposalSubmissions = constructorArgs_.intConstructorArgs.numAllowedProposalSubmissions; + maxProposalCount = constructorArgs_.intConstructorArgs.maxProposalCount; + downvotingAllowed = constructorArgs_.intConstructorArgs.downvotingAllowed; + percentageToCreator = constructorArgs_.intConstructorArgs.percentageToCreator; + costToPropose = constructorArgs_.intConstructorArgs.costToPropose; + costToVote = constructorArgs_.intConstructorArgs.costToVote; + payPerVote = constructorArgs_.intConstructorArgs.payPerVote; + creatorSplitDestination = constructorArgs_.creatorSplitDestination; + jkLabsSplitDestination = constructorArgs_.jkLabsSplitDestination; + metadataFieldsSchema = constructorArgs_.metadataFieldsSchema; + + emit JokeraceCreated( + VERSION, + name_, + prompt_, + msg.sender, + constructorArgs_.intConstructorArgs.contestStart, + constructorArgs_.intConstructorArgs.votingDelay, + constructorArgs_.intConstructorArgs.votingPeriod + ); // emit upon creation to be able to easily find jokeraces on a chain + } + + function version() public pure returns (string memory) { + return VERSION; + } + + function hashProposal(ProposalCore memory proposal) public pure returns (uint256) { + return uint256(keccak256(abi.encode(proposal))); + } + + function state() public view returns (ContestState) { + if (canceled) { + return ContestState.Canceled; + } + + if (contestStart >= block.timestamp) { + return ContestState.NotStarted; + } + + if (voteStart() >= block.timestamp) { + return ContestState.Queued; + } + + if (contestDeadline() >= block.timestamp) { + return ContestState.Active; + } + + return ContestState.Completed; + } + + /** + * @dev Return all proposals. + */ + function getAllProposalIds() public view returns (uint256[] memory) { + return proposalIds; + } + + /** + * @dev Return all proposal authors. + */ + function getAllProposalAuthors() public view returns (address[] memory) { + return proposalAuthors; + } + + /** + * @dev Return all addresses that have voted. + */ + function getAllAddressesThatHaveVoted() public view returns (address[] memory) { + return addressesThatHaveVoted; + } + + /** + * @dev Return all deleted proposals. + */ + function getAllDeletedProposalIds() public view returns (uint256[] memory) { + return deletedProposalIds; + } + + /** + * @dev Return all authors of deleted proposals. + */ + function getAllAuthorsOfDeletedProposals() public view returns (address[] memory) { + uint256[] memory deletedProposalIdsMemVar = deletedProposalIds; + address[] memory authorsArray = new address[](deletedProposalIdsMemVar.length); + for (uint256 i = 0; i < deletedProposalIdsMemVar.length; i++) { + authorsArray[i] = proposals[deletedProposalIdsMemVar[i]].author; + } + return authorsArray; + } + + /** + * @dev Timestamp the contest vote begins. Votes open at the end of this block, so it is possible to propose + * during this block. + */ + function voteStart() public view returns (uint256) { + return contestStart + votingDelay; + } + + /** + * @dev Returns if a proposal has been deleted or not. + */ + function contestDeadline() public view returns (uint256) { + return voteStart() + votingPeriod; + } + + /** + * @dev Retrieve proposal data. + */ + function getProposal(uint256 proposalId) public view returns (ProposalCore memory) { + return proposals[proposalId]; + } + + /** + * @dev Remove deleted proposalIds from forVotesToProposalIds and decrement copy counts of the forVotes of proposalIds. + */ + function _multiRmProposalIdFromForVotesMap(uint256[] calldata proposalIds) internal virtual; + + /** + * @dev Register a vote with a given support and voting weight. + * + * Note: Support is generic and can represent various things depending on the voting system used. + */ + function _countVote(uint256 proposalId, address account, uint8 support, uint256 numVotes, uint256 totalVotes) + internal + virtual; + + /** + * @dev Verifies that `account` is permissioned to propose via merkle proof. + */ + function verifyProposer(address account, bytes32[] calldata proof) public { + if (!addressSubmitterVerified[account]) { + if (submissionMerkleRoot == 0) { + // if the submission root is 0, then anyone can submit + return; + } + checkProof(account, AMOUNT_FOR_SUMBITTER_PROOF, proof, false); // will revert with NotInMerkle if not valid + addressSubmitterVerified[account] = true; + } + } + + /** + * @dev Verifies that all of the metadata in the proposal is valid. + */ + function validateProposalData(ProposalCore memory proposal) public view { + if (proposal.author != msg.sender) revert AuthorIsNotSender(proposal.author, msg.sender); + for (uint256 index = 0; index < METADATAS_COUNT; index++) { + Metadatas currentMetadata = Metadatas(index); + if (currentMetadata == Metadatas.Target) { + continue; // nothing to check here since strictly typed to address + } else if (currentMetadata == Metadatas.Safe) { + if (proposal.safeMetadata.signers.length == 0) revert ZeroSignersInSafeMetadata(); + if (proposal.safeMetadata.threshold == 0) revert ZeroThresholdInSafeMetadata(); + } else if (currentMetadata == Metadatas.Fields) { + if (proposal.fieldsMetadata.addressArray.length > MAX_FIELDS_METADATA_LENGTH) { + revert AddressFieldMetadataArrayTooLong(); + } + if (proposal.fieldsMetadata.stringArray.length > MAX_FIELDS_METADATA_LENGTH) { + revert StringFieldMetadataArrayTooLong(); + } + if (proposal.fieldsMetadata.uintArray.length > MAX_FIELDS_METADATA_LENGTH) { + revert UintFieldMetadataArrayTooLong(); + } + } else { + revert UnexpectedMetadata(currentMetadata); + } + } + if (bytes(proposal.description).length == 0) revert EmptyProposalDescription(); + } + + /** + * @dev Determines that the correct amount was sent with the transaction and returns that correct amount. + */ + function _determineCorrectAmountSent(Actions currentAction, uint256 numVotes) internal returns (uint256) { + uint256 actionCost; + if (currentAction == Actions.Submit) { + actionCost = costToPropose; + } else if (currentAction == Actions.Vote) { + if (payPerVote == 1) { + if (numVotes < 1 ether) revert CannotVoteLessThanOneVoteInPayPerVote(); + actionCost = costToVote * (numVotes / 1 ether); // we don't allow <1 vote to be cast in a pay per vote txn bc of this, would underflow + } else { + actionCost = costToVote; + } + } else { + actionCost = 0; + } + + if (msg.value != actionCost) revert IncorrectCostSent(msg.value, actionCost); + return actionCost; + } + + /** + * @dev Distribute the cost of an action to the creator and jk labs based on _percentageToCreator. + */ + function _distributeCost(uint256 actionCost) internal { + if (actionCost > 0) { + // Send cost to creator and jk labs split destinations + uint256 sendingToJkLabs = (msg.value * (100 - percentageToCreator)) / 100; + if (sendingToJkLabs > 0) { + Address.sendValue(payable(jkLabsSplitDestination), sendingToJkLabs); + emit JkLabsPaymentReleased(jkLabsSplitDestination, sendingToJkLabs); + } + + uint256 sendingToCreator = msg.value - sendingToJkLabs; + if (sendingToCreator > 0) { + Address.sendValue(payable(creatorSplitDestination), sendingToCreator); // creator gets the extra wei in the case of rounding + emit CreatorPaymentReleased(creator, sendingToCreator); + } + } + } + + /** + * @dev Create a new proposal. + */ + function propose(ProposalCore calldata proposal, bytes32[] calldata proof) public payable returns (uint256) { + uint256 actionCost = _determineCorrectAmountSent(Actions.Submit, 0); + + verifyProposer(msg.sender, proof); + validateProposalData(proposal); + uint256 proposalId = _castProposal(proposal); + + _distributeCost(actionCost); + + return proposalId; + } + + /** + * @dev Create a new proposal without a proof if you have already proposed with a proof. + */ + function proposeWithoutProof(ProposalCore calldata proposal) public payable returns (uint256) { + uint256 actionCost = _determineCorrectAmountSent(Actions.Submit, 0); + + if (submissionMerkleRoot != 0) { + // if the submission root is 0, then anyone can submit; otherwise, this address needs to have been verified + if (!addressSubmitterVerified[msg.sender]) revert NeedToSubmitWithProofFirst(); + } + validateProposalData(proposal); + uint256 proposalId = _castProposal(proposal); + + _distributeCost(actionCost); + + return proposalId; + } + + function _castProposal(ProposalCore memory proposal) internal returns (uint256) { + if (state() != ContestState.Queued) revert ContestMustBeQueuedToPropose(state()); + if (numSubmissions[msg.sender] == numAllowedProposalSubmissions) { + revert SenderSubmissionLimitReached(numAllowedProposalSubmissions); + } + if ((proposalIds.length - deletedProposalIds.length) == maxProposalCount) { + revert ContestSubmissionLimitReached(maxProposalCount); + } + + uint256 proposalId = hashProposal(proposal); + if (proposals[proposalId].exists) revert DuplicateSubmission(proposalId); + + proposalIds.push(proposalId); + proposals[proposalId] = proposal; + numSubmissions[msg.sender] += 1; + proposalAuthors.push(msg.sender); + + emit ProposalCreated(proposalId, msg.sender, proposal.description); + + return proposalId; + } + + /** + * @dev Delete proposals. + * + * Emits a {IGovernor-ProposalsDeleted} event. + */ + function deleteProposals(uint256[] calldata proposalIdsToDelete) public { + if (msg.sender != creator) revert OnlyCreatorCanDelete(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotDeleteWhenCompletedOrCanceled(); + } + + for (uint256 index = 0; index < proposalIdsToDelete.length; index++) { + uint256 currentProposalId = proposalIdsToDelete[index]; + if (!proposalIsDeleted[currentProposalId]) { + // if this proposal hasn't already been deleted + proposalIsDeleted[currentProposalId] = true; + // this proposal now won't count towards the total number allowed in the contest + // it will still count towards the total number of proposals that the user is allowed to submit though + deletedProposalIds.push(currentProposalId); + } + } + + // we only do sorting if downvoting is disabled and if sorting is enabled + if (downvotingAllowed == 0 && sortingEnabled == 1) { + // remove proposalIds from forVotesToProposalIds (could contain proposalIds that have been deleted before, that's ok though) + _multiRmProposalIdFromForVotesMap(proposalIdsToDelete); + } + + emit ProposalsDeleted(proposalIds); + } + + /** + * @dev Cancels the contest. + * + * Emits a {IGovernor-ContestCanceled} event. + */ + function cancel() public { + if (((msg.sender != creator) && (msg.sender != JK_LABS_ADDRESS))) revert OnlyJkLabsOrCreatorCanCancel(); + + ContestState status = state(); + if (status == ContestState.Canceled) revert ContestAlreadyCanceled(); + + canceled = true; + + emit ContestCanceled(); + } + + /** + * @dev Verifies that `account` is permissioned to vote with `totalVotes` via merkle proof. + */ + function verifyVoter(address account, uint256 totalVotes, bytes32[] calldata proof) public { + if (votingMerkleRoot != 0 && !addressTotalVotesVerified[account]) { + checkProof(account, totalVotes, proof, true); // will revert with NotInMerkle if not valid + addressTotalVotes[account] = totalVotes; + addressTotalVotesVerified[account] = true; + } + } + + /** + * @dev Cast a vote with a merkle proof. + */ + function castVote(uint256 proposalId, uint8 support, uint256 totalVotes, uint256 numVotes, bytes32[] calldata proof) + public + payable + returns (uint256) + { + uint256 actionCost = _determineCorrectAmountSent(Actions.Vote, numVotes); + + if (proposalIsDeleted[proposalId]) revert CannotVoteOnDeletedProposal(); + verifyVoter(msg.sender, totalVotes, proof); + + _distributeCost(actionCost); + + return _castVote(proposalId, msg.sender, support, numVotes); + } + + /** + * @dev Cast a vote without a proof if you have already voted with a proof. + */ + function castVoteWithoutProof(uint256 proposalId, uint8 support, uint256 numVotes) + public + payable + returns (uint256) + { + uint256 actionCost = _determineCorrectAmountSent(Actions.Vote, numVotes); + + if (proposalIsDeleted[proposalId]) revert CannotVoteOnDeletedProposal(); + if (votingMerkleRoot != 0 && !addressTotalVotesVerified[msg.sender]) revert NeedToVoteWithProofFirst(); + + _distributeCost(actionCost); + + return _castVote(proposalId, msg.sender, support, numVotes); + } + + /** + * @dev Internal vote casting mechanism: Check that the vote is pending, that it has not been cast yet, retrieve + * voting weight using addressTotalVotes() and call the {_countVote} internal function. + * + * Emits a {IGovernor-VoteCast} event. + */ + function _castVote(uint256 proposalId, address account, uint8 support, uint256 numVotes) + internal + returns (uint256) + { + if (state() != ContestState.Active) revert ContestMustBeActiveToVote(state()); + if (numVotes == 0) revert NeedAtLeastOneVoteToVote(); + + _countVote(proposalId, account, support, numVotes, addressTotalVotes[account]); + + addressesThatHaveVoted.push(msg.sender); + + emit VoteCast(account, proposalId, support, numVotes); + + return addressTotalVotes[account]; + } + + function setSubmissionMerkleRoot(bytes32 newSubmissionMerkleRoot) public { + if (msg.sender != JK_LABS_ADDRESS) revert OnlyJkLabsCanAmend(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } + submissionMerkleRoot = newSubmissionMerkleRoot; + } + + function setVotingMerkleRoot(bytes32 newVotingMerkleRoot) public { + if (msg.sender != JK_LABS_ADDRESS) revert OnlyJkLabsCanAmend(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } + votingMerkleRoot = newVotingMerkleRoot; + } + + function setCreatorSplitDestination(address newCreatorSplitDestination) public { + if (msg.sender != creator) revert OnlyCreatorCanAmend(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } + creatorSplitDestination = newCreatorSplitDestination; + } +} + +// src/governance/extensions/GovernorCountingSimple.sol + +// Forked from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/governance/extensions/GovernorCountingSimple.sol + +/** + * @dev Extension of {Governor} for simple vote counting. + */ +abstract contract GovernorCountingSimple is Governor { + /** + * @dev Supported vote types. Matches Governor Bravo ordering. + */ + enum VoteType { + For, + Against + } + + struct VoteCounts { + uint256 forVotes; + uint256 againstVotes; + } + + struct ProposalVote { + VoteCounts proposalVoteCounts; + address[] addressesVoted; + mapping(address => VoteCounts) addressVoteCounts; + } + + uint256 public totalVotesCast; // Total votes cast in contest so far + mapping(address => uint256) public addressTotalCastVoteCounts; + mapping(uint256 => ProposalVote) public proposalVotesStructs; + + mapping(uint256 => uint256[]) public forVotesToProposalIds; + + error MoreThanOneProposalWithThisManyVotes(); + error NotEnoughVotesLeft(); + error DownvotingNotEnabled(); + error InvalidVoteType(); + + error RankCannotBeZero(); + error RankIsNotInSortedRanks(); + error IndexHasNotBeenPopulated(); + + /** + * @dev Accessor to the internal vote counts for a given proposal. + */ + function proposalVotes(uint256 proposalId) public view returns (uint256 forVotes, uint256 againstVotes) { + ProposalVote storage proposalvote = proposalVotesStructs[proposalId]; + return (proposalvote.proposalVoteCounts.forVotes, proposalvote.proposalVoteCounts.againstVotes); + } + + /** + * @dev Accessor to how many votes an address has cast for a given proposal. + */ + function proposalAddressVotes(uint256 proposalId, address userAddress) + public + view + returns (uint256 forVotes, uint256 againstVotes) + { + ProposalVote storage proposalvote = proposalVotesStructs[proposalId]; + return ( + proposalvote.addressVoteCounts[userAddress].forVotes, + proposalvote.addressVoteCounts[userAddress].againstVotes + ); + } + + /** + * @dev Accessor to which addresses have cast a vote for a given proposal. + */ + function proposalAddressesHaveVoted(uint256 proposalId) public view returns (address[] memory) { + ProposalVote storage proposalvote = proposalVotesStructs[proposalId]; + return proposalvote.addressesVoted; + } + + /** + * @dev Accessor to how many votes an address has cast total for the contest so far. + */ + function contestAddressTotalVotesCast(address userAddress) public view returns (uint256 userTotalVotesCast) { + return addressTotalCastVoteCounts[userAddress]; + } + + /** + * @dev Accessor to the internal vote counts for a given proposal. + */ + function allProposalTotalVotes() + public + view + returns (uint256[] memory proposalIdsReturn, VoteCounts[] memory proposalVoteCountsArrayReturn) + { + uint256[] memory proposalIdsMemVar = getAllProposalIds(); + VoteCounts[] memory proposalVoteCountsArray = new VoteCounts[](proposalIdsMemVar.length); + for (uint256 i = 0; i < proposalIdsMemVar.length; i++) { + proposalVoteCountsArray[i] = proposalVotesStructs[proposalIdsMemVar[i]].proposalVoteCounts; + } + return (proposalIdsMemVar, proposalVoteCountsArray); + } + + /** + * @dev Get the whole array in `forVotesToProposalIds` for a given `forVotes` amount. + */ + function getProposalsWithThisManyForVotes(uint256 forVotes) + public + view + returns (uint256[] memory proposalsWithThisManyForVotes) + { + return forVotesToProposalIds[forVotes]; + } + + /** + * @dev Get the number of proposals that have `forVotes` number of for votes. + */ + function getNumProposalsWithThisManyForVotes(uint256 forVotes) public view override returns (uint256 count) { + return forVotesToProposalIds[forVotes].length; + } + + /** + * @dev Get the only proposal id with this many for votes. + * NOTE: Should only get called at a point at which you are sure there is only one proposal id + * with a certain number of forVotes (we only use it in the RewardsModule after ties have + * been checked for). + */ + function getOnlyProposalIdWithThisManyForVotes(uint256 forVotes) public view returns (uint256 proposalId) { + if (forVotesToProposalIds[forVotes].length != 1) revert MoreThanOneProposalWithThisManyVotes(); + return forVotesToProposalIds[forVotes][0]; + } + + /** + * @dev Get the idx of sortedRanks considered to hold the queried rank taking deleted proposals into account. + * A rank has to have > 0 votes to be considered valid. + */ + function getRankIndex(uint256 rank) public view returns (uint256 rankIndex) { + if (rank == 0) revert RankCannotBeZero(); + + uint256 sortedRanksLength = sortedRanks.length; // only check state var once to save on gas + uint256[] memory sortedRanksMemVar = sortedRanks; // only check state var once to save on gas + + uint256 counter = 1; + for (uint256 index = 0; index < sortedRanksLength; index++) { + // if this is a value of a deleted proposal or an ungarbage collected oldValue, go forwards without + // incrementing the counter + if (getNumProposalsWithThisManyForVotes(sortedRanksMemVar[index]) == 0) { + continue; + } + // if the counter is at the rank we are looking for, then return with it + if (counter == rank) { + return index; + } + counter++; + } + + // if there's no valid index for that rank in sortedRanks, revert + revert RankIsNotInSortedRanks(); + } + + /** + * @dev Returns whether a given index in sortedRanks is tied or is below a tied rank. + */ + function isOrIsBelowTiedRank(uint256 idx) public view returns (bool atOrBelowTiedRank) { + if (idx > sortedRanks.length - 1) { + // if `idx` hasn't been populated, then it's not a valid index to be checking and something is wrong + revert IndexHasNotBeenPopulated(); + } + + for (uint256 index = 0; index < idx + 1; index++) { + if (getNumProposalsWithThisManyForVotes(sortedRanks[index]) > 1) { + return true; + } + } + return false; + } + + /** + * @dev Remove this proposalId from the list of proposalIds that share its current forVotes + * value in forVotesToProposalIds. + */ + function _rmProposalIdFromForVotesMap(uint256 proposalId, uint256 forVotes) internal { + uint256[] memory forVotesToPropIdMemVar = forVotesToProposalIds[forVotes]; // only check state var once to save on gas + for (uint256 i = 0; i < forVotesToPropIdMemVar.length; i++) { + if (forVotesToPropIdMemVar[i] == proposalId) { + // swap with last item and pop bc we don't care about order. + // makes things cleaner (than just deleting) and saves on gas if there end up being a ton of proposals that pass + // through having a certain number of votes throughout the contest. + forVotesToProposalIds[forVotes][i] = forVotesToPropIdMemVar[forVotesToPropIdMemVar.length - 1]; + forVotesToProposalIds[forVotes].pop(); + break; + } + } + } + + /** + * @dev See {Governor-_multiRmProposalIdFromForVotesMap}. + */ + function _multiRmProposalIdFromForVotesMap(uint256[] calldata proposalIdsToDelete) internal override { + for (uint256 i = 0; i < proposalIdsToDelete.length; i++) { + uint256 currentProposalId = proposalIdsToDelete[i]; + uint256 currentProposalsForVotes = proposalVotesStructs[currentProposalId].proposalVoteCounts.forVotes; + + // remove this proposalId from the list of proposalIdsToDelete that share its current forVotes + // value in forVotesToProposalIds + _rmProposalIdFromForVotesMap(currentProposalId, currentProposalsForVotes); + } + } + + /** + * @dev See {Governor-_countVote}. In this module, the support follows the `VoteType` enum (from Governor Bravo). + */ + function _countVote(uint256 proposalId, address account, uint8 support, uint256 numVotes, uint256 totalVotes) + internal + override + { + ProposalVote storage proposalvote = proposalVotesStructs[proposalId]; + + if ((votingMerkleRoot != 0) && (numVotes > (totalVotes - addressTotalCastVoteCounts[account]))) { + revert NotEnoughVotesLeft(); + } + + bool firstTimeVoting = ( + proposalvote.addressVoteCounts[account].forVotes == 0 + && proposalvote.addressVoteCounts[account].againstVotes == 0 + ); + + if (support == uint8(VoteType.For)) { + proposalvote.proposalVoteCounts.forVotes += numVotes; + proposalvote.addressVoteCounts[account].forVotes += numVotes; + } else if (support == uint8(VoteType.Against)) { + if (downvotingAllowed != 1) revert DownvotingNotEnabled(); + proposalvote.proposalVoteCounts.againstVotes += numVotes; + proposalvote.addressVoteCounts[account].againstVotes += numVotes; + } else { + revert InvalidVoteType(); + } + + if (firstTimeVoting) { + proposalvote.addressesVoted.push(account); + } + addressTotalCastVoteCounts[account] += numVotes; + totalVotesCast += numVotes; + + // sorting and consequently rewards module compatibility is only available if downvoting is disabled and sorting enabled + if ((downvotingAllowed == 0) && (sortingEnabled == 1)) { + uint256 newForVotes = proposalvote.proposalVoteCounts.forVotes; // only check state var once to save on gas + uint256 oldForVotes = newForVotes - numVotes; + + // update map of forVotes => proposalId[] to be able to go from rank => proposalId. + // if oldForVotes is 0, then this proposal will not already be in this map, so we don't need to rm it + if (oldForVotes > 0) { + _rmProposalIdFromForVotesMap(proposalId, oldForVotes); + } + forVotesToProposalIds[newForVotes].push(proposalId); + + _updateRanks(oldForVotes, newForVotes); + } + } +} + +// src/governance/extensions/GovernorEngagement.sol + +/** + * @dev Extension of {Governor} for engagement features. + */ +abstract contract GovernorEngagement is Governor { + struct CommentCore { + address author; + uint256 timestamp; + uint256 proposalId; + string commentContent; + } + + /** + * @dev Emitted when a comment is created. + */ + event CommentCreated(uint256 commentId); + + /** + * @dev Emitted when comments are deleted. + */ + event CommentsDeleted(uint256[] commentIds); + + uint256[] public commentIds; + uint256[] public deletedCommentIds; + mapping(uint256 => CommentCore) public comments; + mapping(uint256 => uint256[]) public proposalComments; + mapping(uint256 => bool) public commentIsDeleted; + + error OnlyCreatorOrAuthorCanDeleteComments(uint256 failedToDeleteCommentId); + + /** + * @dev Hashing function used to build the comment id from the comment details. + */ + function hashComment(CommentCore memory commentObj) public pure returns (uint256) { + return uint256(keccak256(abi.encode(commentObj))); + } + + /** + * @dev Return all commentIds. + */ + function getAllCommentIds() public view returns (uint256[] memory) { + return commentIds; + } + + /** + * @dev Return all deleted commentIds. + */ + function getAllDeletedCommentIds() public view returns (uint256[] memory) { + return deletedCommentIds; + } + + /** + * @dev Return a comment object. + */ + function getComment(uint256 commentId) public view returns (CommentCore memory) { + return comments[commentId]; + } + + /** + * @dev Return the array of commentIds on a given proposalId. + */ + function getProposalComments(uint256 proposalId) public view returns (uint256[] memory) { + return proposalComments[proposalId]; + } + + /** + * @dev Comment on a proposal. + * + * Emits a {CommentCreated} event. + */ + function comment(uint256 proposalId, string memory commentContent) public returns (uint256) { + CommentCore memory commentObject = CommentCore({ + author: msg.sender, + timestamp: block.timestamp, + proposalId: proposalId, + commentContent: commentContent + }); + uint256 commentId = hashComment(commentObject); + + commentIds.push(commentId); + comments[commentId] = commentObject; + proposalComments[proposalId].push(commentId); + + emit CommentCreated(commentId); + + return commentId; + } + + /** + * @dev Delete comments. + * + * Emits a {CommentsDeleted} event. + */ + function deleteComments(uint256[] memory commentIdsParam) public { + uint256 commentIdsParamMemVar = commentIdsParam.length; + + for (uint256 index = 0; index < commentIdsParamMemVar; index++) { + uint256 currentCommentId = commentIdsParam[index]; + + if ((msg.sender != creator) && (msg.sender != comments[currentCommentId].author)) { + revert OnlyCreatorOrAuthorCanDeleteComments(currentCommentId); + } + + if (!commentIsDeleted[currentCommentId]) { + commentIsDeleted[currentCommentId] = true; + deletedCommentIds.push(currentCommentId); + } + } + + emit CommentsDeleted(commentIdsParam); + } +} + +// src/modules/RewardsModule.sol + +// Forked from OpenZeppelin Contracts (v4.7.0) (finance/PaymentSplitter.sol) + +/** + * @title RewardsModule + * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware + * that the Ether will be split in this way, since it is handled transparently by the contract. + * + * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each + * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim + * an amount proportional to the percentage of total shares they were assigned. The distribution of shares is set at the + * time of contract deployment and can't be updated thereafter. + * + * `RewardsModule` follows a _pull payment_ model. This means that payments are not automatically forwarded to the + * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} + * function. + * + * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and + * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you + * to run tests before sending real value to this contract. + */ +contract RewardsModule { + event PayeeAdded(uint256 ranking, uint256 shares); + event PaymentReleased(address to, uint256 amount); + event ERC20PaymentReleased(IERC20 indexed token, address to, uint256 amount); + event PaymentReceived(address from, uint256 amount); + event RewardWithdrawn(address by, uint256 amount); + event ERC20RewardWithdrawn(IERC20 indexed token, address by, uint256 amount); + + uint256 public totalShares; + uint256 public totalReleased; + + mapping(uint256 => uint256) public shares; // Getter for the amount of shares held by a ranking. + mapping(uint256 => uint256) public released; // Getter for the amount of Ether already released to a ranking. + uint256[] public payees; + string private constant VERSION = "4.32"; // Private as to not clutter the ABI + + mapping(IERC20 => uint256) public erc20TotalReleased; + mapping(IERC20 => mapping(uint256 => uint256)) public erc20Released; + + GovernorCountingSimple public underlyingContest; + address public creator; + bool public paysOutTarget; // If true, pay out target address; if false, pay out proposal author. + + error PayeesSharesLengthMismatch(); + error MustHaveAtLeastOnePayee(); + error TotalSharesCannotBeZero(); + error MustHaveDownvotingDisabled(); + error MustHaveSortingEnabled(); + error ContestMustBeCompleted(); + error PayoutRankCannotBeZero(); + error RankingHasNoShares(); + error AccountNotDueNativePayment(); + error CannotPayOutToZeroAddress(); + error AccountNotDueERC20Payment(); + error OnlyCreatorCanWithdraw(); + error RankingCannotBeZero(); + error SharesCannotBeZero(); + error AccountAlreadyHasShares(); + + /** + * @dev Creates an instance of `RewardsModule` where each ranking in `payees` is assigned the number of shares at + * the matching position in the `shares` array. + * + * All rankings in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no + * duplicates in `payees`. + */ + constructor( + uint256[] memory payees_, + uint256[] memory shares_, + GovernorCountingSimple underlyingContest_, + bool paysOutTarget_ + ) payable { + if (payees_.length != shares_.length) revert PayeesSharesLengthMismatch(); + if (payees_.length == 0) revert MustHaveAtLeastOnePayee(); + + for (uint256 i = 0; i < payees_.length; i++) { + _addPayee(payees_[i], shares_[i]); + } + + if (totalShares == 0) revert TotalSharesCannotBeZero(); + + paysOutTarget = paysOutTarget_; + underlyingContest = underlyingContest_; + creator = msg.sender; + } + + /** + * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully + * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the + * reliability of the events, and not the actual splitting of Ether. + */ + receive() external payable { + emit PaymentReceived(msg.sender, msg.value); + } + + /** + * @dev Version of the rewards module. + */ + function version() public pure returns (string memory) { + return VERSION; + } + + /** + * @dev Getter for list of rankings that will be paid out. + */ + function getPayees() public view returns (uint256[] memory) { + return payees; + } + + /** + * @dev Getter for the underlying contest. + */ + function getUnderlyingContest() public view returns (GovernorCountingSimple) { + return underlyingContest; + } + + /** + * @dev Getter for the amount of payee's releasable Ether. + */ + function releasable(uint256 ranking) public view returns (uint256) { + uint256 totalReceived = address(this).balance + totalReleased; + return _pendingPayment(ranking, totalReceived, released[ranking]); + } + + /** + * @dev Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an + * IERC20 contract. + */ + function releasable(IERC20 token, uint256 ranking) public view returns (uint256) { + uint256 totalReceived = token.balanceOf(address(this)) + erc20TotalReleased[token]; + return _pendingPayment(ranking, totalReceived, erc20Released[token][ranking]); + } + + /** + * @dev Run release checks. + */ + function runReleaseChecks(uint256 ranking) public view { + if (underlyingContest.downvotingAllowed() != 0) revert MustHaveDownvotingDisabled(); + if (underlyingContest.sortingEnabled() != 1) revert MustHaveSortingEnabled(); + if (underlyingContest.state() != Governor.ContestState.Completed) revert ContestMustBeCompleted(); + if (ranking == 0) revert PayoutRankCannotBeZero(); + if (shares[ranking] == 0) revert RankingHasNoShares(); + } + + /** + * @dev Return address to pay out for a given ranking. + */ + function getAddressToPayOut(uint256 ranking) public view returns (address) { + address addressToPayOut; + uint256 determinedRankingIdxInSortedRanks = underlyingContest.getRankIndex(ranking); + + // if the ranking that we land on is tied or it's below a tied ranking, send to creator + if (underlyingContest.isOrIsBelowTiedRank(determinedRankingIdxInSortedRanks)) { + addressToPayOut = creator; + } + // otherwise, determine proposal at ranking and pay out according to that + else { + uint256 rankValue = underlyingContest.sortedRanks(determinedRankingIdxInSortedRanks); + Governor.ProposalCore memory rankingProposal = underlyingContest.getProposal( + underlyingContest.getOnlyProposalIdWithThisManyForVotes(rankValue) // if no ties there should only be one + ); + addressToPayOut = paysOutTarget ? rankingProposal.targetMetadata.targetAddress : rankingProposal.author; + } + + return addressToPayOut; + } + + /** + * @dev Triggers a transfer to `ranking` of the amount of Ether they are owed, according to their percentage of the + * total shares and their previous withdrawals. + */ + function release(uint256 ranking) public { + runReleaseChecks(ranking); + + uint256 payment = releasable(ranking); + + if (payment == 0) revert AccountNotDueNativePayment(); + + // totalReleased is the sum of all values in released. + // If "totalReleased += payment" does not overflow, then "released[account] += payment" cannot overflow. + totalReleased += payment; + unchecked { + released[ranking] += payment; + } + + address payable addressToPayOut = payable(getAddressToPayOut(ranking)); + + if (addressToPayOut == address(0)) revert CannotPayOutToZeroAddress(); + + emit PaymentReleased(addressToPayOut, payment); + Address.sendValue(addressToPayOut, payment); + } + + /** + * @dev Triggers a transfer to `ranking` of the amount of `token` tokens they are owed, according to their + * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 + * contract. + */ + function release(IERC20 token, uint256 ranking) public { + runReleaseChecks(ranking); + + uint256 payment = releasable(token, ranking); + + if (payment == 0) revert AccountNotDueERC20Payment(); + + // erc20TotalReleased[token] is the sum of all values in erc20Released[token]. + // If "erc20TotalReleased[token] += payment" does not overflow, then "erc20Released[token][account] += payment" cannot overflow. + erc20TotalReleased[token] += payment; + unchecked { + erc20Released[token][ranking] += payment; + } + + address payable addressToPayOut = payable(getAddressToPayOut(ranking)); + + if (addressToPayOut == address(0)) revert CannotPayOutToZeroAddress(); + + emit ERC20PaymentReleased(token, addressToPayOut, payment); + SafeERC20.safeTransfer(token, addressToPayOut, payment); + } + + function withdrawRewards() public { + if (msg.sender != creator) revert OnlyCreatorCanWithdraw(); + + emit RewardWithdrawn(creator, address(this).balance); + Address.sendValue(payable(creator), address(this).balance); + } + + function withdrawRewards(IERC20 token) public { + if (msg.sender != creator) revert OnlyCreatorCanWithdraw(); + + emit ERC20RewardWithdrawn(token, creator, token.balanceOf(address(this))); + SafeERC20.safeTransfer(token, payable(creator), token.balanceOf(address(this))); + } + + /** + * @dev internal logic for computing the pending payment of a `ranking` given the token historical balances and + * already released amounts. + */ + function _pendingPayment(uint256 ranking, uint256 totalReceived, uint256 alreadyReleased) + private + view + returns (uint256) + { + return (totalReceived * shares[ranking]) / totalShares - alreadyReleased; + } + + /** + * @dev Add a new payee to the contract. + * @param ranking The ranking of the payee to add. + * @param shares_ The number of shares owned by the payee. + */ + function _addPayee(uint256 ranking, uint256 shares_) private { + if (ranking == 0) revert RankingCannotBeZero(); + if (shares_ == 0) revert SharesCannotBeZero(); + if (shares[ranking] != 0) revert AccountAlreadyHasShares(); + + payees.push(ranking); + shares[ranking] = shares_; + totalShares = totalShares + shares_; + emit PayeeAdded(ranking, shares_); + } +} + +// src/governance/extensions/GovernorModuleRegistry.sol + +/** + * @dev Extension of {Governor} for module management. + */ +abstract contract GovernorModuleRegistry is Governor { + event OfficialRewardsModuleSet(RewardsModule oldOfficialRewardsModule, RewardsModule newOfficialRewardsModule); + + RewardsModule public officialRewardsModule; + + error OnlyCreatorCanSetRewardsModule(); + + /** + * @dev Get the official rewards module contract for this contest (effectively reverse record). + */ + function setOfficialRewardsModule(RewardsModule officialRewardsModule_) public { + if (msg.sender != creator) revert OnlyCreatorCanSetRewardsModule(); + RewardsModule oldOfficialRewardsModule = officialRewardsModule; + officialRewardsModule = officialRewardsModule_; + emit OfficialRewardsModuleSet(oldOfficialRewardsModule, officialRewardsModule_); + } +} + +// src/Contest.sol + +contract Contest is GovernorCountingSimple, GovernorModuleRegistry, GovernorEngagement { + error SortingAndDownvotingCannotBothBeEnabled(); + error PayPerVoteMustBeEnabledForAnyoneCanVote(); + + constructor( + string memory _name, + string memory _prompt, + bytes32 _submissionMerkleRoot, + bytes32 _votingMerkleRoot, + ConstructorArgs memory _constructorArgs + ) + Governor(_name, _prompt, _constructorArgs) + GovernorSorting(_constructorArgs.intConstructorArgs.sortingEnabled, _constructorArgs.intConstructorArgs.rankLimit) + GovernorMerkleVotes(_submissionMerkleRoot, _votingMerkleRoot) + { + if ( + _constructorArgs.intConstructorArgs.sortingEnabled == 1 + && _constructorArgs.intConstructorArgs.downvotingAllowed == 1 + ) { + revert SortingAndDownvotingCannotBothBeEnabled(); + } + if (_votingMerkleRoot == 0 && _constructorArgs.intConstructorArgs.payPerVote == 0) { + revert PayPerVoteMustBeEnabledForAnyoneCanVote(); + } + } +} + diff --git a/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.sol/Contest.json b/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.sol/Contest.json index 0af667a21..5c345a741 100644 --- a/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.sol/Contest.json +++ b/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.sol/Contest.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_name","type":"string","internalType":"string"},{"name":"_prompt","type":"string","internalType":"string"},{"name":"_submissionMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"_votingMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"_constructorArgs","type":"tuple","internalType":"struct Governor.ConstructorArgs","components":[{"name":"intConstructorArgs","type":"tuple","internalType":"struct Governor.IntConstructorArgs","components":[{"name":"contestStart","type":"uint256","internalType":"uint256"},{"name":"votingDelay","type":"uint256","internalType":"uint256"},{"name":"votingPeriod","type":"uint256","internalType":"uint256"},{"name":"numAllowedProposalSubmissions","type":"uint256","internalType":"uint256"},{"name":"maxProposalCount","type":"uint256","internalType":"uint256"},{"name":"downvotingAllowed","type":"uint256","internalType":"uint256"},{"name":"sortingEnabled","type":"uint256","internalType":"uint256"},{"name":"rankLimit","type":"uint256","internalType":"uint256"},{"name":"percentageToCreator","type":"uint256","internalType":"uint256"},{"name":"costToPropose","type":"uint256","internalType":"uint256"},{"name":"costToVote","type":"uint256","internalType":"uint256"},{"name":"payPerVote","type":"uint256","internalType":"uint256"}]},{"name":"creatorSplitDestination","type":"address","internalType":"address"},{"name":"jkLabsSplitDestination","type":"address","internalType":"address"},{"name":"metadataFieldsSchema","type":"string","internalType":"string"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"AMOUNT_FOR_SUMBITTER_PROOF","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"JK_LABS_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"MAX_FIELDS_METADATA_LENGTH","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"METADATAS_COUNT","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addressSubmitterVerified","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"addressTotalCastVoteCounts","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addressTotalVotes","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addressTotalVotesVerified","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"addressesThatHaveVoted","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"allProposalTotalVotes","inputs":[],"outputs":[{"name":"proposalIdsReturn","type":"uint256[]","internalType":"uint256[]"},{"name":"proposalVoteCountsArrayReturn","type":"tuple[]","internalType":"struct GovernorCountingSimple.VoteCounts[]","components":[{"name":"forVotes","type":"uint256","internalType":"uint256"},{"name":"againstVotes","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"cancel","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"canceled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"castVote","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"support","type":"uint8","internalType":"uint8"},{"name":"totalVotes","type":"uint256","internalType":"uint256"},{"name":"numVotes","type":"uint256","internalType":"uint256"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"castVoteWithoutProof","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"support","type":"uint8","internalType":"uint8"},{"name":"numVotes","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"checkProof","inputs":[{"name":"addressToCheck","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"},{"name":"voting","type":"bool","internalType":"bool"}],"outputs":[{"name":"verified","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"comment","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"commentContent","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"commentIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commentIsDeleted","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"comments","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"author","type":"address","internalType":"address"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"commentContent","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"contestAddressTotalVotesCast","inputs":[{"name":"userAddress","type":"address","internalType":"address"}],"outputs":[{"name":"userTotalVotesCast","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"contestDeadline","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"contestStart","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"costToPropose","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"costToVote","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"creator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"creatorSplitDestination","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"deleteComments","inputs":[{"name":"commentIdsParam","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deleteProposals","inputs":[{"name":"proposalIdsToDelete","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deletedCommentIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"deletedProposalIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"downvotingAllowed","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"forVotesToProposalIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAllAddressesThatHaveVoted","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getAllAuthorsOfDeletedProposals","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getAllCommentIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getAllDeletedCommentIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getAllDeletedProposalIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getAllProposalAuthors","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getAllProposalIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getComment","inputs":[{"name":"commentId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct GovernorEngagement.CommentCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"commentContent","type":"string","internalType":"string"}]}],"stateMutability":"view"},{"type":"function","name":"getNumProposalsWithThisManyForVotes","inputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"count","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getOnlyProposalIdWithThisManyForVotes","inputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getProposal","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]}],"stateMutability":"view"},{"type":"function","name":"getProposalComments","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getProposalsWithThisManyForVotes","inputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"proposalsWithThisManyForVotes","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getRankIndex","inputs":[{"name":"rank","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"rankIndex","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getSortedRanks","inputs":[],"outputs":[{"name":"sortedRanksArray","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"hashComment","inputs":[{"name":"commentObj","type":"tuple","internalType":"struct GovernorEngagement.CommentCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"commentContent","type":"string","internalType":"string"}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"hashProposal","inputs":[{"name":"proposal","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"isOrIsBelowTiedRank","inputs":[{"name":"idx","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"atOrBelowTiedRank","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"jkLabsSplitDestination","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"maxProposalCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"metadataFieldsSchema","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"numAllowedProposalSubmissions","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"numSubmissions","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"officialRewardsModule","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract RewardsModule"}],"stateMutability":"view"},{"type":"function","name":"payPerVote","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"percentageToCreator","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"prompt","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"proposalAddressVotes","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"userAddress","type":"address","internalType":"address"}],"outputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"},{"name":"againstVotes","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposalAddressesHaveVoted","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"proposalAuthors","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"proposalComments","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposalIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposalIsDeleted","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proposalVotes","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"},{"name":"againstVotes","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposalVotesStructs","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"proposalVoteCounts","type":"tuple","internalType":"struct GovernorCountingSimple.VoteCounts","components":[{"name":"forVotes","type":"uint256","internalType":"uint256"},{"name":"againstVotes","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"proposals","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}],"stateMutability":"view"},{"type":"function","name":"propose","inputs":[{"name":"proposal","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"proposeWithoutProof","inputs":[{"name":"proposal","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"rankLimit","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setCreatorSplitDestination","inputs":[{"name":"newCreatorSplitDestination","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOfficialRewardsModule","inputs":[{"name":"officialRewardsModule_","type":"address","internalType":"contract RewardsModule"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSubmissionMerkleRoot","inputs":[{"name":"newSubmissionMerkleRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setVotingMerkleRoot","inputs":[{"name":"newVotingMerkleRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sortedRanks","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"sortingEnabled","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"state","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"enum Governor.ContestState"}],"stateMutability":"view"},{"type":"function","name":"submissionMerkleRoot","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"totalVotesCast","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validateProposalData","inputs":[{"name":"proposal","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"verifyProposer","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyVoter","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"totalVotes","type":"uint256","internalType":"uint256"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"voteStart","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"votingDelay","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"votingMerkleRoot","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"votingPeriod","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"CommentCreated","inputs":[{"name":"commentId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CommentsDeleted","inputs":[{"name":"commentIds","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"ContestCanceled","inputs":[],"anonymous":false},{"type":"event","name":"CreatorPaymentReleased","inputs":[{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"JkLabsPaymentReleased","inputs":[{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"JokeraceCreated","inputs":[{"name":"version","type":"string","indexed":false,"internalType":"string"},{"name":"name","type":"string","indexed":false,"internalType":"string"},{"name":"prompt","type":"string","indexed":false,"internalType":"string"},{"name":"creator","type":"address","indexed":false,"internalType":"address"},{"name":"contestStart","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"votingDelay","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"votingPeriod","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OfficialRewardsModuleSet","inputs":[{"name":"oldOfficialRewardsModule","type":"address","indexed":false,"internalType":"contract RewardsModule"},{"name":"newOfficialRewardsModule","type":"address","indexed":false,"internalType":"contract RewardsModule"}],"anonymous":false},{"type":"event","name":"ProposalCreated","inputs":[{"name":"proposalId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"proposer","type":"address","indexed":false,"internalType":"address"},{"name":"proposalDescription","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"ProposalsDeleted","inputs":[{"name":"proposalIds","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"VoteCast","inputs":[{"name":"voter","type":"address","indexed":true,"internalType":"address"},{"name":"proposalId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"support","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"numVotes","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AddressFieldMetadataArrayTooLong","inputs":[]},{"type":"error","name":"AddressNotPermissionedToSubmit","inputs":[]},{"type":"error","name":"AuthorIsNotSender","inputs":[{"name":"author","type":"address","internalType":"address"},{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"CannotDeleteWhenCompleted","inputs":[]},{"type":"error","name":"CannotUpdateAfterCompleted","inputs":[]},{"type":"error","name":"CannotVoteLessThanOneVoteInPayPerVote","inputs":[]},{"type":"error","name":"CannotVoteOnDeletedProposal","inputs":[]},{"type":"error","name":"ContestAlreadyCancelled","inputs":[]},{"type":"error","name":"ContestMustBeActiveToVote","inputs":[{"name":"currentState","type":"uint8","internalType":"enum Governor.ContestState"}]},{"type":"error","name":"ContestMustBeQueuedToPropose","inputs":[{"name":"currentState","type":"uint8","internalType":"enum Governor.ContestState"}]},{"type":"error","name":"ContestSubmissionLimitReached","inputs":[{"name":"maxProposalCount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DownvotingNotEnabled","inputs":[]},{"type":"error","name":"DuplicateSubmission","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"EmptyProposalDescription","inputs":[]},{"type":"error","name":"IncorrectCostSent","inputs":[{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"costToVote","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"IndexHasNotBeenPopulated","inputs":[]},{"type":"error","name":"InvalidVoteType","inputs":[]},{"type":"error","name":"MoreThanOneProposalWithThisManyVotes","inputs":[]},{"type":"error","name":"NeedAtLeastOneVoteToVote","inputs":[]},{"type":"error","name":"NeedToSubmitWithProofFirst","inputs":[]},{"type":"error","name":"NeedToVoteWithProofFirst","inputs":[]},{"type":"error","name":"NotEnoughVotesLeft","inputs":[]},{"type":"error","name":"NotInMerkle","inputs":[]},{"type":"error","name":"OnlyCreatorCanAmend","inputs":[]},{"type":"error","name":"OnlyCreatorCanDelete","inputs":[]},{"type":"error","name":"OnlyCreatorCanSetRewardsModule","inputs":[]},{"type":"error","name":"OnlyCreatorOrAuthorCanDeleteComments","inputs":[{"name":"failedToDeleteCommentId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlyJkLabsCanAmend","inputs":[]},{"type":"error","name":"OnlyJkLabsOrCreatorCanCancel","inputs":[]},{"type":"error","name":"PayPerVoteMustBeEnabledForAnyoneCanVote","inputs":[]},{"type":"error","name":"RankCannotBeZero","inputs":[]},{"type":"error","name":"RankIsNotInSortedRanks","inputs":[]},{"type":"error","name":"SenderSubmissionLimitReached","inputs":[{"name":"numAllowedProposalSubmissions","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SortingAndDownvotingCannotBothBeEnabled","inputs":[]},{"type":"error","name":"StringFieldMetadataArrayTooLong","inputs":[]},{"type":"error","name":"UintFieldMetadataArrayTooLong","inputs":[]},{"type":"error","name":"UnexpectedMetadata","inputs":[{"name":"unexpectedMetadata","type":"uint8","internalType":"enum Governor.Metadatas"}]},{"type":"error","name":"ZeroSignersInSafeMetadata","inputs":[]},{"type":"error","name":"ZeroThresholdInSafeMetadata","inputs":[]}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b506040516200561b3803806200561b83398101604081905262000034916200033c565b805160c081015160e09091015160009190915560015560038390556004829055848482600562000065848262000570565b50600662000074838262000570565b5060078054336001600160a01b03199182161790915581518051600855602080820151600955604080830151600a55606080840151600b556080840151600c5560a0840151600d55610100840151600e55610120840151600f5561014084015160105561016090930151601155908401516012805485166001600160a01b0392831617905590840151601380549094169116179091558101516014906200011c908262000570565b506040805180820182526004815263342e333160e01b60208083019190915283518051918101519084015193517f9a9bca21e4e51607db64fbdbcd7b2284a909c6a8969821f0d161efbdcae70160946200017e9493899389933393906200066a565b60405180910390a15050815160c0015160011490508015620001a55750805160a001516001145b15620001c457604051636bff10c960e01b815260040160405180910390fd5b81158015620001d7575080516101600151155b15620001f6576040516397b6be7d60e01b815260040160405180910390fd5b5050505050620006d9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200023c576200023c62000201565b60405290565b60405161018081016001600160401b03811182821017156200023c576200023c62000201565b60005b83811015620002855781810151838201526020016200026b565b50506000910152565b600082601f830112620002a057600080fd5b81516001600160401b0380821115620002bd57620002bd62000201565b604051601f8301601f19908116603f01168101908282118183101715620002e857620002e862000201565b816040528381528660208588010111156200030257600080fd5b6200031584602083016020890162000268565b9695505050505050565b80516001600160a01b03811681146200033757600080fd5b919050565b600080600080600060a086880312156200035557600080fd5b85516001600160401b03808211156200036d57600080fd5b6200037b89838a016200028e565b965060208801519150808211156200039257600080fd5b620003a089838a016200028e565b955060408801519450606088015193506080880151915080821115620003c557600080fd5b908701908189036101e0811215620003dc57600080fd5b620003e662000217565b61018080831215620003f757600080fd5b6200040162000242565b9250845183526020850151602084015260408501516040840152606085015160608401526080850151608084015260a085015160a084015260c085015160c084015260e085015160e08401526101008086015181850152506101208086015181850152506101408086015181850152506101608086015181850152508282526200048d8186016200031f565b602083015250620004a26101a085016200031f565b60408201526101c0840151915082821115620004bd57600080fd5b620004cb8b8386016200028e565b6060820152809450505050509295509295909350565b600181811c90821680620004f657607f821691505b6020821081036200051757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200056b57600081815260208120601f850160051c81016020861015620005465750805b601f850160051c820191505b81811015620005675782815560010162000552565b5050505b505050565b81516001600160401b038111156200058c576200058c62000201565b620005a4816200059d8454620004e1565b846200051d565b602080601f831160018114620005dc5760008415620005c35750858301515b600019600386901b1c1916600185901b17855562000567565b600085815260208120601f198616915b828110156200060d57888601518255948401946001909101908401620005ec565b50858210156200062c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600081518084526200065681602086016020860162000268565b601f01601f19169290920160200192915050565b60e0815260006200067f60e083018a6200063c565b828103602084015262000693818a6200063c565b90508281036040840152620006a981896200063c565b6001600160a01b039790971660608401525050608081019390935260a083019190915260c0909101529392505050565b614f3280620006e96000396000f3fe6080604052600436106104d55760003560e01c8063711effc811610281578063c19d93fb1161015a578063e11db9d8116100cc578063f4f3d7ec11610085578063f4f3d7ec14610f5c578063f5c3641114610f7c578063f61736f414610f9c578063f79c017214610fbc578063f823f11014610fec578063fb9bf8d414610fff57600080fd5b8063e11db9d814610ebf578063ea8a1af014610ed4578063edcd1be414610ee9578063eef18e1714610eff578063efa90d3614610f27578063f0a7db0a14610f3c57600080fd5b8063d140d9f01161011e578063d140d9f014610e07578063d798902514610e27578063daf762db14610e47578063dd96a19d14610e67578063dea5f6a614610e7d578063e031535b14610eaa57600080fd5b8063c19d93fb14610d53578063c7f758a814610d75578063c9a1b6b214610da2578063cb85395014610dc2578063cbdc27cb14610df257600080fd5b80639ba197af116101f3578063aec116b6116101b7578063aec116b614610c92578063b323580d14610cc8578063b382543f14610ce8578063b66d1da314610cfd578063bddc164114610d1d578063c05f410414610d3357600080fd5b80639ba197af14610bd5578063a1ac6cb214610c02578063ab5e694714610c2f578063ac67f80114610c42578063ae66b8ad14610c6257600080fd5b8063832009af11610245578063832009af14610b0a5780638ebb4c1514610b205780639174778c14610b50578063930de97914610b70578063946369b514610ba05780639b644a2314610bb557600080fd5b8063711effc814610a7257806375e509c514610a92578063785ddfe514610abf5780637c65d71114610adf5780637de418d514610af457600080fd5b80633932abb1116103b3578063544c7bb41161032557806360506ff6116102e957806360506ff6146109e957806360ed97a9146109ff57806365f1626314610a145780636e4eb81014610a275780636ed815ad14610a475780636fd3636b14610a5d57600080fd5b8063544c7bb41461091d578063544ffc9c1461093d57806354fd4d50146109875780635c7107d8146109b45780635cb718a1146109d457600080fd5b80634a587ad4116103775780634a587ad41461086f5780634d24a67f1461088f57806350a5e524146108a457806350c4b616146108c757806351a41dec146108e7578063531bd812146108fd57600080fd5b80633932abb1146107ec5780633f9942ff146108025780633fb57c921461081c578063409fd0301461083c578063419c533c1461085c57600080fd5b8063102613d81161044c578063262e59e911610410578063262e59e9146107335780632c39805f14610748578063325cc6d91461076a57806332763c221461078a578063347cf665146107ba578063366ecf5b146107d657600080fd5b8063102613d81461068f5780631242b737146106af578063146230f6146106d15780631805c523146106f357806320b3e8451461071357600080fd5b80630414126a1161049e5780630414126a1461059957806305846cae146105af57806306fdde03146105cf578063070dc5d9146105f15780630800e300146106425780630aa25e441461066f57600080fd5b80624114a8146104da578063013cf08b1461050357806302a251a31461053557806302d05d3f1461054b57806303f7eed614610583575b600080fd5b3480156104e657600080fd5b506104f060085481565b6040519081526020015b60405180910390f35b34801561050f57600080fd5b5061052361051e366004613ef5565b611015565b6040516104fa96959493929190614085565b34801561054157600080fd5b506104f0600a5481565b34801561055757600080fd5b5060075461056b906001600160a01b031681565b6040516001600160a01b0390911681526020016104fa565b34801561058f57600080fd5b506104f060115481565b3480156105a557600080fd5b506104f060015481565b3480156105bb57600080fd5b506104f06105ca366004613ef5565b611300565b3480156105db57600080fd5b506105e4611321565b6040516104fa91906140df565b3480156105fd57600080fd5b5061063561060c366004613ef5565b602260209081526000918252604091829020825180840190935280548352600101549082015281565b6040516104fa91906140f2565b34801561064e57600080fd5b5061066261065d366004613ef5565b6113af565b6040516104fa9190614109565b34801561067b57600080fd5b5061056b61068a366004613ef5565b6114c3565b34801561069b57600080fd5b5060135461056b906001600160a01b031681565b3480156106bb57600080fd5b506106c46114ed565b6040516104fa9190614152565b3480156106dd57600080fd5b506106f16106ec36600461418a565b611545565b005b3480156106ff57600080fd5b506104f061070e3660046142a6565b6115cb565b34801561071f57600080fd5b506106f161072e366004614330565b6116ec565b34801561073f57600080fd5b506104f061175b565b34801561075457600080fd5b5061075d611777565b6040516104fa9190614384565b34801561077657600080fd5b506104f0610785366004613ef5565b6117d8565b34801561079657600080fd5b506107aa6107a53660046143e1565b6117e8565b60405190151581526020016104fa565b3480156107c657600080fd5b506104f0678ac7230489e8000081565b3480156107e257600080fd5b506104f060005481565b3480156107f857600080fd5b506104f060095481565b34801561080e57600080fd5b506018546107aa9060ff1681565b34801561082857600080fd5b506104f0610837366004613ef5565b6118e7565b34801561084857600080fd5b506104f0610857366004614451565b6118f7565b6104f061086a36600461450d565b611928565b34801561087b57600080fd5b5060125461056b906001600160a01b031681565b34801561089b57600080fd5b506104f0611996565b3480156108b057600080fd5b506108b96119a5565b6040516104fa92919061457d565b3480156108d357600080fd5b5061056b6108e2366004613ef5565b611aab565b3480156108f357600080fd5b506104f060105481565b34801561090957600080fd5b506106f16109183660046145e6565b611abb565b34801561092957600080fd5b506106f1610938366004613ef5565b611b30565b34801561094957600080fd5b50610972610958366004613ef5565b600090815260226020526040902080546001909101549091565b604080519283526020830191909152016104fa565b34801561099357600080fd5b50604080518082019091526004815263342e333160e01b60208201526105e4565b3480156109c057600080fd5b506104f06109cf366004613ef5565b611ba2565b3480156109e057600080fd5b506106c4611ca9565b3480156109f557600080fd5b506104f0600d5481565b348015610a0b57600080fd5b506105e4611cff565b6104f0610a22366004614641565b611d0c565b348015610a3357600080fd5b50610972610a42366004614676565b611daa565b348015610a5357600080fd5b506104f0600f5481565b348015610a6957600080fd5b506106c4611ddf565b348015610a7e57600080fd5b506104f0610a8d3660046146a6565b611e35565b348015610a9e57600080fd5b506104f0610aad36600461418a565b601a6020526000908152604090205481565b348015610acb57600080fd5b5060245461056b906001600160a01b031681565b348015610aeb57600080fd5b506105e4611e66565b348015610b0057600080fd5b506104f060205481565b348015610b1657600080fd5b506104f0600b5481565b348015610b2c57600080fd5b50610b40610b3b366004613ef5565b611e73565b6040516104fa94939291906146c8565b348015610b5c57600080fd5b506107aa610b6b366004613ef5565b611f30565b348015610b7c57600080fd5b506107aa610b8b36600461418a565b601e6020526000908152604090205460ff1681565b348015610bac57600080fd5b5061075d611fd6565b348015610bc157600080fd5b506104f0610bd0366004613ef5565b612036565b348015610be157600080fd5b506104f0610bf0366004613ef5565b60009081526023602052604090205490565b348015610c0e57600080fd5b506104f0610c1d36600461418a565b60216020526000908152604090205481565b6104f0610c3d366004614717565b612046565b348015610c4e57600080fd5b506106f1610c5d3660046147d9565b6120c0565b348015610c6e57600080fd5b506107aa610c7d366004613ef5565b60296020526000908152604090205460ff1681565b348015610c9e57600080fd5b506104f0610cad36600461418a565b6001600160a01b031660009081526021602052604090205490565b348015610cd457600080fd5b5061075d610ce3366004613ef5565b6121fa565b348015610cf457600080fd5b506104f0600a81565b348015610d0957600080fd5b506104f0610d18366004613ef5565b61226c565b348015610d2957600080fd5b506104f060035481565b348015610d3f57600080fd5b506106c4610d4e366004613ef5565b6122cc565b348015610d5f57600080fd5b50610d6861232e565b6040516104fa9190614823565b348015610d8157600080fd5b50610d95610d90366004613ef5565b61237f565b6040516104fa919061483d565b348015610dae57600080fd5b506106c4610dbd366004613ef5565b61269f565b348015610dce57600080fd5b506107aa610ddd36600461418a565b601f6020526000908152604090205460ff1681565b348015610dfe57600080fd5b5061075d6126ff565b348015610e1357600080fd5b506106f1610e22366004614bac565b61282f565b348015610e3357600080fd5b506104f0610e42366004614bac565b612a16565b348015610e5357600080fd5b506106f1610e62366004613ef5565b612a29565b348015610e7357600080fd5b506104f060045481565b348015610e8957600080fd5b506104f0610e9836600461418a565b601d6020526000908152604090205481565b348015610eb657600080fd5b506104f0612a9b565b348015610ecb57600080fd5b506106c4612aad565b348015610ee057600080fd5b506106f1612b03565b348015610ef557600080fd5b506104f0600e5481565b348015610f0b57600080fd5b5061056b73dc652c746a8f85e18ce632d97c6118e8a52fa73881565b348015610f3357600080fd5b506106c4612bc7565b348015610f4857600080fd5b506106f1610f57366004614be0565b612c1d565b348015610f6857600080fd5b506106f1610f7736600461418a565b612d78565b348015610f8857600080fd5b506104f0610f97366004613ef5565b612dfd565b348015610fa857600080fd5b506104f0610fb73660046146a6565b612e0d565b348015610fc857600080fd5b506107aa610fd7366004613ef5565b60176020526000908152604090205460ff1681565b6104f0610ffa366004614c21565b612e29565b34801561100b57600080fd5b506104f0600c5481565b601960205260009081526040902080546001820180546001600160a01b03831693600160a01b90930460ff1692919061104d90614c7c565b80601f016020809104026020016040519081016040528092919081815260200182805461107990614c7c565b80156110c65780601f1061109b576101008083540402835291602001916110c6565b820191906000526020600020905b8154815290600101906020018083116110a957829003601f168201915b5050604080516020808201835260028801546001600160a01b03168252825160038901805460609381028301840186529482018581529899939893975090955093508492849184018282801561114557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611127575b505050505081526020016001820154815250509080600501604051806060016040529081600082018054806020026020016040519081016040528092919081815260200182805480156111c157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111a3575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101561129b57838290600052602060002001805461120e90614c7c565b80601f016020809104026020016040519081016040528092919081815260200182805461123a90614c7c565b80156112875780601f1061125c57610100808354040283529160200191611287565b820191906000526020600020905b81548152906001019060200180831161126a57829003601f168201915b5050505050815260200190600101906111ef565b505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156112f257602002820191906000526020600020905b8154815260200190600101908083116112de575b505050505081525050905086565b6016818154811061131057600080fd5b600091825260209091200154905081565b6005805461132e90614c7c565b80601f016020809104026020016040519081016040528092919081815260200182805461135a90614c7c565b80156113a75780601f1061137c576101008083540402835291602001916113a7565b820191906000526020600020905b81548152906001019060200180831161138a57829003601f168201915b505050505081565b6113e3604051806080016040528060006001600160a01b031681526020016000815260200160008152602001606081525090565b600082815260276020908152604091829020825160808101845281546001600160a01b0316815260018201549281019290925260028101549282019290925260038201805491929160608401919061143a90614c7c565b80601f016020809104026020016040519081016040528092919081815260200182805461146690614c7c565b80156114b35780601f10611488576101008083540402835291602001916114b3565b820191906000526020600020905b81548152906001019060200180831161149657829003601f168201915b5050505050815250509050919050565b601b81815481106114d357600080fd5b6000918252602090912001546001600160a01b0316905081565b6060601680548060200260200160405190810160405280929190818152602001828054801561153b57602002820191906000526020600020905b815481526020019060010190808311611527575b5050505050905090565b6007546001600160a01b031633146115705760405163141dbb4960e21b815260040160405180910390fd5b600461157a61232e565b600481111561158b5761158b61480d565b036115a95760405163ac61508760e01b815260040160405180910390fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6040805160808101825233815242602082015290810183905260608101829052600090816115f8826118f7565b6025805460018082019092557f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c01829055600082815260276020908152604091829020865181546001600160a01b0319166001600160a01b03909116178155908601519281019290925584015160028201556060840151919250839160038201906116839082614cfe565b505050600085815260286020908152604080832080546001810182559084529190922001829055517f5a1a930fed43f34b3a07db782ebcac28a661c273e662bb98458cfba5a8ccd220906116da9083815260200190565b60405180910390a19150505b92915050565b6001600160a01b0383166000908152601f602052604090205460ff166117565760035460000361171b57505050565b61173183678ac7230489e80000848460006117e8565b506001600160a01b0383166000908152601f60205260409020805460ff191660011790555b505050565b6000600a54611768612a9b565b6117729190614dd3565b905090565b6060601c80548060200260200160405190810160405280929190818152602001828054801561153b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117b1575050505050905090565b6002818154811061131057600080fd5b6040516bffffffffffffffffffffffff19606087901b16602082015260348101859052600090819060540160405160208183030381529060405280519060200120905060008361187857611873868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506003549150859050612e69565b6118b9565b6118b9868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506004549150859050612e69565b9050806118d95760405163452c2df160e11b815260040160405180910390fd5b506001979650505050505050565b6026818154811061131057600080fd5b60008160405160200161190a9190614109565b60408051601f19818403018152919052805160209091012092915050565b600080611936600186612e7f565b60008981526017602052604090205490915060ff1615611969576040516358f1119560e01b815260040160405180910390fd5b61197533878686611abb565b61197e81612f4b565b61198a88338988613052565b98975050505050505050565b6119a260026001614dd3565b81565b60608060006119b2612bc7565b9050600081516001600160401b038111156119cf576119cf6141a7565b604051908082528060200260200182016040528015611a1457816020015b60408051808201909152600080825260208201528152602001906001900390816119ed5790505b50905060005b8251811015611aa15760226000848381518110611a3957611a39614de6565b6020026020010151815260200190815260200160002060000160405180604001604052908160008201548152602001600182015481525050828281518110611a8357611a83614de6565b60200260200101819052508080611a9990614dfc565b915050611a1a565b5090939092509050565b601c81815481106114d357600080fd5b60045415801590611ae557506001600160a01b0384166000908152601e602052604090205460ff16155b15611b2a57611af88484848460016117e8565b506001600160a01b0384166000908152601d60209081526040808320869055601e9091529020805460ff191660011790555b50505050565b3373dc652c746a8f85e18ce632d97c6118e8a52fa73814611b645760405163de07280160e01b815260040160405180910390fd5b6004611b6e61232e565b6004811115611b7f57611b7f61480d565b03611b9d5760405163ac61508760e01b815260040160405180910390fd5b600455565b600081600003611bc557604051630ec90a1760e31b815260040160405180910390fd5b60028054604080516020808402820181019092528281529192600092918490830182828015611c1357602002820191906000526020600020905b815481526020019060010190808311611bff575b5050505050905060006001905060005b83811015611c8f57611c5a838281518110611c4057611c40614de6565b602002602001015160009081526023602052604090205490565b15611c7d57858203611c6f5795945050505050565b81611c7981614dfc565b9250505b80611c8781614dfc565b915050611c23565b50604051632cc2ab7360e11b815260040160405180910390fd5b6060602680548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6014805461132e90614c7c565b600080611d1a600184612e7f565b60008681526017602052604090205490915060ff1615611d4d576040516358f1119560e01b815260040160405180910390fd5b60045415801590611d6e5750336000908152601e602052604090205460ff16155b15611d8c5760405163126ec6d160e31b815260040160405180910390fd5b611d9581612f4b565b611da185338686613052565b95945050505050565b60008281526022602090815260408083206001600160a01b0385168452600301909152902080546001909101545b9250929050565b6060600280548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b60236020528160005260406000208181548110611e5157600080fd5b90600052602060002001600091509150505481565b6006805461132e90614c7c565b60276020526000908152604090208054600182015460028301546003840180546001600160a01b03909416949293919291611ead90614c7c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed990614c7c565b8015611f265780601f10611efb57610100808354040283529160200191611f26565b820191906000526020600020905b815481529060010190602001808311611f0957829003601f168201915b5050505050905084565b600254600090611f4290600190614e15565b821115611f62576040516365d6f35160e11b815260040160405180910390fd5b60005b611f70836001614dd3565b811015611fcd576001611fac60028381548110611f8f57611f8f614de6565b906000526020600020015460009081526023602052604090205490565b1115611fbb5750600192915050565b80611fc581614dfc565b915050611f65565b50600092915050565b6060601b80548060200260200160405190810160405280929190818152602001828054801561153b576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116117b1575050505050905090565b6015818154811061131057600080fd5b600080612054600080612e7f565b6003549091501561208f57336000908152601f602052604090205460ff1661208f57604051631f22097560e01b815260040160405180910390fd5b61209b610e2284614e28565b60006120ae6120a985614e28565b613199565b90506120b982612f4b565b9392505050565b805160005b818110156121be5760008382815181106120e1576120e1614de6565b60209081029190910101516007549091506001600160a01b0316331480159061212157506000818152602760205260409020546001600160a01b03163314155b1561214757604051635450763d60e11b8152600481018290526024015b60405180910390fd5b60008181526029602052604090205460ff166121ab576000818152602960205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594018190555b50806121b681614dfc565b9150506120c5565b507f788a4349d25bc08585923ae212bce8bb346a623bce753eeecb85fd9ce58dcb4b826040516121ee9190614152565b60405180910390a15050565b600081815260226020908152604091829020600281018054845181850281018501909552808552606094929383018282801561225f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612241575b5050505050915050919050565b60008181526023602052604081205460011461229b57604051633832a15560e21b815260040160405180910390fd5b600082815260236020526040812080549091906122ba576122ba614de6565b90600052602060002001549050919050565b60008181526028602090815260409182902080548351818402810184019094528084526060939283018282801561232257602002820191906000526020600020905b81548152602001906001019080831161230e575b50505050509050919050565b60185460009060ff16156123425750600290565b42600854106123515750600090565b4261235a612a9b565b106123655750600390565b4261236e61175b565b106123795750600190565b50600490565b612387613cfd565b600082815260196020908152604091829020825160c08101845281546001600160a01b0381168252600160a01b900460ff1615159281019290925260018101805492939192918401916123d990614c7c565b80601f016020809104026020016040519081016040528092919081815260200182805461240590614c7c565b80156124525780601f1061242757610100808354040283529160200191612452565b820191906000526020600020905b81548152906001019060200180831161243557829003601f168201915b5050509183525050604080516020818101835260028501546001600160a01b031682528084019190915281516003850180546060938102830184018552828501818152949095019491939092849284918401828280156124db57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124bd575b505050505081526020016001820154815250508152602001600582016040518060600160405290816000820180548060200260200160405190810160405280929190818152602001828054801561255b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161253d575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b828210156126355783829060005260206000200180546125a890614c7c565b80601f01602080910402602001604051908101604052809291908181526020018280546125d490614c7c565b80156126215780601f106125f657610100808354040283529160200191612621565b820191906000526020600020905b81548152906001019060200180831161260457829003601f168201915b505050505081526020019060010190612589565b5050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561268c57602002820191906000526020600020905b815481526020019060010190808311612678575b5050509190925250505090525092915050565b600081815260236020908152604091829020805483518184028101840190945280845260609392830182828015612322576020028201919060005260206000209081548152602001906001019080831161230e5750505050509050919050565b60606000601680548060200260200160405190810160405280929190818152602001828054801561274f57602002820191906000526020600020905b81548152602001906001019080831161273b575b50505050509050600081516001600160401b03811115612771576127716141a7565b60405190808252806020026020018201604052801561279a578160200160208202803683370190505b50905060005b825181101561282857601960008483815181106127bf576127bf614de6565b6020026020010151815260200190815260200160002060000160009054906101000a90046001600160a01b03168282815181106127fe576127fe614de6565b6001600160a01b03909216602092830291909101909101528061282081614dfc565b9150506127a0565b5092915050565b80516001600160a01b0316331461286d57805160405163fbbf4d7f60e01b81526001600160a01b03909116600482015233602482015260440161213e565b60005b61287c60026001614dd3565b8110156129ec5760008160028111156128975761289761480d565b905060008160028111156128ad576128ad61480d565b036128b857506129da565b60018160028111156128cc576128cc61480d565b0361292657608083015151516000036128f85760405163c3b2798b60e01b815260040160405180910390fd5b826080015160200151600003612921576040516392fb9a3560e01b815260040160405180910390fd5b6129d8565b600281600281111561293a5761293a61480d565b036129bd5760a08301515151600a101561296757604051631e38b1b160e11b815260040160405180910390fd5b600a8360a00151602001515111156129925760405163a3b7dd7760e01b815260040160405180910390fd5b600a8360a00151604001515111156129215760405163f696406560e01b815260040160405180910390fd5b8060405163d2277d4960e01b815260040161213e9190614e34565b505b806129e481614dfc565b915050612870565b50806040015151600003612a135760405163e182473360e01b815260040160405180910390fd5b50565b60008160405160200161190a919061483d565b3373dc652c746a8f85e18ce632d97c6118e8a52fa73814612a5d5760405163de07280160e01b815260040160405180910390fd5b6004612a6761232e565b6004811115612a7857612a7861480d565b03612a965760405163ac61508760e01b815260040160405180910390fd5b600355565b60006009546008546117729190614dd3565b6060602580548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6007546001600160a01b03163314801590612b3257503373dc652c746a8f85e18ce632d97c6118e8a52fa73814155b15612b50576040516301dbf46f60e71b815260040160405180910390fd5b6000612b5a61232e565b90506002816004811115612b7057612b7061480d565b03612b8e57604051633c30acbf60e01b815260040160405180910390fd5b6018805460ff191660011790556040517f4cd963a081760a54f571abc0f1db4dde31b4a07d8d6da3e844b8c6f47eeaaa4290600090a150565b6060601580548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6007546001600160a01b03163314612c485760405163b8d4540960e01b815260040160405180910390fd5b6004612c5261232e565b6004811115612c6357612c6361480d565b03612c81576040516331da1c8b60e11b815260040160405180910390fd5b60005b81811015612d26576000838383818110612ca057612ca0614de6565b60209081029290920135600081815260179093526040909220549192505060ff16612d13576000818152601760205260408120805460ff191660019081179091556016805491820181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289018190555b5080612d1e81614dfc565b915050612c84565b50600d54158015612d3957506000546001145b15612d4857612d488282613470565b7f75a75cf5c561892f4cc5b26c1b8e933849b42238c96dd073d080d1ae96c5141660156040516121ee9190614e48565b6007546001600160a01b03163314612da357604051630f4cb1bd60e11b815260040160405180910390fd5b602480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f753a2cf8d360cff631674504210913e48247f8e56b3e6d2006c2103d4095999f91016121ee565b6025818154811061131057600080fd5b60286020528160005260406000208181548110611e5157600080fd5b600080612e37600080612e7f565b9050612e443385856116ec565b612e50610e2286614e28565b6000612e5e6120a987614e28565b9050611da182612f4b565b600082612e7685846134cd565b14949350505050565b60008080846001811115612e9557612e9561480d565b03612ea35750600f54612f22565b6001846001811115612eb757612eb761480d565b03612f1e57601154600103612f1557670de0b6b3a7640000831015612eef576040516346ddb8d160e01b815260040160405180910390fd5b612f01670de0b6b3a764000084614e83565b601054612f0e9190614ea5565b9050612f22565b50601054612f22565b5060005b8034146120b9576040516372c3eaa760e01b81523460048201526024810182905260440161213e565b8015612a135760006064600e546064612f649190614e15565b612f6e9034614ea5565b612f789190614e83565b90508015612fdd57601354612f96906001600160a01b03168261351a565b601354604080516001600160a01b039092168252602082018390527f9df63d1c00d2e332f573be591c0579caafb256b2c5a17abcc8ad471cccda1b81910160405180910390a15b6000612fe98234614e15565b9050801561175657601254613007906001600160a01b03168261351a565b600754604080516001600160a01b039092168252602082018390527f6dff55337c8458ae8c536a63869a48bc33541733422a796390c131d91f4238ed910160405180910390a1505050565b6000600161305e61232e565b600481111561306f5761306f61480d565b146130965761307c61232e565b60405163049cab4960e51b815260040161213e9190614823565b816000036130b75760405163502e1c2960e01b815260040160405180910390fd5b6130e985858585601d60008a6001600160a01b03166001600160a01b0316815260200190815260200160002054613633565b601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b031916331790556040805186815260ff851660208201529081018390526001600160a01b038516907f2c9deb38f462962eadbd85a9d3a4120503ee091f1582eaaa10aa8c6797651d299060600160405180910390a25050506001600160a01b03166000908152601d6020526040902054919050565b600060036131a561232e565b60048111156131b6576131b661480d565b146131dd576131c361232e565b604051632889531360e01b815260040161213e9190614823565b600b54336000908152601a60205260409020540361321457600b54604051632bd6d93960e21b815260040161213e91815260200190565b600c546016546015546132279190614e15565b0361324b57600c546040516302217f5360e51b815260040161213e91815260200190565b600061325683612a16565b600081815260196020526040902054909150600160a01b900460ff16156132935760405163baffc42360e01b81526004810182905260240161213e565b6015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750182905560008281526019602090815260409182902086518154928801511515600160a01b026001600160a81b03199093166001600160a01b03909116179190911781559085015185928201906133179082614cfe565b506060820151516002820180546001600160a01b0319166001600160a01b03909216919091179055608082015180518051600384019161335c91839160200190613d97565b5060209182015160019091015560a083015180518051919260058501926133869284920190613d97565b50602082810151805161339f9260018501920190613dfc565b50604082015180516133bb916002840191602090910190613e4e565b5050336000908152601a602052604081208054600195509093509091506133e3908490614dd3565b9091555050601b80546001810182556000919091527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319163390811790915560408085015190517f7585f467599d0f008985f231af99293be388626ac16ca59505c2f8f88969cd6392613462928592614ebc565b60405180910390a192915050565b60005b8181101561175657600083838381811061348f5761348f614de6565b60209081029290920135600081815260229093526040909220549192506134b8905082826138a8565b505080806134c590614dfc565b915050613473565b600081815b8451811015613512576134fe828683815181106134f1576134f1614de6565b60200260200101516139d9565b91508061350a81614dfc565b9150506134d2565b509392505050565b8047101561356a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161213e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146135b7576040519150601f19603f3d011682016040523d82523d6000602084013e6135bc565b606091505b50509050806117565760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161213e565b60008581526022602052604090206004541580159061367357506001600160a01b0385166000908152602160205260409020546136709083614e15565b83115b156136915760405163660fa07360e11b815260040160405180910390fd5b6001600160a01b03851660009081526003820160205260408120541580156136d457506001600160a01b0386166000908152600383016020526040902060010154155b905060ff851661372c578154849083906000906136f2908490614dd3565b90915550506001600160a01b038616600090815260038301602052604081208054869290613721908490614dd3565b909155506137bd9050565b60001960ff8616016137a457600d5460011461375b57604051639755958f60e01b815260040160405180910390fd5b838260000160010160008282546137729190614dd3565b90915550506001600160a01b038616600090815260038301602052604081206001018054869290613721908490614dd3565b604051638eed55d160e01b815260040160405180910390fd5b80156137f457600282018054600181018255600091825260209091200180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b0386166000908152602160205260408120805486929061381c908490614dd3565b9250508190555083602060008282546138359190614dd3565b9091555050600d5415801561384c57506000546001145b1561389f578154600061385f8683614e15565b905080156138715761387189826138a8565b60008281526023602090815260408220805460018101825590835291200189905561389c8183613a08565b50505b50505050505050565b6000818152602360209081526040808320805482518185028101850190935280835291929091908301828280156138fe57602002820191906000526020600020905b8154815260200190600101908083116138ea575b5050505050905060005b8151811015611b2a578382828151811061392457613924614de6565b6020026020010151036139c75781600183516139409190614e15565b8151811061395057613950614de6565b602002602001015160236000858152602001908152602001600020828154811061397c5761397c614de6565b9060005260206000200181905550602360008481526020019081526020016000208054806139ac576139ac614ee6565b60019003818190600052602060002001600090559055611b2a565b806139d181614dfc565b915050613908565b60008183106139f55760008281526020849052604090206120b9565b60008381526020839052604090206120b9565b60028054604080516020808402820181019092528281529192600092918490830182828015613a5657602002820191906000526020600020905b815481526020019060010190808311613a42575b5050505050905081600003613a9d575050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015550565b80613aa9600184614e15565b81518110613ab957613ab9614de6565b6020026020010151831015613b0f576001548203613ad75750505050565b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015550565b611b2a848484846000805b83811015613b8457828181518110613b3457613b34614de6565b60200260200101518503613b49575050611b2a565b828181518110613b5b57613b5b614de6565b6020026020010151851115613b7257809150613b84565b80613b7c81614dfc565b915050613b1a565b5060008086118015613ba25750600086815260236020526040902054155b90506000818015613bcb575086848481518110613bc157613bc1614de6565b6020026020010151145b613cd457613bda600186614e15565b8314613c82576000613bed846001614dd3565b90505b85811015613c805784613c04600183614e15565b81518110613c1457613c14614de6565b602002602001015160028281548110613c2f57613c2f614de6565b600091825260209091200155828015613c60575087858281518110613c5657613c56614de6565b6020026020010151145b15613c6e5760019150613c80565b80613c7881614dfc565b915050613bf0565b505b80158015613c91575060015485105b15613cd457600284613ca4600188614e15565b81518110613cb457613cb4614de6565b602090810291909101810151825460018101845560009384529190922001555b8560028481548110613ce857613ce8614de6565b60009182526020909120015550505050505050565b6040518060c0016040528060006001600160a01b0316815260200160001515815260200160608152602001613d47604051806020016040528060006001600160a01b031681525090565b8152602001613d69604051806040016040528060608152602001600081525090565b8152602001613d9260405180606001604052806060815260200160608152602001606081525090565b905290565b828054828255906000526020600020908101928215613dec579160200282015b82811115613dec57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613db7565b50613df8929150613e89565b5090565b828054828255906000526020600020908101928215613e42579160200282015b82811115613e425782518290613e329082614cfe565b5091602001919060010190613e1c565b50613df8929150613e9e565b828054828255906000526020600020908101928215613dec579160200282015b82811115613dec578251825591602001919060010190613e6e565b5b80821115613df85760008155600101613e8a565b80821115613df8576000613eb28282613ebb565b50600101613e9e565b508054613ec790614c7c565b6000825580601f10613ed7575050565b601f016020900490600052602060002090810190612a139190613e89565b600060208284031215613f0757600080fd5b5035919050565b6000815180845260005b81811015613f3457602081850181015186830182015201613f18565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613f8d5781516001600160a01b031687529582019590820190600101613f68565b509495945050505050565b6000815160408452613fad6040850182613f54565b602093840151949093019390935250919050565b600081518084526020808501945080840160005b83811015613f8d57815187529582019590820190600101613fd5565b60008151606084526140066060850182613f54565b9050602080840151858303828701528281518085528385019150838160051b860101848401935060005b8281101561405e57601f1987830301845261404c828651613f0e565b94860194938601939150600101614030565b506040880151955088810360408a01526140788187613fc1565b9998505050505050505050565b600060018060a01b038089168352871515602084015260c060408401526140af60c0840188613f0e565b81875116606085015283810360808501526140ca8187613f98565b91505082810360a08401526140788185613ff1565b6020815260006120b96020830184613f0e565b8151815260208083015190820152604081016116e6565b6020815260018060a01b03825116602082015260208201516040820152604082015160608201526000606083015160808084015261414a60a0840182613f0e565b949350505050565b6020815260006120b96020830184613fc1565b6001600160a01b0381168114612a1357600080fd5b803561418581614165565b919050565b60006020828403121561419c57600080fd5b81356120b981614165565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156141df576141df6141a7565b60405290565b60405160c081016001600160401b03811182821017156141df576141df6141a7565b604051601f8201601f191681016001600160401b038111828210171561422f5761422f6141a7565b604052919050565b600082601f83011261424857600080fd5b81356001600160401b03811115614261576142616141a7565b614274601f8201601f1916602001614207565b81815284602083860101111561428957600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156142b957600080fd5b8235915060208301356001600160401b038111156142d657600080fd5b6142e285828601614237565b9150509250929050565b60008083601f8401126142fe57600080fd5b5081356001600160401b0381111561431557600080fd5b6020830191508360208260051b8501011115611dd857600080fd5b60008060006040848603121561434557600080fd5b833561435081614165565b925060208401356001600160401b0381111561436b57600080fd5b614377868287016142ec565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156143c55783516001600160a01b0316835292840192918401916001016143a0565b50909695505050505050565b8035801515811461418557600080fd5b6000806000806000608086880312156143f957600080fd5b853561440481614165565b94506020860135935060408601356001600160401b0381111561442657600080fd5b614432888289016142ec565b90945092506144459050606087016143d1565b90509295509295909350565b60006020828403121561446357600080fd5b81356001600160401b038082111561447a57600080fd5b908301906080828603121561448e57600080fd5b6040516080810181811083821117156144a9576144a96141a7565b60405282356144b781614165565b8082525060208301356020820152604083013560408201526060830135828111156144e157600080fd5b6144ed87828601614237565b60608301525095945050505050565b803560ff8116811461418557600080fd5b60008060008060008060a0878903121561452657600080fd5b86359550614536602088016144fc565b9450604087013593506060870135925060808701356001600160401b0381111561455f57600080fd5b61456b89828a016142ec565b979a9699509497509295939492505050565b6000604080835261459081840186613fc1565b83810360208581019190915285518083528682019282019060005b818110156145d8576145c883865180518252602090810151910152565b93830193918501916001016145ab565b509098975050505050505050565b600080600080606085870312156145fc57600080fd5b843561460781614165565b93506020850135925060408501356001600160401b0381111561462957600080fd5b614635878288016142ec565b95989497509550505050565b60008060006060848603121561465657600080fd5b83359250614666602085016144fc565b9150604084013590509250925092565b6000806040838503121561468957600080fd5b82359150602083013561469b81614165565b809150509250929050565b600080604083850312156146b957600080fd5b50508035926020909101359150565b60018060a01b03851681528360208201528260408201526080606082015260006146f56080830184613f0e565b9695505050505050565b600060c0828403121561471157600080fd5b50919050565b60006020828403121561472957600080fd5b81356001600160401b0381111561473f57600080fd5b61414a848285016146ff565b60006001600160401b03821115614764576147646141a7565b5060051b60200190565b600082601f83011261477f57600080fd5b8135602061479461478f8361474b565b614207565b82815260059290921b840181019181810190868411156147b357600080fd5b8286015b848110156147ce57803583529183019183016147b7565b509695505050505050565b6000602082840312156147eb57600080fd5b81356001600160401b0381111561480157600080fd5b61414a8482850161476e565b634e487b7160e01b600052602160045260246000fd5b60208101600583106148375761483761480d565b91905290565b60208152600060018060a01b03808451166020840152602084015115156040840152604084015160c0606085015261487860e0850182613f0e565b90508160608601515116608085015260808501519150601f19808583030160a08601526148a58284613f98565b925060a08601519150808584030160c086015250611da18282613ff1565b6000602082840312156148d557600080fd5b604051602081018181106001600160401b03821117156148f7576148f76141a7565b604052905080823561490881614165565b905292915050565b600082601f83011261492157600080fd5b8135602061493161478f8361474b565b82815260059290921b8401810191818101908684111561495057600080fd5b8286015b848110156147ce57803561496781614165565b8352918301918301614954565b60006040828403121561498657600080fd5b604051604081016001600160401b0382821081831117156149a9576149a96141a7565b8160405282935084359150808211156149c157600080fd5b506149ce85828601614910565b825250602083013560208201525092915050565b6000606082840312156149f457600080fd5b6149fc6141bd565b905081356001600160401b0380821115614a1557600080fd5b614a2185838601614910565b8352602091508184013581811115614a3857600080fd5b8401601f81018613614a4957600080fd5b8035614a5761478f8261474b565b81815260059190911b82018401908481019088831115614a7657600080fd5b8584015b83811015614aae57803586811115614a925760008081fd5b614aa08b8983890101614237565b845250918601918601614a7a565b508086880152505050506040840135915080821115614acc57600080fd5b50614ad98482850161476e565b60408301525092915050565b600060c08284031215614af757600080fd5b614aff6141e5565b9050614b0a8261417a565b8152614b18602083016143d1565b602082015260408201356001600160401b0380821115614b3757600080fd5b614b4385838601614237565b6040840152614b5585606086016148c3565b60608401526080840135915080821115614b6e57600080fd5b614b7a85838601614974565b608084015260a0840135915080821115614b9357600080fd5b50614ba0848285016149e2565b60a08301525092915050565b600060208284031215614bbe57600080fd5b81356001600160401b03811115614bd457600080fd5b61414a84828501614ae5565b60008060208385031215614bf357600080fd5b82356001600160401b03811115614c0957600080fd5b614c15858286016142ec565b90969095509350505050565b600080600060408486031215614c3657600080fd5b83356001600160401b0380821115614c4d57600080fd5b614c59878388016146ff565b94506020860135915080821115614c6f57600080fd5b50614377868287016142ec565b600181811c90821680614c9057607f821691505b60208210810361471157634e487b7160e01b600052602260045260246000fd5b601f82111561175657600081815260208120601f850160051c81016020861015614cd75750805b601f850160051c820191505b81811015614cf657828155600101614ce3565b505050505050565b81516001600160401b03811115614d1757614d176141a7565b614d2b81614d258454614c7c565b84614cb0565b602080601f831160018114614d605760008415614d485750858301515b600019600386901b1c1916600185901b178555614cf6565b600085815260208120601f198616915b82811015614d8f57888601518255948401946001909101908401614d70565b5085821015614dad5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808201808211156116e6576116e6614dbd565b634e487b7160e01b600052603260045260246000fd5b600060018201614e0e57614e0e614dbd565b5060010190565b818103818111156116e6576116e6614dbd565b60006116e63683614ae5565b60208101600383106148375761483761480d565b6020808252825482820181905260008481528281209092916040850190845b818110156143c557835483526001938401939285019201614e67565b600082614ea057634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176116e6576116e6614dbd565b8381526001600160a01b0383166020820152606060408201819052600090611da190830184613f0e565b634e487b7160e01b600052603160045260246000fdfea26469706673582212201f6d0ba9be18a1c8ef8ca061acd405f0f5312d8143b66d32390c2b8a258c8ec264736f6c63430008130033","sourceMap":"248:1066:34:-:0;;;448:864;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;724:35;;:50;;;;776:45;;;;;724:35;2151:32:40;;;;2193:9;:22;1001:20:39;:44;;;1070:16;:36;;;666:5:34;673:7;682:16;6197:4:35;:12;666:5:34;6197:4:35;:12;:::i;:::-;-1:-1:-1;6219:6:35;:16;6228:7;6219:6;:16;:::i;:::-;-1:-1:-1;6245:7:35;:20;;6255:10;-1:-1:-1;;;;;;6245:20:35;;;;;;;6290:35;;:48;;6275:12;:63;6362:47;;;;;6348:11;:61;6434:48;;;;;6419:12;:63;6524:65;;;;;6492:29;:97;6618:52;;;;6599:16;:71;6700:53;;;;6680:17;:73;6245:20;6785:55;;;6763:19;:77;6866:49;;;;6850:13;:65;6938:46;;;;6925:10;:59;7007:46;;;;;6994:10;:59;7089:40;;;;7063:23;:66;;;;-1:-1:-1;;;;;7063:66:35;;;;;;7164:39;;;;7139:22;:64;;;;;;;;;;;7236:37;;;7213:20;;:60;;:20;:60;:::i;:::-;-1:-1:-1;7318:7:35;;;;;;;;;;;-1:-1:-1;;;7318:7:35;;;;;;;;7403:35;;:48;;7465:47;;;;7526:48;;;;7289:295;;;;;;7318:7;7339:5;;7358:7;;7379:10;;7526:48;7289:295;:::i;:::-;;;;;;;;-1:-1:-1;;924:35:34;;:50:::3;;::::0;978:1:::3;924:55;::::0;-1:-1:-1;924:133:34;::::3;;;-1:-1:-1::0;999:35:34;;:53:::3;;::::0;1056:1:::3;999:58;924:133;907:234;;;1089:41;;-1:-1:-1::0;;;1089:41:34::3;;;;;;;;;;;907:234;1154:22:::0;;:77;::::3;;;-1:-1:-1::0;1180:35:34;;:46:::3;;::::0;:51;1154:77:::3;1150:156;;;1254:41;;-1:-1:-1::0;;;1254:41:34::3;;;;;;;;;;;1150:156;448:864:::0;;;;;248:1066;;14:127:44;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:252;218:2;212:9;260:3;248:16;;-1:-1:-1;;;;;279:34:44;;315:22;;;276:62;273:88;;;341:18;;:::i;:::-;377:2;370:22;146:252;:::o;403:250::-;470:2;464:9;512:6;500:19;;-1:-1:-1;;;;;534:34:44;;570:22;;;531:62;528:88;;;596:18;;:::i;658:250::-;743:1;753:113;767:6;764:1;761:13;753:113;;;843:11;;;837:18;824:11;;;817:39;789:2;782:10;753:113;;;-1:-1:-1;;900:1:44;882:16;;875:27;658:250::o;913:699::-;967:5;1020:3;1013:4;1005:6;1001:17;997:27;987:55;;1038:1;1035;1028:12;987:55;1061:13;;-1:-1:-1;;;;;1123:10:44;;;1120:36;;;1136:18;;:::i;:::-;1211:2;1205:9;1179:2;1265:13;;-1:-1:-1;;1261:22:44;;;1285:2;1257:31;1253:40;1241:53;;;1309:18;;;1329:22;;;1306:46;1303:72;;;1355:18;;:::i;:::-;1395:10;1391:2;1384:22;1430:2;1422:6;1415:18;1476:3;1469:4;1464:2;1456:6;1452:15;1448:26;1445:35;1442:55;;;1493:1;1490;1483:12;1442:55;1506:76;1579:2;1572:4;1564:6;1560:17;1553:4;1545:6;1541:17;1506:76;:::i;:::-;1600:6;913:699;-1:-1:-1;;;;;;913:699:44:o;1617:177::-;1696:13;;-1:-1:-1;;;;;1738:31:44;;1728:42;;1718:70;;1784:1;1781;1774:12;1718:70;1617:177;;;:::o;1799:2202::-;1959:6;1967;1975;1983;1991;2044:3;2032:9;2023:7;2019:23;2015:33;2012:53;;;2061:1;2058;2051:12;2012:53;2088:16;;-1:-1:-1;;;;;2153:14:44;;;2150:34;;;2180:1;2177;2170:12;2150:34;2203:61;2256:7;2247:6;2236:9;2232:22;2203:61;:::i;:::-;2193:71;;2310:2;2299:9;2295:18;2289:25;2273:41;;2339:2;2329:8;2326:16;2323:36;;;2355:1;2352;2345:12;2323:36;2378:63;2433:7;2422:8;2411:9;2407:24;2378:63;:::i;:::-;2368:73;;2481:2;2470:9;2466:18;2460:25;2450:35;;2525:2;2514:9;2510:18;2504:25;2494:35;;2575:3;2564:9;2560:19;2554:26;2538:42;;2605:2;2595:8;2592:16;2589:36;;;2621:1;2618;2611:12;2589:36;2644:24;;;;2687:16;;;2723:6;2715:15;;2712:35;;;2743:1;2740;2733:12;2712:35;2769:22;;:::i;:::-;2810:6;2836:2;2832;2828:11;2825:31;;;2852:1;2849;2842:12;2825:31;2880:17;;:::i;:::-;2865:32;;2928:2;2922:9;2913:7;2906:26;2980:2;2976;2972:11;2966:18;2961:2;2952:7;2948:16;2941:44;3033:2;3029;3025:11;3019:18;3014:2;3005:7;3001:16;2994:44;3086:2;3082;3078:11;3072:18;3067:2;3058:7;3054:16;3047:44;3140:3;3136:2;3132:12;3126:19;3120:3;3111:7;3107:17;3100:46;3195:3;3191:2;3187:12;3181:19;3175:3;3166:7;3162:17;3155:46;3250:3;3246:2;3242:12;3236:19;3230:3;3221:7;3217:17;3210:46;3305:3;3301:2;3297:12;3291:19;3285:3;3276:7;3272:17;3265:46;3330:3;3381:2;3377;3373:11;3367:18;3362:2;3353:7;3349:16;3342:44;;3405:3;3456:2;3452;3448:11;3442:18;3437:2;3428:7;3424:16;3417:44;;3480:3;3531:2;3527;3523:11;3517:18;3512:2;3503:7;3499:16;3492:44;;3555:3;3606:2;3602;3598:11;3592:18;3587:2;3578:7;3574:16;3567:44;;3634:7;3627:5;3620:22;3674:42;3712:2;3708;3704:11;3674:42;:::i;:::-;3669:2;3662:5;3658:14;3651:66;;3749:43;3787:3;3783:2;3779:12;3749:43;:::i;:::-;3744:2;3737:5;3733:14;3726:67;3832:3;3828:2;3824:12;3818:19;3802:35;;3862:2;3852:8;3849:16;3846:36;;;3878:1;3875;3868:12;3846:36;3914:56;3962:7;3951:8;3947:2;3943:17;3914:56;:::i;:::-;3909:2;3902:5;3898:14;3891:80;3990:5;3980:15;;;;;;1799:2202;;;;;;;;:::o;4006:380::-;4085:1;4081:12;;;;4128;;;4149:61;;4203:4;4195:6;4191:17;4181:27;;4149:61;4256:2;4248:6;4245:14;4225:18;4222:38;4219:161;;4302:10;4297:3;4293:20;4290:1;4283:31;4337:4;4334:1;4327:15;4365:4;4362:1;4355:15;4219:161;;4006:380;;;:::o;4517:545::-;4619:2;4614:3;4611:11;4608:448;;;4655:1;4680:5;4676:2;4669:17;4725:4;4721:2;4711:19;4795:2;4783:10;4779:19;4776:1;4772:27;4766:4;4762:38;4831:4;4819:10;4816:20;4813:47;;;-1:-1:-1;4854:4:44;4813:47;4909:2;4904:3;4900:12;4897:1;4893:20;4887:4;4883:31;4873:41;;4964:82;4982:2;4975:5;4972:13;4964:82;;;5027:17;;;5008:1;4997:13;4964:82;;;4968:3;;;4608:448;4517:545;;;:::o;5238:1352::-;5358:10;;-1:-1:-1;;;;;5380:30:44;;5377:56;;;5413:18;;:::i;:::-;5442:97;5532:6;5492:38;5524:4;5518:11;5492:38;:::i;:::-;5486:4;5442:97;:::i;:::-;5594:4;;5658:2;5647:14;;5675:1;5670:663;;;;6377:1;6394:6;6391:89;;;-1:-1:-1;6446:19:44;;;6440:26;6391:89;-1:-1:-1;;5195:1:44;5191:11;;;5187:24;5183:29;5173:40;5219:1;5215:11;;;5170:57;6493:81;;5640:944;;5670:663;4464:1;4457:14;;;4501:4;4488:18;;-1:-1:-1;;5706:20:44;;;5824:236;5838:7;5835:1;5832:14;5824:236;;;5927:19;;;5921:26;5906:42;;6019:27;;;;5987:1;5975:14;;;;5854:19;;5824:236;;;5828:3;6088:6;6079:7;6076:19;6073:201;;;6149:19;;;6143:26;-1:-1:-1;;6232:1:44;6228:14;;;6244:3;6224:24;6220:37;6216:42;6201:58;6186:74;;6073:201;-1:-1:-1;;;;;6320:1:44;6304:14;;;6300:22;6287:36;;-1:-1:-1;5238:1352:44:o;6595:271::-;6637:3;6675:5;6669:12;6702:6;6697:3;6690:19;6718:76;6787:6;6780:4;6775:3;6771:14;6764:4;6757:5;6753:16;6718:76;:::i;:::-;6848:2;6827:15;-1:-1:-1;;6823:29:44;6814:39;;;;6855:4;6810:50;;6595:271;-1:-1:-1;;6595:271:44:o;6871:861::-;7228:3;7217:9;7210:22;7191:4;7255:46;7296:3;7285:9;7281:19;7273:6;7255:46;:::i;:::-;7349:9;7341:6;7337:22;7332:2;7321:9;7317:18;7310:50;7383:33;7409:6;7401;7383:33;:::i;:::-;7369:47;;7464:9;7456:6;7452:22;7447:2;7436:9;7432:18;7425:50;7492:33;7518:6;7510;7492:33;:::i;:::-;-1:-1:-1;;;;;7561:32:44;;;;7556:2;7541:18;;7534:60;-1:-1:-1;;7625:3:44;7610:19;;7603:35;;;;7581:3;7654:19;;7647:35;;;;7713:3;7698:19;;;7691:35;7484:41;6871:861;-1:-1:-1;;;6871:861:44:o;:::-;248:1066:34;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106104d55760003560e01c8063711effc811610281578063c19d93fb1161015a578063e11db9d8116100cc578063f4f3d7ec11610085578063f4f3d7ec14610f5c578063f5c3641114610f7c578063f61736f414610f9c578063f79c017214610fbc578063f823f11014610fec578063fb9bf8d414610fff57600080fd5b8063e11db9d814610ebf578063ea8a1af014610ed4578063edcd1be414610ee9578063eef18e1714610eff578063efa90d3614610f27578063f0a7db0a14610f3c57600080fd5b8063d140d9f01161011e578063d140d9f014610e07578063d798902514610e27578063daf762db14610e47578063dd96a19d14610e67578063dea5f6a614610e7d578063e031535b14610eaa57600080fd5b8063c19d93fb14610d53578063c7f758a814610d75578063c9a1b6b214610da2578063cb85395014610dc2578063cbdc27cb14610df257600080fd5b80639ba197af116101f3578063aec116b6116101b7578063aec116b614610c92578063b323580d14610cc8578063b382543f14610ce8578063b66d1da314610cfd578063bddc164114610d1d578063c05f410414610d3357600080fd5b80639ba197af14610bd5578063a1ac6cb214610c02578063ab5e694714610c2f578063ac67f80114610c42578063ae66b8ad14610c6257600080fd5b8063832009af11610245578063832009af14610b0a5780638ebb4c1514610b205780639174778c14610b50578063930de97914610b70578063946369b514610ba05780639b644a2314610bb557600080fd5b8063711effc814610a7257806375e509c514610a92578063785ddfe514610abf5780637c65d71114610adf5780637de418d514610af457600080fd5b80633932abb1116103b3578063544c7bb41161032557806360506ff6116102e957806360506ff6146109e957806360ed97a9146109ff57806365f1626314610a145780636e4eb81014610a275780636ed815ad14610a475780636fd3636b14610a5d57600080fd5b8063544c7bb41461091d578063544ffc9c1461093d57806354fd4d50146109875780635c7107d8146109b45780635cb718a1146109d457600080fd5b80634a587ad4116103775780634a587ad41461086f5780634d24a67f1461088f57806350a5e524146108a457806350c4b616146108c757806351a41dec146108e7578063531bd812146108fd57600080fd5b80633932abb1146107ec5780633f9942ff146108025780633fb57c921461081c578063409fd0301461083c578063419c533c1461085c57600080fd5b8063102613d81161044c578063262e59e911610410578063262e59e9146107335780632c39805f14610748578063325cc6d91461076a57806332763c221461078a578063347cf665146107ba578063366ecf5b146107d657600080fd5b8063102613d81461068f5780631242b737146106af578063146230f6146106d15780631805c523146106f357806320b3e8451461071357600080fd5b80630414126a1161049e5780630414126a1461059957806305846cae146105af57806306fdde03146105cf578063070dc5d9146105f15780630800e300146106425780630aa25e441461066f57600080fd5b80624114a8146104da578063013cf08b1461050357806302a251a31461053557806302d05d3f1461054b57806303f7eed614610583575b600080fd5b3480156104e657600080fd5b506104f060085481565b6040519081526020015b60405180910390f35b34801561050f57600080fd5b5061052361051e366004613ef5565b611015565b6040516104fa96959493929190614085565b34801561054157600080fd5b506104f0600a5481565b34801561055757600080fd5b5060075461056b906001600160a01b031681565b6040516001600160a01b0390911681526020016104fa565b34801561058f57600080fd5b506104f060115481565b3480156105a557600080fd5b506104f060015481565b3480156105bb57600080fd5b506104f06105ca366004613ef5565b611300565b3480156105db57600080fd5b506105e4611321565b6040516104fa91906140df565b3480156105fd57600080fd5b5061063561060c366004613ef5565b602260209081526000918252604091829020825180840190935280548352600101549082015281565b6040516104fa91906140f2565b34801561064e57600080fd5b5061066261065d366004613ef5565b6113af565b6040516104fa9190614109565b34801561067b57600080fd5b5061056b61068a366004613ef5565b6114c3565b34801561069b57600080fd5b5060135461056b906001600160a01b031681565b3480156106bb57600080fd5b506106c46114ed565b6040516104fa9190614152565b3480156106dd57600080fd5b506106f16106ec36600461418a565b611545565b005b3480156106ff57600080fd5b506104f061070e3660046142a6565b6115cb565b34801561071f57600080fd5b506106f161072e366004614330565b6116ec565b34801561073f57600080fd5b506104f061175b565b34801561075457600080fd5b5061075d611777565b6040516104fa9190614384565b34801561077657600080fd5b506104f0610785366004613ef5565b6117d8565b34801561079657600080fd5b506107aa6107a53660046143e1565b6117e8565b60405190151581526020016104fa565b3480156107c657600080fd5b506104f0678ac7230489e8000081565b3480156107e257600080fd5b506104f060005481565b3480156107f857600080fd5b506104f060095481565b34801561080e57600080fd5b506018546107aa9060ff1681565b34801561082857600080fd5b506104f0610837366004613ef5565b6118e7565b34801561084857600080fd5b506104f0610857366004614451565b6118f7565b6104f061086a36600461450d565b611928565b34801561087b57600080fd5b5060125461056b906001600160a01b031681565b34801561089b57600080fd5b506104f0611996565b3480156108b057600080fd5b506108b96119a5565b6040516104fa92919061457d565b3480156108d357600080fd5b5061056b6108e2366004613ef5565b611aab565b3480156108f357600080fd5b506104f060105481565b34801561090957600080fd5b506106f16109183660046145e6565b611abb565b34801561092957600080fd5b506106f1610938366004613ef5565b611b30565b34801561094957600080fd5b50610972610958366004613ef5565b600090815260226020526040902080546001909101549091565b604080519283526020830191909152016104fa565b34801561099357600080fd5b50604080518082019091526004815263342e333160e01b60208201526105e4565b3480156109c057600080fd5b506104f06109cf366004613ef5565b611ba2565b3480156109e057600080fd5b506106c4611ca9565b3480156109f557600080fd5b506104f0600d5481565b348015610a0b57600080fd5b506105e4611cff565b6104f0610a22366004614641565b611d0c565b348015610a3357600080fd5b50610972610a42366004614676565b611daa565b348015610a5357600080fd5b506104f0600f5481565b348015610a6957600080fd5b506106c4611ddf565b348015610a7e57600080fd5b506104f0610a8d3660046146a6565b611e35565b348015610a9e57600080fd5b506104f0610aad36600461418a565b601a6020526000908152604090205481565b348015610acb57600080fd5b5060245461056b906001600160a01b031681565b348015610aeb57600080fd5b506105e4611e66565b348015610b0057600080fd5b506104f060205481565b348015610b1657600080fd5b506104f0600b5481565b348015610b2c57600080fd5b50610b40610b3b366004613ef5565b611e73565b6040516104fa94939291906146c8565b348015610b5c57600080fd5b506107aa610b6b366004613ef5565b611f30565b348015610b7c57600080fd5b506107aa610b8b36600461418a565b601e6020526000908152604090205460ff1681565b348015610bac57600080fd5b5061075d611fd6565b348015610bc157600080fd5b506104f0610bd0366004613ef5565b612036565b348015610be157600080fd5b506104f0610bf0366004613ef5565b60009081526023602052604090205490565b348015610c0e57600080fd5b506104f0610c1d36600461418a565b60216020526000908152604090205481565b6104f0610c3d366004614717565b612046565b348015610c4e57600080fd5b506106f1610c5d3660046147d9565b6120c0565b348015610c6e57600080fd5b506107aa610c7d366004613ef5565b60296020526000908152604090205460ff1681565b348015610c9e57600080fd5b506104f0610cad36600461418a565b6001600160a01b031660009081526021602052604090205490565b348015610cd457600080fd5b5061075d610ce3366004613ef5565b6121fa565b348015610cf457600080fd5b506104f0600a81565b348015610d0957600080fd5b506104f0610d18366004613ef5565b61226c565b348015610d2957600080fd5b506104f060035481565b348015610d3f57600080fd5b506106c4610d4e366004613ef5565b6122cc565b348015610d5f57600080fd5b50610d6861232e565b6040516104fa9190614823565b348015610d8157600080fd5b50610d95610d90366004613ef5565b61237f565b6040516104fa919061483d565b348015610dae57600080fd5b506106c4610dbd366004613ef5565b61269f565b348015610dce57600080fd5b506107aa610ddd36600461418a565b601f6020526000908152604090205460ff1681565b348015610dfe57600080fd5b5061075d6126ff565b348015610e1357600080fd5b506106f1610e22366004614bac565b61282f565b348015610e3357600080fd5b506104f0610e42366004614bac565b612a16565b348015610e5357600080fd5b506106f1610e62366004613ef5565b612a29565b348015610e7357600080fd5b506104f060045481565b348015610e8957600080fd5b506104f0610e9836600461418a565b601d6020526000908152604090205481565b348015610eb657600080fd5b506104f0612a9b565b348015610ecb57600080fd5b506106c4612aad565b348015610ee057600080fd5b506106f1612b03565b348015610ef557600080fd5b506104f0600e5481565b348015610f0b57600080fd5b5061056b73dc652c746a8f85e18ce632d97c6118e8a52fa73881565b348015610f3357600080fd5b506106c4612bc7565b348015610f4857600080fd5b506106f1610f57366004614be0565b612c1d565b348015610f6857600080fd5b506106f1610f7736600461418a565b612d78565b348015610f8857600080fd5b506104f0610f97366004613ef5565b612dfd565b348015610fa857600080fd5b506104f0610fb73660046146a6565b612e0d565b348015610fc857600080fd5b506107aa610fd7366004613ef5565b60176020526000908152604090205460ff1681565b6104f0610ffa366004614c21565b612e29565b34801561100b57600080fd5b506104f0600c5481565b601960205260009081526040902080546001820180546001600160a01b03831693600160a01b90930460ff1692919061104d90614c7c565b80601f016020809104026020016040519081016040528092919081815260200182805461107990614c7c565b80156110c65780601f1061109b576101008083540402835291602001916110c6565b820191906000526020600020905b8154815290600101906020018083116110a957829003601f168201915b5050604080516020808201835260028801546001600160a01b03168252825160038901805460609381028301840186529482018581529899939893975090955093508492849184018282801561114557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611127575b505050505081526020016001820154815250509080600501604051806060016040529081600082018054806020026020016040519081016040528092919081815260200182805480156111c157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111a3575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101561129b57838290600052602060002001805461120e90614c7c565b80601f016020809104026020016040519081016040528092919081815260200182805461123a90614c7c565b80156112875780601f1061125c57610100808354040283529160200191611287565b820191906000526020600020905b81548152906001019060200180831161126a57829003601f168201915b5050505050815260200190600101906111ef565b505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156112f257602002820191906000526020600020905b8154815260200190600101908083116112de575b505050505081525050905086565b6016818154811061131057600080fd5b600091825260209091200154905081565b6005805461132e90614c7c565b80601f016020809104026020016040519081016040528092919081815260200182805461135a90614c7c565b80156113a75780601f1061137c576101008083540402835291602001916113a7565b820191906000526020600020905b81548152906001019060200180831161138a57829003601f168201915b505050505081565b6113e3604051806080016040528060006001600160a01b031681526020016000815260200160008152602001606081525090565b600082815260276020908152604091829020825160808101845281546001600160a01b0316815260018201549281019290925260028101549282019290925260038201805491929160608401919061143a90614c7c565b80601f016020809104026020016040519081016040528092919081815260200182805461146690614c7c565b80156114b35780601f10611488576101008083540402835291602001916114b3565b820191906000526020600020905b81548152906001019060200180831161149657829003601f168201915b5050505050815250509050919050565b601b81815481106114d357600080fd5b6000918252602090912001546001600160a01b0316905081565b6060601680548060200260200160405190810160405280929190818152602001828054801561153b57602002820191906000526020600020905b815481526020019060010190808311611527575b5050505050905090565b6007546001600160a01b031633146115705760405163141dbb4960e21b815260040160405180910390fd5b600461157a61232e565b600481111561158b5761158b61480d565b036115a95760405163ac61508760e01b815260040160405180910390fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6040805160808101825233815242602082015290810183905260608101829052600090816115f8826118f7565b6025805460018082019092557f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c01829055600082815260276020908152604091829020865181546001600160a01b0319166001600160a01b03909116178155908601519281019290925584015160028201556060840151919250839160038201906116839082614cfe565b505050600085815260286020908152604080832080546001810182559084529190922001829055517f5a1a930fed43f34b3a07db782ebcac28a661c273e662bb98458cfba5a8ccd220906116da9083815260200190565b60405180910390a19150505b92915050565b6001600160a01b0383166000908152601f602052604090205460ff166117565760035460000361171b57505050565b61173183678ac7230489e80000848460006117e8565b506001600160a01b0383166000908152601f60205260409020805460ff191660011790555b505050565b6000600a54611768612a9b565b6117729190614dd3565b905090565b6060601c80548060200260200160405190810160405280929190818152602001828054801561153b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117b1575050505050905090565b6002818154811061131057600080fd5b6040516bffffffffffffffffffffffff19606087901b16602082015260348101859052600090819060540160405160208183030381529060405280519060200120905060008361187857611873868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506003549150859050612e69565b6118b9565b6118b9868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506004549150859050612e69565b9050806118d95760405163452c2df160e11b815260040160405180910390fd5b506001979650505050505050565b6026818154811061131057600080fd5b60008160405160200161190a9190614109565b60408051601f19818403018152919052805160209091012092915050565b600080611936600186612e7f565b60008981526017602052604090205490915060ff1615611969576040516358f1119560e01b815260040160405180910390fd5b61197533878686611abb565b61197e81612f4b565b61198a88338988613052565b98975050505050505050565b6119a260026001614dd3565b81565b60608060006119b2612bc7565b9050600081516001600160401b038111156119cf576119cf6141a7565b604051908082528060200260200182016040528015611a1457816020015b60408051808201909152600080825260208201528152602001906001900390816119ed5790505b50905060005b8251811015611aa15760226000848381518110611a3957611a39614de6565b6020026020010151815260200190815260200160002060000160405180604001604052908160008201548152602001600182015481525050828281518110611a8357611a83614de6565b60200260200101819052508080611a9990614dfc565b915050611a1a565b5090939092509050565b601c81815481106114d357600080fd5b60045415801590611ae557506001600160a01b0384166000908152601e602052604090205460ff16155b15611b2a57611af88484848460016117e8565b506001600160a01b0384166000908152601d60209081526040808320869055601e9091529020805460ff191660011790555b50505050565b3373dc652c746a8f85e18ce632d97c6118e8a52fa73814611b645760405163de07280160e01b815260040160405180910390fd5b6004611b6e61232e565b6004811115611b7f57611b7f61480d565b03611b9d5760405163ac61508760e01b815260040160405180910390fd5b600455565b600081600003611bc557604051630ec90a1760e31b815260040160405180910390fd5b60028054604080516020808402820181019092528281529192600092918490830182828015611c1357602002820191906000526020600020905b815481526020019060010190808311611bff575b5050505050905060006001905060005b83811015611c8f57611c5a838281518110611c4057611c40614de6565b602002602001015160009081526023602052604090205490565b15611c7d57858203611c6f5795945050505050565b81611c7981614dfc565b9250505b80611c8781614dfc565b915050611c23565b50604051632cc2ab7360e11b815260040160405180910390fd5b6060602680548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6014805461132e90614c7c565b600080611d1a600184612e7f565b60008681526017602052604090205490915060ff1615611d4d576040516358f1119560e01b815260040160405180910390fd5b60045415801590611d6e5750336000908152601e602052604090205460ff16155b15611d8c5760405163126ec6d160e31b815260040160405180910390fd5b611d9581612f4b565b611da185338686613052565b95945050505050565b60008281526022602090815260408083206001600160a01b0385168452600301909152902080546001909101545b9250929050565b6060600280548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b60236020528160005260406000208181548110611e5157600080fd5b90600052602060002001600091509150505481565b6006805461132e90614c7c565b60276020526000908152604090208054600182015460028301546003840180546001600160a01b03909416949293919291611ead90614c7c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed990614c7c565b8015611f265780601f10611efb57610100808354040283529160200191611f26565b820191906000526020600020905b815481529060010190602001808311611f0957829003601f168201915b5050505050905084565b600254600090611f4290600190614e15565b821115611f62576040516365d6f35160e11b815260040160405180910390fd5b60005b611f70836001614dd3565b811015611fcd576001611fac60028381548110611f8f57611f8f614de6565b906000526020600020015460009081526023602052604090205490565b1115611fbb5750600192915050565b80611fc581614dfc565b915050611f65565b50600092915050565b6060601b80548060200260200160405190810160405280929190818152602001828054801561153b576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116117b1575050505050905090565b6015818154811061131057600080fd5b600080612054600080612e7f565b6003549091501561208f57336000908152601f602052604090205460ff1661208f57604051631f22097560e01b815260040160405180910390fd5b61209b610e2284614e28565b60006120ae6120a985614e28565b613199565b90506120b982612f4b565b9392505050565b805160005b818110156121be5760008382815181106120e1576120e1614de6565b60209081029190910101516007549091506001600160a01b0316331480159061212157506000818152602760205260409020546001600160a01b03163314155b1561214757604051635450763d60e11b8152600481018290526024015b60405180910390fd5b60008181526029602052604090205460ff166121ab576000818152602960205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594018190555b50806121b681614dfc565b9150506120c5565b507f788a4349d25bc08585923ae212bce8bb346a623bce753eeecb85fd9ce58dcb4b826040516121ee9190614152565b60405180910390a15050565b600081815260226020908152604091829020600281018054845181850281018501909552808552606094929383018282801561225f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612241575b5050505050915050919050565b60008181526023602052604081205460011461229b57604051633832a15560e21b815260040160405180910390fd5b600082815260236020526040812080549091906122ba576122ba614de6565b90600052602060002001549050919050565b60008181526028602090815260409182902080548351818402810184019094528084526060939283018282801561232257602002820191906000526020600020905b81548152602001906001019080831161230e575b50505050509050919050565b60185460009060ff16156123425750600290565b42600854106123515750600090565b4261235a612a9b565b106123655750600390565b4261236e61175b565b106123795750600190565b50600490565b612387613cfd565b600082815260196020908152604091829020825160c08101845281546001600160a01b0381168252600160a01b900460ff1615159281019290925260018101805492939192918401916123d990614c7c565b80601f016020809104026020016040519081016040528092919081815260200182805461240590614c7c565b80156124525780601f1061242757610100808354040283529160200191612452565b820191906000526020600020905b81548152906001019060200180831161243557829003601f168201915b5050509183525050604080516020818101835260028501546001600160a01b031682528084019190915281516003850180546060938102830184018552828501818152949095019491939092849284918401828280156124db57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124bd575b505050505081526020016001820154815250508152602001600582016040518060600160405290816000820180548060200260200160405190810160405280929190818152602001828054801561255b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161253d575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b828210156126355783829060005260206000200180546125a890614c7c565b80601f01602080910402602001604051908101604052809291908181526020018280546125d490614c7c565b80156126215780601f106125f657610100808354040283529160200191612621565b820191906000526020600020905b81548152906001019060200180831161260457829003601f168201915b505050505081526020019060010190612589565b5050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561268c57602002820191906000526020600020905b815481526020019060010190808311612678575b5050509190925250505090525092915050565b600081815260236020908152604091829020805483518184028101840190945280845260609392830182828015612322576020028201919060005260206000209081548152602001906001019080831161230e5750505050509050919050565b60606000601680548060200260200160405190810160405280929190818152602001828054801561274f57602002820191906000526020600020905b81548152602001906001019080831161273b575b50505050509050600081516001600160401b03811115612771576127716141a7565b60405190808252806020026020018201604052801561279a578160200160208202803683370190505b50905060005b825181101561282857601960008483815181106127bf576127bf614de6565b6020026020010151815260200190815260200160002060000160009054906101000a90046001600160a01b03168282815181106127fe576127fe614de6565b6001600160a01b03909216602092830291909101909101528061282081614dfc565b9150506127a0565b5092915050565b80516001600160a01b0316331461286d57805160405163fbbf4d7f60e01b81526001600160a01b03909116600482015233602482015260440161213e565b60005b61287c60026001614dd3565b8110156129ec5760008160028111156128975761289761480d565b905060008160028111156128ad576128ad61480d565b036128b857506129da565b60018160028111156128cc576128cc61480d565b0361292657608083015151516000036128f85760405163c3b2798b60e01b815260040160405180910390fd5b826080015160200151600003612921576040516392fb9a3560e01b815260040160405180910390fd5b6129d8565b600281600281111561293a5761293a61480d565b036129bd5760a08301515151600a101561296757604051631e38b1b160e11b815260040160405180910390fd5b600a8360a00151602001515111156129925760405163a3b7dd7760e01b815260040160405180910390fd5b600a8360a00151604001515111156129215760405163f696406560e01b815260040160405180910390fd5b8060405163d2277d4960e01b815260040161213e9190614e34565b505b806129e481614dfc565b915050612870565b50806040015151600003612a135760405163e182473360e01b815260040160405180910390fd5b50565b60008160405160200161190a919061483d565b3373dc652c746a8f85e18ce632d97c6118e8a52fa73814612a5d5760405163de07280160e01b815260040160405180910390fd5b6004612a6761232e565b6004811115612a7857612a7861480d565b03612a965760405163ac61508760e01b815260040160405180910390fd5b600355565b60006009546008546117729190614dd3565b6060602580548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6007546001600160a01b03163314801590612b3257503373dc652c746a8f85e18ce632d97c6118e8a52fa73814155b15612b50576040516301dbf46f60e71b815260040160405180910390fd5b6000612b5a61232e565b90506002816004811115612b7057612b7061480d565b03612b8e57604051633c30acbf60e01b815260040160405180910390fd5b6018805460ff191660011790556040517f4cd963a081760a54f571abc0f1db4dde31b4a07d8d6da3e844b8c6f47eeaaa4290600090a150565b6060601580548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6007546001600160a01b03163314612c485760405163b8d4540960e01b815260040160405180910390fd5b6004612c5261232e565b6004811115612c6357612c6361480d565b03612c81576040516331da1c8b60e11b815260040160405180910390fd5b60005b81811015612d26576000838383818110612ca057612ca0614de6565b60209081029290920135600081815260179093526040909220549192505060ff16612d13576000818152601760205260408120805460ff191660019081179091556016805491820181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289018190555b5080612d1e81614dfc565b915050612c84565b50600d54158015612d3957506000546001145b15612d4857612d488282613470565b7f75a75cf5c561892f4cc5b26c1b8e933849b42238c96dd073d080d1ae96c5141660156040516121ee9190614e48565b6007546001600160a01b03163314612da357604051630f4cb1bd60e11b815260040160405180910390fd5b602480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f753a2cf8d360cff631674504210913e48247f8e56b3e6d2006c2103d4095999f91016121ee565b6025818154811061131057600080fd5b60286020528160005260406000208181548110611e5157600080fd5b600080612e37600080612e7f565b9050612e443385856116ec565b612e50610e2286614e28565b6000612e5e6120a987614e28565b9050611da182612f4b565b600082612e7685846134cd565b14949350505050565b60008080846001811115612e9557612e9561480d565b03612ea35750600f54612f22565b6001846001811115612eb757612eb761480d565b03612f1e57601154600103612f1557670de0b6b3a7640000831015612eef576040516346ddb8d160e01b815260040160405180910390fd5b612f01670de0b6b3a764000084614e83565b601054612f0e9190614ea5565b9050612f22565b50601054612f22565b5060005b8034146120b9576040516372c3eaa760e01b81523460048201526024810182905260440161213e565b8015612a135760006064600e546064612f649190614e15565b612f6e9034614ea5565b612f789190614e83565b90508015612fdd57601354612f96906001600160a01b03168261351a565b601354604080516001600160a01b039092168252602082018390527f9df63d1c00d2e332f573be591c0579caafb256b2c5a17abcc8ad471cccda1b81910160405180910390a15b6000612fe98234614e15565b9050801561175657601254613007906001600160a01b03168261351a565b600754604080516001600160a01b039092168252602082018390527f6dff55337c8458ae8c536a63869a48bc33541733422a796390c131d91f4238ed910160405180910390a1505050565b6000600161305e61232e565b600481111561306f5761306f61480d565b146130965761307c61232e565b60405163049cab4960e51b815260040161213e9190614823565b816000036130b75760405163502e1c2960e01b815260040160405180910390fd5b6130e985858585601d60008a6001600160a01b03166001600160a01b0316815260200190815260200160002054613633565b601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b031916331790556040805186815260ff851660208201529081018390526001600160a01b038516907f2c9deb38f462962eadbd85a9d3a4120503ee091f1582eaaa10aa8c6797651d299060600160405180910390a25050506001600160a01b03166000908152601d6020526040902054919050565b600060036131a561232e565b60048111156131b6576131b661480d565b146131dd576131c361232e565b604051632889531360e01b815260040161213e9190614823565b600b54336000908152601a60205260409020540361321457600b54604051632bd6d93960e21b815260040161213e91815260200190565b600c546016546015546132279190614e15565b0361324b57600c546040516302217f5360e51b815260040161213e91815260200190565b600061325683612a16565b600081815260196020526040902054909150600160a01b900460ff16156132935760405163baffc42360e01b81526004810182905260240161213e565b6015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750182905560008281526019602090815260409182902086518154928801511515600160a01b026001600160a81b03199093166001600160a01b03909116179190911781559085015185928201906133179082614cfe565b506060820151516002820180546001600160a01b0319166001600160a01b03909216919091179055608082015180518051600384019161335c91839160200190613d97565b5060209182015160019091015560a083015180518051919260058501926133869284920190613d97565b50602082810151805161339f9260018501920190613dfc565b50604082015180516133bb916002840191602090910190613e4e565b5050336000908152601a602052604081208054600195509093509091506133e3908490614dd3565b9091555050601b80546001810182556000919091527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319163390811790915560408085015190517f7585f467599d0f008985f231af99293be388626ac16ca59505c2f8f88969cd6392613462928592614ebc565b60405180910390a192915050565b60005b8181101561175657600083838381811061348f5761348f614de6565b60209081029290920135600081815260229093526040909220549192506134b8905082826138a8565b505080806134c590614dfc565b915050613473565b600081815b8451811015613512576134fe828683815181106134f1576134f1614de6565b60200260200101516139d9565b91508061350a81614dfc565b9150506134d2565b509392505050565b8047101561356a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161213e565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146135b7576040519150601f19603f3d011682016040523d82523d6000602084013e6135bc565b606091505b50509050806117565760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161213e565b60008581526022602052604090206004541580159061367357506001600160a01b0385166000908152602160205260409020546136709083614e15565b83115b156136915760405163660fa07360e11b815260040160405180910390fd5b6001600160a01b03851660009081526003820160205260408120541580156136d457506001600160a01b0386166000908152600383016020526040902060010154155b905060ff851661372c578154849083906000906136f2908490614dd3565b90915550506001600160a01b038616600090815260038301602052604081208054869290613721908490614dd3565b909155506137bd9050565b60001960ff8616016137a457600d5460011461375b57604051639755958f60e01b815260040160405180910390fd5b838260000160010160008282546137729190614dd3565b90915550506001600160a01b038616600090815260038301602052604081206001018054869290613721908490614dd3565b604051638eed55d160e01b815260040160405180910390fd5b80156137f457600282018054600181018255600091825260209091200180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b0386166000908152602160205260408120805486929061381c908490614dd3565b9250508190555083602060008282546138359190614dd3565b9091555050600d5415801561384c57506000546001145b1561389f578154600061385f8683614e15565b905080156138715761387189826138a8565b60008281526023602090815260408220805460018101825590835291200189905561389c8183613a08565b50505b50505050505050565b6000818152602360209081526040808320805482518185028101850190935280835291929091908301828280156138fe57602002820191906000526020600020905b8154815260200190600101908083116138ea575b5050505050905060005b8151811015611b2a578382828151811061392457613924614de6565b6020026020010151036139c75781600183516139409190614e15565b8151811061395057613950614de6565b602002602001015160236000858152602001908152602001600020828154811061397c5761397c614de6565b9060005260206000200181905550602360008481526020019081526020016000208054806139ac576139ac614ee6565b60019003818190600052602060002001600090559055611b2a565b806139d181614dfc565b915050613908565b60008183106139f55760008281526020849052604090206120b9565b60008381526020839052604090206120b9565b60028054604080516020808402820181019092528281529192600092918490830182828015613a5657602002820191906000526020600020905b815481526020019060010190808311613a42575b5050505050905081600003613a9d575050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015550565b80613aa9600184614e15565b81518110613ab957613ab9614de6565b6020026020010151831015613b0f576001548203613ad75750505050565b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015550565b611b2a848484846000805b83811015613b8457828181518110613b3457613b34614de6565b60200260200101518503613b49575050611b2a565b828181518110613b5b57613b5b614de6565b6020026020010151851115613b7257809150613b84565b80613b7c81614dfc565b915050613b1a565b5060008086118015613ba25750600086815260236020526040902054155b90506000818015613bcb575086848481518110613bc157613bc1614de6565b6020026020010151145b613cd457613bda600186614e15565b8314613c82576000613bed846001614dd3565b90505b85811015613c805784613c04600183614e15565b81518110613c1457613c14614de6565b602002602001015160028281548110613c2f57613c2f614de6565b600091825260209091200155828015613c60575087858281518110613c5657613c56614de6565b6020026020010151145b15613c6e5760019150613c80565b80613c7881614dfc565b915050613bf0565b505b80158015613c91575060015485105b15613cd457600284613ca4600188614e15565b81518110613cb457613cb4614de6565b602090810291909101810151825460018101845560009384529190922001555b8560028481548110613ce857613ce8614de6565b60009182526020909120015550505050505050565b6040518060c0016040528060006001600160a01b0316815260200160001515815260200160608152602001613d47604051806020016040528060006001600160a01b031681525090565b8152602001613d69604051806040016040528060608152602001600081525090565b8152602001613d9260405180606001604052806060815260200160608152602001606081525090565b905290565b828054828255906000526020600020908101928215613dec579160200282015b82811115613dec57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613db7565b50613df8929150613e89565b5090565b828054828255906000526020600020908101928215613e42579160200282015b82811115613e425782518290613e329082614cfe565b5091602001919060010190613e1c565b50613df8929150613e9e565b828054828255906000526020600020908101928215613dec579160200282015b82811115613dec578251825591602001919060010190613e6e565b5b80821115613df85760008155600101613e8a565b80821115613df8576000613eb28282613ebb565b50600101613e9e565b508054613ec790614c7c565b6000825580601f10613ed7575050565b601f016020900490600052602060002090810190612a139190613e89565b600060208284031215613f0757600080fd5b5035919050565b6000815180845260005b81811015613f3457602081850181015186830182015201613f18565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b83811015613f8d5781516001600160a01b031687529582019590820190600101613f68565b509495945050505050565b6000815160408452613fad6040850182613f54565b602093840151949093019390935250919050565b600081518084526020808501945080840160005b83811015613f8d57815187529582019590820190600101613fd5565b60008151606084526140066060850182613f54565b9050602080840151858303828701528281518085528385019150838160051b860101848401935060005b8281101561405e57601f1987830301845261404c828651613f0e565b94860194938601939150600101614030565b506040880151955088810360408a01526140788187613fc1565b9998505050505050505050565b600060018060a01b038089168352871515602084015260c060408401526140af60c0840188613f0e565b81875116606085015283810360808501526140ca8187613f98565b91505082810360a08401526140788185613ff1565b6020815260006120b96020830184613f0e565b8151815260208083015190820152604081016116e6565b6020815260018060a01b03825116602082015260208201516040820152604082015160608201526000606083015160808084015261414a60a0840182613f0e565b949350505050565b6020815260006120b96020830184613fc1565b6001600160a01b0381168114612a1357600080fd5b803561418581614165565b919050565b60006020828403121561419c57600080fd5b81356120b981614165565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156141df576141df6141a7565b60405290565b60405160c081016001600160401b03811182821017156141df576141df6141a7565b604051601f8201601f191681016001600160401b038111828210171561422f5761422f6141a7565b604052919050565b600082601f83011261424857600080fd5b81356001600160401b03811115614261576142616141a7565b614274601f8201601f1916602001614207565b81815284602083860101111561428957600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156142b957600080fd5b8235915060208301356001600160401b038111156142d657600080fd5b6142e285828601614237565b9150509250929050565b60008083601f8401126142fe57600080fd5b5081356001600160401b0381111561431557600080fd5b6020830191508360208260051b8501011115611dd857600080fd5b60008060006040848603121561434557600080fd5b833561435081614165565b925060208401356001600160401b0381111561436b57600080fd5b614377868287016142ec565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156143c55783516001600160a01b0316835292840192918401916001016143a0565b50909695505050505050565b8035801515811461418557600080fd5b6000806000806000608086880312156143f957600080fd5b853561440481614165565b94506020860135935060408601356001600160401b0381111561442657600080fd5b614432888289016142ec565b90945092506144459050606087016143d1565b90509295509295909350565b60006020828403121561446357600080fd5b81356001600160401b038082111561447a57600080fd5b908301906080828603121561448e57600080fd5b6040516080810181811083821117156144a9576144a96141a7565b60405282356144b781614165565b8082525060208301356020820152604083013560408201526060830135828111156144e157600080fd5b6144ed87828601614237565b60608301525095945050505050565b803560ff8116811461418557600080fd5b60008060008060008060a0878903121561452657600080fd5b86359550614536602088016144fc565b9450604087013593506060870135925060808701356001600160401b0381111561455f57600080fd5b61456b89828a016142ec565b979a9699509497509295939492505050565b6000604080835261459081840186613fc1565b83810360208581019190915285518083528682019282019060005b818110156145d8576145c883865180518252602090810151910152565b93830193918501916001016145ab565b509098975050505050505050565b600080600080606085870312156145fc57600080fd5b843561460781614165565b93506020850135925060408501356001600160401b0381111561462957600080fd5b614635878288016142ec565b95989497509550505050565b60008060006060848603121561465657600080fd5b83359250614666602085016144fc565b9150604084013590509250925092565b6000806040838503121561468957600080fd5b82359150602083013561469b81614165565b809150509250929050565b600080604083850312156146b957600080fd5b50508035926020909101359150565b60018060a01b03851681528360208201528260408201526080606082015260006146f56080830184613f0e565b9695505050505050565b600060c0828403121561471157600080fd5b50919050565b60006020828403121561472957600080fd5b81356001600160401b0381111561473f57600080fd5b61414a848285016146ff565b60006001600160401b03821115614764576147646141a7565b5060051b60200190565b600082601f83011261477f57600080fd5b8135602061479461478f8361474b565b614207565b82815260059290921b840181019181810190868411156147b357600080fd5b8286015b848110156147ce57803583529183019183016147b7565b509695505050505050565b6000602082840312156147eb57600080fd5b81356001600160401b0381111561480157600080fd5b61414a8482850161476e565b634e487b7160e01b600052602160045260246000fd5b60208101600583106148375761483761480d565b91905290565b60208152600060018060a01b03808451166020840152602084015115156040840152604084015160c0606085015261487860e0850182613f0e565b90508160608601515116608085015260808501519150601f19808583030160a08601526148a58284613f98565b925060a08601519150808584030160c086015250611da18282613ff1565b6000602082840312156148d557600080fd5b604051602081018181106001600160401b03821117156148f7576148f76141a7565b604052905080823561490881614165565b905292915050565b600082601f83011261492157600080fd5b8135602061493161478f8361474b565b82815260059290921b8401810191818101908684111561495057600080fd5b8286015b848110156147ce57803561496781614165565b8352918301918301614954565b60006040828403121561498657600080fd5b604051604081016001600160401b0382821081831117156149a9576149a96141a7565b8160405282935084359150808211156149c157600080fd5b506149ce85828601614910565b825250602083013560208201525092915050565b6000606082840312156149f457600080fd5b6149fc6141bd565b905081356001600160401b0380821115614a1557600080fd5b614a2185838601614910565b8352602091508184013581811115614a3857600080fd5b8401601f81018613614a4957600080fd5b8035614a5761478f8261474b565b81815260059190911b82018401908481019088831115614a7657600080fd5b8584015b83811015614aae57803586811115614a925760008081fd5b614aa08b8983890101614237565b845250918601918601614a7a565b508086880152505050506040840135915080821115614acc57600080fd5b50614ad98482850161476e565b60408301525092915050565b600060c08284031215614af757600080fd5b614aff6141e5565b9050614b0a8261417a565b8152614b18602083016143d1565b602082015260408201356001600160401b0380821115614b3757600080fd5b614b4385838601614237565b6040840152614b5585606086016148c3565b60608401526080840135915080821115614b6e57600080fd5b614b7a85838601614974565b608084015260a0840135915080821115614b9357600080fd5b50614ba0848285016149e2565b60a08301525092915050565b600060208284031215614bbe57600080fd5b81356001600160401b03811115614bd457600080fd5b61414a84828501614ae5565b60008060208385031215614bf357600080fd5b82356001600160401b03811115614c0957600080fd5b614c15858286016142ec565b90969095509350505050565b600080600060408486031215614c3657600080fd5b83356001600160401b0380821115614c4d57600080fd5b614c59878388016146ff565b94506020860135915080821115614c6f57600080fd5b50614377868287016142ec565b600181811c90821680614c9057607f821691505b60208210810361471157634e487b7160e01b600052602260045260246000fd5b601f82111561175657600081815260208120601f850160051c81016020861015614cd75750805b601f850160051c820191505b81811015614cf657828155600101614ce3565b505050505050565b81516001600160401b03811115614d1757614d176141a7565b614d2b81614d258454614c7c565b84614cb0565b602080601f831160018114614d605760008415614d485750858301515b600019600386901b1c1916600185901b178555614cf6565b600085815260208120601f198616915b82811015614d8f57888601518255948401946001909101908401614d70565b5085821015614dad5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808201808211156116e6576116e6614dbd565b634e487b7160e01b600052603260045260246000fd5b600060018201614e0e57614e0e614dbd565b5060010190565b818103818111156116e6576116e6614dbd565b60006116e63683614ae5565b60208101600383106148375761483761480d565b6020808252825482820181905260008481528281209092916040850190845b818110156143c557835483526001938401939285019201614e67565b600082614ea057634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176116e6576116e6614dbd565b8381526001600160a01b0383166020820152606060408201819052600090611da190830184613f0e565b634e487b7160e01b600052603160045260246000fdfea26469706673582212201f6d0ba9be18a1c8ef8ca061acd405f0f5312d8143b66d32390c2b8a258c8ec264736f6c63430008130033","sourceMap":"248:1066:34:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3234:27:35;;;;;;;;;;;;;;;;;;;160:25:44;;;148:2;133:18;3234:27:35;;;;;;;;4426:49;;;;;;;;;;-1:-1:-1;4426:49:35;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;3397:27::-;;;;;;;;;;;;;;;;3206:22;;;;;;;;;;-1:-1:-1;3206:22:35;;;;-1:-1:-1;;;;;3206:22:35;;;;;;-1:-1:-1;;;;;4252:32:44;;;4234:51;;4222:2;4207:18;3206:22:35;4088:203:44;3899:25:35;;;;;;;;;;;;;;;;1809:24:40;;;;;;;;;;;;;;;;4304:35:35;;;;;;;;;;-1:-1:-1;4304:35:35;;;;;:::i;:::-;;:::i;3128:18::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;891:60:36:-;;;;;;;;;;-1:-1:-1;891:60:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1546:123:37:-;;;;;;;;;;-1:-1:-1;1546:123:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4536:32:35:-;;;;;;;;;;-1:-1:-1;4536:32:35;;;;;:::i;:::-;;:::i;4095:37::-;;;;;;;;;;-1:-1:-1;4095:37:35;;;;-1:-1:-1;;;;;4095:37:35;;;8981:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21859:297::-;;;;;;;;;;-1:-1:-1;21859:297:35;;;;;:::i;:::-;;:::i;:::-;;2000:579:37;;;;;;;;;;-1:-1:-1;2000:579:37;;;;;:::i;:::-;;:::i;10929:469:35:-;;;;;;;;;;-1:-1:-1;10929:469:35;;;;;:::i;:::-;;:::i;9953:107::-;;;;;;;;;;;;;:::i;8792:125::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1977:28:40:-;;;;;;;;;;-1:-1:-1;1977:28:40;;;;;:::i;:::-;;:::i;1536:539:39:-;;;;;;;;;;-1:-1:-1;1536:539:39;;;;;:::i;:::-;;:::i;:::-;;;11247:14:44;;11240:22;11222:41;;11210:2;11195:18;1536:539:39;11082:187:44;2786:73:35;;;;;;;;;;;;2839:20;2786:73;;1738:29:40;;;;;;;;;;;;;;;;3317:26:35;;;;;;;;;;;;;;;;4400:20;;;;;;;;;;-1:-1:-1;4400:20:35;;;;;;;;612:34:37;;;;;;;;;;-1:-1:-1;612:34:37;;;;;:::i;:::-;;:::i;1001:148::-;;;;;;;;;;-1:-1:-1;1001:148:37;;;;;:::i;:::-;;:::i;19307:509:35:-;;;;;;:::i;:::-;;:::i;4007:38::-;;;;;;;;;;-1:-1:-1;4007:38:35;;;;-1:-1:-1;;;;;4007:38:35;;;2645:74;;;;;;;;;;;;;:::i;2866:580:36:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;4574:39:35:-;;;;;;;;;;-1:-1:-1;4574:39:35;;;;;:::i;:::-;;:::i;3868:25::-;;;;;;;;;;;;;;;;18845:395;;;;;;;;;;-1:-1:-1;18845:395:35;;;;;:::i;:::-;;:::i;21577:276::-;;;;;;;;;;-1:-1:-1;21577:276:35;;;;;:::i;:::-;;:::i;1361:294:36:-;;;;;;;;;;-1:-1:-1;1361:294:36;;;;;:::i;:::-;1425:16;1511:32;;;:20;:32;;;;;1561:40;;1603:44;;;;;1561:40;;1361:294;;;;;15076:25:44;;;15132:2;15117:18;;15110:34;;;;15049:18;1361:294:36;14902:248:44;7666:86:35;;;;;;;;;;-1:-1:-1;7738:7:35;;;;;;;;;;;;-1:-1:-1;;;7738:7:35;;;;7666:86;;4829:1027:36;;;;;;;;;;-1:-1:-1;4829:1027:36;;;;;:::i;:::-;;:::i;1372:115:37:-;;;;;;;;;;;;;:::i;3711:32:35:-;;;;;;;;;;;;;;;;4182:34;;;;;;;;;;;;;:::i;19918:535::-;;;;;;:::i;:::-;;:::i;1758:408:36:-;;;;;;;;;;-1:-1:-1;1758:408:36;;;;;:::i;:::-;;:::i;3834:28:35:-;;;;;;;;;;;;;;;;2490:117:40;;;;;;;;;;;;;:::i;958:58:36:-;;;;;;;;;;-1:-1:-1;958:58:36;;;;;:::i;:::-;;:::i;4481:49:35:-;;;;;;;;;;-1:-1:-1;4481:49:35;;;;;:::i;:::-;;;;;;;;;;;;;;376:42:38;;;;;;;;;;-1:-1:-1;376:42:38;;;;-1:-1:-1;;;;;376:42:38;;;3180:20:35;;;;;;;;;;;;;:::i;751:29:36:-;;;;;;;;;;;;;;;;3472:44:35;;;;;;;;;;;;;;;;652:47:37;;;;;;;;;;-1:-1:-1;652:47:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;5968:523:36:-;;;;;;;;;;-1:-1:-1;5968:523:36;;;;;:::i;:::-;;:::i;4678:57:35:-;;;;;;;;;;-1:-1:-1;4678:57:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;8609:111;;;;;;;;;;;;;:::i;4270:28::-;;;;;;;;;;-1:-1:-1;4270:28:35;;;;;:::i;:::-;;:::i;3874:170:36:-;;;;;;;;;;-1:-1:-1;3874:170:36;;;;;:::i;:::-;3967:13;3999:31;;;:21;:31;;;;;:38;;3874:170;824:61;;;;;;;;;;-1:-1:-1;824:61:36;;;;;:::i;:::-;;;;;;;;;;;;;;15403:602:35;;;;;;:::i;:::-;;:::i;2677:709:37:-;;;;;;;;;;-1:-1:-1;2677:709:37;;;;;:::i;:::-;;:::i;764:48::-;;;;;;;;;;-1:-1:-1;764:48:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;2602:171:36;;;;;;;;;;-1:-1:-1;2602:171:36;;;;;:::i;:::-;-1:-1:-1;;;;;2727:39:36;2682:26;2727:39;;;:26;:39;;;;;;;2602:171;2267:224;;;;;;;;;;-1:-1:-1;2267:224:36;;;;;:::i;:::-;;:::i;2725:55:35:-;;;;;;;;;;;;2778:2;2725:55;;4360:268:36;;;;;;;;;;-1:-1:-1;4360:268:36;;;;;:::i;:::-;;:::i;497:35:39:-;;;;;;;;;;;;;;;;1757:140:37;;;;;;;;;;-1:-1:-1;1757:140:37;;;;;:::i;:::-;;:::i;7910:477:35:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10118:128::-;;;;;;;;;;-1:-1:-1;10118:128:35;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3558:212:36:-;;;;;;;;;;-1:-1:-1;3558:212:36;;;;;:::i;:::-;;:::i;4741:56:35:-;;;;;;;;;;-1:-1:-1;4741:56:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;9173:437;;;;;;;;;;;;;:::i;11492:1474::-;;;;;;;;;;-1:-1:-1;11492:1474:35;;;;;:::i;:::-;;:::i;7758:146::-;;;;;;;;;;-1:-1:-1;7758:146:35;;;;;:::i;:::-;;:::i;21279:292::-;;;;;;;;;;-1:-1:-1;21279:292:35;;;;;:::i;:::-;;:::i;538:31:39:-;;;;;;;;;;;;;;;;4620:52:35;;;;;;;;;;-1:-1:-1;4620:52:35;;;;;:::i;:::-;;;;;;;;;;;;;;9771:101;;;;;;;;;;;;;:::i;1206::37:-;;;;;;;;;;;;;:::i;18404:323:35:-;;;;;;;;;;;;;:::i;3794:34::-;;;;;;;;;;;;;;;;2865:84;;;;;;;;;;;;2907:42;2865:84;;8443:103;;;;;;;;;;;;;:::i;17030:1262::-;;;;;;;;;;-1:-1:-1;17030:1262:35;;;;;:::i;:::-;;:::i;586:379:38:-;;;;;;;;;;-1:-1:-1;586:379:38;;;;;:::i;:::-;;:::i;579:27:37:-;;;;;;;;;;-1:-1:-1;579:27:37;;;;;:::i;:::-;;:::i;705:53::-;;;;;;;;;;-1:-1:-1;705:53:37;;;;;:::i;:::-;;:::i;4345:49:35:-;;;;;;;;;;-1:-1:-1;4345:49:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;14892:396;;;;;;:::i;:::-;;:::i;3622:31::-;;;;;;;;;;;;;;;;4426:49;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4426:49:35;;;-1:-1:-1;;;4426:49:35;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4426:49:35;;;;;;;;;;;;;-1:-1:-1;;;;;4426:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4426:49:35;;-1:-1:-1;4426:49:35;-1:-1:-1;4426:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4426:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4426:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4304:35::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4304:35:35;:::o;3128:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1546:123:37:-;1606:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1606:18:37;1643:19;;;;:8;:19;;;;;;;;;1636:26;;;;;;;;;-1:-1:-1;;;;;1636:26:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1643:19;1636:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1546:123;;;:::o;4536:32:35:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4536:32:35;;-1:-1:-1;4536:32:35;:::o;8981:117::-;9038:16;9073:18;9066:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8981:117;:::o;21859:297::-;21966:7;;-1:-1:-1;;;;;21966:7:35;21952:10;:21;21948:55;;21982:21;;-1:-1:-1;;;21982:21:35;;;;;;;;;;;21948:55;22028:22;22017:7;:5;:7::i;:::-;:33;;;;;;;;:::i;:::-;;22013:74;;22059:28;;-1:-1:-1;;;22059:28:35;;;;;;;;;;;22013:74;22097:23;:52;;-1:-1:-1;;;;;;22097:52:35;-1:-1:-1;;;;;22097:52:35;;;;;;;;;;21859:297::o;2000:579:37:-;2137:175;;;;;;;;2171:10;2137:175;;2206:15;2137:175;;;;;;;;;;;;;;;;2083:7;;;2342:26;2137:175;2342:11;:26::i;:::-;2379:10;:26;;;;;;;;;;;;;;-1:-1:-1;2415:19:37;;;:8;2379:26;2415:19;;;;;;;;:35;;;;-1:-1:-1;;;;;;2415:35:37;-1:-1:-1;;;;;2415:35:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;2379:26;;-1:-1:-1;2415:35:37;;;;;;;;;;:::i;:::-;-1:-1:-1;;;2460:28:37;;;;:16;:28;;;;;;;;:44;;;;;;;;;;;;;;;;;;2520:25;;;;;2494:9;160:25:44;;148:2;133:18;;14:177;2520:25:37;;;;;;;;2563:9;-1:-1:-1;;2000:579:37;;;;;:::o;10929:469:35:-;-1:-1:-1;;;;;11018:33:35;;;;;;:24;:33;;;;;;;;11013:379;;11071:20;;11095:1;11071:25;11067:141;;10929:469;;;:::o;11067:141::-;11221:61;11232:7;2839:20;11269:5;;11276;11221:10;:61::i;:::-;-1:-1:-1;;;;;;11341:33:35;;;;;;:24;:33;;;;;:40;;-1:-1:-1;;11341:40:35;11377:4;11341:40;;;11013:379;10929:469;;;:::o;9953:107::-;10001:7;10041:12;;10027:11;:9;:11::i;:::-;:26;;;;:::i;:::-;10020:33;;9953:107;:::o;8792:125::-;8853:16;8888:22;8881:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8881:29:35;;;;;;;;;;;;;;;;;;;;;;8792:125;:::o;1977:28:40:-;;;;;;;;;;;;1536:539:39;1791:40;;-1:-1:-1;;29316:2:44;29312:15;;;29308:53;1791:40:39;;;29296:66:44;29378:12;;;29371:28;;;1680:13:39;;;;29415:12:44;;1791:40:39;;;;;;;;;;;;1781:51;;;;;;1766:66;;1842:16;1861:6;:138;;1946:53;1965:5;;1946:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1972:20:39;;;-1:-1:-1;1994:4:39;;-1:-1:-1;1946:18:39;:53::i;:::-;1861:138;;;1882:49;1901:5;;1882:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1908:16:39;;;-1:-1:-1;1926:4:39;;-1:-1:-1;1882:18:39;:49::i;:::-;1842:157;;2014:11;2009:38;;2034:13;;-1:-1:-1;;;2034:13:39;;;;;;;;;;;2009:38;-1:-1:-1;2064:4:39;;1536:539;-1:-1:-1;;;;;;;1536:539:39:o;612:34:37:-;;;;;;;;;;;;1001:148;1074:7;1129:10;1118:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1118:22:37;;;;;;;;;1108:33;;1118:22;1108:33;;;;;1001:148;-1:-1:-1;;1001:148:37:o;19307:509:35:-;19472:7;19495:18;19516:51;19544:12;19558:8;19516:27;:51::i;:::-;19582:29;;;;:17;:29;;;;;;19495:72;;-1:-1:-1;19582:29:35;;19578:71;;;19620:29;;-1:-1:-1;;;19620:29:35;;;;;;;;;;;19578:71;19659:42;19671:10;19683;19695:5;;19659:11;:42::i;:::-;19712:27;19728:10;19712:15;:27::i;:::-;19757:52;19767:10;19779;19791:7;19800:8;19757:9;:52::i;:::-;19750:59;19307:509;-1:-1:-1;;;;;;;;19307:509:35:o;2645:74::-;2687:32;2695:19;2718:1;2687:32;:::i;:::-;2645:74;:::o;2866:580:36:-;2944:34;2980:49;3045:34;3082:19;:17;:19::i;:::-;3045:56;;3111:43;3174:17;:24;-1:-1:-1;;;;;3157:42:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;3157:42:36;;;;;;;;;;;;;;;;3111:88;;3214:9;3209:170;3233:17;:24;3229:1;:28;3209:170;;;3307:20;:42;3328:17;3346:1;3328:20;;;;;;;;:::i;:::-;;;;;;;3307:42;;;;;;;;;;;:61;;3278:90;;;;;;;;;;;;;;;;;;;;;;;;;:23;3302:1;3278:26;;;;;;;;:::i;:::-;;;;;;:90;;;;3259:3;;;;;:::i;:::-;;;;3209:170;;;-1:-1:-1;3396:17:36;;3415:23;;-1:-1:-1;2866:580:36;-1:-1:-1;2866:580:36:o;4574:39:35:-;;;;;;;;;;;;18845:395;18950:16;;:21;;;;:60;;-1:-1:-1;;;;;;18976:34:35;;;;;;:25;:34;;;;;;;;18975:35;18950:60;18946:288;;;19026:44;19037:7;19046:10;19058:5;;19065:4;19026:10;:44::i;:::-;-1:-1:-1;;;;;;19129:26:35;;;;;;:17;:26;;;;;;;;:39;;;19182:25;:34;;;;;:41;;-1:-1:-1;;19182:41:35;19219:4;19182:41;;;18946:288;18845:395;;;;:::o;21577:276::-;21656:10;2907:42;21656:29;21652:62;;21694:20;;-1:-1:-1;;;21694:20:35;;;;;;;;;;;21652:62;21739:22;21728:7;:5;:7::i;:::-;:33;;;;;;;;:::i;:::-;;21724:74;;21770:28;;-1:-1:-1;;;21770:28:35;;;;;;;;;;;21724:74;21808:16;:38;21577:276::o;4829:1027:36:-;4886:17;4919:4;4927:1;4919:9;4915:40;;4937:18;;-1:-1:-1;;;4937:18:36;;;;;;;;;;;4915:40;4994:11;:18;;5066:48;;;;;;;;;;;;;;;;;4994:18;;4966:25;;5066:48;4994:18;;5066:48;;4994:11;:18;5066:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5169:15;5187:1;5169:19;;5203:13;5198:536;5230:17;5222:5;:25;5198:536;;;5428:61;5464:17;5482:5;5464:24;;;;;;;;:::i;:::-;;;;;;;3967:13;3999:31;;;:21;:31;;;;;:38;;3874:170;5428:61;5424:113;5514:8;5424:113;5650:4;5639:7;:15;5635:66;;5681:5;4829:1027;-1:-1:-1;;;;;4829:1027:36:o;5635:66::-;5714:9;;;;:::i;:::-;;;;5198:536;5249:7;;;;:::i;:::-;;;;5198:536;;;;5825:24;;-1:-1:-1;;;5825:24:36;;;;;;;;;;;1372:115:37;1428:16;1463:17;1456:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1372:115;:::o;4182:34:35:-;;;;;;;:::i;19918:535::-;20049:7;20072:18;20093:51;20121:12;20135:8;20093:27;:51::i;:::-;20159:29;;;;:17;:29;;;;;;20072:72;;-1:-1:-1;20159:29:35;;20155:71;;;20197:29;;-1:-1:-1;;;20197:29:35;;;;;;;;;;;20155:71;20240:16;;:21;;;;:63;;-1:-1:-1;20292:10:35;20266:37;;;;:25;:37;;;;;;;;20265:38;20240:63;20236:102;;;20312:26;;-1:-1:-1;;;20312:26:35;;;;;;;;;;;20236:102;20349:27;20365:10;20349:15;:27::i;:::-;20394:52;20404:10;20416;20428:7;20437:8;20394:9;:52::i;:::-;20387:59;19918:535;-1:-1:-1;;;;;19918:535:35:o;1758:408:36:-;1874:16;1964:32;;;:20;:32;;;;;;;;-1:-1:-1;;;;;2027:43:36;;;;:30;;:43;;;;;:52;;2093:56;;;;;1758:408;;;;;;:::o;2490:117:40:-;2537:33;2589:11;2582:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2490:117;:::o;958:58:36:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3180:20:35:-;;;;;;;:::i;652:47:37:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;652:47:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5968:523:36:-;6075:11;:18;6031:22;;6075;;6096:1;;6075:22;:::i;:::-;6069:3;:28;6065:205;;;6233:26;;-1:-1:-1;;;6233:26:36;;;;;;;;;;;6065:205;6285:13;6280:183;6312:7;:3;6318:1;6312:7;:::i;:::-;6304:5;:15;6280:183;;;6406:1;6348:55;6384:11;6396:5;6384:18;;;;;;;;:::i;:::-;;;;;;;;;3967:13;3999:31;;;:21;:31;;;;;:38;;3874:170;6348:55;:59;6344:109;;;-1:-1:-1;6434:4:36;;5968:523;-1:-1:-1;;5968:523:36:o;6344:109::-;6321:7;;;;:::i;:::-;;;;6280:183;;;-1:-1:-1;6479:5:36;;5968:523;-1:-1:-1;;5968:523:36:o;8609:111:35:-;8663:16;8698:15;8691:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8691:22:35;;;;;;;;;;;;;;;;;;;;;;8609:111;:::o;4270:28::-;;;;;;;;;;;;15403:602;15488:7;15507:18;15528:46;15556:14;15572:1;15528:27;:46::i;:::-;15589:20;;15507:67;;-1:-1:-1;15589:25:35;15585:254;;15780:10;15755:36;;;;:24;:36;;;;;;;;15750:78;;15800:28;;-1:-1:-1;;;15800:28:35;;;;;;;;;;;15750:78;15848:30;;15869:8;15848:30;:::i;:::-;15888:18;15909:23;;15923:8;15909:23;:::i;:::-;:13;:23::i;:::-;15888:44;;15943:27;15959:10;15943:15;:27::i;:::-;15988:10;15403:602;-1:-1:-1;;;15403:602:35:o;2677:709:37:-;2784:22;;2752:29;2817:515;2849:21;2841:5;:29;2817:515;;;2895:24;2922:15;2938:5;2922:22;;;;;;;;:::i;:::-;;;;;;;;;;;2978:7;;2922:22;;-1:-1:-1;;;;;;2978:7:37;2964:10;:21;;;;2963:76;;-1:-1:-1;3005:26:37;;;;:8;:26;;;;;:33;-1:-1:-1;;;;;3005:33:37;2991:10;:47;;2963:76;2959:176;;;3066:54;;-1:-1:-1;;;3066:54:37;;;;;160:25:44;;;133:18;;3066:54:37;;;;;;;;2959:176;3154:34;;;;:16;:34;;;;;;;;3149:173;;3208:34;;;;:16;:34;;;;;:41;;-1:-1:-1;;3208:41:37;3245:4;3208:41;;;;;;3267:17;:40;;;;;;;;;;;;;;;3149:173;-1:-1:-1;2872:7:37;;;;:::i;:::-;;;;2817:515;;;;3347:32;3363:15;3347:32;;;;;;:::i;:::-;;;;;;;;2742:644;2677:709;:::o;2267:224:36:-;2372:33;2408:32;;;:20;:32;;;;;;;;;2457:27;;;2450:34;;;;;;;;;;;;;;;;;2344:16;;2408:32;;2450:34;;2457:27;2450:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2450:34:36;;;;;;;;;;;;;;;;;;;;;;;;2267:224;;;:::o;4360:268::-;4446:18;4480:31;;;:21;:31;;;;;:38;4522:1;4480:43;4476:94;;4532:38;;-1:-1:-1;;;4532:38:36;;;;;;;;;;;4476:94;4587:31;;;;:21;:31;;;;;:34;;:31;;;:34;;;;:::i;:::-;;;;;;;;;4580:41;;4360:268;;;:::o;1757:140:37:-;1862:28;;;;:16;:28;;;;;;;;;1855:35;;;;;;;;;;;;;;;;;1827:16;;1855:35;;;1862:28;1855:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:140;;;:::o;7910:477:35:-;7976:8;;7948:12;;7976:8;;7972:67;;;-1:-1:-1;8007:21:35;;7910:477::o;7972:67::-;8069:15;8053:12;;:31;8049:92;;-1:-1:-1;8107:23:35;;7910:477::o;8049:92::-;8170:15;8155:11;:9;:11::i;:::-;:30;8151:87;;-1:-1:-1;8208:19:35;;7910:477::o;8151:87::-;8273:15;8252:17;:15;:17::i;:::-;:36;8248:93;;-1:-1:-1;8311:19:35;;7910:477::o;8248:93::-;-1:-1:-1;8358:22:35;;7910:477::o;10118:128::-;10180:19;;:::i;:::-;10218:21;;;;:9;:21;;;;;;;;;10211:28;;;;;;;;;-1:-1:-1;;;;;10211:28:35;;;;-1:-1:-1;;;10211:28:35;;;;;;;;;;;;;;;;;;;;10218:21;;10211:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10211:28:35;;;-1:-1:-1;;10211:28:35;;;;;;;;;;;;;-1:-1:-1;;;;;10211:28:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10211:28:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10211:28:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10211:28:35;;;;-1:-1:-1;;;10211:28:35;;-1:-1:-1;10211:28:35;10118:128;-1:-1:-1;;10118:128:35:o;3558:212:36:-;3732:31;;;;:21;:31;;;;;;;;;3725:38;;;;;;;;;;;;;;;;;3663:46;;3725:38;;;3732:31;3725:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3558:212;;;:::o;9173:437:35:-;9237:16;9265:41;9309:18;9265:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9337:29;9383:24;:31;-1:-1:-1;;;;;9369:46:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9369:46:35;;9337:78;;9430:9;9425:150;9449:24;:31;9445:1;:35;9425:150;;;9519:9;:38;9529:24;9554:1;9529:27;;;;;;;;:::i;:::-;;;;;;;9519:38;;;;;;;;;;;:45;;;;;;;;;;-1:-1:-1;;;;;9519:45:35;9501:12;9514:1;9501:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9501:63:35;;;:15;;;;;;;;;;;:63;9482:3;;;;:::i;:::-;;;;9425:150;;;-1:-1:-1;9591:12:35;9173:437;-1:-1:-1;;9173:437:35:o;11492:1474::-;11578:15;;-1:-1:-1;;;;;11578:29:35;11597:10;11578:29;11574:88;;11634:15;;11616:46;;-1:-1:-1;;;11616:46:35;;-1:-1:-1;;;;;30288:15:44;;;11616:46:35;;;30270:34:44;11651:10:35;30320:18:44;;;30313:43;30205:18;;11616:46:35;30058:304:44;11574:88:35;11677:13;11672:1200;2687:32;2695:19;2718:1;2687:32;:::i;:::-;11696:5;:23;11672:1200;;;11744:25;11782:5;11772:16;;;;;;;;:::i;:::-;11744:44;-1:-1:-1;11825:16:35;11806:15;:35;;;;;;;;:::i;:::-;;11802:1060;;11861:8;;;11802:1060;11970:14;11951:15;:33;;;;;;;;:::i;:::-;;11947:915;;12008:21;;;;:29;:36;:29;:41;12004:81;;12058:27;;-1:-1:-1;;;12058:27:35;;;;;;;;;;;12004:81;12107:8;:21;;;:31;;;12142:1;12107:36;12103:78;;12152:29;;-1:-1:-1;;;12152:29:35;;;;;;;;;;;12103:78;11947:915;;;12225:16;12206:15;:35;;;;;;;;:::i;:::-;;12202:660;;12265:23;;;;:36;:43;2778:2;-1:-1:-1;12261:160:35;;;12368:34;;-1:-1:-1;;;12368:34:35;;;;;;;;;;;12261:160;2778:2;12442:8;:23;;;:35;;;:42;:71;12438:158;;;12544:33;;-1:-1:-1;;;12544:33:35;;;;;;;;;;;12438:158;2778:2;12617:8;:23;;;:33;;;:40;:69;12613:154;;;12717:31;;-1:-1:-1;;;12717:31:35;;;;;;;;;;;12202:660;12831:15;12812:35;;-1:-1:-1;;;12812:35:35;;;;;;;;:::i;12202:660::-;11730:1142;11672:1200;11721:7;;;;:::i;:::-;;;;11672:1200;;;;12891:8;:20;;;12885:34;12923:1;12885:39;12881:78;;12933:26;;-1:-1:-1;;;12933:26:35;;;;;;;;;;;12881:78;11492:1474;:::o;7758:146::-;7831:7;7886:8;7875:20;;;;;;;;:::i;21279:292::-;21366:10;2907:42;21366:29;21362:62;;21404:20;;-1:-1:-1;;;21404:20:35;;;;;;;;;;;21362:62;21449:22;21438:7;:5;:7::i;:::-;:33;;;;;;;;:::i;:::-;;21434:74;;21480:28;;-1:-1:-1;;;21480:28:35;;;;;;;;;;;21434:74;21518:20;:46;21279:292::o;9771:101::-;9813:7;9854:11;;9839:12;;:26;;;;:::i;1206:101:37:-;1255:16;1290:10;1283:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1206:101;:::o;18404:323:35:-;18459:7;;-1:-1:-1;;;;;18459:7:35;18445:10;:21;;;;18444:58;;-1:-1:-1;18472:10:35;2907:42;18472:29;;18444:58;18439:103;;;18512:30;;-1:-1:-1;;;18512:30:35;;;;;;;;;;;18439:103;18553:19;18575:7;:5;:7::i;:::-;18553:29;-1:-1:-1;18606:21:35;18596:6;:31;;;;;;;;:::i;:::-;;18592:69;;18636:25;;-1:-1:-1;;;18636:25:35;;;;;;;;;;;18592:69;18672:8;:15;;-1:-1:-1;;18672:15:35;18683:4;18672:15;;;18703:17;;;;18672:8;;18703:17;18429:298;18404:323::o;8443:103::-;8493:16;8528:11;8521:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8443:103;:::o;17030:1262::-;17130:7;;-1:-1:-1;;;;;17130:7:35;17116:10;:21;17112:56;;17146:22;;-1:-1:-1;;;17146:22:35;;;;;;;;;;;17112:56;17193:22;17182:7;:5;:7::i;:::-;:33;;;;;;;;:::i;:::-;;17178:73;;17224:27;;-1:-1:-1;;;17224:27:35;;;;;;;;;;;17178:73;17267:13;17262:620;17286:34;;;17262:620;;;17345:25;17373:19;;17393:5;17373:26;;;;;;;:::i;:::-;;;;;;;;;;17418:36;;;;:17;:36;;;;;;;;17373:26;;-1:-1:-1;;17418:36:35;;17413:459;;17538:36;;;;:17;:36;;;;;:43;;-1:-1:-1;;17538:43:35;17577:4;17538:43;;;;;;17815:18;:42;;;;;;;;;;;;;;;17413:459;-1:-1:-1;17322:7:35;;;;:::i;:::-;;;;17262:620;;;-1:-1:-1;17978:17:35;;:22;:45;;;;;18004:14;;18022:1;18004:19;17978:45;17974:267;;;18176:54;18210:19;;18176:33;:54::i;:::-;18256:29;18273:11;18256:29;;;;;;:::i;586:379:38:-;693:7;;-1:-1:-1;;;;;693:7:38;679:10;:21;675:66;;709:32;;-1:-1:-1;;;709:32:38;;;;;;;;;;;675:66;792:21;;;-1:-1:-1;;;;;823:46:38;;;-1:-1:-1;;;;;;823:46:38;;;;;;;884:74;;;792:21;;;;30270:34:44;;;30335:2;30320:18;;30313:43;;;;884:74:38;;30205:18:44;884:74:38;30058:304:44;579:27:37;;;;;;;;;;;;705:53;;;;;;;;;;;;;;;;;;;;14892:396:35;14991:7;15010:18;15031:46;15059:14;15075:1;15031:27;:46::i;:::-;15010:67;;15088:33;15103:10;15115:5;;15088:14;:33::i;:::-;15131:30;;15152:8;15131:30;:::i;:::-;15171:18;15192:23;;15206:8;15192:23;:::i;:::-;15171:44;;15226:27;15242:10;15226:15;:27::i;1156:154:32:-;1247:4;1299;1270:25;1283:5;1290:4;1270:12;:25::i;:::-;:33;;1156:154;-1:-1:-1;;;;1156:154:32:o;13098:798:35:-;13194:7;;;13245:13;:31;;;;;;;;:::i;:::-;;13241:535;;-1:-1:-1;13305:13:35;;13241:535;;;13356:12;13339:13;:29;;;;;;;;:::i;:::-;;13335:441;;13388:10;;13402:1;13388:15;13384:337;;13438:7;13427:8;:18;13423:70;;;13454:39;;-1:-1:-1;;;13454:39:35;;;;;;;;;;;13423:70;13538:18;13549:7;13538:8;:18;:::i;:::-;13524:10;;:33;;;;:::i;:::-;13511:46;;13335:441;;13384:337;-1:-1:-1;13696:10:35;;13335:441;;;-1:-1:-1;13764:1:35;13335:441;13803:10;13790:9;:23;13786:76;;13822:40;;-1:-1:-1;;;13822:40:35;;13840:9;13822:40;;;15076:25:44;15117:18;;;15110:34;;;15049:18;;13822:40:35;14902:248:44;14021:814:35;14089:14;;14085:744;;14186:23;14256:3;14232:19;;14226:3;:25;;;;:::i;:::-;14213:39;;:9;:39;:::i;:::-;14212:47;;;;:::i;:::-;14186:73;-1:-1:-1;14277:19:35;;14273:210;;14342:22;;14316:67;;-1:-1:-1;;;;;14342:22:35;14367:15;14316:17;:67::i;:::-;14428:22;;14406:62;;;-1:-1:-1;;;;;14428:22:35;;;32218:51:44;;32300:2;32285:18;;32278:34;;;14406:62:35;;32191:18:44;14406:62:35;;;;;;;14273:210;14497:24;14524:27;14536:15;14524:9;:27;:::i;:::-;14497:54;-1:-1:-1;14569:20:35;;14565:254;;14635:23;;14609:69;;-1:-1:-1;;;;;14635:23:35;14661:16;14609:17;:69::i;:::-;14778:7;;14755:49;;;-1:-1:-1;;;;;14778:7:35;;;32218:51:44;;32300:2;32285:18;;32278:34;;;14755:49:35;;32191:18:44;14755:49:35;;;;;;;14105:724;;14021:814;:::o;20734:539::-;20857:7;20895:19;20884:7;:5;:7::i;:::-;:30;;;;;;;;:::i;:::-;;20880:77;;20949:7;:5;:7::i;:::-;20923:34;;-1:-1:-1;;;20923:34:35;;;;;;;;:::i;20880:77::-;20971:8;20983:1;20971:13;20967:52;;20993:26;;-1:-1:-1;;;20993:26:35;;;;;;;;;;;20967:52;21030:78;21041:10;21053:7;21062;21071:8;21081:17;:26;21099:7;-1:-1:-1;;;;;21081:26:35;-1:-1:-1;;;;;21081:26:35;;;;;;;;;;;;;21030:10;:78::i;:::-;21119:22;:39;;;;;;;-1:-1:-1;21119:39:35;;;;;;;;-1:-1:-1;;;;;;21119:39:35;21147:10;21119:39;;;21174:48;;;32521:25:44;;;32594:4;32582:17;;32577:2;32562:18;;32555:45;32616:18;;;32609:34;;;-1:-1:-1;;;;;21174:48:35;;;;;32509:2:44;32494:18;21174:48:35;;;;;;;-1:-1:-1;;;;;;;;21240:26:35;;;;;:17;:26;;;;;;;20734:539;-1:-1:-1;20734:539:35:o;16011:909::-;16082:7;16116:19;16105:7;:5;:7::i;:::-;:30;;;;;;;;:::i;:::-;;16101:80;;16173:7;:5;:7::i;:::-;16144:37;;-1:-1:-1;;;16144:37:35;;;;;;;;:::i;16101:80::-;16225:29;;16210:10;16195:26;;;;:14;:26;;;;;;:59;16191:156;;16306:29;;16277:59;;-1:-1:-1;;;16277:59:35;;;;;;160:25:44;;148:2;133:18;;14:177;16191:156:35;16412:16;;16382:18;:25;16361:11;:18;:46;;16382:25;16361:46;:::i;:::-;16360:68;16356:153;;16481:16;;16451:47;;-1:-1:-1;;;16451:47:35;;;;;;160:25:44;;148:2;133:18;;14:177;16356:153:35;16519:18;16540:22;16553:8;16540:12;:22::i;:::-;16576:21;;;;:9;:21;;;;;:28;:21;;-1:-1:-1;;;;16576:28:35;;;;16572:72;;;16613:31;;-1:-1:-1;;;16613:31:35;;;;;160:25:44;;;133:18;;16613:31:35;14:177:44;16572:72:35;16655:11;:28;;;;;;;;;;;;;;-1:-1:-1;16693:21:35;;;:9;16655:28;16693:21;;;;;;;;:32;;;;;;;;;;-1:-1:-1;;;16693:32:35;-1:-1:-1;;;;;;16693:32:35;;;-1:-1:-1;;;;;16693:32:35;;;;;;;;;;;;;;16717:8;;16693:32;;;;;;;:::i;:::-;-1:-1:-1;16693:32:35;;;;;;;;;;-1:-1:-1;;;;;;16693:32:35;-1:-1:-1;;;;;16693:32:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16693:32:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16693:32:35;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16693:32:35;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;16750:10:35;16735:26;;;;:14;:26;;;;;:31;;16765:1;;-1:-1:-1;16735:26:35;;-1:-1:-1;16735:26:35;;-1:-1:-1;16735:31:35;;16765:1;;16735:31;:::i;:::-;;;;-1:-1:-1;;16776:15:35;:32;;;;;;;-1:-1:-1;16776:32:35;;;;;;;;-1:-1:-1;;;;;;16776:32:35;16797:10;16776:32;;;;;;16864:20;;;;;16824:61;;;;;;16840:10;;16824:61;:::i;:::-;;;;;;;;16903:10;16011:909;-1:-1:-1;;16011:909:35:o;7589:606:36:-;7705:9;7700:489;7720:30;;;7700:489;;;7771:25;7799:19;;7819:1;7799:22;;;;;;;:::i;:::-;;;;;;;;;;7835:32;7870:39;;;:20;:39;;;;;;;:67;7799:22;;-1:-1:-1;8105:73:36;;-1:-1:-1;7799:22:36;7870:67;8105:28;:73::i;:::-;7757:432;;7752:3;;;;;:::i;:::-;;;;7700:489;;1934:290:32;2017:7;2059:4;2017:7;2073:116;2097:5;:12;2093:1;:16;2073:116;;;2145:33;2155:12;2169:5;2175:1;2169:8;;;;;;;;:::i;:::-;;;;;;;2145:9;:33::i;:::-;2130:48;-1:-1:-1;2111:3:32;;;;:::i;:::-;;;;2073:116;;;-1:-1:-1;2205:12:32;1934:290;-1:-1:-1;;;1934:290:32:o;2647:312:30:-;2761:6;2736:21;:31;;2728:73;;;;-1:-1:-1;;;2728:73:30;;33249:2:44;2728:73:30;;;33231:21:44;33288:2;33268:18;;;33261:30;33327:31;33307:18;;;33300:59;33376:18;;2728:73:30;33047:353:44;2728:73:30;2813:12;2831:9;-1:-1:-1;;;;;2831:14:30;2853:6;2831:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2812:52;;;2882:7;2874:78;;;;-1:-1:-1;;;2874:78:30;;33817:2:44;2874:78:30;;;33799:21:44;33856:2;33836:18;;;33829:30;33895:34;33875:18;;;33868:62;33966:28;33946:18;;;33939:56;34012:19;;2874:78:30;33615:422:44;8335:2129:36;8493:33;8529:32;;;:20;:32;;;;;8577:16;;:21;;;;8576:90;;-1:-1:-1;;;;;;8629:35:36;;;;;;:26;:35;;;;;;8616:48;;:10;:48;:::i;:::-;8604:8;:61;8576:90;8572:148;;;8689:20;;-1:-1:-1;;;8689:20:36;;;;;;;;;;;8572:148;-1:-1:-1;;;;;8767:39:36;;8730:20;8767:39;;;:30;;;:39;;;;;:48;:53;:130;;;;-1:-1:-1;;;;;;8840:39:36;;;;;;:30;;;:39;;;;;:52;;;:57;8767:130;8730:177;-1:-1:-1;8922:30:36;;;8918:518;;8968:52;;9012:8;;8968:12;;:31;;:52;;9012:8;;8968:52;:::i;:::-;;;;-1:-1:-1;;;;;;;9034:39:36;;;;;;:30;;;:39;;;;;:60;;9086:8;;9034:39;:60;;9086:8;;9034:60;:::i;:::-;;;;-1:-1:-1;8918:518:36;;-1:-1:-1;8918:518:36;;-1:-1:-1;;9115:34:36;;;;9111:325;;9169:17;;9190:1;9169:22;9165:57;;9200:22;;-1:-1:-1;;;9200:22:36;;;;;;;;;;;9165:57;9284:8;9236:12;:31;;:44;;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;9306:39:36;;;;;;:30;;;:39;;;;;:52;;:64;;9362:8;;9306:39;:64;;9362:8;;9306:64;:::i;9111:325::-;9408:17;;-1:-1:-1;;;9408:17:36;;;;;;;;;;;9111:325;9450:15;9446:87;;;9481:27;;;:41;;;;;;;-1:-1:-1;9481:41:36;;;;;;;;;;-1:-1:-1;;;;;;9481:41:36;-1:-1:-1;;;;;9481:41:36;;;;;9446:87;-1:-1:-1;;;;;9542:35:36;;;;;;:26;:35;;;;;:47;;9581:8;;9542:35;:47;;9581:8;;9542:47;:::i;:::-;;;;;;;;9617:8;9599:14;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;9770:17:36;;:22;9769:49;;;;;9798:14;;9816:1;9798:19;9769:49;9765:693;;;9856:40;;9834:19;9976:22;9990:8;9856:40;9976:22;:::i;:::-;9954:44;-1:-1:-1;10227:15:36;;10223:107;;10262:53;10291:10;10303:11;10262:28;:53::i;:::-;10343:34;;;;:21;:34;;;;;;;:51;;;;;;;;;;;;;;;;10409:38;10422:11;10365;10409:12;:38::i;:::-;9820:638;;9765:693;8483:1981;;8335:2129;;;;;:::o;6653:852::-;6748:39;6790:31;;;:21;:31;;;;;;;;6748:73;;;;;;;;;;;;;;;;;;;6790:31;;6748:73;;;6790:31;6748:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6880:9;6875:624;6899:22;:29;6895:1;:33;6875:624;;;6982:10;6953:22;6976:1;6953:25;;;;;;;;:::i;:::-;;;;;;;:39;6949:540;;7339:22;7394:1;7362:22;:29;:33;;;;:::i;:::-;7339:57;;;;;;;;:::i;:::-;;;;;;;7302:21;:31;7324:8;7302:31;;;;;;;;;;;7334:1;7302:34;;;;;;;;:::i;:::-;;;;;;;;:94;;;;7414:21;:31;7436:8;7414:31;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7469:5;;6949:540;6930:3;;;;:::i;:::-;;;;6875:624;;9205:147:32;9268:7;9298:1;9294;:5;:51;;9426:13;9517:15;;;9552:4;9545:15;;;9598:4;9582:21;;9294:51;;;9426:13;9517:15;;;9552:4;9545:15;;;9598:4;9582:21;;9302:20;9358:261;6318:1337:40;6423:11;:18;;6495:48;;;;;;;;;;;;;;;;;6423:18;;6395:25;;6495:48;6423:18;;6495:48;;6423:11;:18;6495:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6710:17;6731:1;6710:22;6706:99;;-1:-1:-1;;6748:11:40;:26;;;;;;;-1:-1:-1;6748:26:40;;;;;;;-1:-1:-1;6318:1337:40:o;6706:99::-;7060:17;7078:21;7098:1;7078:17;:21;:::i;:::-;7060:40;;;;;;;;:::i;:::-;;;;;;;7049:8;:51;7045:424;;;7141:9;;7120:17;:30;7116:343;;7258:7;;6318:1337;;:::o;7116:343::-;-1:-1:-1;;7394:11:40;:26;;;;;;;-1:-1:-1;7394:26:40;;;;;;;-1:-1:-1;6318:1337:40:o;7116:343::-;7579:69;7591:8;7601;7611:17;7630;3047:22;;3079:494;3111:17;3103:5;:25;3079:494;;;3258:17;3276:5;3258:24;;;;;;;;:::i;:::-;;;;;;;3246:8;:36;3242:188;;3409:7;;;;3242:188;3459:17;3477:5;3459:24;;;;;;;;:::i;:::-;;;;;;;3448:8;:35;3444:119;;;3520:5;3503:22;;3543:5;;3444:119;3130:7;;;;:::i;:::-;;;;3079:494;;;;3628:21;3664:1;3653:8;:12;3652:70;;;;-1:-1:-1;3967:13:36;3999:31;;;:21;:31;;;;;:38;3671:50:40;3652:70;3628:94;;3807:22;4071:16;:67;;;;;4129:8;4092:17;4110:14;4092:33;;;;;;;;:::i;:::-;;;;;;;:45;4071:67;4065:1656;;4508:21;4528:1;4508:17;:21;:::i;:::-;4490:14;:39;4484:844;;4803:13;4819:18;:14;4836:1;4819:18;:::i;:::-;4803:34;;4798:516;4847:17;4839:5;:25;4798:516;;;4918:17;4936:9;4944:1;4936:5;:9;:::i;:::-;4918:28;;;;;;;;:::i;:::-;;;;;;;4897:11;4909:5;4897:18;;;;;;;;:::i;:::-;;;;;;;;;;:49;5132:16;:58;;;;;5181:8;5153:17;5171:5;5153:24;;;;;;;;:::i;:::-;;;;;;;:36;5132:58;5128:168;;;5238:4;5218:24;;5268:5;;5128:168;4866:7;;;;:::i;:::-;;;;4798:516;;;;4484:844;5566:17;5565:18;:53;;;;;5608:9;;5588:17;:29;5565:53;5561:150;;;5638:11;5655:17;5673:21;5693:1;5673:17;:21;:::i;:::-;5655:40;;;;;;;;:::i;:::-;;;;;;;;;;;;5638:58;;;;;;;-1:-1:-1;5638:58:40;;;;;;;;;5561:150;5882:8;5852:11;5864:14;5852:27;;;;;;;;:::i;:::-;;;;;;;;;;:38;-1:-1:-1;;;2822:3075:40;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;196:180:44:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:44;;196:180;-1:-1:-1;196:180:44:o;381:423::-;423:3;461:5;455:12;488:6;483:3;476:19;513:1;523:162;537:6;534:1;531:13;523:162;;;599:4;655:13;;;651:22;;645:29;627:11;;;623:20;;616:59;552:12;523:162;;;527:3;730:1;723:4;714:6;709:3;705:16;701:27;694:38;793:4;786:2;782:7;777:2;769:6;765:15;761:29;756:3;752:39;748:50;741:57;;;381:423;;;;:::o;809:461::-;862:3;900:5;894:12;927:6;922:3;915:19;953:4;982:2;977:3;973:12;966:19;;1019:2;1012:5;1008:14;1040:1;1050:195;1064:6;1061:1;1058:13;1050:195;;;1129:13;;-1:-1:-1;;;;;1125:39:44;1113:52;;1185:12;;;;1220:15;;;;1161:1;1079:9;1050:195;;;-1:-1:-1;1261:3:44;;809:461;-1:-1:-1;;;;;809:461:44:o;1275:292::-;1330:3;1374:5;1368:12;1401:4;1396:3;1389:17;1427:58;1479:4;1474:3;1470:14;1456:12;1427:58;:::i;:::-;1534:4;1523:16;;;1517:23;1501:14;;;;1494:47;;;;-1:-1:-1;1415:70:44;1275:292;-1:-1:-1;1275:292:44:o;1572:446::-;1636:3;1674:5;1668:12;1701:6;1696:3;1689:19;1727:4;1756:2;1751:3;1747:12;1740:19;;1793:2;1786:5;1782:14;1814:1;1824:169;1838:6;1835:1;1832:13;1824:169;;;1899:13;;1887:26;;1933:12;;;;1968:15;;;;1860:1;1853:9;1824:169;;2023:1037;2080:3;2124:5;2118:12;2151:4;2146:3;2139:17;2177:58;2229:4;2224:3;2220:14;2206:12;2177:58;:::i;:::-;2165:70;;2254:4;2306:2;2299:5;2295:14;2289:21;2350:3;2344:4;2340:14;2335:2;2330:3;2326:12;2319:36;2377:4;2410:14;2404:21;2447:6;2441:4;2434:20;2482:2;2476:4;2472:13;2463:22;;2539:2;2529:6;2526:1;2522:14;2516:4;2512:25;2508:34;2585:2;2569:14;2565:23;2551:37;;2606:1;2616:256;2630:6;2627:1;2624:13;2616:256;;;2720:2;2716:7;2709:4;2701:6;2697:17;2693:31;2686:5;2679:46;2748:40;2781:6;2772;2766:13;2748:40;:::i;:::-;2811:15;;;;2848:14;;;;2738:50;-1:-1:-1;2652:1:44;2645:9;2616:256;;;2620:3;2920:4;2913:5;2909:16;2903:23;2881:45;;2970:3;2962:6;2958:16;2951:4;2946:3;2942:14;2935:40;2991:63;3047:6;3031:14;2991:63;:::i;:::-;2984:70;2023:1037;-1:-1:-1;;;;;;;;;2023:1037:44:o;3065:1018::-;3505:4;3551:1;3547;3542:3;3538:11;3534:19;3592:2;3584:6;3580:15;3569:9;3562:34;3646:6;3639:14;3632:22;3627:2;3616:9;3612:18;3605:50;3691:3;3686:2;3675:9;3671:18;3664:31;3718:46;3759:3;3748:9;3744:19;3736:6;3718:46;:::i;:::-;3819:2;3810:6;3804:13;3800:22;3795:2;3784:9;3780:18;3773:50;3872:9;3864:6;3860:22;3854:3;3843:9;3839:19;3832:51;3906:46;3945:6;3937;3906:46;:::i;:::-;3892:60;;;4001:9;3993:6;3989:22;3983:3;3972:9;3968:19;3961:51;4029:48;4070:6;4062;4029:48;:::i;4296:220::-;4445:2;4434:9;4427:21;4408:4;4465:45;4506:2;4495:9;4491:18;4483:6;4465:45;:::i;4677:257::-;4597:12;;4585:25;;4659:4;4648:16;;;4642:23;4626:14;;;4619:47;4869:2;4854:18;;4881:47;4521:151;4939:555;5128:2;5117:9;5110:21;5203:1;5199;5194:3;5190:11;5186:19;5177:6;5171:13;5167:39;5162:2;5151:9;5147:18;5140:67;5261:2;5253:6;5249:15;5243:22;5238:2;5227:9;5223:18;5216:50;5320:2;5312:6;5308:15;5302:22;5297:2;5286:9;5282:18;5275:50;5091:4;5372:2;5364:6;5360:15;5354:22;5414:4;5407;5396:9;5392:20;5385:34;5436:52;5483:3;5472:9;5468:19;5454:12;5436:52;:::i;:::-;5428:60;4939:555;-1:-1:-1;;;;4939:555:44:o;5939:261::-;6118:2;6107:9;6100:21;6081:4;6138:56;6190:2;6179:9;6175:18;6167:6;6138:56;:::i;6205:131::-;-1:-1:-1;;;;;6280:31:44;;6270:42;;6260:70;;6326:1;6323;6316:12;6341:134;6409:20;;6438:31;6409:20;6438:31;:::i;:::-;6341:134;;;:::o;6480:247::-;6539:6;6592:2;6580:9;6571:7;6567:23;6563:32;6560:52;;;6608:1;6605;6598:12;6560:52;6647:9;6634:23;6666:31;6691:5;6666:31;:::i;6732:127::-;6793:10;6788:3;6784:20;6781:1;6774:31;6824:4;6821:1;6814:15;6848:4;6845:1;6838:15;6864:253;6936:2;6930:9;6978:4;6966:17;;-1:-1:-1;;;;;6998:34:44;;7034:22;;;6995:62;6992:88;;;7060:18;;:::i;:::-;7096:2;7089:22;6864:253;:::o;7122:::-;7194:2;7188:9;7236:4;7224:17;;-1:-1:-1;;;;;7256:34:44;;7292:22;;;7253:62;7250:88;;;7318:18;;:::i;7380:275::-;7451:2;7445:9;7516:2;7497:13;;-1:-1:-1;;7493:27:44;7481:40;;-1:-1:-1;;;;;7536:34:44;;7572:22;;;7533:62;7530:88;;;7598:18;;:::i;:::-;7634:2;7627:22;7380:275;;-1:-1:-1;7380:275:44:o;7660:531::-;7703:5;7756:3;7749:4;7741:6;7737:17;7733:27;7723:55;;7774:1;7771;7764:12;7723:55;7810:6;7797:20;-1:-1:-1;;;;;7832:2:44;7829:26;7826:52;;;7858:18;;:::i;:::-;7902:55;7945:2;7926:13;;-1:-1:-1;;7922:27:44;7951:4;7918:38;7902:55;:::i;:::-;7982:2;7973:7;7966:19;8028:3;8021:4;8016:2;8008:6;8004:15;8000:26;7997:35;7994:55;;;8045:1;8042;8035:12;7994:55;8110:2;8103:4;8095:6;8091:17;8084:4;8075:7;8071:18;8058:55;8158:1;8133:16;;;8151:4;8129:27;8122:38;;;;8137:7;7660:531;-1:-1:-1;;;7660:531:44:o;8196:390::-;8274:6;8282;8335:2;8323:9;8314:7;8310:23;8306:32;8303:52;;;8351:1;8348;8341:12;8303:52;8387:9;8374:23;8364:33;;8448:2;8437:9;8433:18;8420:32;-1:-1:-1;;;;;8467:6:44;8464:30;8461:50;;;8507:1;8504;8497:12;8461:50;8530;8572:7;8563:6;8552:9;8548:22;8530:50;:::i;:::-;8520:60;;;8196:390;;;;;:::o;8591:367::-;8654:8;8664:6;8718:3;8711:4;8703:6;8699:17;8695:27;8685:55;;8736:1;8733;8726:12;8685:55;-1:-1:-1;8759:20:44;;-1:-1:-1;;;;;8791:30:44;;8788:50;;;8834:1;8831;8824:12;8788:50;8871:4;8863:6;8859:17;8847:29;;8931:3;8924:4;8914:6;8911:1;8907:14;8899:6;8895:27;8891:38;8888:47;8885:67;;;8948:1;8945;8938:12;8963:572;9058:6;9066;9074;9127:2;9115:9;9106:7;9102:23;9098:32;9095:52;;;9143:1;9140;9133:12;9095:52;9182:9;9169:23;9201:31;9226:5;9201:31;:::i;:::-;9251:5;-1:-1:-1;9307:2:44;9292:18;;9279:32;-1:-1:-1;;;;;9323:30:44;;9320:50;;;9366:1;9363;9356:12;9320:50;9405:70;9467:7;9458:6;9447:9;9443:22;9405:70;:::i;:::-;8963:572;;9494:8;;-1:-1:-1;9379:96:44;;-1:-1:-1;;;;8963:572:44:o;9540:658::-;9711:2;9763:21;;;9833:13;;9736:18;;;9855:22;;;9682:4;;9711:2;9934:15;;;;9908:2;9893:18;;;9682:4;9977:195;9991:6;9988:1;9985:13;9977:195;;;10056:13;;-1:-1:-1;;;;;10052:39:44;10040:52;;10147:15;;;;10112:12;;;;10088:1;10006:9;9977:195;;;-1:-1:-1;10189:3:44;;9540:658;-1:-1:-1;;;;;;9540:658:44:o;10203:160::-;10268:20;;10324:13;;10317:21;10307:32;;10297:60;;10353:1;10350;10343:12;10368:709;10478:6;10486;10494;10502;10510;10563:3;10551:9;10542:7;10538:23;10534:33;10531:53;;;10580:1;10577;10570:12;10531:53;10619:9;10606:23;10638:31;10663:5;10638:31;:::i;:::-;10688:5;-1:-1:-1;10740:2:44;10725:18;;10712:32;;-1:-1:-1;10795:2:44;10780:18;;10767:32;-1:-1:-1;;;;;10811:30:44;;10808:50;;;10854:1;10851;10844:12;10808:50;10893:70;10955:7;10946:6;10935:9;10931:22;10893:70;:::i;:::-;10982:8;;-1:-1:-1;10867:96:44;-1:-1:-1;11036:35:44;;-1:-1:-1;11067:2:44;11052:18;;11036:35;:::i;:::-;11026:45;;10368:709;;;;;;;;:::o;11274:1004::-;11363:6;11416:2;11404:9;11395:7;11391:23;11387:32;11384:52;;;11432:1;11429;11422:12;11384:52;11472:9;11459:23;-1:-1:-1;;;;;11542:2:44;11534:6;11531:14;11528:34;;;11558:1;11555;11548:12;11528:34;11581:22;;;;11637:4;11619:16;;;11615:27;11612:47;;;11655:1;11652;11645:12;11612:47;11688:2;11682:9;11730:4;11722:6;11718:17;11785:6;11773:10;11770:22;11765:2;11753:10;11750:18;11747:46;11744:72;;;11796:18;;:::i;:::-;11832:2;11825:22;11869:16;;11894:31;11869:16;11894:31;:::i;:::-;11949:5;11941:6;11934:21;;12009:2;12005;12001:11;11988:25;11983:2;11975:6;11971:15;11964:50;12068:2;12064;12060:11;12047:25;12042:2;12034:6;12030:15;12023:50;12119:2;12115;12111:11;12098:25;12148:2;12138:8;12135:16;12132:36;;;12164:1;12161;12154:12;12132:36;12201:45;12238:7;12227:8;12223:2;12219:17;12201:45;:::i;:::-;12196:2;12184:15;;12177:70;-1:-1:-1;12188:6:44;11274:1004;-1:-1:-1;;;;;11274:1004:44:o;12283:156::-;12349:20;;12409:4;12398:16;;12388:27;;12378:55;;12429:1;12426;12419:12;12444:713;12564:6;12572;12580;12588;12596;12604;12657:3;12645:9;12636:7;12632:23;12628:33;12625:53;;;12674:1;12671;12664:12;12625:53;12710:9;12697:23;12687:33;;12739:36;12771:2;12760:9;12756:18;12739:36;:::i;:::-;12729:46;;12822:2;12811:9;12807:18;12794:32;12784:42;;12873:2;12862:9;12858:18;12845:32;12835:42;;12928:3;12917:9;12913:19;12900:33;-1:-1:-1;;;;;12948:6:44;12945:30;12942:50;;;12988:1;12985;12978:12;12942:50;13027:70;13089:7;13080:6;13069:9;13065:22;13027:70;:::i;:::-;12444:713;;;;-1:-1:-1;12444:713:44;;-1:-1:-1;12444:713:44;;13116:8;;12444:713;-1:-1:-1;;;12444:713:44:o;13162:905::-;13440:4;13469:2;13498;13487:9;13480:21;13524:56;13576:2;13565:9;13561:18;13553:6;13524:56;:::i;:::-;13637:22;;;13599:2;13617:18;;;13610:50;;;;13709:13;;13731:22;;;13807:15;;;;13769;;;13840:1;13850:191;13864:6;13861:1;13858:13;13850:191;;;13913:48;13957:3;13948:6;13942:13;4597:12;;4585:25;;4659:4;4648:16;;;4642:23;4626:14;;4619:47;4521:151;13913:48;14016:15;;;;13981:12;;;;13886:1;13879:9;13850:191;;;-1:-1:-1;14058:3:44;;13162:905;-1:-1:-1;;;;;;;;13162:905:44:o;14072:640::-;14176:6;14184;14192;14200;14253:2;14241:9;14232:7;14228:23;14224:32;14221:52;;;14269:1;14266;14259:12;14221:52;14308:9;14295:23;14327:31;14352:5;14327:31;:::i;:::-;14377:5;-1:-1:-1;14429:2:44;14414:18;;14401:32;;-1:-1:-1;14484:2:44;14469:18;;14456:32;-1:-1:-1;;;;;14500:30:44;;14497:50;;;14543:1;14540;14533:12;14497:50;14582:70;14644:7;14635:6;14624:9;14620:22;14582:70;:::i;:::-;14072:640;;;;-1:-1:-1;14671:8:44;-1:-1:-1;;;;14072:640:44:o;15155:318::-;15230:6;15238;15246;15299:2;15287:9;15278:7;15274:23;15270:32;15267:52;;;15315:1;15312;15305:12;15267:52;15351:9;15338:23;15328:33;;15380:36;15412:2;15401:9;15397:18;15380:36;:::i;:::-;15370:46;;15463:2;15452:9;15448:18;15435:32;15425:42;;15155:318;;;;;:::o;15478:315::-;15546:6;15554;15607:2;15595:9;15586:7;15582:23;15578:32;15575:52;;;15623:1;15620;15613:12;15575:52;15659:9;15646:23;15636:33;;15719:2;15708:9;15704:18;15691:32;15732:31;15757:5;15732:31;:::i;:::-;15782:5;15772:15;;;15478:315;;;;;:::o;15798:248::-;15866:6;15874;15927:2;15915:9;15906:7;15902:23;15898:32;15895:52;;;15943:1;15940;15933:12;15895:52;-1:-1:-1;;15966:23:44;;;16036:2;16021:18;;;16008:32;;-1:-1:-1;15798:248:44:o;16290:461::-;16552:1;16548;16543:3;16539:11;16535:19;16527:6;16523:32;16512:9;16505:51;16592:6;16587:2;16576:9;16572:18;16565:34;16635:6;16630:2;16619:9;16615:18;16608:34;16678:3;16673:2;16662:9;16658:18;16651:31;16486:4;16699:46;16740:3;16729:9;16725:19;16717:6;16699:46;:::i;:::-;16691:54;16290:461;-1:-1:-1;;;;;;16290:461:44:o;16756:161::-;16821:5;16866:3;16857:6;16852:3;16848:16;16844:26;16841:46;;;16883:1;16880;16873:12;16841:46;-1:-1:-1;16905:6:44;16756:161;-1:-1:-1;16756:161:44:o;16922:367::-;17014:6;17067:2;17055:9;17046:7;17042:23;17038:32;17035:52;;;17083:1;17080;17073:12;17035:52;17123:9;17110:23;-1:-1:-1;;;;;17148:6:44;17145:30;17142:50;;;17188:1;17185;17178:12;17142:50;17211:72;17275:7;17266:6;17255:9;17251:22;17211:72;:::i;17294:183::-;17354:4;-1:-1:-1;;;;;17379:6:44;17376:30;17373:56;;;17409:18;;:::i;:::-;-1:-1:-1;17454:1:44;17450:14;17466:4;17446:25;;17294:183::o;17482:662::-;17536:5;17589:3;17582:4;17574:6;17570:17;17566:27;17556:55;;17607:1;17604;17597:12;17556:55;17643:6;17630:20;17669:4;17693:60;17709:43;17749:2;17709:43;:::i;:::-;17693:60;:::i;:::-;17787:15;;;17873:1;17869:10;;;;17857:23;;17853:32;;;17818:12;;;;17897:15;;;17894:35;;;17925:1;17922;17915:12;17894:35;17961:2;17953:6;17949:15;17973:142;17989:6;17984:3;17981:15;17973:142;;;18055:17;;18043:30;;18093:12;;;;18006;;17973:142;;;-1:-1:-1;18133:5:44;17482:662;-1:-1:-1;;;;;;17482:662:44:o;18149:348::-;18233:6;18286:2;18274:9;18265:7;18261:23;18257:32;18254:52;;;18302:1;18299;18292:12;18254:52;18342:9;18329:23;-1:-1:-1;;;;;18367:6:44;18364:30;18361:50;;;18407:1;18404;18397:12;18361:50;18430:61;18483:7;18474:6;18463:9;18459:22;18430:61;:::i;18684:127::-;18745:10;18740:3;18736:20;18733:1;18726:31;18776:4;18773:1;18766:15;18800:4;18797:1;18790:15;18816:249;18966:2;18951:18;;18999:1;18988:13;;18978:47;;19005:18;;:::i;:::-;19034:25;;;18816:249;:::o;19070:1038::-;19261:2;19250:9;19243:21;19224:4;19300:1;19296;19291:3;19287:11;19283:19;19357:2;19348:6;19342:13;19338:22;19333:2;19322:9;19318:18;19311:50;19429:2;19421:6;19417:15;19411:22;19404:30;19397:38;19392:2;19381:9;19377:18;19370:66;19483:2;19475:6;19471:15;19465:22;19523:4;19518:2;19507:9;19503:18;19496:32;19551:52;19598:3;19587:9;19583:19;19569:12;19551:52;:::i;:::-;19537:66;;19675:2;19668;19660:6;19656:15;19650:22;19644:29;19640:38;19634:3;19623:9;19619:19;19612:67;19728:3;19720:6;19716:16;19710:23;19688:45;;19756:2;19752:7;19824:2;19812:9;19804:6;19800:22;19796:31;19790:3;19779:9;19775:19;19768:60;19851:54;19898:6;19882:14;19851:54;:::i;:::-;19837:68;;19954:3;19946:6;19942:16;19936:23;19914:45;;20025:2;20013:9;20005:6;20001:22;19997:31;19990:4;19979:9;19975:20;19968:61;;20046:56;20095:6;20079:14;20046:56;:::i;20113:486::-;20174:5;20222:4;20210:9;20205:3;20201:19;20197:30;20194:50;;;20240:1;20237;20230:12;20194:50;20273:2;20267:9;20315:4;20307:6;20303:17;20386:6;20374:10;20371:22;-1:-1:-1;;;;;20338:10:44;20335:34;20332:62;20329:88;;;20397:18;;:::i;:::-;20433:2;20426:22;20466:6;-1:-1:-1;20466:6:44;20496:23;;20528:33;20496:23;20528:33;:::i;:::-;20570:23;;20113:486;;-1:-1:-1;;20113:486:44:o;20604:737::-;20658:5;20711:3;20704:4;20696:6;20692:17;20688:27;20678:55;;20729:1;20726;20719:12;20678:55;20765:6;20752:20;20791:4;20815:60;20831:43;20871:2;20831:43;:::i;20815:60::-;20909:15;;;20995:1;20991:10;;;;20979:23;;20975:32;;;20940:12;;;;21019:15;;;21016:35;;;21047:1;21044;21037:12;21016:35;21083:2;21075:6;21071:15;21095:217;21111:6;21106:3;21103:15;21095:217;;;21191:3;21178:17;21208:31;21233:5;21208:31;:::i;:::-;21252:18;;21290:12;;;;21128;;21095:217;;21346:625;21405:5;21453:4;21441:9;21436:3;21432:19;21428:30;21425:50;;;21471:1;21468;21461:12;21425:50;21504:4;21498:11;21548:4;21540:6;21536:17;-1:-1:-1;;;;;21640:6:44;21628:10;21625:22;21620:2;21608:10;21605:18;21602:46;21599:72;;;21651:18;;:::i;:::-;21693:10;21687:4;21680:24;21722:6;21713:15;;21764:9;21751:23;21737:37;;21797:2;21789:6;21786:14;21783:34;;;21813:1;21810;21803:12;21783:34;;21841:57;21894:3;21885:6;21874:9;21870:22;21841:57;:::i;:::-;21833:6;21826:73;;21960:2;21949:9;21945:18;21932:32;21927:2;21919:6;21915:15;21908:57;;21346:625;;;;:::o;21976:1518::-;22037:5;22085:4;22073:9;22068:3;22064:19;22060:30;22057:50;;;22103:1;22100;22093:12;22057:50;22125:22;;:::i;:::-;22116:31;;22183:9;22170:23;-1:-1:-1;;;;;22253:2:44;22245:6;22242:14;22239:34;;;22269:1;22266;22259:12;22239:34;22296:57;22349:3;22340:6;22329:9;22325:22;22296:57;:::i;:::-;22289:5;22282:72;22373:2;22363:12;;22428:2;22417:9;22413:18;22400:32;22457:2;22447:8;22444:16;22441:36;;;22473:1;22470;22463:12;22441:36;22496:24;;22551:4;22543:13;;22539:23;-1:-1:-1;22529:51:44;;22576:1;22573;22566:12;22529:51;22612:2;22599:16;22635:60;22651:43;22691:2;22651:43;:::i;22635:60::-;22729:15;;;22811:1;22807:10;;;;22799:19;;22795:28;;;22760:12;;;;22835:15;;;22832:35;;;22863:1;22860;22853:12;22832:35;22895:2;22891;22887:11;22907:349;22923:6;22918:3;22915:15;22907:349;;;23009:3;22996:17;23045:2;23032:11;23029:19;23026:109;;;23089:1;23118:2;23114;23107:14;23026:109;23160:53;23209:3;23204:2;23190:11;23186:2;23182:20;23178:29;23160:53;:::i;:::-;23148:66;;-1:-1:-1;23234:12:44;;;;22940;;22907:349;;;22911:3;23288:5;23283:2;23276:5;23272:14;23265:29;;;;;23347:2;23336:9;23332:18;23319:32;23303:48;;23376:2;23366:8;23363:16;23360:36;;;23392:1;23389;23382:12;23360:36;;23428:59;23483:3;23472:8;23461:9;23457:24;23428:59;:::i;:::-;23423:2;23416:5;23412:14;23405:83;;21976:1518;;;;:::o;23499:998::-;23558:5;23606:4;23594:9;23589:3;23585:19;23581:30;23578:50;;;23624:1;23621;23614:12;23578:50;23646:22;;:::i;:::-;23637:31;;23691:29;23710:9;23691:29;:::i;:::-;23684:5;23677:44;23753:35;23784:2;23773:9;23769:18;23753:35;:::i;:::-;23748:2;23741:5;23737:14;23730:59;23840:2;23829:9;23825:18;23812:32;-1:-1:-1;;;;;23904:2:44;23896:6;23893:14;23890:34;;;23920:1;23917;23910:12;23890:34;23956:46;23998:3;23989:6;23978:9;23974:22;23956:46;:::i;:::-;23951:2;23944:5;23940:14;23933:70;24035:57;24088:3;24083:2;24072:9;24068:18;24035:57;:::i;:::-;24030:2;24023:5;24019:14;24012:81;24146:3;24135:9;24131:19;24118:33;24102:49;;24176:2;24166:8;24163:16;24160:36;;;24192:1;24189;24182:12;24160:36;24229:61;24286:3;24275:8;24264:9;24260:24;24229:61;:::i;:::-;24223:3;24216:5;24212:15;24205:86;24344:3;24333:9;24329:19;24316:33;24300:49;;24374:2;24364:8;24361:16;24358:36;;;24390:1;24387;24380:12;24358:36;;24427:63;24486:3;24475:8;24464:9;24460:24;24427:63;:::i;:::-;24421:3;24414:5;24410:15;24403:88;;23499:998;;;;:::o;24502:356::-;24592:6;24645:2;24633:9;24624:7;24620:23;24616:32;24613:52;;;24661:1;24658;24651:12;24613:52;24701:9;24688:23;-1:-1:-1;;;;;24726:6:44;24723:30;24720:50;;;24766:1;24763;24756:12;24720:50;24789:63;24844:7;24835:6;24824:9;24820:22;24789:63;:::i;24863:437::-;24949:6;24957;25010:2;24998:9;24989:7;24985:23;24981:32;24978:52;;;25026:1;25023;25016:12;24978:52;25066:9;25053:23;-1:-1:-1;;;;;25091:6:44;25088:30;25085:50;;;25131:1;25128;25121:12;25085:50;25170:70;25232:7;25223:6;25212:9;25208:22;25170:70;:::i;:::-;25259:8;;25144:96;;-1:-1:-1;24863:437:44;-1:-1:-1;;;;24863:437:44:o;25580:703::-;25708:6;25716;25724;25777:2;25765:9;25756:7;25752:23;25748:32;25745:52;;;25793:1;25790;25783:12;25745:52;25833:9;25820:23;-1:-1:-1;;;;;25903:2:44;25895:6;25892:14;25889:34;;;25919:1;25916;25909:12;25889:34;25942:72;26006:7;25997:6;25986:9;25982:22;25942:72;:::i;:::-;25932:82;;26067:2;26056:9;26052:18;26039:32;26023:48;;26096:2;26086:8;26083:16;26080:36;;;26112:1;26109;26102:12;26080:36;;26151:72;26215:7;26204:8;26193:9;26189:24;26151:72;:::i;26288:380::-;26367:1;26363:12;;;;26410;;;26431:61;;26485:4;26477:6;26473:17;26463:27;;26431:61;26538:2;26530:6;26527:14;26507:18;26504:38;26501:161;;26584:10;26579:3;26575:20;26572:1;26565:31;26619:4;26616:1;26609:15;26647:4;26644:1;26637:15;26799:545;26901:2;26896:3;26893:11;26890:448;;;26937:1;26962:5;26958:2;26951:17;27007:4;27003:2;26993:19;27077:2;27065:10;27061:19;27058:1;27054:27;27048:4;27044:38;27113:4;27101:10;27098:20;27095:47;;;-1:-1:-1;27136:4:44;27095:47;27191:2;27186:3;27182:12;27179:1;27175:20;27169:4;27165:31;27155:41;;27246:82;27264:2;27257:5;27254:13;27246:82;;;27309:17;;;27290:1;27279:13;27246:82;;;27250:3;;;26799:545;;;:::o;27520:1352::-;27646:3;27640:10;-1:-1:-1;;;;;27665:6:44;27662:30;27659:56;;;27695:18;;:::i;:::-;27724:97;27814:6;27774:38;27806:4;27800:11;27774:38;:::i;:::-;27768:4;27724:97;:::i;:::-;27876:4;;27940:2;27929:14;;27957:1;27952:663;;;;28659:1;28676:6;28673:89;;;-1:-1:-1;28728:19:44;;;28722:26;28673:89;-1:-1:-1;;27477:1:44;27473:11;;;27469:24;27465:29;27455:40;27501:1;27497:11;;;27452:57;28775:81;;27922:944;;27952:663;26746:1;26739:14;;;26783:4;26770:18;;-1:-1:-1;;27988:20:44;;;28106:236;28120:7;28117:1;28114:14;28106:236;;;28209:19;;;28203:26;28188:42;;28301:27;;;;28269:1;28257:14;;;;28136:19;;28106:236;;;28110:3;28370:6;28361:7;28358:19;28355:201;;;28431:19;;;28425:26;-1:-1:-1;;28514:1:44;28510:14;;;28526:3;28506:24;28502:37;28498:42;28483:58;28468:74;;28355:201;-1:-1:-1;;;;;28602:1:44;28586:14;;;28582:22;28569:36;;-1:-1:-1;27520:1352:44:o;28877:127::-;28938:10;28933:3;28929:20;28926:1;28919:31;28969:4;28966:1;28959:15;28993:4;28990:1;28983:15;29009:125;29074:9;;;29095:10;;;29092:36;;;29108:18;;:::i;29438:127::-;29499:10;29494:3;29490:20;29487:1;29480:31;29530:4;29527:1;29520:15;29554:4;29551:1;29544:15;29570:135;29609:3;29630:17;;;29627:43;;29650:18;;:::i;:::-;-1:-1:-1;29697:1:44;29686:13;;29570:135::o;29710:128::-;29777:9;;;29798:11;;;29795:37;;;29812:18;;:::i;29843:210::-;29957:9;29994:53;30032:14;30025:5;29994:53;:::i;30367:246::-;30514:2;30499:18;;30547:1;30536:13;;30526:47;;30553:18;;:::i;30618:655::-;30786:2;30838:21;;;30908:13;;30811:18;;;30930:22;;;30757:4;30995:17;;;31035:16;;;30757:4;;30786:2;30983;30968:18;;;30757:4;31079:168;31093:6;31090:1;31087:13;31079:168;;;31154:13;;31142:26;;31235:1;31223:14;;;;31188:12;;;;31108:9;31079:168;;31649:217;31689:1;31715;31705:132;;31759:10;31754:3;31750:20;31747:1;31740:31;31794:4;31791:1;31784:15;31822:4;31819:1;31812:15;31705:132;-1:-1:-1;31851:9:44;;31649:217::o;31871:168::-;31944:9;;;31975;;31992:15;;;31986:22;;31972:37;31962:71;;32013:18;;:::i;32654:388::-;32841:25;;;-1:-1:-1;;;;;32902:32:44;;32897:2;32882:18;;32875:60;32971:2;32966;32951:18;;32944:30;;;-1:-1:-1;;32991:45:44;;33017:18;;33009:6;32991:45;:::i;34042:127::-;34103:10;34098:3;34094:20;34091:1;34084:31;34134:4;34131:1;34124:15;34158:4;34155:1;34148:15","linkReferences":{}},"methodIdentifiers":{"AMOUNT_FOR_SUMBITTER_PROOF()":"347cf665","JK_LABS_ADDRESS()":"eef18e17","MAX_FIELDS_METADATA_LENGTH()":"b382543f","METADATAS_COUNT()":"4d24a67f","addressSubmitterVerified(address)":"cb853950","addressTotalCastVoteCounts(address)":"a1ac6cb2","addressTotalVotes(address)":"dea5f6a6","addressTotalVotesVerified(address)":"930de979","addressesThatHaveVoted(uint256)":"50c4b616","allProposalTotalVotes()":"50a5e524","cancel()":"ea8a1af0","canceled()":"3f9942ff","castVote(uint256,uint8,uint256,uint256,bytes32[])":"419c533c","castVoteWithoutProof(uint256,uint8,uint256)":"65f16263","checkProof(address,uint256,bytes32[],bool)":"32763c22","comment(uint256,string)":"1805c523","commentIds(uint256)":"f5c36411","commentIsDeleted(uint256)":"ae66b8ad","comments(uint256)":"8ebb4c15","contestAddressTotalVotesCast(address)":"aec116b6","contestDeadline()":"262e59e9","contestStart()":"004114a8","costToPropose()":"6ed815ad","costToVote()":"51a41dec","creator()":"02d05d3f","creatorSplitDestination()":"4a587ad4","deleteComments(uint256[])":"ac67f801","deleteProposals(uint256[])":"f0a7db0a","deletedCommentIds(uint256)":"3fb57c92","deletedProposalIds(uint256)":"05846cae","downvotingAllowed()":"60506ff6","forVotesToProposalIds(uint256,uint256)":"711effc8","getAllAddressesThatHaveVoted()":"2c39805f","getAllAuthorsOfDeletedProposals()":"cbdc27cb","getAllCommentIds()":"e11db9d8","getAllDeletedCommentIds()":"5cb718a1","getAllDeletedProposalIds()":"1242b737","getAllProposalAuthors()":"946369b5","getAllProposalIds()":"efa90d36","getComment(uint256)":"0800e300","getNumProposalsWithThisManyForVotes(uint256)":"9ba197af","getOnlyProposalIdWithThisManyForVotes(uint256)":"b66d1da3","getProposal(uint256)":"c7f758a8","getProposalComments(uint256)":"c05f4104","getProposalsWithThisManyForVotes(uint256)":"c9a1b6b2","getRankIndex(uint256)":"5c7107d8","getSortedRanks()":"6fd3636b","hashComment((address,uint256,uint256,string))":"409fd030","hashProposal((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":"d7989025","isOrIsBelowTiedRank(uint256)":"9174778c","jkLabsSplitDestination()":"102613d8","maxProposalCount()":"fb9bf8d4","metadataFieldsSchema()":"60ed97a9","name()":"06fdde03","numAllowedProposalSubmissions()":"832009af","numSubmissions(address)":"75e509c5","officialRewardsModule()":"785ddfe5","payPerVote()":"03f7eed6","percentageToCreator()":"edcd1be4","prompt()":"7c65d711","proposalAddressVotes(uint256,address)":"6e4eb810","proposalAddressesHaveVoted(uint256)":"b323580d","proposalAuthors(uint256)":"0aa25e44","proposalComments(uint256,uint256)":"f61736f4","proposalIds(uint256)":"9b644a23","proposalIsDeleted(uint256)":"f79c0172","proposalVotes(uint256)":"544ffc9c","proposalVotesStructs(uint256)":"070dc5d9","proposals(uint256)":"013cf08b","propose((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])),bytes32[])":"f823f110","proposeWithoutProof((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":"ab5e6947","rankLimit()":"0414126a","setCreatorSplitDestination(address)":"146230f6","setOfficialRewardsModule(address)":"f4f3d7ec","setSubmissionMerkleRoot(bytes32)":"daf762db","setVotingMerkleRoot(bytes32)":"544c7bb4","sortedRanks(uint256)":"325cc6d9","sortingEnabled()":"366ecf5b","state()":"c19d93fb","submissionMerkleRoot()":"bddc1641","totalVotesCast()":"7de418d5","validateProposalData((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":"d140d9f0","verifyProposer(address,bytes32[])":"20b3e845","verifyVoter(address,uint256,bytes32[])":"531bd812","version()":"54fd4d50","voteStart()":"e031535b","votingDelay()":"3932abb1","votingMerkleRoot()":"dd96a19d","votingPeriod()":"02a251a3"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_prompt\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"_submissionMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_votingMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"contestStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numAllowedProposalSubmissions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxProposalCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"downvotingAllowed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sortingEnabled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rankLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"percentageToCreator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"costToPropose\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"costToVote\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"payPerVote\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.IntConstructorArgs\",\"name\":\"intConstructorArgs\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"creatorSplitDestination\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jkLabsSplitDestination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadataFieldsSchema\",\"type\":\"string\"}],\"internalType\":\"struct Governor.ConstructorArgs\",\"name\":\"_constructorArgs\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AddressFieldMetadataArrayTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AddressNotPermissionedToSubmit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AuthorIsNotSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotDeleteWhenCompleted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotUpdateAfterCompleted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotVoteLessThanOneVoteInPayPerVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotVoteOnDeletedProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContestAlreadyCancelled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum Governor.ContestState\",\"name\":\"currentState\",\"type\":\"uint8\"}],\"name\":\"ContestMustBeActiveToVote\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum Governor.ContestState\",\"name\":\"currentState\",\"type\":\"uint8\"}],\"name\":\"ContestMustBeQueuedToPropose\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxProposalCount\",\"type\":\"uint256\"}],\"name\":\"ContestSubmissionLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DownvotingNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"DuplicateSubmission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyProposalDescription\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"costToVote\",\"type\":\"uint256\"}],\"name\":\"IncorrectCostSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexHasNotBeenPopulated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVoteType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MoreThanOneProposalWithThisManyVotes\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NeedAtLeastOneVoteToVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NeedToSubmitWithProofFirst\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NeedToVoteWithProofFirst\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughVotesLeft\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInMerkle\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCreatorCanAmend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCreatorCanDelete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCreatorCanSetRewardsModule\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"failedToDeleteCommentId\",\"type\":\"uint256\"}],\"name\":\"OnlyCreatorOrAuthorCanDeleteComments\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJkLabsCanAmend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJkLabsOrCreatorCanCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PayPerVoteMustBeEnabledForAnyoneCanVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RankCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RankIsNotInSortedRanks\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numAllowedProposalSubmissions\",\"type\":\"uint256\"}],\"name\":\"SenderSubmissionLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SortingAndDownvotingCannotBothBeEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StringFieldMetadataArrayTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UintFieldMetadataArrayTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum Governor.Metadatas\",\"name\":\"unexpectedMetadata\",\"type\":\"uint8\"}],\"name\":\"UnexpectedMetadata\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroSignersInSafeMetadata\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroThresholdInSafeMetadata\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"commentId\",\"type\":\"uint256\"}],\"name\":\"CommentCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"commentIds\",\"type\":\"uint256[]\"}],\"name\":\"CommentsDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ContestCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CreatorPaymentReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"JkLabsPaymentReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"prompt\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"contestStart\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"}],\"name\":\"JokeraceCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract RewardsModule\",\"name\":\"oldOfficialRewardsModule\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract RewardsModule\",\"name\":\"newOfficialRewardsModule\",\"type\":\"address\"}],\"name\":\"OfficialRewardsModuleSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"proposalDescription\",\"type\":\"string\"}],\"name\":\"ProposalCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"proposalIds\",\"type\":\"uint256[]\"}],\"name\":\"ProposalsDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numVotes\",\"type\":\"uint256\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMOUNT_FOR_SUMBITTER_PROOF\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"JK_LABS_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_FIELDS_METADATA_LENGTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"METADATAS_COUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressSubmitterVerified\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressTotalCastVoteCounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressTotalVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressTotalVotesVerified\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"addressesThatHaveVoted\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allProposalTotalVotes\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"proposalIdsReturn\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"}],\"internalType\":\"struct GovernorCountingSimple.VoteCounts[]\",\"name\":\"proposalVoteCountsArrayReturn\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"canceled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"totalVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numVotes\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"castVote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"numVotes\",\"type\":\"uint256\"}],\"name\":\"castVoteWithoutProof\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressToCheck\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bool\",\"name\":\"voting\",\"type\":\"bool\"}],\"name\":\"checkProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"verified\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"commentContent\",\"type\":\"string\"}],\"name\":\"comment\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"commentIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"commentIsDeleted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"comments\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"commentContent\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"}],\"name\":\"contestAddressTotalVotesCast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"userTotalVotesCast\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contestDeadline\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contestStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"costToPropose\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"costToVote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creatorSplitDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"commentIdsParam\",\"type\":\"uint256[]\"}],\"name\":\"deleteComments\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"proposalIdsToDelete\",\"type\":\"uint256[]\"}],\"name\":\"deleteProposals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deletedCommentIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deletedProposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"downvotingAllowed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"forVotesToProposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAddressesThatHaveVoted\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorsOfDeletedProposals\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllCommentIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllDeletedCommentIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllDeletedProposalIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllProposalAuthors\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllProposalIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"commentId\",\"type\":\"uint256\"}],\"name\":\"getComment\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"commentContent\",\"type\":\"string\"}],\"internalType\":\"struct GovernorEngagement.CommentCore\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"}],\"name\":\"getNumProposalsWithThisManyForVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"}],\"name\":\"getOnlyProposalIdWithThisManyForVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"getProposal\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"getProposalComments\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"}],\"name\":\"getProposalsWithThisManyForVotes\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"proposalsWithThisManyForVotes\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rank\",\"type\":\"uint256\"}],\"name\":\"getRankIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rankIndex\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSortedRanks\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"sortedRanksArray\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"commentContent\",\"type\":\"string\"}],\"internalType\":\"struct GovernorEngagement.CommentCore\",\"name\":\"commentObj\",\"type\":\"tuple\"}],\"name\":\"hashComment\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"proposal\",\"type\":\"tuple\"}],\"name\":\"hashProposal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"isOrIsBelowTiedRank\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"atOrBelowTiedRank\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jkLabsSplitDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxProposalCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"metadataFieldsSchema\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numAllowedProposalSubmissions\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"numSubmissions\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"officialRewardsModule\",\"outputs\":[{\"internalType\":\"contract RewardsModule\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payPerVote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"percentageToCreator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prompt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"}],\"name\":\"proposalAddressVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"proposalAddressesHaveVoted\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalAuthors\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalComments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalIsDeleted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"proposalVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalVotesStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"}],\"internalType\":\"struct GovernorCountingSimple.VoteCounts\",\"name\":\"proposalVoteCounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposals\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"proposal\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"propose\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"proposal\",\"type\":\"tuple\"}],\"name\":\"proposeWithoutProof\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rankLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newCreatorSplitDestination\",\"type\":\"address\"}],\"name\":\"setCreatorSplitDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract RewardsModule\",\"name\":\"officialRewardsModule_\",\"type\":\"address\"}],\"name\":\"setOfficialRewardsModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newSubmissionMerkleRoot\",\"type\":\"bytes32\"}],\"name\":\"setSubmissionMerkleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newVotingMerkleRoot\",\"type\":\"bytes32\"}],\"name\":\"setVotingMerkleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sortedRanks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sortingEnabled\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"internalType\":\"enum Governor.ContestState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submissionMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalVotesCast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"proposal\",\"type\":\"tuple\"}],\"name\":\"validateProposalData\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"verifyProposer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalVotes\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"verifyVoter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"voteStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"CommentCreated(uint256)\":{\"details\":\"Emitted when a comment is created.\"},\"CommentsDeleted(uint256[])\":{\"details\":\"Emitted when comments are deleted.\"}},\"kind\":\"dev\",\"methods\":{\"allProposalTotalVotes()\":{\"details\":\"Accessor to the internal vote counts for a given proposal.\"},\"cancel()\":{\"details\":\"Cancels the contest. Emits a {IGovernor-ContestCanceled} event.\"},\"castVote(uint256,uint8,uint256,uint256,bytes32[])\":{\"details\":\"Cast a vote with a merkle proof.\"},\"castVoteWithoutProof(uint256,uint8,uint256)\":{\"details\":\"Cast a vote without a proof if you have already voted with a proof.\"},\"checkProof(address,uint256,bytes32[],bool)\":{\"params\":{\"addressToCheck\":\"address of participant\",\"amount\":\"to check that the participant has the correct amount\",\"proof\":\"merkle proof to prove address and amount are in tree\",\"voting\":\"true if this is for a voting proof, false if this is for a submission proof\"}},\"comment(uint256,string)\":{\"details\":\"Comment on a proposal. Emits a {CommentCreated} event.\"},\"contestAddressTotalVotesCast(address)\":{\"details\":\"Accessor to how many votes an address has cast total for the contest so far.\"},\"contestDeadline()\":{\"details\":\"Returns if a proposal has been deleted or not.\"},\"deleteComments(uint256[])\":{\"details\":\"Delete comments. Emits a {CommentsDeleted} event.\"},\"deleteProposals(uint256[])\":{\"details\":\"Delete proposals. Emits a {IGovernor-ProposalsDeleted} event.\"},\"getAllAddressesThatHaveVoted()\":{\"details\":\"Return all addresses that have voted.\"},\"getAllAuthorsOfDeletedProposals()\":{\"details\":\"Return all authors of deleted proposals.\"},\"getAllCommentIds()\":{\"details\":\"Return all commentIds.\"},\"getAllDeletedCommentIds()\":{\"details\":\"Return all deleted commentIds.\"},\"getAllDeletedProposalIds()\":{\"details\":\"Return all deleted proposals.\"},\"getAllProposalAuthors()\":{\"details\":\"Return all proposal authors.\"},\"getAllProposalIds()\":{\"details\":\"Return all proposals.\"},\"getComment(uint256)\":{\"details\":\"Return a comment object.\"},\"getNumProposalsWithThisManyForVotes(uint256)\":{\"details\":\"Get the number of proposals that have `forVotes` number of for votes.\"},\"getOnlyProposalIdWithThisManyForVotes(uint256)\":{\"details\":\"Get the only proposal id with this many for votes. NOTE: Should only get called at a point at which you are sure there is only one proposal id with a certain number of forVotes (we only use it in the RewardsModule after ties have been checked for).\"},\"getProposal(uint256)\":{\"details\":\"Retrieve proposal data.\"},\"getProposalComments(uint256)\":{\"details\":\"Return the array of commentIds on a given proposalId.\"},\"getProposalsWithThisManyForVotes(uint256)\":{\"details\":\"Get the whole array in `forVotesToProposalIds` for a given `forVotes` amount.\"},\"getRankIndex(uint256)\":{\"details\":\"Get the idx of sortedRanks considered to hold the queried rank taking deleted proposals into account. A rank has to have > 0 votes to be considered valid.\"},\"getSortedRanks()\":{\"details\":\"Get the sortedRanks array.\"},\"hashComment((address,uint256,uint256,string))\":{\"details\":\"Hashing function used to build the comment id from the comment details.\"},\"isOrIsBelowTiedRank(uint256)\":{\"details\":\"Returns whether a given index in sortedRanks is tied or is below a tied rank.\"},\"proposalAddressVotes(uint256,address)\":{\"details\":\"Accessor to how many votes an address has cast for a given proposal.\"},\"proposalAddressesHaveVoted(uint256)\":{\"details\":\"Accessor to which addresses have cast a vote for a given proposal.\"},\"proposalVotes(uint256)\":{\"details\":\"Accessor to the internal vote counts for a given proposal.\"},\"propose((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])),bytes32[])\":{\"details\":\"Create a new proposal.\"},\"proposeWithoutProof((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))\":{\"details\":\"Create a new proposal without a proof if you have already proposed with a proof.\"},\"setOfficialRewardsModule(address)\":{\"details\":\"Get the official rewards module contract for this contest (effectively reverse record).\"},\"validateProposalData((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))\":{\"details\":\"Verifies that all of the metadata in the proposal is valid.\"},\"verifyProposer(address,bytes32[])\":{\"details\":\"Verifies that `account` is permissioned to propose via merkle proof.\"},\"verifyVoter(address,uint256,bytes32[])\":{\"details\":\"Verifies that `account` is permissioned to vote with `totalVotes` via merkle proof.\"},\"voteStart()\":{\"details\":\"Timestamp the contest vote begins. Votes open at the end of this block, so it is possible to propose during this block.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"NotInMerkle()\":[{\"notice\":\"Thrown if address/amount are not part of Merkle tree\"}]},\"kind\":\"user\",\"methods\":{\"checkProof(address,uint256,bytes32[],bool)\":{\"notice\":\"Allows checking of proofs for an address\"},\"submissionMerkleRoot()\":{\"notice\":\"Participant inclusion roots\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Contest.sol\":\"Contest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71\",\"dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68\",\"dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04\",\"dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"src/Contest.sol\":{\"keccak256\":\"0x0cbc5d92e6f07f4fda4299bfc475a52fc8baa348986f26715fd7a13e3c9d52fd\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://b0367c3d5fe1ff0a7b3f53b4969498e3795a925c5a853e9aa2139d74b737e99c\",\"dweb:/ipfs/Qmc3MpoXwjz4DNUxHPr5WRGo1M9tpdRwc1Pu5hbbEeTW85\"]},\"src/governance/Governor.sol\":{\"keccak256\":\"0x513a5f9a1fd1654d6337ae26a3a8dcc06c1a26d1b3144cf17c926b57b7afd0d9\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://b60aef5596edf2bd87c2a2222a70affd6b96032bb6e9b19e75d50eefc3b31e45\",\"dweb:/ipfs/QmVYxa7EZvvYzmfNWMxR8enKYfpCJdezMXzwn3uTLWQome\"]},\"src/governance/extensions/GovernorCountingSimple.sol\":{\"keccak256\":\"0x926939a083bcb63478d84c9f13c87f34dbd9aa248f2257f9cd1bc6a2e8a26b24\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://966641c9ea61d00b1a536158fb57b091d4687204b5a77a2dbc2b664067a035e0\",\"dweb:/ipfs/Qmd3cfwmg4nqkXCew8nrDsEMR2qe9YFAdFXs8q45LcswiQ\"]},\"src/governance/extensions/GovernorEngagement.sol\":{\"keccak256\":\"0xa1aeabd1c062378f8176707d55601dfe64e3fcc71b4d10c6a3f19f332f4bf7f5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://62057ab67e44db7596ed2cc52966ee71fb1b45dcdccb9aa372b819cb44e97229\",\"dweb:/ipfs/QmZMTyYtK5jZFFZjmfQ3QeTxbaMZxWDawp7J9qbfSgnAHQ\"]},\"src/governance/extensions/GovernorModuleRegistry.sol\":{\"keccak256\":\"0xfa31daaf9d0dbeebd6fddbd13194cc0300eb02b63a07ff70ed3d823dc514a171\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://92cf3840c51124707053c65d4cbc0d0ffc9baff14fd0a66582481d0b1e3d7257\",\"dweb:/ipfs/QmT6eN74UBnrx1cWwo8eHDZ9pjefCtpUTRFJg5YbbVrF3u\"]},\"src/governance/utils/GovernorMerkleVotes.sol\":{\"keccak256\":\"0x02d81049154ff4a8c009126a7470c9f49d076a534576a6fc3fe3f8de2c5cd608\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://21056ce53dd97ffff192a7834bd0ea2cc7691fce7e90e8c7943a9213242ba28a\",\"dweb:/ipfs/QmNzbxrT8Q2FLLQkdNUAKZyZzy4QMGm4zQsdWePWk1sxDb\"]},\"src/governance/utils/GovernorSorting.sol\":{\"keccak256\":\"0xde18aec0c9ebe63b6e210e03151770b4e470fafe53390227244615ffd9b86ad5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d02b203d82cb2773a2a97850533d67dee9e3c729475cb438c2e625c71b15a7d5\",\"dweb:/ipfs/QmXsa98RbxoxfZqRAJmP6Sw8uTYssv3HcTyKzYBtXhQE1H\"]},\"src/modules/RewardsModule.sol\":{\"keccak256\":\"0xba71e0faff9f20449747482feeade015a034344e2a7765342b6525b9b48e6bb1\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://61758df4a8d987f7181976b723c03f6cf0c2f4f780eae45cbd3cd5166beaf9b5\",\"dweb:/ipfs/QmbERf6dSDwuqQiS5JQepq1zNQXQqHmudnZMVrubTsnYSf\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_prompt","type":"string"},{"internalType":"bytes32","name":"_submissionMerkleRoot","type":"bytes32"},{"internalType":"bytes32","name":"_votingMerkleRoot","type":"bytes32"},{"internalType":"struct Governor.ConstructorArgs","name":"_constructorArgs","type":"tuple","components":[{"internalType":"struct Governor.IntConstructorArgs","name":"intConstructorArgs","type":"tuple","components":[{"internalType":"uint256","name":"contestStart","type":"uint256"},{"internalType":"uint256","name":"votingDelay","type":"uint256"},{"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"internalType":"uint256","name":"numAllowedProposalSubmissions","type":"uint256"},{"internalType":"uint256","name":"maxProposalCount","type":"uint256"},{"internalType":"uint256","name":"downvotingAllowed","type":"uint256"},{"internalType":"uint256","name":"sortingEnabled","type":"uint256"},{"internalType":"uint256","name":"rankLimit","type":"uint256"},{"internalType":"uint256","name":"percentageToCreator","type":"uint256"},{"internalType":"uint256","name":"costToPropose","type":"uint256"},{"internalType":"uint256","name":"costToVote","type":"uint256"},{"internalType":"uint256","name":"payPerVote","type":"uint256"}]},{"internalType":"address","name":"creatorSplitDestination","type":"address"},{"internalType":"address","name":"jkLabsSplitDestination","type":"address"},{"internalType":"string","name":"metadataFieldsSchema","type":"string"}]}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AddressFieldMetadataArrayTooLong"},{"inputs":[],"type":"error","name":"AddressNotPermissionedToSubmit"},{"inputs":[{"internalType":"address","name":"author","type":"address"},{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"AuthorIsNotSender"},{"inputs":[],"type":"error","name":"CannotDeleteWhenCompleted"},{"inputs":[],"type":"error","name":"CannotUpdateAfterCompleted"},{"inputs":[],"type":"error","name":"CannotVoteLessThanOneVoteInPayPerVote"},{"inputs":[],"type":"error","name":"CannotVoteOnDeletedProposal"},{"inputs":[],"type":"error","name":"ContestAlreadyCancelled"},{"inputs":[{"internalType":"enum Governor.ContestState","name":"currentState","type":"uint8"}],"type":"error","name":"ContestMustBeActiveToVote"},{"inputs":[{"internalType":"enum Governor.ContestState","name":"currentState","type":"uint8"}],"type":"error","name":"ContestMustBeQueuedToPropose"},{"inputs":[{"internalType":"uint256","name":"maxProposalCount","type":"uint256"}],"type":"error","name":"ContestSubmissionLimitReached"},{"inputs":[],"type":"error","name":"DownvotingNotEnabled"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"type":"error","name":"DuplicateSubmission"},{"inputs":[],"type":"error","name":"EmptyProposalDescription"},{"inputs":[{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"uint256","name":"costToVote","type":"uint256"}],"type":"error","name":"IncorrectCostSent"},{"inputs":[],"type":"error","name":"IndexHasNotBeenPopulated"},{"inputs":[],"type":"error","name":"InvalidVoteType"},{"inputs":[],"type":"error","name":"MoreThanOneProposalWithThisManyVotes"},{"inputs":[],"type":"error","name":"NeedAtLeastOneVoteToVote"},{"inputs":[],"type":"error","name":"NeedToSubmitWithProofFirst"},{"inputs":[],"type":"error","name":"NeedToVoteWithProofFirst"},{"inputs":[],"type":"error","name":"NotEnoughVotesLeft"},{"inputs":[],"type":"error","name":"NotInMerkle"},{"inputs":[],"type":"error","name":"OnlyCreatorCanAmend"},{"inputs":[],"type":"error","name":"OnlyCreatorCanDelete"},{"inputs":[],"type":"error","name":"OnlyCreatorCanSetRewardsModule"},{"inputs":[{"internalType":"uint256","name":"failedToDeleteCommentId","type":"uint256"}],"type":"error","name":"OnlyCreatorOrAuthorCanDeleteComments"},{"inputs":[],"type":"error","name":"OnlyJkLabsCanAmend"},{"inputs":[],"type":"error","name":"OnlyJkLabsOrCreatorCanCancel"},{"inputs":[],"type":"error","name":"PayPerVoteMustBeEnabledForAnyoneCanVote"},{"inputs":[],"type":"error","name":"RankCannotBeZero"},{"inputs":[],"type":"error","name":"RankIsNotInSortedRanks"},{"inputs":[{"internalType":"uint256","name":"numAllowedProposalSubmissions","type":"uint256"}],"type":"error","name":"SenderSubmissionLimitReached"},{"inputs":[],"type":"error","name":"SortingAndDownvotingCannotBothBeEnabled"},{"inputs":[],"type":"error","name":"StringFieldMetadataArrayTooLong"},{"inputs":[],"type":"error","name":"UintFieldMetadataArrayTooLong"},{"inputs":[{"internalType":"enum Governor.Metadatas","name":"unexpectedMetadata","type":"uint8"}],"type":"error","name":"UnexpectedMetadata"},{"inputs":[],"type":"error","name":"ZeroSignersInSafeMetadata"},{"inputs":[],"type":"error","name":"ZeroThresholdInSafeMetadata"},{"inputs":[{"internalType":"uint256","name":"commentId","type":"uint256","indexed":false}],"type":"event","name":"CommentCreated","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"commentIds","type":"uint256[]","indexed":false}],"type":"event","name":"CommentsDeleted","anonymous":false},{"inputs":[],"type":"event","name":"ContestCanceled","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"CreatorPaymentReleased","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"JkLabsPaymentReleased","anonymous":false},{"inputs":[{"internalType":"string","name":"version","type":"string","indexed":false},{"internalType":"string","name":"name","type":"string","indexed":false},{"internalType":"string","name":"prompt","type":"string","indexed":false},{"internalType":"address","name":"creator","type":"address","indexed":false},{"internalType":"uint256","name":"contestStart","type":"uint256","indexed":false},{"internalType":"uint256","name":"votingDelay","type":"uint256","indexed":false},{"internalType":"uint256","name":"votingPeriod","type":"uint256","indexed":false}],"type":"event","name":"JokeraceCreated","anonymous":false},{"inputs":[{"internalType":"contract RewardsModule","name":"oldOfficialRewardsModule","type":"address","indexed":false},{"internalType":"contract RewardsModule","name":"newOfficialRewardsModule","type":"address","indexed":false}],"type":"event","name":"OfficialRewardsModuleSet","anonymous":false},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256","indexed":false},{"internalType":"address","name":"proposer","type":"address","indexed":false},{"internalType":"string","name":"proposalDescription","type":"string","indexed":false}],"type":"event","name":"ProposalCreated","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"proposalIds","type":"uint256[]","indexed":false}],"type":"event","name":"ProposalsDeleted","anonymous":false},{"inputs":[{"internalType":"address","name":"voter","type":"address","indexed":true},{"internalType":"uint256","name":"proposalId","type":"uint256","indexed":false},{"internalType":"uint8","name":"support","type":"uint8","indexed":false},{"internalType":"uint256","name":"numVotes","type":"uint256","indexed":false}],"type":"event","name":"VoteCast","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"AMOUNT_FOR_SUMBITTER_PROOF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"JK_LABS_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_FIELDS_METADATA_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"METADATAS_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"addressSubmitterVerified","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"addressTotalCastVoteCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"addressTotalVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"addressTotalVotesVerified","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"addressesThatHaveVoted","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"allProposalTotalVotes","outputs":[{"internalType":"uint256[]","name":"proposalIdsReturn","type":"uint256[]"},{"internalType":"struct GovernorCountingSimple.VoteCounts[]","name":"proposalVoteCountsArrayReturn","type":"tuple[]","components":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}]}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"cancel"},{"inputs":[],"stateMutability":"view","type":"function","name":"canceled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint256","name":"totalVotes","type":"uint256"},{"internalType":"uint256","name":"numVotes","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"payable","type":"function","name":"castVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint256","name":"numVotes","type":"uint256"}],"stateMutability":"payable","type":"function","name":"castVoteWithoutProof","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"addressToCheck","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bool","name":"voting","type":"bool"}],"stateMutability":"view","type":"function","name":"checkProof","outputs":[{"internalType":"bool","name":"verified","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"string","name":"commentContent","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"comment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"commentIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"commentIsDeleted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"comments","outputs":[{"internalType":"address","name":"author","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"string","name":"commentContent","type":"string"}]},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"stateMutability":"view","type":"function","name":"contestAddressTotalVotesCast","outputs":[{"internalType":"uint256","name":"userTotalVotesCast","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"contestDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"contestStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"costToPropose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"costToVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"creatorSplitDestination","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256[]","name":"commentIdsParam","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"deleteComments"},{"inputs":[{"internalType":"uint256[]","name":"proposalIdsToDelete","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"deleteProposals"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"deletedCommentIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"deletedProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"downvotingAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"forVotesToProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllAddressesThatHaveVoted","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllAuthorsOfDeletedProposals","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllCommentIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllDeletedCommentIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllDeletedProposalIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllProposalAuthors","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllProposalIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"commentId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getComment","outputs":[{"internalType":"struct GovernorEngagement.CommentCore","name":"","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"string","name":"commentContent","type":"string"}]}]},{"inputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"}],"stateMutability":"view","type":"function","name":"getNumProposalsWithThisManyForVotes","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"}],"stateMutability":"view","type":"function","name":"getOnlyProposalIdWithThisManyForVotes","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getProposal","outputs":[{"internalType":"struct Governor.ProposalCore","name":"","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getProposalComments","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"}],"stateMutability":"view","type":"function","name":"getProposalsWithThisManyForVotes","outputs":[{"internalType":"uint256[]","name":"proposalsWithThisManyForVotes","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"rank","type":"uint256"}],"stateMutability":"view","type":"function","name":"getRankIndex","outputs":[{"internalType":"uint256","name":"rankIndex","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getSortedRanks","outputs":[{"internalType":"uint256[]","name":"sortedRanksArray","type":"uint256[]"}]},{"inputs":[{"internalType":"struct GovernorEngagement.CommentCore","name":"commentObj","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"string","name":"commentContent","type":"string"}]}],"stateMutability":"pure","type":"function","name":"hashComment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Governor.ProposalCore","name":"proposal","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]}],"stateMutability":"pure","type":"function","name":"hashProposal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"stateMutability":"view","type":"function","name":"isOrIsBelowTiedRank","outputs":[{"internalType":"bool","name":"atOrBelowTiedRank","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"jkLabsSplitDestination","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"maxProposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"metadataFieldsSchema","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"numAllowedProposalSubmissions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"numSubmissions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"officialRewardsModule","outputs":[{"internalType":"contract RewardsModule","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"payPerVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"percentageToCreator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"prompt","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"stateMutability":"view","type":"function","name":"proposalAddressVotes","outputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalAddressesHaveVoted","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalAuthors","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalComments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalIsDeleted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalVotes","outputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalVotesStructs","outputs":[{"internalType":"struct GovernorCountingSimple.VoteCounts","name":"proposalVoteCounts","type":"tuple","components":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}]}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposals","outputs":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]},{"inputs":[{"internalType":"struct Governor.ProposalCore","name":"proposal","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"payable","type":"function","name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Governor.ProposalCore","name":"proposal","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]}],"stateMutability":"payable","type":"function","name":"proposeWithoutProof","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rankLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newCreatorSplitDestination","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setCreatorSplitDestination"},{"inputs":[{"internalType":"contract RewardsModule","name":"officialRewardsModule_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setOfficialRewardsModule"},{"inputs":[{"internalType":"bytes32","name":"newSubmissionMerkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"setSubmissionMerkleRoot"},{"inputs":[{"internalType":"bytes32","name":"newVotingMerkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"setVotingMerkleRoot"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"sortedRanks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"sortingEnabled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"state","outputs":[{"internalType":"enum Governor.ContestState","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"submissionMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalVotesCast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Governor.ProposalCore","name":"proposal","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]}],"stateMutability":"view","type":"function","name":"validateProposalData"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"verifyProposer"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"totalVotes","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"verifyVoter"},{"inputs":[],"stateMutability":"pure","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"voteStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"votingMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"allProposalTotalVotes()":{"details":"Accessor to the internal vote counts for a given proposal."},"cancel()":{"details":"Cancels the contest. Emits a {IGovernor-ContestCanceled} event."},"castVote(uint256,uint8,uint256,uint256,bytes32[])":{"details":"Cast a vote with a merkle proof."},"castVoteWithoutProof(uint256,uint8,uint256)":{"details":"Cast a vote without a proof if you have already voted with a proof."},"checkProof(address,uint256,bytes32[],bool)":{"params":{"addressToCheck":"address of participant","amount":"to check that the participant has the correct amount","proof":"merkle proof to prove address and amount are in tree","voting":"true if this is for a voting proof, false if this is for a submission proof"}},"comment(uint256,string)":{"details":"Comment on a proposal. Emits a {CommentCreated} event."},"contestAddressTotalVotesCast(address)":{"details":"Accessor to how many votes an address has cast total for the contest so far."},"contestDeadline()":{"details":"Returns if a proposal has been deleted or not."},"deleteComments(uint256[])":{"details":"Delete comments. Emits a {CommentsDeleted} event."},"deleteProposals(uint256[])":{"details":"Delete proposals. Emits a {IGovernor-ProposalsDeleted} event."},"getAllAddressesThatHaveVoted()":{"details":"Return all addresses that have voted."},"getAllAuthorsOfDeletedProposals()":{"details":"Return all authors of deleted proposals."},"getAllCommentIds()":{"details":"Return all commentIds."},"getAllDeletedCommentIds()":{"details":"Return all deleted commentIds."},"getAllDeletedProposalIds()":{"details":"Return all deleted proposals."},"getAllProposalAuthors()":{"details":"Return all proposal authors."},"getAllProposalIds()":{"details":"Return all proposals."},"getComment(uint256)":{"details":"Return a comment object."},"getNumProposalsWithThisManyForVotes(uint256)":{"details":"Get the number of proposals that have `forVotes` number of for votes."},"getOnlyProposalIdWithThisManyForVotes(uint256)":{"details":"Get the only proposal id with this many for votes. NOTE: Should only get called at a point at which you are sure there is only one proposal id with a certain number of forVotes (we only use it in the RewardsModule after ties have been checked for)."},"getProposal(uint256)":{"details":"Retrieve proposal data."},"getProposalComments(uint256)":{"details":"Return the array of commentIds on a given proposalId."},"getProposalsWithThisManyForVotes(uint256)":{"details":"Get the whole array in `forVotesToProposalIds` for a given `forVotes` amount."},"getRankIndex(uint256)":{"details":"Get the idx of sortedRanks considered to hold the queried rank taking deleted proposals into account. A rank has to have > 0 votes to be considered valid."},"getSortedRanks()":{"details":"Get the sortedRanks array."},"hashComment((address,uint256,uint256,string))":{"details":"Hashing function used to build the comment id from the comment details."},"isOrIsBelowTiedRank(uint256)":{"details":"Returns whether a given index in sortedRanks is tied or is below a tied rank."},"proposalAddressVotes(uint256,address)":{"details":"Accessor to how many votes an address has cast for a given proposal."},"proposalAddressesHaveVoted(uint256)":{"details":"Accessor to which addresses have cast a vote for a given proposal."},"proposalVotes(uint256)":{"details":"Accessor to the internal vote counts for a given proposal."},"propose((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])),bytes32[])":{"details":"Create a new proposal."},"proposeWithoutProof((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":{"details":"Create a new proposal without a proof if you have already proposed with a proof."},"setOfficialRewardsModule(address)":{"details":"Get the official rewards module contract for this contest (effectively reverse record)."},"validateProposalData((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":{"details":"Verifies that all of the metadata in the proposal is valid."},"verifyProposer(address,bytes32[])":{"details":"Verifies that `account` is permissioned to propose via merkle proof."},"verifyVoter(address,uint256,bytes32[])":{"details":"Verifies that `account` is permissioned to vote with `totalVotes` via merkle proof."},"voteStart()":{"details":"Timestamp the contest vote begins. Votes open at the end of this block, so it is possible to propose during this block."}},"version":1},"userdoc":{"kind":"user","methods":{"checkProof(address,uint256,bytes32[],bool)":{"notice":"Allows checking of proofs for an address"},"submissionMerkleRoot()":{"notice":"Participant inclusion roots"}},"version":1}},"settings":{"remappings":["@forge-std/=lib/forge-std/src/","@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Contest.sol":"Contest"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305","urls":["bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5","dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69","urls":["bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71","dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1","urls":["bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68","dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa","urls":["bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931","dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol":{"keccak256":"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac","urls":["bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04","dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad","urls":["bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278","dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH"],"license":"MIT"},"src/Contest.sol":{"keccak256":"0x0cbc5d92e6f07f4fda4299bfc475a52fc8baa348986f26715fd7a13e3c9d52fd","urls":["bzz-raw://b0367c3d5fe1ff0a7b3f53b4969498e3795a925c5a853e9aa2139d74b737e99c","dweb:/ipfs/Qmc3MpoXwjz4DNUxHPr5WRGo1M9tpdRwc1Pu5hbbEeTW85"],"license":"AGPL-3.0-only"},"src/governance/Governor.sol":{"keccak256":"0x513a5f9a1fd1654d6337ae26a3a8dcc06c1a26d1b3144cf17c926b57b7afd0d9","urls":["bzz-raw://b60aef5596edf2bd87c2a2222a70affd6b96032bb6e9b19e75d50eefc3b31e45","dweb:/ipfs/QmVYxa7EZvvYzmfNWMxR8enKYfpCJdezMXzwn3uTLWQome"],"license":"AGPL-3.0-only"},"src/governance/extensions/GovernorCountingSimple.sol":{"keccak256":"0x926939a083bcb63478d84c9f13c87f34dbd9aa248f2257f9cd1bc6a2e8a26b24","urls":["bzz-raw://966641c9ea61d00b1a536158fb57b091d4687204b5a77a2dbc2b664067a035e0","dweb:/ipfs/Qmd3cfwmg4nqkXCew8nrDsEMR2qe9YFAdFXs8q45LcswiQ"],"license":"AGPL-3.0-only"},"src/governance/extensions/GovernorEngagement.sol":{"keccak256":"0xa1aeabd1c062378f8176707d55601dfe64e3fcc71b4d10c6a3f19f332f4bf7f5","urls":["bzz-raw://62057ab67e44db7596ed2cc52966ee71fb1b45dcdccb9aa372b819cb44e97229","dweb:/ipfs/QmZMTyYtK5jZFFZjmfQ3QeTxbaMZxWDawp7J9qbfSgnAHQ"],"license":"AGPL-3.0-only"},"src/governance/extensions/GovernorModuleRegistry.sol":{"keccak256":"0xfa31daaf9d0dbeebd6fddbd13194cc0300eb02b63a07ff70ed3d823dc514a171","urls":["bzz-raw://92cf3840c51124707053c65d4cbc0d0ffc9baff14fd0a66582481d0b1e3d7257","dweb:/ipfs/QmT6eN74UBnrx1cWwo8eHDZ9pjefCtpUTRFJg5YbbVrF3u"],"license":"AGPL-3.0-only"},"src/governance/utils/GovernorMerkleVotes.sol":{"keccak256":"0x02d81049154ff4a8c009126a7470c9f49d076a534576a6fc3fe3f8de2c5cd608","urls":["bzz-raw://21056ce53dd97ffff192a7834bd0ea2cc7691fce7e90e8c7943a9213242ba28a","dweb:/ipfs/QmNzbxrT8Q2FLLQkdNUAKZyZzy4QMGm4zQsdWePWk1sxDb"],"license":"AGPL-3.0-only"},"src/governance/utils/GovernorSorting.sol":{"keccak256":"0xde18aec0c9ebe63b6e210e03151770b4e470fafe53390227244615ffd9b86ad5","urls":["bzz-raw://d02b203d82cb2773a2a97850533d67dee9e3c729475cb438c2e625c71b15a7d5","dweb:/ipfs/QmXsa98RbxoxfZqRAJmP6Sw8uTYssv3HcTyKzYBtXhQE1H"],"license":"AGPL-3.0-only"},"src/modules/RewardsModule.sol":{"keccak256":"0xba71e0faff9f20449747482feeade015a034344e2a7765342b6525b9b48e6bb1","urls":["bzz-raw://61758df4a8d987f7181976b723c03f6cf0c2f4f780eae45cbd3cd5166beaf9b5","dweb:/ipfs/QmbERf6dSDwuqQiS5JQepq1zNQXQqHmudnZMVrubTsnYSf"],"license":"AGPL-3.0-only"}},"version":1},"id":34} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_name","type":"string","internalType":"string"},{"name":"_prompt","type":"string","internalType":"string"},{"name":"_submissionMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"_votingMerkleRoot","type":"bytes32","internalType":"bytes32"},{"name":"_constructorArgs","type":"tuple","internalType":"struct Governor.ConstructorArgs","components":[{"name":"intConstructorArgs","type":"tuple","internalType":"struct Governor.IntConstructorArgs","components":[{"name":"contestStart","type":"uint256","internalType":"uint256"},{"name":"votingDelay","type":"uint256","internalType":"uint256"},{"name":"votingPeriod","type":"uint256","internalType":"uint256"},{"name":"numAllowedProposalSubmissions","type":"uint256","internalType":"uint256"},{"name":"maxProposalCount","type":"uint256","internalType":"uint256"},{"name":"downvotingAllowed","type":"uint256","internalType":"uint256"},{"name":"sortingEnabled","type":"uint256","internalType":"uint256"},{"name":"rankLimit","type":"uint256","internalType":"uint256"},{"name":"percentageToCreator","type":"uint256","internalType":"uint256"},{"name":"costToPropose","type":"uint256","internalType":"uint256"},{"name":"costToVote","type":"uint256","internalType":"uint256"},{"name":"payPerVote","type":"uint256","internalType":"uint256"}]},{"name":"creatorSplitDestination","type":"address","internalType":"address"},{"name":"jkLabsSplitDestination","type":"address","internalType":"address"},{"name":"metadataFieldsSchema","type":"string","internalType":"string"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"AMOUNT_FOR_SUMBITTER_PROOF","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"JK_LABS_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"MAX_FIELDS_METADATA_LENGTH","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"METADATAS_COUNT","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addressSubmitterVerified","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"addressTotalCastVoteCounts","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addressTotalVotes","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addressTotalVotesVerified","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"addressesThatHaveVoted","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"allProposalTotalVotes","inputs":[],"outputs":[{"name":"proposalIdsReturn","type":"uint256[]","internalType":"uint256[]"},{"name":"proposalVoteCountsArrayReturn","type":"tuple[]","internalType":"struct GovernorCountingSimple.VoteCounts[]","components":[{"name":"forVotes","type":"uint256","internalType":"uint256"},{"name":"againstVotes","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"cancel","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"canceled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"castVote","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"support","type":"uint8","internalType":"uint8"},{"name":"totalVotes","type":"uint256","internalType":"uint256"},{"name":"numVotes","type":"uint256","internalType":"uint256"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"castVoteWithoutProof","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"support","type":"uint8","internalType":"uint8"},{"name":"numVotes","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"checkProof","inputs":[{"name":"addressToCheck","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"},{"name":"voting","type":"bool","internalType":"bool"}],"outputs":[{"name":"verified","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"comment","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"commentContent","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"commentIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commentIsDeleted","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"comments","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"author","type":"address","internalType":"address"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"commentContent","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"contestAddressTotalVotesCast","inputs":[{"name":"userAddress","type":"address","internalType":"address"}],"outputs":[{"name":"userTotalVotesCast","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"contestDeadline","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"contestStart","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"costToPropose","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"costToVote","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"creator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"creatorSplitDestination","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"deleteComments","inputs":[{"name":"commentIdsParam","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deleteProposals","inputs":[{"name":"proposalIdsToDelete","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deletedCommentIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"deletedProposalIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"downvotingAllowed","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"forVotesToProposalIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAllAddressesThatHaveVoted","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getAllAuthorsOfDeletedProposals","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getAllCommentIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getAllDeletedCommentIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getAllDeletedProposalIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getAllProposalAuthors","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getAllProposalIds","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getComment","inputs":[{"name":"commentId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct GovernorEngagement.CommentCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"commentContent","type":"string","internalType":"string"}]}],"stateMutability":"view"},{"type":"function","name":"getNumProposalsWithThisManyForVotes","inputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"count","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getOnlyProposalIdWithThisManyForVotes","inputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getProposal","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]}],"stateMutability":"view"},{"type":"function","name":"getProposalComments","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getProposalsWithThisManyForVotes","inputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"proposalsWithThisManyForVotes","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getRankIndex","inputs":[{"name":"rank","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"rankIndex","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getSortedRanks","inputs":[],"outputs":[{"name":"sortedRanksArray","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"hashComment","inputs":[{"name":"commentObj","type":"tuple","internalType":"struct GovernorEngagement.CommentCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"timestamp","type":"uint256","internalType":"uint256"},{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"commentContent","type":"string","internalType":"string"}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"hashProposal","inputs":[{"name":"proposal","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"isOrIsBelowTiedRank","inputs":[{"name":"idx","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"atOrBelowTiedRank","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"jkLabsSplitDestination","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"maxProposalCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"metadataFieldsSchema","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"numAllowedProposalSubmissions","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"numSubmissions","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"officialRewardsModule","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract RewardsModule"}],"stateMutability":"view"},{"type":"function","name":"payPerVote","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"percentageToCreator","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"prompt","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"proposalAddressVotes","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"},{"name":"userAddress","type":"address","internalType":"address"}],"outputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"},{"name":"againstVotes","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposalAddressesHaveVoted","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"proposalAuthors","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"proposalComments","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposalIds","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposalIsDeleted","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proposalVotes","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"forVotes","type":"uint256","internalType":"uint256"},{"name":"againstVotes","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proposalVotesStructs","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"proposalVoteCounts","type":"tuple","internalType":"struct GovernorCountingSimple.VoteCounts","components":[{"name":"forVotes","type":"uint256","internalType":"uint256"},{"name":"againstVotes","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"proposals","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}],"stateMutability":"view"},{"type":"function","name":"propose","inputs":[{"name":"proposal","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"proposeWithoutProof","inputs":[{"name":"proposal","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"rankLimit","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setCreatorSplitDestination","inputs":[{"name":"newCreatorSplitDestination","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOfficialRewardsModule","inputs":[{"name":"officialRewardsModule_","type":"address","internalType":"contract RewardsModule"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSubmissionMerkleRoot","inputs":[{"name":"newSubmissionMerkleRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setVotingMerkleRoot","inputs":[{"name":"newVotingMerkleRoot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sortedRanks","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"sortingEnabled","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"state","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"enum Governor.ContestState"}],"stateMutability":"view"},{"type":"function","name":"submissionMerkleRoot","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"totalVotesCast","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validateProposalData","inputs":[{"name":"proposal","type":"tuple","internalType":"struct Governor.ProposalCore","components":[{"name":"author","type":"address","internalType":"address"},{"name":"exists","type":"bool","internalType":"bool"},{"name":"description","type":"string","internalType":"string"},{"name":"targetMetadata","type":"tuple","internalType":"struct Governor.TargetMetadata","components":[{"name":"targetAddress","type":"address","internalType":"address"}]},{"name":"safeMetadata","type":"tuple","internalType":"struct Governor.SafeMetadata","components":[{"name":"signers","type":"address[]","internalType":"address[]"},{"name":"threshold","type":"uint256","internalType":"uint256"}]},{"name":"fieldsMetadata","type":"tuple","internalType":"struct Governor.FieldsMetadata","components":[{"name":"addressArray","type":"address[]","internalType":"address[]"},{"name":"stringArray","type":"string[]","internalType":"string[]"},{"name":"uintArray","type":"uint256[]","internalType":"uint256[]"}]}]}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"verifyProposer","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyVoter","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"totalVotes","type":"uint256","internalType":"uint256"},{"name":"proof","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"voteStart","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"votingDelay","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"votingMerkleRoot","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"votingPeriod","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"CommentCreated","inputs":[{"name":"commentId","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CommentsDeleted","inputs":[{"name":"commentIds","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"ContestCanceled","inputs":[],"anonymous":false},{"type":"event","name":"CreatorPaymentReleased","inputs":[{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"JkLabsPaymentReleased","inputs":[{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"JokeraceCreated","inputs":[{"name":"version","type":"string","indexed":false,"internalType":"string"},{"name":"name","type":"string","indexed":false,"internalType":"string"},{"name":"prompt","type":"string","indexed":false,"internalType":"string"},{"name":"creator","type":"address","indexed":false,"internalType":"address"},{"name":"contestStart","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"votingDelay","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"votingPeriod","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OfficialRewardsModuleSet","inputs":[{"name":"oldOfficialRewardsModule","type":"address","indexed":false,"internalType":"contract RewardsModule"},{"name":"newOfficialRewardsModule","type":"address","indexed":false,"internalType":"contract RewardsModule"}],"anonymous":false},{"type":"event","name":"ProposalCreated","inputs":[{"name":"proposalId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"proposer","type":"address","indexed":false,"internalType":"address"},{"name":"proposalDescription","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"ProposalsDeleted","inputs":[{"name":"proposalIds","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"VoteCast","inputs":[{"name":"voter","type":"address","indexed":true,"internalType":"address"},{"name":"proposalId","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"support","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"numVotes","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AddressFieldMetadataArrayTooLong","inputs":[]},{"type":"error","name":"AddressNotPermissionedToSubmit","inputs":[]},{"type":"error","name":"AuthorIsNotSender","inputs":[{"name":"author","type":"address","internalType":"address"},{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"CannotDeleteWhenCompletedOrCanceled","inputs":[]},{"type":"error","name":"CannotUpdateWhenCompletedOrCanceled","inputs":[]},{"type":"error","name":"CannotVoteLessThanOneVoteInPayPerVote","inputs":[]},{"type":"error","name":"CannotVoteOnDeletedProposal","inputs":[]},{"type":"error","name":"ContestAlreadyCanceled","inputs":[]},{"type":"error","name":"ContestMustBeActiveToVote","inputs":[{"name":"currentState","type":"uint8","internalType":"enum Governor.ContestState"}]},{"type":"error","name":"ContestMustBeQueuedToPropose","inputs":[{"name":"currentState","type":"uint8","internalType":"enum Governor.ContestState"}]},{"type":"error","name":"ContestSubmissionLimitReached","inputs":[{"name":"maxProposalCount","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"DownvotingNotEnabled","inputs":[]},{"type":"error","name":"DuplicateSubmission","inputs":[{"name":"proposalId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"EmptyProposalDescription","inputs":[]},{"type":"error","name":"IncorrectCostSent","inputs":[{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"costToVote","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"IndexHasNotBeenPopulated","inputs":[]},{"type":"error","name":"InvalidVoteType","inputs":[]},{"type":"error","name":"MoreThanOneProposalWithThisManyVotes","inputs":[]},{"type":"error","name":"NeedAtLeastOneVoteToVote","inputs":[]},{"type":"error","name":"NeedToSubmitWithProofFirst","inputs":[]},{"type":"error","name":"NeedToVoteWithProofFirst","inputs":[]},{"type":"error","name":"NotEnoughVotesLeft","inputs":[]},{"type":"error","name":"NotInMerkle","inputs":[]},{"type":"error","name":"OnlyCreatorCanAmend","inputs":[]},{"type":"error","name":"OnlyCreatorCanDelete","inputs":[]},{"type":"error","name":"OnlyCreatorCanSetRewardsModule","inputs":[]},{"type":"error","name":"OnlyCreatorOrAuthorCanDeleteComments","inputs":[{"name":"failedToDeleteCommentId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlyJkLabsCanAmend","inputs":[]},{"type":"error","name":"OnlyJkLabsOrCreatorCanCancel","inputs":[]},{"type":"error","name":"PayPerVoteMustBeEnabledForAnyoneCanVote","inputs":[]},{"type":"error","name":"RankCannotBeZero","inputs":[]},{"type":"error","name":"RankIsNotInSortedRanks","inputs":[]},{"type":"error","name":"SenderSubmissionLimitReached","inputs":[{"name":"numAllowedProposalSubmissions","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SortingAndDownvotingCannotBothBeEnabled","inputs":[]},{"type":"error","name":"StringFieldMetadataArrayTooLong","inputs":[]},{"type":"error","name":"UintFieldMetadataArrayTooLong","inputs":[]},{"type":"error","name":"UnexpectedMetadata","inputs":[{"name":"unexpectedMetadata","type":"uint8","internalType":"enum Governor.Metadatas"}]},{"type":"error","name":"ZeroSignersInSafeMetadata","inputs":[]},{"type":"error","name":"ZeroThresholdInSafeMetadata","inputs":[]}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b50604051620056ab380380620056ab83398101604081905262000034916200033c565b805160c081015160e09091015160009190915560015560038390556004829055848482600562000065848262000570565b50600662000074838262000570565b5060078054336001600160a01b03199182161790915581518051600855602080820151600955604080830151600a55606080840151600b556080840151600c5560a0840151600d55610100840151600e55610120840151600f5561014084015160105561016090930151601155908401516012805485166001600160a01b0392831617905590840151601380549094169116179091558101516014906200011c908262000570565b5060408051808201825260048152631a17199960e11b60208083019190915283518051918101519084015193517f9a9bca21e4e51607db64fbdbcd7b2284a909c6a8969821f0d161efbdcae70160946200017e9493899389933393906200066a565b60405180910390a15050815160c0015160011490508015620001a55750805160a001516001145b15620001c457604051636bff10c960e01b815260040160405180910390fd5b81158015620001d7575080516101600151155b15620001f6576040516397b6be7d60e01b815260040160405180910390fd5b5050505050620006d9565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200023c576200023c62000201565b60405290565b60405161018081016001600160401b03811182821017156200023c576200023c62000201565b60005b83811015620002855781810151838201526020016200026b565b50506000910152565b600082601f830112620002a057600080fd5b81516001600160401b0380821115620002bd57620002bd62000201565b604051601f8301601f19908116603f01168101908282118183101715620002e857620002e862000201565b816040528381528660208588010111156200030257600080fd5b6200031584602083016020890162000268565b9695505050505050565b80516001600160a01b03811681146200033757600080fd5b919050565b600080600080600060a086880312156200035557600080fd5b85516001600160401b03808211156200036d57600080fd5b6200037b89838a016200028e565b965060208801519150808211156200039257600080fd5b620003a089838a016200028e565b955060408801519450606088015193506080880151915080821115620003c557600080fd5b908701908189036101e0811215620003dc57600080fd5b620003e662000217565b61018080831215620003f757600080fd5b6200040162000242565b9250845183526020850151602084015260408501516040840152606085015160608401526080850151608084015260a085015160a084015260c085015160c084015260e085015160e08401526101008086015181850152506101208086015181850152506101408086015181850152506101608086015181850152508282526200048d8186016200031f565b602083015250620004a26101a085016200031f565b60408201526101c0840151915082821115620004bd57600080fd5b620004cb8b8386016200028e565b6060820152809450505050509295509295909350565b600181811c90821680620004f657607f821691505b6020821081036200051757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200056b57600081815260208120601f850160051c81016020861015620005465750805b601f850160051c820191505b81811015620005675782815560010162000552565b5050505b505050565b81516001600160401b038111156200058c576200058c62000201565b620005a4816200059d8454620004e1565b846200051d565b602080601f831160018114620005dc5760008415620005c35750858301515b600019600386901b1c1916600185901b17855562000567565b600085815260208120601f198616915b828110156200060d57888601518255948401946001909101908401620005ec565b50858210156200062c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600081518084526200065681602086016020860162000268565b601f01601f19169290920160200192915050565b60e0815260006200067f60e083018a6200063c565b828103602084015262000693818a6200063c565b90508281036040840152620006a981896200063c565b6001600160a01b039790971660608401525050608081019390935260a083019190915260c0909101529392505050565b614fc280620006e96000396000f3fe6080604052600436106104d55760003560e01c8063711effc811610281578063c19d93fb1161015a578063e11db9d8116100cc578063f4f3d7ec11610085578063f4f3d7ec14610f5c578063f5c3641114610f7c578063f61736f414610f9c578063f79c017214610fbc578063f823f11014610fec578063fb9bf8d414610fff57600080fd5b8063e11db9d814610ebf578063ea8a1af014610ed4578063edcd1be414610ee9578063eef18e1714610eff578063efa90d3614610f27578063f0a7db0a14610f3c57600080fd5b8063d140d9f01161011e578063d140d9f014610e07578063d798902514610e27578063daf762db14610e47578063dd96a19d14610e67578063dea5f6a614610e7d578063e031535b14610eaa57600080fd5b8063c19d93fb14610d53578063c7f758a814610d75578063c9a1b6b214610da2578063cb85395014610dc2578063cbdc27cb14610df257600080fd5b80639ba197af116101f3578063aec116b6116101b7578063aec116b614610c92578063b323580d14610cc8578063b382543f14610ce8578063b66d1da314610cfd578063bddc164114610d1d578063c05f410414610d3357600080fd5b80639ba197af14610bd5578063a1ac6cb214610c02578063ab5e694714610c2f578063ac67f80114610c42578063ae66b8ad14610c6257600080fd5b8063832009af11610245578063832009af14610b0a5780638ebb4c1514610b205780639174778c14610b50578063930de97914610b70578063946369b514610ba05780639b644a2314610bb557600080fd5b8063711effc814610a7257806375e509c514610a92578063785ddfe514610abf5780637c65d71114610adf5780637de418d514610af457600080fd5b80633932abb1116103b3578063544c7bb41161032557806360506ff6116102e957806360506ff6146109e957806360ed97a9146109ff57806365f1626314610a145780636e4eb81014610a275780636ed815ad14610a475780636fd3636b14610a5d57600080fd5b8063544c7bb41461091d578063544ffc9c1461093d57806354fd4d50146109875780635c7107d8146109b45780635cb718a1146109d457600080fd5b80634a587ad4116103775780634a587ad41461086f5780634d24a67f1461088f57806350a5e524146108a457806350c4b616146108c757806351a41dec146108e7578063531bd812146108fd57600080fd5b80633932abb1146107ec5780633f9942ff146108025780633fb57c921461081c578063409fd0301461083c578063419c533c1461085c57600080fd5b8063102613d81161044c578063262e59e911610410578063262e59e9146107335780632c39805f14610748578063325cc6d91461076a57806332763c221461078a578063347cf665146107ba578063366ecf5b146107d657600080fd5b8063102613d81461068f5780631242b737146106af578063146230f6146106d15780631805c523146106f357806320b3e8451461071357600080fd5b80630414126a1161049e5780630414126a1461059957806305846cae146105af57806306fdde03146105cf578063070dc5d9146105f15780630800e300146106425780630aa25e441461066f57600080fd5b80624114a8146104da578063013cf08b1461050357806302a251a31461053557806302d05d3f1461054b57806303f7eed614610583575b600080fd5b3480156104e657600080fd5b506104f060085481565b6040519081526020015b60405180910390f35b34801561050f57600080fd5b5061052361051e366004613f85565b611015565b6040516104fa96959493929190614115565b34801561054157600080fd5b506104f0600a5481565b34801561055757600080fd5b5060075461056b906001600160a01b031681565b6040516001600160a01b0390911681526020016104fa565b34801561058f57600080fd5b506104f060115481565b3480156105a557600080fd5b506104f060015481565b3480156105bb57600080fd5b506104f06105ca366004613f85565b611300565b3480156105db57600080fd5b506105e4611321565b6040516104fa919061416f565b3480156105fd57600080fd5b5061063561060c366004613f85565b602260209081526000918252604091829020825180840190935280548352600101549082015281565b6040516104fa9190614182565b34801561064e57600080fd5b5061066261065d366004613f85565b6113af565b6040516104fa9190614199565b34801561067b57600080fd5b5061056b61068a366004613f85565b6114c3565b34801561069b57600080fd5b5060135461056b906001600160a01b031681565b3480156106bb57600080fd5b506106c46114ed565b6040516104fa91906141e2565b3480156106dd57600080fd5b506106f16106ec36600461421a565b611545565b005b3480156106ff57600080fd5b506104f061070e366004614336565b6115ef565b34801561071f57600080fd5b506106f161072e3660046143c0565b611710565b34801561073f57600080fd5b506104f061177f565b34801561075457600080fd5b5061075d61179b565b6040516104fa9190614414565b34801561077657600080fd5b506104f0610785366004613f85565b6117fc565b34801561079657600080fd5b506107aa6107a5366004614471565b61180c565b60405190151581526020016104fa565b3480156107c657600080fd5b506104f0678ac7230489e8000081565b3480156107e257600080fd5b506104f060005481565b3480156107f857600080fd5b506104f060095481565b34801561080e57600080fd5b506018546107aa9060ff1681565b34801561082857600080fd5b506104f0610837366004613f85565b61190b565b34801561084857600080fd5b506104f06108573660046144e1565b61191b565b6104f061086a36600461459d565b61194c565b34801561087b57600080fd5b5060125461056b906001600160a01b031681565b34801561089b57600080fd5b506104f06119ba565b3480156108b057600080fd5b506108b96119c9565b6040516104fa92919061460d565b3480156108d357600080fd5b5061056b6108e2366004613f85565b611acf565b3480156108f357600080fd5b506104f060105481565b34801561090957600080fd5b506106f1610918366004614676565b611adf565b34801561092957600080fd5b506106f1610938366004613f85565b611b54565b34801561094957600080fd5b50610972610958366004613f85565b600090815260226020526040902080546001909101549091565b604080519283526020830191909152016104fa565b34801561099357600080fd5b506040805180820190915260048152631a17199960e11b60208201526105e4565b3480156109c057600080fd5b506104f06109cf366004613f85565b611bea565b3480156109e057600080fd5b506106c4611cf1565b3480156109f557600080fd5b506104f0600d5481565b348015610a0b57600080fd5b506105e4611d47565b6104f0610a223660046146d1565b611d54565b348015610a3357600080fd5b50610972610a42366004614706565b611df2565b348015610a5357600080fd5b506104f0600f5481565b348015610a6957600080fd5b506106c4611e27565b348015610a7e57600080fd5b506104f0610a8d366004614736565b611e7d565b348015610a9e57600080fd5b506104f0610aad36600461421a565b601a6020526000908152604090205481565b348015610acb57600080fd5b5060245461056b906001600160a01b031681565b348015610aeb57600080fd5b506105e4611eae565b348015610b0057600080fd5b506104f060205481565b348015610b1657600080fd5b506104f0600b5481565b348015610b2c57600080fd5b50610b40610b3b366004613f85565b611ebb565b6040516104fa9493929190614758565b348015610b5c57600080fd5b506107aa610b6b366004613f85565b611f78565b348015610b7c57600080fd5b506107aa610b8b36600461421a565b601e6020526000908152604090205460ff1681565b348015610bac57600080fd5b5061075d61201e565b348015610bc157600080fd5b506104f0610bd0366004613f85565b61207e565b348015610be157600080fd5b506104f0610bf0366004613f85565b60009081526023602052604090205490565b348015610c0e57600080fd5b506104f0610c1d36600461421a565b60216020526000908152604090205481565b6104f0610c3d3660046147a7565b61208e565b348015610c4e57600080fd5b506106f1610c5d366004614869565b612108565b348015610c6e57600080fd5b506107aa610c7d366004613f85565b60296020526000908152604090205460ff1681565b348015610c9e57600080fd5b506104f0610cad36600461421a565b6001600160a01b031660009081526021602052604090205490565b348015610cd457600080fd5b5061075d610ce3366004613f85565b612242565b348015610cf457600080fd5b506104f0600a81565b348015610d0957600080fd5b506104f0610d18366004613f85565b6122b4565b348015610d2957600080fd5b506104f060035481565b348015610d3f57600080fd5b506106c4610d4e366004613f85565b612314565b348015610d5f57600080fd5b50610d68612376565b6040516104fa91906148b3565b348015610d8157600080fd5b50610d95610d90366004613f85565b6123c7565b6040516104fa91906148cd565b348015610dae57600080fd5b506106c4610dbd366004613f85565b6126e7565b348015610dce57600080fd5b506107aa610ddd36600461421a565b601f6020526000908152604090205460ff1681565b348015610dfe57600080fd5b5061075d612747565b348015610e1357600080fd5b506106f1610e22366004614c3c565b612877565b348015610e3357600080fd5b506104f0610e42366004614c3c565b612a5e565b348015610e5357600080fd5b506106f1610e62366004613f85565b612a71565b348015610e7357600080fd5b506104f060045481565b348015610e8957600080fd5b506104f0610e9836600461421a565b601d6020526000908152604090205481565b348015610eb657600080fd5b506104f0612b07565b348015610ecb57600080fd5b506106c4612b19565b348015610ee057600080fd5b506106f1612b6f565b348015610ef557600080fd5b506104f0600e5481565b348015610f0b57600080fd5b5061056b73dc652c746a8f85e18ce632d97c6118e8a52fa73881565b348015610f3357600080fd5b506106c4612c33565b348015610f4857600080fd5b506106f1610f57366004614c70565b612c89565b348015610f6857600080fd5b506106f1610f7736600461421a565b612e08565b348015610f8857600080fd5b506104f0610f97366004613f85565b612e8d565b348015610fa857600080fd5b506104f0610fb7366004614736565b612e9d565b348015610fc857600080fd5b506107aa610fd7366004613f85565b60176020526000908152604090205460ff1681565b6104f0610ffa366004614cb1565b612eb9565b34801561100b57600080fd5b506104f0600c5481565b601960205260009081526040902080546001820180546001600160a01b03831693600160a01b90930460ff1692919061104d90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461107990614d0c565b80156110c65780601f1061109b576101008083540402835291602001916110c6565b820191906000526020600020905b8154815290600101906020018083116110a957829003601f168201915b5050604080516020808201835260028801546001600160a01b03168252825160038901805460609381028301840186529482018581529899939893975090955093508492849184018282801561114557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611127575b505050505081526020016001820154815250509080600501604051806060016040529081600082018054806020026020016040519081016040528092919081815260200182805480156111c157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111a3575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101561129b57838290600052602060002001805461120e90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461123a90614d0c565b80156112875780601f1061125c57610100808354040283529160200191611287565b820191906000526020600020905b81548152906001019060200180831161126a57829003601f168201915b5050505050815260200190600101906111ef565b505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156112f257602002820191906000526020600020905b8154815260200190600101908083116112de575b505050505081525050905086565b6016818154811061131057600080fd5b600091825260209091200154905081565b6005805461132e90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461135a90614d0c565b80156113a75780601f1061137c576101008083540402835291602001916113a7565b820191906000526020600020905b81548152906001019060200180831161138a57829003601f168201915b505050505081565b6113e3604051806080016040528060006001600160a01b031681526020016000815260200160008152602001606081525090565b600082815260276020908152604091829020825160808101845281546001600160a01b0316815260018201549281019290925260028101549282019290925260038201805491929160608401919061143a90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461146690614d0c565b80156114b35780601f10611488576101008083540402835291602001916114b3565b820191906000526020600020905b81548152906001019060200180831161149657829003601f168201915b5050505050815250509050919050565b601b81815481106114d357600080fd5b6000918252602090912001546001600160a01b0316905081565b6060601680548060200260200160405190810160405280929190818152602001828054801561153b57602002820191906000526020600020905b815481526020019060010190808311611527575b5050505050905090565b6007546001600160a01b031633146115705760405163141dbb4960e21b815260040160405180910390fd5b600461157a612376565b600481111561158b5761158b61489d565b14806115af5750600261159c612376565b60048111156115ad576115ad61489d565b145b156115cd576040516398fe99a560e01b815260040160405180910390fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b60408051608081018252338152426020820152908101839052606081018290526000908161161c8261191b565b6025805460018082019092557f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c01829055600082815260276020908152604091829020865181546001600160a01b0319166001600160a01b03909116178155908601519281019290925584015160028201556060840151919250839160038201906116a79082614d8e565b505050600085815260286020908152604080832080546001810182559084529190922001829055517f5a1a930fed43f34b3a07db782ebcac28a661c273e662bb98458cfba5a8ccd220906116fe9083815260200190565b60405180910390a19150505b92915050565b6001600160a01b0383166000908152601f602052604090205460ff1661177a5760035460000361173f57505050565b61175583678ac7230489e800008484600061180c565b506001600160a01b0383166000908152601f60205260409020805460ff191660011790555b505050565b6000600a5461178c612b07565b6117969190614e63565b905090565b6060601c80548060200260200160405190810160405280929190818152602001828054801561153b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117d5575050505050905090565b6002818154811061131057600080fd5b6040516bffffffffffffffffffffffff19606087901b16602082015260348101859052600090819060540160405160208183030381529060405280519060200120905060008361189c57611897868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506003549150859050612ef9565b6118dd565b6118dd868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506004549150859050612ef9565b9050806118fd5760405163452c2df160e11b815260040160405180910390fd5b506001979650505050505050565b6026818154811061131057600080fd5b60008160405160200161192e9190614199565b60408051601f19818403018152919052805160209091012092915050565b60008061195a600186612f0f565b60008981526017602052604090205490915060ff161561198d576040516358f1119560e01b815260040160405180910390fd5b61199933878686611adf565b6119a281612fdb565b6119ae883389886130e2565b98975050505050505050565b6119c660026001614e63565b81565b60608060006119d6612c33565b9050600081516001600160401b038111156119f3576119f3614237565b604051908082528060200260200182016040528015611a3857816020015b6040805180820190915260008082526020820152815260200190600190039081611a115790505b50905060005b8251811015611ac55760226000848381518110611a5d57611a5d614e76565b6020026020010151815260200190815260200160002060000160405180604001604052908160008201548152602001600182015481525050828281518110611aa757611aa7614e76565b60200260200101819052508080611abd90614e8c565b915050611a3e565b5090939092509050565b601c81815481106114d357600080fd5b60045415801590611b0957506001600160a01b0384166000908152601e602052604090205460ff16155b15611b4e57611b1c84848484600161180c565b506001600160a01b0384166000908152601d60209081526040808320869055601e9091529020805460ff191660011790555b50505050565b3373dc652c746a8f85e18ce632d97c6118e8a52fa73814611b885760405163de07280160e01b815260040160405180910390fd5b6004611b92612376565b6004811115611ba357611ba361489d565b1480611bc757506002611bb4612376565b6004811115611bc557611bc561489d565b145b15611be5576040516398fe99a560e01b815260040160405180910390fd5b600455565b600081600003611c0d57604051630ec90a1760e31b815260040160405180910390fd5b60028054604080516020808402820181019092528281529192600092918490830182828015611c5b57602002820191906000526020600020905b815481526020019060010190808311611c47575b5050505050905060006001905060005b83811015611cd757611ca2838281518110611c8857611c88614e76565b602002602001015160009081526023602052604090205490565b15611cc557858203611cb75795945050505050565b81611cc181614e8c565b9250505b80611ccf81614e8c565b915050611c6b565b50604051632cc2ab7360e11b815260040160405180910390fd5b6060602680548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6014805461132e90614d0c565b600080611d62600184612f0f565b60008681526017602052604090205490915060ff1615611d95576040516358f1119560e01b815260040160405180910390fd5b60045415801590611db65750336000908152601e602052604090205460ff16155b15611dd45760405163126ec6d160e31b815260040160405180910390fd5b611ddd81612fdb565b611de9853386866130e2565b95945050505050565b60008281526022602090815260408083206001600160a01b0385168452600301909152902080546001909101545b9250929050565b6060600280548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b60236020528160005260406000208181548110611e9957600080fd5b90600052602060002001600091509150505481565b6006805461132e90614d0c565b60276020526000908152604090208054600182015460028301546003840180546001600160a01b03909416949293919291611ef590614d0c565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2190614d0c565b8015611f6e5780601f10611f4357610100808354040283529160200191611f6e565b820191906000526020600020905b815481529060010190602001808311611f5157829003601f168201915b5050505050905084565b600254600090611f8a90600190614ea5565b821115611faa576040516365d6f35160e11b815260040160405180910390fd5b60005b611fb8836001614e63565b811015612015576001611ff460028381548110611fd757611fd7614e76565b906000526020600020015460009081526023602052604090205490565b11156120035750600192915050565b8061200d81614e8c565b915050611fad565b50600092915050565b6060601b80548060200260200160405190810160405280929190818152602001828054801561153b576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116117d5575050505050905090565b6015818154811061131057600080fd5b60008061209c600080612f0f565b600354909150156120d757336000908152601f602052604090205460ff166120d757604051631f22097560e01b815260040160405180910390fd5b6120e3610e2284614eb8565b60006120f66120f185614eb8565b613229565b905061210182612fdb565b9392505050565b805160005b8181101561220657600083828151811061212957612129614e76565b60209081029190910101516007549091506001600160a01b0316331480159061216957506000818152602760205260409020546001600160a01b03163314155b1561218f57604051635450763d60e11b8152600481018290526024015b60405180910390fd5b60008181526029602052604090205460ff166121f3576000818152602960205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594018190555b50806121fe81614e8c565b91505061210d565b507f788a4349d25bc08585923ae212bce8bb346a623bce753eeecb85fd9ce58dcb4b8260405161223691906141e2565b60405180910390a15050565b60008181526022602090815260409182902060028101805484518185028101850190955280855260609492938301828280156122a757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612289575b5050505050915050919050565b6000818152602360205260408120546001146122e357604051633832a15560e21b815260040160405180910390fd5b6000828152602360205260408120805490919061230257612302614e76565b90600052602060002001549050919050565b60008181526028602090815260409182902080548351818402810184019094528084526060939283018282801561236a57602002820191906000526020600020905b815481526020019060010190808311612356575b50505050509050919050565b60185460009060ff161561238a5750600290565b42600854106123995750600090565b426123a2612b07565b106123ad5750600390565b426123b661177f565b106123c15750600190565b50600490565b6123cf613d8d565b600082815260196020908152604091829020825160c08101845281546001600160a01b0381168252600160a01b900460ff16151592810192909252600181018054929391929184019161242190614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461244d90614d0c565b801561249a5780601f1061246f5761010080835404028352916020019161249a565b820191906000526020600020905b81548152906001019060200180831161247d57829003601f168201915b5050509183525050604080516020818101835260028501546001600160a01b0316825280840191909152815160038501805460609381028301840185528285018181529490950194919390928492849184018282801561252357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612505575b50505050508152602001600182015481525050815260200160058201604051806060016040529081600082018054806020026020016040519081016040528092919081815260200182805480156125a357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612585575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101561267d5783829060005260206000200180546125f090614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461261c90614d0c565b80156126695780601f1061263e57610100808354040283529160200191612669565b820191906000526020600020905b81548152906001019060200180831161264c57829003601f168201915b5050505050815260200190600101906125d1565b505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156126d457602002820191906000526020600020905b8154815260200190600101908083116126c0575b5050509190925250505090525092915050565b60008181526023602090815260409182902080548351818402810184019094528084526060939283018282801561236a57602002820191906000526020600020908154815260200190600101908083116123565750505050509050919050565b60606000601680548060200260200160405190810160405280929190818152602001828054801561279757602002820191906000526020600020905b815481526020019060010190808311612783575b50505050509050600081516001600160401b038111156127b9576127b9614237565b6040519080825280602002602001820160405280156127e2578160200160208202803683370190505b50905060005b8251811015612870576019600084838151811061280757612807614e76565b6020026020010151815260200190815260200160002060000160009054906101000a90046001600160a01b031682828151811061284657612846614e76565b6001600160a01b03909216602092830291909101909101528061286881614e8c565b9150506127e8565b5092915050565b80516001600160a01b031633146128b557805160405163fbbf4d7f60e01b81526001600160a01b039091166004820152336024820152604401612186565b60005b6128c460026001614e63565b811015612a345760008160028111156128df576128df61489d565b905060008160028111156128f5576128f561489d565b036129005750612a22565b60018160028111156129145761291461489d565b0361296e57608083015151516000036129405760405163c3b2798b60e01b815260040160405180910390fd5b826080015160200151600003612969576040516392fb9a3560e01b815260040160405180910390fd5b612a20565b60028160028111156129825761298261489d565b03612a055760a08301515151600a10156129af57604051631e38b1b160e11b815260040160405180910390fd5b600a8360a00151602001515111156129da5760405163a3b7dd7760e01b815260040160405180910390fd5b600a8360a00151604001515111156129695760405163f696406560e01b815260040160405180910390fd5b8060405163d2277d4960e01b81526004016121869190614ec4565b505b80612a2c81614e8c565b9150506128b8565b50806040015151600003612a5b5760405163e182473360e01b815260040160405180910390fd5b50565b60008160405160200161192e91906148cd565b3373dc652c746a8f85e18ce632d97c6118e8a52fa73814612aa55760405163de07280160e01b815260040160405180910390fd5b6004612aaf612376565b6004811115612ac057612ac061489d565b1480612ae457506002612ad1612376565b6004811115612ae257612ae261489d565b145b15612b02576040516398fe99a560e01b815260040160405180910390fd5b600355565b60006009546008546117969190614e63565b6060602580548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6007546001600160a01b03163314801590612b9e57503373dc652c746a8f85e18ce632d97c6118e8a52fa73814155b15612bbc576040516301dbf46f60e71b815260040160405180910390fd5b6000612bc6612376565b90506002816004811115612bdc57612bdc61489d565b03612bfa57604051636f79584d60e01b815260040160405180910390fd5b6018805460ff191660011790556040517f4cd963a081760a54f571abc0f1db4dde31b4a07d8d6da3e844b8c6f47eeaaa4290600090a150565b6060601580548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6007546001600160a01b03163314612cb45760405163b8d4540960e01b815260040160405180910390fd5b6004612cbe612376565b6004811115612ccf57612ccf61489d565b1480612cf357506002612ce0612376565b6004811115612cf157612cf161489d565b145b15612d1157604051631e71d28360e21b815260040160405180910390fd5b60005b81811015612db6576000838383818110612d3057612d30614e76565b60209081029290920135600081815260179093526040909220549192505060ff16612da3576000818152601760205260408120805460ff191660019081179091556016805491820181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289018190555b5080612dae81614e8c565b915050612d14565b50600d54158015612dc957506000546001145b15612dd857612dd88282613500565b7f75a75cf5c561892f4cc5b26c1b8e933849b42238c96dd073d080d1ae96c5141660156040516122369190614ed8565b6007546001600160a01b03163314612e3357604051630f4cb1bd60e11b815260040160405180910390fd5b602480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f753a2cf8d360cff631674504210913e48247f8e56b3e6d2006c2103d4095999f9101612236565b6025818154811061131057600080fd5b60286020528160005260406000208181548110611e9957600080fd5b600080612ec7600080612f0f565b9050612ed4338585611710565b612ee0610e2286614eb8565b6000612eee6120f187614eb8565b9050611de982612fdb565b600082612f06858461355d565b14949350505050565b60008080846001811115612f2557612f2561489d565b03612f335750600f54612fb2565b6001846001811115612f4757612f4761489d565b03612fae57601154600103612fa557670de0b6b3a7640000831015612f7f576040516346ddb8d160e01b815260040160405180910390fd5b612f91670de0b6b3a764000084614f13565b601054612f9e9190614f35565b9050612fb2565b50601054612fb2565b5060005b803414612101576040516372c3eaa760e01b815234600482015260248101829052604401612186565b8015612a5b5760006064600e546064612ff49190614ea5565b612ffe9034614f35565b6130089190614f13565b9050801561306d57601354613026906001600160a01b0316826135aa565b601354604080516001600160a01b039092168252602082018390527f9df63d1c00d2e332f573be591c0579caafb256b2c5a17abcc8ad471cccda1b81910160405180910390a15b60006130798234614ea5565b9050801561177a57601254613097906001600160a01b0316826135aa565b600754604080516001600160a01b039092168252602082018390527f6dff55337c8458ae8c536a63869a48bc33541733422a796390c131d91f4238ed910160405180910390a1505050565b600060016130ee612376565b60048111156130ff576130ff61489d565b146131265761310c612376565b60405163049cab4960e51b815260040161218691906148b3565b816000036131475760405163502e1c2960e01b815260040160405180910390fd5b61317985858585601d60008a6001600160a01b03166001600160a01b03168152602001908152602001600020546136c3565b601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b031916331790556040805186815260ff851660208201529081018390526001600160a01b038516907f2c9deb38f462962eadbd85a9d3a4120503ee091f1582eaaa10aa8c6797651d299060600160405180910390a25050506001600160a01b03166000908152601d6020526040902054919050565b60006003613235612376565b60048111156132465761324661489d565b1461326d57613253612376565b604051632889531360e01b815260040161218691906148b3565b600b54336000908152601a6020526040902054036132a457600b54604051632bd6d93960e21b815260040161218691815260200190565b600c546016546015546132b79190614ea5565b036132db57600c546040516302217f5360e51b815260040161218691815260200190565b60006132e683612a5e565b600081815260196020526040902054909150600160a01b900460ff16156133235760405163baffc42360e01b815260048101829052602401612186565b6015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750182905560008281526019602090815260409182902086518154928801511515600160a01b026001600160a81b03199093166001600160a01b03909116179190911781559085015185928201906133a79082614d8e565b506060820151516002820180546001600160a01b0319166001600160a01b0390921691909117905560808201518051805160038401916133ec91839160200190613e27565b5060209182015160019091015560a083015180518051919260058501926134169284920190613e27565b50602082810151805161342f9260018501920190613e8c565b506040820151805161344b916002840191602090910190613ede565b5050336000908152601a60205260408120805460019550909350909150613473908490614e63565b9091555050601b80546001810182556000919091527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319163390811790915560408085015190517f7585f467599d0f008985f231af99293be388626ac16ca59505c2f8f88969cd63926134f2928592614f4c565b60405180910390a192915050565b60005b8181101561177a57600083838381811061351f5761351f614e76565b602090810292909201356000818152602290935260409092205491925061354890508282613938565b5050808061355590614e8c565b915050613503565b600081815b84518110156135a25761358e8286838151811061358157613581614e76565b6020026020010151613a69565b91508061359a81614e8c565b915050613562565b509392505050565b804710156135fa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401612186565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613647576040519150601f19603f3d011682016040523d82523d6000602084013e61364c565b606091505b505090508061177a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401612186565b60008581526022602052604090206004541580159061370357506001600160a01b0385166000908152602160205260409020546137009083614ea5565b83115b156137215760405163660fa07360e11b815260040160405180910390fd5b6001600160a01b038516600090815260038201602052604081205415801561376457506001600160a01b0386166000908152600383016020526040902060010154155b905060ff85166137bc57815484908390600090613782908490614e63565b90915550506001600160a01b0386166000908152600383016020526040812080548692906137b1908490614e63565b9091555061384d9050565b60001960ff86160161383457600d546001146137eb57604051639755958f60e01b815260040160405180910390fd5b838260000160010160008282546138029190614e63565b90915550506001600160a01b0386166000908152600383016020526040812060010180548692906137b1908490614e63565b604051638eed55d160e01b815260040160405180910390fd5b801561388457600282018054600181018255600091825260209091200180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b038616600090815260216020526040812080548692906138ac908490614e63565b9250508190555083602060008282546138c59190614e63565b9091555050600d541580156138dc57506000546001145b1561392f57815460006138ef8683614ea5565b90508015613901576139018982613938565b60008281526023602090815260408220805460018101825590835291200189905561392c8183613a98565b50505b50505050505050565b60008181526023602090815260408083208054825181850281018501909352808352919290919083018282801561398e57602002820191906000526020600020905b81548152602001906001019080831161397a575b5050505050905060005b8151811015611b4e57838282815181106139b4576139b4614e76565b602002602001015103613a575781600183516139d09190614ea5565b815181106139e0576139e0614e76565b6020026020010151602360008581526020019081526020016000208281548110613a0c57613a0c614e76565b906000526020600020018190555060236000848152602001908152602001600020805480613a3c57613a3c614f76565b60019003818190600052602060002001600090559055611b4e565b80613a6181614e8c565b915050613998565b6000818310613a85576000828152602084905260409020612101565b6000838152602083905260409020612101565b60028054604080516020808402820181019092528281529192600092918490830182828015613ae657602002820191906000526020600020905b815481526020019060010190808311613ad2575b5050505050905081600003613b2d575050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015550565b80613b39600184614ea5565b81518110613b4957613b49614e76565b6020026020010151831015613b9f576001548203613b675750505050565b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015550565b611b4e848484846000805b83811015613c1457828181518110613bc457613bc4614e76565b60200260200101518503613bd9575050611b4e565b828181518110613beb57613beb614e76565b6020026020010151851115613c0257809150613c14565b80613c0c81614e8c565b915050613baa565b5060008086118015613c325750600086815260236020526040902054155b90506000818015613c5b575086848481518110613c5157613c51614e76565b6020026020010151145b613d6457613c6a600186614ea5565b8314613d12576000613c7d846001614e63565b90505b85811015613d105784613c94600183614ea5565b81518110613ca457613ca4614e76565b602002602001015160028281548110613cbf57613cbf614e76565b600091825260209091200155828015613cf0575087858281518110613ce657613ce6614e76565b6020026020010151145b15613cfe5760019150613d10565b80613d0881614e8c565b915050613c80565b505b80158015613d21575060015485105b15613d6457600284613d34600188614ea5565b81518110613d4457613d44614e76565b602090810291909101810151825460018101845560009384529190922001555b8560028481548110613d7857613d78614e76565b60009182526020909120015550505050505050565b6040518060c0016040528060006001600160a01b0316815260200160001515815260200160608152602001613dd7604051806020016040528060006001600160a01b031681525090565b8152602001613df9604051806040016040528060608152602001600081525090565b8152602001613e2260405180606001604052806060815260200160608152602001606081525090565b905290565b828054828255906000526020600020908101928215613e7c579160200282015b82811115613e7c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613e47565b50613e88929150613f19565b5090565b828054828255906000526020600020908101928215613ed2579160200282015b82811115613ed25782518290613ec29082614d8e565b5091602001919060010190613eac565b50613e88929150613f2e565b828054828255906000526020600020908101928215613e7c579160200282015b82811115613e7c578251825591602001919060010190613efe565b5b80821115613e885760008155600101613f1a565b80821115613e88576000613f428282613f4b565b50600101613f2e565b508054613f5790614d0c565b6000825580601f10613f67575050565b601f016020900490600052602060002090810190612a5b9190613f19565b600060208284031215613f9757600080fd5b5035919050565b6000815180845260005b81811015613fc457602081850181015186830182015201613fa8565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b8381101561401d5781516001600160a01b031687529582019590820190600101613ff8565b509495945050505050565b600081516040845261403d6040850182613fe4565b602093840151949093019390935250919050565b600081518084526020808501945080840160005b8381101561401d57815187529582019590820190600101614065565b60008151606084526140966060850182613fe4565b9050602080840151858303828701528281518085528385019150838160051b860101848401935060005b828110156140ee57601f198783030184526140dc828651613f9e565b948601949386019391506001016140c0565b506040880151955088810360408a01526141088187614051565b9998505050505050505050565b600060018060a01b038089168352871515602084015260c0604084015261413f60c0840188613f9e565b818751166060850152838103608085015261415a8187614028565b91505082810360a08401526141088185614081565b6020815260006121016020830184613f9e565b81518152602080830151908201526040810161170a565b6020815260018060a01b0382511660208201526020820151604082015260408201516060820152600060608301516080808401526141da60a0840182613f9e565b949350505050565b6020815260006121016020830184614051565b6001600160a01b0381168114612a5b57600080fd5b8035614215816141f5565b919050565b60006020828403121561422c57600080fd5b8135612101816141f5565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561426f5761426f614237565b60405290565b60405160c081016001600160401b038111828210171561426f5761426f614237565b604051601f8201601f191681016001600160401b03811182821017156142bf576142bf614237565b604052919050565b600082601f8301126142d857600080fd5b81356001600160401b038111156142f1576142f1614237565b614304601f8201601f1916602001614297565b81815284602083860101111561431957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561434957600080fd5b8235915060208301356001600160401b0381111561436657600080fd5b614372858286016142c7565b9150509250929050565b60008083601f84011261438e57600080fd5b5081356001600160401b038111156143a557600080fd5b6020830191508360208260051b8501011115611e2057600080fd5b6000806000604084860312156143d557600080fd5b83356143e0816141f5565b925060208401356001600160401b038111156143fb57600080fd5b6144078682870161437c565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156144555783516001600160a01b031683529284019291840191600101614430565b50909695505050505050565b8035801515811461421557600080fd5b60008060008060006080868803121561448957600080fd5b8535614494816141f5565b94506020860135935060408601356001600160401b038111156144b657600080fd5b6144c28882890161437c565b90945092506144d5905060608701614461565b90509295509295909350565b6000602082840312156144f357600080fd5b81356001600160401b038082111561450a57600080fd5b908301906080828603121561451e57600080fd5b60405160808101818110838211171561453957614539614237565b6040528235614547816141f5565b80825250602083013560208201526040830135604082015260608301358281111561457157600080fd5b61457d878286016142c7565b60608301525095945050505050565b803560ff8116811461421557600080fd5b60008060008060008060a087890312156145b657600080fd5b863595506145c66020880161458c565b9450604087013593506060870135925060808701356001600160401b038111156145ef57600080fd5b6145fb89828a0161437c565b979a9699509497509295939492505050565b6000604080835261462081840186614051565b83810360208581019190915285518083528682019282019060005b818110156146685761465883865180518252602090810151910152565b938301939185019160010161463b565b509098975050505050505050565b6000806000806060858703121561468c57600080fd5b8435614697816141f5565b93506020850135925060408501356001600160401b038111156146b957600080fd5b6146c58782880161437c565b95989497509550505050565b6000806000606084860312156146e657600080fd5b833592506146f66020850161458c565b9150604084013590509250925092565b6000806040838503121561471957600080fd5b82359150602083013561472b816141f5565b809150509250929050565b6000806040838503121561474957600080fd5b50508035926020909101359150565b60018060a01b03851681528360208201528260408201526080606082015260006147856080830184613f9e565b9695505050505050565b600060c082840312156147a157600080fd5b50919050565b6000602082840312156147b957600080fd5b81356001600160401b038111156147cf57600080fd5b6141da8482850161478f565b60006001600160401b038211156147f4576147f4614237565b5060051b60200190565b600082601f83011261480f57600080fd5b8135602061482461481f836147db565b614297565b82815260059290921b8401810191818101908684111561484357600080fd5b8286015b8481101561485e5780358352918301918301614847565b509695505050505050565b60006020828403121561487b57600080fd5b81356001600160401b0381111561489157600080fd5b6141da848285016147fe565b634e487b7160e01b600052602160045260246000fd5b60208101600583106148c7576148c761489d565b91905290565b60208152600060018060a01b03808451166020840152602084015115156040840152604084015160c0606085015261490860e0850182613f9e565b90508160608601515116608085015260808501519150601f19808583030160a08601526149358284614028565b925060a08601519150808584030160c086015250611de98282614081565b60006020828403121561496557600080fd5b604051602081018181106001600160401b038211171561498757614987614237565b6040529050808235614998816141f5565b905292915050565b600082601f8301126149b157600080fd5b813560206149c161481f836147db565b82815260059290921b840181019181810190868411156149e057600080fd5b8286015b8481101561485e5780356149f7816141f5565b83529183019183016149e4565b600060408284031215614a1657600080fd5b604051604081016001600160401b038282108183111715614a3957614a39614237565b816040528293508435915080821115614a5157600080fd5b50614a5e858286016149a0565b825250602083013560208201525092915050565b600060608284031215614a8457600080fd5b614a8c61424d565b905081356001600160401b0380821115614aa557600080fd5b614ab1858386016149a0565b8352602091508184013581811115614ac857600080fd5b8401601f81018613614ad957600080fd5b8035614ae761481f826147db565b81815260059190911b82018401908481019088831115614b0657600080fd5b8584015b83811015614b3e57803586811115614b225760008081fd5b614b308b89838901016142c7565b845250918601918601614b0a565b508086880152505050506040840135915080821115614b5c57600080fd5b50614b69848285016147fe565b60408301525092915050565b600060c08284031215614b8757600080fd5b614b8f614275565b9050614b9a8261420a565b8152614ba860208301614461565b602082015260408201356001600160401b0380821115614bc757600080fd5b614bd3858386016142c7565b6040840152614be58560608601614953565b60608401526080840135915080821115614bfe57600080fd5b614c0a85838601614a04565b608084015260a0840135915080821115614c2357600080fd5b50614c3084828501614a72565b60a08301525092915050565b600060208284031215614c4e57600080fd5b81356001600160401b03811115614c6457600080fd5b6141da84828501614b75565b60008060208385031215614c8357600080fd5b82356001600160401b03811115614c9957600080fd5b614ca58582860161437c565b90969095509350505050565b600080600060408486031215614cc657600080fd5b83356001600160401b0380821115614cdd57600080fd5b614ce98783880161478f565b94506020860135915080821115614cff57600080fd5b506144078682870161437c565b600181811c90821680614d2057607f821691505b6020821081036147a157634e487b7160e01b600052602260045260246000fd5b601f82111561177a57600081815260208120601f850160051c81016020861015614d675750805b601f850160051c820191505b81811015614d8657828155600101614d73565b505050505050565b81516001600160401b03811115614da757614da7614237565b614dbb81614db58454614d0c565b84614d40565b602080601f831160018114614df05760008415614dd85750858301515b600019600386901b1c1916600185901b178555614d86565b600085815260208120601f198616915b82811015614e1f57888601518255948401946001909101908401614e00565b5085821015614e3d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111561170a5761170a614e4d565b634e487b7160e01b600052603260045260246000fd5b600060018201614e9e57614e9e614e4d565b5060010190565b8181038181111561170a5761170a614e4d565b600061170a3683614b75565b60208101600383106148c7576148c761489d565b6020808252825482820181905260008481528281209092916040850190845b8181101561445557835483526001938401939285019201614ef7565b600082614f3057634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761170a5761170a614e4d565b8381526001600160a01b0383166020820152606060408201819052600090611de990830184613f9e565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220ca65dc4df782810f3b2446949a961894eeb141ba020da8bc308cea9329cfdb4f64736f6c63430008130033","sourceMap":"248:1066:34:-:0;;;448:864;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;724:35;;:50;;;;776:45;;;;;724:35;2151:32:40;;;;2193:9;:22;1001:20:39;:44;;;1070:16;:36;;;666:5:34;673:7;682:16;6215:4:35;:12;666:5:34;6215:4:35;:12;:::i;:::-;-1:-1:-1;6237:6:35;:16;6246:7;6237:6;:16;:::i;:::-;-1:-1:-1;6263:7:35;:20;;6273:10;-1:-1:-1;;;;;;6263:20:35;;;;;;;6308:35;;:48;;6293:12;:63;6380:47;;;;;6366:11;:61;6452:48;;;;;6437:12;:63;6542:65;;;;;6510:29;:97;6636:52;;;;6617:16;:71;6718:53;;;;6698:17;:73;6263:20;6803:55;;;6781:19;:77;6884:49;;;;6868:13;:65;6956:46;;;;6943:10;:59;7025:46;;;;;7012:10;:59;7107:40;;;;7081:23;:66;;;;-1:-1:-1;;;;;7081:66:35;;;;;;7182:39;;;;7157:22;:64;;;;;;;;;;;7254:37;;;7231:20;;:60;;:20;:60;:::i;:::-;-1:-1:-1;7336:7:35;;;;;;;;;;;-1:-1:-1;;;7336:7:35;;;;;;;;7421:35;;:48;;7483:47;;;;7544:48;;;;7307:295;;;;;;7336:7;7357:5;;7376:7;;7397:10;;7544:48;7307:295;:::i;:::-;;;;;;;;-1:-1:-1;;924:35:34;;:50:::3;;::::0;978:1:::3;924:55;::::0;-1:-1:-1;924:133:34;::::3;;;-1:-1:-1::0;999:35:34;;:53:::3;;::::0;1056:1:::3;999:58;924:133;907:234;;;1089:41;;-1:-1:-1::0;;;1089:41:34::3;;;;;;;;;;;907:234;1154:22:::0;;:77;::::3;;;-1:-1:-1::0;1180:35:34;;:46:::3;;::::0;:51;1154:77:::3;1150:156;;;1254:41;;-1:-1:-1::0;;;1254:41:34::3;;;;;;;;;;;1150:156;448:864:::0;;;;;248:1066;;14:127:44;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:252;218:2;212:9;260:3;248:16;;-1:-1:-1;;;;;279:34:44;;315:22;;;276:62;273:88;;;341:18;;:::i;:::-;377:2;370:22;146:252;:::o;403:250::-;470:2;464:9;512:6;500:19;;-1:-1:-1;;;;;534:34:44;;570:22;;;531:62;528:88;;;596:18;;:::i;658:250::-;743:1;753:113;767:6;764:1;761:13;753:113;;;843:11;;;837:18;824:11;;;817:39;789:2;782:10;753:113;;;-1:-1:-1;;900:1:44;882:16;;875:27;658:250::o;913:699::-;967:5;1020:3;1013:4;1005:6;1001:17;997:27;987:55;;1038:1;1035;1028:12;987:55;1061:13;;-1:-1:-1;;;;;1123:10:44;;;1120:36;;;1136:18;;:::i;:::-;1211:2;1205:9;1179:2;1265:13;;-1:-1:-1;;1261:22:44;;;1285:2;1257:31;1253:40;1241:53;;;1309:18;;;1329:22;;;1306:46;1303:72;;;1355:18;;:::i;:::-;1395:10;1391:2;1384:22;1430:2;1422:6;1415:18;1476:3;1469:4;1464:2;1456:6;1452:15;1448:26;1445:35;1442:55;;;1493:1;1490;1483:12;1442:55;1506:76;1579:2;1572:4;1564:6;1560:17;1553:4;1545:6;1541:17;1506:76;:::i;:::-;1600:6;913:699;-1:-1:-1;;;;;;913:699:44:o;1617:177::-;1696:13;;-1:-1:-1;;;;;1738:31:44;;1728:42;;1718:70;;1784:1;1781;1774:12;1718:70;1617:177;;;:::o;1799:2202::-;1959:6;1967;1975;1983;1991;2044:3;2032:9;2023:7;2019:23;2015:33;2012:53;;;2061:1;2058;2051:12;2012:53;2088:16;;-1:-1:-1;;;;;2153:14:44;;;2150:34;;;2180:1;2177;2170:12;2150:34;2203:61;2256:7;2247:6;2236:9;2232:22;2203:61;:::i;:::-;2193:71;;2310:2;2299:9;2295:18;2289:25;2273:41;;2339:2;2329:8;2326:16;2323:36;;;2355:1;2352;2345:12;2323:36;2378:63;2433:7;2422:8;2411:9;2407:24;2378:63;:::i;:::-;2368:73;;2481:2;2470:9;2466:18;2460:25;2450:35;;2525:2;2514:9;2510:18;2504:25;2494:35;;2575:3;2564:9;2560:19;2554:26;2538:42;;2605:2;2595:8;2592:16;2589:36;;;2621:1;2618;2611:12;2589:36;2644:24;;;;2687:16;;;2723:6;2715:15;;2712:35;;;2743:1;2740;2733:12;2712:35;2769:22;;:::i;:::-;2810:6;2836:2;2832;2828:11;2825:31;;;2852:1;2849;2842:12;2825:31;2880:17;;:::i;:::-;2865:32;;2928:2;2922:9;2913:7;2906:26;2980:2;2976;2972:11;2966:18;2961:2;2952:7;2948:16;2941:44;3033:2;3029;3025:11;3019:18;3014:2;3005:7;3001:16;2994:44;3086:2;3082;3078:11;3072:18;3067:2;3058:7;3054:16;3047:44;3140:3;3136:2;3132:12;3126:19;3120:3;3111:7;3107:17;3100:46;3195:3;3191:2;3187:12;3181:19;3175:3;3166:7;3162:17;3155:46;3250:3;3246:2;3242:12;3236:19;3230:3;3221:7;3217:17;3210:46;3305:3;3301:2;3297:12;3291:19;3285:3;3276:7;3272:17;3265:46;3330:3;3381:2;3377;3373:11;3367:18;3362:2;3353:7;3349:16;3342:44;;3405:3;3456:2;3452;3448:11;3442:18;3437:2;3428:7;3424:16;3417:44;;3480:3;3531:2;3527;3523:11;3517:18;3512:2;3503:7;3499:16;3492:44;;3555:3;3606:2;3602;3598:11;3592:18;3587:2;3578:7;3574:16;3567:44;;3634:7;3627:5;3620:22;3674:42;3712:2;3708;3704:11;3674:42;:::i;:::-;3669:2;3662:5;3658:14;3651:66;;3749:43;3787:3;3783:2;3779:12;3749:43;:::i;:::-;3744:2;3737:5;3733:14;3726:67;3832:3;3828:2;3824:12;3818:19;3802:35;;3862:2;3852:8;3849:16;3846:36;;;3878:1;3875;3868:12;3846:36;3914:56;3962:7;3951:8;3947:2;3943:17;3914:56;:::i;:::-;3909:2;3902:5;3898:14;3891:80;3990:5;3980:15;;;;;;1799:2202;;;;;;;;:::o;4006:380::-;4085:1;4081:12;;;;4128;;;4149:61;;4203:4;4195:6;4191:17;4181:27;;4149:61;4256:2;4248:6;4245:14;4225:18;4222:38;4219:161;;4302:10;4297:3;4293:20;4290:1;4283:31;4337:4;4334:1;4327:15;4365:4;4362:1;4355:15;4219:161;;4006:380;;;:::o;4517:545::-;4619:2;4614:3;4611:11;4608:448;;;4655:1;4680:5;4676:2;4669:17;4725:4;4721:2;4711:19;4795:2;4783:10;4779:19;4776:1;4772:27;4766:4;4762:38;4831:4;4819:10;4816:20;4813:47;;;-1:-1:-1;4854:4:44;4813:47;4909:2;4904:3;4900:12;4897:1;4893:20;4887:4;4883:31;4873:41;;4964:82;4982:2;4975:5;4972:13;4964:82;;;5027:17;;;5008:1;4997:13;4964:82;;;4968:3;;;4608:448;4517:545;;;:::o;5238:1352::-;5358:10;;-1:-1:-1;;;;;5380:30:44;;5377:56;;;5413:18;;:::i;:::-;5442:97;5532:6;5492:38;5524:4;5518:11;5492:38;:::i;:::-;5486:4;5442:97;:::i;:::-;5594:4;;5658:2;5647:14;;5675:1;5670:663;;;;6377:1;6394:6;6391:89;;;-1:-1:-1;6446:19:44;;;6440:26;6391:89;-1:-1:-1;;5195:1:44;5191:11;;;5187:24;5183:29;5173:40;5219:1;5215:11;;;5170:57;6493:81;;5640:944;;5670:663;4464:1;4457:14;;;4501:4;4488:18;;-1:-1:-1;;5706:20:44;;;5824:236;5838:7;5835:1;5832:14;5824:236;;;5927:19;;;5921:26;5906:42;;6019:27;;;;5987:1;5975:14;;;;5854:19;;5824:236;;;5828:3;6088:6;6079:7;6076:19;6073:201;;;6149:19;;;6143:26;-1:-1:-1;;6232:1:44;6228:14;;;6244:3;6224:24;6220:37;6216:42;6201:58;6186:74;;6073:201;-1:-1:-1;;;;;6320:1:44;6304:14;;;6300:22;6287:36;;-1:-1:-1;5238:1352:44:o;6595:271::-;6637:3;6675:5;6669:12;6702:6;6697:3;6690:19;6718:76;6787:6;6780:4;6775:3;6771:14;6764:4;6757:5;6753:16;6718:76;:::i;:::-;6848:2;6827:15;-1:-1:-1;;6823:29:44;6814:39;;;;6855:4;6810:50;;6595:271;-1:-1:-1;;6595:271:44:o;6871:861::-;7228:3;7217:9;7210:22;7191:4;7255:46;7296:3;7285:9;7281:19;7273:6;7255:46;:::i;:::-;7349:9;7341:6;7337:22;7332:2;7321:9;7317:18;7310:50;7383:33;7409:6;7401;7383:33;:::i;:::-;7369:47;;7464:9;7456:6;7452:22;7447:2;7436:9;7432:18;7425:50;7492:33;7518:6;7510;7492:33;:::i;:::-;-1:-1:-1;;;;;7561:32:44;;;;7556:2;7541:18;;7534:60;-1:-1:-1;;7625:3:44;7610:19;;7603:35;;;;7581:3;7654:19;;7647:35;;;;7713:3;7698:19;;;7691:35;7484:41;6871:861;-1:-1:-1;;;6871:861:44:o;:::-;248:1066:34;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106104d55760003560e01c8063711effc811610281578063c19d93fb1161015a578063e11db9d8116100cc578063f4f3d7ec11610085578063f4f3d7ec14610f5c578063f5c3641114610f7c578063f61736f414610f9c578063f79c017214610fbc578063f823f11014610fec578063fb9bf8d414610fff57600080fd5b8063e11db9d814610ebf578063ea8a1af014610ed4578063edcd1be414610ee9578063eef18e1714610eff578063efa90d3614610f27578063f0a7db0a14610f3c57600080fd5b8063d140d9f01161011e578063d140d9f014610e07578063d798902514610e27578063daf762db14610e47578063dd96a19d14610e67578063dea5f6a614610e7d578063e031535b14610eaa57600080fd5b8063c19d93fb14610d53578063c7f758a814610d75578063c9a1b6b214610da2578063cb85395014610dc2578063cbdc27cb14610df257600080fd5b80639ba197af116101f3578063aec116b6116101b7578063aec116b614610c92578063b323580d14610cc8578063b382543f14610ce8578063b66d1da314610cfd578063bddc164114610d1d578063c05f410414610d3357600080fd5b80639ba197af14610bd5578063a1ac6cb214610c02578063ab5e694714610c2f578063ac67f80114610c42578063ae66b8ad14610c6257600080fd5b8063832009af11610245578063832009af14610b0a5780638ebb4c1514610b205780639174778c14610b50578063930de97914610b70578063946369b514610ba05780639b644a2314610bb557600080fd5b8063711effc814610a7257806375e509c514610a92578063785ddfe514610abf5780637c65d71114610adf5780637de418d514610af457600080fd5b80633932abb1116103b3578063544c7bb41161032557806360506ff6116102e957806360506ff6146109e957806360ed97a9146109ff57806365f1626314610a145780636e4eb81014610a275780636ed815ad14610a475780636fd3636b14610a5d57600080fd5b8063544c7bb41461091d578063544ffc9c1461093d57806354fd4d50146109875780635c7107d8146109b45780635cb718a1146109d457600080fd5b80634a587ad4116103775780634a587ad41461086f5780634d24a67f1461088f57806350a5e524146108a457806350c4b616146108c757806351a41dec146108e7578063531bd812146108fd57600080fd5b80633932abb1146107ec5780633f9942ff146108025780633fb57c921461081c578063409fd0301461083c578063419c533c1461085c57600080fd5b8063102613d81161044c578063262e59e911610410578063262e59e9146107335780632c39805f14610748578063325cc6d91461076a57806332763c221461078a578063347cf665146107ba578063366ecf5b146107d657600080fd5b8063102613d81461068f5780631242b737146106af578063146230f6146106d15780631805c523146106f357806320b3e8451461071357600080fd5b80630414126a1161049e5780630414126a1461059957806305846cae146105af57806306fdde03146105cf578063070dc5d9146105f15780630800e300146106425780630aa25e441461066f57600080fd5b80624114a8146104da578063013cf08b1461050357806302a251a31461053557806302d05d3f1461054b57806303f7eed614610583575b600080fd5b3480156104e657600080fd5b506104f060085481565b6040519081526020015b60405180910390f35b34801561050f57600080fd5b5061052361051e366004613f85565b611015565b6040516104fa96959493929190614115565b34801561054157600080fd5b506104f0600a5481565b34801561055757600080fd5b5060075461056b906001600160a01b031681565b6040516001600160a01b0390911681526020016104fa565b34801561058f57600080fd5b506104f060115481565b3480156105a557600080fd5b506104f060015481565b3480156105bb57600080fd5b506104f06105ca366004613f85565b611300565b3480156105db57600080fd5b506105e4611321565b6040516104fa919061416f565b3480156105fd57600080fd5b5061063561060c366004613f85565b602260209081526000918252604091829020825180840190935280548352600101549082015281565b6040516104fa9190614182565b34801561064e57600080fd5b5061066261065d366004613f85565b6113af565b6040516104fa9190614199565b34801561067b57600080fd5b5061056b61068a366004613f85565b6114c3565b34801561069b57600080fd5b5060135461056b906001600160a01b031681565b3480156106bb57600080fd5b506106c46114ed565b6040516104fa91906141e2565b3480156106dd57600080fd5b506106f16106ec36600461421a565b611545565b005b3480156106ff57600080fd5b506104f061070e366004614336565b6115ef565b34801561071f57600080fd5b506106f161072e3660046143c0565b611710565b34801561073f57600080fd5b506104f061177f565b34801561075457600080fd5b5061075d61179b565b6040516104fa9190614414565b34801561077657600080fd5b506104f0610785366004613f85565b6117fc565b34801561079657600080fd5b506107aa6107a5366004614471565b61180c565b60405190151581526020016104fa565b3480156107c657600080fd5b506104f0678ac7230489e8000081565b3480156107e257600080fd5b506104f060005481565b3480156107f857600080fd5b506104f060095481565b34801561080e57600080fd5b506018546107aa9060ff1681565b34801561082857600080fd5b506104f0610837366004613f85565b61190b565b34801561084857600080fd5b506104f06108573660046144e1565b61191b565b6104f061086a36600461459d565b61194c565b34801561087b57600080fd5b5060125461056b906001600160a01b031681565b34801561089b57600080fd5b506104f06119ba565b3480156108b057600080fd5b506108b96119c9565b6040516104fa92919061460d565b3480156108d357600080fd5b5061056b6108e2366004613f85565b611acf565b3480156108f357600080fd5b506104f060105481565b34801561090957600080fd5b506106f1610918366004614676565b611adf565b34801561092957600080fd5b506106f1610938366004613f85565b611b54565b34801561094957600080fd5b50610972610958366004613f85565b600090815260226020526040902080546001909101549091565b604080519283526020830191909152016104fa565b34801561099357600080fd5b506040805180820190915260048152631a17199960e11b60208201526105e4565b3480156109c057600080fd5b506104f06109cf366004613f85565b611bea565b3480156109e057600080fd5b506106c4611cf1565b3480156109f557600080fd5b506104f0600d5481565b348015610a0b57600080fd5b506105e4611d47565b6104f0610a223660046146d1565b611d54565b348015610a3357600080fd5b50610972610a42366004614706565b611df2565b348015610a5357600080fd5b506104f0600f5481565b348015610a6957600080fd5b506106c4611e27565b348015610a7e57600080fd5b506104f0610a8d366004614736565b611e7d565b348015610a9e57600080fd5b506104f0610aad36600461421a565b601a6020526000908152604090205481565b348015610acb57600080fd5b5060245461056b906001600160a01b031681565b348015610aeb57600080fd5b506105e4611eae565b348015610b0057600080fd5b506104f060205481565b348015610b1657600080fd5b506104f0600b5481565b348015610b2c57600080fd5b50610b40610b3b366004613f85565b611ebb565b6040516104fa9493929190614758565b348015610b5c57600080fd5b506107aa610b6b366004613f85565b611f78565b348015610b7c57600080fd5b506107aa610b8b36600461421a565b601e6020526000908152604090205460ff1681565b348015610bac57600080fd5b5061075d61201e565b348015610bc157600080fd5b506104f0610bd0366004613f85565b61207e565b348015610be157600080fd5b506104f0610bf0366004613f85565b60009081526023602052604090205490565b348015610c0e57600080fd5b506104f0610c1d36600461421a565b60216020526000908152604090205481565b6104f0610c3d3660046147a7565b61208e565b348015610c4e57600080fd5b506106f1610c5d366004614869565b612108565b348015610c6e57600080fd5b506107aa610c7d366004613f85565b60296020526000908152604090205460ff1681565b348015610c9e57600080fd5b506104f0610cad36600461421a565b6001600160a01b031660009081526021602052604090205490565b348015610cd457600080fd5b5061075d610ce3366004613f85565b612242565b348015610cf457600080fd5b506104f0600a81565b348015610d0957600080fd5b506104f0610d18366004613f85565b6122b4565b348015610d2957600080fd5b506104f060035481565b348015610d3f57600080fd5b506106c4610d4e366004613f85565b612314565b348015610d5f57600080fd5b50610d68612376565b6040516104fa91906148b3565b348015610d8157600080fd5b50610d95610d90366004613f85565b6123c7565b6040516104fa91906148cd565b348015610dae57600080fd5b506106c4610dbd366004613f85565b6126e7565b348015610dce57600080fd5b506107aa610ddd36600461421a565b601f6020526000908152604090205460ff1681565b348015610dfe57600080fd5b5061075d612747565b348015610e1357600080fd5b506106f1610e22366004614c3c565b612877565b348015610e3357600080fd5b506104f0610e42366004614c3c565b612a5e565b348015610e5357600080fd5b506106f1610e62366004613f85565b612a71565b348015610e7357600080fd5b506104f060045481565b348015610e8957600080fd5b506104f0610e9836600461421a565b601d6020526000908152604090205481565b348015610eb657600080fd5b506104f0612b07565b348015610ecb57600080fd5b506106c4612b19565b348015610ee057600080fd5b506106f1612b6f565b348015610ef557600080fd5b506104f0600e5481565b348015610f0b57600080fd5b5061056b73dc652c746a8f85e18ce632d97c6118e8a52fa73881565b348015610f3357600080fd5b506106c4612c33565b348015610f4857600080fd5b506106f1610f57366004614c70565b612c89565b348015610f6857600080fd5b506106f1610f7736600461421a565b612e08565b348015610f8857600080fd5b506104f0610f97366004613f85565b612e8d565b348015610fa857600080fd5b506104f0610fb7366004614736565b612e9d565b348015610fc857600080fd5b506107aa610fd7366004613f85565b60176020526000908152604090205460ff1681565b6104f0610ffa366004614cb1565b612eb9565b34801561100b57600080fd5b506104f0600c5481565b601960205260009081526040902080546001820180546001600160a01b03831693600160a01b90930460ff1692919061104d90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461107990614d0c565b80156110c65780601f1061109b576101008083540402835291602001916110c6565b820191906000526020600020905b8154815290600101906020018083116110a957829003601f168201915b5050604080516020808201835260028801546001600160a01b03168252825160038901805460609381028301840186529482018581529899939893975090955093508492849184018282801561114557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611127575b505050505081526020016001820154815250509080600501604051806060016040529081600082018054806020026020016040519081016040528092919081815260200182805480156111c157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111a3575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101561129b57838290600052602060002001805461120e90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461123a90614d0c565b80156112875780601f1061125c57610100808354040283529160200191611287565b820191906000526020600020905b81548152906001019060200180831161126a57829003601f168201915b5050505050815260200190600101906111ef565b505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156112f257602002820191906000526020600020905b8154815260200190600101908083116112de575b505050505081525050905086565b6016818154811061131057600080fd5b600091825260209091200154905081565b6005805461132e90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461135a90614d0c565b80156113a75780601f1061137c576101008083540402835291602001916113a7565b820191906000526020600020905b81548152906001019060200180831161138a57829003601f168201915b505050505081565b6113e3604051806080016040528060006001600160a01b031681526020016000815260200160008152602001606081525090565b600082815260276020908152604091829020825160808101845281546001600160a01b0316815260018201549281019290925260028101549282019290925260038201805491929160608401919061143a90614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461146690614d0c565b80156114b35780601f10611488576101008083540402835291602001916114b3565b820191906000526020600020905b81548152906001019060200180831161149657829003601f168201915b5050505050815250509050919050565b601b81815481106114d357600080fd5b6000918252602090912001546001600160a01b0316905081565b6060601680548060200260200160405190810160405280929190818152602001828054801561153b57602002820191906000526020600020905b815481526020019060010190808311611527575b5050505050905090565b6007546001600160a01b031633146115705760405163141dbb4960e21b815260040160405180910390fd5b600461157a612376565b600481111561158b5761158b61489d565b14806115af5750600261159c612376565b60048111156115ad576115ad61489d565b145b156115cd576040516398fe99a560e01b815260040160405180910390fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b60408051608081018252338152426020820152908101839052606081018290526000908161161c8261191b565b6025805460018082019092557f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c01829055600082815260276020908152604091829020865181546001600160a01b0319166001600160a01b03909116178155908601519281019290925584015160028201556060840151919250839160038201906116a79082614d8e565b505050600085815260286020908152604080832080546001810182559084529190922001829055517f5a1a930fed43f34b3a07db782ebcac28a661c273e662bb98458cfba5a8ccd220906116fe9083815260200190565b60405180910390a19150505b92915050565b6001600160a01b0383166000908152601f602052604090205460ff1661177a5760035460000361173f57505050565b61175583678ac7230489e800008484600061180c565b506001600160a01b0383166000908152601f60205260409020805460ff191660011790555b505050565b6000600a5461178c612b07565b6117969190614e63565b905090565b6060601c80548060200260200160405190810160405280929190818152602001828054801561153b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117d5575050505050905090565b6002818154811061131057600080fd5b6040516bffffffffffffffffffffffff19606087901b16602082015260348101859052600090819060540160405160208183030381529060405280519060200120905060008361189c57611897868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506003549150859050612ef9565b6118dd565b6118dd868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506004549150859050612ef9565b9050806118fd5760405163452c2df160e11b815260040160405180910390fd5b506001979650505050505050565b6026818154811061131057600080fd5b60008160405160200161192e9190614199565b60408051601f19818403018152919052805160209091012092915050565b60008061195a600186612f0f565b60008981526017602052604090205490915060ff161561198d576040516358f1119560e01b815260040160405180910390fd5b61199933878686611adf565b6119a281612fdb565b6119ae883389886130e2565b98975050505050505050565b6119c660026001614e63565b81565b60608060006119d6612c33565b9050600081516001600160401b038111156119f3576119f3614237565b604051908082528060200260200182016040528015611a3857816020015b6040805180820190915260008082526020820152815260200190600190039081611a115790505b50905060005b8251811015611ac55760226000848381518110611a5d57611a5d614e76565b6020026020010151815260200190815260200160002060000160405180604001604052908160008201548152602001600182015481525050828281518110611aa757611aa7614e76565b60200260200101819052508080611abd90614e8c565b915050611a3e565b5090939092509050565b601c81815481106114d357600080fd5b60045415801590611b0957506001600160a01b0384166000908152601e602052604090205460ff16155b15611b4e57611b1c84848484600161180c565b506001600160a01b0384166000908152601d60209081526040808320869055601e9091529020805460ff191660011790555b50505050565b3373dc652c746a8f85e18ce632d97c6118e8a52fa73814611b885760405163de07280160e01b815260040160405180910390fd5b6004611b92612376565b6004811115611ba357611ba361489d565b1480611bc757506002611bb4612376565b6004811115611bc557611bc561489d565b145b15611be5576040516398fe99a560e01b815260040160405180910390fd5b600455565b600081600003611c0d57604051630ec90a1760e31b815260040160405180910390fd5b60028054604080516020808402820181019092528281529192600092918490830182828015611c5b57602002820191906000526020600020905b815481526020019060010190808311611c47575b5050505050905060006001905060005b83811015611cd757611ca2838281518110611c8857611c88614e76565b602002602001015160009081526023602052604090205490565b15611cc557858203611cb75795945050505050565b81611cc181614e8c565b9250505b80611ccf81614e8c565b915050611c6b565b50604051632cc2ab7360e11b815260040160405180910390fd5b6060602680548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6014805461132e90614d0c565b600080611d62600184612f0f565b60008681526017602052604090205490915060ff1615611d95576040516358f1119560e01b815260040160405180910390fd5b60045415801590611db65750336000908152601e602052604090205460ff16155b15611dd45760405163126ec6d160e31b815260040160405180910390fd5b611ddd81612fdb565b611de9853386866130e2565b95945050505050565b60008281526022602090815260408083206001600160a01b0385168452600301909152902080546001909101545b9250929050565b6060600280548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b60236020528160005260406000208181548110611e9957600080fd5b90600052602060002001600091509150505481565b6006805461132e90614d0c565b60276020526000908152604090208054600182015460028301546003840180546001600160a01b03909416949293919291611ef590614d0c565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2190614d0c565b8015611f6e5780601f10611f4357610100808354040283529160200191611f6e565b820191906000526020600020905b815481529060010190602001808311611f5157829003601f168201915b5050505050905084565b600254600090611f8a90600190614ea5565b821115611faa576040516365d6f35160e11b815260040160405180910390fd5b60005b611fb8836001614e63565b811015612015576001611ff460028381548110611fd757611fd7614e76565b906000526020600020015460009081526023602052604090205490565b11156120035750600192915050565b8061200d81614e8c565b915050611fad565b50600092915050565b6060601b80548060200260200160405190810160405280929190818152602001828054801561153b576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116117d5575050505050905090565b6015818154811061131057600080fd5b60008061209c600080612f0f565b600354909150156120d757336000908152601f602052604090205460ff166120d757604051631f22097560e01b815260040160405180910390fd5b6120e3610e2284614eb8565b60006120f66120f185614eb8565b613229565b905061210182612fdb565b9392505050565b805160005b8181101561220657600083828151811061212957612129614e76565b60209081029190910101516007549091506001600160a01b0316331480159061216957506000818152602760205260409020546001600160a01b03163314155b1561218f57604051635450763d60e11b8152600481018290526024015b60405180910390fd5b60008181526029602052604090205460ff166121f3576000818152602960205260408120805460ff191660019081179091556026805491820181559091527f744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594018190555b50806121fe81614e8c565b91505061210d565b507f788a4349d25bc08585923ae212bce8bb346a623bce753eeecb85fd9ce58dcb4b8260405161223691906141e2565b60405180910390a15050565b60008181526022602090815260409182902060028101805484518185028101850190955280855260609492938301828280156122a757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612289575b5050505050915050919050565b6000818152602360205260408120546001146122e357604051633832a15560e21b815260040160405180910390fd5b6000828152602360205260408120805490919061230257612302614e76565b90600052602060002001549050919050565b60008181526028602090815260409182902080548351818402810184019094528084526060939283018282801561236a57602002820191906000526020600020905b815481526020019060010190808311612356575b50505050509050919050565b60185460009060ff161561238a5750600290565b42600854106123995750600090565b426123a2612b07565b106123ad5750600390565b426123b661177f565b106123c15750600190565b50600490565b6123cf613d8d565b600082815260196020908152604091829020825160c08101845281546001600160a01b0381168252600160a01b900460ff16151592810192909252600181018054929391929184019161242190614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461244d90614d0c565b801561249a5780601f1061246f5761010080835404028352916020019161249a565b820191906000526020600020905b81548152906001019060200180831161247d57829003601f168201915b5050509183525050604080516020818101835260028501546001600160a01b0316825280840191909152815160038501805460609381028301840185528285018181529490950194919390928492849184018282801561252357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612505575b50505050508152602001600182015481525050815260200160058201604051806060016040529081600082018054806020026020016040519081016040528092919081815260200182805480156125a357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612585575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101561267d5783829060005260206000200180546125f090614d0c565b80601f016020809104026020016040519081016040528092919081815260200182805461261c90614d0c565b80156126695780601f1061263e57610100808354040283529160200191612669565b820191906000526020600020905b81548152906001019060200180831161264c57829003601f168201915b5050505050815260200190600101906125d1565b505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156126d457602002820191906000526020600020905b8154815260200190600101908083116126c0575b5050509190925250505090525092915050565b60008181526023602090815260409182902080548351818402810184019094528084526060939283018282801561236a57602002820191906000526020600020908154815260200190600101908083116123565750505050509050919050565b60606000601680548060200260200160405190810160405280929190818152602001828054801561279757602002820191906000526020600020905b815481526020019060010190808311612783575b50505050509050600081516001600160401b038111156127b9576127b9614237565b6040519080825280602002602001820160405280156127e2578160200160208202803683370190505b50905060005b8251811015612870576019600084838151811061280757612807614e76565b6020026020010151815260200190815260200160002060000160009054906101000a90046001600160a01b031682828151811061284657612846614e76565b6001600160a01b03909216602092830291909101909101528061286881614e8c565b9150506127e8565b5092915050565b80516001600160a01b031633146128b557805160405163fbbf4d7f60e01b81526001600160a01b039091166004820152336024820152604401612186565b60005b6128c460026001614e63565b811015612a345760008160028111156128df576128df61489d565b905060008160028111156128f5576128f561489d565b036129005750612a22565b60018160028111156129145761291461489d565b0361296e57608083015151516000036129405760405163c3b2798b60e01b815260040160405180910390fd5b826080015160200151600003612969576040516392fb9a3560e01b815260040160405180910390fd5b612a20565b60028160028111156129825761298261489d565b03612a055760a08301515151600a10156129af57604051631e38b1b160e11b815260040160405180910390fd5b600a8360a00151602001515111156129da5760405163a3b7dd7760e01b815260040160405180910390fd5b600a8360a00151604001515111156129695760405163f696406560e01b815260040160405180910390fd5b8060405163d2277d4960e01b81526004016121869190614ec4565b505b80612a2c81614e8c565b9150506128b8565b50806040015151600003612a5b5760405163e182473360e01b815260040160405180910390fd5b50565b60008160405160200161192e91906148cd565b3373dc652c746a8f85e18ce632d97c6118e8a52fa73814612aa55760405163de07280160e01b815260040160405180910390fd5b6004612aaf612376565b6004811115612ac057612ac061489d565b1480612ae457506002612ad1612376565b6004811115612ae257612ae261489d565b145b15612b02576040516398fe99a560e01b815260040160405180910390fd5b600355565b60006009546008546117969190614e63565b6060602580548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6007546001600160a01b03163314801590612b9e57503373dc652c746a8f85e18ce632d97c6118e8a52fa73814155b15612bbc576040516301dbf46f60e71b815260040160405180910390fd5b6000612bc6612376565b90506002816004811115612bdc57612bdc61489d565b03612bfa57604051636f79584d60e01b815260040160405180910390fd5b6018805460ff191660011790556040517f4cd963a081760a54f571abc0f1db4dde31b4a07d8d6da3e844b8c6f47eeaaa4290600090a150565b6060601580548060200260200160405190810160405280929190818152602001828054801561153b5760200282019190600052602060002090815481526020019060010190808311611527575050505050905090565b6007546001600160a01b03163314612cb45760405163b8d4540960e01b815260040160405180910390fd5b6004612cbe612376565b6004811115612ccf57612ccf61489d565b1480612cf357506002612ce0612376565b6004811115612cf157612cf161489d565b145b15612d1157604051631e71d28360e21b815260040160405180910390fd5b60005b81811015612db6576000838383818110612d3057612d30614e76565b60209081029290920135600081815260179093526040909220549192505060ff16612da3576000818152601760205260408120805460ff191660019081179091556016805491820181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289018190555b5080612dae81614e8c565b915050612d14565b50600d54158015612dc957506000546001145b15612dd857612dd88282613500565b7f75a75cf5c561892f4cc5b26c1b8e933849b42238c96dd073d080d1ae96c5141660156040516122369190614ed8565b6007546001600160a01b03163314612e3357604051630f4cb1bd60e11b815260040160405180910390fd5b602480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f753a2cf8d360cff631674504210913e48247f8e56b3e6d2006c2103d4095999f9101612236565b6025818154811061131057600080fd5b60286020528160005260406000208181548110611e9957600080fd5b600080612ec7600080612f0f565b9050612ed4338585611710565b612ee0610e2286614eb8565b6000612eee6120f187614eb8565b9050611de982612fdb565b600082612f06858461355d565b14949350505050565b60008080846001811115612f2557612f2561489d565b03612f335750600f54612fb2565b6001846001811115612f4757612f4761489d565b03612fae57601154600103612fa557670de0b6b3a7640000831015612f7f576040516346ddb8d160e01b815260040160405180910390fd5b612f91670de0b6b3a764000084614f13565b601054612f9e9190614f35565b9050612fb2565b50601054612fb2565b5060005b803414612101576040516372c3eaa760e01b815234600482015260248101829052604401612186565b8015612a5b5760006064600e546064612ff49190614ea5565b612ffe9034614f35565b6130089190614f13565b9050801561306d57601354613026906001600160a01b0316826135aa565b601354604080516001600160a01b039092168252602082018390527f9df63d1c00d2e332f573be591c0579caafb256b2c5a17abcc8ad471cccda1b81910160405180910390a15b60006130798234614ea5565b9050801561177a57601254613097906001600160a01b0316826135aa565b600754604080516001600160a01b039092168252602082018390527f6dff55337c8458ae8c536a63869a48bc33541733422a796390c131d91f4238ed910160405180910390a1505050565b600060016130ee612376565b60048111156130ff576130ff61489d565b146131265761310c612376565b60405163049cab4960e51b815260040161218691906148b3565b816000036131475760405163502e1c2960e01b815260040160405180910390fd5b61317985858585601d60008a6001600160a01b03166001600160a01b03168152602001908152602001600020546136c3565b601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b031916331790556040805186815260ff851660208201529081018390526001600160a01b038516907f2c9deb38f462962eadbd85a9d3a4120503ee091f1582eaaa10aa8c6797651d299060600160405180910390a25050506001600160a01b03166000908152601d6020526040902054919050565b60006003613235612376565b60048111156132465761324661489d565b1461326d57613253612376565b604051632889531360e01b815260040161218691906148b3565b600b54336000908152601a6020526040902054036132a457600b54604051632bd6d93960e21b815260040161218691815260200190565b600c546016546015546132b79190614ea5565b036132db57600c546040516302217f5360e51b815260040161218691815260200190565b60006132e683612a5e565b600081815260196020526040902054909150600160a01b900460ff16156133235760405163baffc42360e01b815260048101829052602401612186565b6015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750182905560008281526019602090815260409182902086518154928801511515600160a01b026001600160a81b03199093166001600160a01b03909116179190911781559085015185928201906133a79082614d8e565b506060820151516002820180546001600160a01b0319166001600160a01b0390921691909117905560808201518051805160038401916133ec91839160200190613e27565b5060209182015160019091015560a083015180518051919260058501926134169284920190613e27565b50602082810151805161342f9260018501920190613e8c565b506040820151805161344b916002840191602090910190613ede565b5050336000908152601a60205260408120805460019550909350909150613473908490614e63565b9091555050601b80546001810182556000919091527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319163390811790915560408085015190517f7585f467599d0f008985f231af99293be388626ac16ca59505c2f8f88969cd63926134f2928592614f4c565b60405180910390a192915050565b60005b8181101561177a57600083838381811061351f5761351f614e76565b602090810292909201356000818152602290935260409092205491925061354890508282613938565b5050808061355590614e8c565b915050613503565b600081815b84518110156135a25761358e8286838151811061358157613581614e76565b6020026020010151613a69565b91508061359a81614e8c565b915050613562565b509392505050565b804710156135fa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401612186565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613647576040519150601f19603f3d011682016040523d82523d6000602084013e61364c565b606091505b505090508061177a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401612186565b60008581526022602052604090206004541580159061370357506001600160a01b0385166000908152602160205260409020546137009083614ea5565b83115b156137215760405163660fa07360e11b815260040160405180910390fd5b6001600160a01b038516600090815260038201602052604081205415801561376457506001600160a01b0386166000908152600383016020526040902060010154155b905060ff85166137bc57815484908390600090613782908490614e63565b90915550506001600160a01b0386166000908152600383016020526040812080548692906137b1908490614e63565b9091555061384d9050565b60001960ff86160161383457600d546001146137eb57604051639755958f60e01b815260040160405180910390fd5b838260000160010160008282546138029190614e63565b90915550506001600160a01b0386166000908152600383016020526040812060010180548692906137b1908490614e63565b604051638eed55d160e01b815260040160405180910390fd5b801561388457600282018054600181018255600091825260209091200180546001600160a01b0319166001600160a01b0388161790555b6001600160a01b038616600090815260216020526040812080548692906138ac908490614e63565b9250508190555083602060008282546138c59190614e63565b9091555050600d541580156138dc57506000546001145b1561392f57815460006138ef8683614ea5565b90508015613901576139018982613938565b60008281526023602090815260408220805460018101825590835291200189905561392c8183613a98565b50505b50505050505050565b60008181526023602090815260408083208054825181850281018501909352808352919290919083018282801561398e57602002820191906000526020600020905b81548152602001906001019080831161397a575b5050505050905060005b8151811015611b4e57838282815181106139b4576139b4614e76565b602002602001015103613a575781600183516139d09190614ea5565b815181106139e0576139e0614e76565b6020026020010151602360008581526020019081526020016000208281548110613a0c57613a0c614e76565b906000526020600020018190555060236000848152602001908152602001600020805480613a3c57613a3c614f76565b60019003818190600052602060002001600090559055611b4e565b80613a6181614e8c565b915050613998565b6000818310613a85576000828152602084905260409020612101565b6000838152602083905260409020612101565b60028054604080516020808402820181019092528281529192600092918490830182828015613ae657602002820191906000526020600020905b815481526020019060010190808311613ad2575b5050505050905081600003613b2d575050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015550565b80613b39600184614ea5565b81518110613b4957613b49614e76565b6020026020010151831015613b9f576001548203613b675750505050565b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace015550565b611b4e848484846000805b83811015613c1457828181518110613bc457613bc4614e76565b60200260200101518503613bd9575050611b4e565b828181518110613beb57613beb614e76565b6020026020010151851115613c0257809150613c14565b80613c0c81614e8c565b915050613baa565b5060008086118015613c325750600086815260236020526040902054155b90506000818015613c5b575086848481518110613c5157613c51614e76565b6020026020010151145b613d6457613c6a600186614ea5565b8314613d12576000613c7d846001614e63565b90505b85811015613d105784613c94600183614ea5565b81518110613ca457613ca4614e76565b602002602001015160028281548110613cbf57613cbf614e76565b600091825260209091200155828015613cf0575087858281518110613ce657613ce6614e76565b6020026020010151145b15613cfe5760019150613d10565b80613d0881614e8c565b915050613c80565b505b80158015613d21575060015485105b15613d6457600284613d34600188614ea5565b81518110613d4457613d44614e76565b602090810291909101810151825460018101845560009384529190922001555b8560028481548110613d7857613d78614e76565b60009182526020909120015550505050505050565b6040518060c0016040528060006001600160a01b0316815260200160001515815260200160608152602001613dd7604051806020016040528060006001600160a01b031681525090565b8152602001613df9604051806040016040528060608152602001600081525090565b8152602001613e2260405180606001604052806060815260200160608152602001606081525090565b905290565b828054828255906000526020600020908101928215613e7c579160200282015b82811115613e7c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613e47565b50613e88929150613f19565b5090565b828054828255906000526020600020908101928215613ed2579160200282015b82811115613ed25782518290613ec29082614d8e565b5091602001919060010190613eac565b50613e88929150613f2e565b828054828255906000526020600020908101928215613e7c579160200282015b82811115613e7c578251825591602001919060010190613efe565b5b80821115613e885760008155600101613f1a565b80821115613e88576000613f428282613f4b565b50600101613f2e565b508054613f5790614d0c565b6000825580601f10613f67575050565b601f016020900490600052602060002090810190612a5b9190613f19565b600060208284031215613f9757600080fd5b5035919050565b6000815180845260005b81811015613fc457602081850181015186830182015201613fa8565b506000602082860101526020601f19601f83011685010191505092915050565b600081518084526020808501945080840160005b8381101561401d5781516001600160a01b031687529582019590820190600101613ff8565b509495945050505050565b600081516040845261403d6040850182613fe4565b602093840151949093019390935250919050565b600081518084526020808501945080840160005b8381101561401d57815187529582019590820190600101614065565b60008151606084526140966060850182613fe4565b9050602080840151858303828701528281518085528385019150838160051b860101848401935060005b828110156140ee57601f198783030184526140dc828651613f9e565b948601949386019391506001016140c0565b506040880151955088810360408a01526141088187614051565b9998505050505050505050565b600060018060a01b038089168352871515602084015260c0604084015261413f60c0840188613f9e565b818751166060850152838103608085015261415a8187614028565b91505082810360a08401526141088185614081565b6020815260006121016020830184613f9e565b81518152602080830151908201526040810161170a565b6020815260018060a01b0382511660208201526020820151604082015260408201516060820152600060608301516080808401526141da60a0840182613f9e565b949350505050565b6020815260006121016020830184614051565b6001600160a01b0381168114612a5b57600080fd5b8035614215816141f5565b919050565b60006020828403121561422c57600080fd5b8135612101816141f5565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561426f5761426f614237565b60405290565b60405160c081016001600160401b038111828210171561426f5761426f614237565b604051601f8201601f191681016001600160401b03811182821017156142bf576142bf614237565b604052919050565b600082601f8301126142d857600080fd5b81356001600160401b038111156142f1576142f1614237565b614304601f8201601f1916602001614297565b81815284602083860101111561431957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561434957600080fd5b8235915060208301356001600160401b0381111561436657600080fd5b614372858286016142c7565b9150509250929050565b60008083601f84011261438e57600080fd5b5081356001600160401b038111156143a557600080fd5b6020830191508360208260051b8501011115611e2057600080fd5b6000806000604084860312156143d557600080fd5b83356143e0816141f5565b925060208401356001600160401b038111156143fb57600080fd5b6144078682870161437c565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156144555783516001600160a01b031683529284019291840191600101614430565b50909695505050505050565b8035801515811461421557600080fd5b60008060008060006080868803121561448957600080fd5b8535614494816141f5565b94506020860135935060408601356001600160401b038111156144b657600080fd5b6144c28882890161437c565b90945092506144d5905060608701614461565b90509295509295909350565b6000602082840312156144f357600080fd5b81356001600160401b038082111561450a57600080fd5b908301906080828603121561451e57600080fd5b60405160808101818110838211171561453957614539614237565b6040528235614547816141f5565b80825250602083013560208201526040830135604082015260608301358281111561457157600080fd5b61457d878286016142c7565b60608301525095945050505050565b803560ff8116811461421557600080fd5b60008060008060008060a087890312156145b657600080fd5b863595506145c66020880161458c565b9450604087013593506060870135925060808701356001600160401b038111156145ef57600080fd5b6145fb89828a0161437c565b979a9699509497509295939492505050565b6000604080835261462081840186614051565b83810360208581019190915285518083528682019282019060005b818110156146685761465883865180518252602090810151910152565b938301939185019160010161463b565b509098975050505050505050565b6000806000806060858703121561468c57600080fd5b8435614697816141f5565b93506020850135925060408501356001600160401b038111156146b957600080fd5b6146c58782880161437c565b95989497509550505050565b6000806000606084860312156146e657600080fd5b833592506146f66020850161458c565b9150604084013590509250925092565b6000806040838503121561471957600080fd5b82359150602083013561472b816141f5565b809150509250929050565b6000806040838503121561474957600080fd5b50508035926020909101359150565b60018060a01b03851681528360208201528260408201526080606082015260006147856080830184613f9e565b9695505050505050565b600060c082840312156147a157600080fd5b50919050565b6000602082840312156147b957600080fd5b81356001600160401b038111156147cf57600080fd5b6141da8482850161478f565b60006001600160401b038211156147f4576147f4614237565b5060051b60200190565b600082601f83011261480f57600080fd5b8135602061482461481f836147db565b614297565b82815260059290921b8401810191818101908684111561484357600080fd5b8286015b8481101561485e5780358352918301918301614847565b509695505050505050565b60006020828403121561487b57600080fd5b81356001600160401b0381111561489157600080fd5b6141da848285016147fe565b634e487b7160e01b600052602160045260246000fd5b60208101600583106148c7576148c761489d565b91905290565b60208152600060018060a01b03808451166020840152602084015115156040840152604084015160c0606085015261490860e0850182613f9e565b90508160608601515116608085015260808501519150601f19808583030160a08601526149358284614028565b925060a08601519150808584030160c086015250611de98282614081565b60006020828403121561496557600080fd5b604051602081018181106001600160401b038211171561498757614987614237565b6040529050808235614998816141f5565b905292915050565b600082601f8301126149b157600080fd5b813560206149c161481f836147db565b82815260059290921b840181019181810190868411156149e057600080fd5b8286015b8481101561485e5780356149f7816141f5565b83529183019183016149e4565b600060408284031215614a1657600080fd5b604051604081016001600160401b038282108183111715614a3957614a39614237565b816040528293508435915080821115614a5157600080fd5b50614a5e858286016149a0565b825250602083013560208201525092915050565b600060608284031215614a8457600080fd5b614a8c61424d565b905081356001600160401b0380821115614aa557600080fd5b614ab1858386016149a0565b8352602091508184013581811115614ac857600080fd5b8401601f81018613614ad957600080fd5b8035614ae761481f826147db565b81815260059190911b82018401908481019088831115614b0657600080fd5b8584015b83811015614b3e57803586811115614b225760008081fd5b614b308b89838901016142c7565b845250918601918601614b0a565b508086880152505050506040840135915080821115614b5c57600080fd5b50614b69848285016147fe565b60408301525092915050565b600060c08284031215614b8757600080fd5b614b8f614275565b9050614b9a8261420a565b8152614ba860208301614461565b602082015260408201356001600160401b0380821115614bc757600080fd5b614bd3858386016142c7565b6040840152614be58560608601614953565b60608401526080840135915080821115614bfe57600080fd5b614c0a85838601614a04565b608084015260a0840135915080821115614c2357600080fd5b50614c3084828501614a72565b60a08301525092915050565b600060208284031215614c4e57600080fd5b81356001600160401b03811115614c6457600080fd5b6141da84828501614b75565b60008060208385031215614c8357600080fd5b82356001600160401b03811115614c9957600080fd5b614ca58582860161437c565b90969095509350505050565b600080600060408486031215614cc657600080fd5b83356001600160401b0380821115614cdd57600080fd5b614ce98783880161478f565b94506020860135915080821115614cff57600080fd5b506144078682870161437c565b600181811c90821680614d2057607f821691505b6020821081036147a157634e487b7160e01b600052602260045260246000fd5b601f82111561177a57600081815260208120601f850160051c81016020861015614d675750805b601f850160051c820191505b81811015614d8657828155600101614d73565b505050505050565b81516001600160401b03811115614da757614da7614237565b614dbb81614db58454614d0c565b84614d40565b602080601f831160018114614df05760008415614dd85750858301515b600019600386901b1c1916600185901b178555614d86565b600085815260208120601f198616915b82811015614e1f57888601518255948401946001909101908401614e00565b5085821015614e3d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111561170a5761170a614e4d565b634e487b7160e01b600052603260045260246000fd5b600060018201614e9e57614e9e614e4d565b5060010190565b8181038181111561170a5761170a614e4d565b600061170a3683614b75565b60208101600383106148c7576148c761489d565b6020808252825482820181905260008481528281209092916040850190845b8181101561445557835483526001938401939285019201614ef7565b600082614f3057634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761170a5761170a614e4d565b8381526001600160a01b0383166020820152606060408201819052600090611de990830184613f9e565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220ca65dc4df782810f3b2446949a961894eeb141ba020da8bc308cea9329cfdb4f64736f6c63430008130033","sourceMap":"248:1066:34:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3234:27:35;;;;;;;;;;;;;;;;;;;160:25:44;;;148:2;133:18;3234:27:35;;;;;;;;4426:49;;;;;;;;;;-1:-1:-1;4426:49:35;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;3397:27::-;;;;;;;;;;;;;;;;3206:22;;;;;;;;;;-1:-1:-1;3206:22:35;;;;-1:-1:-1;;;;;3206:22:35;;;;;;-1:-1:-1;;;;;4252:32:44;;;4234:51;;4222:2;4207:18;3206:22:35;4088:203:44;3899:25:35;;;;;;;;;;;;;;;;1809:24:40;;;;;;;;;;;;;;;;4304:35:35;;;;;;;;;;-1:-1:-1;4304:35:35;;;;;:::i;:::-;;:::i;3128:18::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;891:60:36:-;;;;;;;;;;-1:-1:-1;891:60:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1546:123:37:-;;;;;;;;;;-1:-1:-1;1546:123:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4536:32:35:-;;;;;;;;;;-1:-1:-1;4536:32:35;;;;;:::i;:::-;;:::i;4095:37::-;;;;;;;;;;-1:-1:-1;4095:37:35;;;;-1:-1:-1;;;;;4095:37:35;;;8999:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22084:366::-;;;;;;;;;;-1:-1:-1;22084:366:35;;;;;:::i;:::-;;:::i;:::-;;2000:579:37;;;;;;;;;;-1:-1:-1;2000:579:37;;;;;:::i;:::-;;:::i;10947:469:35:-;;;;;;;;;;-1:-1:-1;10947:469:35;;;;;:::i;:::-;;:::i;9971:107::-;;;;;;;;;;;;;:::i;8810:125::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1977:28:40:-;;;;;;;;;;-1:-1:-1;1977:28:40;;;;;:::i;:::-;;:::i;1536:539:39:-;;;;;;;;;;-1:-1:-1;1536:539:39;;;;;:::i;:::-;;:::i;:::-;;;11247:14:44;;11240:22;11222:41;;11210:2;11195:18;1536:539:39;11082:187:44;2786:73:35;;;;;;;;;;;;2839:20;2786:73;;1738:29:40;;;;;;;;;;;;;;;;3317:26:35;;;;;;;;;;;;;;;;4400:20;;;;;;;;;;-1:-1:-1;4400:20:35;;;;;;;;612:34:37;;;;;;;;;;-1:-1:-1;612:34:37;;;;;:::i;:::-;;:::i;1001:148::-;;;;;;;;;;-1:-1:-1;1001:148:37;;;;;:::i;:::-;;:::i;19394:509:35:-;;;;;;:::i;:::-;;:::i;4007:38::-;;;;;;;;;;-1:-1:-1;4007:38:35;;;;-1:-1:-1;;;;;4007:38:35;;;2645:74;;;;;;;;;;;;;:::i;2866:580:36:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;4574:39:35:-;;;;;;;;;;-1:-1:-1;4574:39:35;;;;;:::i;:::-;;:::i;3868:25::-;;;;;;;;;;;;;;;;18932:395;;;;;;;;;;-1:-1:-1;18932:395:35;;;;;:::i;:::-;;:::i;21733:345::-;;;;;;;;;;-1:-1:-1;21733:345:35;;;;;:::i;:::-;;:::i;1361:294:36:-;;;;;;;;;;-1:-1:-1;1361:294:36;;;;;:::i;:::-;1425:16;1511:32;;;:20;:32;;;;;1561:40;;1603:44;;;;;1561:40;;1361:294;;;;;15076:25:44;;;15132:2;15117:18;;15110:34;;;;15049:18;1361:294:36;14902:248:44;7684:86:35;;;;;;;;;;-1:-1:-1;7756:7:35;;;;;;;;;;;;-1:-1:-1;;;7756:7:35;;;;7684:86;;4829:1027:36;;;;;;;;;;-1:-1:-1;4829:1027:36;;;;;:::i;:::-;;:::i;1372:115:37:-;;;;;;;;;;;;;:::i;3711:32:35:-;;;;;;;;;;;;;;;;4182:34;;;;;;;;;;;;;:::i;20005:535::-;;;;;;:::i;:::-;;:::i;1758:408:36:-;;;;;;;;;;-1:-1:-1;1758:408:36;;;;;:::i;:::-;;:::i;3834:28:35:-;;;;;;;;;;;;;;;;2490:117:40;;;;;;;;;;;;;:::i;958:58:36:-;;;;;;;;;;-1:-1:-1;958:58:36;;;;;:::i;:::-;;:::i;4481:49:35:-;;;;;;;;;;-1:-1:-1;4481:49:35;;;;;:::i;:::-;;;;;;;;;;;;;;376:42:38;;;;;;;;;;-1:-1:-1;376:42:38;;;;-1:-1:-1;;;;;376:42:38;;;3180:20:35;;;;;;;;;;;;;:::i;751:29:36:-;;;;;;;;;;;;;;;;3472:44:35;;;;;;;;;;;;;;;;652:47:37;;;;;;;;;;-1:-1:-1;652:47:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;5968:523:36:-;;;;;;;;;;-1:-1:-1;5968:523:36;;;;;:::i;:::-;;:::i;4678:57:35:-;;;;;;;;;;-1:-1:-1;4678:57:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;8627:111;;;;;;;;;;;;;:::i;4270:28::-;;;;;;;;;;-1:-1:-1;4270:28:35;;;;;:::i;:::-;;:::i;3874:170:36:-;;;;;;;;;;-1:-1:-1;3874:170:36;;;;;:::i;:::-;3967:13;3999:31;;;:21;:31;;;;;:38;;3874:170;824:61;;;;;;;;;;-1:-1:-1;824:61:36;;;;;:::i;:::-;;;;;;;;;;;;;;15421:602:35;;;;;;:::i;:::-;;:::i;2677:709:37:-;;;;;;;;;;-1:-1:-1;2677:709:37;;;;;:::i;:::-;;:::i;764:48::-;;;;;;;;;;-1:-1:-1;764:48:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;2602:171:36;;;;;;;;;;-1:-1:-1;2602:171:36;;;;;:::i;:::-;-1:-1:-1;;;;;2727:39:36;2682:26;2727:39;;;:26;:39;;;;;;;2602:171;2267:224;;;;;;;;;;-1:-1:-1;2267:224:36;;;;;:::i;:::-;;:::i;2725:55:35:-;;;;;;;;;;;;2778:2;2725:55;;4360:268:36;;;;;;;;;;-1:-1:-1;4360:268:36;;;;;:::i;:::-;;:::i;497:35:39:-;;;;;;;;;;;;;;;;1757:140:37;;;;;;;;;;-1:-1:-1;1757:140:37;;;;;:::i;:::-;;:::i;7928:477:35:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10136:128::-;;;;;;;;;;-1:-1:-1;10136:128:35;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3558:212:36:-;;;;;;;;;;-1:-1:-1;3558:212:36;;;;;:::i;:::-;;:::i;4741:56:35:-;;;;;;;;;;-1:-1:-1;4741:56:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;9191:437;;;;;;;;;;;;;:::i;11510:1474::-;;;;;;;;;;-1:-1:-1;11510:1474:35;;;;;:::i;:::-;;:::i;7776:146::-;;;;;;;;;;-1:-1:-1;7776:146:35;;;;;:::i;:::-;;:::i;21366:361::-;;;;;;;;;;-1:-1:-1;21366:361:35;;;;;:::i;:::-;;:::i;538:31:39:-;;;;;;;;;;;;;;;;4620:52:35;;;;;;;;;;-1:-1:-1;4620:52:35;;;;;:::i;:::-;;;;;;;;;;;;;;9789:101;;;;;;;;;;;;;:::i;1206::37:-;;;;;;;;;;;;;:::i;18492:322:35:-;;;;;;;;;;;;;:::i;3794:34::-;;;;;;;;;;;;;;;;2865:84;;;;;;;;;;;;2907:42;2865:84;;8461:103;;;;;;;;;;;;;:::i;17048:1332::-;;;;;;;;;;-1:-1:-1;17048:1332:35;;;;;:::i;:::-;;:::i;586:379:38:-;;;;;;;;;;-1:-1:-1;586:379:38;;;;;:::i;:::-;;:::i;579:27:37:-;;;;;;;;;;-1:-1:-1;579:27:37;;;;;:::i;:::-;;:::i;705:53::-;;;;;;;;;;-1:-1:-1;705:53:37;;;;;:::i;:::-;;:::i;4345:49:35:-;;;;;;;;;;-1:-1:-1;4345:49:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;14910:396;;;;;;:::i;:::-;;:::i;3622:31::-;;;;;;;;;;;;;;;;4426:49;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4426:49:35;;;-1:-1:-1;;;4426:49:35;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4426:49:35;;;;;;;;;;;;;-1:-1:-1;;;;;4426:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4426:49:35;;-1:-1:-1;4426:49:35;-1:-1:-1;4426:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4426:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4426:49:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4304:35::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4304:35:35;:::o;3128:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1546:123:37:-;1606:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1606:18:37;1643:19;;;;:8;:19;;;;;;;;;1636:26;;;;;;;;;-1:-1:-1;;;;;1636:26:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1643:19;1636:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1546:123;;;:::o;4536:32:35:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4536:32:35;;-1:-1:-1;4536:32:35;:::o;8999:117::-;9056:16;9091:18;9084:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8999:117;:::o;22084:366::-;22191:7;;-1:-1:-1;;;;;22191:7:35;22177:10;:21;22173:55;;22207:21;;-1:-1:-1;;;22207:21:35;;;;;;;;;;;22173:55;22253:22;22242:7;:5;:7::i;:::-;:33;;;;;;;;:::i;:::-;;:69;;;-1:-1:-1;22290:21:35;22279:7;:5;:7::i;:::-;:32;;;;;;;;:::i;:::-;;22242:69;22238:144;;;22334:37;;-1:-1:-1;;;22334:37:35;;;;;;;;;;;22238:144;22391:23;:52;;-1:-1:-1;;;;;;22391:52:35;-1:-1:-1;;;;;22391:52:35;;;;;;;;;;22084:366::o;2000:579:37:-;2137:175;;;;;;;;2171:10;2137:175;;2206:15;2137:175;;;;;;;;;;;;;;;;2083:7;;;2342:26;2137:175;2342:11;:26::i;:::-;2379:10;:26;;;;;;;;;;;;;;-1:-1:-1;2415:19:37;;;:8;2379:26;2415:19;;;;;;;;:35;;;;-1:-1:-1;;;;;;2415:35:37;-1:-1:-1;;;;;2415:35:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;2379:26;;-1:-1:-1;2415:35:37;;;;;;;;;;:::i;:::-;-1:-1:-1;;;2460:28:37;;;;:16;:28;;;;;;;;:44;;;;;;;;;;;;;;;;;;2520:25;;;;;2494:9;160:25:44;;148:2;133:18;;14:177;2520:25:37;;;;;;;;2563:9;-1:-1:-1;;2000:579:37;;;;;:::o;10947:469:35:-;-1:-1:-1;;;;;11036:33:35;;;;;;:24;:33;;;;;;;;11031:379;;11089:20;;11113:1;11089:25;11085:141;;10947:469;;;:::o;11085:141::-;11239:61;11250:7;2839:20;11287:5;;11294;11239:10;:61::i;:::-;-1:-1:-1;;;;;;11359:33:35;;;;;;:24;:33;;;;;:40;;-1:-1:-1;;11359:40:35;11395:4;11359:40;;;11031:379;10947:469;;;:::o;9971:107::-;10019:7;10059:12;;10045:11;:9;:11::i;:::-;:26;;;;:::i;:::-;10038:33;;9971:107;:::o;8810:125::-;8871:16;8906:22;8899:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8899:29:35;;;;;;;;;;;;;;;;;;;;;;8810:125;:::o;1977:28:40:-;;;;;;;;;;;;1536:539:39;1791:40;;-1:-1:-1;;29316:2:44;29312:15;;;29308:53;1791:40:39;;;29296:66:44;29378:12;;;29371:28;;;1680:13:39;;;;29415:12:44;;1791:40:39;;;;;;;;;;;;1781:51;;;;;;1766:66;;1842:16;1861:6;:138;;1946:53;1965:5;;1946:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1972:20:39;;;-1:-1:-1;1994:4:39;;-1:-1:-1;1946:18:39;:53::i;:::-;1861:138;;;1882:49;1901:5;;1882:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1908:16:39;;;-1:-1:-1;1926:4:39;;-1:-1:-1;1882:18:39;:49::i;:::-;1842:157;;2014:11;2009:38;;2034:13;;-1:-1:-1;;;2034:13:39;;;;;;;;;;;2009:38;-1:-1:-1;2064:4:39;;1536:539;-1:-1:-1;;;;;;;1536:539:39:o;612:34:37:-;;;;;;;;;;;;1001:148;1074:7;1129:10;1118:22;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1118:22:37;;;;;;;;;1108:33;;1118:22;1108:33;;;;;1001:148;-1:-1:-1;;1001:148:37:o;19394:509:35:-;19559:7;19582:18;19603:51;19631:12;19645:8;19603:27;:51::i;:::-;19669:29;;;;:17;:29;;;;;;19582:72;;-1:-1:-1;19669:29:35;;19665:71;;;19707:29;;-1:-1:-1;;;19707:29:35;;;;;;;;;;;19665:71;19746:42;19758:10;19770;19782:5;;19746:11;:42::i;:::-;19799:27;19815:10;19799:15;:27::i;:::-;19844:52;19854:10;19866;19878:7;19887:8;19844:9;:52::i;:::-;19837:59;19394:509;-1:-1:-1;;;;;;;;19394:509:35:o;2645:74::-;2687:32;2695:19;2718:1;2687:32;:::i;:::-;2645:74;:::o;2866:580:36:-;2944:34;2980:49;3045:34;3082:19;:17;:19::i;:::-;3045:56;;3111:43;3174:17;:24;-1:-1:-1;;;;;3157:42:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;3157:42:36;;;;;;;;;;;;;;;;3111:88;;3214:9;3209:170;3233:17;:24;3229:1;:28;3209:170;;;3307:20;:42;3328:17;3346:1;3328:20;;;;;;;;:::i;:::-;;;;;;;3307:42;;;;;;;;;;;:61;;3278:90;;;;;;;;;;;;;;;;;;;;;;;;;:23;3302:1;3278:26;;;;;;;;:::i;:::-;;;;;;:90;;;;3259:3;;;;;:::i;:::-;;;;3209:170;;;-1:-1:-1;3396:17:36;;3415:23;;-1:-1:-1;2866:580:36;-1:-1:-1;2866:580:36:o;4574:39:35:-;;;;;;;;;;;;18932:395;19037:16;;:21;;;;:60;;-1:-1:-1;;;;;;19063:34:35;;;;;;:25;:34;;;;;;;;19062:35;19037:60;19033:288;;;19113:44;19124:7;19133:10;19145:5;;19152:4;19113:10;:44::i;:::-;-1:-1:-1;;;;;;19216:26:35;;;;;;:17;:26;;;;;;;;:39;;;19269:25;:34;;;;;:41;;-1:-1:-1;;19269:41:35;19306:4;19269:41;;;19033:288;18932:395;;;;:::o;21733:345::-;21812:10;2907:42;21812:29;21808:62;;21850:20;;-1:-1:-1;;;21850:20:35;;;;;;;;;;;21808:62;21895:22;21884:7;:5;:7::i;:::-;:33;;;;;;;;:::i;:::-;;:69;;;-1:-1:-1;21932:21:35;21921:7;:5;:7::i;:::-;:32;;;;;;;;:::i;:::-;;21884:69;21880:144;;;21976:37;;-1:-1:-1;;;21976:37:35;;;;;;;;;;;21880:144;22033:16;:38;21733:345::o;4829:1027:36:-;4886:17;4919:4;4927:1;4919:9;4915:40;;4937:18;;-1:-1:-1;;;4937:18:36;;;;;;;;;;;4915:40;4994:11;:18;;5066:48;;;;;;;;;;;;;;;;;4994:18;;4966:25;;5066:48;4994:18;;5066:48;;4994:11;:18;5066:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5169:15;5187:1;5169:19;;5203:13;5198:536;5230:17;5222:5;:25;5198:536;;;5428:61;5464:17;5482:5;5464:24;;;;;;;;:::i;:::-;;;;;;;3967:13;3999:31;;;:21;:31;;;;;:38;;3874:170;5428:61;5424:113;5514:8;5424:113;5650:4;5639:7;:15;5635:66;;5681:5;4829:1027;-1:-1:-1;;;;;4829:1027:36:o;5635:66::-;5714:9;;;;:::i;:::-;;;;5198:536;5249:7;;;;:::i;:::-;;;;5198:536;;;;5825:24;;-1:-1:-1;;;5825:24:36;;;;;;;;;;;1372:115:37;1428:16;1463:17;1456:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1372:115;:::o;4182:34:35:-;;;;;;;:::i;20005:535::-;20136:7;20159:18;20180:51;20208:12;20222:8;20180:27;:51::i;:::-;20246:29;;;;:17;:29;;;;;;20159:72;;-1:-1:-1;20246:29:35;;20242:71;;;20284:29;;-1:-1:-1;;;20284:29:35;;;;;;;;;;;20242:71;20327:16;;:21;;;;:63;;-1:-1:-1;20379:10:35;20353:37;;;;:25;:37;;;;;;;;20352:38;20327:63;20323:102;;;20399:26;;-1:-1:-1;;;20399:26:35;;;;;;;;;;;20323:102;20436:27;20452:10;20436:15;:27::i;:::-;20481:52;20491:10;20503;20515:7;20524:8;20481:9;:52::i;:::-;20474:59;20005:535;-1:-1:-1;;;;;20005:535:35:o;1758:408:36:-;1874:16;1964:32;;;:20;:32;;;;;;;;-1:-1:-1;;;;;2027:43:36;;;;:30;;:43;;;;;:52;;2093:56;;;;;1758:408;;;;;;:::o;2490:117:40:-;2537:33;2589:11;2582:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2490:117;:::o;958:58:36:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3180:20:35:-;;;;;;;:::i;652:47:37:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;652:47:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5968:523:36:-;6075:11;:18;6031:22;;6075;;6096:1;;6075:22;:::i;:::-;6069:3;:28;6065:205;;;6233:26;;-1:-1:-1;;;6233:26:36;;;;;;;;;;;6065:205;6285:13;6280:183;6312:7;:3;6318:1;6312:7;:::i;:::-;6304:5;:15;6280:183;;;6406:1;6348:55;6384:11;6396:5;6384:18;;;;;;;;:::i;:::-;;;;;;;;;3967:13;3999:31;;;:21;:31;;;;;:38;;3874:170;6348:55;:59;6344:109;;;-1:-1:-1;6434:4:36;;5968:523;-1:-1:-1;;5968:523:36:o;6344:109::-;6321:7;;;;:::i;:::-;;;;6280:183;;;-1:-1:-1;6479:5:36;;5968:523;-1:-1:-1;;5968:523:36:o;8627:111:35:-;8681:16;8716:15;8709:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8709:22:35;;;;;;;;;;;;;;;;;;;;;;8627:111;:::o;4270:28::-;;;;;;;;;;;;15421:602;15506:7;15525:18;15546:46;15574:14;15590:1;15546:27;:46::i;:::-;15607:20;;15525:67;;-1:-1:-1;15607:25:35;15603:254;;15798:10;15773:36;;;;:24;:36;;;;;;;;15768:78;;15818:28;;-1:-1:-1;;;15818:28:35;;;;;;;;;;;15768:78;15866:30;;15887:8;15866:30;:::i;:::-;15906:18;15927:23;;15941:8;15927:23;:::i;:::-;:13;:23::i;:::-;15906:44;;15961:27;15977:10;15961:15;:27::i;:::-;16006:10;15421:602;-1:-1:-1;;;15421:602:35:o;2677:709:37:-;2784:22;;2752:29;2817:515;2849:21;2841:5;:29;2817:515;;;2895:24;2922:15;2938:5;2922:22;;;;;;;;:::i;:::-;;;;;;;;;;;2978:7;;2922:22;;-1:-1:-1;;;;;;2978:7:37;2964:10;:21;;;;2963:76;;-1:-1:-1;3005:26:37;;;;:8;:26;;;;;:33;-1:-1:-1;;;;;3005:33:37;2991:10;:47;;2963:76;2959:176;;;3066:54;;-1:-1:-1;;;3066:54:37;;;;;160:25:44;;;133:18;;3066:54:37;;;;;;;;2959:176;3154:34;;;;:16;:34;;;;;;;;3149:173;;3208:34;;;;:16;:34;;;;;:41;;-1:-1:-1;;3208:41:37;3245:4;3208:41;;;;;;3267:17;:40;;;;;;;;;;;;;;;3149:173;-1:-1:-1;2872:7:37;;;;:::i;:::-;;;;2817:515;;;;3347:32;3363:15;3347:32;;;;;;:::i;:::-;;;;;;;;2742:644;2677:709;:::o;2267:224:36:-;2372:33;2408:32;;;:20;:32;;;;;;;;;2457:27;;;2450:34;;;;;;;;;;;;;;;;;2344:16;;2408:32;;2450:34;;2457:27;2450:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2450:34:36;;;;;;;;;;;;;;;;;;;;;;;;2267:224;;;:::o;4360:268::-;4446:18;4480:31;;;:21;:31;;;;;:38;4522:1;4480:43;4476:94;;4532:38;;-1:-1:-1;;;4532:38:36;;;;;;;;;;;4476:94;4587:31;;;;:21;:31;;;;;:34;;:31;;;:34;;;;:::i;:::-;;;;;;;;;4580:41;;4360:268;;;:::o;1757:140:37:-;1862:28;;;;:16;:28;;;;;;;;;1855:35;;;;;;;;;;;;;;;;;1827:16;;1855:35;;;1862:28;1855:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1757:140;;;:::o;7928:477:35:-;7994:8;;7966:12;;7994:8;;7990:67;;;-1:-1:-1;8025:21:35;;7928:477::o;7990:67::-;8087:15;8071:12;;:31;8067:92;;-1:-1:-1;8125:23:35;;7928:477::o;8067:92::-;8188:15;8173:11;:9;:11::i;:::-;:30;8169:87;;-1:-1:-1;8226:19:35;;7928:477::o;8169:87::-;8291:15;8270:17;:15;:17::i;:::-;:36;8266:93;;-1:-1:-1;8329:19:35;;7928:477::o;8266:93::-;-1:-1:-1;8376:22:35;;7928:477::o;10136:128::-;10198:19;;:::i;:::-;10236:21;;;;:9;:21;;;;;;;;;10229:28;;;;;;;;;-1:-1:-1;;;;;10229:28:35;;;;-1:-1:-1;;;10229:28:35;;;;;;;;;;;;;;;;;;;;10236:21;;10229:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10229:28:35;;;-1:-1:-1;;10229:28:35;;;;;;;;;;;;;-1:-1:-1;;;;;10229:28:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10229:28:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10229:28:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10229:28:35;;;;-1:-1:-1;;;10229:28:35;;-1:-1:-1;10229:28:35;10136:128;-1:-1:-1;;10136:128:35:o;3558:212:36:-;3732:31;;;;:21;:31;;;;;;;;;3725:38;;;;;;;;;;;;;;;;;3663:46;;3725:38;;;3732:31;3725:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3558:212;;;:::o;9191:437:35:-;9255:16;9283:41;9327:18;9283:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9355:29;9401:24;:31;-1:-1:-1;;;;;9387:46:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9387:46:35;;9355:78;;9448:9;9443:150;9467:24;:31;9463:1;:35;9443:150;;;9537:9;:38;9547:24;9572:1;9547:27;;;;;;;;:::i;:::-;;;;;;;9537:38;;;;;;;;;;;:45;;;;;;;;;;-1:-1:-1;;;;;9537:45:35;9519:12;9532:1;9519:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9519:63:35;;;:15;;;;;;;;;;;:63;9500:3;;;;:::i;:::-;;;;9443:150;;;-1:-1:-1;9609:12:35;9191:437;-1:-1:-1;;9191:437:35:o;11510:1474::-;11596:15;;-1:-1:-1;;;;;11596:29:35;11615:10;11596:29;11592:88;;11652:15;;11634:46;;-1:-1:-1;;;11634:46:35;;-1:-1:-1;;;;;30288:15:44;;;11634:46:35;;;30270:34:44;11669:10:35;30320:18:44;;;30313:43;30205:18;;11634:46:35;30058:304:44;11592:88:35;11695:13;11690:1200;2687:32;2695:19;2718:1;2687:32;:::i;:::-;11714:5;:23;11690:1200;;;11762:25;11800:5;11790:16;;;;;;;;:::i;:::-;11762:44;-1:-1:-1;11843:16:35;11824:15;:35;;;;;;;;:::i;:::-;;11820:1060;;11879:8;;;11820:1060;11988:14;11969:15;:33;;;;;;;;:::i;:::-;;11965:915;;12026:21;;;;:29;:36;:29;:41;12022:81;;12076:27;;-1:-1:-1;;;12076:27:35;;;;;;;;;;;12022:81;12125:8;:21;;;:31;;;12160:1;12125:36;12121:78;;12170:29;;-1:-1:-1;;;12170:29:35;;;;;;;;;;;12121:78;11965:915;;;12243:16;12224:15;:35;;;;;;;;:::i;:::-;;12220:660;;12283:23;;;;:36;:43;2778:2;-1:-1:-1;12279:160:35;;;12386:34;;-1:-1:-1;;;12386:34:35;;;;;;;;;;;12279:160;2778:2;12460:8;:23;;;:35;;;:42;:71;12456:158;;;12562:33;;-1:-1:-1;;;12562:33:35;;;;;;;;;;;12456:158;2778:2;12635:8;:23;;;:33;;;:40;:69;12631:154;;;12735:31;;-1:-1:-1;;;12735:31:35;;;;;;;;;;;12220:660;12849:15;12830:35;;-1:-1:-1;;;12830:35:35;;;;;;;;:::i;12220:660::-;11748:1142;11690:1200;11739:7;;;;:::i;:::-;;;;11690:1200;;;;12909:8;:20;;;12903:34;12941:1;12903:39;12899:78;;12951:26;;-1:-1:-1;;;12951:26:35;;;;;;;;;;;12899:78;11510:1474;:::o;7776:146::-;7849:7;7904:8;7893:20;;;;;;;;:::i;21366:361::-;21453:10;2907:42;21453:29;21449:62;;21491:20;;-1:-1:-1;;;21491:20:35;;;;;;;;;;;21449:62;21536:22;21525:7;:5;:7::i;:::-;:33;;;;;;;;:::i;:::-;;:69;;;-1:-1:-1;21573:21:35;21562:7;:5;:7::i;:::-;:32;;;;;;;;:::i;:::-;;21525:69;21521:144;;;21617:37;;-1:-1:-1;;;21617:37:35;;;;;;;;;;;21521:144;21674:20;:46;21366:361::o;9789:101::-;9831:7;9872:11;;9857:12;;:26;;;;:::i;1206:101:37:-;1255:16;1290:10;1283:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1206:101;:::o;18492:322:35:-;18547:7;;-1:-1:-1;;;;;18547:7:35;18533:10;:21;;;;18532:58;;-1:-1:-1;18560:10:35;2907:42;18560:29;;18532:58;18527:103;;;18600:30;;-1:-1:-1;;;18600:30:35;;;;;;;;;;;18527:103;18641:19;18663:7;:5;:7::i;:::-;18641:29;-1:-1:-1;18694:21:35;18684:6;:31;;;;;;;;:::i;:::-;;18680:68;;18724:24;;-1:-1:-1;;;18724:24:35;;;;;;;;;;;18680:68;18759:8;:15;;-1:-1:-1;;18759:15:35;18770:4;18759:15;;;18790:17;;;;18759:8;;18790:17;18517:297;18492:322::o;8461:103::-;8511:16;8546:11;8539:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8461:103;:::o;17048:1332::-;17148:7;;-1:-1:-1;;;;;17148:7:35;17134:10;:21;17130:56;;17164:22;;-1:-1:-1;;;17164:22:35;;;;;;;;;;;17130:56;17211:22;17200:7;:5;:7::i;:::-;:33;;;;;;;;:::i;:::-;;:69;;;-1:-1:-1;17248:21:35;17237:7;:5;:7::i;:::-;:32;;;;;;;;:::i;:::-;;17200:69;17196:144;;;17292:37;;-1:-1:-1;;;17292:37:35;;;;;;;;;;;17196:144;17355:13;17350:620;17374:34;;;17350:620;;;17433:25;17461:19;;17481:5;17461:26;;;;;;;:::i;:::-;;;;;;;;;;17506:36;;;;:17;:36;;;;;;;;17461:26;;-1:-1:-1;;17506:36:35;;17501:459;;17626:36;;;;:17;:36;;;;;:43;;-1:-1:-1;;17626:43:35;17665:4;17626:43;;;;;;17903:18;:42;;;;;;;;;;;;;;;17501:459;-1:-1:-1;17410:7:35;;;;:::i;:::-;;;;17350:620;;;-1:-1:-1;18066:17:35;;:22;:45;;;;;18092:14;;18110:1;18092:19;18066:45;18062:267;;;18264:54;18298:19;;18264:33;:54::i;:::-;18344:29;18361:11;18344:29;;;;;;:::i;586:379:38:-;693:7;;-1:-1:-1;;;;;693:7:38;679:10;:21;675:66;;709:32;;-1:-1:-1;;;709:32:38;;;;;;;;;;;675:66;792:21;;;-1:-1:-1;;;;;823:46:38;;;-1:-1:-1;;;;;;823:46:38;;;;;;;884:74;;;792:21;;;;30270:34:44;;;30335:2;30320:18;;30313:43;;;;884:74:38;;30205:18:44;884:74:38;30058:304:44;579:27:37;;;;;;;;;;;;705:53;;;;;;;;;;;;;;;;;;;;14910:396:35;15009:7;15028:18;15049:46;15077:14;15093:1;15049:27;:46::i;:::-;15028:67;;15106:33;15121:10;15133:5;;15106:14;:33::i;:::-;15149:30;;15170:8;15149:30;:::i;:::-;15189:18;15210:23;;15224:8;15210:23;:::i;:::-;15189:44;;15244:27;15260:10;15244:15;:27::i;1156:154:32:-;1247:4;1299;1270:25;1283:5;1290:4;1270:12;:25::i;:::-;:33;;1156:154;-1:-1:-1;;;;1156:154:32:o;13116:798:35:-;13212:7;;;13263:13;:31;;;;;;;;:::i;:::-;;13259:535;;-1:-1:-1;13323:13:35;;13259:535;;;13374:12;13357:13;:29;;;;;;;;:::i;:::-;;13353:441;;13406:10;;13420:1;13406:15;13402:337;;13456:7;13445:8;:18;13441:70;;;13472:39;;-1:-1:-1;;;13472:39:35;;;;;;;;;;;13441:70;13556:18;13567:7;13556:8;:18;:::i;:::-;13542:10;;:33;;;;:::i;:::-;13529:46;;13353:441;;13402:337;-1:-1:-1;13714:10:35;;13353:441;;;-1:-1:-1;13782:1:35;13353:441;13821:10;13808:9;:23;13804:76;;13840:40;;-1:-1:-1;;;13840:40:35;;13858:9;13840:40;;;15076:25:44;15117:18;;;15110:34;;;15049:18;;13840:40:35;14902:248:44;14039:814:35;14107:14;;14103:744;;14204:23;14274:3;14250:19;;14244:3;:25;;;;:::i;:::-;14231:39;;:9;:39;:::i;:::-;14230:47;;;;:::i;:::-;14204:73;-1:-1:-1;14295:19:35;;14291:210;;14360:22;;14334:67;;-1:-1:-1;;;;;14360:22:35;14385:15;14334:17;:67::i;:::-;14446:22;;14424:62;;;-1:-1:-1;;;;;14446:22:35;;;32218:51:44;;32300:2;32285:18;;32278:34;;;14424:62:35;;32191:18:44;14424:62:35;;;;;;;14291:210;14515:24;14542:27;14554:15;14542:9;:27;:::i;:::-;14515:54;-1:-1:-1;14587:20:35;;14583:254;;14653:23;;14627:69;;-1:-1:-1;;;;;14653:23:35;14679:16;14627:17;:69::i;:::-;14796:7;;14773:49;;;-1:-1:-1;;;;;14796:7:35;;;32218:51:44;;32300:2;32285:18;;32278:34;;;14773:49:35;;32191:18:44;14773:49:35;;;;;;;14123:724;;14039:814;:::o;20821:539::-;20944:7;20982:19;20971:7;:5;:7::i;:::-;:30;;;;;;;;:::i;:::-;;20967:77;;21036:7;:5;:7::i;:::-;21010:34;;-1:-1:-1;;;21010:34:35;;;;;;;;:::i;20967:77::-;21058:8;21070:1;21058:13;21054:52;;21080:26;;-1:-1:-1;;;21080:26:35;;;;;;;;;;;21054:52;21117:78;21128:10;21140:7;21149;21158:8;21168:17;:26;21186:7;-1:-1:-1;;;;;21168:26:35;-1:-1:-1;;;;;21168:26:35;;;;;;;;;;;;;21117:10;:78::i;:::-;21206:22;:39;;;;;;;-1:-1:-1;21206:39:35;;;;;;;;-1:-1:-1;;;;;;21206:39:35;21234:10;21206:39;;;21261:48;;;32521:25:44;;;32594:4;32582:17;;32577:2;32562:18;;32555:45;32616:18;;;32609:34;;;-1:-1:-1;;;;;21261:48:35;;;;;32509:2:44;32494:18;21261:48:35;;;;;;;-1:-1:-1;;;;;;;;21327:26:35;;;;;:17;:26;;;;;;;20821:539;-1:-1:-1;20821:539:35:o;16029:909::-;16100:7;16134:19;16123:7;:5;:7::i;:::-;:30;;;;;;;;:::i;:::-;;16119:80;;16191:7;:5;:7::i;:::-;16162:37;;-1:-1:-1;;;16162:37:35;;;;;;;;:::i;16119:80::-;16243:29;;16228:10;16213:26;;;;:14;:26;;;;;;:59;16209:156;;16324:29;;16295:59;;-1:-1:-1;;;16295:59:35;;;;;;160:25:44;;148:2;133:18;;14:177;16209:156:35;16430:16;;16400:18;:25;16379:11;:18;:46;;16400:25;16379:46;:::i;:::-;16378:68;16374:153;;16499:16;;16469:47;;-1:-1:-1;;;16469:47:35;;;;;;160:25:44;;148:2;133:18;;14:177;16374:153:35;16537:18;16558:22;16571:8;16558:12;:22::i;:::-;16594:21;;;;:9;:21;;;;;:28;:21;;-1:-1:-1;;;;16594:28:35;;;;16590:72;;;16631:31;;-1:-1:-1;;;16631:31:35;;;;;160:25:44;;;133:18;;16631:31:35;14:177:44;16590:72:35;16673:11;:28;;;;;;;;;;;;;;-1:-1:-1;16711:21:35;;;:9;16673:28;16711:21;;;;;;;;:32;;;;;;;;;;-1:-1:-1;;;16711:32:35;-1:-1:-1;;;;;;16711:32:35;;;-1:-1:-1;;;;;16711:32:35;;;;;;;;;;;;;;16735:8;;16711:32;;;;;;;:::i;:::-;-1:-1:-1;16711:32:35;;;;;;;;;;-1:-1:-1;;;;;;16711:32:35;-1:-1:-1;;;;;16711:32:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16711:32:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16711:32:35;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16711:32:35;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;16768:10:35;16753:26;;;;:14;:26;;;;;:31;;16783:1;;-1:-1:-1;16753:26:35;;-1:-1:-1;16753:26:35;;-1:-1:-1;16753:31:35;;16783:1;;16753:31;:::i;:::-;;;;-1:-1:-1;;16794:15:35;:32;;;;;;;-1:-1:-1;16794:32:35;;;;;;;;-1:-1:-1;;;;;;16794:32:35;16815:10;16794:32;;;;;;16882:20;;;;;16842:61;;;;;;16858:10;;16842:61;:::i;:::-;;;;;;;;16921:10;16029:909;-1:-1:-1;;16029:909:35:o;7589:606:36:-;7705:9;7700:489;7720:30;;;7700:489;;;7771:25;7799:19;;7819:1;7799:22;;;;;;;:::i;:::-;;;;;;;;;;7835:32;7870:39;;;:20;:39;;;;;;;:67;7799:22;;-1:-1:-1;8105:73:36;;-1:-1:-1;7799:22:36;7870:67;8105:28;:73::i;:::-;7757:432;;7752:3;;;;;:::i;:::-;;;;7700:489;;1934:290:32;2017:7;2059:4;2017:7;2073:116;2097:5;:12;2093:1;:16;2073:116;;;2145:33;2155:12;2169:5;2175:1;2169:8;;;;;;;;:::i;:::-;;;;;;;2145:9;:33::i;:::-;2130:48;-1:-1:-1;2111:3:32;;;;:::i;:::-;;;;2073:116;;;-1:-1:-1;2205:12:32;1934:290;-1:-1:-1;;;1934:290:32:o;2647:312:30:-;2761:6;2736:21;:31;;2728:73;;;;-1:-1:-1;;;2728:73:30;;33249:2:44;2728:73:30;;;33231:21:44;33288:2;33268:18;;;33261:30;33327:31;33307:18;;;33300:59;33376:18;;2728:73:30;33047:353:44;2728:73:30;2813:12;2831:9;-1:-1:-1;;;;;2831:14:30;2853:6;2831:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2812:52;;;2882:7;2874:78;;;;-1:-1:-1;;;2874:78:30;;33817:2:44;2874:78:30;;;33799:21:44;33856:2;33836:18;;;33829:30;33895:34;33875:18;;;33868:62;33966:28;33946:18;;;33939:56;34012:19;;2874:78:30;33615:422:44;8335:2129:36;8493:33;8529:32;;;:20;:32;;;;;8577:16;;:21;;;;8576:90;;-1:-1:-1;;;;;;8629:35:36;;;;;;:26;:35;;;;;;8616:48;;:10;:48;:::i;:::-;8604:8;:61;8576:90;8572:148;;;8689:20;;-1:-1:-1;;;8689:20:36;;;;;;;;;;;8572:148;-1:-1:-1;;;;;8767:39:36;;8730:20;8767:39;;;:30;;;:39;;;;;:48;:53;:130;;;;-1:-1:-1;;;;;;8840:39:36;;;;;;:30;;;:39;;;;;:52;;;:57;8767:130;8730:177;-1:-1:-1;8922:30:36;;;8918:518;;8968:52;;9012:8;;8968:12;;:31;;:52;;9012:8;;8968:52;:::i;:::-;;;;-1:-1:-1;;;;;;;9034:39:36;;;;;;:30;;;:39;;;;;:60;;9086:8;;9034:39;:60;;9086:8;;9034:60;:::i;:::-;;;;-1:-1:-1;8918:518:36;;-1:-1:-1;8918:518:36;;-1:-1:-1;;9115:34:36;;;;9111:325;;9169:17;;9190:1;9169:22;9165:57;;9200:22;;-1:-1:-1;;;9200:22:36;;;;;;;;;;;9165:57;9284:8;9236:12;:31;;:44;;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;9306:39:36;;;;;;:30;;;:39;;;;;:52;;:64;;9362:8;;9306:39;:64;;9362:8;;9306:64;:::i;9111:325::-;9408:17;;-1:-1:-1;;;9408:17:36;;;;;;;;;;;9111:325;9450:15;9446:87;;;9481:27;;;:41;;;;;;;-1:-1:-1;9481:41:36;;;;;;;;;;-1:-1:-1;;;;;;9481:41:36;-1:-1:-1;;;;;9481:41:36;;;;;9446:87;-1:-1:-1;;;;;9542:35:36;;;;;;:26;:35;;;;;:47;;9581:8;;9542:35;:47;;9581:8;;9542:47;:::i;:::-;;;;;;;;9617:8;9599:14;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;9770:17:36;;:22;9769:49;;;;;9798:14;;9816:1;9798:19;9769:49;9765:693;;;9856:40;;9834:19;9976:22;9990:8;9856:40;9976:22;:::i;:::-;9954:44;-1:-1:-1;10227:15:36;;10223:107;;10262:53;10291:10;10303:11;10262:28;:53::i;:::-;10343:34;;;;:21;:34;;;;;;;:51;;;;;;;;;;;;;;;;10409:38;10422:11;10365;10409:12;:38::i;:::-;9820:638;;9765:693;8483:1981;;8335:2129;;;;;:::o;6653:852::-;6748:39;6790:31;;;:21;:31;;;;;;;;6748:73;;;;;;;;;;;;;;;;;;;6790:31;;6748:73;;;6790:31;6748:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6880:9;6875:624;6899:22;:29;6895:1;:33;6875:624;;;6982:10;6953:22;6976:1;6953:25;;;;;;;;:::i;:::-;;;;;;;:39;6949:540;;7339:22;7394:1;7362:22;:29;:33;;;;:::i;:::-;7339:57;;;;;;;;:::i;:::-;;;;;;;7302:21;:31;7324:8;7302:31;;;;;;;;;;;7334:1;7302:34;;;;;;;;:::i;:::-;;;;;;;;:94;;;;7414:21;:31;7436:8;7414:31;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7469:5;;6949:540;6930:3;;;;:::i;:::-;;;;6875:624;;9205:147:32;9268:7;9298:1;9294;:5;:51;;9426:13;9517:15;;;9552:4;9545:15;;;9598:4;9582:21;;9294:51;;;9426:13;9517:15;;;9552:4;9545:15;;;9598:4;9582:21;;9302:20;9358:261;6318:1337:40;6423:11;:18;;6495:48;;;;;;;;;;;;;;;;;6423:18;;6395:25;;6495:48;6423:18;;6495:48;;6423:11;:18;6495:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6710:17;6731:1;6710:22;6706:99;;-1:-1:-1;;6748:11:40;:26;;;;;;;-1:-1:-1;6748:26:40;;;;;;;-1:-1:-1;6318:1337:40:o;6706:99::-;7060:17;7078:21;7098:1;7078:17;:21;:::i;:::-;7060:40;;;;;;;;:::i;:::-;;;;;;;7049:8;:51;7045:424;;;7141:9;;7120:17;:30;7116:343;;7258:7;;6318:1337;;:::o;7116:343::-;-1:-1:-1;;7394:11:40;:26;;;;;;;-1:-1:-1;7394:26:40;;;;;;;-1:-1:-1;6318:1337:40:o;7116:343::-;7579:69;7591:8;7601;7611:17;7630;3047:22;;3079:494;3111:17;3103:5;:25;3079:494;;;3258:17;3276:5;3258:24;;;;;;;;:::i;:::-;;;;;;;3246:8;:36;3242:188;;3409:7;;;;3242:188;3459:17;3477:5;3459:24;;;;;;;;:::i;:::-;;;;;;;3448:8;:35;3444:119;;;3520:5;3503:22;;3543:5;;3444:119;3130:7;;;;:::i;:::-;;;;3079:494;;;;3628:21;3664:1;3653:8;:12;3652:70;;;;-1:-1:-1;3967:13:36;3999:31;;;:21;:31;;;;;:38;3671:50:40;3652:70;3628:94;;3807:22;4071:16;:67;;;;;4129:8;4092:17;4110:14;4092:33;;;;;;;;:::i;:::-;;;;;;;:45;4071:67;4065:1656;;4508:21;4528:1;4508:17;:21;:::i;:::-;4490:14;:39;4484:844;;4803:13;4819:18;:14;4836:1;4819:18;:::i;:::-;4803:34;;4798:516;4847:17;4839:5;:25;4798:516;;;4918:17;4936:9;4944:1;4936:5;:9;:::i;:::-;4918:28;;;;;;;;:::i;:::-;;;;;;;4897:11;4909:5;4897:18;;;;;;;;:::i;:::-;;;;;;;;;;:49;5132:16;:58;;;;;5181:8;5153:17;5171:5;5153:24;;;;;;;;:::i;:::-;;;;;;;:36;5132:58;5128:168;;;5238:4;5218:24;;5268:5;;5128:168;4866:7;;;;:::i;:::-;;;;4798:516;;;;4484:844;5566:17;5565:18;:53;;;;;5608:9;;5588:17;:29;5565:53;5561:150;;;5638:11;5655:17;5673:21;5693:1;5673:17;:21;:::i;:::-;5655:40;;;;;;;;:::i;:::-;;;;;;;;;;;;5638:58;;;;;;;-1:-1:-1;5638:58:40;;;;;;;;;5561:150;5882:8;5852:11;5864:14;5852:27;;;;;;;;:::i;:::-;;;;;;;;;;:38;-1:-1:-1;;;2822:3075:40;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;196:180:44:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:44;;196:180;-1:-1:-1;196:180:44:o;381:423::-;423:3;461:5;455:12;488:6;483:3;476:19;513:1;523:162;537:6;534:1;531:13;523:162;;;599:4;655:13;;;651:22;;645:29;627:11;;;623:20;;616:59;552:12;523:162;;;527:3;730:1;723:4;714:6;709:3;705:16;701:27;694:38;793:4;786:2;782:7;777:2;769:6;765:15;761:29;756:3;752:39;748:50;741:57;;;381:423;;;;:::o;809:461::-;862:3;900:5;894:12;927:6;922:3;915:19;953:4;982:2;977:3;973:12;966:19;;1019:2;1012:5;1008:14;1040:1;1050:195;1064:6;1061:1;1058:13;1050:195;;;1129:13;;-1:-1:-1;;;;;1125:39:44;1113:52;;1185:12;;;;1220:15;;;;1161:1;1079:9;1050:195;;;-1:-1:-1;1261:3:44;;809:461;-1:-1:-1;;;;;809:461:44:o;1275:292::-;1330:3;1374:5;1368:12;1401:4;1396:3;1389:17;1427:58;1479:4;1474:3;1470:14;1456:12;1427:58;:::i;:::-;1534:4;1523:16;;;1517:23;1501:14;;;;1494:47;;;;-1:-1:-1;1415:70:44;1275:292;-1:-1:-1;1275:292:44:o;1572:446::-;1636:3;1674:5;1668:12;1701:6;1696:3;1689:19;1727:4;1756:2;1751:3;1747:12;1740:19;;1793:2;1786:5;1782:14;1814:1;1824:169;1838:6;1835:1;1832:13;1824:169;;;1899:13;;1887:26;;1933:12;;;;1968:15;;;;1860:1;1853:9;1824:169;;2023:1037;2080:3;2124:5;2118:12;2151:4;2146:3;2139:17;2177:58;2229:4;2224:3;2220:14;2206:12;2177:58;:::i;:::-;2165:70;;2254:4;2306:2;2299:5;2295:14;2289:21;2350:3;2344:4;2340:14;2335:2;2330:3;2326:12;2319:36;2377:4;2410:14;2404:21;2447:6;2441:4;2434:20;2482:2;2476:4;2472:13;2463:22;;2539:2;2529:6;2526:1;2522:14;2516:4;2512:25;2508:34;2585:2;2569:14;2565:23;2551:37;;2606:1;2616:256;2630:6;2627:1;2624:13;2616:256;;;2720:2;2716:7;2709:4;2701:6;2697:17;2693:31;2686:5;2679:46;2748:40;2781:6;2772;2766:13;2748:40;:::i;:::-;2811:15;;;;2848:14;;;;2738:50;-1:-1:-1;2652:1:44;2645:9;2616:256;;;2620:3;2920:4;2913:5;2909:16;2903:23;2881:45;;2970:3;2962:6;2958:16;2951:4;2946:3;2942:14;2935:40;2991:63;3047:6;3031:14;2991:63;:::i;:::-;2984:70;2023:1037;-1:-1:-1;;;;;;;;;2023:1037:44:o;3065:1018::-;3505:4;3551:1;3547;3542:3;3538:11;3534:19;3592:2;3584:6;3580:15;3569:9;3562:34;3646:6;3639:14;3632:22;3627:2;3616:9;3612:18;3605:50;3691:3;3686:2;3675:9;3671:18;3664:31;3718:46;3759:3;3748:9;3744:19;3736:6;3718:46;:::i;:::-;3819:2;3810:6;3804:13;3800:22;3795:2;3784:9;3780:18;3773:50;3872:9;3864:6;3860:22;3854:3;3843:9;3839:19;3832:51;3906:46;3945:6;3937;3906:46;:::i;:::-;3892:60;;;4001:9;3993:6;3989:22;3983:3;3972:9;3968:19;3961:51;4029:48;4070:6;4062;4029:48;:::i;4296:220::-;4445:2;4434:9;4427:21;4408:4;4465:45;4506:2;4495:9;4491:18;4483:6;4465:45;:::i;4677:257::-;4597:12;;4585:25;;4659:4;4648:16;;;4642:23;4626:14;;;4619:47;4869:2;4854:18;;4881:47;4521:151;4939:555;5128:2;5117:9;5110:21;5203:1;5199;5194:3;5190:11;5186:19;5177:6;5171:13;5167:39;5162:2;5151:9;5147:18;5140:67;5261:2;5253:6;5249:15;5243:22;5238:2;5227:9;5223:18;5216:50;5320:2;5312:6;5308:15;5302:22;5297:2;5286:9;5282:18;5275:50;5091:4;5372:2;5364:6;5360:15;5354:22;5414:4;5407;5396:9;5392:20;5385:34;5436:52;5483:3;5472:9;5468:19;5454:12;5436:52;:::i;:::-;5428:60;4939:555;-1:-1:-1;;;;4939:555:44:o;5939:261::-;6118:2;6107:9;6100:21;6081:4;6138:56;6190:2;6179:9;6175:18;6167:6;6138:56;:::i;6205:131::-;-1:-1:-1;;;;;6280:31:44;;6270:42;;6260:70;;6326:1;6323;6316:12;6341:134;6409:20;;6438:31;6409:20;6438:31;:::i;:::-;6341:134;;;:::o;6480:247::-;6539:6;6592:2;6580:9;6571:7;6567:23;6563:32;6560:52;;;6608:1;6605;6598:12;6560:52;6647:9;6634:23;6666:31;6691:5;6666:31;:::i;6732:127::-;6793:10;6788:3;6784:20;6781:1;6774:31;6824:4;6821:1;6814:15;6848:4;6845:1;6838:15;6864:253;6936:2;6930:9;6978:4;6966:17;;-1:-1:-1;;;;;6998:34:44;;7034:22;;;6995:62;6992:88;;;7060:18;;:::i;:::-;7096:2;7089:22;6864:253;:::o;7122:::-;7194:2;7188:9;7236:4;7224:17;;-1:-1:-1;;;;;7256:34:44;;7292:22;;;7253:62;7250:88;;;7318:18;;:::i;7380:275::-;7451:2;7445:9;7516:2;7497:13;;-1:-1:-1;;7493:27:44;7481:40;;-1:-1:-1;;;;;7536:34:44;;7572:22;;;7533:62;7530:88;;;7598:18;;:::i;:::-;7634:2;7627:22;7380:275;;-1:-1:-1;7380:275:44:o;7660:531::-;7703:5;7756:3;7749:4;7741:6;7737:17;7733:27;7723:55;;7774:1;7771;7764:12;7723:55;7810:6;7797:20;-1:-1:-1;;;;;7832:2:44;7829:26;7826:52;;;7858:18;;:::i;:::-;7902:55;7945:2;7926:13;;-1:-1:-1;;7922:27:44;7951:4;7918:38;7902:55;:::i;:::-;7982:2;7973:7;7966:19;8028:3;8021:4;8016:2;8008:6;8004:15;8000:26;7997:35;7994:55;;;8045:1;8042;8035:12;7994:55;8110:2;8103:4;8095:6;8091:17;8084:4;8075:7;8071:18;8058:55;8158:1;8133:16;;;8151:4;8129:27;8122:38;;;;8137:7;7660:531;-1:-1:-1;;;7660:531:44:o;8196:390::-;8274:6;8282;8335:2;8323:9;8314:7;8310:23;8306:32;8303:52;;;8351:1;8348;8341:12;8303:52;8387:9;8374:23;8364:33;;8448:2;8437:9;8433:18;8420:32;-1:-1:-1;;;;;8467:6:44;8464:30;8461:50;;;8507:1;8504;8497:12;8461:50;8530;8572:7;8563:6;8552:9;8548:22;8530:50;:::i;:::-;8520:60;;;8196:390;;;;;:::o;8591:367::-;8654:8;8664:6;8718:3;8711:4;8703:6;8699:17;8695:27;8685:55;;8736:1;8733;8726:12;8685:55;-1:-1:-1;8759:20:44;;-1:-1:-1;;;;;8791:30:44;;8788:50;;;8834:1;8831;8824:12;8788:50;8871:4;8863:6;8859:17;8847:29;;8931:3;8924:4;8914:6;8911:1;8907:14;8899:6;8895:27;8891:38;8888:47;8885:67;;;8948:1;8945;8938:12;8963:572;9058:6;9066;9074;9127:2;9115:9;9106:7;9102:23;9098:32;9095:52;;;9143:1;9140;9133:12;9095:52;9182:9;9169:23;9201:31;9226:5;9201:31;:::i;:::-;9251:5;-1:-1:-1;9307:2:44;9292:18;;9279:32;-1:-1:-1;;;;;9323:30:44;;9320:50;;;9366:1;9363;9356:12;9320:50;9405:70;9467:7;9458:6;9447:9;9443:22;9405:70;:::i;:::-;8963:572;;9494:8;;-1:-1:-1;9379:96:44;;-1:-1:-1;;;;8963:572:44:o;9540:658::-;9711:2;9763:21;;;9833:13;;9736:18;;;9855:22;;;9682:4;;9711:2;9934:15;;;;9908:2;9893:18;;;9682:4;9977:195;9991:6;9988:1;9985:13;9977:195;;;10056:13;;-1:-1:-1;;;;;10052:39:44;10040:52;;10147:15;;;;10112:12;;;;10088:1;10006:9;9977:195;;;-1:-1:-1;10189:3:44;;9540:658;-1:-1:-1;;;;;;9540:658:44:o;10203:160::-;10268:20;;10324:13;;10317:21;10307:32;;10297:60;;10353:1;10350;10343:12;10368:709;10478:6;10486;10494;10502;10510;10563:3;10551:9;10542:7;10538:23;10534:33;10531:53;;;10580:1;10577;10570:12;10531:53;10619:9;10606:23;10638:31;10663:5;10638:31;:::i;:::-;10688:5;-1:-1:-1;10740:2:44;10725:18;;10712:32;;-1:-1:-1;10795:2:44;10780:18;;10767:32;-1:-1:-1;;;;;10811:30:44;;10808:50;;;10854:1;10851;10844:12;10808:50;10893:70;10955:7;10946:6;10935:9;10931:22;10893:70;:::i;:::-;10982:8;;-1:-1:-1;10867:96:44;-1:-1:-1;11036:35:44;;-1:-1:-1;11067:2:44;11052:18;;11036:35;:::i;:::-;11026:45;;10368:709;;;;;;;;:::o;11274:1004::-;11363:6;11416:2;11404:9;11395:7;11391:23;11387:32;11384:52;;;11432:1;11429;11422:12;11384:52;11472:9;11459:23;-1:-1:-1;;;;;11542:2:44;11534:6;11531:14;11528:34;;;11558:1;11555;11548:12;11528:34;11581:22;;;;11637:4;11619:16;;;11615:27;11612:47;;;11655:1;11652;11645:12;11612:47;11688:2;11682:9;11730:4;11722:6;11718:17;11785:6;11773:10;11770:22;11765:2;11753:10;11750:18;11747:46;11744:72;;;11796:18;;:::i;:::-;11832:2;11825:22;11869:16;;11894:31;11869:16;11894:31;:::i;:::-;11949:5;11941:6;11934:21;;12009:2;12005;12001:11;11988:25;11983:2;11975:6;11971:15;11964:50;12068:2;12064;12060:11;12047:25;12042:2;12034:6;12030:15;12023:50;12119:2;12115;12111:11;12098:25;12148:2;12138:8;12135:16;12132:36;;;12164:1;12161;12154:12;12132:36;12201:45;12238:7;12227:8;12223:2;12219:17;12201:45;:::i;:::-;12196:2;12184:15;;12177:70;-1:-1:-1;12188:6:44;11274:1004;-1:-1:-1;;;;;11274:1004:44:o;12283:156::-;12349:20;;12409:4;12398:16;;12388:27;;12378:55;;12429:1;12426;12419:12;12444:713;12564:6;12572;12580;12588;12596;12604;12657:3;12645:9;12636:7;12632:23;12628:33;12625:53;;;12674:1;12671;12664:12;12625:53;12710:9;12697:23;12687:33;;12739:36;12771:2;12760:9;12756:18;12739:36;:::i;:::-;12729:46;;12822:2;12811:9;12807:18;12794:32;12784:42;;12873:2;12862:9;12858:18;12845:32;12835:42;;12928:3;12917:9;12913:19;12900:33;-1:-1:-1;;;;;12948:6:44;12945:30;12942:50;;;12988:1;12985;12978:12;12942:50;13027:70;13089:7;13080:6;13069:9;13065:22;13027:70;:::i;:::-;12444:713;;;;-1:-1:-1;12444:713:44;;-1:-1:-1;12444:713:44;;13116:8;;12444:713;-1:-1:-1;;;12444:713:44:o;13162:905::-;13440:4;13469:2;13498;13487:9;13480:21;13524:56;13576:2;13565:9;13561:18;13553:6;13524:56;:::i;:::-;13637:22;;;13599:2;13617:18;;;13610:50;;;;13709:13;;13731:22;;;13807:15;;;;13769;;;13840:1;13850:191;13864:6;13861:1;13858:13;13850:191;;;13913:48;13957:3;13948:6;13942:13;4597:12;;4585:25;;4659:4;4648:16;;;4642:23;4626:14;;4619:47;4521:151;13913:48;14016:15;;;;13981:12;;;;13886:1;13879:9;13850:191;;;-1:-1:-1;14058:3:44;;13162:905;-1:-1:-1;;;;;;;;13162:905:44:o;14072:640::-;14176:6;14184;14192;14200;14253:2;14241:9;14232:7;14228:23;14224:32;14221:52;;;14269:1;14266;14259:12;14221:52;14308:9;14295:23;14327:31;14352:5;14327:31;:::i;:::-;14377:5;-1:-1:-1;14429:2:44;14414:18;;14401:32;;-1:-1:-1;14484:2:44;14469:18;;14456:32;-1:-1:-1;;;;;14500:30:44;;14497:50;;;14543:1;14540;14533:12;14497:50;14582:70;14644:7;14635:6;14624:9;14620:22;14582:70;:::i;:::-;14072:640;;;;-1:-1:-1;14671:8:44;-1:-1:-1;;;;14072:640:44:o;15155:318::-;15230:6;15238;15246;15299:2;15287:9;15278:7;15274:23;15270:32;15267:52;;;15315:1;15312;15305:12;15267:52;15351:9;15338:23;15328:33;;15380:36;15412:2;15401:9;15397:18;15380:36;:::i;:::-;15370:46;;15463:2;15452:9;15448:18;15435:32;15425:42;;15155:318;;;;;:::o;15478:315::-;15546:6;15554;15607:2;15595:9;15586:7;15582:23;15578:32;15575:52;;;15623:1;15620;15613:12;15575:52;15659:9;15646:23;15636:33;;15719:2;15708:9;15704:18;15691:32;15732:31;15757:5;15732:31;:::i;:::-;15782:5;15772:15;;;15478:315;;;;;:::o;15798:248::-;15866:6;15874;15927:2;15915:9;15906:7;15902:23;15898:32;15895:52;;;15943:1;15940;15933:12;15895:52;-1:-1:-1;;15966:23:44;;;16036:2;16021:18;;;16008:32;;-1:-1:-1;15798:248:44:o;16290:461::-;16552:1;16548;16543:3;16539:11;16535:19;16527:6;16523:32;16512:9;16505:51;16592:6;16587:2;16576:9;16572:18;16565:34;16635:6;16630:2;16619:9;16615:18;16608:34;16678:3;16673:2;16662:9;16658:18;16651:31;16486:4;16699:46;16740:3;16729:9;16725:19;16717:6;16699:46;:::i;:::-;16691:54;16290:461;-1:-1:-1;;;;;;16290:461:44:o;16756:161::-;16821:5;16866:3;16857:6;16852:3;16848:16;16844:26;16841:46;;;16883:1;16880;16873:12;16841:46;-1:-1:-1;16905:6:44;16756:161;-1:-1:-1;16756:161:44:o;16922:367::-;17014:6;17067:2;17055:9;17046:7;17042:23;17038:32;17035:52;;;17083:1;17080;17073:12;17035:52;17123:9;17110:23;-1:-1:-1;;;;;17148:6:44;17145:30;17142:50;;;17188:1;17185;17178:12;17142:50;17211:72;17275:7;17266:6;17255:9;17251:22;17211:72;:::i;17294:183::-;17354:4;-1:-1:-1;;;;;17379:6:44;17376:30;17373:56;;;17409:18;;:::i;:::-;-1:-1:-1;17454:1:44;17450:14;17466:4;17446:25;;17294:183::o;17482:662::-;17536:5;17589:3;17582:4;17574:6;17570:17;17566:27;17556:55;;17607:1;17604;17597:12;17556:55;17643:6;17630:20;17669:4;17693:60;17709:43;17749:2;17709:43;:::i;:::-;17693:60;:::i;:::-;17787:15;;;17873:1;17869:10;;;;17857:23;;17853:32;;;17818:12;;;;17897:15;;;17894:35;;;17925:1;17922;17915:12;17894:35;17961:2;17953:6;17949:15;17973:142;17989:6;17984:3;17981:15;17973:142;;;18055:17;;18043:30;;18093:12;;;;18006;;17973:142;;;-1:-1:-1;18133:5:44;17482:662;-1:-1:-1;;;;;;17482:662:44:o;18149:348::-;18233:6;18286:2;18274:9;18265:7;18261:23;18257:32;18254:52;;;18302:1;18299;18292:12;18254:52;18342:9;18329:23;-1:-1:-1;;;;;18367:6:44;18364:30;18361:50;;;18407:1;18404;18397:12;18361:50;18430:61;18483:7;18474:6;18463:9;18459:22;18430:61;:::i;18684:127::-;18745:10;18740:3;18736:20;18733:1;18726:31;18776:4;18773:1;18766:15;18800:4;18797:1;18790:15;18816:249;18966:2;18951:18;;18999:1;18988:13;;18978:47;;19005:18;;:::i;:::-;19034:25;;;18816:249;:::o;19070:1038::-;19261:2;19250:9;19243:21;19224:4;19300:1;19296;19291:3;19287:11;19283:19;19357:2;19348:6;19342:13;19338:22;19333:2;19322:9;19318:18;19311:50;19429:2;19421:6;19417:15;19411:22;19404:30;19397:38;19392:2;19381:9;19377:18;19370:66;19483:2;19475:6;19471:15;19465:22;19523:4;19518:2;19507:9;19503:18;19496:32;19551:52;19598:3;19587:9;19583:19;19569:12;19551:52;:::i;:::-;19537:66;;19675:2;19668;19660:6;19656:15;19650:22;19644:29;19640:38;19634:3;19623:9;19619:19;19612:67;19728:3;19720:6;19716:16;19710:23;19688:45;;19756:2;19752:7;19824:2;19812:9;19804:6;19800:22;19796:31;19790:3;19779:9;19775:19;19768:60;19851:54;19898:6;19882:14;19851:54;:::i;:::-;19837:68;;19954:3;19946:6;19942:16;19936:23;19914:45;;20025:2;20013:9;20005:6;20001:22;19997:31;19990:4;19979:9;19975:20;19968:61;;20046:56;20095:6;20079:14;20046:56;:::i;20113:486::-;20174:5;20222:4;20210:9;20205:3;20201:19;20197:30;20194:50;;;20240:1;20237;20230:12;20194:50;20273:2;20267:9;20315:4;20307:6;20303:17;20386:6;20374:10;20371:22;-1:-1:-1;;;;;20338:10:44;20335:34;20332:62;20329:88;;;20397:18;;:::i;:::-;20433:2;20426:22;20466:6;-1:-1:-1;20466:6:44;20496:23;;20528:33;20496:23;20528:33;:::i;:::-;20570:23;;20113:486;;-1:-1:-1;;20113:486:44:o;20604:737::-;20658:5;20711:3;20704:4;20696:6;20692:17;20688:27;20678:55;;20729:1;20726;20719:12;20678:55;20765:6;20752:20;20791:4;20815:60;20831:43;20871:2;20831:43;:::i;20815:60::-;20909:15;;;20995:1;20991:10;;;;20979:23;;20975:32;;;20940:12;;;;21019:15;;;21016:35;;;21047:1;21044;21037:12;21016:35;21083:2;21075:6;21071:15;21095:217;21111:6;21106:3;21103:15;21095:217;;;21191:3;21178:17;21208:31;21233:5;21208:31;:::i;:::-;21252:18;;21290:12;;;;21128;;21095:217;;21346:625;21405:5;21453:4;21441:9;21436:3;21432:19;21428:30;21425:50;;;21471:1;21468;21461:12;21425:50;21504:4;21498:11;21548:4;21540:6;21536:17;-1:-1:-1;;;;;21640:6:44;21628:10;21625:22;21620:2;21608:10;21605:18;21602:46;21599:72;;;21651:18;;:::i;:::-;21693:10;21687:4;21680:24;21722:6;21713:15;;21764:9;21751:23;21737:37;;21797:2;21789:6;21786:14;21783:34;;;21813:1;21810;21803:12;21783:34;;21841:57;21894:3;21885:6;21874:9;21870:22;21841:57;:::i;:::-;21833:6;21826:73;;21960:2;21949:9;21945:18;21932:32;21927:2;21919:6;21915:15;21908:57;;21346:625;;;;:::o;21976:1518::-;22037:5;22085:4;22073:9;22068:3;22064:19;22060:30;22057:50;;;22103:1;22100;22093:12;22057:50;22125:22;;:::i;:::-;22116:31;;22183:9;22170:23;-1:-1:-1;;;;;22253:2:44;22245:6;22242:14;22239:34;;;22269:1;22266;22259:12;22239:34;22296:57;22349:3;22340:6;22329:9;22325:22;22296:57;:::i;:::-;22289:5;22282:72;22373:2;22363:12;;22428:2;22417:9;22413:18;22400:32;22457:2;22447:8;22444:16;22441:36;;;22473:1;22470;22463:12;22441:36;22496:24;;22551:4;22543:13;;22539:23;-1:-1:-1;22529:51:44;;22576:1;22573;22566:12;22529:51;22612:2;22599:16;22635:60;22651:43;22691:2;22651:43;:::i;22635:60::-;22729:15;;;22811:1;22807:10;;;;22799:19;;22795:28;;;22760:12;;;;22835:15;;;22832:35;;;22863:1;22860;22853:12;22832:35;22895:2;22891;22887:11;22907:349;22923:6;22918:3;22915:15;22907:349;;;23009:3;22996:17;23045:2;23032:11;23029:19;23026:109;;;23089:1;23118:2;23114;23107:14;23026:109;23160:53;23209:3;23204:2;23190:11;23186:2;23182:20;23178:29;23160:53;:::i;:::-;23148:66;;-1:-1:-1;23234:12:44;;;;22940;;22907:349;;;22911:3;23288:5;23283:2;23276:5;23272:14;23265:29;;;;;23347:2;23336:9;23332:18;23319:32;23303:48;;23376:2;23366:8;23363:16;23360:36;;;23392:1;23389;23382:12;23360:36;;23428:59;23483:3;23472:8;23461:9;23457:24;23428:59;:::i;:::-;23423:2;23416:5;23412:14;23405:83;;21976:1518;;;;:::o;23499:998::-;23558:5;23606:4;23594:9;23589:3;23585:19;23581:30;23578:50;;;23624:1;23621;23614:12;23578:50;23646:22;;:::i;:::-;23637:31;;23691:29;23710:9;23691:29;:::i;:::-;23684:5;23677:44;23753:35;23784:2;23773:9;23769:18;23753:35;:::i;:::-;23748:2;23741:5;23737:14;23730:59;23840:2;23829:9;23825:18;23812:32;-1:-1:-1;;;;;23904:2:44;23896:6;23893:14;23890:34;;;23920:1;23917;23910:12;23890:34;23956:46;23998:3;23989:6;23978:9;23974:22;23956:46;:::i;:::-;23951:2;23944:5;23940:14;23933:70;24035:57;24088:3;24083:2;24072:9;24068:18;24035:57;:::i;:::-;24030:2;24023:5;24019:14;24012:81;24146:3;24135:9;24131:19;24118:33;24102:49;;24176:2;24166:8;24163:16;24160:36;;;24192:1;24189;24182:12;24160:36;24229:61;24286:3;24275:8;24264:9;24260:24;24229:61;:::i;:::-;24223:3;24216:5;24212:15;24205:86;24344:3;24333:9;24329:19;24316:33;24300:49;;24374:2;24364:8;24361:16;24358:36;;;24390:1;24387;24380:12;24358:36;;24427:63;24486:3;24475:8;24464:9;24460:24;24427:63;:::i;:::-;24421:3;24414:5;24410:15;24403:88;;23499:998;;;;:::o;24502:356::-;24592:6;24645:2;24633:9;24624:7;24620:23;24616:32;24613:52;;;24661:1;24658;24651:12;24613:52;24701:9;24688:23;-1:-1:-1;;;;;24726:6:44;24723:30;24720:50;;;24766:1;24763;24756:12;24720:50;24789:63;24844:7;24835:6;24824:9;24820:22;24789:63;:::i;24863:437::-;24949:6;24957;25010:2;24998:9;24989:7;24985:23;24981:32;24978:52;;;25026:1;25023;25016:12;24978:52;25066:9;25053:23;-1:-1:-1;;;;;25091:6:44;25088:30;25085:50;;;25131:1;25128;25121:12;25085:50;25170:70;25232:7;25223:6;25212:9;25208:22;25170:70;:::i;:::-;25259:8;;25144:96;;-1:-1:-1;24863:437:44;-1:-1:-1;;;;24863:437:44:o;25580:703::-;25708:6;25716;25724;25777:2;25765:9;25756:7;25752:23;25748:32;25745:52;;;25793:1;25790;25783:12;25745:52;25833:9;25820:23;-1:-1:-1;;;;;25903:2:44;25895:6;25892:14;25889:34;;;25919:1;25916;25909:12;25889:34;25942:72;26006:7;25997:6;25986:9;25982:22;25942:72;:::i;:::-;25932:82;;26067:2;26056:9;26052:18;26039:32;26023:48;;26096:2;26086:8;26083:16;26080:36;;;26112:1;26109;26102:12;26080:36;;26151:72;26215:7;26204:8;26193:9;26189:24;26151:72;:::i;26288:380::-;26367:1;26363:12;;;;26410;;;26431:61;;26485:4;26477:6;26473:17;26463:27;;26431:61;26538:2;26530:6;26527:14;26507:18;26504:38;26501:161;;26584:10;26579:3;26575:20;26572:1;26565:31;26619:4;26616:1;26609:15;26647:4;26644:1;26637:15;26799:545;26901:2;26896:3;26893:11;26890:448;;;26937:1;26962:5;26958:2;26951:17;27007:4;27003:2;26993:19;27077:2;27065:10;27061:19;27058:1;27054:27;27048:4;27044:38;27113:4;27101:10;27098:20;27095:47;;;-1:-1:-1;27136:4:44;27095:47;27191:2;27186:3;27182:12;27179:1;27175:20;27169:4;27165:31;27155:41;;27246:82;27264:2;27257:5;27254:13;27246:82;;;27309:17;;;27290:1;27279:13;27246:82;;;27250:3;;;26799:545;;;:::o;27520:1352::-;27646:3;27640:10;-1:-1:-1;;;;;27665:6:44;27662:30;27659:56;;;27695:18;;:::i;:::-;27724:97;27814:6;27774:38;27806:4;27800:11;27774:38;:::i;:::-;27768:4;27724:97;:::i;:::-;27876:4;;27940:2;27929:14;;27957:1;27952:663;;;;28659:1;28676:6;28673:89;;;-1:-1:-1;28728:19:44;;;28722:26;28673:89;-1:-1:-1;;27477:1:44;27473:11;;;27469:24;27465:29;27455:40;27501:1;27497:11;;;27452:57;28775:81;;27922:944;;27952:663;26746:1;26739:14;;;26783:4;26770:18;;-1:-1:-1;;27988:20:44;;;28106:236;28120:7;28117:1;28114:14;28106:236;;;28209:19;;;28203:26;28188:42;;28301:27;;;;28269:1;28257:14;;;;28136:19;;28106:236;;;28110:3;28370:6;28361:7;28358:19;28355:201;;;28431:19;;;28425:26;-1:-1:-1;;28514:1:44;28510:14;;;28526:3;28506:24;28502:37;28498:42;28483:58;28468:74;;28355:201;-1:-1:-1;;;;;28602:1:44;28586:14;;;28582:22;28569:36;;-1:-1:-1;27520:1352:44:o;28877:127::-;28938:10;28933:3;28929:20;28926:1;28919:31;28969:4;28966:1;28959:15;28993:4;28990:1;28983:15;29009:125;29074:9;;;29095:10;;;29092:36;;;29108:18;;:::i;29438:127::-;29499:10;29494:3;29490:20;29487:1;29480:31;29530:4;29527:1;29520:15;29554:4;29551:1;29544:15;29570:135;29609:3;29630:17;;;29627:43;;29650:18;;:::i;:::-;-1:-1:-1;29697:1:44;29686:13;;29570:135::o;29710:128::-;29777:9;;;29798:11;;;29795:37;;;29812:18;;:::i;29843:210::-;29957:9;29994:53;30032:14;30025:5;29994:53;:::i;30367:246::-;30514:2;30499:18;;30547:1;30536:13;;30526:47;;30553:18;;:::i;30618:655::-;30786:2;30838:21;;;30908:13;;30811:18;;;30930:22;;;30757:4;30995:17;;;31035:16;;;30757:4;;30786:2;30983;30968:18;;;30757:4;31079:168;31093:6;31090:1;31087:13;31079:168;;;31154:13;;31142:26;;31235:1;31223:14;;;;31188:12;;;;31108:9;31079:168;;31649:217;31689:1;31715;31705:132;;31759:10;31754:3;31750:20;31747:1;31740:31;31794:4;31791:1;31784:15;31822:4;31819:1;31812:15;31705:132;-1:-1:-1;31851:9:44;;31649:217::o;31871:168::-;31944:9;;;31975;;31992:15;;;31986:22;;31972:37;31962:71;;32013:18;;:::i;32654:388::-;32841:25;;;-1:-1:-1;;;;;32902:32:44;;32897:2;32882:18;;32875:60;32971:2;32966;32951:18;;32944:30;;;-1:-1:-1;;32991:45:44;;33017:18;;33009:6;32991:45;:::i;34042:127::-;34103:10;34098:3;34094:20;34091:1;34084:31;34134:4;34131:1;34124:15;34158:4;34155:1;34148:15","linkReferences":{}},"methodIdentifiers":{"AMOUNT_FOR_SUMBITTER_PROOF()":"347cf665","JK_LABS_ADDRESS()":"eef18e17","MAX_FIELDS_METADATA_LENGTH()":"b382543f","METADATAS_COUNT()":"4d24a67f","addressSubmitterVerified(address)":"cb853950","addressTotalCastVoteCounts(address)":"a1ac6cb2","addressTotalVotes(address)":"dea5f6a6","addressTotalVotesVerified(address)":"930de979","addressesThatHaveVoted(uint256)":"50c4b616","allProposalTotalVotes()":"50a5e524","cancel()":"ea8a1af0","canceled()":"3f9942ff","castVote(uint256,uint8,uint256,uint256,bytes32[])":"419c533c","castVoteWithoutProof(uint256,uint8,uint256)":"65f16263","checkProof(address,uint256,bytes32[],bool)":"32763c22","comment(uint256,string)":"1805c523","commentIds(uint256)":"f5c36411","commentIsDeleted(uint256)":"ae66b8ad","comments(uint256)":"8ebb4c15","contestAddressTotalVotesCast(address)":"aec116b6","contestDeadline()":"262e59e9","contestStart()":"004114a8","costToPropose()":"6ed815ad","costToVote()":"51a41dec","creator()":"02d05d3f","creatorSplitDestination()":"4a587ad4","deleteComments(uint256[])":"ac67f801","deleteProposals(uint256[])":"f0a7db0a","deletedCommentIds(uint256)":"3fb57c92","deletedProposalIds(uint256)":"05846cae","downvotingAllowed()":"60506ff6","forVotesToProposalIds(uint256,uint256)":"711effc8","getAllAddressesThatHaveVoted()":"2c39805f","getAllAuthorsOfDeletedProposals()":"cbdc27cb","getAllCommentIds()":"e11db9d8","getAllDeletedCommentIds()":"5cb718a1","getAllDeletedProposalIds()":"1242b737","getAllProposalAuthors()":"946369b5","getAllProposalIds()":"efa90d36","getComment(uint256)":"0800e300","getNumProposalsWithThisManyForVotes(uint256)":"9ba197af","getOnlyProposalIdWithThisManyForVotes(uint256)":"b66d1da3","getProposal(uint256)":"c7f758a8","getProposalComments(uint256)":"c05f4104","getProposalsWithThisManyForVotes(uint256)":"c9a1b6b2","getRankIndex(uint256)":"5c7107d8","getSortedRanks()":"6fd3636b","hashComment((address,uint256,uint256,string))":"409fd030","hashProposal((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":"d7989025","isOrIsBelowTiedRank(uint256)":"9174778c","jkLabsSplitDestination()":"102613d8","maxProposalCount()":"fb9bf8d4","metadataFieldsSchema()":"60ed97a9","name()":"06fdde03","numAllowedProposalSubmissions()":"832009af","numSubmissions(address)":"75e509c5","officialRewardsModule()":"785ddfe5","payPerVote()":"03f7eed6","percentageToCreator()":"edcd1be4","prompt()":"7c65d711","proposalAddressVotes(uint256,address)":"6e4eb810","proposalAddressesHaveVoted(uint256)":"b323580d","proposalAuthors(uint256)":"0aa25e44","proposalComments(uint256,uint256)":"f61736f4","proposalIds(uint256)":"9b644a23","proposalIsDeleted(uint256)":"f79c0172","proposalVotes(uint256)":"544ffc9c","proposalVotesStructs(uint256)":"070dc5d9","proposals(uint256)":"013cf08b","propose((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])),bytes32[])":"f823f110","proposeWithoutProof((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":"ab5e6947","rankLimit()":"0414126a","setCreatorSplitDestination(address)":"146230f6","setOfficialRewardsModule(address)":"f4f3d7ec","setSubmissionMerkleRoot(bytes32)":"daf762db","setVotingMerkleRoot(bytes32)":"544c7bb4","sortedRanks(uint256)":"325cc6d9","sortingEnabled()":"366ecf5b","state()":"c19d93fb","submissionMerkleRoot()":"bddc1641","totalVotesCast()":"7de418d5","validateProposalData((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":"d140d9f0","verifyProposer(address,bytes32[])":"20b3e845","verifyVoter(address,uint256,bytes32[])":"531bd812","version()":"54fd4d50","voteStart()":"e031535b","votingDelay()":"3932abb1","votingMerkleRoot()":"dd96a19d","votingPeriod()":"02a251a3"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_prompt\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"_submissionMerkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_votingMerkleRoot\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"contestStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numAllowedProposalSubmissions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxProposalCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"downvotingAllowed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sortingEnabled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rankLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"percentageToCreator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"costToPropose\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"costToVote\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"payPerVote\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.IntConstructorArgs\",\"name\":\"intConstructorArgs\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"creatorSplitDestination\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"jkLabsSplitDestination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadataFieldsSchema\",\"type\":\"string\"}],\"internalType\":\"struct Governor.ConstructorArgs\",\"name\":\"_constructorArgs\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AddressFieldMetadataArrayTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AddressNotPermissionedToSubmit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AuthorIsNotSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotDeleteWhenCompletedOrCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotUpdateWhenCompletedOrCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotVoteLessThanOneVoteInPayPerVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotVoteOnDeletedProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContestAlreadyCanceled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum Governor.ContestState\",\"name\":\"currentState\",\"type\":\"uint8\"}],\"name\":\"ContestMustBeActiveToVote\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum Governor.ContestState\",\"name\":\"currentState\",\"type\":\"uint8\"}],\"name\":\"ContestMustBeQueuedToPropose\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxProposalCount\",\"type\":\"uint256\"}],\"name\":\"ContestSubmissionLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DownvotingNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"DuplicateSubmission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyProposalDescription\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"costToVote\",\"type\":\"uint256\"}],\"name\":\"IncorrectCostSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexHasNotBeenPopulated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVoteType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MoreThanOneProposalWithThisManyVotes\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NeedAtLeastOneVoteToVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NeedToSubmitWithProofFirst\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NeedToVoteWithProofFirst\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughVotesLeft\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInMerkle\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCreatorCanAmend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCreatorCanDelete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCreatorCanSetRewardsModule\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"failedToDeleteCommentId\",\"type\":\"uint256\"}],\"name\":\"OnlyCreatorOrAuthorCanDeleteComments\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJkLabsCanAmend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyJkLabsOrCreatorCanCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PayPerVoteMustBeEnabledForAnyoneCanVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RankCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RankIsNotInSortedRanks\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numAllowedProposalSubmissions\",\"type\":\"uint256\"}],\"name\":\"SenderSubmissionLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SortingAndDownvotingCannotBothBeEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StringFieldMetadataArrayTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UintFieldMetadataArrayTooLong\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum Governor.Metadatas\",\"name\":\"unexpectedMetadata\",\"type\":\"uint8\"}],\"name\":\"UnexpectedMetadata\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroSignersInSafeMetadata\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroThresholdInSafeMetadata\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"commentId\",\"type\":\"uint256\"}],\"name\":\"CommentCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"commentIds\",\"type\":\"uint256[]\"}],\"name\":\"CommentsDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"ContestCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CreatorPaymentReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"JkLabsPaymentReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"prompt\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"contestStart\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"}],\"name\":\"JokeraceCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract RewardsModule\",\"name\":\"oldOfficialRewardsModule\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract RewardsModule\",\"name\":\"newOfficialRewardsModule\",\"type\":\"address\"}],\"name\":\"OfficialRewardsModuleSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"proposalDescription\",\"type\":\"string\"}],\"name\":\"ProposalCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"proposalIds\",\"type\":\"uint256[]\"}],\"name\":\"ProposalsDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numVotes\",\"type\":\"uint256\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMOUNT_FOR_SUMBITTER_PROOF\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"JK_LABS_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_FIELDS_METADATA_LENGTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"METADATAS_COUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressSubmitterVerified\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressTotalCastVoteCounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressTotalVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"addressTotalVotesVerified\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"addressesThatHaveVoted\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allProposalTotalVotes\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"proposalIdsReturn\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"}],\"internalType\":\"struct GovernorCountingSimple.VoteCounts[]\",\"name\":\"proposalVoteCountsArrayReturn\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"canceled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"totalVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numVotes\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"castVote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"numVotes\",\"type\":\"uint256\"}],\"name\":\"castVoteWithoutProof\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressToCheck\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bool\",\"name\":\"voting\",\"type\":\"bool\"}],\"name\":\"checkProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"verified\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"commentContent\",\"type\":\"string\"}],\"name\":\"comment\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"commentIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"commentIsDeleted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"comments\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"commentContent\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"}],\"name\":\"contestAddressTotalVotesCast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"userTotalVotesCast\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contestDeadline\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contestStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"costToPropose\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"costToVote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creatorSplitDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"commentIdsParam\",\"type\":\"uint256[]\"}],\"name\":\"deleteComments\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"proposalIdsToDelete\",\"type\":\"uint256[]\"}],\"name\":\"deleteProposals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deletedCommentIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deletedProposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"downvotingAllowed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"forVotesToProposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAddressesThatHaveVoted\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorsOfDeletedProposals\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllCommentIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllDeletedCommentIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllDeletedProposalIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllProposalAuthors\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllProposalIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"commentId\",\"type\":\"uint256\"}],\"name\":\"getComment\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"commentContent\",\"type\":\"string\"}],\"internalType\":\"struct GovernorEngagement.CommentCore\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"}],\"name\":\"getNumProposalsWithThisManyForVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"}],\"name\":\"getOnlyProposalIdWithThisManyForVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"getProposal\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"getProposalComments\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"}],\"name\":\"getProposalsWithThisManyForVotes\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"proposalsWithThisManyForVotes\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rank\",\"type\":\"uint256\"}],\"name\":\"getRankIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rankIndex\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSortedRanks\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"sortedRanksArray\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"commentContent\",\"type\":\"string\"}],\"internalType\":\"struct GovernorEngagement.CommentCore\",\"name\":\"commentObj\",\"type\":\"tuple\"}],\"name\":\"hashComment\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"proposal\",\"type\":\"tuple\"}],\"name\":\"hashProposal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"isOrIsBelowTiedRank\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"atOrBelowTiedRank\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jkLabsSplitDestination\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxProposalCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"metadataFieldsSchema\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numAllowedProposalSubmissions\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"numSubmissions\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"officialRewardsModule\",\"outputs\":[{\"internalType\":\"contract RewardsModule\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payPerVote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"percentageToCreator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prompt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"}],\"name\":\"proposalAddressVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"proposalAddressesHaveVoted\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalAuthors\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalComments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalIsDeleted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"proposalVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalVotesStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"}],\"internalType\":\"struct GovernorCountingSimple.VoteCounts\",\"name\":\"proposalVoteCounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposals\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"proposal\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"propose\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"proposal\",\"type\":\"tuple\"}],\"name\":\"proposeWithoutProof\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rankLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newCreatorSplitDestination\",\"type\":\"address\"}],\"name\":\"setCreatorSplitDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract RewardsModule\",\"name\":\"officialRewardsModule_\",\"type\":\"address\"}],\"name\":\"setOfficialRewardsModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newSubmissionMerkleRoot\",\"type\":\"bytes32\"}],\"name\":\"setSubmissionMerkleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newVotingMerkleRoot\",\"type\":\"bytes32\"}],\"name\":\"setVotingMerkleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sortedRanks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sortingEnabled\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"internalType\":\"enum Governor.ContestState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"submissionMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalVotesCast\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"author\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"targetAddress\",\"type\":\"address\"}],\"internalType\":\"struct Governor.TargetMetadata\",\"name\":\"targetMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"internalType\":\"struct Governor.SafeMetadata\",\"name\":\"safeMetadata\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addressArray\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"stringArray\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"uintArray\",\"type\":\"uint256[]\"}],\"internalType\":\"struct Governor.FieldsMetadata\",\"name\":\"fieldsMetadata\",\"type\":\"tuple\"}],\"internalType\":\"struct Governor.ProposalCore\",\"name\":\"proposal\",\"type\":\"tuple\"}],\"name\":\"validateProposalData\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"verifyProposer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalVotes\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"verifyVoter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"voteStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"votingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"CommentCreated(uint256)\":{\"details\":\"Emitted when a comment is created.\"},\"CommentsDeleted(uint256[])\":{\"details\":\"Emitted when comments are deleted.\"}},\"kind\":\"dev\",\"methods\":{\"allProposalTotalVotes()\":{\"details\":\"Accessor to the internal vote counts for a given proposal.\"},\"cancel()\":{\"details\":\"Cancels the contest. Emits a {IGovernor-ContestCanceled} event.\"},\"castVote(uint256,uint8,uint256,uint256,bytes32[])\":{\"details\":\"Cast a vote with a merkle proof.\"},\"castVoteWithoutProof(uint256,uint8,uint256)\":{\"details\":\"Cast a vote without a proof if you have already voted with a proof.\"},\"checkProof(address,uint256,bytes32[],bool)\":{\"params\":{\"addressToCheck\":\"address of participant\",\"amount\":\"to check that the participant has the correct amount\",\"proof\":\"merkle proof to prove address and amount are in tree\",\"voting\":\"true if this is for a voting proof, false if this is for a submission proof\"}},\"comment(uint256,string)\":{\"details\":\"Comment on a proposal. Emits a {CommentCreated} event.\"},\"contestAddressTotalVotesCast(address)\":{\"details\":\"Accessor to how many votes an address has cast total for the contest so far.\"},\"contestDeadline()\":{\"details\":\"Returns if a proposal has been deleted or not.\"},\"deleteComments(uint256[])\":{\"details\":\"Delete comments. Emits a {CommentsDeleted} event.\"},\"deleteProposals(uint256[])\":{\"details\":\"Delete proposals. Emits a {IGovernor-ProposalsDeleted} event.\"},\"getAllAddressesThatHaveVoted()\":{\"details\":\"Return all addresses that have voted.\"},\"getAllAuthorsOfDeletedProposals()\":{\"details\":\"Return all authors of deleted proposals.\"},\"getAllCommentIds()\":{\"details\":\"Return all commentIds.\"},\"getAllDeletedCommentIds()\":{\"details\":\"Return all deleted commentIds.\"},\"getAllDeletedProposalIds()\":{\"details\":\"Return all deleted proposals.\"},\"getAllProposalAuthors()\":{\"details\":\"Return all proposal authors.\"},\"getAllProposalIds()\":{\"details\":\"Return all proposals.\"},\"getComment(uint256)\":{\"details\":\"Return a comment object.\"},\"getNumProposalsWithThisManyForVotes(uint256)\":{\"details\":\"Get the number of proposals that have `forVotes` number of for votes.\"},\"getOnlyProposalIdWithThisManyForVotes(uint256)\":{\"details\":\"Get the only proposal id with this many for votes. NOTE: Should only get called at a point at which you are sure there is only one proposal id with a certain number of forVotes (we only use it in the RewardsModule after ties have been checked for).\"},\"getProposal(uint256)\":{\"details\":\"Retrieve proposal data.\"},\"getProposalComments(uint256)\":{\"details\":\"Return the array of commentIds on a given proposalId.\"},\"getProposalsWithThisManyForVotes(uint256)\":{\"details\":\"Get the whole array in `forVotesToProposalIds` for a given `forVotes` amount.\"},\"getRankIndex(uint256)\":{\"details\":\"Get the idx of sortedRanks considered to hold the queried rank taking deleted proposals into account. A rank has to have > 0 votes to be considered valid.\"},\"getSortedRanks()\":{\"details\":\"Get the sortedRanks array.\"},\"hashComment((address,uint256,uint256,string))\":{\"details\":\"Hashing function used to build the comment id from the comment details.\"},\"isOrIsBelowTiedRank(uint256)\":{\"details\":\"Returns whether a given index in sortedRanks is tied or is below a tied rank.\"},\"proposalAddressVotes(uint256,address)\":{\"details\":\"Accessor to how many votes an address has cast for a given proposal.\"},\"proposalAddressesHaveVoted(uint256)\":{\"details\":\"Accessor to which addresses have cast a vote for a given proposal.\"},\"proposalVotes(uint256)\":{\"details\":\"Accessor to the internal vote counts for a given proposal.\"},\"propose((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])),bytes32[])\":{\"details\":\"Create a new proposal.\"},\"proposeWithoutProof((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))\":{\"details\":\"Create a new proposal without a proof if you have already proposed with a proof.\"},\"setOfficialRewardsModule(address)\":{\"details\":\"Get the official rewards module contract for this contest (effectively reverse record).\"},\"validateProposalData((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))\":{\"details\":\"Verifies that all of the metadata in the proposal is valid.\"},\"verifyProposer(address,bytes32[])\":{\"details\":\"Verifies that `account` is permissioned to propose via merkle proof.\"},\"verifyVoter(address,uint256,bytes32[])\":{\"details\":\"Verifies that `account` is permissioned to vote with `totalVotes` via merkle proof.\"},\"voteStart()\":{\"details\":\"Timestamp the contest vote begins. Votes open at the end of this block, so it is possible to propose during this block.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"NotInMerkle()\":[{\"notice\":\"Thrown if address/amount are not part of Merkle tree\"}]},\"kind\":\"user\",\"methods\":{\"checkProof(address,uint256,bytes32[],bool)\":{\"notice\":\"Allows checking of proofs for an address\"},\"submissionMerkleRoot()\":{\"notice\":\"Participant inclusion roots\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Contest.sol\":\"Contest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71\",\"dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68\",\"dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04\",\"dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"src/Contest.sol\":{\"keccak256\":\"0x0cbc5d92e6f07f4fda4299bfc475a52fc8baa348986f26715fd7a13e3c9d52fd\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://b0367c3d5fe1ff0a7b3f53b4969498e3795a925c5a853e9aa2139d74b737e99c\",\"dweb:/ipfs/Qmc3MpoXwjz4DNUxHPr5WRGo1M9tpdRwc1Pu5hbbEeTW85\"]},\"src/governance/Governor.sol\":{\"keccak256\":\"0x903f59bd11124b9fdcb79918dd174d4a74727e61bfd4ce0c00b293d757199914\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://1882f0edad71aee39791f0fbaa0d204deb350662a7a47738c2be2f18f0142e81\",\"dweb:/ipfs/QmWh6kL3CfXK1nUboCTNHFDqjwaf8N8ynHmaypNHpXoDM4\"]},\"src/governance/extensions/GovernorCountingSimple.sol\":{\"keccak256\":\"0x926939a083bcb63478d84c9f13c87f34dbd9aa248f2257f9cd1bc6a2e8a26b24\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://966641c9ea61d00b1a536158fb57b091d4687204b5a77a2dbc2b664067a035e0\",\"dweb:/ipfs/Qmd3cfwmg4nqkXCew8nrDsEMR2qe9YFAdFXs8q45LcswiQ\"]},\"src/governance/extensions/GovernorEngagement.sol\":{\"keccak256\":\"0xa1aeabd1c062378f8176707d55601dfe64e3fcc71b4d10c6a3f19f332f4bf7f5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://62057ab67e44db7596ed2cc52966ee71fb1b45dcdccb9aa372b819cb44e97229\",\"dweb:/ipfs/QmZMTyYtK5jZFFZjmfQ3QeTxbaMZxWDawp7J9qbfSgnAHQ\"]},\"src/governance/extensions/GovernorModuleRegistry.sol\":{\"keccak256\":\"0xfa31daaf9d0dbeebd6fddbd13194cc0300eb02b63a07ff70ed3d823dc514a171\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://92cf3840c51124707053c65d4cbc0d0ffc9baff14fd0a66582481d0b1e3d7257\",\"dweb:/ipfs/QmT6eN74UBnrx1cWwo8eHDZ9pjefCtpUTRFJg5YbbVrF3u\"]},\"src/governance/utils/GovernorMerkleVotes.sol\":{\"keccak256\":\"0x02d81049154ff4a8c009126a7470c9f49d076a534576a6fc3fe3f8de2c5cd608\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://21056ce53dd97ffff192a7834bd0ea2cc7691fce7e90e8c7943a9213242ba28a\",\"dweb:/ipfs/QmNzbxrT8Q2FLLQkdNUAKZyZzy4QMGm4zQsdWePWk1sxDb\"]},\"src/governance/utils/GovernorSorting.sol\":{\"keccak256\":\"0xde18aec0c9ebe63b6e210e03151770b4e470fafe53390227244615ffd9b86ad5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d02b203d82cb2773a2a97850533d67dee9e3c729475cb438c2e625c71b15a7d5\",\"dweb:/ipfs/QmXsa98RbxoxfZqRAJmP6Sw8uTYssv3HcTyKzYBtXhQE1H\"]},\"src/modules/RewardsModule.sol\":{\"keccak256\":\"0x487a8508cbdb78886d4570c650f8b1faa7f570ac1553db9cdfbd98fd213501d5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d12f2f1c565208465cf6906d478d6e851b8ae6795cc8481cd25503fb20c224a9\",\"dweb:/ipfs/QmP2uKA2gHMcabQ9TRRJchTBncyc65hFG41Fcf6gwzBE3W\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_prompt","type":"string"},{"internalType":"bytes32","name":"_submissionMerkleRoot","type":"bytes32"},{"internalType":"bytes32","name":"_votingMerkleRoot","type":"bytes32"},{"internalType":"struct Governor.ConstructorArgs","name":"_constructorArgs","type":"tuple","components":[{"internalType":"struct Governor.IntConstructorArgs","name":"intConstructorArgs","type":"tuple","components":[{"internalType":"uint256","name":"contestStart","type":"uint256"},{"internalType":"uint256","name":"votingDelay","type":"uint256"},{"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"internalType":"uint256","name":"numAllowedProposalSubmissions","type":"uint256"},{"internalType":"uint256","name":"maxProposalCount","type":"uint256"},{"internalType":"uint256","name":"downvotingAllowed","type":"uint256"},{"internalType":"uint256","name":"sortingEnabled","type":"uint256"},{"internalType":"uint256","name":"rankLimit","type":"uint256"},{"internalType":"uint256","name":"percentageToCreator","type":"uint256"},{"internalType":"uint256","name":"costToPropose","type":"uint256"},{"internalType":"uint256","name":"costToVote","type":"uint256"},{"internalType":"uint256","name":"payPerVote","type":"uint256"}]},{"internalType":"address","name":"creatorSplitDestination","type":"address"},{"internalType":"address","name":"jkLabsSplitDestination","type":"address"},{"internalType":"string","name":"metadataFieldsSchema","type":"string"}]}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AddressFieldMetadataArrayTooLong"},{"inputs":[],"type":"error","name":"AddressNotPermissionedToSubmit"},{"inputs":[{"internalType":"address","name":"author","type":"address"},{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"AuthorIsNotSender"},{"inputs":[],"type":"error","name":"CannotDeleteWhenCompletedOrCanceled"},{"inputs":[],"type":"error","name":"CannotUpdateWhenCompletedOrCanceled"},{"inputs":[],"type":"error","name":"CannotVoteLessThanOneVoteInPayPerVote"},{"inputs":[],"type":"error","name":"CannotVoteOnDeletedProposal"},{"inputs":[],"type":"error","name":"ContestAlreadyCanceled"},{"inputs":[{"internalType":"enum Governor.ContestState","name":"currentState","type":"uint8"}],"type":"error","name":"ContestMustBeActiveToVote"},{"inputs":[{"internalType":"enum Governor.ContestState","name":"currentState","type":"uint8"}],"type":"error","name":"ContestMustBeQueuedToPropose"},{"inputs":[{"internalType":"uint256","name":"maxProposalCount","type":"uint256"}],"type":"error","name":"ContestSubmissionLimitReached"},{"inputs":[],"type":"error","name":"DownvotingNotEnabled"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"type":"error","name":"DuplicateSubmission"},{"inputs":[],"type":"error","name":"EmptyProposalDescription"},{"inputs":[{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"uint256","name":"costToVote","type":"uint256"}],"type":"error","name":"IncorrectCostSent"},{"inputs":[],"type":"error","name":"IndexHasNotBeenPopulated"},{"inputs":[],"type":"error","name":"InvalidVoteType"},{"inputs":[],"type":"error","name":"MoreThanOneProposalWithThisManyVotes"},{"inputs":[],"type":"error","name":"NeedAtLeastOneVoteToVote"},{"inputs":[],"type":"error","name":"NeedToSubmitWithProofFirst"},{"inputs":[],"type":"error","name":"NeedToVoteWithProofFirst"},{"inputs":[],"type":"error","name":"NotEnoughVotesLeft"},{"inputs":[],"type":"error","name":"NotInMerkle"},{"inputs":[],"type":"error","name":"OnlyCreatorCanAmend"},{"inputs":[],"type":"error","name":"OnlyCreatorCanDelete"},{"inputs":[],"type":"error","name":"OnlyCreatorCanSetRewardsModule"},{"inputs":[{"internalType":"uint256","name":"failedToDeleteCommentId","type":"uint256"}],"type":"error","name":"OnlyCreatorOrAuthorCanDeleteComments"},{"inputs":[],"type":"error","name":"OnlyJkLabsCanAmend"},{"inputs":[],"type":"error","name":"OnlyJkLabsOrCreatorCanCancel"},{"inputs":[],"type":"error","name":"PayPerVoteMustBeEnabledForAnyoneCanVote"},{"inputs":[],"type":"error","name":"RankCannotBeZero"},{"inputs":[],"type":"error","name":"RankIsNotInSortedRanks"},{"inputs":[{"internalType":"uint256","name":"numAllowedProposalSubmissions","type":"uint256"}],"type":"error","name":"SenderSubmissionLimitReached"},{"inputs":[],"type":"error","name":"SortingAndDownvotingCannotBothBeEnabled"},{"inputs":[],"type":"error","name":"StringFieldMetadataArrayTooLong"},{"inputs":[],"type":"error","name":"UintFieldMetadataArrayTooLong"},{"inputs":[{"internalType":"enum Governor.Metadatas","name":"unexpectedMetadata","type":"uint8"}],"type":"error","name":"UnexpectedMetadata"},{"inputs":[],"type":"error","name":"ZeroSignersInSafeMetadata"},{"inputs":[],"type":"error","name":"ZeroThresholdInSafeMetadata"},{"inputs":[{"internalType":"uint256","name":"commentId","type":"uint256","indexed":false}],"type":"event","name":"CommentCreated","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"commentIds","type":"uint256[]","indexed":false}],"type":"event","name":"CommentsDeleted","anonymous":false},{"inputs":[],"type":"event","name":"ContestCanceled","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"CreatorPaymentReleased","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"JkLabsPaymentReleased","anonymous":false},{"inputs":[{"internalType":"string","name":"version","type":"string","indexed":false},{"internalType":"string","name":"name","type":"string","indexed":false},{"internalType":"string","name":"prompt","type":"string","indexed":false},{"internalType":"address","name":"creator","type":"address","indexed":false},{"internalType":"uint256","name":"contestStart","type":"uint256","indexed":false},{"internalType":"uint256","name":"votingDelay","type":"uint256","indexed":false},{"internalType":"uint256","name":"votingPeriod","type":"uint256","indexed":false}],"type":"event","name":"JokeraceCreated","anonymous":false},{"inputs":[{"internalType":"contract RewardsModule","name":"oldOfficialRewardsModule","type":"address","indexed":false},{"internalType":"contract RewardsModule","name":"newOfficialRewardsModule","type":"address","indexed":false}],"type":"event","name":"OfficialRewardsModuleSet","anonymous":false},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256","indexed":false},{"internalType":"address","name":"proposer","type":"address","indexed":false},{"internalType":"string","name":"proposalDescription","type":"string","indexed":false}],"type":"event","name":"ProposalCreated","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"proposalIds","type":"uint256[]","indexed":false}],"type":"event","name":"ProposalsDeleted","anonymous":false},{"inputs":[{"internalType":"address","name":"voter","type":"address","indexed":true},{"internalType":"uint256","name":"proposalId","type":"uint256","indexed":false},{"internalType":"uint8","name":"support","type":"uint8","indexed":false},{"internalType":"uint256","name":"numVotes","type":"uint256","indexed":false}],"type":"event","name":"VoteCast","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"AMOUNT_FOR_SUMBITTER_PROOF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"JK_LABS_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_FIELDS_METADATA_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"METADATAS_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"addressSubmitterVerified","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"addressTotalCastVoteCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"addressTotalVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"addressTotalVotesVerified","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"addressesThatHaveVoted","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"allProposalTotalVotes","outputs":[{"internalType":"uint256[]","name":"proposalIdsReturn","type":"uint256[]"},{"internalType":"struct GovernorCountingSimple.VoteCounts[]","name":"proposalVoteCountsArrayReturn","type":"tuple[]","components":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}]}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"cancel"},{"inputs":[],"stateMutability":"view","type":"function","name":"canceled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint256","name":"totalVotes","type":"uint256"},{"internalType":"uint256","name":"numVotes","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"payable","type":"function","name":"castVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint256","name":"numVotes","type":"uint256"}],"stateMutability":"payable","type":"function","name":"castVoteWithoutProof","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"addressToCheck","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bool","name":"voting","type":"bool"}],"stateMutability":"view","type":"function","name":"checkProof","outputs":[{"internalType":"bool","name":"verified","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"string","name":"commentContent","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"comment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"commentIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"commentIsDeleted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"comments","outputs":[{"internalType":"address","name":"author","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"string","name":"commentContent","type":"string"}]},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"stateMutability":"view","type":"function","name":"contestAddressTotalVotesCast","outputs":[{"internalType":"uint256","name":"userTotalVotesCast","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"contestDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"contestStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"costToPropose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"costToVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"creatorSplitDestination","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256[]","name":"commentIdsParam","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"deleteComments"},{"inputs":[{"internalType":"uint256[]","name":"proposalIdsToDelete","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"deleteProposals"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"deletedCommentIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"deletedProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"downvotingAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"forVotesToProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllAddressesThatHaveVoted","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllAuthorsOfDeletedProposals","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllCommentIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllDeletedCommentIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllDeletedProposalIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllProposalAuthors","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAllProposalIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"commentId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getComment","outputs":[{"internalType":"struct GovernorEngagement.CommentCore","name":"","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"string","name":"commentContent","type":"string"}]}]},{"inputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"}],"stateMutability":"view","type":"function","name":"getNumProposalsWithThisManyForVotes","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"}],"stateMutability":"view","type":"function","name":"getOnlyProposalIdWithThisManyForVotes","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getProposal","outputs":[{"internalType":"struct Governor.ProposalCore","name":"","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getProposalComments","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"}],"stateMutability":"view","type":"function","name":"getProposalsWithThisManyForVotes","outputs":[{"internalType":"uint256[]","name":"proposalsWithThisManyForVotes","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"rank","type":"uint256"}],"stateMutability":"view","type":"function","name":"getRankIndex","outputs":[{"internalType":"uint256","name":"rankIndex","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getSortedRanks","outputs":[{"internalType":"uint256[]","name":"sortedRanksArray","type":"uint256[]"}]},{"inputs":[{"internalType":"struct GovernorEngagement.CommentCore","name":"commentObj","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"string","name":"commentContent","type":"string"}]}],"stateMutability":"pure","type":"function","name":"hashComment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Governor.ProposalCore","name":"proposal","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]}],"stateMutability":"pure","type":"function","name":"hashProposal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"stateMutability":"view","type":"function","name":"isOrIsBelowTiedRank","outputs":[{"internalType":"bool","name":"atOrBelowTiedRank","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"jkLabsSplitDestination","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"maxProposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"metadataFieldsSchema","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"numAllowedProposalSubmissions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"numSubmissions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"officialRewardsModule","outputs":[{"internalType":"contract RewardsModule","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"payPerVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"percentageToCreator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"prompt","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"stateMutability":"view","type":"function","name":"proposalAddressVotes","outputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalAddressesHaveVoted","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalAuthors","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalComments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalIsDeleted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalVotes","outputs":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposalVotesStructs","outputs":[{"internalType":"struct GovernorCountingSimple.VoteCounts","name":"proposalVoteCounts","type":"tuple","components":[{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"}]}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"proposals","outputs":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]},{"inputs":[{"internalType":"struct Governor.ProposalCore","name":"proposal","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"payable","type":"function","name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Governor.ProposalCore","name":"proposal","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]}],"stateMutability":"payable","type":"function","name":"proposeWithoutProof","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rankLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newCreatorSplitDestination","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setCreatorSplitDestination"},{"inputs":[{"internalType":"contract RewardsModule","name":"officialRewardsModule_","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setOfficialRewardsModule"},{"inputs":[{"internalType":"bytes32","name":"newSubmissionMerkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"setSubmissionMerkleRoot"},{"inputs":[{"internalType":"bytes32","name":"newVotingMerkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"setVotingMerkleRoot"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"sortedRanks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"sortingEnabled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"state","outputs":[{"internalType":"enum Governor.ContestState","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"submissionMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalVotesCast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Governor.ProposalCore","name":"proposal","type":"tuple","components":[{"internalType":"address","name":"author","type":"address"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"string","name":"description","type":"string"},{"internalType":"struct Governor.TargetMetadata","name":"targetMetadata","type":"tuple","components":[{"internalType":"address","name":"targetAddress","type":"address"}]},{"internalType":"struct Governor.SafeMetadata","name":"safeMetadata","type":"tuple","components":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}]},{"internalType":"struct Governor.FieldsMetadata","name":"fieldsMetadata","type":"tuple","components":[{"internalType":"address[]","name":"addressArray","type":"address[]"},{"internalType":"string[]","name":"stringArray","type":"string[]"},{"internalType":"uint256[]","name":"uintArray","type":"uint256[]"}]}]}],"stateMutability":"view","type":"function","name":"validateProposalData"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"verifyProposer"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"totalVotes","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"verifyVoter"},{"inputs":[],"stateMutability":"pure","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"voteStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"votingMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"allProposalTotalVotes()":{"details":"Accessor to the internal vote counts for a given proposal."},"cancel()":{"details":"Cancels the contest. Emits a {IGovernor-ContestCanceled} event."},"castVote(uint256,uint8,uint256,uint256,bytes32[])":{"details":"Cast a vote with a merkle proof."},"castVoteWithoutProof(uint256,uint8,uint256)":{"details":"Cast a vote without a proof if you have already voted with a proof."},"checkProof(address,uint256,bytes32[],bool)":{"params":{"addressToCheck":"address of participant","amount":"to check that the participant has the correct amount","proof":"merkle proof to prove address and amount are in tree","voting":"true if this is for a voting proof, false if this is for a submission proof"}},"comment(uint256,string)":{"details":"Comment on a proposal. Emits a {CommentCreated} event."},"contestAddressTotalVotesCast(address)":{"details":"Accessor to how many votes an address has cast total for the contest so far."},"contestDeadline()":{"details":"Returns if a proposal has been deleted or not."},"deleteComments(uint256[])":{"details":"Delete comments. Emits a {CommentsDeleted} event."},"deleteProposals(uint256[])":{"details":"Delete proposals. Emits a {IGovernor-ProposalsDeleted} event."},"getAllAddressesThatHaveVoted()":{"details":"Return all addresses that have voted."},"getAllAuthorsOfDeletedProposals()":{"details":"Return all authors of deleted proposals."},"getAllCommentIds()":{"details":"Return all commentIds."},"getAllDeletedCommentIds()":{"details":"Return all deleted commentIds."},"getAllDeletedProposalIds()":{"details":"Return all deleted proposals."},"getAllProposalAuthors()":{"details":"Return all proposal authors."},"getAllProposalIds()":{"details":"Return all proposals."},"getComment(uint256)":{"details":"Return a comment object."},"getNumProposalsWithThisManyForVotes(uint256)":{"details":"Get the number of proposals that have `forVotes` number of for votes."},"getOnlyProposalIdWithThisManyForVotes(uint256)":{"details":"Get the only proposal id with this many for votes. NOTE: Should only get called at a point at which you are sure there is only one proposal id with a certain number of forVotes (we only use it in the RewardsModule after ties have been checked for)."},"getProposal(uint256)":{"details":"Retrieve proposal data."},"getProposalComments(uint256)":{"details":"Return the array of commentIds on a given proposalId."},"getProposalsWithThisManyForVotes(uint256)":{"details":"Get the whole array in `forVotesToProposalIds` for a given `forVotes` amount."},"getRankIndex(uint256)":{"details":"Get the idx of sortedRanks considered to hold the queried rank taking deleted proposals into account. A rank has to have > 0 votes to be considered valid."},"getSortedRanks()":{"details":"Get the sortedRanks array."},"hashComment((address,uint256,uint256,string))":{"details":"Hashing function used to build the comment id from the comment details."},"isOrIsBelowTiedRank(uint256)":{"details":"Returns whether a given index in sortedRanks is tied or is below a tied rank."},"proposalAddressVotes(uint256,address)":{"details":"Accessor to how many votes an address has cast for a given proposal."},"proposalAddressesHaveVoted(uint256)":{"details":"Accessor to which addresses have cast a vote for a given proposal."},"proposalVotes(uint256)":{"details":"Accessor to the internal vote counts for a given proposal."},"propose((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])),bytes32[])":{"details":"Create a new proposal."},"proposeWithoutProof((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":{"details":"Create a new proposal without a proof if you have already proposed with a proof."},"setOfficialRewardsModule(address)":{"details":"Get the official rewards module contract for this contest (effectively reverse record)."},"validateProposalData((address,bool,string,(address),(address[],uint256),(address[],string[],uint256[])))":{"details":"Verifies that all of the metadata in the proposal is valid."},"verifyProposer(address,bytes32[])":{"details":"Verifies that `account` is permissioned to propose via merkle proof."},"verifyVoter(address,uint256,bytes32[])":{"details":"Verifies that `account` is permissioned to vote with `totalVotes` via merkle proof."},"voteStart()":{"details":"Timestamp the contest vote begins. Votes open at the end of this block, so it is possible to propose during this block."}},"version":1},"userdoc":{"kind":"user","methods":{"checkProof(address,uint256,bytes32[],bool)":{"notice":"Allows checking of proofs for an address"},"submissionMerkleRoot()":{"notice":"Participant inclusion roots"}},"version":1}},"settings":{"remappings":["@forge-std/=lib/forge-std/src/","@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Contest.sol":"Contest"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305","urls":["bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5","dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69","urls":["bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71","dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1","urls":["bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68","dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa","urls":["bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931","dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol":{"keccak256":"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac","urls":["bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04","dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad","urls":["bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278","dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH"],"license":"MIT"},"src/Contest.sol":{"keccak256":"0x0cbc5d92e6f07f4fda4299bfc475a52fc8baa348986f26715fd7a13e3c9d52fd","urls":["bzz-raw://b0367c3d5fe1ff0a7b3f53b4969498e3795a925c5a853e9aa2139d74b737e99c","dweb:/ipfs/Qmc3MpoXwjz4DNUxHPr5WRGo1M9tpdRwc1Pu5hbbEeTW85"],"license":"AGPL-3.0-only"},"src/governance/Governor.sol":{"keccak256":"0x903f59bd11124b9fdcb79918dd174d4a74727e61bfd4ce0c00b293d757199914","urls":["bzz-raw://1882f0edad71aee39791f0fbaa0d204deb350662a7a47738c2be2f18f0142e81","dweb:/ipfs/QmWh6kL3CfXK1nUboCTNHFDqjwaf8N8ynHmaypNHpXoDM4"],"license":"AGPL-3.0-only"},"src/governance/extensions/GovernorCountingSimple.sol":{"keccak256":"0x926939a083bcb63478d84c9f13c87f34dbd9aa248f2257f9cd1bc6a2e8a26b24","urls":["bzz-raw://966641c9ea61d00b1a536158fb57b091d4687204b5a77a2dbc2b664067a035e0","dweb:/ipfs/Qmd3cfwmg4nqkXCew8nrDsEMR2qe9YFAdFXs8q45LcswiQ"],"license":"AGPL-3.0-only"},"src/governance/extensions/GovernorEngagement.sol":{"keccak256":"0xa1aeabd1c062378f8176707d55601dfe64e3fcc71b4d10c6a3f19f332f4bf7f5","urls":["bzz-raw://62057ab67e44db7596ed2cc52966ee71fb1b45dcdccb9aa372b819cb44e97229","dweb:/ipfs/QmZMTyYtK5jZFFZjmfQ3QeTxbaMZxWDawp7J9qbfSgnAHQ"],"license":"AGPL-3.0-only"},"src/governance/extensions/GovernorModuleRegistry.sol":{"keccak256":"0xfa31daaf9d0dbeebd6fddbd13194cc0300eb02b63a07ff70ed3d823dc514a171","urls":["bzz-raw://92cf3840c51124707053c65d4cbc0d0ffc9baff14fd0a66582481d0b1e3d7257","dweb:/ipfs/QmT6eN74UBnrx1cWwo8eHDZ9pjefCtpUTRFJg5YbbVrF3u"],"license":"AGPL-3.0-only"},"src/governance/utils/GovernorMerkleVotes.sol":{"keccak256":"0x02d81049154ff4a8c009126a7470c9f49d076a534576a6fc3fe3f8de2c5cd608","urls":["bzz-raw://21056ce53dd97ffff192a7834bd0ea2cc7691fce7e90e8c7943a9213242ba28a","dweb:/ipfs/QmNzbxrT8Q2FLLQkdNUAKZyZzy4QMGm4zQsdWePWk1sxDb"],"license":"AGPL-3.0-only"},"src/governance/utils/GovernorSorting.sol":{"keccak256":"0xde18aec0c9ebe63b6e210e03151770b4e470fafe53390227244615ffd9b86ad5","urls":["bzz-raw://d02b203d82cb2773a2a97850533d67dee9e3c729475cb438c2e625c71b15a7d5","dweb:/ipfs/QmXsa98RbxoxfZqRAJmP6Sw8uTYssv3HcTyKzYBtXhQE1H"],"license":"AGPL-3.0-only"},"src/modules/RewardsModule.sol":{"keccak256":"0x487a8508cbdb78886d4570c650f8b1faa7f570ac1553db9cdfbd98fd213501d5","urls":["bzz-raw://d12f2f1c565208465cf6906d478d6e851b8ae6795cc8481cd25503fb20c224a9","dweb:/ipfs/QmP2uKA2gHMcabQ9TRRJchTBncyc65hFG41Fcf6gwzBE3W"],"license":"AGPL-3.0-only"}},"version":1},"id":34} \ No newline at end of file diff --git a/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.sol/flattenedContest.sol b/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.sol/flattenedContest.sol index 0fee48642..7210cff72 100644 --- a/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.sol/flattenedContest.sol +++ b/packages/react-app-revamp/contracts/bytecodeAndAbi/Contest.sol/flattenedContest.sol @@ -2206,7 +2206,7 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { uint256 public constant MAX_FIELDS_METADATA_LENGTH = 10; uint256 public constant AMOUNT_FOR_SUMBITTER_PROOF = 10000000000000000000; address public constant JK_LABS_ADDRESS = 0xDc652C746A8F85e18Ce632d97c6118e8a52fa738; // our hot wallet that we operate from if need be, and collect revenue to on most chains - string private constant VERSION = "4.31"; // Private as to not clutter the ABI + string private constant VERSION = "4.32"; // Private as to not clutter the ABI string public name; // The title of the contest string public prompt; @@ -2264,12 +2264,12 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { error NeedToVoteWithProofFirst(); error OnlyCreatorCanDelete(); - error CannotDeleteWhenCompleted(); + error CannotDeleteWhenCompletedOrCanceled(); error OnlyJkLabsOrCreatorCanCancel(); - error ContestAlreadyCancelled(); + error ContestAlreadyCanceled(); - error CannotUpdateAfterCompleted(); + error CannotUpdateWhenCompletedOrCanceled(); error OnlyJkLabsCanAmend(); error OnlyCreatorCanAmend(); @@ -2554,7 +2554,9 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { */ function deleteProposals(uint256[] calldata proposalIdsToDelete) public { if (msg.sender != creator) revert OnlyCreatorCanDelete(); - if (state() == ContestState.Completed) revert CannotDeleteWhenCompleted(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotDeleteWhenCompletedOrCanceled(); + } for (uint256 index = 0; index < proposalIdsToDelete.length; index++) { uint256 currentProposalId = proposalIdsToDelete[index]; @@ -2585,7 +2587,7 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { if (((msg.sender != creator) && (msg.sender != JK_LABS_ADDRESS))) revert OnlyJkLabsOrCreatorCanCancel(); ContestState status = state(); - if (status == ContestState.Canceled) revert ContestAlreadyCancelled(); + if (status == ContestState.Canceled) revert ContestAlreadyCanceled(); canceled = true; @@ -2663,19 +2665,25 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { function setSubmissionMerkleRoot(bytes32 newSubmissionMerkleRoot) public { if (msg.sender != JK_LABS_ADDRESS) revert OnlyJkLabsCanAmend(); - if (state() == ContestState.Completed) revert CannotUpdateAfterCompleted(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } submissionMerkleRoot = newSubmissionMerkleRoot; } function setVotingMerkleRoot(bytes32 newVotingMerkleRoot) public { if (msg.sender != JK_LABS_ADDRESS) revert OnlyJkLabsCanAmend(); - if (state() == ContestState.Completed) revert CannotUpdateAfterCompleted(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } votingMerkleRoot = newVotingMerkleRoot; } function setCreatorSplitDestination(address newCreatorSplitDestination) public { if (msg.sender != creator) revert OnlyCreatorCanAmend(); - if (state() == ContestState.Completed) revert CannotUpdateAfterCompleted(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } creatorSplitDestination = newCreatorSplitDestination; } } @@ -3084,7 +3092,7 @@ contract RewardsModule { mapping(uint256 => uint256) public shares; // Getter for the amount of shares held by a ranking. mapping(uint256 => uint256) public released; // Getter for the amount of Ether already released to a ranking. uint256[] public payees; - string private constant VERSION = "4.31"; // Private as to not clutter the ABI + string private constant VERSION = "4.32"; // Private as to not clutter the ABI mapping(IERC20 => uint256) public erc20TotalReleased; mapping(IERC20 => mapping(uint256 => uint256)) public erc20Released; diff --git a/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.4.32.checkCanceled.sol/RewardsModule.json b/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.4.32.checkCanceled.sol/RewardsModule.json new file mode 100644 index 000000000..41ed4264d --- /dev/null +++ b/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.4.32.checkCanceled.sol/RewardsModule.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"payees_","type":"uint256[]","internalType":"uint256[]"},{"name":"shares_","type":"uint256[]","internalType":"uint256[]"},{"name":"underlyingContest_","type":"address","internalType":"contract GovernorCountingSimple"},{"name":"paysOutTarget_","type":"bool","internalType":"bool"}],"stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"creator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"erc20Released","inputs":[{"name":"","type":"address","internalType":"contract IERC20"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"erc20TotalReleased","inputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAddressToPayOut","inputs":[{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getPayees","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getUnderlyingContest","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract GovernorCountingSimple"}],"stateMutability":"view"},{"type":"function","name":"payees","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"paysOutTarget","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"releasable","inputs":[{"name":"token","type":"address","internalType":"contract IERC20"},{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"releasable","inputs":[{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"release","inputs":[{"name":"token","type":"address","internalType":"contract IERC20"},{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"release","inputs":[{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"released","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"runReleaseChecks","inputs":[{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"shares","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalReleased","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalShares","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"underlyingContest","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract GovernorCountingSimple"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"withdrawRewards","inputs":[{"name":"token","type":"address","internalType":"contract IERC20"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawRewards","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ERC20PaymentReleased","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"contract IERC20"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ERC20RewardWithdrawn","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"contract IERC20"},{"name":"by","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PayeeAdded","inputs":[{"name":"ranking","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PaymentReceived","inputs":[{"name":"from","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PaymentReleased","inputs":[{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RewardWithdrawn","inputs":[{"name":"by","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AccountAlreadyHasShares","inputs":[]},{"type":"error","name":"AccountNotDueERC20Payment","inputs":[]},{"type":"error","name":"AccountNotDueNativePayment","inputs":[]},{"type":"error","name":"CannotPayOutToZeroAddress","inputs":[]},{"type":"error","name":"ContestMustBeCompleted","inputs":[]},{"type":"error","name":"MustHaveAtLeastOnePayee","inputs":[]},{"type":"error","name":"MustHaveDownvotingDisabled","inputs":[]},{"type":"error","name":"MustHaveSortingEnabled","inputs":[]},{"type":"error","name":"OnlyCreatorCanWithdraw","inputs":[]},{"type":"error","name":"PayeesSharesLengthMismatch","inputs":[]},{"type":"error","name":"PayoutRankCannotBeZero","inputs":[]},{"type":"error","name":"RankingCannotBeZero","inputs":[]},{"type":"error","name":"RankingHasNoShares","inputs":[]},{"type":"error","name":"SharesCannotBeZero","inputs":[]},{"type":"error","name":"TotalSharesCannotBeZero","inputs":[]}],"bytecode":{"object":"0x608060405260405162001d1538038062001d15833981016040819052620000269162000301565b825184511462000049576040516324e23b4160e01b815260040160405180910390fd5b83516000036200006c57604051634c87c40160e01b815260040160405180910390fd5b60005b8451811015620000d857620000c3858281518110620000925762000092620003a6565b6020026020010151858381518110620000af57620000af620003a6565b60200260200101516200014660201b60201c565b80620000cf81620003d2565b9150506200006f565b50600054600003620000fd576040516306db759b60e21b815260040160405180910390fd5b60088054600780546001600160a01b039095166001600160a01b0319958616179055911515600160a01b02929092166001600160a81b03199091161733179055506200040a9050565b81600003620001685760405163d6fbfe2560e01b815260040160405180910390fd5b806000036200018a57604051633122bc0960e21b815260040160405180910390fd5b60008281526002602052604090205415620001b857604051637b4f7fb560e01b815260040160405180910390fd5b60048054600181019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0182905560008281526002602052604081208290555462000207908290620003ee565b60005560408051838152602081018390527f78bc0e219b874bf2620f7316737ec16d4bda1bb7136961e4dcb5ff0dc031cee4910160405180910390a15050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200026f57600080fd5b815160206001600160401b03808311156200028e576200028e62000247565b8260051b604051601f19603f83011681018181108482111715620002b657620002b662000247565b604052938452858101830193838101925087851115620002d557600080fd5b83870191505b84821015620002f657815183529183019190830190620002db565b979650505050505050565b600080600080608085870312156200031857600080fd5b84516001600160401b03808211156200033057600080fd5b6200033e888389016200025d565b955060208701519150808211156200035557600080fd5b5062000364878288016200025d565b604087015190945090506001600160a01b03811681146200038457600080fd5b606086015190925080151581146200039b57600080fd5b939692955090935050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201620003e757620003e7620003bc565b5060010190565b80820180821115620004045762000404620003bc565b92915050565b6118fb806200041a6000396000f3fe60806040526004361061012e5760003560e01c806354fd4d50116100ab578063a94d373b1161006f578063a94d373b146103cb578063c7104046146103f8578063c7b8981c14610418578063e33b7de31461042d578063e4bf01a814610443578063f3f44fb71461046357600080fd5b806354fd4d501461030d57806357a858fc1461034057806363037b0c1461036d578063828ce44b1461038d57806396f7ff6e146103ab57600080fd5b80633375bbdc116100f25780633375bbdc1461025257806337bdc99b1461027f5780633a98ef391461029f57806342d86693146102b55780634b945338146102d557600080fd5b806302d05d3f146101725780630357371d146101af5780631e5b4634146101d15780632081d6311461020257806327f381131461023057600080fd5b3661016d57604080513381523460208201527f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be770910160405180910390a1005b600080fd5b34801561017e57600080fd5b50600854610192906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101bb57600080fd5b506101cf6101ca366004611216565b610483565b005b3480156101dd57600080fd5b506008546101f290600160a01b900460ff1681565b60405190151581526020016101a6565b34801561020e57600080fd5b5061022261021d366004611216565b61059a565b6040519081526020016101a6565b34801561023c57600080fd5b5061024561065c565b6040516101a69190611242565b34801561025e57600080fd5b5061022261026d366004611286565b60056020526000908152604090205481565b34801561028b57600080fd5b506101cf61029a3660046112a3565b6106b4565b3480156102ab57600080fd5b5061022260005481565b3480156102c157600080fd5b506101cf6102d0366004611286565b610799565b3480156102e157600080fd5b506102226102f0366004611216565b600660209081526000928352604080842090915290825290205481565b34801561031957600080fd5b5060408051808201825260048152631a17199960e11b602082015290516101a691906112e0565b34801561034c57600080fd5b5061022261035b3660046112a3565b60026020526000908152604090205481565b34801561037957600080fd5b506102226103883660046112a3565b6108f6565b34801561039957600080fd5b506007546001600160a01b0316610192565b3480156103b757600080fd5b506101926103c63660046112a3565b610917565b3480156103d757600080fd5b506102226103e63660046112a3565b60036020526000908152604090205481565b34801561040457600080fd5b506101cf6104133660046112a3565b610b89565b34801561042457600080fd5b506101cf610d9f565b34801561043957600080fd5b5061022260015481565b34801561044f57600080fd5b5061022261045e3660046112a3565b610e27565b34801561046f57600080fd5b50600754610192906001600160a01b031681565b61048c81610b89565b6000610498838361059a565b9050806000036104bb57604051635fe559bd60e01b815260040160405180910390fd5b6001600160a01b038316600090815260056020526040812080548392906104e3908490611329565b90915550506001600160a01b0383166000908152600660209081526040808320858452909152812080548301905561051a83610917565b90506001600160a01b038116610543576040516346a3c2f960e01b815260040160405180910390fd5b604080516001600160a01b038381168252602082018590528616917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a2610594848284610e5f565b50505050565b6001600160a01b0382166000818152600560205260408082205490516370a0823160e01b8152306004820152919283926370a0823190602401602060405180830381865afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610614919061133c565b61061e9190611329565b6001600160a01b03851660009081526006602090815260408083208784529091529020549091506106529084908390610eb1565b9150505b92915050565b606060048054806020026020016040519081016040528092919081815260200182805480156106aa57602002820191906000526020600020905b815481526020019060010190808311610696575b5050505050905090565b6106bd81610b89565b60006106c882610e27565b9050806000036106eb57604051631d1514e960e21b815260040160405180910390fd5b80600160008282546106fd9190611329565b9091555050600082815260036020526040812080548301905561071f83610917565b90506001600160a01b038116610748576040516346a3c2f960e01b815260040160405180910390fd5b604080516001600160a01b0383168152602081018490527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a16107948183610eeb565b505050565b6008546001600160a01b031633146107c457604051631eab0da960e01b815260040160405180910390fd5b6008546040516370a0823160e01b81523060048201526001600160a01b03838116927f6e5fc1cbd1629d9837bd657d23cf585bbc4e9127184972606cc4c0dd406f75729291169083906370a0823190602401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133c565b604080516001600160a01b03909316835260208301919091520160405180910390a26008546040516370a0823160e01b81523060048201526108f39183916001600160a01b03918216918316906370a0823190602401602060405180830381865afa1580156108ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee919061133c565b610e5f565b50565b6004818154811061090657600080fd5b600091825260209091200154905081565b600754604051630b8e20fb60e31b815260048101839052600091829182916001600160a01b031690635c7107d890602401602060405180830381865afa158015610965573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610989919061133c565b60075460405163245d1de360e21b8152600481018390529192506001600160a01b031690639174778c90602401602060405180830381865afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f7919061136a565b15610a0f576008546001600160a01b03169150610b82565b60075460405163325cc6d960e01b8152600481018390526000916001600160a01b03169063325cc6d990602401602060405180830381865afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d919061133c565b60075460405163b66d1da360e01b8152600481018390529192506000916001600160a01b039091169063c7f758a890829063b66d1da390602401602060405180830381865afa158015610ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af8919061133c565b6040518263ffffffff1660e01b8152600401610b1691815260200190565b600060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b5b919081019061173d565b600854909150600160a01b900460ff16610b76578051610b7d565b6060810151515b935050505b5092915050565b600760009054906101000a90046001600160a01b03166001600160a01b03166360506ff66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c00919061133c565b15610c1e5760405163018e187760e61b815260040160405180910390fd5b600760009054906101000a90046001600160a01b03166001600160a01b031663366ecf5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c95919061133c565b600114610cb557604051630fcdfffd60e41b815260040160405180910390fd5b6007546040805163c19d93fb60e01b815290516004926001600160a01b03169163c19d93fb918185019160209190819003860181865afa158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d21919061183c565b6004811115610d3257610d32611826565b14610d5057604051639c2d4c7960e01b815260040160405180910390fd5b80600003610d715760405163f9668e2960e01b815260040160405180910390fd5b60008181526002602052604081205490036108f357604051632534bdfb60e11b815260040160405180910390fd5b6008546001600160a01b03163314610dca57604051631eab0da960e01b815260040160405180910390fd5b600854604080516001600160a01b0390921682524760208301527f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337910160405180910390a1600854610e25906001600160a01b031647610eeb565b565b60008060015447610e389190611329565b9050610e5883826003600087815260200190815260200160002054610eb1565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610794908490611009565b6000805484825260026020526040822054839190610ecf908661185d565b610ed99190611874565b610ee39190611896565b949350505050565b80471015610f405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8d576040519150601f19603f3d011682016040523d82523d6000602084013e610f92565b606091505b50509050806107945760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610f37565b600061105e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110de9092919063ffffffff16565b905080516000148061107f57508080602001905181019061107f919061136a565b6107945760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610f37565b6060610ee3848460008585600080866001600160a01b0316858760405161110591906118a9565b60006040518083038185875af1925050503d8060008114611142576040519150601f19603f3d011682016040523d82523d6000602084013e611147565b606091505b509150915061115887838387611163565b979650505050505050565b606083156111d25782516000036111cb576001600160a01b0385163b6111cb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f37565b5081610ee3565b610ee383838151156111e75781518083602001fd5b8060405162461bcd60e51b8152600401610f3791906112e0565b6001600160a01b03811681146108f357600080fd5b6000806040838503121561122957600080fd5b823561123481611201565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b8181101561127a5783518352928401929184019160010161125e565b50909695505050505050565b60006020828403121561129857600080fd5b8135610e5881611201565b6000602082840312156112b557600080fd5b5035919050565b60005b838110156112d75781810151838201526020016112bf565b50506000910152565b60208152600082518060208401526112ff8160408501602087016112bc565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561065657610656611313565b60006020828403121561134e57600080fd5b5051919050565b8051801515811461136557600080fd5b919050565b60006020828403121561137c57600080fd5b610e5882611355565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156113be576113be611385565b60405290565b60405160c0810167ffffffffffffffff811182821017156113be576113be611385565b604051601f8201601f1916810167ffffffffffffffff8111828210171561141057611410611385565b604052919050565b805161136581611201565b600082601f83011261143457600080fd5b815167ffffffffffffffff81111561144e5761144e611385565b611461601f8201601f19166020016113e7565b81815284602083860101111561147657600080fd5b610ee38260208301602087016112bc565b60006020828403121561149957600080fd5b6040516020810181811067ffffffffffffffff821117156114bc576114bc611385565b806040525080915082516114cf81611201565b905292915050565b600067ffffffffffffffff8211156114f1576114f1611385565b5060051b60200190565b600082601f83011261150c57600080fd5b8151602061152161151c836114d7565b6113e7565b82815260059290921b8401810191818101908684111561154057600080fd5b8286015b8481101561156457805161155781611201565b8352918301918301611544565b509695505050505050565b60006040828403121561158157600080fd5b6040516040810167ffffffffffffffff82821081831117156115a5576115a5611385565b8160405282935084519150808211156115bd57600080fd5b506115ca858286016114fb565b825250602083015160208201525092915050565b600082601f8301126115ef57600080fd5b815160206115ff61151c836114d7565b82815260059290921b8401810191818101908684111561161e57600080fd5b8286015b848110156115645780518352918301918301611622565b60006060828403121561164b57600080fd5b61165361139b565b9050815167ffffffffffffffff8082111561166d57600080fd5b611679858386016114fb565b835260209150818401518181111561169057600080fd5b8401601f810186136116a157600080fd5b80516116af61151c826114d7565b81815260059190911b820184019084810190888311156116ce57600080fd5b8584015b83811015611706578051868111156116ea5760008081fd5b6116f88b8983890101611423565b8452509186019186016116d2565b50808688015250505050604084015191508082111561172457600080fd5b50611731848285016115de565b60408301525092915050565b60006020828403121561174f57600080fd5b815167ffffffffffffffff8082111561176757600080fd5b9083019060c0828603121561177b57600080fd5b6117836113c4565b61178c83611418565b815261179a60208401611355565b60208201526040830151828111156117b157600080fd5b6117bd87828601611423565b6040830152506117d08660608501611487565b60608201526080830151828111156117e757600080fd5b6117f38782860161156f565b60808301525060a08301518281111561180b57600080fd5b61181787828601611639565b60a08301525095945050505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561184e57600080fd5b815160058110610e5857600080fd5b808202811582820484141761065657610656611313565b60008261189157634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561065657610656611313565b600082516118bb8184602087016112bc565b919091019291505056fea2646970667358221220f51a59d5a5d062ae728c114f059fc7e6b1678dcb901ed1e4ca85c57de9c3f3fe64736f6c63430008130033","sourceMap":"1529:9544:41:-:0;;;3550:628;;;;;;;;;;;;;;;;;;:::i;:::-;3756:7;:14;3738:7;:14;:32;3734:73;;3779:28;;-1:-1:-1;;;3779:28:41;;;;;;;;;;;3734:73;3821:7;:14;3839:1;3821:19;3817:57;;3849:25;;-1:-1:-1;;;3849:25:41;;;;;;;;;;;3817:57;3890:9;3885:103;3909:7;:14;3905:1;:18;3885:103;;;3944:33;3954:7;3962:1;3954:10;;;;;;;;:::i;:::-;;;;;;;3966:7;3974:1;3966:10;;;;;;;;:::i;:::-;;;;;;;3944:9;;;:33;;:::i;:::-;3925:3;;;;:::i;:::-;;;;3885:103;;;;4002:11;;4017:1;4002:16;3998:54;;4027:25;;-1:-1:-1;;;4027:25:41;;;;;;;;;;;3998:54;4063:13;:30;;4103:17;:38;;-1:-1:-1;;;;;4103:38:41;;;-1:-1:-1;;;;;;4103:38:41;;;;;;4063:30;;;-1:-1:-1;;;4063:30:41;4151:20;;;;-1:-1:-1;;;;;;4151:20:41;;;;4161:10;4151:20;;;-1:-1:-1;1529:9544:41;;-1:-1:-1;1529:9544:41;10670:401;10745:7;10756:1;10745:12;10741:46;;10766:21;;-1:-1:-1;;;10766:21:41;;;;;;;;;;;10741:46;10801:7;10812:1;10801:12;10797:45;;10822:20;;-1:-1:-1;;;10822:20:41;;;;;;;;;;;10797:45;10856:15;;;;:6;:15;;;;;;:20;10852:58;;10885:25;;-1:-1:-1;;;10885:25:41;;;;;;;;;;;10852:58;10921:6;:20;;;;;;;;;;;;;-1:-1:-1;10951:15:41;;;:6;10921:20;10951:15;;;;:25;;;11000:11;:21;;10969:7;;11000:21;:::i;:::-;10986:11;:35;11036:28;;;2739:25:44;;;2795:2;2780:18;;2773:34;;;11036:28:41;;2712:18:44;11036:28:41;;;;;;;10670:401;;:::o;14:127:44:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:899;211:5;264:3;257:4;249:6;245:17;241:27;231:55;;282:1;279;272:12;231:55;305:13;;337:4;-1:-1:-1;;;;;390:10:44;;;387:36;;;403:18;;:::i;:::-;449:2;446:1;442:10;481:2;475:9;544:2;540:7;535:2;531;527:11;523:25;515:6;511:38;599:6;587:10;584:22;579:2;567:10;564:18;561:46;558:72;;;610:18;;:::i;:::-;646:2;639:22;696:18;;;772:15;;;768:24;;;730:15;;;;-1:-1:-1;804:15:44;;;801:35;;;832:1;829;822:12;801:35;868:2;860:6;856:15;845:26;;880:135;896:6;891:3;888:15;880:135;;;962:10;;950:23;;993:12;;;;913;;;;880:135;;;1033:6;146:899;-1:-1:-1;;;;;;;146:899:44:o;1050:976::-;1226:6;1234;1242;1250;1303:3;1291:9;1282:7;1278:23;1274:33;1271:53;;;1320:1;1317;1310:12;1271:53;1347:16;;-1:-1:-1;;;;;1412:14:44;;;1409:34;;;1439:1;1436;1429:12;1409:34;1462:72;1526:7;1517:6;1506:9;1502:22;1462:72;:::i;:::-;1452:82;;1580:2;1569:9;1565:18;1559:25;1543:41;;1609:2;1599:8;1596:16;1593:36;;;1625:1;1622;1615:12;1593:36;;1648:74;1714:7;1703:8;1692:9;1688:24;1648:74;:::i;:::-;1765:2;1750:18;;1744:25;1638:84;;-1:-1:-1;1744:25:44;-1:-1:-1;;;;;;1798:31:44;;1788:42;;1778:70;;1844:1;1841;1834:12;1778:70;1917:2;1902:18;;1896:25;1867:5;;-1:-1:-1;1959:15:44;;1952:23;1940:36;;1930:64;;1990:1;1987;1980:12;1930:64;1050:976;;;;-1:-1:-1;1050:976:44;;-1:-1:-1;;1050:976:44:o;2031:127::-;2092:10;2087:3;2083:20;2080:1;2073:31;2123:4;2120:1;2113:15;2147:4;2144:1;2137:15;2163:127;2224:10;2219:3;2215:20;2212:1;2205:31;2255:4;2252:1;2245:15;2279:4;2276:1;2269:15;2295:135;2334:3;2355:17;;;2352:43;;2375:18;;:::i;:::-;-1:-1:-1;2422:1:44;2411:13;;2295:135::o;2435:125::-;2500:9;;;2521:10;;;2518:36;;;2534:18;;:::i;:::-;2435:125;;;;:::o;2565:248::-;1529:9544:41;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061012e5760003560e01c806354fd4d50116100ab578063a94d373b1161006f578063a94d373b146103cb578063c7104046146103f8578063c7b8981c14610418578063e33b7de31461042d578063e4bf01a814610443578063f3f44fb71461046357600080fd5b806354fd4d501461030d57806357a858fc1461034057806363037b0c1461036d578063828ce44b1461038d57806396f7ff6e146103ab57600080fd5b80633375bbdc116100f25780633375bbdc1461025257806337bdc99b1461027f5780633a98ef391461029f57806342d86693146102b55780634b945338146102d557600080fd5b806302d05d3f146101725780630357371d146101af5780631e5b4634146101d15780632081d6311461020257806327f381131461023057600080fd5b3661016d57604080513381523460208201527f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be770910160405180910390a1005b600080fd5b34801561017e57600080fd5b50600854610192906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101bb57600080fd5b506101cf6101ca366004611216565b610483565b005b3480156101dd57600080fd5b506008546101f290600160a01b900460ff1681565b60405190151581526020016101a6565b34801561020e57600080fd5b5061022261021d366004611216565b61059a565b6040519081526020016101a6565b34801561023c57600080fd5b5061024561065c565b6040516101a69190611242565b34801561025e57600080fd5b5061022261026d366004611286565b60056020526000908152604090205481565b34801561028b57600080fd5b506101cf61029a3660046112a3565b6106b4565b3480156102ab57600080fd5b5061022260005481565b3480156102c157600080fd5b506101cf6102d0366004611286565b610799565b3480156102e157600080fd5b506102226102f0366004611216565b600660209081526000928352604080842090915290825290205481565b34801561031957600080fd5b5060408051808201825260048152631a17199960e11b602082015290516101a691906112e0565b34801561034c57600080fd5b5061022261035b3660046112a3565b60026020526000908152604090205481565b34801561037957600080fd5b506102226103883660046112a3565b6108f6565b34801561039957600080fd5b506007546001600160a01b0316610192565b3480156103b757600080fd5b506101926103c63660046112a3565b610917565b3480156103d757600080fd5b506102226103e63660046112a3565b60036020526000908152604090205481565b34801561040457600080fd5b506101cf6104133660046112a3565b610b89565b34801561042457600080fd5b506101cf610d9f565b34801561043957600080fd5b5061022260015481565b34801561044f57600080fd5b5061022261045e3660046112a3565b610e27565b34801561046f57600080fd5b50600754610192906001600160a01b031681565b61048c81610b89565b6000610498838361059a565b9050806000036104bb57604051635fe559bd60e01b815260040160405180910390fd5b6001600160a01b038316600090815260056020526040812080548392906104e3908490611329565b90915550506001600160a01b0383166000908152600660209081526040808320858452909152812080548301905561051a83610917565b90506001600160a01b038116610543576040516346a3c2f960e01b815260040160405180910390fd5b604080516001600160a01b038381168252602082018590528616917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a2610594848284610e5f565b50505050565b6001600160a01b0382166000818152600560205260408082205490516370a0823160e01b8152306004820152919283926370a0823190602401602060405180830381865afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610614919061133c565b61061e9190611329565b6001600160a01b03851660009081526006602090815260408083208784529091529020549091506106529084908390610eb1565b9150505b92915050565b606060048054806020026020016040519081016040528092919081815260200182805480156106aa57602002820191906000526020600020905b815481526020019060010190808311610696575b5050505050905090565b6106bd81610b89565b60006106c882610e27565b9050806000036106eb57604051631d1514e960e21b815260040160405180910390fd5b80600160008282546106fd9190611329565b9091555050600082815260036020526040812080548301905561071f83610917565b90506001600160a01b038116610748576040516346a3c2f960e01b815260040160405180910390fd5b604080516001600160a01b0383168152602081018490527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a16107948183610eeb565b505050565b6008546001600160a01b031633146107c457604051631eab0da960e01b815260040160405180910390fd5b6008546040516370a0823160e01b81523060048201526001600160a01b03838116927f6e5fc1cbd1629d9837bd657d23cf585bbc4e9127184972606cc4c0dd406f75729291169083906370a0823190602401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133c565b604080516001600160a01b03909316835260208301919091520160405180910390a26008546040516370a0823160e01b81523060048201526108f39183916001600160a01b03918216918316906370a0823190602401602060405180830381865afa1580156108ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee919061133c565b610e5f565b50565b6004818154811061090657600080fd5b600091825260209091200154905081565b600754604051630b8e20fb60e31b815260048101839052600091829182916001600160a01b031690635c7107d890602401602060405180830381865afa158015610965573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610989919061133c565b60075460405163245d1de360e21b8152600481018390529192506001600160a01b031690639174778c90602401602060405180830381865afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f7919061136a565b15610a0f576008546001600160a01b03169150610b82565b60075460405163325cc6d960e01b8152600481018390526000916001600160a01b03169063325cc6d990602401602060405180830381865afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d919061133c565b60075460405163b66d1da360e01b8152600481018390529192506000916001600160a01b039091169063c7f758a890829063b66d1da390602401602060405180830381865afa158015610ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af8919061133c565b6040518263ffffffff1660e01b8152600401610b1691815260200190565b600060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b5b919081019061173d565b600854909150600160a01b900460ff16610b76578051610b7d565b6060810151515b935050505b5092915050565b600760009054906101000a90046001600160a01b03166001600160a01b03166360506ff66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c00919061133c565b15610c1e5760405163018e187760e61b815260040160405180910390fd5b600760009054906101000a90046001600160a01b03166001600160a01b031663366ecf5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c95919061133c565b600114610cb557604051630fcdfffd60e41b815260040160405180910390fd5b6007546040805163c19d93fb60e01b815290516004926001600160a01b03169163c19d93fb918185019160209190819003860181865afa158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d21919061183c565b6004811115610d3257610d32611826565b14610d5057604051639c2d4c7960e01b815260040160405180910390fd5b80600003610d715760405163f9668e2960e01b815260040160405180910390fd5b60008181526002602052604081205490036108f357604051632534bdfb60e11b815260040160405180910390fd5b6008546001600160a01b03163314610dca57604051631eab0da960e01b815260040160405180910390fd5b600854604080516001600160a01b0390921682524760208301527f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337910160405180910390a1600854610e25906001600160a01b031647610eeb565b565b60008060015447610e389190611329565b9050610e5883826003600087815260200190815260200160002054610eb1565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610794908490611009565b6000805484825260026020526040822054839190610ecf908661185d565b610ed99190611874565b610ee39190611896565b949350505050565b80471015610f405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8d576040519150601f19603f3d011682016040523d82523d6000602084013e610f92565b606091505b50509050806107945760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610f37565b600061105e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110de9092919063ffffffff16565b905080516000148061107f57508080602001905181019061107f919061136a565b6107945760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610f37565b6060610ee3848460008585600080866001600160a01b0316858760405161110591906118a9565b60006040518083038185875af1925050503d8060008114611142576040519150601f19603f3d011682016040523d82523d6000602084013e611147565b606091505b509150915061115887838387611163565b979650505050505050565b606083156111d25782516000036111cb576001600160a01b0385163b6111cb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f37565b5081610ee3565b610ee383838151156111e75781518083602001fd5b8060405162461bcd60e51b8152600401610f3791906112e0565b6001600160a01b03811681146108f357600080fd5b6000806040838503121561122957600080fd5b823561123481611201565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b8181101561127a5783518352928401929184019160010161125e565b50909695505050505050565b60006020828403121561129857600080fd5b8135610e5881611201565b6000602082840312156112b557600080fd5b5035919050565b60005b838110156112d75781810151838201526020016112bf565b50506000910152565b60208152600082518060208401526112ff8160408501602087016112bc565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561065657610656611313565b60006020828403121561134e57600080fd5b5051919050565b8051801515811461136557600080fd5b919050565b60006020828403121561137c57600080fd5b610e5882611355565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156113be576113be611385565b60405290565b60405160c0810167ffffffffffffffff811182821017156113be576113be611385565b604051601f8201601f1916810167ffffffffffffffff8111828210171561141057611410611385565b604052919050565b805161136581611201565b600082601f83011261143457600080fd5b815167ffffffffffffffff81111561144e5761144e611385565b611461601f8201601f19166020016113e7565b81815284602083860101111561147657600080fd5b610ee38260208301602087016112bc565b60006020828403121561149957600080fd5b6040516020810181811067ffffffffffffffff821117156114bc576114bc611385565b806040525080915082516114cf81611201565b905292915050565b600067ffffffffffffffff8211156114f1576114f1611385565b5060051b60200190565b600082601f83011261150c57600080fd5b8151602061152161151c836114d7565b6113e7565b82815260059290921b8401810191818101908684111561154057600080fd5b8286015b8481101561156457805161155781611201565b8352918301918301611544565b509695505050505050565b60006040828403121561158157600080fd5b6040516040810167ffffffffffffffff82821081831117156115a5576115a5611385565b8160405282935084519150808211156115bd57600080fd5b506115ca858286016114fb565b825250602083015160208201525092915050565b600082601f8301126115ef57600080fd5b815160206115ff61151c836114d7565b82815260059290921b8401810191818101908684111561161e57600080fd5b8286015b848110156115645780518352918301918301611622565b60006060828403121561164b57600080fd5b61165361139b565b9050815167ffffffffffffffff8082111561166d57600080fd5b611679858386016114fb565b835260209150818401518181111561169057600080fd5b8401601f810186136116a157600080fd5b80516116af61151c826114d7565b81815260059190911b820184019084810190888311156116ce57600080fd5b8584015b83811015611706578051868111156116ea5760008081fd5b6116f88b8983890101611423565b8452509186019186016116d2565b50808688015250505050604084015191508082111561172457600080fd5b50611731848285016115de565b60408301525092915050565b60006020828403121561174f57600080fd5b815167ffffffffffffffff8082111561176757600080fd5b9083019060c0828603121561177b57600080fd5b6117836113c4565b61178c83611418565b815261179a60208401611355565b60208201526040830151828111156117b157600080fd5b6117bd87828601611423565b6040830152506117d08660608501611487565b60608201526080830151828111156117e757600080fd5b6117f38782860161156f565b60808301525060a08301518281111561180b57600080fd5b61181787828601611639565b60a08301525095945050505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561184e57600080fd5b815160058110610e5857600080fd5b808202811582820484141761065657610656611313565b60008261189157634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561065657610656611313565b600082516118bb8184602087016112bc565b919091019291505056fea2646970667358221220f51a59d5a5d062ae728c114f059fc7e6b1678dcb901ed1e4ca85c57de9c3f3fe64736f6c63430008130033","sourceMap":"1529:9544:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4548:38;;;4564:10;188:51:44;;4576:9:41;270:2:44;255:18;;248:34;4548:38:41;;161:18:44;4548:38:41;;;;;;;1529:9544;;;;;2525:22;;;;;;;;;;-1:-1:-1;2525:22:41;;;;-1:-1:-1;;;;;2525:22:41;;;;;;-1:-1:-1;;;;;457:32:44;;;439:51;;427:2;412:18;2525:22:41;;;;;;;;8665:865;;;;;;;;;;-1:-1:-1;8665:865:41;;;;;:::i;:::-;;:::i;:::-;;2553:25;;;;;;;;;;-1:-1:-1;2553:25:41;;;;-1:-1:-1;;;2553:25:41;;;;;;;;;1154:14:44;;1147:22;1129:41;;1117:2;1102:18;2553:25:41;989:187:44;5565:267:41;;;;;;;;;;-1:-1:-1;5565:267:41;;;;;:::i;:::-;;:::i;:::-;;;1327:25:44;;;1315:2;1300:18;5565:267:41;1181:177:44;4829:90:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2340:52::-;;;;;;;;;;-1:-1:-1;2340:52:41;;;;;:::i;:::-;;;;;;;;;;;;;;7655:749;;;;;;;;;;-1:-1:-1;7655:749:41;;;;;:::i;:::-;;:::i;1945:26::-;;;;;;;;;;;;;;;;9782:294;;;;;;;;;;-1:-1:-1;9782:294:41;;;;;:::i;:::-;;:::i;2398:67::-;;;;;;;;;;-1:-1:-1;2398:67:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4658:86;;;;;;;;;;-1:-1:-1;4730:7:41;;;;;;;;;;;-1:-1:-1;;;4730:7:41;;;;4658:86;;;;4730:7;4658:86;:::i;2012:41::-;;;;;;;;;;-1:-1:-1;2012:41:41;;;;;:::i;:::-;;;;;;;;;;;;;;2227:23;;;;;;;;;;-1:-1:-1;2227:23:41;;;;;:::i;:::-;;:::i;4988:118::-;;;;;;;;;;-1:-1:-1;5082:17:41;;-1:-1:-1;;;;;5082:17:41;4988:118;;6437:1024;;;;;;;;;;-1:-1:-1;6437:1024:41;;;;;:::i;:::-;;:::i;2113:43::-;;;;;;;;;;-1:-1:-1;2113:43:41;;;;;:::i;:::-;;;;;;;;;;;;;;5886:470;;;;;;;;;;-1:-1:-1;5886:470:41;;;;;:::i;:::-;;:::i;9536:240::-;;;;;;;;;;;;;:::i;1977:28::-;;;;;;;;;;;;;;;;5191:220;;;;;;;;;;-1:-1:-1;5191:220:41;;;;;:::i;:::-;;:::i;2472:47::-;;;;;;;;;;-1:-1:-1;2472:47:41;;;;-1:-1:-1;;;;;2472:47:41;;;8665:865;8730:25;8747:7;8730:16;:25::i;:::-;8766:15;8784:26;8795:5;8802:7;8784:10;:26::i;:::-;8766:44;;8825:7;8836:1;8825:12;8821:52;;8846:27;;-1:-1:-1;;;8846:27:41;;;;;;;;;;;8821:52;-1:-1:-1;;;;;9108:25:41;;;;;;:18;:25;;;;;:36;;9137:7;;9108:25;:36;;9137:7;;9108:36;:::i;:::-;;;;-1:-1:-1;;;;;;;9178:20:41;;;;;;:13;:20;;;;;;;;:29;;;;;;;;:40;;;;;;9281:27;9199:7;9281:18;:27::i;:::-;9239:70;-1:-1:-1;;;;;;9324:29:41;;9320:69;;9362:27;;-1:-1:-1;;;9362:27:41;;;;;;;;;;;9320:69;9405:53;;;-1:-1:-1;;;;;206:32:44;;;188:51;;270:2;255:18;;248:34;;;9405:53:41;;;;;161:18:44;9405:53:41;;;;;;;9468:55;9491:5;9498:15;9515:7;9468:22;:55::i;:::-;8720:810;;8665:865;;:::o;5565:267::-;-1:-1:-1;;;;;5713:25:41;;5637:7;5713:25;;;:18;:25;;;;;;;5680:30;;-1:-1:-1;;;5680:30:41;;5704:4;5680:30;;;439:51:44;5637:7:41;;;;5680:15;;412:18:44;;5680:30:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;;:::i;:::-;-1:-1:-1;;;;;5795:20:41;;;;;;:13;:20;;;;;;;;:29;;;;;;;;;5656:82;;-1:-1:-1;5755:70:41;;5771:7;;5656:82;;5755:15;:70::i;:::-;5748:77;;;5565:267;;;;;:::o;4829:90::-;4871:16;4906:6;4899:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4829:90;:::o;7655:749::-;7706:25;7723:7;7706:16;:25::i;:::-;7742:15;7760:19;7771:7;7760:10;:19::i;:::-;7742:37;;7794:7;7805:1;7794:12;7790:53;;7815:28;;-1:-1:-1;;;7815:28:41;;;;;;;;;;;7790:53;8047:7;8030:13;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;8088:17:41;;;;:8;:17;;;;;:28;;;;;;8179:27;8097:7;8179:18;:27::i;:::-;8137:70;-1:-1:-1;;;;;;8222:29:41;;8218:69;;8260:27;;-1:-1:-1;;;8260:27:41;;;;;;;;;;;8218:69;8303:41;;;-1:-1:-1;;;;;206:32:44;;188:51;;270:2;255:18;;248:34;;;8303:41:41;;161:18:44;8303:41:41;;;;;;;8354:43;8372:15;8389:7;8354:17;:43::i;:::-;7696:708;;7655:749;:::o;9782:294::-;9856:7;;-1:-1:-1;;;;;9856:7:41;9842:10;:21;9838:58;;9872:24;;-1:-1:-1;;;9872:24:41;;;;;;;;;;;9838:58;9940:7;;9949:30;;-1:-1:-1;;;9949:30:41;;9973:4;9949:30;;;439:51:44;-1:-1:-1;;;;;9912:68:41;;;;;;9940:7;;;9912:68;;9949:15;;412:18:44;;9949:30:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9912:68;;;-1:-1:-1;;;;;206:32:44;;;188:51;;270:2;255:18;;248:34;;;;161:18;9912:68:41;;;;;;;10028:7;;10038:30;;-1:-1:-1;;;10038:30:41;;10062:4;10038:30;;;439:51:44;9990:79:41;;10013:5;;-1:-1:-1;;;;;10028:7:41;;;;10038:15;;;;;412:18:44;;10038:30:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9990:22;:79::i;:::-;9782:294;:::o;2227:23::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2227:23:41;:::o;6437:1024::-;6599:17;;:39;;-1:-1:-1;;;6599:39:41;;;;;1327:25:44;;;6503:7:41;;;;;;-1:-1:-1;;;;;6599:17:41;;:30;;1300:18:44;;6599:39:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6749:17;;:72;;-1:-1:-1;;;6749:72:41;;;;;1327:25:44;;;6555:83:41;;-1:-1:-1;;;;;;6749:17:41;;:37;;1300:18:44;;6749:72:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6745:677;;;6855:7;;-1:-1:-1;;;;;6855:7:41;;-1:-1:-1;6745:677:41;;;7003:17;;:64;;-1:-1:-1;;;7003:64:41;;;;;1327:25:44;;;6983:17:41;;-1:-1:-1;;;;;7003:17:41;;:29;;1300:18:44;;7003:64:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7128:17;;7175:66;;-1:-1:-1;;;7175:66:41;;;;;1327:25:44;;;6983:84:41;;-1:-1:-1;7081:44:41;;-1:-1:-1;;;;;7128:17:41;;;;:29;;:17;;7175:55;;1300:18:44;;7175:66:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7128:166;;;;;;;;;;;;;1327:25:44;;1315:2;1300:18;;1181:177;7128:166:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7128:166:41;;;;;;;;;;;;:::i;:::-;7326:13;;7081:213;;-1:-1:-1;;;;7326:13:41;;;;:85;;7389:22;;7326:85;;;7342:30;;;;:44;7326:85;7308:103;;6969:453;;6745:677;-1:-1:-1;7439:15:41;6437:1024;-1:-1:-1;;6437:1024:41:o;5886:470::-;5955:17;;;;;;;;;-1:-1:-1;;;;;5955:17:41;-1:-1:-1;;;;;5955:35:41;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;5951:83;;6006:28;;-1:-1:-1;;;6006:28:41;;;;;;;;;;;5951:83;6048:17;;;;;;;;;-1:-1:-1;;;;;6048:17:41;-1:-1:-1;;;;;6048:32:41;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6086:1;6048:39;6044:76;;6096:24;;-1:-1:-1;;;6096:24:41;;;;;;;;;;;6044:76;6134:17;;:25;;;-1:-1:-1;;;6134:25:41;;;;6163:31;;-1:-1:-1;;;;;6134:17:41;;:23;;:25;;;;;;;;;;;;;:17;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;;;;;:::i;:::-;;6130:97;;6203:24;;-1:-1:-1;;;6203:24:41;;;;;;;;;;;6130:97;6241:7;6252:1;6241:12;6237:49;;6262:24;;-1:-1:-1;;;6262:24:41;;;;;;;;;;;6237:49;6300:15;;;;:6;:15;;;;;;:20;;6296:53;;6329:20;;-1:-1:-1;;;6329:20:41;;;;;;;;;;;9536:240;9598:7;;-1:-1:-1;;;;;9598:7:41;9584:10;:21;9580:58;;9614:24;;-1:-1:-1;;;9614:24:41;;;;;;;;;;;9580:58;9670:7;;9654:47;;;-1:-1:-1;;;;;9670:7:41;;;188:51:44;;9679:21:41;270:2:44;255:18;;248:34;9654:47:41;;161:18:44;9654:47:41;;;;;;;9737:7;;9711:58;;-1:-1:-1;;;;;9737:7:41;9747:21;9711:17;:58::i;:::-;9536:240::o;5191:220::-;5249:7;5268:21;5316:13;;5292:21;:37;;;;:::i;:::-;5268:61;;5346:58;5362:7;5371:13;5386:8;:17;5395:7;5386:17;;;;;;;;;;;;5346:15;:58::i;:::-;5339:65;5191:220;-1:-1:-1;;;5191:220:41:o;941:175:29:-;1050:58;;;-1:-1:-1;;;;;206:32:44;;1050:58:29;;;188:51:44;255:18;;;;248:34;;;1050:58:29;;;;;;;;;;161:18:44;;;;1050:58:29;;;;;;;;-1:-1:-1;;;;;1050:58:29;-1:-1:-1;;;1050:58:29;;;1023:86;;1043:5;;1023:19;:86::i;10247:238:41:-;10383:7;10449:11;;10430:15;;;:6;:15;;;;;;10463;;10449:11;10414:31;;:13;:31;:::i;:::-;10413:47;;;;:::i;:::-;:65;;;;:::i;:::-;10406:72;10247:238;-1:-1:-1;;;;10247:238:41:o;2647:312:30:-;2761:6;2736:21;:31;;2728:73;;;;-1:-1:-1;;;2728:73:30;;12741:2:44;2728:73:30;;;12723:21:44;12780:2;12760:18;;;12753:30;12819:31;12799:18;;;12792:59;12868:18;;2728:73:30;;;;;;;;;2813:12;2831:9;-1:-1:-1;;;;;2831:14:30;2853:6;2831:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2812:52;;;2882:7;2874:78;;;;-1:-1:-1;;;2874:78:30;;13309:2:44;2874:78:30;;;13291:21:44;13348:2;13328:18;;;13321:30;13387:34;13367:18;;;13360:62;13458:28;13438:18;;;13431:56;13504:19;;2874:78:30;13107:422:44;5196:642:29;5615:23;5641:69;5669:4;5641:69;;;;;;;;;;;;;;;;;5649:5;-1:-1:-1;;;;;5641:27:29;;;:69;;;;;:::i;:::-;5615:95;;5728:10;:17;5749:1;5728:22;:56;;;;5765:10;5754:30;;;;;;;;;;;;:::i;:::-;5720:111;;;;-1:-1:-1;;;5720:111:29;;13736:2:44;5720:111:29;;;13718:21:44;13775:2;13755:18;;;13748:30;13814:34;13794:18;;;13787:62;-1:-1:-1;;;13865:18:44;;;13858:40;13915:19;;5720:111:29;13534:406:44;4108:223:30;4241:12;4272:52;4294:6;4302:4;4308:1;4311:12;4241;5446;5460:23;5487:6;-1:-1:-1;;;;;5487:11:30;5506:5;5513:4;5487:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5445:73;;;;5535:69;5562:6;5570:7;5579:10;5591:12;5535:26;:69::i;:::-;5528:76;5165:446;-1:-1:-1;;;;;;;5165:446:30:o;7671:628::-;7851:12;7879:7;7875:418;;;7906:10;:17;7927:1;7906:22;7902:286;;-1:-1:-1;;;;;1702:19:30;;;8113:60;;;;-1:-1:-1;;;8113:60:30;;14846:2:44;8113:60:30;;;14828:21:44;14885:2;14865:18;;;14858:30;14924:31;14904:18;;;14897:59;14973:18;;8113:60:30;14644:353:44;8113:60:30;-1:-1:-1;8208:10:30;8201:17;;7875:418;8249:33;8257:10;8269:12;8980:17;;:21;8976:379;;9208:10;9202:17;9264:15;9251:10;9247:2;9243:19;9236:44;8976:379;9331:12;9324:20;;-1:-1:-1;;;9324:20:30;;;;;;;;:::i;501:139:44:-;-1:-1:-1;;;;;584:31:44;;574:42;;564:70;;630:1;627;620:12;645:339;729:6;737;790:2;778:9;769:7;765:23;761:32;758:52;;;806:1;803;796:12;758:52;845:9;832:23;864:39;897:5;864:39;:::i;:::-;922:5;974:2;959:18;;;;946:32;;-1:-1:-1;;;645:339:44:o;1363:632::-;1534:2;1586:21;;;1656:13;;1559:18;;;1678:22;;;1505:4;;1534:2;1757:15;;;;1731:2;1716:18;;;1505:4;1800:169;1814:6;1811:1;1808:13;1800:169;;;1875:13;;1863:26;;1944:15;;;;1909:12;;;;1836:1;1829:9;1800:169;;;-1:-1:-1;1986:3:44;;1363:632;-1:-1:-1;;;;;;1363:632:44:o;2000:271::-;2075:6;2128:2;2116:9;2107:7;2103:23;2099:32;2096:52;;;2144:1;2141;2134:12;2096:52;2183:9;2170:23;2202:39;2235:5;2202:39;:::i;2276:180::-;2335:6;2388:2;2376:9;2367:7;2363:23;2359:32;2356:52;;;2404:1;2401;2394:12;2356:52;-1:-1:-1;2427:23:44;;2276:180;-1:-1:-1;2276:180:44:o;2461:250::-;2546:1;2556:113;2570:6;2567:1;2564:13;2556:113;;;2646:11;;;2640:18;2627:11;;;2620:39;2592:2;2585:10;2556:113;;;-1:-1:-1;;2703:1:44;2685:16;;2678:27;2461:250::o;2716:396::-;2865:2;2854:9;2847:21;2828:4;2897:6;2891:13;2940:6;2935:2;2924:9;2920:18;2913:34;2956:79;3028:6;3023:2;3012:9;3008:18;3003:2;2995:6;2991:15;2956:79;:::i;:::-;3096:2;3075:15;-1:-1:-1;;3071:29:44;3056:45;;;;3103:2;3052:54;;2716:396;-1:-1:-1;;2716:396:44:o;3357:127::-;3418:10;3413:3;3409:20;3406:1;3399:31;3449:4;3446:1;3439:15;3473:4;3470:1;3463:15;3489:125;3554:9;;;3575:10;;;3572:36;;;3588:18;;:::i;3906:184::-;3976:6;4029:2;4017:9;4008:7;4004:23;4000:32;3997:52;;;4045:1;4042;4035:12;3997:52;-1:-1:-1;4068:16:44;;3906:184;-1:-1:-1;3906:184:44:o;4095:164::-;4171:13;;4220;;4213:21;4203:32;;4193:60;;4249:1;4246;4239:12;4193:60;4095:164;;;:::o;4264:202::-;4331:6;4384:2;4372:9;4363:7;4359:23;4355:32;4352:52;;;4400:1;4397;4390:12;4352:52;4423:37;4450:9;4423:37;:::i;4471:127::-;4532:10;4527:3;4523:20;4520:1;4513:31;4563:4;4560:1;4553:15;4587:4;4584:1;4577:15;4603:253;4675:2;4669:9;4717:4;4705:17;;4752:18;4737:34;;4773:22;;;4734:62;4731:88;;;4799:18;;:::i;:::-;4835:2;4828:22;4603:253;:::o;4861:::-;4933:2;4927:9;4975:4;4963:17;;5010:18;4995:34;;5031:22;;;4992:62;4989:88;;;5057:18;;:::i;5119:275::-;5190:2;5184:9;5255:2;5236:13;;-1:-1:-1;;5232:27:44;5220:40;;5290:18;5275:34;;5311:22;;;5272:62;5269:88;;;5337:18;;:::i;:::-;5373:2;5366:22;5119:275;;-1:-1:-1;5119:275:44:o;5399:146::-;5478:13;;5500:39;5478:13;5500:39;:::i;5550:510::-;5604:5;5657:3;5650:4;5642:6;5638:17;5634:27;5624:55;;5675:1;5672;5665:12;5624:55;5704:6;5698:13;5730:18;5726:2;5723:26;5720:52;;;5752:18;;:::i;:::-;5796:55;5839:2;5820:13;;-1:-1:-1;;5816:27:44;5845:4;5812:38;5796:55;:::i;:::-;5876:2;5867:7;5860:19;5922:3;5915:4;5910:2;5902:6;5898:15;5894:26;5891:35;5888:55;;;5939:1;5936;5929:12;5888:55;5952:77;6026:2;6019:4;6010:7;6006:18;5999:4;5991:6;5987:17;5952:77;:::i;6065:498::-;6137:5;6185:4;6173:9;6168:3;6164:19;6160:30;6157:50;;;6203:1;6200;6193:12;6157:50;6236:2;6230:9;6278:4;6270:6;6266:17;6349:6;6337:10;6334:22;6313:18;6301:10;6298:34;6295:62;6292:88;;;6360:18;;:::i;:::-;6400:10;6396:2;6389:22;;6429:6;6420:15;;6465:9;6459:16;6484:41;6517:7;6484:41;:::i;:::-;6534:23;;6065:498;;-1:-1:-1;;6065:498:44:o;6568:183::-;6628:4;6661:18;6653:6;6650:30;6647:56;;;6683:18;;:::i;:::-;-1:-1:-1;6728:1:44;6724:14;6740:4;6720:25;;6568:183::o;6756:742::-;6821:5;6874:3;6867:4;6859:6;6855:17;6851:27;6841:55;;6892:1;6889;6882:12;6841:55;6921:6;6915:13;6947:4;6971:60;6987:43;7027:2;6987:43;:::i;:::-;6971:60;:::i;:::-;7065:15;;;7151:1;7147:10;;;;7135:23;;7131:32;;;7096:12;;;;7175:15;;;7172:35;;;7203:1;7200;7193:12;7172:35;7239:2;7231:6;7227:15;7251:218;7267:6;7262:3;7259:15;7251:218;;;7340:3;7334:10;7357:39;7390:5;7357:39;:::i;:::-;7409:18;;7447:12;;;;7284;;7251:218;;;-1:-1:-1;7487:5:44;6756:742;-1:-1:-1;;;;;;6756:742:44:o;7503:633::-;7573:5;7621:4;7609:9;7604:3;7600:19;7596:30;7593:50;;;7639:1;7636;7629:12;7593:50;7672:4;7666:11;7716:4;7708:6;7704:17;7740:18;7808:6;7796:10;7793:22;7788:2;7776:10;7773:18;7770:46;7767:72;;;7819:18;;:::i;:::-;7861:10;7855:4;7848:24;7890:6;7881:15;;7925:9;7919:16;7905:30;;7958:2;7950:6;7947:14;7944:34;;;7974:1;7971;7964:12;7944:34;;8002:68;8066:3;8057:6;8046:9;8042:22;8002:68;:::i;:::-;7994:6;7987:84;;8125:2;8114:9;8110:18;8104:25;8099:2;8091:6;8087:15;8080:50;;7503:633;;;;:::o;8141:659::-;8206:5;8259:3;8252:4;8244:6;8240:17;8236:27;8226:55;;8277:1;8274;8267:12;8226:55;8306:6;8300:13;8332:4;8356:60;8372:43;8412:2;8372:43;:::i;8356:60::-;8450:15;;;8536:1;8532:10;;;;8520:23;;8516:32;;;8481:12;;;;8560:15;;;8557:35;;;8588:1;8585;8578:12;8557:35;8624:2;8616:6;8612:15;8636:135;8652:6;8647:3;8644:15;8636:135;;;8718:10;;8706:23;;8749:12;;;;8669;;8636:135;;8805:1527;8877:5;8925:4;8913:9;8908:3;8904:19;8900:30;8897:50;;;8943:1;8940;8933:12;8897:50;8965:22;;:::i;:::-;8956:31;;9016:9;9010:16;9045:18;9086:2;9078:6;9075:14;9072:34;;;9102:1;9099;9092:12;9072:34;9129:68;9193:3;9184:6;9173:9;9169:22;9129:68;:::i;:::-;9122:5;9115:83;9217:2;9207:12;;9265:2;9254:9;9250:18;9244:25;9294:2;9284:8;9281:16;9278:36;;;9310:1;9307;9300:12;9278:36;9333:24;;9388:4;9380:13;;9376:23;-1:-1:-1;9366:51:44;;9413:1;9410;9403:12;9366:51;9442:2;9436:9;9465:60;9481:43;9521:2;9481:43;:::i;9465:60::-;9559:15;;;9641:1;9637:10;;;;9629:19;;9625:28;;;9590:12;;;;9665:15;;;9662:35;;;9693:1;9690;9683:12;9662:35;9725:2;9721;9717:11;9737:353;9753:6;9748:3;9745:15;9737:353;;;9832:3;9826:10;9868:2;9855:11;9852:19;9849:109;;;9912:1;9941:2;9937;9930:14;9849:109;9983:64;10043:3;10038:2;10024:11;10020:2;10016:20;10012:29;9983:64;:::i;:::-;9971:77;;-1:-1:-1;10068:12:44;;;;9770;;9737:353;;;9741:3;10122:5;10117:2;10110:5;10106:14;10099:29;;;;;10174:2;10163:9;10159:18;10153:25;10137:41;;10203:2;10193:8;10190:16;10187:36;;;10219:1;10216;10209:12;10187:36;;10255:70;10321:3;10310:8;10299:9;10295:24;10255:70;:::i;:::-;10250:2;10243:5;10239:14;10232:94;;8805:1527;;;;:::o;10337:1254::-;10438:6;10491:2;10479:9;10470:7;10466:23;10462:32;10459:52;;;10507:1;10504;10497:12;10459:52;10540:9;10534:16;10569:18;10610:2;10602:6;10599:14;10596:34;;;10626:1;10623;10616:12;10596:34;10649:22;;;;10705:4;10687:16;;;10683:27;10680:47;;;10723:1;10720;10713:12;10680:47;10749:22;;:::i;:::-;10794:33;10824:2;10794:33;:::i;:::-;10787:5;10780:48;10860:39;10895:2;10891;10887:11;10860:39;:::i;:::-;10855:2;10848:5;10844:14;10837:63;10939:2;10935;10931:11;10925:18;10968:2;10958:8;10955:16;10952:36;;;10984:1;10981;10974:12;10952:36;11020:56;11068:7;11057:8;11053:2;11049:17;11020:56;:::i;:::-;11015:2;11008:5;11004:14;10997:80;;11109:65;11166:7;11161:2;11157;11153:11;11109:65;:::i;:::-;11104:2;11097:5;11093:14;11086:89;11214:3;11210:2;11206:12;11200:19;11244:2;11234:8;11231:16;11228:36;;;11260:1;11257;11250:12;11228:36;11297:69;11358:7;11347:8;11343:2;11339:17;11297:69;:::i;:::-;11291:3;11284:5;11280:15;11273:94;;11406:3;11402:2;11398:12;11392:19;11436:2;11426:8;11423:16;11420:36;;;11452:1;11449;11442:12;11420:36;11489:71;11552:7;11541:8;11537:2;11533:17;11489:71;:::i;:::-;11483:3;11472:15;;11465:96;-1:-1:-1;11476:5:44;10337:1254;-1:-1:-1;;;;;10337:1254:44:o;11596:127::-;11657:10;11652:3;11648:20;11645:1;11638:31;11688:4;11685:1;11678:15;11712:4;11709:1;11702:15;11728:278;11816:6;11869:2;11857:9;11848:7;11844:23;11840:32;11837:52;;;11885:1;11882;11875:12;11837:52;11917:9;11911:16;11956:1;11949:5;11946:12;11936:40;;11972:1;11969;11962:12;12011:168;12084:9;;;12115;;12132:15;;;12126:22;;12112:37;12102:71;;12153:18;;:::i;12184:217::-;12224:1;12250;12240:132;;12294:10;12289:3;12285:20;12282:1;12275:31;12329:4;12326:1;12319:15;12357:4;12354:1;12347:15;12240:132;-1:-1:-1;12386:9:44;;12184:217::o;12406:128::-;12473:9;;;12494:11;;;12491:37;;;12508:18;;:::i;14352:287::-;14481:3;14519:6;14513:13;14535:66;14594:6;14589:3;14582:4;14574:6;14570:17;14535:66;:::i;:::-;14617:16;;;;;14352:287;-1:-1:-1;;14352:287:44:o","linkReferences":{}},"methodIdentifiers":{"creator()":"02d05d3f","erc20Released(address,uint256)":"4b945338","erc20TotalReleased(address)":"3375bbdc","getAddressToPayOut(uint256)":"96f7ff6e","getPayees()":"27f38113","getUnderlyingContest()":"828ce44b","payees(uint256)":"63037b0c","paysOutTarget()":"1e5b4634","releasable(address,uint256)":"2081d631","releasable(uint256)":"e4bf01a8","release(address,uint256)":"0357371d","release(uint256)":"37bdc99b","released(uint256)":"a94d373b","runReleaseChecks(uint256)":"c7104046","shares(uint256)":"57a858fc","totalReleased()":"e33b7de3","totalShares()":"3a98ef39","underlyingContest()":"f3f44fb7","version()":"54fd4d50","withdrawRewards()":"c7b8981c","withdrawRewards(address)":"42d86693"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"payees_\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares_\",\"type\":\"uint256[]\"},{\"internalType\":\"contract GovernorCountingSimple\",\"name\":\"underlyingContest_\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysOutTarget_\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccountAlreadyHasShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccountNotDueERC20Payment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccountNotDueNativePayment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotPayOutToZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContestMustBeCompleted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustHaveAtLeastOnePayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustHaveDownvotingDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustHaveSortingEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCreatorCanWithdraw\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PayeesSharesLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PayoutRankCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RankingCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RankingHasNoShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SharesCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TotalSharesCannotBeZero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ERC20PaymentReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ERC20RewardWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"PayeeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PaymentReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PaymentReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"creator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"erc20Released\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"erc20TotalReleased\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"getAddressToPayOut\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPayees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnderlyingContest\",\"outputs\":[{\"internalType\":\"contract GovernorCountingSimple\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"payees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paysOutTarget\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"releasable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"releasable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"released\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"runReleaseChecks\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"shares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalReleased\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlyingContest\",\"outputs\":[{\"internalType\":\"contract GovernorCountingSimple\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware that the Ether will be split in this way, since it is handled transparently by the contract. The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim an amount proportional to the percentage of total shares they were assigned. The distribution of shares is set at the time of contract deployment and can't be updated thereafter. `RewardsModule` follows a _pull payment_ model. This means that payments are not automatically forwarded to the accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} function. NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you to run tests before sending real value to this contract.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Creates an instance of `RewardsModule` where each ranking in `payees` is assigned the number of shares at the matching position in the `shares` array. All rankings in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no duplicates in `payees`.\"},\"getAddressToPayOut(uint256)\":{\"details\":\"Return address to pay out for a given ranking.\"},\"getPayees()\":{\"details\":\"Getter for list of rankings that will be paid out.\"},\"getUnderlyingContest()\":{\"details\":\"Getter for the underlying contest.\"},\"releasable(address,uint256)\":{\"details\":\"Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an IERC20 contract.\"},\"releasable(uint256)\":{\"details\":\"Getter for the amount of payee's releasable Ether.\"},\"release(address,uint256)\":{\"details\":\"Triggers a transfer to `ranking` of the amount of `token` tokens they are owed, according to their percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 contract.\"},\"release(uint256)\":{\"details\":\"Triggers a transfer to `ranking` of the amount of Ether they are owed, according to their percentage of the total shares and their previous withdrawals.\"},\"runReleaseChecks(uint256)\":{\"details\":\"Run release checks.\"},\"version()\":{\"details\":\"Version of the rewards module.\"}},\"title\":\"RewardsModule\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/RewardsModule.sol\":\"RewardsModule\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71\",\"dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68\",\"dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04\",\"dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"src/governance/Governor.sol\":{\"keccak256\":\"0x903f59bd11124b9fdcb79918dd174d4a74727e61bfd4ce0c00b293d757199914\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://1882f0edad71aee39791f0fbaa0d204deb350662a7a47738c2be2f18f0142e81\",\"dweb:/ipfs/QmWh6kL3CfXK1nUboCTNHFDqjwaf8N8ynHmaypNHpXoDM4\"]},\"src/governance/extensions/GovernorCountingSimple.sol\":{\"keccak256\":\"0x926939a083bcb63478d84c9f13c87f34dbd9aa248f2257f9cd1bc6a2e8a26b24\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://966641c9ea61d00b1a536158fb57b091d4687204b5a77a2dbc2b664067a035e0\",\"dweb:/ipfs/Qmd3cfwmg4nqkXCew8nrDsEMR2qe9YFAdFXs8q45LcswiQ\"]},\"src/governance/utils/GovernorMerkleVotes.sol\":{\"keccak256\":\"0x02d81049154ff4a8c009126a7470c9f49d076a534576a6fc3fe3f8de2c5cd608\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://21056ce53dd97ffff192a7834bd0ea2cc7691fce7e90e8c7943a9213242ba28a\",\"dweb:/ipfs/QmNzbxrT8Q2FLLQkdNUAKZyZzy4QMGm4zQsdWePWk1sxDb\"]},\"src/governance/utils/GovernorSorting.sol\":{\"keccak256\":\"0xde18aec0c9ebe63b6e210e03151770b4e470fafe53390227244615ffd9b86ad5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d02b203d82cb2773a2a97850533d67dee9e3c729475cb438c2e625c71b15a7d5\",\"dweb:/ipfs/QmXsa98RbxoxfZqRAJmP6Sw8uTYssv3HcTyKzYBtXhQE1H\"]},\"src/modules/RewardsModule.sol\":{\"keccak256\":\"0x487a8508cbdb78886d4570c650f8b1faa7f570ac1553db9cdfbd98fd213501d5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d12f2f1c565208465cf6906d478d6e851b8ae6795cc8481cd25503fb20c224a9\",\"dweb:/ipfs/QmP2uKA2gHMcabQ9TRRJchTBncyc65hFG41Fcf6gwzBE3W\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256[]","name":"payees_","type":"uint256[]"},{"internalType":"uint256[]","name":"shares_","type":"uint256[]"},{"internalType":"contract GovernorCountingSimple","name":"underlyingContest_","type":"address"},{"internalType":"bool","name":"paysOutTarget_","type":"bool"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"type":"error","name":"AccountAlreadyHasShares"},{"inputs":[],"type":"error","name":"AccountNotDueERC20Payment"},{"inputs":[],"type":"error","name":"AccountNotDueNativePayment"},{"inputs":[],"type":"error","name":"CannotPayOutToZeroAddress"},{"inputs":[],"type":"error","name":"ContestMustBeCompleted"},{"inputs":[],"type":"error","name":"MustHaveAtLeastOnePayee"},{"inputs":[],"type":"error","name":"MustHaveDownvotingDisabled"},{"inputs":[],"type":"error","name":"MustHaveSortingEnabled"},{"inputs":[],"type":"error","name":"OnlyCreatorCanWithdraw"},{"inputs":[],"type":"error","name":"PayeesSharesLengthMismatch"},{"inputs":[],"type":"error","name":"PayoutRankCannotBeZero"},{"inputs":[],"type":"error","name":"RankingCannotBeZero"},{"inputs":[],"type":"error","name":"RankingHasNoShares"},{"inputs":[],"type":"error","name":"SharesCannotBeZero"},{"inputs":[],"type":"error","name":"TotalSharesCannotBeZero"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"ERC20PaymentReleased","anonymous":false},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address","indexed":true},{"internalType":"address","name":"by","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"ERC20RewardWithdrawn","anonymous":false},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256","indexed":false},{"internalType":"uint256","name":"shares","type":"uint256","indexed":false}],"type":"event","name":"PayeeAdded","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"PaymentReceived","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"PaymentReleased","anonymous":false},{"inputs":[{"internalType":"address","name":"by","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"RewardWithdrawn","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"erc20Released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"erc20TotalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"view","type":"function","name":"getAddressToPayOut","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPayees","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getUnderlyingContest","outputs":[{"internalType":"contract GovernorCountingSimple","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"payees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paysOutTarget","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"view","type":"function","name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"view","type":"function","name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"release"},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"release"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"view","type":"function","name":"runReleaseChecks"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"underlyingContest","outputs":[{"internalType":"contract GovernorCountingSimple","name":"","type":"address"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"withdrawRewards"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"withdrawRewards"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Creates an instance of `RewardsModule` where each ranking in `payees` is assigned the number of shares at the matching position in the `shares` array. All rankings in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no duplicates in `payees`."},"getAddressToPayOut(uint256)":{"details":"Return address to pay out for a given ranking."},"getPayees()":{"details":"Getter for list of rankings that will be paid out."},"getUnderlyingContest()":{"details":"Getter for the underlying contest."},"releasable(address,uint256)":{"details":"Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an IERC20 contract."},"releasable(uint256)":{"details":"Getter for the amount of payee's releasable Ether."},"release(address,uint256)":{"details":"Triggers a transfer to `ranking` of the amount of `token` tokens they are owed, according to their percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 contract."},"release(uint256)":{"details":"Triggers a transfer to `ranking` of the amount of Ether they are owed, according to their percentage of the total shares and their previous withdrawals."},"runReleaseChecks(uint256)":{"details":"Run release checks."},"version()":{"details":"Version of the rewards module."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@forge-std/=lib/forge-std/src/","@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/RewardsModule.sol":"RewardsModule"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305","urls":["bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5","dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69","urls":["bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71","dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1","urls":["bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68","dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa","urls":["bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931","dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol":{"keccak256":"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac","urls":["bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04","dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad","urls":["bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278","dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH"],"license":"MIT"},"src/governance/Governor.sol":{"keccak256":"0x903f59bd11124b9fdcb79918dd174d4a74727e61bfd4ce0c00b293d757199914","urls":["bzz-raw://1882f0edad71aee39791f0fbaa0d204deb350662a7a47738c2be2f18f0142e81","dweb:/ipfs/QmWh6kL3CfXK1nUboCTNHFDqjwaf8N8ynHmaypNHpXoDM4"],"license":"AGPL-3.0-only"},"src/governance/extensions/GovernorCountingSimple.sol":{"keccak256":"0x926939a083bcb63478d84c9f13c87f34dbd9aa248f2257f9cd1bc6a2e8a26b24","urls":["bzz-raw://966641c9ea61d00b1a536158fb57b091d4687204b5a77a2dbc2b664067a035e0","dweb:/ipfs/Qmd3cfwmg4nqkXCew8nrDsEMR2qe9YFAdFXs8q45LcswiQ"],"license":"AGPL-3.0-only"},"src/governance/utils/GovernorMerkleVotes.sol":{"keccak256":"0x02d81049154ff4a8c009126a7470c9f49d076a534576a6fc3fe3f8de2c5cd608","urls":["bzz-raw://21056ce53dd97ffff192a7834bd0ea2cc7691fce7e90e8c7943a9213242ba28a","dweb:/ipfs/QmNzbxrT8Q2FLLQkdNUAKZyZzy4QMGm4zQsdWePWk1sxDb"],"license":"AGPL-3.0-only"},"src/governance/utils/GovernorSorting.sol":{"keccak256":"0xde18aec0c9ebe63b6e210e03151770b4e470fafe53390227244615ffd9b86ad5","urls":["bzz-raw://d02b203d82cb2773a2a97850533d67dee9e3c729475cb438c2e625c71b15a7d5","dweb:/ipfs/QmXsa98RbxoxfZqRAJmP6Sw8uTYssv3HcTyKzYBtXhQE1H"],"license":"AGPL-3.0-only"},"src/modules/RewardsModule.sol":{"keccak256":"0x487a8508cbdb78886d4570c650f8b1faa7f570ac1553db9cdfbd98fd213501d5","urls":["bzz-raw://d12f2f1c565208465cf6906d478d6e851b8ae6795cc8481cd25503fb20c224a9","dweb:/ipfs/QmP2uKA2gHMcabQ9TRRJchTBncyc65hFG41Fcf6gwzBE3W"],"license":"AGPL-3.0-only"}},"version":1},"id":41} \ No newline at end of file diff --git a/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.4.32.checkCanceled.sol/flattenedRewardsModule.sol b/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.4.32.checkCanceled.sol/flattenedRewardsModule.sol new file mode 100644 index 000000000..7f954fe1f --- /dev/null +++ b/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.4.32.checkCanceled.sol/flattenedRewardsModule.sol @@ -0,0 +1,3209 @@ +// SPDX-License-Identifier: AGPL-3.0-only +pragma solidity ^0.8.0 ^0.8.1 ^0.8.19; + +// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol + +// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) + +/** + * @dev Interface of the ERC20 standard as defined in the EIP. + */ +interface IERC20 { + /** + * @dev Emitted when `value` tokens are moved from one account (`from`) to + * another (`to`). + * + * Note that `value` may be zero. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev Emitted when the allowance of a `spender` for an `owner` is set by + * a call to {approve}. `value` is the new allowance. + */ + event Approval(address indexed owner, address indexed spender, uint256 value); + + /** + * @dev Returns the amount of tokens in existence. + */ + function totalSupply() external view returns (uint256); + + /** + * @dev Returns the amount of tokens owned by `account`. + */ + function balanceOf(address account) external view returns (uint256); + + /** + * @dev Moves `amount` tokens from the caller's account to `to`. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transfer(address to, uint256 amount) external returns (bool); + + /** + * @dev Returns the remaining number of tokens that `spender` will be + * allowed to spend on behalf of `owner` through {transferFrom}. This is + * zero by default. + * + * This value changes when {approve} or {transferFrom} are called. + */ + function allowance(address owner, address spender) external view returns (uint256); + + /** + * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * IMPORTANT: Beware that changing an allowance with this method brings the risk + * that someone may use both the old and the new allowance by unfortunate + * transaction ordering. One possible solution to mitigate this race + * condition is to first reduce the spender's allowance to 0 and set the + * desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + * Emits an {Approval} event. + */ + function approve(address spender, uint256 amount) external returns (bool); + + /** + * @dev Moves `amount` tokens from `from` to `to` using the + * allowance mechanism. `amount` is then deducted from the caller's + * allowance. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transferFrom(address from, address to, uint256 amount) external returns (bool); +} + +// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol + +// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol) + +/** + * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in + * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. + * + * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by + * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't + * need to send a transaction, and thus is not required to hold Ether at all. + * + * ==== Security Considerations + * + * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature + * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be + * considered as an intention to spend the allowance in any specific way. The second is that because permits have + * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should + * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be + * generally recommended is: + * + * ```solidity + * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { + * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} + * doThing(..., value); + * } + * + * function doThing(..., uint256 value) public { + * token.safeTransferFrom(msg.sender, address(this), value); + * ... + * } + * ``` + * + * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of + * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also + * {SafeERC20-safeTransferFrom}). + * + * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so + * contracts should have entry points that don't rely on permit. + */ +interface IERC20Permit { + /** + * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, + * given ``owner``'s signed approval. + * + * IMPORTANT: The same issues {IERC20-approve} has related to transaction + * ordering also apply here. + * + * Emits an {Approval} event. + * + * Requirements: + * + * - `spender` cannot be the zero address. + * - `deadline` must be a timestamp in the future. + * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` + * over the EIP712-formatted function arguments. + * - the signature must use ``owner``'s current nonce (see {nonces}). + * + * For more information on the signature format, see the + * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP + * section]. + * + * CAUTION: See Security Considerations above. + */ + function permit( + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) external; + + /** + * @dev Returns the current nonce for `owner`. This value must be + * included whenever a signature is generated for {permit}. + * + * Every successful call to {permit} increases ``owner``'s nonce by one. This + * prevents a signature from being used multiple times. + */ + function nonces(address owner) external view returns (uint256); + + /** + * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. + */ + // solhint-disable-next-line func-name-mixedcase + function DOMAIN_SEPARATOR() external view returns (bytes32); +} + +// lib/openzeppelin-contracts/contracts/utils/Address.sol + +// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) + +/** + * @dev Collection of functions related to the address type + */ +library Address { + /** + * @dev Returns true if `account` is a contract. + * + * [IMPORTANT] + * ==== + * It is unsafe to assume that an address for which this function returns + * false is an externally-owned account (EOA) and not a contract. + * + * Among others, `isContract` will return false for the following + * types of addresses: + * + * - an externally-owned account + * - a contract in construction + * - an address where a contract will be created + * - an address where a contract lived, but was destroyed + * + * Furthermore, `isContract` will also return true if the target contract within + * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, + * which only has an effect at the end of a transaction. + * ==== + * + * [IMPORTANT] + * ==== + * You shouldn't rely on `isContract` to protect against flash loan attacks! + * + * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets + * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract + * constructor. + * ==== + */ + function isContract(address account) internal view returns (bool) { + // This method relies on extcodesize/address.code.length, which returns 0 + // for contracts in construction, since the code is only stored at the end + // of the constructor execution. + + return account.code.length > 0; + } + + /** + * @dev Replacement for Solidity's `transfer`: sends `amount` wei to + * `recipient`, forwarding all available gas and reverting on errors. + * + * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost + * of certain opcodes, possibly making contracts go over the 2300 gas limit + * imposed by `transfer`, making them unable to receive funds via + * `transfer`. {sendValue} removes this limitation. + * + * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. + * + * IMPORTANT: because control is transferred to `recipient`, care must be + * taken to not create reentrancy vulnerabilities. Consider using + * {ReentrancyGuard} or the + * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. + */ + function sendValue(address payable recipient, uint256 amount) internal { + require(address(this).balance >= amount, "Address: insufficient balance"); + + (bool success, ) = recipient.call{value: amount}(""); + require(success, "Address: unable to send value, recipient may have reverted"); + } + + /** + * @dev Performs a Solidity function call using a low level `call`. A + * plain `call` is an unsafe replacement for a function call: use this + * function instead. + * + * If `target` reverts with a revert reason, it is bubbled up by this + * function (like regular Solidity function calls). + * + * Returns the raw returned data. To convert to the expected return value, + * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. + * + * Requirements: + * + * - `target` must be a contract. + * - calling `target` with `data` must not revert. + * + * _Available since v3.1._ + */ + function functionCall(address target, bytes memory data) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0, "Address: low-level call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with + * `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCall( + address target, + bytes memory data, + string memory errorMessage + ) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but also transferring `value` wei to `target`. + * + * Requirements: + * + * - the calling contract must have an ETH balance of at least `value`. + * - the called Solidity function must be `payable`. + * + * _Available since v3.1._ + */ + function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { + return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); + } + + /** + * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but + * with `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCallWithValue( + address target, + bytes memory data, + uint256 value, + string memory errorMessage + ) internal returns (bytes memory) { + require(address(this).balance >= value, "Address: insufficient balance for call"); + (bool success, bytes memory returndata) = target.call{value: value}(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { + return functionStaticCall(target, data, "Address: low-level static call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall( + address target, + bytes memory data, + string memory errorMessage + ) internal view returns (bytes memory) { + (bool success, bytes memory returndata) = target.staticcall(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a delegate call. + * + * _Available since v3.4._ + */ + function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { + return functionDelegateCall(target, data, "Address: low-level delegate call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a delegate call. + * + * _Available since v3.4._ + */ + function functionDelegateCall( + address target, + bytes memory data, + string memory errorMessage + ) internal returns (bytes memory) { + (bool success, bytes memory returndata) = target.delegatecall(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling + * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. + * + * _Available since v4.8._ + */ + function verifyCallResultFromTarget( + address target, + bool success, + bytes memory returndata, + string memory errorMessage + ) internal view returns (bytes memory) { + if (success) { + if (returndata.length == 0) { + // only check isContract if the call was successful and the return data is empty + // otherwise we already know that it was a contract + require(isContract(target), "Address: call to non-contract"); + } + return returndata; + } else { + _revert(returndata, errorMessage); + } + } + + /** + * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the + * revert reason or using the provided one. + * + * _Available since v4.3._ + */ + function verifyCallResult( + bool success, + bytes memory returndata, + string memory errorMessage + ) internal pure returns (bytes memory) { + if (success) { + return returndata; + } else { + _revert(returndata, errorMessage); + } + } + + function _revert(bytes memory returndata, string memory errorMessage) private pure { + // Look for revert reason and bubble it up if present + if (returndata.length > 0) { + // The easiest way to bubble the revert reason is using memory via assembly + /// @solidity memory-safe-assembly + assembly { + let returndata_size := mload(returndata) + revert(add(32, returndata), returndata_size) + } + } else { + revert(errorMessage); + } + } +} + +// lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol + +// OpenZeppelin Contracts (last updated v4.9.2) (utils/cryptography/MerkleProof.sol) + +/** + * @dev These functions deal with verification of Merkle Tree proofs. + * + * The tree and the proofs can be generated using our + * https://github.com/OpenZeppelin/merkle-tree[JavaScript library]. + * You will find a quickstart guide in the readme. + * + * WARNING: You should avoid using leaf values that are 64 bytes long prior to + * hashing, or use a hash function other than keccak256 for hashing leaves. + * This is because the concatenation of a sorted pair of internal nodes in + * the merkle tree could be reinterpreted as a leaf value. + * OpenZeppelin's JavaScript library generates merkle trees that are safe + * against this attack out of the box. + */ +library MerkleProof { + /** + * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree + * defined by `root`. For this, a `proof` must be provided, containing + * sibling hashes on the branch from the leaf to the root of the tree. Each + * pair of leaves and each pair of pre-images are assumed to be sorted. + */ + function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { + return processProof(proof, leaf) == root; + } + + /** + * @dev Calldata version of {verify} + * + * _Available since v4.7._ + */ + function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { + return processProofCalldata(proof, leaf) == root; + } + + /** + * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up + * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt + * hash matches the root of the tree. When processing the proof, the pairs + * of leafs & pre-images are assumed to be sorted. + * + * _Available since v4.4._ + */ + function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { + bytes32 computedHash = leaf; + for (uint256 i = 0; i < proof.length; i++) { + computedHash = _hashPair(computedHash, proof[i]); + } + return computedHash; + } + + /** + * @dev Calldata version of {processProof} + * + * _Available since v4.7._ + */ + function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { + bytes32 computedHash = leaf; + for (uint256 i = 0; i < proof.length; i++) { + computedHash = _hashPair(computedHash, proof[i]); + } + return computedHash; + } + + /** + * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by + * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. + * + * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. + * + * _Available since v4.7._ + */ + function multiProofVerify( + bytes32[] memory proof, + bool[] memory proofFlags, + bytes32 root, + bytes32[] memory leaves + ) internal pure returns (bool) { + return processMultiProof(proof, proofFlags, leaves) == root; + } + + /** + * @dev Calldata version of {multiProofVerify} + * + * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. + * + * _Available since v4.7._ + */ + function multiProofVerifyCalldata( + bytes32[] calldata proof, + bool[] calldata proofFlags, + bytes32 root, + bytes32[] memory leaves + ) internal pure returns (bool) { + return processMultiProofCalldata(proof, proofFlags, leaves) == root; + } + + /** + * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction + * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another + * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false + * respectively. + * + * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree + * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the + * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). + * + * _Available since v4.7._ + */ + function processMultiProof( + bytes32[] memory proof, + bool[] memory proofFlags, + bytes32[] memory leaves + ) internal pure returns (bytes32 merkleRoot) { + // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by + // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the + // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of + // the merkle tree. + uint256 leavesLen = leaves.length; + uint256 proofLen = proof.length; + uint256 totalHashes = proofFlags.length; + + // Check proof validity. + require(leavesLen + proofLen - 1 == totalHashes, "MerkleProof: invalid multiproof"); + + // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using + // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". + bytes32[] memory hashes = new bytes32[](totalHashes); + uint256 leafPos = 0; + uint256 hashPos = 0; + uint256 proofPos = 0; + // At each step, we compute the next hash using two values: + // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we + // get the next hash. + // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the + // `proof` array. + for (uint256 i = 0; i < totalHashes; i++) { + bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; + bytes32 b = proofFlags[i] + ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) + : proof[proofPos++]; + hashes[i] = _hashPair(a, b); + } + + if (totalHashes > 0) { + require(proofPos == proofLen, "MerkleProof: invalid multiproof"); + unchecked { + return hashes[totalHashes - 1]; + } + } else if (leavesLen > 0) { + return leaves[0]; + } else { + return proof[0]; + } + } + + /** + * @dev Calldata version of {processMultiProof}. + * + * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. + * + * _Available since v4.7._ + */ + function processMultiProofCalldata( + bytes32[] calldata proof, + bool[] calldata proofFlags, + bytes32[] memory leaves + ) internal pure returns (bytes32 merkleRoot) { + // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by + // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the + // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of + // the merkle tree. + uint256 leavesLen = leaves.length; + uint256 proofLen = proof.length; + uint256 totalHashes = proofFlags.length; + + // Check proof validity. + require(leavesLen + proofLen - 1 == totalHashes, "MerkleProof: invalid multiproof"); + + // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using + // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". + bytes32[] memory hashes = new bytes32[](totalHashes); + uint256 leafPos = 0; + uint256 hashPos = 0; + uint256 proofPos = 0; + // At each step, we compute the next hash using two values: + // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we + // get the next hash. + // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the + // `proof` array. + for (uint256 i = 0; i < totalHashes; i++) { + bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; + bytes32 b = proofFlags[i] + ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) + : proof[proofPos++]; + hashes[i] = _hashPair(a, b); + } + + if (totalHashes > 0) { + require(proofPos == proofLen, "MerkleProof: invalid multiproof"); + unchecked { + return hashes[totalHashes - 1]; + } + } else if (leavesLen > 0) { + return leaves[0]; + } else { + return proof[0]; + } + } + + function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { + return a < b ? _efficientHash(a, b) : _efficientHash(b, a); + } + + function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { + /// @solidity memory-safe-assembly + assembly { + mstore(0x00, a) + mstore(0x20, b) + value := keccak256(0x00, 0x40) + } + } +} + +// lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol + +// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SafeCast.sol) +// This file was procedurally generated from scripts/generate/templates/SafeCast.js. + +/** + * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow + * checks. + * + * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can + * easily result in undesired exploitation or bugs, since developers usually + * assume that overflows raise errors. `SafeCast` restores this intuition by + * reverting the transaction when such an operation overflows. + * + * Using this library instead of the unchecked operations eliminates an entire + * class of bugs, so it's recommended to use it always. + * + * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing + * all math on `uint256` and `int256` and then downcasting. + */ +library SafeCast { + /** + * @dev Returns the downcasted uint248 from uint256, reverting on + * overflow (when the input is greater than largest uint248). + * + * Counterpart to Solidity's `uint248` operator. + * + * Requirements: + * + * - input must fit into 248 bits + * + * _Available since v4.7._ + */ + function toUint248(uint256 value) internal pure returns (uint248) { + require(value <= type(uint248).max, "SafeCast: value doesn't fit in 248 bits"); + return uint248(value); + } + + /** + * @dev Returns the downcasted uint240 from uint256, reverting on + * overflow (when the input is greater than largest uint240). + * + * Counterpart to Solidity's `uint240` operator. + * + * Requirements: + * + * - input must fit into 240 bits + * + * _Available since v4.7._ + */ + function toUint240(uint256 value) internal pure returns (uint240) { + require(value <= type(uint240).max, "SafeCast: value doesn't fit in 240 bits"); + return uint240(value); + } + + /** + * @dev Returns the downcasted uint232 from uint256, reverting on + * overflow (when the input is greater than largest uint232). + * + * Counterpart to Solidity's `uint232` operator. + * + * Requirements: + * + * - input must fit into 232 bits + * + * _Available since v4.7._ + */ + function toUint232(uint256 value) internal pure returns (uint232) { + require(value <= type(uint232).max, "SafeCast: value doesn't fit in 232 bits"); + return uint232(value); + } + + /** + * @dev Returns the downcasted uint224 from uint256, reverting on + * overflow (when the input is greater than largest uint224). + * + * Counterpart to Solidity's `uint224` operator. + * + * Requirements: + * + * - input must fit into 224 bits + * + * _Available since v4.2._ + */ + function toUint224(uint256 value) internal pure returns (uint224) { + require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); + return uint224(value); + } + + /** + * @dev Returns the downcasted uint216 from uint256, reverting on + * overflow (when the input is greater than largest uint216). + * + * Counterpart to Solidity's `uint216` operator. + * + * Requirements: + * + * - input must fit into 216 bits + * + * _Available since v4.7._ + */ + function toUint216(uint256 value) internal pure returns (uint216) { + require(value <= type(uint216).max, "SafeCast: value doesn't fit in 216 bits"); + return uint216(value); + } + + /** + * @dev Returns the downcasted uint208 from uint256, reverting on + * overflow (when the input is greater than largest uint208). + * + * Counterpart to Solidity's `uint208` operator. + * + * Requirements: + * + * - input must fit into 208 bits + * + * _Available since v4.7._ + */ + function toUint208(uint256 value) internal pure returns (uint208) { + require(value <= type(uint208).max, "SafeCast: value doesn't fit in 208 bits"); + return uint208(value); + } + + /** + * @dev Returns the downcasted uint200 from uint256, reverting on + * overflow (when the input is greater than largest uint200). + * + * Counterpart to Solidity's `uint200` operator. + * + * Requirements: + * + * - input must fit into 200 bits + * + * _Available since v4.7._ + */ + function toUint200(uint256 value) internal pure returns (uint200) { + require(value <= type(uint200).max, "SafeCast: value doesn't fit in 200 bits"); + return uint200(value); + } + + /** + * @dev Returns the downcasted uint192 from uint256, reverting on + * overflow (when the input is greater than largest uint192). + * + * Counterpart to Solidity's `uint192` operator. + * + * Requirements: + * + * - input must fit into 192 bits + * + * _Available since v4.7._ + */ + function toUint192(uint256 value) internal pure returns (uint192) { + require(value <= type(uint192).max, "SafeCast: value doesn't fit in 192 bits"); + return uint192(value); + } + + /** + * @dev Returns the downcasted uint184 from uint256, reverting on + * overflow (when the input is greater than largest uint184). + * + * Counterpart to Solidity's `uint184` operator. + * + * Requirements: + * + * - input must fit into 184 bits + * + * _Available since v4.7._ + */ + function toUint184(uint256 value) internal pure returns (uint184) { + require(value <= type(uint184).max, "SafeCast: value doesn't fit in 184 bits"); + return uint184(value); + } + + /** + * @dev Returns the downcasted uint176 from uint256, reverting on + * overflow (when the input is greater than largest uint176). + * + * Counterpart to Solidity's `uint176` operator. + * + * Requirements: + * + * - input must fit into 176 bits + * + * _Available since v4.7._ + */ + function toUint176(uint256 value) internal pure returns (uint176) { + require(value <= type(uint176).max, "SafeCast: value doesn't fit in 176 bits"); + return uint176(value); + } + + /** + * @dev Returns the downcasted uint168 from uint256, reverting on + * overflow (when the input is greater than largest uint168). + * + * Counterpart to Solidity's `uint168` operator. + * + * Requirements: + * + * - input must fit into 168 bits + * + * _Available since v4.7._ + */ + function toUint168(uint256 value) internal pure returns (uint168) { + require(value <= type(uint168).max, "SafeCast: value doesn't fit in 168 bits"); + return uint168(value); + } + + /** + * @dev Returns the downcasted uint160 from uint256, reverting on + * overflow (when the input is greater than largest uint160). + * + * Counterpart to Solidity's `uint160` operator. + * + * Requirements: + * + * - input must fit into 160 bits + * + * _Available since v4.7._ + */ + function toUint160(uint256 value) internal pure returns (uint160) { + require(value <= type(uint160).max, "SafeCast: value doesn't fit in 160 bits"); + return uint160(value); + } + + /** + * @dev Returns the downcasted uint152 from uint256, reverting on + * overflow (when the input is greater than largest uint152). + * + * Counterpart to Solidity's `uint152` operator. + * + * Requirements: + * + * - input must fit into 152 bits + * + * _Available since v4.7._ + */ + function toUint152(uint256 value) internal pure returns (uint152) { + require(value <= type(uint152).max, "SafeCast: value doesn't fit in 152 bits"); + return uint152(value); + } + + /** + * @dev Returns the downcasted uint144 from uint256, reverting on + * overflow (when the input is greater than largest uint144). + * + * Counterpart to Solidity's `uint144` operator. + * + * Requirements: + * + * - input must fit into 144 bits + * + * _Available since v4.7._ + */ + function toUint144(uint256 value) internal pure returns (uint144) { + require(value <= type(uint144).max, "SafeCast: value doesn't fit in 144 bits"); + return uint144(value); + } + + /** + * @dev Returns the downcasted uint136 from uint256, reverting on + * overflow (when the input is greater than largest uint136). + * + * Counterpart to Solidity's `uint136` operator. + * + * Requirements: + * + * - input must fit into 136 bits + * + * _Available since v4.7._ + */ + function toUint136(uint256 value) internal pure returns (uint136) { + require(value <= type(uint136).max, "SafeCast: value doesn't fit in 136 bits"); + return uint136(value); + } + + /** + * @dev Returns the downcasted uint128 from uint256, reverting on + * overflow (when the input is greater than largest uint128). + * + * Counterpart to Solidity's `uint128` operator. + * + * Requirements: + * + * - input must fit into 128 bits + * + * _Available since v2.5._ + */ + function toUint128(uint256 value) internal pure returns (uint128) { + require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); + return uint128(value); + } + + /** + * @dev Returns the downcasted uint120 from uint256, reverting on + * overflow (when the input is greater than largest uint120). + * + * Counterpart to Solidity's `uint120` operator. + * + * Requirements: + * + * - input must fit into 120 bits + * + * _Available since v4.7._ + */ + function toUint120(uint256 value) internal pure returns (uint120) { + require(value <= type(uint120).max, "SafeCast: value doesn't fit in 120 bits"); + return uint120(value); + } + + /** + * @dev Returns the downcasted uint112 from uint256, reverting on + * overflow (when the input is greater than largest uint112). + * + * Counterpart to Solidity's `uint112` operator. + * + * Requirements: + * + * - input must fit into 112 bits + * + * _Available since v4.7._ + */ + function toUint112(uint256 value) internal pure returns (uint112) { + require(value <= type(uint112).max, "SafeCast: value doesn't fit in 112 bits"); + return uint112(value); + } + + /** + * @dev Returns the downcasted uint104 from uint256, reverting on + * overflow (when the input is greater than largest uint104). + * + * Counterpart to Solidity's `uint104` operator. + * + * Requirements: + * + * - input must fit into 104 bits + * + * _Available since v4.7._ + */ + function toUint104(uint256 value) internal pure returns (uint104) { + require(value <= type(uint104).max, "SafeCast: value doesn't fit in 104 bits"); + return uint104(value); + } + + /** + * @dev Returns the downcasted uint96 from uint256, reverting on + * overflow (when the input is greater than largest uint96). + * + * Counterpart to Solidity's `uint96` operator. + * + * Requirements: + * + * - input must fit into 96 bits + * + * _Available since v4.2._ + */ + function toUint96(uint256 value) internal pure returns (uint96) { + require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); + return uint96(value); + } + + /** + * @dev Returns the downcasted uint88 from uint256, reverting on + * overflow (when the input is greater than largest uint88). + * + * Counterpart to Solidity's `uint88` operator. + * + * Requirements: + * + * - input must fit into 88 bits + * + * _Available since v4.7._ + */ + function toUint88(uint256 value) internal pure returns (uint88) { + require(value <= type(uint88).max, "SafeCast: value doesn't fit in 88 bits"); + return uint88(value); + } + + /** + * @dev Returns the downcasted uint80 from uint256, reverting on + * overflow (when the input is greater than largest uint80). + * + * Counterpart to Solidity's `uint80` operator. + * + * Requirements: + * + * - input must fit into 80 bits + * + * _Available since v4.7._ + */ + function toUint80(uint256 value) internal pure returns (uint80) { + require(value <= type(uint80).max, "SafeCast: value doesn't fit in 80 bits"); + return uint80(value); + } + + /** + * @dev Returns the downcasted uint72 from uint256, reverting on + * overflow (when the input is greater than largest uint72). + * + * Counterpart to Solidity's `uint72` operator. + * + * Requirements: + * + * - input must fit into 72 bits + * + * _Available since v4.7._ + */ + function toUint72(uint256 value) internal pure returns (uint72) { + require(value <= type(uint72).max, "SafeCast: value doesn't fit in 72 bits"); + return uint72(value); + } + + /** + * @dev Returns the downcasted uint64 from uint256, reverting on + * overflow (when the input is greater than largest uint64). + * + * Counterpart to Solidity's `uint64` operator. + * + * Requirements: + * + * - input must fit into 64 bits + * + * _Available since v2.5._ + */ + function toUint64(uint256 value) internal pure returns (uint64) { + require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); + return uint64(value); + } + + /** + * @dev Returns the downcasted uint56 from uint256, reverting on + * overflow (when the input is greater than largest uint56). + * + * Counterpart to Solidity's `uint56` operator. + * + * Requirements: + * + * - input must fit into 56 bits + * + * _Available since v4.7._ + */ + function toUint56(uint256 value) internal pure returns (uint56) { + require(value <= type(uint56).max, "SafeCast: value doesn't fit in 56 bits"); + return uint56(value); + } + + /** + * @dev Returns the downcasted uint48 from uint256, reverting on + * overflow (when the input is greater than largest uint48). + * + * Counterpart to Solidity's `uint48` operator. + * + * Requirements: + * + * - input must fit into 48 bits + * + * _Available since v4.7._ + */ + function toUint48(uint256 value) internal pure returns (uint48) { + require(value <= type(uint48).max, "SafeCast: value doesn't fit in 48 bits"); + return uint48(value); + } + + /** + * @dev Returns the downcasted uint40 from uint256, reverting on + * overflow (when the input is greater than largest uint40). + * + * Counterpart to Solidity's `uint40` operator. + * + * Requirements: + * + * - input must fit into 40 bits + * + * _Available since v4.7._ + */ + function toUint40(uint256 value) internal pure returns (uint40) { + require(value <= type(uint40).max, "SafeCast: value doesn't fit in 40 bits"); + return uint40(value); + } + + /** + * @dev Returns the downcasted uint32 from uint256, reverting on + * overflow (when the input is greater than largest uint32). + * + * Counterpart to Solidity's `uint32` operator. + * + * Requirements: + * + * - input must fit into 32 bits + * + * _Available since v2.5._ + */ + function toUint32(uint256 value) internal pure returns (uint32) { + require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); + return uint32(value); + } + + /** + * @dev Returns the downcasted uint24 from uint256, reverting on + * overflow (when the input is greater than largest uint24). + * + * Counterpart to Solidity's `uint24` operator. + * + * Requirements: + * + * - input must fit into 24 bits + * + * _Available since v4.7._ + */ + function toUint24(uint256 value) internal pure returns (uint24) { + require(value <= type(uint24).max, "SafeCast: value doesn't fit in 24 bits"); + return uint24(value); + } + + /** + * @dev Returns the downcasted uint16 from uint256, reverting on + * overflow (when the input is greater than largest uint16). + * + * Counterpart to Solidity's `uint16` operator. + * + * Requirements: + * + * - input must fit into 16 bits + * + * _Available since v2.5._ + */ + function toUint16(uint256 value) internal pure returns (uint16) { + require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); + return uint16(value); + } + + /** + * @dev Returns the downcasted uint8 from uint256, reverting on + * overflow (when the input is greater than largest uint8). + * + * Counterpart to Solidity's `uint8` operator. + * + * Requirements: + * + * - input must fit into 8 bits + * + * _Available since v2.5._ + */ + function toUint8(uint256 value) internal pure returns (uint8) { + require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); + return uint8(value); + } + + /** + * @dev Converts a signed int256 into an unsigned uint256. + * + * Requirements: + * + * - input must be greater than or equal to 0. + * + * _Available since v3.0._ + */ + function toUint256(int256 value) internal pure returns (uint256) { + require(value >= 0, "SafeCast: value must be positive"); + return uint256(value); + } + + /** + * @dev Returns the downcasted int248 from int256, reverting on + * overflow (when the input is less than smallest int248 or + * greater than largest int248). + * + * Counterpart to Solidity's `int248` operator. + * + * Requirements: + * + * - input must fit into 248 bits + * + * _Available since v4.7._ + */ + function toInt248(int256 value) internal pure returns (int248 downcasted) { + downcasted = int248(value); + require(downcasted == value, "SafeCast: value doesn't fit in 248 bits"); + } + + /** + * @dev Returns the downcasted int240 from int256, reverting on + * overflow (when the input is less than smallest int240 or + * greater than largest int240). + * + * Counterpart to Solidity's `int240` operator. + * + * Requirements: + * + * - input must fit into 240 bits + * + * _Available since v4.7._ + */ + function toInt240(int256 value) internal pure returns (int240 downcasted) { + downcasted = int240(value); + require(downcasted == value, "SafeCast: value doesn't fit in 240 bits"); + } + + /** + * @dev Returns the downcasted int232 from int256, reverting on + * overflow (when the input is less than smallest int232 or + * greater than largest int232). + * + * Counterpart to Solidity's `int232` operator. + * + * Requirements: + * + * - input must fit into 232 bits + * + * _Available since v4.7._ + */ + function toInt232(int256 value) internal pure returns (int232 downcasted) { + downcasted = int232(value); + require(downcasted == value, "SafeCast: value doesn't fit in 232 bits"); + } + + /** + * @dev Returns the downcasted int224 from int256, reverting on + * overflow (when the input is less than smallest int224 or + * greater than largest int224). + * + * Counterpart to Solidity's `int224` operator. + * + * Requirements: + * + * - input must fit into 224 bits + * + * _Available since v4.7._ + */ + function toInt224(int256 value) internal pure returns (int224 downcasted) { + downcasted = int224(value); + require(downcasted == value, "SafeCast: value doesn't fit in 224 bits"); + } + + /** + * @dev Returns the downcasted int216 from int256, reverting on + * overflow (when the input is less than smallest int216 or + * greater than largest int216). + * + * Counterpart to Solidity's `int216` operator. + * + * Requirements: + * + * - input must fit into 216 bits + * + * _Available since v4.7._ + */ + function toInt216(int256 value) internal pure returns (int216 downcasted) { + downcasted = int216(value); + require(downcasted == value, "SafeCast: value doesn't fit in 216 bits"); + } + + /** + * @dev Returns the downcasted int208 from int256, reverting on + * overflow (when the input is less than smallest int208 or + * greater than largest int208). + * + * Counterpart to Solidity's `int208` operator. + * + * Requirements: + * + * - input must fit into 208 bits + * + * _Available since v4.7._ + */ + function toInt208(int256 value) internal pure returns (int208 downcasted) { + downcasted = int208(value); + require(downcasted == value, "SafeCast: value doesn't fit in 208 bits"); + } + + /** + * @dev Returns the downcasted int200 from int256, reverting on + * overflow (when the input is less than smallest int200 or + * greater than largest int200). + * + * Counterpart to Solidity's `int200` operator. + * + * Requirements: + * + * - input must fit into 200 bits + * + * _Available since v4.7._ + */ + function toInt200(int256 value) internal pure returns (int200 downcasted) { + downcasted = int200(value); + require(downcasted == value, "SafeCast: value doesn't fit in 200 bits"); + } + + /** + * @dev Returns the downcasted int192 from int256, reverting on + * overflow (when the input is less than smallest int192 or + * greater than largest int192). + * + * Counterpart to Solidity's `int192` operator. + * + * Requirements: + * + * - input must fit into 192 bits + * + * _Available since v4.7._ + */ + function toInt192(int256 value) internal pure returns (int192 downcasted) { + downcasted = int192(value); + require(downcasted == value, "SafeCast: value doesn't fit in 192 bits"); + } + + /** + * @dev Returns the downcasted int184 from int256, reverting on + * overflow (when the input is less than smallest int184 or + * greater than largest int184). + * + * Counterpart to Solidity's `int184` operator. + * + * Requirements: + * + * - input must fit into 184 bits + * + * _Available since v4.7._ + */ + function toInt184(int256 value) internal pure returns (int184 downcasted) { + downcasted = int184(value); + require(downcasted == value, "SafeCast: value doesn't fit in 184 bits"); + } + + /** + * @dev Returns the downcasted int176 from int256, reverting on + * overflow (when the input is less than smallest int176 or + * greater than largest int176). + * + * Counterpart to Solidity's `int176` operator. + * + * Requirements: + * + * - input must fit into 176 bits + * + * _Available since v4.7._ + */ + function toInt176(int256 value) internal pure returns (int176 downcasted) { + downcasted = int176(value); + require(downcasted == value, "SafeCast: value doesn't fit in 176 bits"); + } + + /** + * @dev Returns the downcasted int168 from int256, reverting on + * overflow (when the input is less than smallest int168 or + * greater than largest int168). + * + * Counterpart to Solidity's `int168` operator. + * + * Requirements: + * + * - input must fit into 168 bits + * + * _Available since v4.7._ + */ + function toInt168(int256 value) internal pure returns (int168 downcasted) { + downcasted = int168(value); + require(downcasted == value, "SafeCast: value doesn't fit in 168 bits"); + } + + /** + * @dev Returns the downcasted int160 from int256, reverting on + * overflow (when the input is less than smallest int160 or + * greater than largest int160). + * + * Counterpart to Solidity's `int160` operator. + * + * Requirements: + * + * - input must fit into 160 bits + * + * _Available since v4.7._ + */ + function toInt160(int256 value) internal pure returns (int160 downcasted) { + downcasted = int160(value); + require(downcasted == value, "SafeCast: value doesn't fit in 160 bits"); + } + + /** + * @dev Returns the downcasted int152 from int256, reverting on + * overflow (when the input is less than smallest int152 or + * greater than largest int152). + * + * Counterpart to Solidity's `int152` operator. + * + * Requirements: + * + * - input must fit into 152 bits + * + * _Available since v4.7._ + */ + function toInt152(int256 value) internal pure returns (int152 downcasted) { + downcasted = int152(value); + require(downcasted == value, "SafeCast: value doesn't fit in 152 bits"); + } + + /** + * @dev Returns the downcasted int144 from int256, reverting on + * overflow (when the input is less than smallest int144 or + * greater than largest int144). + * + * Counterpart to Solidity's `int144` operator. + * + * Requirements: + * + * - input must fit into 144 bits + * + * _Available since v4.7._ + */ + function toInt144(int256 value) internal pure returns (int144 downcasted) { + downcasted = int144(value); + require(downcasted == value, "SafeCast: value doesn't fit in 144 bits"); + } + + /** + * @dev Returns the downcasted int136 from int256, reverting on + * overflow (when the input is less than smallest int136 or + * greater than largest int136). + * + * Counterpart to Solidity's `int136` operator. + * + * Requirements: + * + * - input must fit into 136 bits + * + * _Available since v4.7._ + */ + function toInt136(int256 value) internal pure returns (int136 downcasted) { + downcasted = int136(value); + require(downcasted == value, "SafeCast: value doesn't fit in 136 bits"); + } + + /** + * @dev Returns the downcasted int128 from int256, reverting on + * overflow (when the input is less than smallest int128 or + * greater than largest int128). + * + * Counterpart to Solidity's `int128` operator. + * + * Requirements: + * + * - input must fit into 128 bits + * + * _Available since v3.1._ + */ + function toInt128(int256 value) internal pure returns (int128 downcasted) { + downcasted = int128(value); + require(downcasted == value, "SafeCast: value doesn't fit in 128 bits"); + } + + /** + * @dev Returns the downcasted int120 from int256, reverting on + * overflow (when the input is less than smallest int120 or + * greater than largest int120). + * + * Counterpart to Solidity's `int120` operator. + * + * Requirements: + * + * - input must fit into 120 bits + * + * _Available since v4.7._ + */ + function toInt120(int256 value) internal pure returns (int120 downcasted) { + downcasted = int120(value); + require(downcasted == value, "SafeCast: value doesn't fit in 120 bits"); + } + + /** + * @dev Returns the downcasted int112 from int256, reverting on + * overflow (when the input is less than smallest int112 or + * greater than largest int112). + * + * Counterpart to Solidity's `int112` operator. + * + * Requirements: + * + * - input must fit into 112 bits + * + * _Available since v4.7._ + */ + function toInt112(int256 value) internal pure returns (int112 downcasted) { + downcasted = int112(value); + require(downcasted == value, "SafeCast: value doesn't fit in 112 bits"); + } + + /** + * @dev Returns the downcasted int104 from int256, reverting on + * overflow (when the input is less than smallest int104 or + * greater than largest int104). + * + * Counterpart to Solidity's `int104` operator. + * + * Requirements: + * + * - input must fit into 104 bits + * + * _Available since v4.7._ + */ + function toInt104(int256 value) internal pure returns (int104 downcasted) { + downcasted = int104(value); + require(downcasted == value, "SafeCast: value doesn't fit in 104 bits"); + } + + /** + * @dev Returns the downcasted int96 from int256, reverting on + * overflow (when the input is less than smallest int96 or + * greater than largest int96). + * + * Counterpart to Solidity's `int96` operator. + * + * Requirements: + * + * - input must fit into 96 bits + * + * _Available since v4.7._ + */ + function toInt96(int256 value) internal pure returns (int96 downcasted) { + downcasted = int96(value); + require(downcasted == value, "SafeCast: value doesn't fit in 96 bits"); + } + + /** + * @dev Returns the downcasted int88 from int256, reverting on + * overflow (when the input is less than smallest int88 or + * greater than largest int88). + * + * Counterpart to Solidity's `int88` operator. + * + * Requirements: + * + * - input must fit into 88 bits + * + * _Available since v4.7._ + */ + function toInt88(int256 value) internal pure returns (int88 downcasted) { + downcasted = int88(value); + require(downcasted == value, "SafeCast: value doesn't fit in 88 bits"); + } + + /** + * @dev Returns the downcasted int80 from int256, reverting on + * overflow (when the input is less than smallest int80 or + * greater than largest int80). + * + * Counterpart to Solidity's `int80` operator. + * + * Requirements: + * + * - input must fit into 80 bits + * + * _Available since v4.7._ + */ + function toInt80(int256 value) internal pure returns (int80 downcasted) { + downcasted = int80(value); + require(downcasted == value, "SafeCast: value doesn't fit in 80 bits"); + } + + /** + * @dev Returns the downcasted int72 from int256, reverting on + * overflow (when the input is less than smallest int72 or + * greater than largest int72). + * + * Counterpart to Solidity's `int72` operator. + * + * Requirements: + * + * - input must fit into 72 bits + * + * _Available since v4.7._ + */ + function toInt72(int256 value) internal pure returns (int72 downcasted) { + downcasted = int72(value); + require(downcasted == value, "SafeCast: value doesn't fit in 72 bits"); + } + + /** + * @dev Returns the downcasted int64 from int256, reverting on + * overflow (when the input is less than smallest int64 or + * greater than largest int64). + * + * Counterpart to Solidity's `int64` operator. + * + * Requirements: + * + * - input must fit into 64 bits + * + * _Available since v3.1._ + */ + function toInt64(int256 value) internal pure returns (int64 downcasted) { + downcasted = int64(value); + require(downcasted == value, "SafeCast: value doesn't fit in 64 bits"); + } + + /** + * @dev Returns the downcasted int56 from int256, reverting on + * overflow (when the input is less than smallest int56 or + * greater than largest int56). + * + * Counterpart to Solidity's `int56` operator. + * + * Requirements: + * + * - input must fit into 56 bits + * + * _Available since v4.7._ + */ + function toInt56(int256 value) internal pure returns (int56 downcasted) { + downcasted = int56(value); + require(downcasted == value, "SafeCast: value doesn't fit in 56 bits"); + } + + /** + * @dev Returns the downcasted int48 from int256, reverting on + * overflow (when the input is less than smallest int48 or + * greater than largest int48). + * + * Counterpart to Solidity's `int48` operator. + * + * Requirements: + * + * - input must fit into 48 bits + * + * _Available since v4.7._ + */ + function toInt48(int256 value) internal pure returns (int48 downcasted) { + downcasted = int48(value); + require(downcasted == value, "SafeCast: value doesn't fit in 48 bits"); + } + + /** + * @dev Returns the downcasted int40 from int256, reverting on + * overflow (when the input is less than smallest int40 or + * greater than largest int40). + * + * Counterpart to Solidity's `int40` operator. + * + * Requirements: + * + * - input must fit into 40 bits + * + * _Available since v4.7._ + */ + function toInt40(int256 value) internal pure returns (int40 downcasted) { + downcasted = int40(value); + require(downcasted == value, "SafeCast: value doesn't fit in 40 bits"); + } + + /** + * @dev Returns the downcasted int32 from int256, reverting on + * overflow (when the input is less than smallest int32 or + * greater than largest int32). + * + * Counterpart to Solidity's `int32` operator. + * + * Requirements: + * + * - input must fit into 32 bits + * + * _Available since v3.1._ + */ + function toInt32(int256 value) internal pure returns (int32 downcasted) { + downcasted = int32(value); + require(downcasted == value, "SafeCast: value doesn't fit in 32 bits"); + } + + /** + * @dev Returns the downcasted int24 from int256, reverting on + * overflow (when the input is less than smallest int24 or + * greater than largest int24). + * + * Counterpart to Solidity's `int24` operator. + * + * Requirements: + * + * - input must fit into 24 bits + * + * _Available since v4.7._ + */ + function toInt24(int256 value) internal pure returns (int24 downcasted) { + downcasted = int24(value); + require(downcasted == value, "SafeCast: value doesn't fit in 24 bits"); + } + + /** + * @dev Returns the downcasted int16 from int256, reverting on + * overflow (when the input is less than smallest int16 or + * greater than largest int16). + * + * Counterpart to Solidity's `int16` operator. + * + * Requirements: + * + * - input must fit into 16 bits + * + * _Available since v3.1._ + */ + function toInt16(int256 value) internal pure returns (int16 downcasted) { + downcasted = int16(value); + require(downcasted == value, "SafeCast: value doesn't fit in 16 bits"); + } + + /** + * @dev Returns the downcasted int8 from int256, reverting on + * overflow (when the input is less than smallest int8 or + * greater than largest int8). + * + * Counterpart to Solidity's `int8` operator. + * + * Requirements: + * + * - input must fit into 8 bits + * + * _Available since v3.1._ + */ + function toInt8(int256 value) internal pure returns (int8 downcasted) { + downcasted = int8(value); + require(downcasted == value, "SafeCast: value doesn't fit in 8 bits"); + } + + /** + * @dev Converts an unsigned uint256 into a signed int256. + * + * Requirements: + * + * - input must be less than or equal to maxInt256. + * + * _Available since v3.0._ + */ + function toInt256(uint256 value) internal pure returns (int256) { + // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive + require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); + return int256(value); + } +} + +// src/governance/utils/GovernorSorting.sol + +/** + * @dev Logic for sorting and ranking. + */ +abstract contract GovernorSorting { + // TLDR: This code maintains a sorted array. + + // Because of the array rule below, the actual number of rankings that this contract will be able to track is determined by three things: + // - RANK_LIMIT + // - Woulda Beens (WBs) + // The number of would-be ranked proposals (at the end of the contest if rankings were counted + // without taking out deleted proposals) within the limit that are deleted and do not have other, non-deleted proposals + // with the same amounts of votes/that are tied with them. + // - To Tied or Deleted (TTDs), or to a previous TTD + // The number of times a proposal's newValue goes into an index to tie it; an index that is already tied; an index that was last deleted; + // or an index that wasn't garbage collected because it went to either one of last three cases or an index that also wasn't garbage + // collected because of the same recursive logic, from a ranking that was in the tracked rankings at the time that vote was cast. + // + // The equation to calcluate how many rankings this contract will actually be able to track is: + // # of rankings GovernorSorting can track for a given contest = RANK_LIMIT - WBs - TTDs + // + // With this in mind, it is strongly reccomended to set RANK_LIMIT sufficiently high to create a buffer for + // WBs and TTDs that may occur in your contest. The thing to consider with regard to making it too high is just + // that it is more gas for users on average the higher that RANK_LIMIT is set. + + uint256 public sortingEnabled; // Either 0 for false or 1 for true + uint256 public rankLimit; // RULE: Cannot be 0 + + // RULE: array length can never end lower than it started a transaction, otherwise erroneous ranking can happen + uint256[] public sortedRanks; // value is forVotes counts, has the constraint of no duplicate values. + + constructor(uint256 sortingEnabled_, uint256 rankLimit_) { + sortingEnabled = sortingEnabled_; + rankLimit = rankLimit_; + } + + /** + * @dev See {GovernorCountingSimple-getNumProposalsWithThisManyForVotes}. + */ + function getNumProposalsWithThisManyForVotes(uint256 forVotes) public view virtual returns (uint256 count); + + /** + * @dev Get the sortedRanks array. + */ + function getSortedRanks() public view returns (uint256[] memory sortedRanksArray) { + return sortedRanks; + } + + /** + * @dev Insert a new value into sortedRanks (this function is strictly O(n) or better). + * We know at this point that the idx where it should go is in [0, sortedRanks.length - 1]. + */ + function _insertRank( + uint256 oldValue, + uint256 newValue, + uint256 sortedRanksLength, + uint256[] memory sortedRanksMemVar + ) internal { + // find the index to insert newValue at + uint256 insertingIndex; + for (uint256 index = 0; index < sortedRanksLength; index++) { + // is this value already in the array? (is this a TTD or to a previous TTD?) + if (newValue == sortedRanksMemVar[index]) { + // if so, we don't need to insert anything and the oldValue of this doesn't get cleaned up + return; + } + + if (newValue > sortedRanksMemVar[index]) { + insertingIndex = index; + break; + } + } + + // are we checking for the oldValue? + bool checkForOldValue = (oldValue > 0) && (getNumProposalsWithThisManyForVotes(oldValue) == 0); // if there are props left with oldValue votes, we don't want to remove it + bool haveFoundOldValue = false; + + // DO ANY SHIFTING? - we do not need to if 1. if we're checking for oldValue and 2. oldValue is at insertingIndex - if both of those are the case, then we don't need to update anything besides insertingIndex. + if (!(checkForOldValue && (sortedRanksMemVar[insertingIndex] == oldValue))) { + // DO SHIFTING FROM (insertingIndex, sortedRanksLength)? + // - if insertingIndex == sortedRanksLength - 1, then there's nothing after it to shift down. + // - also if this is the case + oldValue's not at insertingIndex, then don't need to worry about oldValue bc it's not in the array. + if (!(insertingIndex == sortedRanksLength - 1)) { + // SHIFT UNTIL/IF YOU FIND OLD VALUE IN THE RANGE (insertingIndex, sortedRanksLength) - go through and shift everything down until/if we hit oldValue. + // if we hit the limit then the last item will just be dropped). + for (uint256 index = insertingIndex + 1; index < sortedRanksLength; index++) { + sortedRanks[index] = sortedRanksMemVar[index - 1]; + + // STOP ONCE YOU FIND OLD VALUE - if I'm looking for it, once I shift a value into the index oldValue was in (if it's in here) I can stop! + if (checkForOldValue && (sortedRanksMemVar[index] == oldValue)) { + haveFoundOldValue = true; + break; + } + } + } + + // SHIFT INTO NEW INDEX? - if we didn't run into oldValue and we wouldn't be trying to shift into index RANK_LIMIT, then + // go ahead and shift what was in sortedRanksLength - 1 into the next idx + if (!haveFoundOldValue && (sortedRanksLength < rankLimit)) { + sortedRanks.push(sortedRanksMemVar[sortedRanksLength - 1]); + } + } + + // SET INSERTING IDX - now that everything's been accounted for, let's correctly set sortedRanks[insertingIndex] + sortedRanks[insertingIndex] = newValue; + } + + /** + * @dev Keep things sorted as we go. + * Only works for no downvoting bc dealing w what happens when something leaves the top ranks and needs to be *replaced* is an issue that necessitates the sorting of all the others, which we don't want to do bc gas. + * Invariant: Because of no downvoting, and that a vote of 0 is not allowed, newValue will always be greater than oldValue. + */ + function _updateRanks(uint256 oldValue, uint256 newValue) internal { + uint256 sortedRanksLength = sortedRanks.length; // only check state var once to save on gas + uint256[] memory sortedRanksMemVar = sortedRanks; // only check state var once to save on gas + + // FIRST ENTRY? - if this is the first item ever then we just need to put it in idx 0 and that's it + if (sortedRanksLength == 0) { + sortedRanks.push(newValue); + return; + } + + // SMALLER THAN CURRENT SMALLEST VAL? + // this also means that the old value was 0 (or less than the lowest value if sortedRanks.length == RANK_LIMIT and/or the array is full), so all good with regards to oldValue. + if (newValue < sortedRanksMemVar[sortedRanksLength - 1]) { + if (sortedRanksLength == rankLimit) { + // if we've reached the size limit of sortedRanks, then we're done here + return; + } else { + // otherwise, put this value in the index after the current smallest value + sortedRanks.push(newValue); + return; + } + } + + // SO IT'S IN [0, sortedRanksLength - 1]! + // find where it should go and insert it. + _insertRank(oldValue, newValue, sortedRanksLength, sortedRanksMemVar); + } +} + +// src/governance/utils/GovernorMerkleVotes.sol + +// Forked from https://github.com/Anish-Agnihotri/merkle-airdrop-starter/blob/master/contracts/src/MerkleClaimERC20.sol + +/// ============ Imports ============ + + // OZ: MerkleProof + +/// @title GovernorMerkleVotes +abstract contract GovernorMerkleVotes { + /// ============ Immutable storage ============ + + /// @notice Participant inclusion roots + bytes32 public submissionMerkleRoot; + bytes32 public votingMerkleRoot; + + /// ============ Errors ============ + + /// @notice Thrown if address/amount are not part of Merkle tree + error NotInMerkle(); + + /// ============ Constructor ============ + + /// @notice Creates a new GovernorMerkleVotes contract + /// @param _submissionMerkleRoot of participants + /// @param _votingMerkleRoot of participants + constructor(bytes32 _submissionMerkleRoot, bytes32 _votingMerkleRoot) { + submissionMerkleRoot = _submissionMerkleRoot; // Update root + votingMerkleRoot = _votingMerkleRoot; // Update root + } + + /// ============ Functions ============ + + /// @notice Allows checking of proofs for an address + /// @param addressToCheck address of participant + /// @param amount to check that the participant has the correct amount + /// @param proof merkle proof to prove address and amount are in tree + /// @param voting true if this is for a voting proof, false if this is for a submission proof + function checkProof(address addressToCheck, uint256 amount, bytes32[] calldata proof, bool voting) + public + view + returns (bool verified) + { + // Verify merkle proof, or revert if not in tree + bytes32 leaf = keccak256(abi.encodePacked(addressToCheck, amount)); + bool isValidLeaf = voting + ? MerkleProof.verify(proof, votingMerkleRoot, leaf) + : MerkleProof.verify(proof, submissionMerkleRoot, leaf); + if (!isValidLeaf) revert NotInMerkle(); + return true; + } +} + +// lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol + +// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol) + +/** + * @title SafeERC20 + * @dev Wrappers around ERC20 operations that throw on failure (when the token + * contract returns false). Tokens that return no value (and instead revert or + * throw on failure) are also supported, non-reverting calls are assumed to be + * successful. + * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, + * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. + */ +library SafeERC20 { + using Address for address; + + /** + * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, + * non-reverting calls are assumed to be successful. + */ + function safeTransfer(IERC20 token, address to, uint256 value) internal { + _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); + } + + /** + * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the + * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. + */ + function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { + _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); + } + + /** + * @dev Deprecated. This function has issues similar to the ones found in + * {IERC20-approve}, and its usage is discouraged. + * + * Whenever possible, use {safeIncreaseAllowance} and + * {safeDecreaseAllowance} instead. + */ + function safeApprove(IERC20 token, address spender, uint256 value) internal { + // safeApprove should only be called when setting an initial allowance, + // or when resetting it to zero. To increase and decrease it, use + // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' + require( + (value == 0) || (token.allowance(address(this), spender) == 0), + "SafeERC20: approve from non-zero to non-zero allowance" + ); + _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); + } + + /** + * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, + * non-reverting calls are assumed to be successful. + */ + function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { + uint256 oldAllowance = token.allowance(address(this), spender); + _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value)); + } + + /** + * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value, + * non-reverting calls are assumed to be successful. + */ + function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { + unchecked { + uint256 oldAllowance = token.allowance(address(this), spender); + require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); + _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value)); + } + } + + /** + * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, + * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval + * to be set to zero before setting it to a non-zero value, such as USDT. + */ + function forceApprove(IERC20 token, address spender, uint256 value) internal { + bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value); + + if (!_callOptionalReturnBool(token, approvalCall)) { + _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0)); + _callOptionalReturn(token, approvalCall); + } + } + + /** + * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`. + * Revert on invalid signature. + */ + function safePermit( + IERC20Permit token, + address owner, + address spender, + uint256 value, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) internal { + uint256 nonceBefore = token.nonces(owner); + token.permit(owner, spender, value, deadline, v, r, s); + uint256 nonceAfter = token.nonces(owner); + require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); + } + + /** + * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement + * on the return value: the return value is optional (but if data is returned, it must not be false). + * @param token The token targeted by the call. + * @param data The call data (encoded using abi.encode or one of its variants). + */ + function _callOptionalReturn(IERC20 token, bytes memory data) private { + // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since + // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that + // the target address contains contract code and also asserts for success in the low-level call. + + bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); + require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); + } + + /** + * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement + * on the return value: the return value is optional (but if data is returned, it must not be false). + * @param token The token targeted by the call. + * @param data The call data (encoded using abi.encode or one of its variants). + * + * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. + */ + function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { + // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since + // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false + // and not revert is the subcall reverts. + + (bool success, bytes memory returndata) = address(token).call(data); + return + success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token)); + } +} + +// src/governance/Governor.sol + +// Forked from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/governance/Governor.sol + +/** + * @dev Core of the governance system, designed to be extended though various modules. + */ +abstract contract Governor is GovernorSorting, GovernorMerkleVotes { + using SafeCast for uint256; + + enum ContestState { + NotStarted, + Active, + Canceled, + Queued, + Completed + } + + enum Metadatas { + Target, + Safe, + Fields + } + + enum Actions { + Submit, + Vote + } + + struct IntConstructorArgs { + uint256 contestStart; + uint256 votingDelay; + uint256 votingPeriod; + uint256 numAllowedProposalSubmissions; + uint256 maxProposalCount; + uint256 downvotingAllowed; + uint256 sortingEnabled; + uint256 rankLimit; + uint256 percentageToCreator; + uint256 costToPropose; + uint256 costToVote; + uint256 payPerVote; + } + + struct ConstructorArgs { + IntConstructorArgs intConstructorArgs; + address creatorSplitDestination; + address jkLabsSplitDestination; + string metadataFieldsSchema; + } + + struct TargetMetadata { + address targetAddress; + } + + struct SafeMetadata { + address[] signers; + uint256 threshold; + } + + struct FieldsMetadata { + // all of these have max length of MAX_FIELDS_METADATA_LENGTH as enforced in validateProposalData() + address[] addressArray; + string[] stringArray; + uint256[] uintArray; + } + + struct ProposalCore { + address author; + bool exists; + string description; + TargetMetadata targetMetadata; + SafeMetadata safeMetadata; + FieldsMetadata fieldsMetadata; + } + + event JokeraceCreated( + string version, + string name, + string prompt, + address creator, + uint256 contestStart, + uint256 votingDelay, + uint256 votingPeriod + ); + event ProposalCreated(uint256 proposalId, address proposer, string proposalDescription); + event ProposalsDeleted(uint256[] proposalIds); + event ContestCanceled(); + event VoteCast(address indexed voter, uint256 proposalId, uint8 support, uint256 numVotes); + event CreatorPaymentReleased(address to, uint256 amount); + event JkLabsPaymentReleased(address to, uint256 amount); + + uint256 public constant METADATAS_COUNT = uint256(type(Metadatas).max) + 1; + uint256 public constant MAX_FIELDS_METADATA_LENGTH = 10; + uint256 public constant AMOUNT_FOR_SUMBITTER_PROOF = 10000000000000000000; + address public constant JK_LABS_ADDRESS = 0xDc652C746A8F85e18Ce632d97c6118e8a52fa738; // our hot wallet that we operate from if need be, and collect revenue to on most chains + string private constant VERSION = "4.32"; // Private as to not clutter the ABI + + string public name; // The title of the contest + string public prompt; + address public creator; + uint256 public contestStart; // The Unix timestamp that the contest starts at. + uint256 public votingDelay; // Number of seconds that submissions are open. + uint256 public votingPeriod; // Number of seconds that voting is open. + uint256 public numAllowedProposalSubmissions; // The number of proposals that an address who is qualified to propose can submit for this contest. + uint256 public maxProposalCount; // Max number of proposals allowed in this contest. + uint256 public downvotingAllowed; // If downvoting is enabled in this contest. + uint256 public percentageToCreator; + uint256 public costToPropose; + uint256 public costToVote; + uint256 public payPerVote; // If this contest is pay per vote (as opposed to pay per vote transaction). + address public creatorSplitDestination; // Where the creator split of revenue goes. + address public jkLabsSplitDestination; // Where the jk labs split of revenue goes. + string public metadataFieldsSchema; // JSON Schema of what the metadata fields are + + uint256[] public proposalIds; + uint256[] public deletedProposalIds; + mapping(uint256 => bool) public proposalIsDeleted; + bool public canceled; + mapping(uint256 => ProposalCore) public proposals; + mapping(address => uint256) public numSubmissions; + address[] public proposalAuthors; + address[] public addressesThatHaveVoted; + + mapping(address => uint256) public addressTotalVotes; + mapping(address => bool) public addressTotalVotesVerified; + mapping(address => bool) public addressSubmitterVerified; + + error AuthorIsNotSender(address author, address sender); + error ZeroSignersInSafeMetadata(); + error ZeroThresholdInSafeMetadata(); + error AddressFieldMetadataArrayTooLong(); + error StringFieldMetadataArrayTooLong(); + error UintFieldMetadataArrayTooLong(); + error UnexpectedMetadata(Metadatas unexpectedMetadata); + error EmptyProposalDescription(); + + error IncorrectCostSent(uint256 msgValue, uint256 costToVote); + + error AddressNotPermissionedToSubmit(); + error ContestMustBeQueuedToPropose(ContestState currentState); + error ContestMustBeActiveToVote(ContestState currentState); + error SenderSubmissionLimitReached(uint256 numAllowedProposalSubmissions); + error ContestSubmissionLimitReached(uint256 maxProposalCount); + error DuplicateSubmission(uint256 proposalId); + + error CannotVoteOnDeletedProposal(); + error NeedAtLeastOneVoteToVote(); + error CannotVoteLessThanOneVoteInPayPerVote(); + + error NeedToSubmitWithProofFirst(); + error NeedToVoteWithProofFirst(); + + error OnlyCreatorCanDelete(); + error CannotDeleteWhenCompletedOrCanceled(); + + error OnlyJkLabsOrCreatorCanCancel(); + error ContestAlreadyCanceled(); + + error CannotUpdateWhenCompletedOrCanceled(); + + error OnlyJkLabsCanAmend(); + error OnlyCreatorCanAmend(); + + constructor(string memory name_, string memory prompt_, ConstructorArgs memory constructorArgs_) { + name = name_; + prompt = prompt_; + creator = msg.sender; + contestStart = constructorArgs_.intConstructorArgs.contestStart; + votingDelay = constructorArgs_.intConstructorArgs.votingDelay; + votingPeriod = constructorArgs_.intConstructorArgs.votingPeriod; + numAllowedProposalSubmissions = constructorArgs_.intConstructorArgs.numAllowedProposalSubmissions; + maxProposalCount = constructorArgs_.intConstructorArgs.maxProposalCount; + downvotingAllowed = constructorArgs_.intConstructorArgs.downvotingAllowed; + percentageToCreator = constructorArgs_.intConstructorArgs.percentageToCreator; + costToPropose = constructorArgs_.intConstructorArgs.costToPropose; + costToVote = constructorArgs_.intConstructorArgs.costToVote; + payPerVote = constructorArgs_.intConstructorArgs.payPerVote; + creatorSplitDestination = constructorArgs_.creatorSplitDestination; + jkLabsSplitDestination = constructorArgs_.jkLabsSplitDestination; + metadataFieldsSchema = constructorArgs_.metadataFieldsSchema; + + emit JokeraceCreated( + VERSION, + name_, + prompt_, + msg.sender, + constructorArgs_.intConstructorArgs.contestStart, + constructorArgs_.intConstructorArgs.votingDelay, + constructorArgs_.intConstructorArgs.votingPeriod + ); // emit upon creation to be able to easily find jokeraces on a chain + } + + function version() public pure returns (string memory) { + return VERSION; + } + + function hashProposal(ProposalCore memory proposal) public pure returns (uint256) { + return uint256(keccak256(abi.encode(proposal))); + } + + function state() public view returns (ContestState) { + if (canceled) { + return ContestState.Canceled; + } + + if (contestStart >= block.timestamp) { + return ContestState.NotStarted; + } + + if (voteStart() >= block.timestamp) { + return ContestState.Queued; + } + + if (contestDeadline() >= block.timestamp) { + return ContestState.Active; + } + + return ContestState.Completed; + } + + /** + * @dev Return all proposals. + */ + function getAllProposalIds() public view returns (uint256[] memory) { + return proposalIds; + } + + /** + * @dev Return all proposal authors. + */ + function getAllProposalAuthors() public view returns (address[] memory) { + return proposalAuthors; + } + + /** + * @dev Return all addresses that have voted. + */ + function getAllAddressesThatHaveVoted() public view returns (address[] memory) { + return addressesThatHaveVoted; + } + + /** + * @dev Return all deleted proposals. + */ + function getAllDeletedProposalIds() public view returns (uint256[] memory) { + return deletedProposalIds; + } + + /** + * @dev Return all authors of deleted proposals. + */ + function getAllAuthorsOfDeletedProposals() public view returns (address[] memory) { + uint256[] memory deletedProposalIdsMemVar = deletedProposalIds; + address[] memory authorsArray = new address[](deletedProposalIdsMemVar.length); + for (uint256 i = 0; i < deletedProposalIdsMemVar.length; i++) { + authorsArray[i] = proposals[deletedProposalIdsMemVar[i]].author; + } + return authorsArray; + } + + /** + * @dev Timestamp the contest vote begins. Votes open at the end of this block, so it is possible to propose + * during this block. + */ + function voteStart() public view returns (uint256) { + return contestStart + votingDelay; + } + + /** + * @dev Returns if a proposal has been deleted or not. + */ + function contestDeadline() public view returns (uint256) { + return voteStart() + votingPeriod; + } + + /** + * @dev Retrieve proposal data. + */ + function getProposal(uint256 proposalId) public view returns (ProposalCore memory) { + return proposals[proposalId]; + } + + /** + * @dev Remove deleted proposalIds from forVotesToProposalIds and decrement copy counts of the forVotes of proposalIds. + */ + function _multiRmProposalIdFromForVotesMap(uint256[] calldata proposalIds) internal virtual; + + /** + * @dev Register a vote with a given support and voting weight. + * + * Note: Support is generic and can represent various things depending on the voting system used. + */ + function _countVote(uint256 proposalId, address account, uint8 support, uint256 numVotes, uint256 totalVotes) + internal + virtual; + + /** + * @dev Verifies that `account` is permissioned to propose via merkle proof. + */ + function verifyProposer(address account, bytes32[] calldata proof) public { + if (!addressSubmitterVerified[account]) { + if (submissionMerkleRoot == 0) { + // if the submission root is 0, then anyone can submit + return; + } + checkProof(account, AMOUNT_FOR_SUMBITTER_PROOF, proof, false); // will revert with NotInMerkle if not valid + addressSubmitterVerified[account] = true; + } + } + + /** + * @dev Verifies that all of the metadata in the proposal is valid. + */ + function validateProposalData(ProposalCore memory proposal) public view { + if (proposal.author != msg.sender) revert AuthorIsNotSender(proposal.author, msg.sender); + for (uint256 index = 0; index < METADATAS_COUNT; index++) { + Metadatas currentMetadata = Metadatas(index); + if (currentMetadata == Metadatas.Target) { + continue; // nothing to check here since strictly typed to address + } else if (currentMetadata == Metadatas.Safe) { + if (proposal.safeMetadata.signers.length == 0) revert ZeroSignersInSafeMetadata(); + if (proposal.safeMetadata.threshold == 0) revert ZeroThresholdInSafeMetadata(); + } else if (currentMetadata == Metadatas.Fields) { + if (proposal.fieldsMetadata.addressArray.length > MAX_FIELDS_METADATA_LENGTH) { + revert AddressFieldMetadataArrayTooLong(); + } + if (proposal.fieldsMetadata.stringArray.length > MAX_FIELDS_METADATA_LENGTH) { + revert StringFieldMetadataArrayTooLong(); + } + if (proposal.fieldsMetadata.uintArray.length > MAX_FIELDS_METADATA_LENGTH) { + revert UintFieldMetadataArrayTooLong(); + } + } else { + revert UnexpectedMetadata(currentMetadata); + } + } + if (bytes(proposal.description).length == 0) revert EmptyProposalDescription(); + } + + /** + * @dev Determines that the correct amount was sent with the transaction and returns that correct amount. + */ + function _determineCorrectAmountSent(Actions currentAction, uint256 numVotes) internal returns (uint256) { + uint256 actionCost; + if (currentAction == Actions.Submit) { + actionCost = costToPropose; + } else if (currentAction == Actions.Vote) { + if (payPerVote == 1) { + if (numVotes < 1 ether) revert CannotVoteLessThanOneVoteInPayPerVote(); + actionCost = costToVote * (numVotes / 1 ether); // we don't allow <1 vote to be cast in a pay per vote txn bc of this, would underflow + } else { + actionCost = costToVote; + } + } else { + actionCost = 0; + } + + if (msg.value != actionCost) revert IncorrectCostSent(msg.value, actionCost); + return actionCost; + } + + /** + * @dev Distribute the cost of an action to the creator and jk labs based on _percentageToCreator. + */ + function _distributeCost(uint256 actionCost) internal { + if (actionCost > 0) { + // Send cost to creator and jk labs split destinations + uint256 sendingToJkLabs = (msg.value * (100 - percentageToCreator)) / 100; + if (sendingToJkLabs > 0) { + Address.sendValue(payable(jkLabsSplitDestination), sendingToJkLabs); + emit JkLabsPaymentReleased(jkLabsSplitDestination, sendingToJkLabs); + } + + uint256 sendingToCreator = msg.value - sendingToJkLabs; + if (sendingToCreator > 0) { + Address.sendValue(payable(creatorSplitDestination), sendingToCreator); // creator gets the extra wei in the case of rounding + emit CreatorPaymentReleased(creator, sendingToCreator); + } + } + } + + /** + * @dev Create a new proposal. + */ + function propose(ProposalCore calldata proposal, bytes32[] calldata proof) public payable returns (uint256) { + uint256 actionCost = _determineCorrectAmountSent(Actions.Submit, 0); + + verifyProposer(msg.sender, proof); + validateProposalData(proposal); + uint256 proposalId = _castProposal(proposal); + + _distributeCost(actionCost); + + return proposalId; + } + + /** + * @dev Create a new proposal without a proof if you have already proposed with a proof. + */ + function proposeWithoutProof(ProposalCore calldata proposal) public payable returns (uint256) { + uint256 actionCost = _determineCorrectAmountSent(Actions.Submit, 0); + + if (submissionMerkleRoot != 0) { + // if the submission root is 0, then anyone can submit; otherwise, this address needs to have been verified + if (!addressSubmitterVerified[msg.sender]) revert NeedToSubmitWithProofFirst(); + } + validateProposalData(proposal); + uint256 proposalId = _castProposal(proposal); + + _distributeCost(actionCost); + + return proposalId; + } + + function _castProposal(ProposalCore memory proposal) internal returns (uint256) { + if (state() != ContestState.Queued) revert ContestMustBeQueuedToPropose(state()); + if (numSubmissions[msg.sender] == numAllowedProposalSubmissions) { + revert SenderSubmissionLimitReached(numAllowedProposalSubmissions); + } + if ((proposalIds.length - deletedProposalIds.length) == maxProposalCount) { + revert ContestSubmissionLimitReached(maxProposalCount); + } + + uint256 proposalId = hashProposal(proposal); + if (proposals[proposalId].exists) revert DuplicateSubmission(proposalId); + + proposalIds.push(proposalId); + proposals[proposalId] = proposal; + numSubmissions[msg.sender] += 1; + proposalAuthors.push(msg.sender); + + emit ProposalCreated(proposalId, msg.sender, proposal.description); + + return proposalId; + } + + /** + * @dev Delete proposals. + * + * Emits a {IGovernor-ProposalsDeleted} event. + */ + function deleteProposals(uint256[] calldata proposalIdsToDelete) public { + if (msg.sender != creator) revert OnlyCreatorCanDelete(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotDeleteWhenCompletedOrCanceled(); + } + + for (uint256 index = 0; index < proposalIdsToDelete.length; index++) { + uint256 currentProposalId = proposalIdsToDelete[index]; + if (!proposalIsDeleted[currentProposalId]) { + // if this proposal hasn't already been deleted + proposalIsDeleted[currentProposalId] = true; + // this proposal now won't count towards the total number allowed in the contest + // it will still count towards the total number of proposals that the user is allowed to submit though + deletedProposalIds.push(currentProposalId); + } + } + + // we only do sorting if downvoting is disabled and if sorting is enabled + if (downvotingAllowed == 0 && sortingEnabled == 1) { + // remove proposalIds from forVotesToProposalIds (could contain proposalIds that have been deleted before, that's ok though) + _multiRmProposalIdFromForVotesMap(proposalIdsToDelete); + } + + emit ProposalsDeleted(proposalIds); + } + + /** + * @dev Cancels the contest. + * + * Emits a {IGovernor-ContestCanceled} event. + */ + function cancel() public { + if (((msg.sender != creator) && (msg.sender != JK_LABS_ADDRESS))) revert OnlyJkLabsOrCreatorCanCancel(); + + ContestState status = state(); + if (status == ContestState.Canceled) revert ContestAlreadyCanceled(); + + canceled = true; + + emit ContestCanceled(); + } + + /** + * @dev Verifies that `account` is permissioned to vote with `totalVotes` via merkle proof. + */ + function verifyVoter(address account, uint256 totalVotes, bytes32[] calldata proof) public { + if (votingMerkleRoot != 0 && !addressTotalVotesVerified[account]) { + checkProof(account, totalVotes, proof, true); // will revert with NotInMerkle if not valid + addressTotalVotes[account] = totalVotes; + addressTotalVotesVerified[account] = true; + } + } + + /** + * @dev Cast a vote with a merkle proof. + */ + function castVote(uint256 proposalId, uint8 support, uint256 totalVotes, uint256 numVotes, bytes32[] calldata proof) + public + payable + returns (uint256) + { + uint256 actionCost = _determineCorrectAmountSent(Actions.Vote, numVotes); + + if (proposalIsDeleted[proposalId]) revert CannotVoteOnDeletedProposal(); + verifyVoter(msg.sender, totalVotes, proof); + + _distributeCost(actionCost); + + return _castVote(proposalId, msg.sender, support, numVotes); + } + + /** + * @dev Cast a vote without a proof if you have already voted with a proof. + */ + function castVoteWithoutProof(uint256 proposalId, uint8 support, uint256 numVotes) + public + payable + returns (uint256) + { + uint256 actionCost = _determineCorrectAmountSent(Actions.Vote, numVotes); + + if (proposalIsDeleted[proposalId]) revert CannotVoteOnDeletedProposal(); + if (votingMerkleRoot != 0 && !addressTotalVotesVerified[msg.sender]) revert NeedToVoteWithProofFirst(); + + _distributeCost(actionCost); + + return _castVote(proposalId, msg.sender, support, numVotes); + } + + /** + * @dev Internal vote casting mechanism: Check that the vote is pending, that it has not been cast yet, retrieve + * voting weight using addressTotalVotes() and call the {_countVote} internal function. + * + * Emits a {IGovernor-VoteCast} event. + */ + function _castVote(uint256 proposalId, address account, uint8 support, uint256 numVotes) + internal + returns (uint256) + { + if (state() != ContestState.Active) revert ContestMustBeActiveToVote(state()); + if (numVotes == 0) revert NeedAtLeastOneVoteToVote(); + + _countVote(proposalId, account, support, numVotes, addressTotalVotes[account]); + + addressesThatHaveVoted.push(msg.sender); + + emit VoteCast(account, proposalId, support, numVotes); + + return addressTotalVotes[account]; + } + + function setSubmissionMerkleRoot(bytes32 newSubmissionMerkleRoot) public { + if (msg.sender != JK_LABS_ADDRESS) revert OnlyJkLabsCanAmend(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } + submissionMerkleRoot = newSubmissionMerkleRoot; + } + + function setVotingMerkleRoot(bytes32 newVotingMerkleRoot) public { + if (msg.sender != JK_LABS_ADDRESS) revert OnlyJkLabsCanAmend(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } + votingMerkleRoot = newVotingMerkleRoot; + } + + function setCreatorSplitDestination(address newCreatorSplitDestination) public { + if (msg.sender != creator) revert OnlyCreatorCanAmend(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } + creatorSplitDestination = newCreatorSplitDestination; + } +} + +// src/governance/extensions/GovernorCountingSimple.sol + +// Forked from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/governance/extensions/GovernorCountingSimple.sol + +/** + * @dev Extension of {Governor} for simple vote counting. + */ +abstract contract GovernorCountingSimple is Governor { + /** + * @dev Supported vote types. Matches Governor Bravo ordering. + */ + enum VoteType { + For, + Against + } + + struct VoteCounts { + uint256 forVotes; + uint256 againstVotes; + } + + struct ProposalVote { + VoteCounts proposalVoteCounts; + address[] addressesVoted; + mapping(address => VoteCounts) addressVoteCounts; + } + + uint256 public totalVotesCast; // Total votes cast in contest so far + mapping(address => uint256) public addressTotalCastVoteCounts; + mapping(uint256 => ProposalVote) public proposalVotesStructs; + + mapping(uint256 => uint256[]) public forVotesToProposalIds; + + error MoreThanOneProposalWithThisManyVotes(); + error NotEnoughVotesLeft(); + error DownvotingNotEnabled(); + error InvalidVoteType(); + + error RankCannotBeZero(); + error RankIsNotInSortedRanks(); + error IndexHasNotBeenPopulated(); + + /** + * @dev Accessor to the internal vote counts for a given proposal. + */ + function proposalVotes(uint256 proposalId) public view returns (uint256 forVotes, uint256 againstVotes) { + ProposalVote storage proposalvote = proposalVotesStructs[proposalId]; + return (proposalvote.proposalVoteCounts.forVotes, proposalvote.proposalVoteCounts.againstVotes); + } + + /** + * @dev Accessor to how many votes an address has cast for a given proposal. + */ + function proposalAddressVotes(uint256 proposalId, address userAddress) + public + view + returns (uint256 forVotes, uint256 againstVotes) + { + ProposalVote storage proposalvote = proposalVotesStructs[proposalId]; + return ( + proposalvote.addressVoteCounts[userAddress].forVotes, + proposalvote.addressVoteCounts[userAddress].againstVotes + ); + } + + /** + * @dev Accessor to which addresses have cast a vote for a given proposal. + */ + function proposalAddressesHaveVoted(uint256 proposalId) public view returns (address[] memory) { + ProposalVote storage proposalvote = proposalVotesStructs[proposalId]; + return proposalvote.addressesVoted; + } + + /** + * @dev Accessor to how many votes an address has cast total for the contest so far. + */ + function contestAddressTotalVotesCast(address userAddress) public view returns (uint256 userTotalVotesCast) { + return addressTotalCastVoteCounts[userAddress]; + } + + /** + * @dev Accessor to the internal vote counts for a given proposal. + */ + function allProposalTotalVotes() + public + view + returns (uint256[] memory proposalIdsReturn, VoteCounts[] memory proposalVoteCountsArrayReturn) + { + uint256[] memory proposalIdsMemVar = getAllProposalIds(); + VoteCounts[] memory proposalVoteCountsArray = new VoteCounts[](proposalIdsMemVar.length); + for (uint256 i = 0; i < proposalIdsMemVar.length; i++) { + proposalVoteCountsArray[i] = proposalVotesStructs[proposalIdsMemVar[i]].proposalVoteCounts; + } + return (proposalIdsMemVar, proposalVoteCountsArray); + } + + /** + * @dev Get the whole array in `forVotesToProposalIds` for a given `forVotes` amount. + */ + function getProposalsWithThisManyForVotes(uint256 forVotes) + public + view + returns (uint256[] memory proposalsWithThisManyForVotes) + { + return forVotesToProposalIds[forVotes]; + } + + /** + * @dev Get the number of proposals that have `forVotes` number of for votes. + */ + function getNumProposalsWithThisManyForVotes(uint256 forVotes) public view override returns (uint256 count) { + return forVotesToProposalIds[forVotes].length; + } + + /** + * @dev Get the only proposal id with this many for votes. + * NOTE: Should only get called at a point at which you are sure there is only one proposal id + * with a certain number of forVotes (we only use it in the RewardsModule after ties have + * been checked for). + */ + function getOnlyProposalIdWithThisManyForVotes(uint256 forVotes) public view returns (uint256 proposalId) { + if (forVotesToProposalIds[forVotes].length != 1) revert MoreThanOneProposalWithThisManyVotes(); + return forVotesToProposalIds[forVotes][0]; + } + + /** + * @dev Get the idx of sortedRanks considered to hold the queried rank taking deleted proposals into account. + * A rank has to have > 0 votes to be considered valid. + */ + function getRankIndex(uint256 rank) public view returns (uint256 rankIndex) { + if (rank == 0) revert RankCannotBeZero(); + + uint256 sortedRanksLength = sortedRanks.length; // only check state var once to save on gas + uint256[] memory sortedRanksMemVar = sortedRanks; // only check state var once to save on gas + + uint256 counter = 1; + for (uint256 index = 0; index < sortedRanksLength; index++) { + // if this is a value of a deleted proposal or an ungarbage collected oldValue, go forwards without + // incrementing the counter + if (getNumProposalsWithThisManyForVotes(sortedRanksMemVar[index]) == 0) { + continue; + } + // if the counter is at the rank we are looking for, then return with it + if (counter == rank) { + return index; + } + counter++; + } + + // if there's no valid index for that rank in sortedRanks, revert + revert RankIsNotInSortedRanks(); + } + + /** + * @dev Returns whether a given index in sortedRanks is tied or is below a tied rank. + */ + function isOrIsBelowTiedRank(uint256 idx) public view returns (bool atOrBelowTiedRank) { + if (idx > sortedRanks.length - 1) { + // if `idx` hasn't been populated, then it's not a valid index to be checking and something is wrong + revert IndexHasNotBeenPopulated(); + } + + for (uint256 index = 0; index < idx + 1; index++) { + if (getNumProposalsWithThisManyForVotes(sortedRanks[index]) > 1) { + return true; + } + } + return false; + } + + /** + * @dev Remove this proposalId from the list of proposalIds that share its current forVotes + * value in forVotesToProposalIds. + */ + function _rmProposalIdFromForVotesMap(uint256 proposalId, uint256 forVotes) internal { + uint256[] memory forVotesToPropIdMemVar = forVotesToProposalIds[forVotes]; // only check state var once to save on gas + for (uint256 i = 0; i < forVotesToPropIdMemVar.length; i++) { + if (forVotesToPropIdMemVar[i] == proposalId) { + // swap with last item and pop bc we don't care about order. + // makes things cleaner (than just deleting) and saves on gas if there end up being a ton of proposals that pass + // through having a certain number of votes throughout the contest. + forVotesToProposalIds[forVotes][i] = forVotesToPropIdMemVar[forVotesToPropIdMemVar.length - 1]; + forVotesToProposalIds[forVotes].pop(); + break; + } + } + } + + /** + * @dev See {Governor-_multiRmProposalIdFromForVotesMap}. + */ + function _multiRmProposalIdFromForVotesMap(uint256[] calldata proposalIdsToDelete) internal override { + for (uint256 i = 0; i < proposalIdsToDelete.length; i++) { + uint256 currentProposalId = proposalIdsToDelete[i]; + uint256 currentProposalsForVotes = proposalVotesStructs[currentProposalId].proposalVoteCounts.forVotes; + + // remove this proposalId from the list of proposalIdsToDelete that share its current forVotes + // value in forVotesToProposalIds + _rmProposalIdFromForVotesMap(currentProposalId, currentProposalsForVotes); + } + } + + /** + * @dev See {Governor-_countVote}. In this module, the support follows the `VoteType` enum (from Governor Bravo). + */ + function _countVote(uint256 proposalId, address account, uint8 support, uint256 numVotes, uint256 totalVotes) + internal + override + { + ProposalVote storage proposalvote = proposalVotesStructs[proposalId]; + + if ((votingMerkleRoot != 0) && (numVotes > (totalVotes - addressTotalCastVoteCounts[account]))) { + revert NotEnoughVotesLeft(); + } + + bool firstTimeVoting = ( + proposalvote.addressVoteCounts[account].forVotes == 0 + && proposalvote.addressVoteCounts[account].againstVotes == 0 + ); + + if (support == uint8(VoteType.For)) { + proposalvote.proposalVoteCounts.forVotes += numVotes; + proposalvote.addressVoteCounts[account].forVotes += numVotes; + } else if (support == uint8(VoteType.Against)) { + if (downvotingAllowed != 1) revert DownvotingNotEnabled(); + proposalvote.proposalVoteCounts.againstVotes += numVotes; + proposalvote.addressVoteCounts[account].againstVotes += numVotes; + } else { + revert InvalidVoteType(); + } + + if (firstTimeVoting) { + proposalvote.addressesVoted.push(account); + } + addressTotalCastVoteCounts[account] += numVotes; + totalVotesCast += numVotes; + + // sorting and consequently rewards module compatibility is only available if downvoting is disabled and sorting enabled + if ((downvotingAllowed == 0) && (sortingEnabled == 1)) { + uint256 newForVotes = proposalvote.proposalVoteCounts.forVotes; // only check state var once to save on gas + uint256 oldForVotes = newForVotes - numVotes; + + // update map of forVotes => proposalId[] to be able to go from rank => proposalId. + // if oldForVotes is 0, then this proposal will not already be in this map, so we don't need to rm it + if (oldForVotes > 0) { + _rmProposalIdFromForVotesMap(proposalId, oldForVotes); + } + forVotesToProposalIds[newForVotes].push(proposalId); + + _updateRanks(oldForVotes, newForVotes); + } + } +} + +// src/modules/RewardsModule.sol + +// Forked from OpenZeppelin Contracts (v4.7.0) (finance/PaymentSplitter.sol) + +/** + * @title RewardsModule + * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware + * that the Ether will be split in this way, since it is handled transparently by the contract. + * + * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each + * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim + * an amount proportional to the percentage of total shares they were assigned. The distribution of shares is set at the + * time of contract deployment and can't be updated thereafter. + * + * `RewardsModule` follows a _pull payment_ model. This means that payments are not automatically forwarded to the + * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} + * function. + * + * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and + * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you + * to run tests before sending real value to this contract. + */ +contract RewardsModule { + event PayeeAdded(uint256 ranking, uint256 shares); + event PaymentReleased(address to, uint256 amount); + event ERC20PaymentReleased(IERC20 indexed token, address to, uint256 amount); + event PaymentReceived(address from, uint256 amount); + event RewardWithdrawn(address by, uint256 amount); + event ERC20RewardWithdrawn(IERC20 indexed token, address by, uint256 amount); + + uint256 public totalShares; + uint256 public totalReleased; + + mapping(uint256 => uint256) public shares; // Getter for the amount of shares held by a ranking. + mapping(uint256 => uint256) public released; // Getter for the amount of Ether already released to a ranking. + uint256[] public payees; + string private constant VERSION = "4.32"; // Private as to not clutter the ABI + + mapping(IERC20 => uint256) public erc20TotalReleased; + mapping(IERC20 => mapping(uint256 => uint256)) public erc20Released; + + GovernorCountingSimple public underlyingContest; + address public creator; + bool public paysOutTarget; // If true, pay out target address; if false, pay out proposal author. + + error PayeesSharesLengthMismatch(); + error MustHaveAtLeastOnePayee(); + error TotalSharesCannotBeZero(); + error MustHaveDownvotingDisabled(); + error MustHaveSortingEnabled(); + error ContestMustBeCompleted(); + error PayoutRankCannotBeZero(); + error RankingHasNoShares(); + error AccountNotDueNativePayment(); + error CannotPayOutToZeroAddress(); + error AccountNotDueERC20Payment(); + error OnlyCreatorCanWithdraw(); + error RankingCannotBeZero(); + error SharesCannotBeZero(); + error AccountAlreadyHasShares(); + + /** + * @dev Creates an instance of `RewardsModule` where each ranking in `payees` is assigned the number of shares at + * the matching position in the `shares` array. + * + * All rankings in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no + * duplicates in `payees`. + */ + constructor( + uint256[] memory payees_, + uint256[] memory shares_, + GovernorCountingSimple underlyingContest_, + bool paysOutTarget_ + ) payable { + if (payees_.length != shares_.length) revert PayeesSharesLengthMismatch(); + if (payees_.length == 0) revert MustHaveAtLeastOnePayee(); + + for (uint256 i = 0; i < payees_.length; i++) { + _addPayee(payees_[i], shares_[i]); + } + + if (totalShares == 0) revert TotalSharesCannotBeZero(); + + paysOutTarget = paysOutTarget_; + underlyingContest = underlyingContest_; + creator = msg.sender; + } + + /** + * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully + * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the + * reliability of the events, and not the actual splitting of Ether. + */ + receive() external payable { + emit PaymentReceived(msg.sender, msg.value); + } + + /** + * @dev Version of the rewards module. + */ + function version() public pure returns (string memory) { + return VERSION; + } + + /** + * @dev Getter for list of rankings that will be paid out. + */ + function getPayees() public view returns (uint256[] memory) { + return payees; + } + + /** + * @dev Getter for the underlying contest. + */ + function getUnderlyingContest() public view returns (GovernorCountingSimple) { + return underlyingContest; + } + + /** + * @dev Getter for the amount of payee's releasable Ether. + */ + function releasable(uint256 ranking) public view returns (uint256) { + uint256 totalReceived = address(this).balance + totalReleased; + return _pendingPayment(ranking, totalReceived, released[ranking]); + } + + /** + * @dev Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an + * IERC20 contract. + */ + function releasable(IERC20 token, uint256 ranking) public view returns (uint256) { + uint256 totalReceived = token.balanceOf(address(this)) + erc20TotalReleased[token]; + return _pendingPayment(ranking, totalReceived, erc20Released[token][ranking]); + } + + /** + * @dev Run release checks. + */ + function runReleaseChecks(uint256 ranking) public view { + if (underlyingContest.downvotingAllowed() != 0) revert MustHaveDownvotingDisabled(); + if (underlyingContest.sortingEnabled() != 1) revert MustHaveSortingEnabled(); + if (underlyingContest.state() != Governor.ContestState.Completed) revert ContestMustBeCompleted(); + if (ranking == 0) revert PayoutRankCannotBeZero(); + if (shares[ranking] == 0) revert RankingHasNoShares(); + } + + /** + * @dev Return address to pay out for a given ranking. + */ + function getAddressToPayOut(uint256 ranking) public view returns (address) { + address addressToPayOut; + uint256 determinedRankingIdxInSortedRanks = underlyingContest.getRankIndex(ranking); + + // if the ranking that we land on is tied or it's below a tied ranking, send to creator + if (underlyingContest.isOrIsBelowTiedRank(determinedRankingIdxInSortedRanks)) { + addressToPayOut = creator; + } + // otherwise, determine proposal at ranking and pay out according to that + else { + uint256 rankValue = underlyingContest.sortedRanks(determinedRankingIdxInSortedRanks); + Governor.ProposalCore memory rankingProposal = underlyingContest.getProposal( + underlyingContest.getOnlyProposalIdWithThisManyForVotes(rankValue) // if no ties there should only be one + ); + addressToPayOut = paysOutTarget ? rankingProposal.targetMetadata.targetAddress : rankingProposal.author; + } + + return addressToPayOut; + } + + /** + * @dev Triggers a transfer to `ranking` of the amount of Ether they are owed, according to their percentage of the + * total shares and their previous withdrawals. + */ + function release(uint256 ranking) public { + runReleaseChecks(ranking); + + uint256 payment = releasable(ranking); + + if (payment == 0) revert AccountNotDueNativePayment(); + + // totalReleased is the sum of all values in released. + // If "totalReleased += payment" does not overflow, then "released[account] += payment" cannot overflow. + totalReleased += payment; + unchecked { + released[ranking] += payment; + } + + address payable addressToPayOut = payable(getAddressToPayOut(ranking)); + + if (addressToPayOut == address(0)) revert CannotPayOutToZeroAddress(); + + emit PaymentReleased(addressToPayOut, payment); + Address.sendValue(addressToPayOut, payment); + } + + /** + * @dev Triggers a transfer to `ranking` of the amount of `token` tokens they are owed, according to their + * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 + * contract. + */ + function release(IERC20 token, uint256 ranking) public { + runReleaseChecks(ranking); + + uint256 payment = releasable(token, ranking); + + if (payment == 0) revert AccountNotDueERC20Payment(); + + // erc20TotalReleased[token] is the sum of all values in erc20Released[token]. + // If "erc20TotalReleased[token] += payment" does not overflow, then "erc20Released[token][account] += payment" cannot overflow. + erc20TotalReleased[token] += payment; + unchecked { + erc20Released[token][ranking] += payment; + } + + address payable addressToPayOut = payable(getAddressToPayOut(ranking)); + + if (addressToPayOut == address(0)) revert CannotPayOutToZeroAddress(); + + emit ERC20PaymentReleased(token, addressToPayOut, payment); + SafeERC20.safeTransfer(token, addressToPayOut, payment); + } + + function withdrawRewards() public { + if (msg.sender != creator) revert OnlyCreatorCanWithdraw(); + + emit RewardWithdrawn(creator, address(this).balance); + Address.sendValue(payable(creator), address(this).balance); + } + + function withdrawRewards(IERC20 token) public { + if (msg.sender != creator) revert OnlyCreatorCanWithdraw(); + + emit ERC20RewardWithdrawn(token, creator, token.balanceOf(address(this))); + SafeERC20.safeTransfer(token, payable(creator), token.balanceOf(address(this))); + } + + /** + * @dev internal logic for computing the pending payment of a `ranking` given the token historical balances and + * already released amounts. + */ + function _pendingPayment(uint256 ranking, uint256 totalReceived, uint256 alreadyReleased) + private + view + returns (uint256) + { + return (totalReceived * shares[ranking]) / totalShares - alreadyReleased; + } + + /** + * @dev Add a new payee to the contract. + * @param ranking The ranking of the payee to add. + * @param shares_ The number of shares owned by the payee. + */ + function _addPayee(uint256 ranking, uint256 shares_) private { + if (ranking == 0) revert RankingCannotBeZero(); + if (shares_ == 0) revert SharesCannotBeZero(); + if (shares[ranking] != 0) revert AccountAlreadyHasShares(); + + payees.push(ranking); + shares[ranking] = shares_; + totalShares = totalShares + shares_; + emit PayeeAdded(ranking, shares_); + } +} + diff --git a/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.sol/RewardsModule.json b/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.sol/RewardsModule.json index d1fbd33f0..41ed4264d 100644 --- a/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.sol/RewardsModule.json +++ b/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.sol/RewardsModule.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"payees_","type":"uint256[]","internalType":"uint256[]"},{"name":"shares_","type":"uint256[]","internalType":"uint256[]"},{"name":"underlyingContest_","type":"address","internalType":"contract GovernorCountingSimple"},{"name":"paysOutTarget_","type":"bool","internalType":"bool"}],"stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"creator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"erc20Released","inputs":[{"name":"","type":"address","internalType":"contract IERC20"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"erc20TotalReleased","inputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAddressToPayOut","inputs":[{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getPayees","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getUnderlyingContest","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract GovernorCountingSimple"}],"stateMutability":"view"},{"type":"function","name":"payees","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"paysOutTarget","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"releasable","inputs":[{"name":"token","type":"address","internalType":"contract IERC20"},{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"releasable","inputs":[{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"release","inputs":[{"name":"token","type":"address","internalType":"contract IERC20"},{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"release","inputs":[{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"released","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"runReleaseChecks","inputs":[{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"shares","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalReleased","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalShares","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"underlyingContest","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract GovernorCountingSimple"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"withdrawRewards","inputs":[{"name":"token","type":"address","internalType":"contract IERC20"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawRewards","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ERC20PaymentReleased","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"contract IERC20"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ERC20RewardWithdrawn","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"contract IERC20"},{"name":"by","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PayeeAdded","inputs":[{"name":"ranking","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PaymentReceived","inputs":[{"name":"from","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PaymentReleased","inputs":[{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RewardWithdrawn","inputs":[{"name":"by","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AccountAlreadyHasShares","inputs":[]},{"type":"error","name":"AccountNotDueERC20Payment","inputs":[]},{"type":"error","name":"AccountNotDueNativePayment","inputs":[]},{"type":"error","name":"CannotPayOutToZeroAddress","inputs":[]},{"type":"error","name":"ContestMustBeCompleted","inputs":[]},{"type":"error","name":"MustHaveAtLeastOnePayee","inputs":[]},{"type":"error","name":"MustHaveDownvotingDisabled","inputs":[]},{"type":"error","name":"MustHaveSortingEnabled","inputs":[]},{"type":"error","name":"OnlyCreatorCanWithdraw","inputs":[]},{"type":"error","name":"PayeesSharesLengthMismatch","inputs":[]},{"type":"error","name":"PayoutRankCannotBeZero","inputs":[]},{"type":"error","name":"RankingCannotBeZero","inputs":[]},{"type":"error","name":"RankingHasNoShares","inputs":[]},{"type":"error","name":"SharesCannotBeZero","inputs":[]},{"type":"error","name":"TotalSharesCannotBeZero","inputs":[]}],"bytecode":{"object":"0x608060405260405162001d1538038062001d15833981016040819052620000269162000301565b825184511462000049576040516324e23b4160e01b815260040160405180910390fd5b83516000036200006c57604051634c87c40160e01b815260040160405180910390fd5b60005b8451811015620000d857620000c3858281518110620000925762000092620003a6565b6020026020010151858381518110620000af57620000af620003a6565b60200260200101516200014660201b60201c565b80620000cf81620003d2565b9150506200006f565b50600054600003620000fd576040516306db759b60e21b815260040160405180910390fd5b60088054600780546001600160a01b039095166001600160a01b0319958616179055911515600160a01b02929092166001600160a81b03199091161733179055506200040a9050565b81600003620001685760405163d6fbfe2560e01b815260040160405180910390fd5b806000036200018a57604051633122bc0960e21b815260040160405180910390fd5b60008281526002602052604090205415620001b857604051637b4f7fb560e01b815260040160405180910390fd5b60048054600181019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0182905560008281526002602052604081208290555462000207908290620003ee565b60005560408051838152602081018390527f78bc0e219b874bf2620f7316737ec16d4bda1bb7136961e4dcb5ff0dc031cee4910160405180910390a15050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200026f57600080fd5b815160206001600160401b03808311156200028e576200028e62000247565b8260051b604051601f19603f83011681018181108482111715620002b657620002b662000247565b604052938452858101830193838101925087851115620002d557600080fd5b83870191505b84821015620002f657815183529183019190830190620002db565b979650505050505050565b600080600080608085870312156200031857600080fd5b84516001600160401b03808211156200033057600080fd5b6200033e888389016200025d565b955060208701519150808211156200035557600080fd5b5062000364878288016200025d565b604087015190945090506001600160a01b03811681146200038457600080fd5b606086015190925080151581146200039b57600080fd5b939692955090935050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201620003e757620003e7620003bc565b5060010190565b80820180821115620004045762000404620003bc565b92915050565b6118fb806200041a6000396000f3fe60806040526004361061012e5760003560e01c806354fd4d50116100ab578063a94d373b1161006f578063a94d373b146103cb578063c7104046146103f8578063c7b8981c14610418578063e33b7de31461042d578063e4bf01a814610443578063f3f44fb71461046357600080fd5b806354fd4d501461030d57806357a858fc1461034057806363037b0c1461036d578063828ce44b1461038d57806396f7ff6e146103ab57600080fd5b80633375bbdc116100f25780633375bbdc1461025257806337bdc99b1461027f5780633a98ef391461029f57806342d86693146102b55780634b945338146102d557600080fd5b806302d05d3f146101725780630357371d146101af5780631e5b4634146101d15780632081d6311461020257806327f381131461023057600080fd5b3661016d57604080513381523460208201527f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be770910160405180910390a1005b600080fd5b34801561017e57600080fd5b50600854610192906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101bb57600080fd5b506101cf6101ca366004611216565b610483565b005b3480156101dd57600080fd5b506008546101f290600160a01b900460ff1681565b60405190151581526020016101a6565b34801561020e57600080fd5b5061022261021d366004611216565b61059a565b6040519081526020016101a6565b34801561023c57600080fd5b5061024561065c565b6040516101a69190611242565b34801561025e57600080fd5b5061022261026d366004611286565b60056020526000908152604090205481565b34801561028b57600080fd5b506101cf61029a3660046112a3565b6106b4565b3480156102ab57600080fd5b5061022260005481565b3480156102c157600080fd5b506101cf6102d0366004611286565b610799565b3480156102e157600080fd5b506102226102f0366004611216565b600660209081526000928352604080842090915290825290205481565b34801561031957600080fd5b506040805180820182526004815263342e333160e01b602082015290516101a691906112e0565b34801561034c57600080fd5b5061022261035b3660046112a3565b60026020526000908152604090205481565b34801561037957600080fd5b506102226103883660046112a3565b6108f6565b34801561039957600080fd5b506007546001600160a01b0316610192565b3480156103b757600080fd5b506101926103c63660046112a3565b610917565b3480156103d757600080fd5b506102226103e63660046112a3565b60036020526000908152604090205481565b34801561040457600080fd5b506101cf6104133660046112a3565b610b89565b34801561042457600080fd5b506101cf610d9f565b34801561043957600080fd5b5061022260015481565b34801561044f57600080fd5b5061022261045e3660046112a3565b610e27565b34801561046f57600080fd5b50600754610192906001600160a01b031681565b61048c81610b89565b6000610498838361059a565b9050806000036104bb57604051635fe559bd60e01b815260040160405180910390fd5b6001600160a01b038316600090815260056020526040812080548392906104e3908490611329565b90915550506001600160a01b0383166000908152600660209081526040808320858452909152812080548301905561051a83610917565b90506001600160a01b038116610543576040516346a3c2f960e01b815260040160405180910390fd5b604080516001600160a01b038381168252602082018590528616917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a2610594848284610e5f565b50505050565b6001600160a01b0382166000818152600560205260408082205490516370a0823160e01b8152306004820152919283926370a0823190602401602060405180830381865afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610614919061133c565b61061e9190611329565b6001600160a01b03851660009081526006602090815260408083208784529091529020549091506106529084908390610eb1565b9150505b92915050565b606060048054806020026020016040519081016040528092919081815260200182805480156106aa57602002820191906000526020600020905b815481526020019060010190808311610696575b5050505050905090565b6106bd81610b89565b60006106c882610e27565b9050806000036106eb57604051631d1514e960e21b815260040160405180910390fd5b80600160008282546106fd9190611329565b9091555050600082815260036020526040812080548301905561071f83610917565b90506001600160a01b038116610748576040516346a3c2f960e01b815260040160405180910390fd5b604080516001600160a01b0383168152602081018490527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a16107948183610eeb565b505050565b6008546001600160a01b031633146107c457604051631eab0da960e01b815260040160405180910390fd5b6008546040516370a0823160e01b81523060048201526001600160a01b03838116927f6e5fc1cbd1629d9837bd657d23cf585bbc4e9127184972606cc4c0dd406f75729291169083906370a0823190602401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133c565b604080516001600160a01b03909316835260208301919091520160405180910390a26008546040516370a0823160e01b81523060048201526108f39183916001600160a01b03918216918316906370a0823190602401602060405180830381865afa1580156108ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee919061133c565b610e5f565b50565b6004818154811061090657600080fd5b600091825260209091200154905081565b600754604051630b8e20fb60e31b815260048101839052600091829182916001600160a01b031690635c7107d890602401602060405180830381865afa158015610965573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610989919061133c565b60075460405163245d1de360e21b8152600481018390529192506001600160a01b031690639174778c90602401602060405180830381865afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f7919061136a565b15610a0f576008546001600160a01b03169150610b82565b60075460405163325cc6d960e01b8152600481018390526000916001600160a01b03169063325cc6d990602401602060405180830381865afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d919061133c565b60075460405163b66d1da360e01b8152600481018390529192506000916001600160a01b039091169063c7f758a890829063b66d1da390602401602060405180830381865afa158015610ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af8919061133c565b6040518263ffffffff1660e01b8152600401610b1691815260200190565b600060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b5b919081019061173d565b600854909150600160a01b900460ff16610b76578051610b7d565b6060810151515b935050505b5092915050565b600760009054906101000a90046001600160a01b03166001600160a01b03166360506ff66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c00919061133c565b15610c1e5760405163018e187760e61b815260040160405180910390fd5b600760009054906101000a90046001600160a01b03166001600160a01b031663366ecf5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c95919061133c565b600114610cb557604051630fcdfffd60e41b815260040160405180910390fd5b6007546040805163c19d93fb60e01b815290516004926001600160a01b03169163c19d93fb918185019160209190819003860181865afa158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d21919061183c565b6004811115610d3257610d32611826565b14610d5057604051639c2d4c7960e01b815260040160405180910390fd5b80600003610d715760405163f9668e2960e01b815260040160405180910390fd5b60008181526002602052604081205490036108f357604051632534bdfb60e11b815260040160405180910390fd5b6008546001600160a01b03163314610dca57604051631eab0da960e01b815260040160405180910390fd5b600854604080516001600160a01b0390921682524760208301527f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337910160405180910390a1600854610e25906001600160a01b031647610eeb565b565b60008060015447610e389190611329565b9050610e5883826003600087815260200190815260200160002054610eb1565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610794908490611009565b6000805484825260026020526040822054839190610ecf908661185d565b610ed99190611874565b610ee39190611896565b949350505050565b80471015610f405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8d576040519150601f19603f3d011682016040523d82523d6000602084013e610f92565b606091505b50509050806107945760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610f37565b600061105e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110de9092919063ffffffff16565b905080516000148061107f57508080602001905181019061107f919061136a565b6107945760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610f37565b6060610ee3848460008585600080866001600160a01b0316858760405161110591906118a9565b60006040518083038185875af1925050503d8060008114611142576040519150601f19603f3d011682016040523d82523d6000602084013e611147565b606091505b509150915061115887838387611163565b979650505050505050565b606083156111d25782516000036111cb576001600160a01b0385163b6111cb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f37565b5081610ee3565b610ee383838151156111e75781518083602001fd5b8060405162461bcd60e51b8152600401610f3791906112e0565b6001600160a01b03811681146108f357600080fd5b6000806040838503121561122957600080fd5b823561123481611201565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b8181101561127a5783518352928401929184019160010161125e565b50909695505050505050565b60006020828403121561129857600080fd5b8135610e5881611201565b6000602082840312156112b557600080fd5b5035919050565b60005b838110156112d75781810151838201526020016112bf565b50506000910152565b60208152600082518060208401526112ff8160408501602087016112bc565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561065657610656611313565b60006020828403121561134e57600080fd5b5051919050565b8051801515811461136557600080fd5b919050565b60006020828403121561137c57600080fd5b610e5882611355565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156113be576113be611385565b60405290565b60405160c0810167ffffffffffffffff811182821017156113be576113be611385565b604051601f8201601f1916810167ffffffffffffffff8111828210171561141057611410611385565b604052919050565b805161136581611201565b600082601f83011261143457600080fd5b815167ffffffffffffffff81111561144e5761144e611385565b611461601f8201601f19166020016113e7565b81815284602083860101111561147657600080fd5b610ee38260208301602087016112bc565b60006020828403121561149957600080fd5b6040516020810181811067ffffffffffffffff821117156114bc576114bc611385565b806040525080915082516114cf81611201565b905292915050565b600067ffffffffffffffff8211156114f1576114f1611385565b5060051b60200190565b600082601f83011261150c57600080fd5b8151602061152161151c836114d7565b6113e7565b82815260059290921b8401810191818101908684111561154057600080fd5b8286015b8481101561156457805161155781611201565b8352918301918301611544565b509695505050505050565b60006040828403121561158157600080fd5b6040516040810167ffffffffffffffff82821081831117156115a5576115a5611385565b8160405282935084519150808211156115bd57600080fd5b506115ca858286016114fb565b825250602083015160208201525092915050565b600082601f8301126115ef57600080fd5b815160206115ff61151c836114d7565b82815260059290921b8401810191818101908684111561161e57600080fd5b8286015b848110156115645780518352918301918301611622565b60006060828403121561164b57600080fd5b61165361139b565b9050815167ffffffffffffffff8082111561166d57600080fd5b611679858386016114fb565b835260209150818401518181111561169057600080fd5b8401601f810186136116a157600080fd5b80516116af61151c826114d7565b81815260059190911b820184019084810190888311156116ce57600080fd5b8584015b83811015611706578051868111156116ea5760008081fd5b6116f88b8983890101611423565b8452509186019186016116d2565b50808688015250505050604084015191508082111561172457600080fd5b50611731848285016115de565b60408301525092915050565b60006020828403121561174f57600080fd5b815167ffffffffffffffff8082111561176757600080fd5b9083019060c0828603121561177b57600080fd5b6117836113c4565b61178c83611418565b815261179a60208401611355565b60208201526040830151828111156117b157600080fd5b6117bd87828601611423565b6040830152506117d08660608501611487565b60608201526080830151828111156117e757600080fd5b6117f38782860161156f565b60808301525060a08301518281111561180b57600080fd5b61181787828601611639565b60a08301525095945050505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561184e57600080fd5b815160058110610e5857600080fd5b808202811582820484141761065657610656611313565b60008261189157634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561065657610656611313565b600082516118bb8184602087016112bc565b919091019291505056fea2646970667358221220806a8331cfb6ce0b97b1330ce119c45af286023dc946b29948d6871a79341a7f64736f6c63430008130033","sourceMap":"1529:9544:41:-:0;;;3550:628;;;;;;;;;;;;;;;;;;:::i;:::-;3756:7;:14;3738:7;:14;:32;3734:73;;3779:28;;-1:-1:-1;;;3779:28:41;;;;;;;;;;;3734:73;3821:7;:14;3839:1;3821:19;3817:57;;3849:25;;-1:-1:-1;;;3849:25:41;;;;;;;;;;;3817:57;3890:9;3885:103;3909:7;:14;3905:1;:18;3885:103;;;3944:33;3954:7;3962:1;3954:10;;;;;;;;:::i;:::-;;;;;;;3966:7;3974:1;3966:10;;;;;;;;:::i;:::-;;;;;;;3944:9;;;:33;;:::i;:::-;3925:3;;;;:::i;:::-;;;;3885:103;;;;4002:11;;4017:1;4002:16;3998:54;;4027:25;;-1:-1:-1;;;4027:25:41;;;;;;;;;;;3998:54;4063:13;:30;;4103:17;:38;;-1:-1:-1;;;;;4103:38:41;;;-1:-1:-1;;;;;;4103:38:41;;;;;;4063:30;;;-1:-1:-1;;;4063:30:41;4151:20;;;;-1:-1:-1;;;;;;4151:20:41;;;;4161:10;4151:20;;;-1:-1:-1;1529:9544:41;;-1:-1:-1;1529:9544:41;10670:401;10745:7;10756:1;10745:12;10741:46;;10766:21;;-1:-1:-1;;;10766:21:41;;;;;;;;;;;10741:46;10801:7;10812:1;10801:12;10797:45;;10822:20;;-1:-1:-1;;;10822:20:41;;;;;;;;;;;10797:45;10856:15;;;;:6;:15;;;;;;:20;10852:58;;10885:25;;-1:-1:-1;;;10885:25:41;;;;;;;;;;;10852:58;10921:6;:20;;;;;;;;;;;;;-1:-1:-1;10951:15:41;;;:6;10921:20;10951:15;;;;:25;;;11000:11;:21;;10969:7;;11000:21;:::i;:::-;10986:11;:35;11036:28;;;2739:25:44;;;2795:2;2780:18;;2773:34;;;11036:28:41;;2712:18:44;11036:28:41;;;;;;;10670:401;;:::o;14:127:44:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:899;211:5;264:3;257:4;249:6;245:17;241:27;231:55;;282:1;279;272:12;231:55;305:13;;337:4;-1:-1:-1;;;;;390:10:44;;;387:36;;;403:18;;:::i;:::-;449:2;446:1;442:10;481:2;475:9;544:2;540:7;535:2;531;527:11;523:25;515:6;511:38;599:6;587:10;584:22;579:2;567:10;564:18;561:46;558:72;;;610:18;;:::i;:::-;646:2;639:22;696:18;;;772:15;;;768:24;;;730:15;;;;-1:-1:-1;804:15:44;;;801:35;;;832:1;829;822:12;801:35;868:2;860:6;856:15;845:26;;880:135;896:6;891:3;888:15;880:135;;;962:10;;950:23;;993:12;;;;913;;;;880:135;;;1033:6;146:899;-1:-1:-1;;;;;;;146:899:44:o;1050:976::-;1226:6;1234;1242;1250;1303:3;1291:9;1282:7;1278:23;1274:33;1271:53;;;1320:1;1317;1310:12;1271:53;1347:16;;-1:-1:-1;;;;;1412:14:44;;;1409:34;;;1439:1;1436;1429:12;1409:34;1462:72;1526:7;1517:6;1506:9;1502:22;1462:72;:::i;:::-;1452:82;;1580:2;1569:9;1565:18;1559:25;1543:41;;1609:2;1599:8;1596:16;1593:36;;;1625:1;1622;1615:12;1593:36;;1648:74;1714:7;1703:8;1692:9;1688:24;1648:74;:::i;:::-;1765:2;1750:18;;1744:25;1638:84;;-1:-1:-1;1744:25:44;-1:-1:-1;;;;;;1798:31:44;;1788:42;;1778:70;;1844:1;1841;1834:12;1778:70;1917:2;1902:18;;1896:25;1867:5;;-1:-1:-1;1959:15:44;;1952:23;1940:36;;1930:64;;1990:1;1987;1980:12;1930:64;1050:976;;;;-1:-1:-1;1050:976:44;;-1:-1:-1;;1050:976:44:o;2031:127::-;2092:10;2087:3;2083:20;2080:1;2073:31;2123:4;2120:1;2113:15;2147:4;2144:1;2137:15;2163:127;2224:10;2219:3;2215:20;2212:1;2205:31;2255:4;2252:1;2245:15;2279:4;2276:1;2269:15;2295:135;2334:3;2355:17;;;2352:43;;2375:18;;:::i;:::-;-1:-1:-1;2422:1:44;2411:13;;2295:135::o;2435:125::-;2500:9;;;2521:10;;;2518:36;;;2534:18;;:::i;:::-;2435:125;;;;:::o;2565:248::-;1529:9544:41;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061012e5760003560e01c806354fd4d50116100ab578063a94d373b1161006f578063a94d373b146103cb578063c7104046146103f8578063c7b8981c14610418578063e33b7de31461042d578063e4bf01a814610443578063f3f44fb71461046357600080fd5b806354fd4d501461030d57806357a858fc1461034057806363037b0c1461036d578063828ce44b1461038d57806396f7ff6e146103ab57600080fd5b80633375bbdc116100f25780633375bbdc1461025257806337bdc99b1461027f5780633a98ef391461029f57806342d86693146102b55780634b945338146102d557600080fd5b806302d05d3f146101725780630357371d146101af5780631e5b4634146101d15780632081d6311461020257806327f381131461023057600080fd5b3661016d57604080513381523460208201527f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be770910160405180910390a1005b600080fd5b34801561017e57600080fd5b50600854610192906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101bb57600080fd5b506101cf6101ca366004611216565b610483565b005b3480156101dd57600080fd5b506008546101f290600160a01b900460ff1681565b60405190151581526020016101a6565b34801561020e57600080fd5b5061022261021d366004611216565b61059a565b6040519081526020016101a6565b34801561023c57600080fd5b5061024561065c565b6040516101a69190611242565b34801561025e57600080fd5b5061022261026d366004611286565b60056020526000908152604090205481565b34801561028b57600080fd5b506101cf61029a3660046112a3565b6106b4565b3480156102ab57600080fd5b5061022260005481565b3480156102c157600080fd5b506101cf6102d0366004611286565b610799565b3480156102e157600080fd5b506102226102f0366004611216565b600660209081526000928352604080842090915290825290205481565b34801561031957600080fd5b506040805180820182526004815263342e333160e01b602082015290516101a691906112e0565b34801561034c57600080fd5b5061022261035b3660046112a3565b60026020526000908152604090205481565b34801561037957600080fd5b506102226103883660046112a3565b6108f6565b34801561039957600080fd5b506007546001600160a01b0316610192565b3480156103b757600080fd5b506101926103c63660046112a3565b610917565b3480156103d757600080fd5b506102226103e63660046112a3565b60036020526000908152604090205481565b34801561040457600080fd5b506101cf6104133660046112a3565b610b89565b34801561042457600080fd5b506101cf610d9f565b34801561043957600080fd5b5061022260015481565b34801561044f57600080fd5b5061022261045e3660046112a3565b610e27565b34801561046f57600080fd5b50600754610192906001600160a01b031681565b61048c81610b89565b6000610498838361059a565b9050806000036104bb57604051635fe559bd60e01b815260040160405180910390fd5b6001600160a01b038316600090815260056020526040812080548392906104e3908490611329565b90915550506001600160a01b0383166000908152600660209081526040808320858452909152812080548301905561051a83610917565b90506001600160a01b038116610543576040516346a3c2f960e01b815260040160405180910390fd5b604080516001600160a01b038381168252602082018590528616917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a2610594848284610e5f565b50505050565b6001600160a01b0382166000818152600560205260408082205490516370a0823160e01b8152306004820152919283926370a0823190602401602060405180830381865afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610614919061133c565b61061e9190611329565b6001600160a01b03851660009081526006602090815260408083208784529091529020549091506106529084908390610eb1565b9150505b92915050565b606060048054806020026020016040519081016040528092919081815260200182805480156106aa57602002820191906000526020600020905b815481526020019060010190808311610696575b5050505050905090565b6106bd81610b89565b60006106c882610e27565b9050806000036106eb57604051631d1514e960e21b815260040160405180910390fd5b80600160008282546106fd9190611329565b9091555050600082815260036020526040812080548301905561071f83610917565b90506001600160a01b038116610748576040516346a3c2f960e01b815260040160405180910390fd5b604080516001600160a01b0383168152602081018490527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a16107948183610eeb565b505050565b6008546001600160a01b031633146107c457604051631eab0da960e01b815260040160405180910390fd5b6008546040516370a0823160e01b81523060048201526001600160a01b03838116927f6e5fc1cbd1629d9837bd657d23cf585bbc4e9127184972606cc4c0dd406f75729291169083906370a0823190602401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133c565b604080516001600160a01b03909316835260208301919091520160405180910390a26008546040516370a0823160e01b81523060048201526108f39183916001600160a01b03918216918316906370a0823190602401602060405180830381865afa1580156108ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee919061133c565b610e5f565b50565b6004818154811061090657600080fd5b600091825260209091200154905081565b600754604051630b8e20fb60e31b815260048101839052600091829182916001600160a01b031690635c7107d890602401602060405180830381865afa158015610965573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610989919061133c565b60075460405163245d1de360e21b8152600481018390529192506001600160a01b031690639174778c90602401602060405180830381865afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f7919061136a565b15610a0f576008546001600160a01b03169150610b82565b60075460405163325cc6d960e01b8152600481018390526000916001600160a01b03169063325cc6d990602401602060405180830381865afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d919061133c565b60075460405163b66d1da360e01b8152600481018390529192506000916001600160a01b039091169063c7f758a890829063b66d1da390602401602060405180830381865afa158015610ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af8919061133c565b6040518263ffffffff1660e01b8152600401610b1691815260200190565b600060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b5b919081019061173d565b600854909150600160a01b900460ff16610b76578051610b7d565b6060810151515b935050505b5092915050565b600760009054906101000a90046001600160a01b03166001600160a01b03166360506ff66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c00919061133c565b15610c1e5760405163018e187760e61b815260040160405180910390fd5b600760009054906101000a90046001600160a01b03166001600160a01b031663366ecf5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c95919061133c565b600114610cb557604051630fcdfffd60e41b815260040160405180910390fd5b6007546040805163c19d93fb60e01b815290516004926001600160a01b03169163c19d93fb918185019160209190819003860181865afa158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d21919061183c565b6004811115610d3257610d32611826565b14610d5057604051639c2d4c7960e01b815260040160405180910390fd5b80600003610d715760405163f9668e2960e01b815260040160405180910390fd5b60008181526002602052604081205490036108f357604051632534bdfb60e11b815260040160405180910390fd5b6008546001600160a01b03163314610dca57604051631eab0da960e01b815260040160405180910390fd5b600854604080516001600160a01b0390921682524760208301527f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337910160405180910390a1600854610e25906001600160a01b031647610eeb565b565b60008060015447610e389190611329565b9050610e5883826003600087815260200190815260200160002054610eb1565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610794908490611009565b6000805484825260026020526040822054839190610ecf908661185d565b610ed99190611874565b610ee39190611896565b949350505050565b80471015610f405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8d576040519150601f19603f3d011682016040523d82523d6000602084013e610f92565b606091505b50509050806107945760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610f37565b600061105e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110de9092919063ffffffff16565b905080516000148061107f57508080602001905181019061107f919061136a565b6107945760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610f37565b6060610ee3848460008585600080866001600160a01b0316858760405161110591906118a9565b60006040518083038185875af1925050503d8060008114611142576040519150601f19603f3d011682016040523d82523d6000602084013e611147565b606091505b509150915061115887838387611163565b979650505050505050565b606083156111d25782516000036111cb576001600160a01b0385163b6111cb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f37565b5081610ee3565b610ee383838151156111e75781518083602001fd5b8060405162461bcd60e51b8152600401610f3791906112e0565b6001600160a01b03811681146108f357600080fd5b6000806040838503121561122957600080fd5b823561123481611201565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b8181101561127a5783518352928401929184019160010161125e565b50909695505050505050565b60006020828403121561129857600080fd5b8135610e5881611201565b6000602082840312156112b557600080fd5b5035919050565b60005b838110156112d75781810151838201526020016112bf565b50506000910152565b60208152600082518060208401526112ff8160408501602087016112bc565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561065657610656611313565b60006020828403121561134e57600080fd5b5051919050565b8051801515811461136557600080fd5b919050565b60006020828403121561137c57600080fd5b610e5882611355565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156113be576113be611385565b60405290565b60405160c0810167ffffffffffffffff811182821017156113be576113be611385565b604051601f8201601f1916810167ffffffffffffffff8111828210171561141057611410611385565b604052919050565b805161136581611201565b600082601f83011261143457600080fd5b815167ffffffffffffffff81111561144e5761144e611385565b611461601f8201601f19166020016113e7565b81815284602083860101111561147657600080fd5b610ee38260208301602087016112bc565b60006020828403121561149957600080fd5b6040516020810181811067ffffffffffffffff821117156114bc576114bc611385565b806040525080915082516114cf81611201565b905292915050565b600067ffffffffffffffff8211156114f1576114f1611385565b5060051b60200190565b600082601f83011261150c57600080fd5b8151602061152161151c836114d7565b6113e7565b82815260059290921b8401810191818101908684111561154057600080fd5b8286015b8481101561156457805161155781611201565b8352918301918301611544565b509695505050505050565b60006040828403121561158157600080fd5b6040516040810167ffffffffffffffff82821081831117156115a5576115a5611385565b8160405282935084519150808211156115bd57600080fd5b506115ca858286016114fb565b825250602083015160208201525092915050565b600082601f8301126115ef57600080fd5b815160206115ff61151c836114d7565b82815260059290921b8401810191818101908684111561161e57600080fd5b8286015b848110156115645780518352918301918301611622565b60006060828403121561164b57600080fd5b61165361139b565b9050815167ffffffffffffffff8082111561166d57600080fd5b611679858386016114fb565b835260209150818401518181111561169057600080fd5b8401601f810186136116a157600080fd5b80516116af61151c826114d7565b81815260059190911b820184019084810190888311156116ce57600080fd5b8584015b83811015611706578051868111156116ea5760008081fd5b6116f88b8983890101611423565b8452509186019186016116d2565b50808688015250505050604084015191508082111561172457600080fd5b50611731848285016115de565b60408301525092915050565b60006020828403121561174f57600080fd5b815167ffffffffffffffff8082111561176757600080fd5b9083019060c0828603121561177b57600080fd5b6117836113c4565b61178c83611418565b815261179a60208401611355565b60208201526040830151828111156117b157600080fd5b6117bd87828601611423565b6040830152506117d08660608501611487565b60608201526080830151828111156117e757600080fd5b6117f38782860161156f565b60808301525060a08301518281111561180b57600080fd5b61181787828601611639565b60a08301525095945050505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561184e57600080fd5b815160058110610e5857600080fd5b808202811582820484141761065657610656611313565b60008261189157634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561065657610656611313565b600082516118bb8184602087016112bc565b919091019291505056fea2646970667358221220806a8331cfb6ce0b97b1330ce119c45af286023dc946b29948d6871a79341a7f64736f6c63430008130033","sourceMap":"1529:9544:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4548:38;;;4564:10;188:51:44;;4576:9:41;270:2:44;255:18;;248:34;4548:38:41;;161:18:44;4548:38:41;;;;;;;1529:9544;;;;;2525:22;;;;;;;;;;-1:-1:-1;2525:22:41;;;;-1:-1:-1;;;;;2525:22:41;;;;;;-1:-1:-1;;;;;457:32:44;;;439:51;;427:2;412:18;2525:22:41;;;;;;;;8665:865;;;;;;;;;;-1:-1:-1;8665:865:41;;;;;:::i;:::-;;:::i;:::-;;2553:25;;;;;;;;;;-1:-1:-1;2553:25:41;;;;-1:-1:-1;;;2553:25:41;;;;;;;;;1154:14:44;;1147:22;1129:41;;1117:2;1102:18;2553:25:41;989:187:44;5565:267:41;;;;;;;;;;-1:-1:-1;5565:267:41;;;;;:::i;:::-;;:::i;:::-;;;1327:25:44;;;1315:2;1300:18;5565:267:41;1181:177:44;4829:90:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2340:52::-;;;;;;;;;;-1:-1:-1;2340:52:41;;;;;:::i;:::-;;;;;;;;;;;;;;7655:749;;;;;;;;;;-1:-1:-1;7655:749:41;;;;;:::i;:::-;;:::i;1945:26::-;;;;;;;;;;;;;;;;9782:294;;;;;;;;;;-1:-1:-1;9782:294:41;;;;;:::i;:::-;;:::i;2398:67::-;;;;;;;;;;-1:-1:-1;2398:67:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4658:86;;;;;;;;;;-1:-1:-1;4730:7:41;;;;;;;;;;;-1:-1:-1;;;4730:7:41;;;;4658:86;;;;4730:7;4658:86;:::i;2012:41::-;;;;;;;;;;-1:-1:-1;2012:41:41;;;;;:::i;:::-;;;;;;;;;;;;;;2227:23;;;;;;;;;;-1:-1:-1;2227:23:41;;;;;:::i;:::-;;:::i;4988:118::-;;;;;;;;;;-1:-1:-1;5082:17:41;;-1:-1:-1;;;;;5082:17:41;4988:118;;6437:1024;;;;;;;;;;-1:-1:-1;6437:1024:41;;;;;:::i;:::-;;:::i;2113:43::-;;;;;;;;;;-1:-1:-1;2113:43:41;;;;;:::i;:::-;;;;;;;;;;;;;;5886:470;;;;;;;;;;-1:-1:-1;5886:470:41;;;;;:::i;:::-;;:::i;9536:240::-;;;;;;;;;;;;;:::i;1977:28::-;;;;;;;;;;;;;;;;5191:220;;;;;;;;;;-1:-1:-1;5191:220:41;;;;;:::i;:::-;;:::i;2472:47::-;;;;;;;;;;-1:-1:-1;2472:47:41;;;;-1:-1:-1;;;;;2472:47:41;;;8665:865;8730:25;8747:7;8730:16;:25::i;:::-;8766:15;8784:26;8795:5;8802:7;8784:10;:26::i;:::-;8766:44;;8825:7;8836:1;8825:12;8821:52;;8846:27;;-1:-1:-1;;;8846:27:41;;;;;;;;;;;8821:52;-1:-1:-1;;;;;9108:25:41;;;;;;:18;:25;;;;;:36;;9137:7;;9108:25;:36;;9137:7;;9108:36;:::i;:::-;;;;-1:-1:-1;;;;;;;9178:20:41;;;;;;:13;:20;;;;;;;;:29;;;;;;;;:40;;;;;;9281:27;9199:7;9281:18;:27::i;:::-;9239:70;-1:-1:-1;;;;;;9324:29:41;;9320:69;;9362:27;;-1:-1:-1;;;9362:27:41;;;;;;;;;;;9320:69;9405:53;;;-1:-1:-1;;;;;206:32:44;;;188:51;;270:2;255:18;;248:34;;;9405:53:41;;;;;161:18:44;9405:53:41;;;;;;;9468:55;9491:5;9498:15;9515:7;9468:22;:55::i;:::-;8720:810;;8665:865;;:::o;5565:267::-;-1:-1:-1;;;;;5713:25:41;;5637:7;5713:25;;;:18;:25;;;;;;;5680:30;;-1:-1:-1;;;5680:30:41;;5704:4;5680:30;;;439:51:44;5637:7:41;;;;5680:15;;412:18:44;;5680:30:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;;:::i;:::-;-1:-1:-1;;;;;5795:20:41;;;;;;:13;:20;;;;;;;;:29;;;;;;;;;5656:82;;-1:-1:-1;5755:70:41;;5771:7;;5656:82;;5755:15;:70::i;:::-;5748:77;;;5565:267;;;;;:::o;4829:90::-;4871:16;4906:6;4899:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4829:90;:::o;7655:749::-;7706:25;7723:7;7706:16;:25::i;:::-;7742:15;7760:19;7771:7;7760:10;:19::i;:::-;7742:37;;7794:7;7805:1;7794:12;7790:53;;7815:28;;-1:-1:-1;;;7815:28:41;;;;;;;;;;;7790:53;8047:7;8030:13;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;8088:17:41;;;;:8;:17;;;;;:28;;;;;;8179:27;8097:7;8179:18;:27::i;:::-;8137:70;-1:-1:-1;;;;;;8222:29:41;;8218:69;;8260:27;;-1:-1:-1;;;8260:27:41;;;;;;;;;;;8218:69;8303:41;;;-1:-1:-1;;;;;206:32:44;;188:51;;270:2;255:18;;248:34;;;8303:41:41;;161:18:44;8303:41:41;;;;;;;8354:43;8372:15;8389:7;8354:17;:43::i;:::-;7696:708;;7655:749;:::o;9782:294::-;9856:7;;-1:-1:-1;;;;;9856:7:41;9842:10;:21;9838:58;;9872:24;;-1:-1:-1;;;9872:24:41;;;;;;;;;;;9838:58;9940:7;;9949:30;;-1:-1:-1;;;9949:30:41;;9973:4;9949:30;;;439:51:44;-1:-1:-1;;;;;9912:68:41;;;;;;9940:7;;;9912:68;;9949:15;;412:18:44;;9949:30:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9912:68;;;-1:-1:-1;;;;;206:32:44;;;188:51;;270:2;255:18;;248:34;;;;161:18;9912:68:41;;;;;;;10028:7;;10038:30;;-1:-1:-1;;;10038:30:41;;10062:4;10038:30;;;439:51:44;9990:79:41;;10013:5;;-1:-1:-1;;;;;10028:7:41;;;;10038:15;;;;;412:18:44;;10038:30:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9990:22;:79::i;:::-;9782:294;:::o;2227:23::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2227:23:41;:::o;6437:1024::-;6599:17;;:39;;-1:-1:-1;;;6599:39:41;;;;;1327:25:44;;;6503:7:41;;;;;;-1:-1:-1;;;;;6599:17:41;;:30;;1300:18:44;;6599:39:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6749:17;;:72;;-1:-1:-1;;;6749:72:41;;;;;1327:25:44;;;6555:83:41;;-1:-1:-1;;;;;;6749:17:41;;:37;;1300:18:44;;6749:72:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6745:677;;;6855:7;;-1:-1:-1;;;;;6855:7:41;;-1:-1:-1;6745:677:41;;;7003:17;;:64;;-1:-1:-1;;;7003:64:41;;;;;1327:25:44;;;6983:17:41;;-1:-1:-1;;;;;7003:17:41;;:29;;1300:18:44;;7003:64:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7128:17;;7175:66;;-1:-1:-1;;;7175:66:41;;;;;1327:25:44;;;6983:84:41;;-1:-1:-1;7081:44:41;;-1:-1:-1;;;;;7128:17:41;;;;:29;;:17;;7175:55;;1300:18:44;;7175:66:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7128:166;;;;;;;;;;;;;1327:25:44;;1315:2;1300:18;;1181:177;7128:166:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7128:166:41;;;;;;;;;;;;:::i;:::-;7326:13;;7081:213;;-1:-1:-1;;;;7326:13:41;;;;:85;;7389:22;;7326:85;;;7342:30;;;;:44;7326:85;7308:103;;6969:453;;6745:677;-1:-1:-1;7439:15:41;6437:1024;-1:-1:-1;;6437:1024:41:o;5886:470::-;5955:17;;;;;;;;;-1:-1:-1;;;;;5955:17:41;-1:-1:-1;;;;;5955:35:41;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;5951:83;;6006:28;;-1:-1:-1;;;6006:28:41;;;;;;;;;;;5951:83;6048:17;;;;;;;;;-1:-1:-1;;;;;6048:17:41;-1:-1:-1;;;;;6048:32:41;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6086:1;6048:39;6044:76;;6096:24;;-1:-1:-1;;;6096:24:41;;;;;;;;;;;6044:76;6134:17;;:25;;;-1:-1:-1;;;6134:25:41;;;;6163:31;;-1:-1:-1;;;;;6134:17:41;;:23;;:25;;;;;;;;;;;;;:17;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;;;;;:::i;:::-;;6130:97;;6203:24;;-1:-1:-1;;;6203:24:41;;;;;;;;;;;6130:97;6241:7;6252:1;6241:12;6237:49;;6262:24;;-1:-1:-1;;;6262:24:41;;;;;;;;;;;6237:49;6300:15;;;;:6;:15;;;;;;:20;;6296:53;;6329:20;;-1:-1:-1;;;6329:20:41;;;;;;;;;;;9536:240;9598:7;;-1:-1:-1;;;;;9598:7:41;9584:10;:21;9580:58;;9614:24;;-1:-1:-1;;;9614:24:41;;;;;;;;;;;9580:58;9670:7;;9654:47;;;-1:-1:-1;;;;;9670:7:41;;;188:51:44;;9679:21:41;270:2:44;255:18;;248:34;9654:47:41;;161:18:44;9654:47:41;;;;;;;9737:7;;9711:58;;-1:-1:-1;;;;;9737:7:41;9747:21;9711:17;:58::i;:::-;9536:240::o;5191:220::-;5249:7;5268:21;5316:13;;5292:21;:37;;;;:::i;:::-;5268:61;;5346:58;5362:7;5371:13;5386:8;:17;5395:7;5386:17;;;;;;;;;;;;5346:15;:58::i;:::-;5339:65;5191:220;-1:-1:-1;;;5191:220:41:o;941:175:29:-;1050:58;;;-1:-1:-1;;;;;206:32:44;;1050:58:29;;;188:51:44;255:18;;;;248:34;;;1050:58:29;;;;;;;;;;161:18:44;;;;1050:58:29;;;;;;;;-1:-1:-1;;;;;1050:58:29;-1:-1:-1;;;1050:58:29;;;1023:86;;1043:5;;1023:19;:86::i;10247:238:41:-;10383:7;10449:11;;10430:15;;;:6;:15;;;;;;10463;;10449:11;10414:31;;:13;:31;:::i;:::-;10413:47;;;;:::i;:::-;:65;;;;:::i;:::-;10406:72;10247:238;-1:-1:-1;;;;10247:238:41:o;2647:312:30:-;2761:6;2736:21;:31;;2728:73;;;;-1:-1:-1;;;2728:73:30;;12741:2:44;2728:73:30;;;12723:21:44;12780:2;12760:18;;;12753:30;12819:31;12799:18;;;12792:59;12868:18;;2728:73:30;;;;;;;;;2813:12;2831:9;-1:-1:-1;;;;;2831:14:30;2853:6;2831:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2812:52;;;2882:7;2874:78;;;;-1:-1:-1;;;2874:78:30;;13309:2:44;2874:78:30;;;13291:21:44;13348:2;13328:18;;;13321:30;13387:34;13367:18;;;13360:62;13458:28;13438:18;;;13431:56;13504:19;;2874:78:30;13107:422:44;5196:642:29;5615:23;5641:69;5669:4;5641:69;;;;;;;;;;;;;;;;;5649:5;-1:-1:-1;;;;;5641:27:29;;;:69;;;;;:::i;:::-;5615:95;;5728:10;:17;5749:1;5728:22;:56;;;;5765:10;5754:30;;;;;;;;;;;;:::i;:::-;5720:111;;;;-1:-1:-1;;;5720:111:29;;13736:2:44;5720:111:29;;;13718:21:44;13775:2;13755:18;;;13748:30;13814:34;13794:18;;;13787:62;-1:-1:-1;;;13865:18:44;;;13858:40;13915:19;;5720:111:29;13534:406:44;4108:223:30;4241:12;4272:52;4294:6;4302:4;4308:1;4311:12;4241;5446;5460:23;5487:6;-1:-1:-1;;;;;5487:11:30;5506:5;5513:4;5487:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5445:73;;;;5535:69;5562:6;5570:7;5579:10;5591:12;5535:26;:69::i;:::-;5528:76;5165:446;-1:-1:-1;;;;;;;5165:446:30:o;7671:628::-;7851:12;7879:7;7875:418;;;7906:10;:17;7927:1;7906:22;7902:286;;-1:-1:-1;;;;;1702:19:30;;;8113:60;;;;-1:-1:-1;;;8113:60:30;;14846:2:44;8113:60:30;;;14828:21:44;14885:2;14865:18;;;14858:30;14924:31;14904:18;;;14897:59;14973:18;;8113:60:30;14644:353:44;8113:60:30;-1:-1:-1;8208:10:30;8201:17;;7875:418;8249:33;8257:10;8269:12;8980:17;;:21;8976:379;;9208:10;9202:17;9264:15;9251:10;9247:2;9243:19;9236:44;8976:379;9331:12;9324:20;;-1:-1:-1;;;9324:20:30;;;;;;;;:::i;501:139:44:-;-1:-1:-1;;;;;584:31:44;;574:42;;564:70;;630:1;627;620:12;645:339;729:6;737;790:2;778:9;769:7;765:23;761:32;758:52;;;806:1;803;796:12;758:52;845:9;832:23;864:39;897:5;864:39;:::i;:::-;922:5;974:2;959:18;;;;946:32;;-1:-1:-1;;;645:339:44:o;1363:632::-;1534:2;1586:21;;;1656:13;;1559:18;;;1678:22;;;1505:4;;1534:2;1757:15;;;;1731:2;1716:18;;;1505:4;1800:169;1814:6;1811:1;1808:13;1800:169;;;1875:13;;1863:26;;1944:15;;;;1909:12;;;;1836:1;1829:9;1800:169;;;-1:-1:-1;1986:3:44;;1363:632;-1:-1:-1;;;;;;1363:632:44:o;2000:271::-;2075:6;2128:2;2116:9;2107:7;2103:23;2099:32;2096:52;;;2144:1;2141;2134:12;2096:52;2183:9;2170:23;2202:39;2235:5;2202:39;:::i;2276:180::-;2335:6;2388:2;2376:9;2367:7;2363:23;2359:32;2356:52;;;2404:1;2401;2394:12;2356:52;-1:-1:-1;2427:23:44;;2276:180;-1:-1:-1;2276:180:44:o;2461:250::-;2546:1;2556:113;2570:6;2567:1;2564:13;2556:113;;;2646:11;;;2640:18;2627:11;;;2620:39;2592:2;2585:10;2556:113;;;-1:-1:-1;;2703:1:44;2685:16;;2678:27;2461:250::o;2716:396::-;2865:2;2854:9;2847:21;2828:4;2897:6;2891:13;2940:6;2935:2;2924:9;2920:18;2913:34;2956:79;3028:6;3023:2;3012:9;3008:18;3003:2;2995:6;2991:15;2956:79;:::i;:::-;3096:2;3075:15;-1:-1:-1;;3071:29:44;3056:45;;;;3103:2;3052:54;;2716:396;-1:-1:-1;;2716:396:44:o;3357:127::-;3418:10;3413:3;3409:20;3406:1;3399:31;3449:4;3446:1;3439:15;3473:4;3470:1;3463:15;3489:125;3554:9;;;3575:10;;;3572:36;;;3588:18;;:::i;3906:184::-;3976:6;4029:2;4017:9;4008:7;4004:23;4000:32;3997:52;;;4045:1;4042;4035:12;3997:52;-1:-1:-1;4068:16:44;;3906:184;-1:-1:-1;3906:184:44:o;4095:164::-;4171:13;;4220;;4213:21;4203:32;;4193:60;;4249:1;4246;4239:12;4193:60;4095:164;;;:::o;4264:202::-;4331:6;4384:2;4372:9;4363:7;4359:23;4355:32;4352:52;;;4400:1;4397;4390:12;4352:52;4423:37;4450:9;4423:37;:::i;4471:127::-;4532:10;4527:3;4523:20;4520:1;4513:31;4563:4;4560:1;4553:15;4587:4;4584:1;4577:15;4603:253;4675:2;4669:9;4717:4;4705:17;;4752:18;4737:34;;4773:22;;;4734:62;4731:88;;;4799:18;;:::i;:::-;4835:2;4828:22;4603:253;:::o;4861:::-;4933:2;4927:9;4975:4;4963:17;;5010:18;4995:34;;5031:22;;;4992:62;4989:88;;;5057:18;;:::i;5119:275::-;5190:2;5184:9;5255:2;5236:13;;-1:-1:-1;;5232:27:44;5220:40;;5290:18;5275:34;;5311:22;;;5272:62;5269:88;;;5337:18;;:::i;:::-;5373:2;5366:22;5119:275;;-1:-1:-1;5119:275:44:o;5399:146::-;5478:13;;5500:39;5478:13;5500:39;:::i;5550:510::-;5604:5;5657:3;5650:4;5642:6;5638:17;5634:27;5624:55;;5675:1;5672;5665:12;5624:55;5704:6;5698:13;5730:18;5726:2;5723:26;5720:52;;;5752:18;;:::i;:::-;5796:55;5839:2;5820:13;;-1:-1:-1;;5816:27:44;5845:4;5812:38;5796:55;:::i;:::-;5876:2;5867:7;5860:19;5922:3;5915:4;5910:2;5902:6;5898:15;5894:26;5891:35;5888:55;;;5939:1;5936;5929:12;5888:55;5952:77;6026:2;6019:4;6010:7;6006:18;5999:4;5991:6;5987:17;5952:77;:::i;6065:498::-;6137:5;6185:4;6173:9;6168:3;6164:19;6160:30;6157:50;;;6203:1;6200;6193:12;6157:50;6236:2;6230:9;6278:4;6270:6;6266:17;6349:6;6337:10;6334:22;6313:18;6301:10;6298:34;6295:62;6292:88;;;6360:18;;:::i;:::-;6400:10;6396:2;6389:22;;6429:6;6420:15;;6465:9;6459:16;6484:41;6517:7;6484:41;:::i;:::-;6534:23;;6065:498;;-1:-1:-1;;6065:498:44:o;6568:183::-;6628:4;6661:18;6653:6;6650:30;6647:56;;;6683:18;;:::i;:::-;-1:-1:-1;6728:1:44;6724:14;6740:4;6720:25;;6568:183::o;6756:742::-;6821:5;6874:3;6867:4;6859:6;6855:17;6851:27;6841:55;;6892:1;6889;6882:12;6841:55;6921:6;6915:13;6947:4;6971:60;6987:43;7027:2;6987:43;:::i;:::-;6971:60;:::i;:::-;7065:15;;;7151:1;7147:10;;;;7135:23;;7131:32;;;7096:12;;;;7175:15;;;7172:35;;;7203:1;7200;7193:12;7172:35;7239:2;7231:6;7227:15;7251:218;7267:6;7262:3;7259:15;7251:218;;;7340:3;7334:10;7357:39;7390:5;7357:39;:::i;:::-;7409:18;;7447:12;;;;7284;;7251:218;;;-1:-1:-1;7487:5:44;6756:742;-1:-1:-1;;;;;;6756:742:44:o;7503:633::-;7573:5;7621:4;7609:9;7604:3;7600:19;7596:30;7593:50;;;7639:1;7636;7629:12;7593:50;7672:4;7666:11;7716:4;7708:6;7704:17;7740:18;7808:6;7796:10;7793:22;7788:2;7776:10;7773:18;7770:46;7767:72;;;7819:18;;:::i;:::-;7861:10;7855:4;7848:24;7890:6;7881:15;;7925:9;7919:16;7905:30;;7958:2;7950:6;7947:14;7944:34;;;7974:1;7971;7964:12;7944:34;;8002:68;8066:3;8057:6;8046:9;8042:22;8002:68;:::i;:::-;7994:6;7987:84;;8125:2;8114:9;8110:18;8104:25;8099:2;8091:6;8087:15;8080:50;;7503:633;;;;:::o;8141:659::-;8206:5;8259:3;8252:4;8244:6;8240:17;8236:27;8226:55;;8277:1;8274;8267:12;8226:55;8306:6;8300:13;8332:4;8356:60;8372:43;8412:2;8372:43;:::i;8356:60::-;8450:15;;;8536:1;8532:10;;;;8520:23;;8516:32;;;8481:12;;;;8560:15;;;8557:35;;;8588:1;8585;8578:12;8557:35;8624:2;8616:6;8612:15;8636:135;8652:6;8647:3;8644:15;8636:135;;;8718:10;;8706:23;;8749:12;;;;8669;;8636:135;;8805:1527;8877:5;8925:4;8913:9;8908:3;8904:19;8900:30;8897:50;;;8943:1;8940;8933:12;8897:50;8965:22;;:::i;:::-;8956:31;;9016:9;9010:16;9045:18;9086:2;9078:6;9075:14;9072:34;;;9102:1;9099;9092:12;9072:34;9129:68;9193:3;9184:6;9173:9;9169:22;9129:68;:::i;:::-;9122:5;9115:83;9217:2;9207:12;;9265:2;9254:9;9250:18;9244:25;9294:2;9284:8;9281:16;9278:36;;;9310:1;9307;9300:12;9278:36;9333:24;;9388:4;9380:13;;9376:23;-1:-1:-1;9366:51:44;;9413:1;9410;9403:12;9366:51;9442:2;9436:9;9465:60;9481:43;9521:2;9481:43;:::i;9465:60::-;9559:15;;;9641:1;9637:10;;;;9629:19;;9625:28;;;9590:12;;;;9665:15;;;9662:35;;;9693:1;9690;9683:12;9662:35;9725:2;9721;9717:11;9737:353;9753:6;9748:3;9745:15;9737:353;;;9832:3;9826:10;9868:2;9855:11;9852:19;9849:109;;;9912:1;9941:2;9937;9930:14;9849:109;9983:64;10043:3;10038:2;10024:11;10020:2;10016:20;10012:29;9983:64;:::i;:::-;9971:77;;-1:-1:-1;10068:12:44;;;;9770;;9737:353;;;9741:3;10122:5;10117:2;10110:5;10106:14;10099:29;;;;;10174:2;10163:9;10159:18;10153:25;10137:41;;10203:2;10193:8;10190:16;10187:36;;;10219:1;10216;10209:12;10187:36;;10255:70;10321:3;10310:8;10299:9;10295:24;10255:70;:::i;:::-;10250:2;10243:5;10239:14;10232:94;;8805:1527;;;;:::o;10337:1254::-;10438:6;10491:2;10479:9;10470:7;10466:23;10462:32;10459:52;;;10507:1;10504;10497:12;10459:52;10540:9;10534:16;10569:18;10610:2;10602:6;10599:14;10596:34;;;10626:1;10623;10616:12;10596:34;10649:22;;;;10705:4;10687:16;;;10683:27;10680:47;;;10723:1;10720;10713:12;10680:47;10749:22;;:::i;:::-;10794:33;10824:2;10794:33;:::i;:::-;10787:5;10780:48;10860:39;10895:2;10891;10887:11;10860:39;:::i;:::-;10855:2;10848:5;10844:14;10837:63;10939:2;10935;10931:11;10925:18;10968:2;10958:8;10955:16;10952:36;;;10984:1;10981;10974:12;10952:36;11020:56;11068:7;11057:8;11053:2;11049:17;11020:56;:::i;:::-;11015:2;11008:5;11004:14;10997:80;;11109:65;11166:7;11161:2;11157;11153:11;11109:65;:::i;:::-;11104:2;11097:5;11093:14;11086:89;11214:3;11210:2;11206:12;11200:19;11244:2;11234:8;11231:16;11228:36;;;11260:1;11257;11250:12;11228:36;11297:69;11358:7;11347:8;11343:2;11339:17;11297:69;:::i;:::-;11291:3;11284:5;11280:15;11273:94;;11406:3;11402:2;11398:12;11392:19;11436:2;11426:8;11423:16;11420:36;;;11452:1;11449;11442:12;11420:36;11489:71;11552:7;11541:8;11537:2;11533:17;11489:71;:::i;:::-;11483:3;11472:15;;11465:96;-1:-1:-1;11476:5:44;10337:1254;-1:-1:-1;;;;;10337:1254:44:o;11596:127::-;11657:10;11652:3;11648:20;11645:1;11638:31;11688:4;11685:1;11678:15;11712:4;11709:1;11702:15;11728:278;11816:6;11869:2;11857:9;11848:7;11844:23;11840:32;11837:52;;;11885:1;11882;11875:12;11837:52;11917:9;11911:16;11956:1;11949:5;11946:12;11936:40;;11972:1;11969;11962:12;12011:168;12084:9;;;12115;;12132:15;;;12126:22;;12112:37;12102:71;;12153:18;;:::i;12184:217::-;12224:1;12250;12240:132;;12294:10;12289:3;12285:20;12282:1;12275:31;12329:4;12326:1;12319:15;12357:4;12354:1;12347:15;12240:132;-1:-1:-1;12386:9:44;;12184:217::o;12406:128::-;12473:9;;;12494:11;;;12491:37;;;12508:18;;:::i;14352:287::-;14481:3;14519:6;14513:13;14535:66;14594:6;14589:3;14582:4;14574:6;14570:17;14535:66;:::i;:::-;14617:16;;;;;14352:287;-1:-1:-1;;14352:287:44:o","linkReferences":{}},"methodIdentifiers":{"creator()":"02d05d3f","erc20Released(address,uint256)":"4b945338","erc20TotalReleased(address)":"3375bbdc","getAddressToPayOut(uint256)":"96f7ff6e","getPayees()":"27f38113","getUnderlyingContest()":"828ce44b","payees(uint256)":"63037b0c","paysOutTarget()":"1e5b4634","releasable(address,uint256)":"2081d631","releasable(uint256)":"e4bf01a8","release(address,uint256)":"0357371d","release(uint256)":"37bdc99b","released(uint256)":"a94d373b","runReleaseChecks(uint256)":"c7104046","shares(uint256)":"57a858fc","totalReleased()":"e33b7de3","totalShares()":"3a98ef39","underlyingContest()":"f3f44fb7","version()":"54fd4d50","withdrawRewards()":"c7b8981c","withdrawRewards(address)":"42d86693"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"payees_\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares_\",\"type\":\"uint256[]\"},{\"internalType\":\"contract GovernorCountingSimple\",\"name\":\"underlyingContest_\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysOutTarget_\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccountAlreadyHasShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccountNotDueERC20Payment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccountNotDueNativePayment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotPayOutToZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContestMustBeCompleted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustHaveAtLeastOnePayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustHaveDownvotingDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustHaveSortingEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCreatorCanWithdraw\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PayeesSharesLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PayoutRankCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RankingCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RankingHasNoShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SharesCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TotalSharesCannotBeZero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ERC20PaymentReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ERC20RewardWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"PayeeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PaymentReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PaymentReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"creator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"erc20Released\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"erc20TotalReleased\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"getAddressToPayOut\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPayees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnderlyingContest\",\"outputs\":[{\"internalType\":\"contract GovernorCountingSimple\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"payees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paysOutTarget\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"releasable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"releasable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"released\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"runReleaseChecks\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"shares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalReleased\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlyingContest\",\"outputs\":[{\"internalType\":\"contract GovernorCountingSimple\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware that the Ether will be split in this way, since it is handled transparently by the contract. The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim an amount proportional to the percentage of total shares they were assigned. The distribution of shares is set at the time of contract deployment and can't be updated thereafter. `RewardsModule` follows a _pull payment_ model. This means that payments are not automatically forwarded to the accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} function. NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you to run tests before sending real value to this contract.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Creates an instance of `RewardsModule` where each ranking in `payees` is assigned the number of shares at the matching position in the `shares` array. All rankings in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no duplicates in `payees`.\"},\"getAddressToPayOut(uint256)\":{\"details\":\"Return address to pay out for a given ranking.\"},\"getPayees()\":{\"details\":\"Getter for list of rankings that will be paid out.\"},\"getUnderlyingContest()\":{\"details\":\"Getter for the underlying contest.\"},\"releasable(address,uint256)\":{\"details\":\"Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an IERC20 contract.\"},\"releasable(uint256)\":{\"details\":\"Getter for the amount of payee's releasable Ether.\"},\"release(address,uint256)\":{\"details\":\"Triggers a transfer to `ranking` of the amount of `token` tokens they are owed, according to their percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 contract.\"},\"release(uint256)\":{\"details\":\"Triggers a transfer to `ranking` of the amount of Ether they are owed, according to their percentage of the total shares and their previous withdrawals.\"},\"runReleaseChecks(uint256)\":{\"details\":\"Run release checks.\"},\"version()\":{\"details\":\"Version of the rewards module.\"}},\"title\":\"RewardsModule\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/RewardsModule.sol\":\"RewardsModule\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71\",\"dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68\",\"dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04\",\"dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"src/governance/Governor.sol\":{\"keccak256\":\"0x513a5f9a1fd1654d6337ae26a3a8dcc06c1a26d1b3144cf17c926b57b7afd0d9\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://b60aef5596edf2bd87c2a2222a70affd6b96032bb6e9b19e75d50eefc3b31e45\",\"dweb:/ipfs/QmVYxa7EZvvYzmfNWMxR8enKYfpCJdezMXzwn3uTLWQome\"]},\"src/governance/extensions/GovernorCountingSimple.sol\":{\"keccak256\":\"0x926939a083bcb63478d84c9f13c87f34dbd9aa248f2257f9cd1bc6a2e8a26b24\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://966641c9ea61d00b1a536158fb57b091d4687204b5a77a2dbc2b664067a035e0\",\"dweb:/ipfs/Qmd3cfwmg4nqkXCew8nrDsEMR2qe9YFAdFXs8q45LcswiQ\"]},\"src/governance/utils/GovernorMerkleVotes.sol\":{\"keccak256\":\"0x02d81049154ff4a8c009126a7470c9f49d076a534576a6fc3fe3f8de2c5cd608\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://21056ce53dd97ffff192a7834bd0ea2cc7691fce7e90e8c7943a9213242ba28a\",\"dweb:/ipfs/QmNzbxrT8Q2FLLQkdNUAKZyZzy4QMGm4zQsdWePWk1sxDb\"]},\"src/governance/utils/GovernorSorting.sol\":{\"keccak256\":\"0xde18aec0c9ebe63b6e210e03151770b4e470fafe53390227244615ffd9b86ad5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d02b203d82cb2773a2a97850533d67dee9e3c729475cb438c2e625c71b15a7d5\",\"dweb:/ipfs/QmXsa98RbxoxfZqRAJmP6Sw8uTYssv3HcTyKzYBtXhQE1H\"]},\"src/modules/RewardsModule.sol\":{\"keccak256\":\"0xba71e0faff9f20449747482feeade015a034344e2a7765342b6525b9b48e6bb1\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://61758df4a8d987f7181976b723c03f6cf0c2f4f780eae45cbd3cd5166beaf9b5\",\"dweb:/ipfs/QmbERf6dSDwuqQiS5JQepq1zNQXQqHmudnZMVrubTsnYSf\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256[]","name":"payees_","type":"uint256[]"},{"internalType":"uint256[]","name":"shares_","type":"uint256[]"},{"internalType":"contract GovernorCountingSimple","name":"underlyingContest_","type":"address"},{"internalType":"bool","name":"paysOutTarget_","type":"bool"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"type":"error","name":"AccountAlreadyHasShares"},{"inputs":[],"type":"error","name":"AccountNotDueERC20Payment"},{"inputs":[],"type":"error","name":"AccountNotDueNativePayment"},{"inputs":[],"type":"error","name":"CannotPayOutToZeroAddress"},{"inputs":[],"type":"error","name":"ContestMustBeCompleted"},{"inputs":[],"type":"error","name":"MustHaveAtLeastOnePayee"},{"inputs":[],"type":"error","name":"MustHaveDownvotingDisabled"},{"inputs":[],"type":"error","name":"MustHaveSortingEnabled"},{"inputs":[],"type":"error","name":"OnlyCreatorCanWithdraw"},{"inputs":[],"type":"error","name":"PayeesSharesLengthMismatch"},{"inputs":[],"type":"error","name":"PayoutRankCannotBeZero"},{"inputs":[],"type":"error","name":"RankingCannotBeZero"},{"inputs":[],"type":"error","name":"RankingHasNoShares"},{"inputs":[],"type":"error","name":"SharesCannotBeZero"},{"inputs":[],"type":"error","name":"TotalSharesCannotBeZero"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"ERC20PaymentReleased","anonymous":false},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address","indexed":true},{"internalType":"address","name":"by","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"ERC20RewardWithdrawn","anonymous":false},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256","indexed":false},{"internalType":"uint256","name":"shares","type":"uint256","indexed":false}],"type":"event","name":"PayeeAdded","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"PaymentReceived","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"PaymentReleased","anonymous":false},{"inputs":[{"internalType":"address","name":"by","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"RewardWithdrawn","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"erc20Released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"erc20TotalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"view","type":"function","name":"getAddressToPayOut","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPayees","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getUnderlyingContest","outputs":[{"internalType":"contract GovernorCountingSimple","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"payees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paysOutTarget","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"view","type":"function","name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"view","type":"function","name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"release"},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"release"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"view","type":"function","name":"runReleaseChecks"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"underlyingContest","outputs":[{"internalType":"contract GovernorCountingSimple","name":"","type":"address"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"withdrawRewards"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"withdrawRewards"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Creates an instance of `RewardsModule` where each ranking in `payees` is assigned the number of shares at the matching position in the `shares` array. All rankings in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no duplicates in `payees`."},"getAddressToPayOut(uint256)":{"details":"Return address to pay out for a given ranking."},"getPayees()":{"details":"Getter for list of rankings that will be paid out."},"getUnderlyingContest()":{"details":"Getter for the underlying contest."},"releasable(address,uint256)":{"details":"Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an IERC20 contract."},"releasable(uint256)":{"details":"Getter for the amount of payee's releasable Ether."},"release(address,uint256)":{"details":"Triggers a transfer to `ranking` of the amount of `token` tokens they are owed, according to their percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 contract."},"release(uint256)":{"details":"Triggers a transfer to `ranking` of the amount of Ether they are owed, according to their percentage of the total shares and their previous withdrawals."},"runReleaseChecks(uint256)":{"details":"Run release checks."},"version()":{"details":"Version of the rewards module."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@forge-std/=lib/forge-std/src/","@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/RewardsModule.sol":"RewardsModule"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305","urls":["bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5","dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69","urls":["bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71","dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1","urls":["bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68","dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa","urls":["bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931","dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol":{"keccak256":"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac","urls":["bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04","dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad","urls":["bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278","dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH"],"license":"MIT"},"src/governance/Governor.sol":{"keccak256":"0x513a5f9a1fd1654d6337ae26a3a8dcc06c1a26d1b3144cf17c926b57b7afd0d9","urls":["bzz-raw://b60aef5596edf2bd87c2a2222a70affd6b96032bb6e9b19e75d50eefc3b31e45","dweb:/ipfs/QmVYxa7EZvvYzmfNWMxR8enKYfpCJdezMXzwn3uTLWQome"],"license":"AGPL-3.0-only"},"src/governance/extensions/GovernorCountingSimple.sol":{"keccak256":"0x926939a083bcb63478d84c9f13c87f34dbd9aa248f2257f9cd1bc6a2e8a26b24","urls":["bzz-raw://966641c9ea61d00b1a536158fb57b091d4687204b5a77a2dbc2b664067a035e0","dweb:/ipfs/Qmd3cfwmg4nqkXCew8nrDsEMR2qe9YFAdFXs8q45LcswiQ"],"license":"AGPL-3.0-only"},"src/governance/utils/GovernorMerkleVotes.sol":{"keccak256":"0x02d81049154ff4a8c009126a7470c9f49d076a534576a6fc3fe3f8de2c5cd608","urls":["bzz-raw://21056ce53dd97ffff192a7834bd0ea2cc7691fce7e90e8c7943a9213242ba28a","dweb:/ipfs/QmNzbxrT8Q2FLLQkdNUAKZyZzy4QMGm4zQsdWePWk1sxDb"],"license":"AGPL-3.0-only"},"src/governance/utils/GovernorSorting.sol":{"keccak256":"0xde18aec0c9ebe63b6e210e03151770b4e470fafe53390227244615ffd9b86ad5","urls":["bzz-raw://d02b203d82cb2773a2a97850533d67dee9e3c729475cb438c2e625c71b15a7d5","dweb:/ipfs/QmXsa98RbxoxfZqRAJmP6Sw8uTYssv3HcTyKzYBtXhQE1H"],"license":"AGPL-3.0-only"},"src/modules/RewardsModule.sol":{"keccak256":"0xba71e0faff9f20449747482feeade015a034344e2a7765342b6525b9b48e6bb1","urls":["bzz-raw://61758df4a8d987f7181976b723c03f6cf0c2f4f780eae45cbd3cd5166beaf9b5","dweb:/ipfs/QmbERf6dSDwuqQiS5JQepq1zNQXQqHmudnZMVrubTsnYSf"],"license":"AGPL-3.0-only"}},"version":1},"id":41} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"payees_","type":"uint256[]","internalType":"uint256[]"},{"name":"shares_","type":"uint256[]","internalType":"uint256[]"},{"name":"underlyingContest_","type":"address","internalType":"contract GovernorCountingSimple"},{"name":"paysOutTarget_","type":"bool","internalType":"bool"}],"stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"creator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"erc20Released","inputs":[{"name":"","type":"address","internalType":"contract IERC20"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"erc20TotalReleased","inputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAddressToPayOut","inputs":[{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getPayees","inputs":[],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getUnderlyingContest","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract GovernorCountingSimple"}],"stateMutability":"view"},{"type":"function","name":"payees","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"paysOutTarget","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"releasable","inputs":[{"name":"token","type":"address","internalType":"contract IERC20"},{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"releasable","inputs":[{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"release","inputs":[{"name":"token","type":"address","internalType":"contract IERC20"},{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"release","inputs":[{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"released","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"runReleaseChecks","inputs":[{"name":"ranking","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"shares","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalReleased","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalShares","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"underlyingContest","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract GovernorCountingSimple"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"withdrawRewards","inputs":[{"name":"token","type":"address","internalType":"contract IERC20"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawRewards","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ERC20PaymentReleased","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"contract IERC20"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ERC20RewardWithdrawn","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"contract IERC20"},{"name":"by","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PayeeAdded","inputs":[{"name":"ranking","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PaymentReceived","inputs":[{"name":"from","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PaymentReleased","inputs":[{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RewardWithdrawn","inputs":[{"name":"by","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AccountAlreadyHasShares","inputs":[]},{"type":"error","name":"AccountNotDueERC20Payment","inputs":[]},{"type":"error","name":"AccountNotDueNativePayment","inputs":[]},{"type":"error","name":"CannotPayOutToZeroAddress","inputs":[]},{"type":"error","name":"ContestMustBeCompleted","inputs":[]},{"type":"error","name":"MustHaveAtLeastOnePayee","inputs":[]},{"type":"error","name":"MustHaveDownvotingDisabled","inputs":[]},{"type":"error","name":"MustHaveSortingEnabled","inputs":[]},{"type":"error","name":"OnlyCreatorCanWithdraw","inputs":[]},{"type":"error","name":"PayeesSharesLengthMismatch","inputs":[]},{"type":"error","name":"PayoutRankCannotBeZero","inputs":[]},{"type":"error","name":"RankingCannotBeZero","inputs":[]},{"type":"error","name":"RankingHasNoShares","inputs":[]},{"type":"error","name":"SharesCannotBeZero","inputs":[]},{"type":"error","name":"TotalSharesCannotBeZero","inputs":[]}],"bytecode":{"object":"0x608060405260405162001d1538038062001d15833981016040819052620000269162000301565b825184511462000049576040516324e23b4160e01b815260040160405180910390fd5b83516000036200006c57604051634c87c40160e01b815260040160405180910390fd5b60005b8451811015620000d857620000c3858281518110620000925762000092620003a6565b6020026020010151858381518110620000af57620000af620003a6565b60200260200101516200014660201b60201c565b80620000cf81620003d2565b9150506200006f565b50600054600003620000fd576040516306db759b60e21b815260040160405180910390fd5b60088054600780546001600160a01b039095166001600160a01b0319958616179055911515600160a01b02929092166001600160a81b03199091161733179055506200040a9050565b81600003620001685760405163d6fbfe2560e01b815260040160405180910390fd5b806000036200018a57604051633122bc0960e21b815260040160405180910390fd5b60008281526002602052604090205415620001b857604051637b4f7fb560e01b815260040160405180910390fd5b60048054600181019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0182905560008281526002602052604081208290555462000207908290620003ee565b60005560408051838152602081018390527f78bc0e219b874bf2620f7316737ec16d4bda1bb7136961e4dcb5ff0dc031cee4910160405180910390a15050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200026f57600080fd5b815160206001600160401b03808311156200028e576200028e62000247565b8260051b604051601f19603f83011681018181108482111715620002b657620002b662000247565b604052938452858101830193838101925087851115620002d557600080fd5b83870191505b84821015620002f657815183529183019190830190620002db565b979650505050505050565b600080600080608085870312156200031857600080fd5b84516001600160401b03808211156200033057600080fd5b6200033e888389016200025d565b955060208701519150808211156200035557600080fd5b5062000364878288016200025d565b604087015190945090506001600160a01b03811681146200038457600080fd5b606086015190925080151581146200039b57600080fd5b939692955090935050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201620003e757620003e7620003bc565b5060010190565b80820180821115620004045762000404620003bc565b92915050565b6118fb806200041a6000396000f3fe60806040526004361061012e5760003560e01c806354fd4d50116100ab578063a94d373b1161006f578063a94d373b146103cb578063c7104046146103f8578063c7b8981c14610418578063e33b7de31461042d578063e4bf01a814610443578063f3f44fb71461046357600080fd5b806354fd4d501461030d57806357a858fc1461034057806363037b0c1461036d578063828ce44b1461038d57806396f7ff6e146103ab57600080fd5b80633375bbdc116100f25780633375bbdc1461025257806337bdc99b1461027f5780633a98ef391461029f57806342d86693146102b55780634b945338146102d557600080fd5b806302d05d3f146101725780630357371d146101af5780631e5b4634146101d15780632081d6311461020257806327f381131461023057600080fd5b3661016d57604080513381523460208201527f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be770910160405180910390a1005b600080fd5b34801561017e57600080fd5b50600854610192906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101bb57600080fd5b506101cf6101ca366004611216565b610483565b005b3480156101dd57600080fd5b506008546101f290600160a01b900460ff1681565b60405190151581526020016101a6565b34801561020e57600080fd5b5061022261021d366004611216565b61059a565b6040519081526020016101a6565b34801561023c57600080fd5b5061024561065c565b6040516101a69190611242565b34801561025e57600080fd5b5061022261026d366004611286565b60056020526000908152604090205481565b34801561028b57600080fd5b506101cf61029a3660046112a3565b6106b4565b3480156102ab57600080fd5b5061022260005481565b3480156102c157600080fd5b506101cf6102d0366004611286565b610799565b3480156102e157600080fd5b506102226102f0366004611216565b600660209081526000928352604080842090915290825290205481565b34801561031957600080fd5b5060408051808201825260048152631a17199960e11b602082015290516101a691906112e0565b34801561034c57600080fd5b5061022261035b3660046112a3565b60026020526000908152604090205481565b34801561037957600080fd5b506102226103883660046112a3565b6108f6565b34801561039957600080fd5b506007546001600160a01b0316610192565b3480156103b757600080fd5b506101926103c63660046112a3565b610917565b3480156103d757600080fd5b506102226103e63660046112a3565b60036020526000908152604090205481565b34801561040457600080fd5b506101cf6104133660046112a3565b610b89565b34801561042457600080fd5b506101cf610d9f565b34801561043957600080fd5b5061022260015481565b34801561044f57600080fd5b5061022261045e3660046112a3565b610e27565b34801561046f57600080fd5b50600754610192906001600160a01b031681565b61048c81610b89565b6000610498838361059a565b9050806000036104bb57604051635fe559bd60e01b815260040160405180910390fd5b6001600160a01b038316600090815260056020526040812080548392906104e3908490611329565b90915550506001600160a01b0383166000908152600660209081526040808320858452909152812080548301905561051a83610917565b90506001600160a01b038116610543576040516346a3c2f960e01b815260040160405180910390fd5b604080516001600160a01b038381168252602082018590528616917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a2610594848284610e5f565b50505050565b6001600160a01b0382166000818152600560205260408082205490516370a0823160e01b8152306004820152919283926370a0823190602401602060405180830381865afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610614919061133c565b61061e9190611329565b6001600160a01b03851660009081526006602090815260408083208784529091529020549091506106529084908390610eb1565b9150505b92915050565b606060048054806020026020016040519081016040528092919081815260200182805480156106aa57602002820191906000526020600020905b815481526020019060010190808311610696575b5050505050905090565b6106bd81610b89565b60006106c882610e27565b9050806000036106eb57604051631d1514e960e21b815260040160405180910390fd5b80600160008282546106fd9190611329565b9091555050600082815260036020526040812080548301905561071f83610917565b90506001600160a01b038116610748576040516346a3c2f960e01b815260040160405180910390fd5b604080516001600160a01b0383168152602081018490527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a16107948183610eeb565b505050565b6008546001600160a01b031633146107c457604051631eab0da960e01b815260040160405180910390fd5b6008546040516370a0823160e01b81523060048201526001600160a01b03838116927f6e5fc1cbd1629d9837bd657d23cf585bbc4e9127184972606cc4c0dd406f75729291169083906370a0823190602401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133c565b604080516001600160a01b03909316835260208301919091520160405180910390a26008546040516370a0823160e01b81523060048201526108f39183916001600160a01b03918216918316906370a0823190602401602060405180830381865afa1580156108ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee919061133c565b610e5f565b50565b6004818154811061090657600080fd5b600091825260209091200154905081565b600754604051630b8e20fb60e31b815260048101839052600091829182916001600160a01b031690635c7107d890602401602060405180830381865afa158015610965573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610989919061133c565b60075460405163245d1de360e21b8152600481018390529192506001600160a01b031690639174778c90602401602060405180830381865afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f7919061136a565b15610a0f576008546001600160a01b03169150610b82565b60075460405163325cc6d960e01b8152600481018390526000916001600160a01b03169063325cc6d990602401602060405180830381865afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d919061133c565b60075460405163b66d1da360e01b8152600481018390529192506000916001600160a01b039091169063c7f758a890829063b66d1da390602401602060405180830381865afa158015610ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af8919061133c565b6040518263ffffffff1660e01b8152600401610b1691815260200190565b600060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b5b919081019061173d565b600854909150600160a01b900460ff16610b76578051610b7d565b6060810151515b935050505b5092915050565b600760009054906101000a90046001600160a01b03166001600160a01b03166360506ff66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c00919061133c565b15610c1e5760405163018e187760e61b815260040160405180910390fd5b600760009054906101000a90046001600160a01b03166001600160a01b031663366ecf5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c95919061133c565b600114610cb557604051630fcdfffd60e41b815260040160405180910390fd5b6007546040805163c19d93fb60e01b815290516004926001600160a01b03169163c19d93fb918185019160209190819003860181865afa158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d21919061183c565b6004811115610d3257610d32611826565b14610d5057604051639c2d4c7960e01b815260040160405180910390fd5b80600003610d715760405163f9668e2960e01b815260040160405180910390fd5b60008181526002602052604081205490036108f357604051632534bdfb60e11b815260040160405180910390fd5b6008546001600160a01b03163314610dca57604051631eab0da960e01b815260040160405180910390fd5b600854604080516001600160a01b0390921682524760208301527f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337910160405180910390a1600854610e25906001600160a01b031647610eeb565b565b60008060015447610e389190611329565b9050610e5883826003600087815260200190815260200160002054610eb1565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610794908490611009565b6000805484825260026020526040822054839190610ecf908661185d565b610ed99190611874565b610ee39190611896565b949350505050565b80471015610f405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8d576040519150601f19603f3d011682016040523d82523d6000602084013e610f92565b606091505b50509050806107945760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610f37565b600061105e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110de9092919063ffffffff16565b905080516000148061107f57508080602001905181019061107f919061136a565b6107945760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610f37565b6060610ee3848460008585600080866001600160a01b0316858760405161110591906118a9565b60006040518083038185875af1925050503d8060008114611142576040519150601f19603f3d011682016040523d82523d6000602084013e611147565b606091505b509150915061115887838387611163565b979650505050505050565b606083156111d25782516000036111cb576001600160a01b0385163b6111cb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f37565b5081610ee3565b610ee383838151156111e75781518083602001fd5b8060405162461bcd60e51b8152600401610f3791906112e0565b6001600160a01b03811681146108f357600080fd5b6000806040838503121561122957600080fd5b823561123481611201565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b8181101561127a5783518352928401929184019160010161125e565b50909695505050505050565b60006020828403121561129857600080fd5b8135610e5881611201565b6000602082840312156112b557600080fd5b5035919050565b60005b838110156112d75781810151838201526020016112bf565b50506000910152565b60208152600082518060208401526112ff8160408501602087016112bc565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561065657610656611313565b60006020828403121561134e57600080fd5b5051919050565b8051801515811461136557600080fd5b919050565b60006020828403121561137c57600080fd5b610e5882611355565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156113be576113be611385565b60405290565b60405160c0810167ffffffffffffffff811182821017156113be576113be611385565b604051601f8201601f1916810167ffffffffffffffff8111828210171561141057611410611385565b604052919050565b805161136581611201565b600082601f83011261143457600080fd5b815167ffffffffffffffff81111561144e5761144e611385565b611461601f8201601f19166020016113e7565b81815284602083860101111561147657600080fd5b610ee38260208301602087016112bc565b60006020828403121561149957600080fd5b6040516020810181811067ffffffffffffffff821117156114bc576114bc611385565b806040525080915082516114cf81611201565b905292915050565b600067ffffffffffffffff8211156114f1576114f1611385565b5060051b60200190565b600082601f83011261150c57600080fd5b8151602061152161151c836114d7565b6113e7565b82815260059290921b8401810191818101908684111561154057600080fd5b8286015b8481101561156457805161155781611201565b8352918301918301611544565b509695505050505050565b60006040828403121561158157600080fd5b6040516040810167ffffffffffffffff82821081831117156115a5576115a5611385565b8160405282935084519150808211156115bd57600080fd5b506115ca858286016114fb565b825250602083015160208201525092915050565b600082601f8301126115ef57600080fd5b815160206115ff61151c836114d7565b82815260059290921b8401810191818101908684111561161e57600080fd5b8286015b848110156115645780518352918301918301611622565b60006060828403121561164b57600080fd5b61165361139b565b9050815167ffffffffffffffff8082111561166d57600080fd5b611679858386016114fb565b835260209150818401518181111561169057600080fd5b8401601f810186136116a157600080fd5b80516116af61151c826114d7565b81815260059190911b820184019084810190888311156116ce57600080fd5b8584015b83811015611706578051868111156116ea5760008081fd5b6116f88b8983890101611423565b8452509186019186016116d2565b50808688015250505050604084015191508082111561172457600080fd5b50611731848285016115de565b60408301525092915050565b60006020828403121561174f57600080fd5b815167ffffffffffffffff8082111561176757600080fd5b9083019060c0828603121561177b57600080fd5b6117836113c4565b61178c83611418565b815261179a60208401611355565b60208201526040830151828111156117b157600080fd5b6117bd87828601611423565b6040830152506117d08660608501611487565b60608201526080830151828111156117e757600080fd5b6117f38782860161156f565b60808301525060a08301518281111561180b57600080fd5b61181787828601611639565b60a08301525095945050505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561184e57600080fd5b815160058110610e5857600080fd5b808202811582820484141761065657610656611313565b60008261189157634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561065657610656611313565b600082516118bb8184602087016112bc565b919091019291505056fea2646970667358221220f51a59d5a5d062ae728c114f059fc7e6b1678dcb901ed1e4ca85c57de9c3f3fe64736f6c63430008130033","sourceMap":"1529:9544:41:-:0;;;3550:628;;;;;;;;;;;;;;;;;;:::i;:::-;3756:7;:14;3738:7;:14;:32;3734:73;;3779:28;;-1:-1:-1;;;3779:28:41;;;;;;;;;;;3734:73;3821:7;:14;3839:1;3821:19;3817:57;;3849:25;;-1:-1:-1;;;3849:25:41;;;;;;;;;;;3817:57;3890:9;3885:103;3909:7;:14;3905:1;:18;3885:103;;;3944:33;3954:7;3962:1;3954:10;;;;;;;;:::i;:::-;;;;;;;3966:7;3974:1;3966:10;;;;;;;;:::i;:::-;;;;;;;3944:9;;;:33;;:::i;:::-;3925:3;;;;:::i;:::-;;;;3885:103;;;;4002:11;;4017:1;4002:16;3998:54;;4027:25;;-1:-1:-1;;;4027:25:41;;;;;;;;;;;3998:54;4063:13;:30;;4103:17;:38;;-1:-1:-1;;;;;4103:38:41;;;-1:-1:-1;;;;;;4103:38:41;;;;;;4063:30;;;-1:-1:-1;;;4063:30:41;4151:20;;;;-1:-1:-1;;;;;;4151:20:41;;;;4161:10;4151:20;;;-1:-1:-1;1529:9544:41;;-1:-1:-1;1529:9544:41;10670:401;10745:7;10756:1;10745:12;10741:46;;10766:21;;-1:-1:-1;;;10766:21:41;;;;;;;;;;;10741:46;10801:7;10812:1;10801:12;10797:45;;10822:20;;-1:-1:-1;;;10822:20:41;;;;;;;;;;;10797:45;10856:15;;;;:6;:15;;;;;;:20;10852:58;;10885:25;;-1:-1:-1;;;10885:25:41;;;;;;;;;;;10852:58;10921:6;:20;;;;;;;;;;;;;-1:-1:-1;10951:15:41;;;:6;10921:20;10951:15;;;;:25;;;11000:11;:21;;10969:7;;11000:21;:::i;:::-;10986:11;:35;11036:28;;;2739:25:44;;;2795:2;2780:18;;2773:34;;;11036:28:41;;2712:18:44;11036:28:41;;;;;;;10670:401;;:::o;14:127:44:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:899;211:5;264:3;257:4;249:6;245:17;241:27;231:55;;282:1;279;272:12;231:55;305:13;;337:4;-1:-1:-1;;;;;390:10:44;;;387:36;;;403:18;;:::i;:::-;449:2;446:1;442:10;481:2;475:9;544:2;540:7;535:2;531;527:11;523:25;515:6;511:38;599:6;587:10;584:22;579:2;567:10;564:18;561:46;558:72;;;610:18;;:::i;:::-;646:2;639:22;696:18;;;772:15;;;768:24;;;730:15;;;;-1:-1:-1;804:15:44;;;801:35;;;832:1;829;822:12;801:35;868:2;860:6;856:15;845:26;;880:135;896:6;891:3;888:15;880:135;;;962:10;;950:23;;993:12;;;;913;;;;880:135;;;1033:6;146:899;-1:-1:-1;;;;;;;146:899:44:o;1050:976::-;1226:6;1234;1242;1250;1303:3;1291:9;1282:7;1278:23;1274:33;1271:53;;;1320:1;1317;1310:12;1271:53;1347:16;;-1:-1:-1;;;;;1412:14:44;;;1409:34;;;1439:1;1436;1429:12;1409:34;1462:72;1526:7;1517:6;1506:9;1502:22;1462:72;:::i;:::-;1452:82;;1580:2;1569:9;1565:18;1559:25;1543:41;;1609:2;1599:8;1596:16;1593:36;;;1625:1;1622;1615:12;1593:36;;1648:74;1714:7;1703:8;1692:9;1688:24;1648:74;:::i;:::-;1765:2;1750:18;;1744:25;1638:84;;-1:-1:-1;1744:25:44;-1:-1:-1;;;;;;1798:31:44;;1788:42;;1778:70;;1844:1;1841;1834:12;1778:70;1917:2;1902:18;;1896:25;1867:5;;-1:-1:-1;1959:15:44;;1952:23;1940:36;;1930:64;;1990:1;1987;1980:12;1930:64;1050:976;;;;-1:-1:-1;1050:976:44;;-1:-1:-1;;1050:976:44:o;2031:127::-;2092:10;2087:3;2083:20;2080:1;2073:31;2123:4;2120:1;2113:15;2147:4;2144:1;2137:15;2163:127;2224:10;2219:3;2215:20;2212:1;2205:31;2255:4;2252:1;2245:15;2279:4;2276:1;2269:15;2295:135;2334:3;2355:17;;;2352:43;;2375:18;;:::i;:::-;-1:-1:-1;2422:1:44;2411:13;;2295:135::o;2435:125::-;2500:9;;;2521:10;;;2518:36;;;2534:18;;:::i;:::-;2435:125;;;;:::o;2565:248::-;1529:9544:41;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061012e5760003560e01c806354fd4d50116100ab578063a94d373b1161006f578063a94d373b146103cb578063c7104046146103f8578063c7b8981c14610418578063e33b7de31461042d578063e4bf01a814610443578063f3f44fb71461046357600080fd5b806354fd4d501461030d57806357a858fc1461034057806363037b0c1461036d578063828ce44b1461038d57806396f7ff6e146103ab57600080fd5b80633375bbdc116100f25780633375bbdc1461025257806337bdc99b1461027f5780633a98ef391461029f57806342d86693146102b55780634b945338146102d557600080fd5b806302d05d3f146101725780630357371d146101af5780631e5b4634146101d15780632081d6311461020257806327f381131461023057600080fd5b3661016d57604080513381523460208201527f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be770910160405180910390a1005b600080fd5b34801561017e57600080fd5b50600854610192906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101bb57600080fd5b506101cf6101ca366004611216565b610483565b005b3480156101dd57600080fd5b506008546101f290600160a01b900460ff1681565b60405190151581526020016101a6565b34801561020e57600080fd5b5061022261021d366004611216565b61059a565b6040519081526020016101a6565b34801561023c57600080fd5b5061024561065c565b6040516101a69190611242565b34801561025e57600080fd5b5061022261026d366004611286565b60056020526000908152604090205481565b34801561028b57600080fd5b506101cf61029a3660046112a3565b6106b4565b3480156102ab57600080fd5b5061022260005481565b3480156102c157600080fd5b506101cf6102d0366004611286565b610799565b3480156102e157600080fd5b506102226102f0366004611216565b600660209081526000928352604080842090915290825290205481565b34801561031957600080fd5b5060408051808201825260048152631a17199960e11b602082015290516101a691906112e0565b34801561034c57600080fd5b5061022261035b3660046112a3565b60026020526000908152604090205481565b34801561037957600080fd5b506102226103883660046112a3565b6108f6565b34801561039957600080fd5b506007546001600160a01b0316610192565b3480156103b757600080fd5b506101926103c63660046112a3565b610917565b3480156103d757600080fd5b506102226103e63660046112a3565b60036020526000908152604090205481565b34801561040457600080fd5b506101cf6104133660046112a3565b610b89565b34801561042457600080fd5b506101cf610d9f565b34801561043957600080fd5b5061022260015481565b34801561044f57600080fd5b5061022261045e3660046112a3565b610e27565b34801561046f57600080fd5b50600754610192906001600160a01b031681565b61048c81610b89565b6000610498838361059a565b9050806000036104bb57604051635fe559bd60e01b815260040160405180910390fd5b6001600160a01b038316600090815260056020526040812080548392906104e3908490611329565b90915550506001600160a01b0383166000908152600660209081526040808320858452909152812080548301905561051a83610917565b90506001600160a01b038116610543576040516346a3c2f960e01b815260040160405180910390fd5b604080516001600160a01b038381168252602082018590528616917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a2610594848284610e5f565b50505050565b6001600160a01b0382166000818152600560205260408082205490516370a0823160e01b8152306004820152919283926370a0823190602401602060405180830381865afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610614919061133c565b61061e9190611329565b6001600160a01b03851660009081526006602090815260408083208784529091529020549091506106529084908390610eb1565b9150505b92915050565b606060048054806020026020016040519081016040528092919081815260200182805480156106aa57602002820191906000526020600020905b815481526020019060010190808311610696575b5050505050905090565b6106bd81610b89565b60006106c882610e27565b9050806000036106eb57604051631d1514e960e21b815260040160405180910390fd5b80600160008282546106fd9190611329565b9091555050600082815260036020526040812080548301905561071f83610917565b90506001600160a01b038116610748576040516346a3c2f960e01b815260040160405180910390fd5b604080516001600160a01b0383168152602081018490527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a16107948183610eeb565b505050565b6008546001600160a01b031633146107c457604051631eab0da960e01b815260040160405180910390fd5b6008546040516370a0823160e01b81523060048201526001600160a01b03838116927f6e5fc1cbd1629d9837bd657d23cf585bbc4e9127184972606cc4c0dd406f75729291169083906370a0823190602401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133c565b604080516001600160a01b03909316835260208301919091520160405180910390a26008546040516370a0823160e01b81523060048201526108f39183916001600160a01b03918216918316906370a0823190602401602060405180830381865afa1580156108ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ee919061133c565b610e5f565b50565b6004818154811061090657600080fd5b600091825260209091200154905081565b600754604051630b8e20fb60e31b815260048101839052600091829182916001600160a01b031690635c7107d890602401602060405180830381865afa158015610965573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610989919061133c565b60075460405163245d1de360e21b8152600481018390529192506001600160a01b031690639174778c90602401602060405180830381865afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f7919061136a565b15610a0f576008546001600160a01b03169150610b82565b60075460405163325cc6d960e01b8152600481018390526000916001600160a01b03169063325cc6d990602401602060405180830381865afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d919061133c565b60075460405163b66d1da360e01b8152600481018390529192506000916001600160a01b039091169063c7f758a890829063b66d1da390602401602060405180830381865afa158015610ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af8919061133c565b6040518263ffffffff1660e01b8152600401610b1691815260200190565b600060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b5b919081019061173d565b600854909150600160a01b900460ff16610b76578051610b7d565b6060810151515b935050505b5092915050565b600760009054906101000a90046001600160a01b03166001600160a01b03166360506ff66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c00919061133c565b15610c1e5760405163018e187760e61b815260040160405180910390fd5b600760009054906101000a90046001600160a01b03166001600160a01b031663366ecf5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c95919061133c565b600114610cb557604051630fcdfffd60e41b815260040160405180910390fd5b6007546040805163c19d93fb60e01b815290516004926001600160a01b03169163c19d93fb918185019160209190819003860181865afa158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d21919061183c565b6004811115610d3257610d32611826565b14610d5057604051639c2d4c7960e01b815260040160405180910390fd5b80600003610d715760405163f9668e2960e01b815260040160405180910390fd5b60008181526002602052604081205490036108f357604051632534bdfb60e11b815260040160405180910390fd5b6008546001600160a01b03163314610dca57604051631eab0da960e01b815260040160405180910390fd5b600854604080516001600160a01b0390921682524760208301527f1d3eee4ca001cff39eec6ec7615aacf2f2bd61791273830728ba00ccbd6e1337910160405180910390a1600854610e25906001600160a01b031647610eeb565b565b60008060015447610e389190611329565b9050610e5883826003600087815260200190815260200160002054610eb1565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610794908490611009565b6000805484825260026020526040822054839190610ecf908661185d565b610ed99190611874565b610ee39190611896565b949350505050565b80471015610f405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f8d576040519150601f19603f3d011682016040523d82523d6000602084013e610f92565b606091505b50509050806107945760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610f37565b600061105e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110de9092919063ffffffff16565b905080516000148061107f57508080602001905181019061107f919061136a565b6107945760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610f37565b6060610ee3848460008585600080866001600160a01b0316858760405161110591906118a9565b60006040518083038185875af1925050503d8060008114611142576040519150601f19603f3d011682016040523d82523d6000602084013e611147565b606091505b509150915061115887838387611163565b979650505050505050565b606083156111d25782516000036111cb576001600160a01b0385163b6111cb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f37565b5081610ee3565b610ee383838151156111e75781518083602001fd5b8060405162461bcd60e51b8152600401610f3791906112e0565b6001600160a01b03811681146108f357600080fd5b6000806040838503121561122957600080fd5b823561123481611201565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b8181101561127a5783518352928401929184019160010161125e565b50909695505050505050565b60006020828403121561129857600080fd5b8135610e5881611201565b6000602082840312156112b557600080fd5b5035919050565b60005b838110156112d75781810151838201526020016112bf565b50506000910152565b60208152600082518060208401526112ff8160408501602087016112bc565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561065657610656611313565b60006020828403121561134e57600080fd5b5051919050565b8051801515811461136557600080fd5b919050565b60006020828403121561137c57600080fd5b610e5882611355565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156113be576113be611385565b60405290565b60405160c0810167ffffffffffffffff811182821017156113be576113be611385565b604051601f8201601f1916810167ffffffffffffffff8111828210171561141057611410611385565b604052919050565b805161136581611201565b600082601f83011261143457600080fd5b815167ffffffffffffffff81111561144e5761144e611385565b611461601f8201601f19166020016113e7565b81815284602083860101111561147657600080fd5b610ee38260208301602087016112bc565b60006020828403121561149957600080fd5b6040516020810181811067ffffffffffffffff821117156114bc576114bc611385565b806040525080915082516114cf81611201565b905292915050565b600067ffffffffffffffff8211156114f1576114f1611385565b5060051b60200190565b600082601f83011261150c57600080fd5b8151602061152161151c836114d7565b6113e7565b82815260059290921b8401810191818101908684111561154057600080fd5b8286015b8481101561156457805161155781611201565b8352918301918301611544565b509695505050505050565b60006040828403121561158157600080fd5b6040516040810167ffffffffffffffff82821081831117156115a5576115a5611385565b8160405282935084519150808211156115bd57600080fd5b506115ca858286016114fb565b825250602083015160208201525092915050565b600082601f8301126115ef57600080fd5b815160206115ff61151c836114d7565b82815260059290921b8401810191818101908684111561161e57600080fd5b8286015b848110156115645780518352918301918301611622565b60006060828403121561164b57600080fd5b61165361139b565b9050815167ffffffffffffffff8082111561166d57600080fd5b611679858386016114fb565b835260209150818401518181111561169057600080fd5b8401601f810186136116a157600080fd5b80516116af61151c826114d7565b81815260059190911b820184019084810190888311156116ce57600080fd5b8584015b83811015611706578051868111156116ea5760008081fd5b6116f88b8983890101611423565b8452509186019186016116d2565b50808688015250505050604084015191508082111561172457600080fd5b50611731848285016115de565b60408301525092915050565b60006020828403121561174f57600080fd5b815167ffffffffffffffff8082111561176757600080fd5b9083019060c0828603121561177b57600080fd5b6117836113c4565b61178c83611418565b815261179a60208401611355565b60208201526040830151828111156117b157600080fd5b6117bd87828601611423565b6040830152506117d08660608501611487565b60608201526080830151828111156117e757600080fd5b6117f38782860161156f565b60808301525060a08301518281111561180b57600080fd5b61181787828601611639565b60a08301525095945050505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561184e57600080fd5b815160058110610e5857600080fd5b808202811582820484141761065657610656611313565b60008261189157634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561065657610656611313565b600082516118bb8184602087016112bc565b919091019291505056fea2646970667358221220f51a59d5a5d062ae728c114f059fc7e6b1678dcb901ed1e4ca85c57de9c3f3fe64736f6c63430008130033","sourceMap":"1529:9544:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4548:38;;;4564:10;188:51:44;;4576:9:41;270:2:44;255:18;;248:34;4548:38:41;;161:18:44;4548:38:41;;;;;;;1529:9544;;;;;2525:22;;;;;;;;;;-1:-1:-1;2525:22:41;;;;-1:-1:-1;;;;;2525:22:41;;;;;;-1:-1:-1;;;;;457:32:44;;;439:51;;427:2;412:18;2525:22:41;;;;;;;;8665:865;;;;;;;;;;-1:-1:-1;8665:865:41;;;;;:::i;:::-;;:::i;:::-;;2553:25;;;;;;;;;;-1:-1:-1;2553:25:41;;;;-1:-1:-1;;;2553:25:41;;;;;;;;;1154:14:44;;1147:22;1129:41;;1117:2;1102:18;2553:25:41;989:187:44;5565:267:41;;;;;;;;;;-1:-1:-1;5565:267:41;;;;;:::i;:::-;;:::i;:::-;;;1327:25:44;;;1315:2;1300:18;5565:267:41;1181:177:44;4829:90:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2340:52::-;;;;;;;;;;-1:-1:-1;2340:52:41;;;;;:::i;:::-;;;;;;;;;;;;;;7655:749;;;;;;;;;;-1:-1:-1;7655:749:41;;;;;:::i;:::-;;:::i;1945:26::-;;;;;;;;;;;;;;;;9782:294;;;;;;;;;;-1:-1:-1;9782:294:41;;;;;:::i;:::-;;:::i;2398:67::-;;;;;;;;;;-1:-1:-1;2398:67:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4658:86;;;;;;;;;;-1:-1:-1;4730:7:41;;;;;;;;;;;-1:-1:-1;;;4730:7:41;;;;4658:86;;;;4730:7;4658:86;:::i;2012:41::-;;;;;;;;;;-1:-1:-1;2012:41:41;;;;;:::i;:::-;;;;;;;;;;;;;;2227:23;;;;;;;;;;-1:-1:-1;2227:23:41;;;;;:::i;:::-;;:::i;4988:118::-;;;;;;;;;;-1:-1:-1;5082:17:41;;-1:-1:-1;;;;;5082:17:41;4988:118;;6437:1024;;;;;;;;;;-1:-1:-1;6437:1024:41;;;;;:::i;:::-;;:::i;2113:43::-;;;;;;;;;;-1:-1:-1;2113:43:41;;;;;:::i;:::-;;;;;;;;;;;;;;5886:470;;;;;;;;;;-1:-1:-1;5886:470:41;;;;;:::i;:::-;;:::i;9536:240::-;;;;;;;;;;;;;:::i;1977:28::-;;;;;;;;;;;;;;;;5191:220;;;;;;;;;;-1:-1:-1;5191:220:41;;;;;:::i;:::-;;:::i;2472:47::-;;;;;;;;;;-1:-1:-1;2472:47:41;;;;-1:-1:-1;;;;;2472:47:41;;;8665:865;8730:25;8747:7;8730:16;:25::i;:::-;8766:15;8784:26;8795:5;8802:7;8784:10;:26::i;:::-;8766:44;;8825:7;8836:1;8825:12;8821:52;;8846:27;;-1:-1:-1;;;8846:27:41;;;;;;;;;;;8821:52;-1:-1:-1;;;;;9108:25:41;;;;;;:18;:25;;;;;:36;;9137:7;;9108:25;:36;;9137:7;;9108:36;:::i;:::-;;;;-1:-1:-1;;;;;;;9178:20:41;;;;;;:13;:20;;;;;;;;:29;;;;;;;;:40;;;;;;9281:27;9199:7;9281:18;:27::i;:::-;9239:70;-1:-1:-1;;;;;;9324:29:41;;9320:69;;9362:27;;-1:-1:-1;;;9362:27:41;;;;;;;;;;;9320:69;9405:53;;;-1:-1:-1;;;;;206:32:44;;;188:51;;270:2;255:18;;248:34;;;9405:53:41;;;;;161:18:44;9405:53:41;;;;;;;9468:55;9491:5;9498:15;9515:7;9468:22;:55::i;:::-;8720:810;;8665:865;;:::o;5565:267::-;-1:-1:-1;;;;;5713:25:41;;5637:7;5713:25;;;:18;:25;;;;;;;5680:30;;-1:-1:-1;;;5680:30:41;;5704:4;5680:30;;;439:51:44;5637:7:41;;;;5680:15;;412:18:44;;5680:30:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;;:::i;:::-;-1:-1:-1;;;;;5795:20:41;;;;;;:13;:20;;;;;;;;:29;;;;;;;;;5656:82;;-1:-1:-1;5755:70:41;;5771:7;;5656:82;;5755:15;:70::i;:::-;5748:77;;;5565:267;;;;;:::o;4829:90::-;4871:16;4906:6;4899:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4829:90;:::o;7655:749::-;7706:25;7723:7;7706:16;:25::i;:::-;7742:15;7760:19;7771:7;7760:10;:19::i;:::-;7742:37;;7794:7;7805:1;7794:12;7790:53;;7815:28;;-1:-1:-1;;;7815:28:41;;;;;;;;;;;7790:53;8047:7;8030:13;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;8088:17:41;;;;:8;:17;;;;;:28;;;;;;8179:27;8097:7;8179:18;:27::i;:::-;8137:70;-1:-1:-1;;;;;;8222:29:41;;8218:69;;8260:27;;-1:-1:-1;;;8260:27:41;;;;;;;;;;;8218:69;8303:41;;;-1:-1:-1;;;;;206:32:44;;188:51;;270:2;255:18;;248:34;;;8303:41:41;;161:18:44;8303:41:41;;;;;;;8354:43;8372:15;8389:7;8354:17;:43::i;:::-;7696:708;;7655:749;:::o;9782:294::-;9856:7;;-1:-1:-1;;;;;9856:7:41;9842:10;:21;9838:58;;9872:24;;-1:-1:-1;;;9872:24:41;;;;;;;;;;;9838:58;9940:7;;9949:30;;-1:-1:-1;;;9949:30:41;;9973:4;9949:30;;;439:51:44;-1:-1:-1;;;;;9912:68:41;;;;;;9940:7;;;9912:68;;9949:15;;412:18:44;;9949:30:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9912:68;;;-1:-1:-1;;;;;206:32:44;;;188:51;;270:2;255:18;;248:34;;;;161:18;9912:68:41;;;;;;;10028:7;;10038:30;;-1:-1:-1;;;10038:30:41;;10062:4;10038:30;;;439:51:44;9990:79:41;;10013:5;;-1:-1:-1;;;;;10028:7:41;;;;10038:15;;;;;412:18:44;;10038:30:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9990:22;:79::i;:::-;9782:294;:::o;2227:23::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2227:23:41;:::o;6437:1024::-;6599:17;;:39;;-1:-1:-1;;;6599:39:41;;;;;1327:25:44;;;6503:7:41;;;;;;-1:-1:-1;;;;;6599:17:41;;:30;;1300:18:44;;6599:39:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6749:17;;:72;;-1:-1:-1;;;6749:72:41;;;;;1327:25:44;;;6555:83:41;;-1:-1:-1;;;;;;6749:17:41;;:37;;1300:18:44;;6749:72:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6745:677;;;6855:7;;-1:-1:-1;;;;;6855:7:41;;-1:-1:-1;6745:677:41;;;7003:17;;:64;;-1:-1:-1;;;7003:64:41;;;;;1327:25:44;;;6983:17:41;;-1:-1:-1;;;;;7003:17:41;;:29;;1300:18:44;;7003:64:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7128:17;;7175:66;;-1:-1:-1;;;7175:66:41;;;;;1327:25:44;;;6983:84:41;;-1:-1:-1;7081:44:41;;-1:-1:-1;;;;;7128:17:41;;;;:29;;:17;;7175:55;;1300:18:44;;7175:66:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7128:166;;;;;;;;;;;;;1327:25:44;;1315:2;1300:18;;1181:177;7128:166:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7128:166:41;;;;;;;;;;;;:::i;:::-;7326:13;;7081:213;;-1:-1:-1;;;;7326:13:41;;;;:85;;7389:22;;7326:85;;;7342:30;;;;:44;7326:85;7308:103;;6969:453;;6745:677;-1:-1:-1;7439:15:41;6437:1024;-1:-1:-1;;6437:1024:41:o;5886:470::-;5955:17;;;;;;;;;-1:-1:-1;;;;;5955:17:41;-1:-1:-1;;;;;5955:35:41;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;5951:83;;6006:28;;-1:-1:-1;;;6006:28:41;;;;;;;;;;;5951:83;6048:17;;;;;;;;;-1:-1:-1;;;;;6048:17:41;-1:-1:-1;;;;;6048:32:41;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6086:1;6048:39;6044:76;;6096:24;;-1:-1:-1;;;6096:24:41;;;;;;;;;;;6044:76;6134:17;;:25;;;-1:-1:-1;;;6134:25:41;;;;6163:31;;-1:-1:-1;;;;;6134:17:41;;:23;;:25;;;;;;;;;;;;;:17;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;;;;;:::i;:::-;;6130:97;;6203:24;;-1:-1:-1;;;6203:24:41;;;;;;;;;;;6130:97;6241:7;6252:1;6241:12;6237:49;;6262:24;;-1:-1:-1;;;6262:24:41;;;;;;;;;;;6237:49;6300:15;;;;:6;:15;;;;;;:20;;6296:53;;6329:20;;-1:-1:-1;;;6329:20:41;;;;;;;;;;;9536:240;9598:7;;-1:-1:-1;;;;;9598:7:41;9584:10;:21;9580:58;;9614:24;;-1:-1:-1;;;9614:24:41;;;;;;;;;;;9580:58;9670:7;;9654:47;;;-1:-1:-1;;;;;9670:7:41;;;188:51:44;;9679:21:41;270:2:44;255:18;;248:34;9654:47:41;;161:18:44;9654:47:41;;;;;;;9737:7;;9711:58;;-1:-1:-1;;;;;9737:7:41;9747:21;9711:17;:58::i;:::-;9536:240::o;5191:220::-;5249:7;5268:21;5316:13;;5292:21;:37;;;;:::i;:::-;5268:61;;5346:58;5362:7;5371:13;5386:8;:17;5395:7;5386:17;;;;;;;;;;;;5346:15;:58::i;:::-;5339:65;5191:220;-1:-1:-1;;;5191:220:41:o;941:175:29:-;1050:58;;;-1:-1:-1;;;;;206:32:44;;1050:58:29;;;188:51:44;255:18;;;;248:34;;;1050:58:29;;;;;;;;;;161:18:44;;;;1050:58:29;;;;;;;;-1:-1:-1;;;;;1050:58:29;-1:-1:-1;;;1050:58:29;;;1023:86;;1043:5;;1023:19;:86::i;10247:238:41:-;10383:7;10449:11;;10430:15;;;:6;:15;;;;;;10463;;10449:11;10414:31;;:13;:31;:::i;:::-;10413:47;;;;:::i;:::-;:65;;;;:::i;:::-;10406:72;10247:238;-1:-1:-1;;;;10247:238:41:o;2647:312:30:-;2761:6;2736:21;:31;;2728:73;;;;-1:-1:-1;;;2728:73:30;;12741:2:44;2728:73:30;;;12723:21:44;12780:2;12760:18;;;12753:30;12819:31;12799:18;;;12792:59;12868:18;;2728:73:30;;;;;;;;;2813:12;2831:9;-1:-1:-1;;;;;2831:14:30;2853:6;2831:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2812:52;;;2882:7;2874:78;;;;-1:-1:-1;;;2874:78:30;;13309:2:44;2874:78:30;;;13291:21:44;13348:2;13328:18;;;13321:30;13387:34;13367:18;;;13360:62;13458:28;13438:18;;;13431:56;13504:19;;2874:78:30;13107:422:44;5196:642:29;5615:23;5641:69;5669:4;5641:69;;;;;;;;;;;;;;;;;5649:5;-1:-1:-1;;;;;5641:27:29;;;:69;;;;;:::i;:::-;5615:95;;5728:10;:17;5749:1;5728:22;:56;;;;5765:10;5754:30;;;;;;;;;;;;:::i;:::-;5720:111;;;;-1:-1:-1;;;5720:111:29;;13736:2:44;5720:111:29;;;13718:21:44;13775:2;13755:18;;;13748:30;13814:34;13794:18;;;13787:62;-1:-1:-1;;;13865:18:44;;;13858:40;13915:19;;5720:111:29;13534:406:44;4108:223:30;4241:12;4272:52;4294:6;4302:4;4308:1;4311:12;4241;5446;5460:23;5487:6;-1:-1:-1;;;;;5487:11:30;5506:5;5513:4;5487:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5445:73;;;;5535:69;5562:6;5570:7;5579:10;5591:12;5535:26;:69::i;:::-;5528:76;5165:446;-1:-1:-1;;;;;;;5165:446:30:o;7671:628::-;7851:12;7879:7;7875:418;;;7906:10;:17;7927:1;7906:22;7902:286;;-1:-1:-1;;;;;1702:19:30;;;8113:60;;;;-1:-1:-1;;;8113:60:30;;14846:2:44;8113:60:30;;;14828:21:44;14885:2;14865:18;;;14858:30;14924:31;14904:18;;;14897:59;14973:18;;8113:60:30;14644:353:44;8113:60:30;-1:-1:-1;8208:10:30;8201:17;;7875:418;8249:33;8257:10;8269:12;8980:17;;:21;8976:379;;9208:10;9202:17;9264:15;9251:10;9247:2;9243:19;9236:44;8976:379;9331:12;9324:20;;-1:-1:-1;;;9324:20:30;;;;;;;;:::i;501:139:44:-;-1:-1:-1;;;;;584:31:44;;574:42;;564:70;;630:1;627;620:12;645:339;729:6;737;790:2;778:9;769:7;765:23;761:32;758:52;;;806:1;803;796:12;758:52;845:9;832:23;864:39;897:5;864:39;:::i;:::-;922:5;974:2;959:18;;;;946:32;;-1:-1:-1;;;645:339:44:o;1363:632::-;1534:2;1586:21;;;1656:13;;1559:18;;;1678:22;;;1505:4;;1534:2;1757:15;;;;1731:2;1716:18;;;1505:4;1800:169;1814:6;1811:1;1808:13;1800:169;;;1875:13;;1863:26;;1944:15;;;;1909:12;;;;1836:1;1829:9;1800:169;;;-1:-1:-1;1986:3:44;;1363:632;-1:-1:-1;;;;;;1363:632:44:o;2000:271::-;2075:6;2128:2;2116:9;2107:7;2103:23;2099:32;2096:52;;;2144:1;2141;2134:12;2096:52;2183:9;2170:23;2202:39;2235:5;2202:39;:::i;2276:180::-;2335:6;2388:2;2376:9;2367:7;2363:23;2359:32;2356:52;;;2404:1;2401;2394:12;2356:52;-1:-1:-1;2427:23:44;;2276:180;-1:-1:-1;2276:180:44:o;2461:250::-;2546:1;2556:113;2570:6;2567:1;2564:13;2556:113;;;2646:11;;;2640:18;2627:11;;;2620:39;2592:2;2585:10;2556:113;;;-1:-1:-1;;2703:1:44;2685:16;;2678:27;2461:250::o;2716:396::-;2865:2;2854:9;2847:21;2828:4;2897:6;2891:13;2940:6;2935:2;2924:9;2920:18;2913:34;2956:79;3028:6;3023:2;3012:9;3008:18;3003:2;2995:6;2991:15;2956:79;:::i;:::-;3096:2;3075:15;-1:-1:-1;;3071:29:44;3056:45;;;;3103:2;3052:54;;2716:396;-1:-1:-1;;2716:396:44:o;3357:127::-;3418:10;3413:3;3409:20;3406:1;3399:31;3449:4;3446:1;3439:15;3473:4;3470:1;3463:15;3489:125;3554:9;;;3575:10;;;3572:36;;;3588:18;;:::i;3906:184::-;3976:6;4029:2;4017:9;4008:7;4004:23;4000:32;3997:52;;;4045:1;4042;4035:12;3997:52;-1:-1:-1;4068:16:44;;3906:184;-1:-1:-1;3906:184:44:o;4095:164::-;4171:13;;4220;;4213:21;4203:32;;4193:60;;4249:1;4246;4239:12;4193:60;4095:164;;;:::o;4264:202::-;4331:6;4384:2;4372:9;4363:7;4359:23;4355:32;4352:52;;;4400:1;4397;4390:12;4352:52;4423:37;4450:9;4423:37;:::i;4471:127::-;4532:10;4527:3;4523:20;4520:1;4513:31;4563:4;4560:1;4553:15;4587:4;4584:1;4577:15;4603:253;4675:2;4669:9;4717:4;4705:17;;4752:18;4737:34;;4773:22;;;4734:62;4731:88;;;4799:18;;:::i;:::-;4835:2;4828:22;4603:253;:::o;4861:::-;4933:2;4927:9;4975:4;4963:17;;5010:18;4995:34;;5031:22;;;4992:62;4989:88;;;5057:18;;:::i;5119:275::-;5190:2;5184:9;5255:2;5236:13;;-1:-1:-1;;5232:27:44;5220:40;;5290:18;5275:34;;5311:22;;;5272:62;5269:88;;;5337:18;;:::i;:::-;5373:2;5366:22;5119:275;;-1:-1:-1;5119:275:44:o;5399:146::-;5478:13;;5500:39;5478:13;5500:39;:::i;5550:510::-;5604:5;5657:3;5650:4;5642:6;5638:17;5634:27;5624:55;;5675:1;5672;5665:12;5624:55;5704:6;5698:13;5730:18;5726:2;5723:26;5720:52;;;5752:18;;:::i;:::-;5796:55;5839:2;5820:13;;-1:-1:-1;;5816:27:44;5845:4;5812:38;5796:55;:::i;:::-;5876:2;5867:7;5860:19;5922:3;5915:4;5910:2;5902:6;5898:15;5894:26;5891:35;5888:55;;;5939:1;5936;5929:12;5888:55;5952:77;6026:2;6019:4;6010:7;6006:18;5999:4;5991:6;5987:17;5952:77;:::i;6065:498::-;6137:5;6185:4;6173:9;6168:3;6164:19;6160:30;6157:50;;;6203:1;6200;6193:12;6157:50;6236:2;6230:9;6278:4;6270:6;6266:17;6349:6;6337:10;6334:22;6313:18;6301:10;6298:34;6295:62;6292:88;;;6360:18;;:::i;:::-;6400:10;6396:2;6389:22;;6429:6;6420:15;;6465:9;6459:16;6484:41;6517:7;6484:41;:::i;:::-;6534:23;;6065:498;;-1:-1:-1;;6065:498:44:o;6568:183::-;6628:4;6661:18;6653:6;6650:30;6647:56;;;6683:18;;:::i;:::-;-1:-1:-1;6728:1:44;6724:14;6740:4;6720:25;;6568:183::o;6756:742::-;6821:5;6874:3;6867:4;6859:6;6855:17;6851:27;6841:55;;6892:1;6889;6882:12;6841:55;6921:6;6915:13;6947:4;6971:60;6987:43;7027:2;6987:43;:::i;:::-;6971:60;:::i;:::-;7065:15;;;7151:1;7147:10;;;;7135:23;;7131:32;;;7096:12;;;;7175:15;;;7172:35;;;7203:1;7200;7193:12;7172:35;7239:2;7231:6;7227:15;7251:218;7267:6;7262:3;7259:15;7251:218;;;7340:3;7334:10;7357:39;7390:5;7357:39;:::i;:::-;7409:18;;7447:12;;;;7284;;7251:218;;;-1:-1:-1;7487:5:44;6756:742;-1:-1:-1;;;;;;6756:742:44:o;7503:633::-;7573:5;7621:4;7609:9;7604:3;7600:19;7596:30;7593:50;;;7639:1;7636;7629:12;7593:50;7672:4;7666:11;7716:4;7708:6;7704:17;7740:18;7808:6;7796:10;7793:22;7788:2;7776:10;7773:18;7770:46;7767:72;;;7819:18;;:::i;:::-;7861:10;7855:4;7848:24;7890:6;7881:15;;7925:9;7919:16;7905:30;;7958:2;7950:6;7947:14;7944:34;;;7974:1;7971;7964:12;7944:34;;8002:68;8066:3;8057:6;8046:9;8042:22;8002:68;:::i;:::-;7994:6;7987:84;;8125:2;8114:9;8110:18;8104:25;8099:2;8091:6;8087:15;8080:50;;7503:633;;;;:::o;8141:659::-;8206:5;8259:3;8252:4;8244:6;8240:17;8236:27;8226:55;;8277:1;8274;8267:12;8226:55;8306:6;8300:13;8332:4;8356:60;8372:43;8412:2;8372:43;:::i;8356:60::-;8450:15;;;8536:1;8532:10;;;;8520:23;;8516:32;;;8481:12;;;;8560:15;;;8557:35;;;8588:1;8585;8578:12;8557:35;8624:2;8616:6;8612:15;8636:135;8652:6;8647:3;8644:15;8636:135;;;8718:10;;8706:23;;8749:12;;;;8669;;8636:135;;8805:1527;8877:5;8925:4;8913:9;8908:3;8904:19;8900:30;8897:50;;;8943:1;8940;8933:12;8897:50;8965:22;;:::i;:::-;8956:31;;9016:9;9010:16;9045:18;9086:2;9078:6;9075:14;9072:34;;;9102:1;9099;9092:12;9072:34;9129:68;9193:3;9184:6;9173:9;9169:22;9129:68;:::i;:::-;9122:5;9115:83;9217:2;9207:12;;9265:2;9254:9;9250:18;9244:25;9294:2;9284:8;9281:16;9278:36;;;9310:1;9307;9300:12;9278:36;9333:24;;9388:4;9380:13;;9376:23;-1:-1:-1;9366:51:44;;9413:1;9410;9403:12;9366:51;9442:2;9436:9;9465:60;9481:43;9521:2;9481:43;:::i;9465:60::-;9559:15;;;9641:1;9637:10;;;;9629:19;;9625:28;;;9590:12;;;;9665:15;;;9662:35;;;9693:1;9690;9683:12;9662:35;9725:2;9721;9717:11;9737:353;9753:6;9748:3;9745:15;9737:353;;;9832:3;9826:10;9868:2;9855:11;9852:19;9849:109;;;9912:1;9941:2;9937;9930:14;9849:109;9983:64;10043:3;10038:2;10024:11;10020:2;10016:20;10012:29;9983:64;:::i;:::-;9971:77;;-1:-1:-1;10068:12:44;;;;9770;;9737:353;;;9741:3;10122:5;10117:2;10110:5;10106:14;10099:29;;;;;10174:2;10163:9;10159:18;10153:25;10137:41;;10203:2;10193:8;10190:16;10187:36;;;10219:1;10216;10209:12;10187:36;;10255:70;10321:3;10310:8;10299:9;10295:24;10255:70;:::i;:::-;10250:2;10243:5;10239:14;10232:94;;8805:1527;;;;:::o;10337:1254::-;10438:6;10491:2;10479:9;10470:7;10466:23;10462:32;10459:52;;;10507:1;10504;10497:12;10459:52;10540:9;10534:16;10569:18;10610:2;10602:6;10599:14;10596:34;;;10626:1;10623;10616:12;10596:34;10649:22;;;;10705:4;10687:16;;;10683:27;10680:47;;;10723:1;10720;10713:12;10680:47;10749:22;;:::i;:::-;10794:33;10824:2;10794:33;:::i;:::-;10787:5;10780:48;10860:39;10895:2;10891;10887:11;10860:39;:::i;:::-;10855:2;10848:5;10844:14;10837:63;10939:2;10935;10931:11;10925:18;10968:2;10958:8;10955:16;10952:36;;;10984:1;10981;10974:12;10952:36;11020:56;11068:7;11057:8;11053:2;11049:17;11020:56;:::i;:::-;11015:2;11008:5;11004:14;10997:80;;11109:65;11166:7;11161:2;11157;11153:11;11109:65;:::i;:::-;11104:2;11097:5;11093:14;11086:89;11214:3;11210:2;11206:12;11200:19;11244:2;11234:8;11231:16;11228:36;;;11260:1;11257;11250:12;11228:36;11297:69;11358:7;11347:8;11343:2;11339:17;11297:69;:::i;:::-;11291:3;11284:5;11280:15;11273:94;;11406:3;11402:2;11398:12;11392:19;11436:2;11426:8;11423:16;11420:36;;;11452:1;11449;11442:12;11420:36;11489:71;11552:7;11541:8;11537:2;11533:17;11489:71;:::i;:::-;11483:3;11472:15;;11465:96;-1:-1:-1;11476:5:44;10337:1254;-1:-1:-1;;;;;10337:1254:44:o;11596:127::-;11657:10;11652:3;11648:20;11645:1;11638:31;11688:4;11685:1;11678:15;11712:4;11709:1;11702:15;11728:278;11816:6;11869:2;11857:9;11848:7;11844:23;11840:32;11837:52;;;11885:1;11882;11875:12;11837:52;11917:9;11911:16;11956:1;11949:5;11946:12;11936:40;;11972:1;11969;11962:12;12011:168;12084:9;;;12115;;12132:15;;;12126:22;;12112:37;12102:71;;12153:18;;:::i;12184:217::-;12224:1;12250;12240:132;;12294:10;12289:3;12285:20;12282:1;12275:31;12329:4;12326:1;12319:15;12357:4;12354:1;12347:15;12240:132;-1:-1:-1;12386:9:44;;12184:217::o;12406:128::-;12473:9;;;12494:11;;;12491:37;;;12508:18;;:::i;14352:287::-;14481:3;14519:6;14513:13;14535:66;14594:6;14589:3;14582:4;14574:6;14570:17;14535:66;:::i;:::-;14617:16;;;;;14352:287;-1:-1:-1;;14352:287:44:o","linkReferences":{}},"methodIdentifiers":{"creator()":"02d05d3f","erc20Released(address,uint256)":"4b945338","erc20TotalReleased(address)":"3375bbdc","getAddressToPayOut(uint256)":"96f7ff6e","getPayees()":"27f38113","getUnderlyingContest()":"828ce44b","payees(uint256)":"63037b0c","paysOutTarget()":"1e5b4634","releasable(address,uint256)":"2081d631","releasable(uint256)":"e4bf01a8","release(address,uint256)":"0357371d","release(uint256)":"37bdc99b","released(uint256)":"a94d373b","runReleaseChecks(uint256)":"c7104046","shares(uint256)":"57a858fc","totalReleased()":"e33b7de3","totalShares()":"3a98ef39","underlyingContest()":"f3f44fb7","version()":"54fd4d50","withdrawRewards()":"c7b8981c","withdrawRewards(address)":"42d86693"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"payees_\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shares_\",\"type\":\"uint256[]\"},{\"internalType\":\"contract GovernorCountingSimple\",\"name\":\"underlyingContest_\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysOutTarget_\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccountAlreadyHasShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccountNotDueERC20Payment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AccountNotDueNativePayment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotPayOutToZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContestMustBeCompleted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustHaveAtLeastOnePayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustHaveDownvotingDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustHaveSortingEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCreatorCanWithdraw\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PayeesSharesLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PayoutRankCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RankingCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RankingHasNoShares\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SharesCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TotalSharesCannotBeZero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ERC20PaymentReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ERC20RewardWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"PayeeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PaymentReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PaymentReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"creator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"erc20Released\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"erc20TotalReleased\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"getAddressToPayOut\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPayees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnderlyingContest\",\"outputs\":[{\"internalType\":\"contract GovernorCountingSimple\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"payees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paysOutTarget\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"releasable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"releasable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"release\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"released\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ranking\",\"type\":\"uint256\"}],\"name\":\"runReleaseChecks\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"shares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalReleased\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlyingContest\",\"outputs\":[{\"internalType\":\"contract GovernorCountingSimple\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware that the Ether will be split in this way, since it is handled transparently by the contract. The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim an amount proportional to the percentage of total shares they were assigned. The distribution of shares is set at the time of contract deployment and can't be updated thereafter. `RewardsModule` follows a _pull payment_ model. This means that payments are not automatically forwarded to the accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} function. NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you to run tests before sending real value to this contract.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Creates an instance of `RewardsModule` where each ranking in `payees` is assigned the number of shares at the matching position in the `shares` array. All rankings in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no duplicates in `payees`.\"},\"getAddressToPayOut(uint256)\":{\"details\":\"Return address to pay out for a given ranking.\"},\"getPayees()\":{\"details\":\"Getter for list of rankings that will be paid out.\"},\"getUnderlyingContest()\":{\"details\":\"Getter for the underlying contest.\"},\"releasable(address,uint256)\":{\"details\":\"Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an IERC20 contract.\"},\"releasable(uint256)\":{\"details\":\"Getter for the amount of payee's releasable Ether.\"},\"release(address,uint256)\":{\"details\":\"Triggers a transfer to `ranking` of the amount of `token` tokens they are owed, according to their percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 contract.\"},\"release(uint256)\":{\"details\":\"Triggers a transfer to `ranking` of the amount of Ether they are owed, according to their percentage of the total shares and their previous withdrawals.\"},\"runReleaseChecks(uint256)\":{\"details\":\"Run release checks.\"},\"version()\":{\"details\":\"Version of the rewards module.\"}},\"title\":\"RewardsModule\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/RewardsModule.sol\":\"RewardsModule\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71\",\"dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68\",\"dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04\",\"dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"src/governance/Governor.sol\":{\"keccak256\":\"0x903f59bd11124b9fdcb79918dd174d4a74727e61bfd4ce0c00b293d757199914\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://1882f0edad71aee39791f0fbaa0d204deb350662a7a47738c2be2f18f0142e81\",\"dweb:/ipfs/QmWh6kL3CfXK1nUboCTNHFDqjwaf8N8ynHmaypNHpXoDM4\"]},\"src/governance/extensions/GovernorCountingSimple.sol\":{\"keccak256\":\"0x926939a083bcb63478d84c9f13c87f34dbd9aa248f2257f9cd1bc6a2e8a26b24\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://966641c9ea61d00b1a536158fb57b091d4687204b5a77a2dbc2b664067a035e0\",\"dweb:/ipfs/Qmd3cfwmg4nqkXCew8nrDsEMR2qe9YFAdFXs8q45LcswiQ\"]},\"src/governance/utils/GovernorMerkleVotes.sol\":{\"keccak256\":\"0x02d81049154ff4a8c009126a7470c9f49d076a534576a6fc3fe3f8de2c5cd608\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://21056ce53dd97ffff192a7834bd0ea2cc7691fce7e90e8c7943a9213242ba28a\",\"dweb:/ipfs/QmNzbxrT8Q2FLLQkdNUAKZyZzy4QMGm4zQsdWePWk1sxDb\"]},\"src/governance/utils/GovernorSorting.sol\":{\"keccak256\":\"0xde18aec0c9ebe63b6e210e03151770b4e470fafe53390227244615ffd9b86ad5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d02b203d82cb2773a2a97850533d67dee9e3c729475cb438c2e625c71b15a7d5\",\"dweb:/ipfs/QmXsa98RbxoxfZqRAJmP6Sw8uTYssv3HcTyKzYBtXhQE1H\"]},\"src/modules/RewardsModule.sol\":{\"keccak256\":\"0x487a8508cbdb78886d4570c650f8b1faa7f570ac1553db9cdfbd98fd213501d5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d12f2f1c565208465cf6906d478d6e851b8ae6795cc8481cd25503fb20c224a9\",\"dweb:/ipfs/QmP2uKA2gHMcabQ9TRRJchTBncyc65hFG41Fcf6gwzBE3W\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256[]","name":"payees_","type":"uint256[]"},{"internalType":"uint256[]","name":"shares_","type":"uint256[]"},{"internalType":"contract GovernorCountingSimple","name":"underlyingContest_","type":"address"},{"internalType":"bool","name":"paysOutTarget_","type":"bool"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"type":"error","name":"AccountAlreadyHasShares"},{"inputs":[],"type":"error","name":"AccountNotDueERC20Payment"},{"inputs":[],"type":"error","name":"AccountNotDueNativePayment"},{"inputs":[],"type":"error","name":"CannotPayOutToZeroAddress"},{"inputs":[],"type":"error","name":"ContestMustBeCompleted"},{"inputs":[],"type":"error","name":"MustHaveAtLeastOnePayee"},{"inputs":[],"type":"error","name":"MustHaveDownvotingDisabled"},{"inputs":[],"type":"error","name":"MustHaveSortingEnabled"},{"inputs":[],"type":"error","name":"OnlyCreatorCanWithdraw"},{"inputs":[],"type":"error","name":"PayeesSharesLengthMismatch"},{"inputs":[],"type":"error","name":"PayoutRankCannotBeZero"},{"inputs":[],"type":"error","name":"RankingCannotBeZero"},{"inputs":[],"type":"error","name":"RankingHasNoShares"},{"inputs":[],"type":"error","name":"SharesCannotBeZero"},{"inputs":[],"type":"error","name":"TotalSharesCannotBeZero"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"ERC20PaymentReleased","anonymous":false},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address","indexed":true},{"internalType":"address","name":"by","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"ERC20RewardWithdrawn","anonymous":false},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256","indexed":false},{"internalType":"uint256","name":"shares","type":"uint256","indexed":false}],"type":"event","name":"PayeeAdded","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"PaymentReceived","anonymous":false},{"inputs":[{"internalType":"address","name":"to","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"PaymentReleased","anonymous":false},{"inputs":[{"internalType":"address","name":"by","type":"address","indexed":false},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"RewardWithdrawn","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"erc20Released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"erc20TotalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"view","type":"function","name":"getAddressToPayOut","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPayees","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getUnderlyingContest","outputs":[{"internalType":"contract GovernorCountingSimple","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"payees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"paysOutTarget","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"view","type":"function","name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"view","type":"function","name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"release"},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"release"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"ranking","type":"uint256"}],"stateMutability":"view","type":"function","name":"runReleaseChecks"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"underlyingContest","outputs":[{"internalType":"contract GovernorCountingSimple","name":"","type":"address"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"version","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"withdrawRewards"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"withdrawRewards"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Creates an instance of `RewardsModule` where each ranking in `payees` is assigned the number of shares at the matching position in the `shares` array. All rankings in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no duplicates in `payees`."},"getAddressToPayOut(uint256)":{"details":"Return address to pay out for a given ranking."},"getPayees()":{"details":"Getter for list of rankings that will be paid out."},"getUnderlyingContest()":{"details":"Getter for the underlying contest."},"releasable(address,uint256)":{"details":"Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an IERC20 contract."},"releasable(uint256)":{"details":"Getter for the amount of payee's releasable Ether."},"release(address,uint256)":{"details":"Triggers a transfer to `ranking` of the amount of `token` tokens they are owed, according to their percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 contract."},"release(uint256)":{"details":"Triggers a transfer to `ranking` of the amount of Ether they are owed, according to their percentage of the total shares and their previous withdrawals."},"runReleaseChecks(uint256)":{"details":"Run release checks."},"version()":{"details":"Version of the rewards module."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@forge-std/=lib/forge-std/src/","@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/RewardsModule.sol":"RewardsModule"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305","urls":["bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5","dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69","urls":["bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71","dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1","urls":["bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68","dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa","urls":["bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931","dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol":{"keccak256":"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac","urls":["bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04","dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol":{"keccak256":"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad","urls":["bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278","dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH"],"license":"MIT"},"src/governance/Governor.sol":{"keccak256":"0x903f59bd11124b9fdcb79918dd174d4a74727e61bfd4ce0c00b293d757199914","urls":["bzz-raw://1882f0edad71aee39791f0fbaa0d204deb350662a7a47738c2be2f18f0142e81","dweb:/ipfs/QmWh6kL3CfXK1nUboCTNHFDqjwaf8N8ynHmaypNHpXoDM4"],"license":"AGPL-3.0-only"},"src/governance/extensions/GovernorCountingSimple.sol":{"keccak256":"0x926939a083bcb63478d84c9f13c87f34dbd9aa248f2257f9cd1bc6a2e8a26b24","urls":["bzz-raw://966641c9ea61d00b1a536158fb57b091d4687204b5a77a2dbc2b664067a035e0","dweb:/ipfs/Qmd3cfwmg4nqkXCew8nrDsEMR2qe9YFAdFXs8q45LcswiQ"],"license":"AGPL-3.0-only"},"src/governance/utils/GovernorMerkleVotes.sol":{"keccak256":"0x02d81049154ff4a8c009126a7470c9f49d076a534576a6fc3fe3f8de2c5cd608","urls":["bzz-raw://21056ce53dd97ffff192a7834bd0ea2cc7691fce7e90e8c7943a9213242ba28a","dweb:/ipfs/QmNzbxrT8Q2FLLQkdNUAKZyZzy4QMGm4zQsdWePWk1sxDb"],"license":"AGPL-3.0-only"},"src/governance/utils/GovernorSorting.sol":{"keccak256":"0xde18aec0c9ebe63b6e210e03151770b4e470fafe53390227244615ffd9b86ad5","urls":["bzz-raw://d02b203d82cb2773a2a97850533d67dee9e3c729475cb438c2e625c71b15a7d5","dweb:/ipfs/QmXsa98RbxoxfZqRAJmP6Sw8uTYssv3HcTyKzYBtXhQE1H"],"license":"AGPL-3.0-only"},"src/modules/RewardsModule.sol":{"keccak256":"0x487a8508cbdb78886d4570c650f8b1faa7f570ac1553db9cdfbd98fd213501d5","urls":["bzz-raw://d12f2f1c565208465cf6906d478d6e851b8ae6795cc8481cd25503fb20c224a9","dweb:/ipfs/QmP2uKA2gHMcabQ9TRRJchTBncyc65hFG41Fcf6gwzBE3W"],"license":"AGPL-3.0-only"}},"version":1},"id":41} \ No newline at end of file diff --git a/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.sol/flattenedRewardsModule.sol b/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.sol/flattenedRewardsModule.sol index 40775460c..7f954fe1f 100644 --- a/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.sol/flattenedRewardsModule.sol +++ b/packages/react-app-revamp/contracts/bytecodeAndAbi/modules/RewardsModule.sol/flattenedRewardsModule.sol @@ -2206,7 +2206,7 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { uint256 public constant MAX_FIELDS_METADATA_LENGTH = 10; uint256 public constant AMOUNT_FOR_SUMBITTER_PROOF = 10000000000000000000; address public constant JK_LABS_ADDRESS = 0xDc652C746A8F85e18Ce632d97c6118e8a52fa738; // our hot wallet that we operate from if need be, and collect revenue to on most chains - string private constant VERSION = "4.31"; // Private as to not clutter the ABI + string private constant VERSION = "4.32"; // Private as to not clutter the ABI string public name; // The title of the contest string public prompt; @@ -2264,12 +2264,12 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { error NeedToVoteWithProofFirst(); error OnlyCreatorCanDelete(); - error CannotDeleteWhenCompleted(); + error CannotDeleteWhenCompletedOrCanceled(); error OnlyJkLabsOrCreatorCanCancel(); - error ContestAlreadyCancelled(); + error ContestAlreadyCanceled(); - error CannotUpdateAfterCompleted(); + error CannotUpdateWhenCompletedOrCanceled(); error OnlyJkLabsCanAmend(); error OnlyCreatorCanAmend(); @@ -2554,7 +2554,9 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { */ function deleteProposals(uint256[] calldata proposalIdsToDelete) public { if (msg.sender != creator) revert OnlyCreatorCanDelete(); - if (state() == ContestState.Completed) revert CannotDeleteWhenCompleted(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotDeleteWhenCompletedOrCanceled(); + } for (uint256 index = 0; index < proposalIdsToDelete.length; index++) { uint256 currentProposalId = proposalIdsToDelete[index]; @@ -2585,7 +2587,7 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { if (((msg.sender != creator) && (msg.sender != JK_LABS_ADDRESS))) revert OnlyJkLabsOrCreatorCanCancel(); ContestState status = state(); - if (status == ContestState.Canceled) revert ContestAlreadyCancelled(); + if (status == ContestState.Canceled) revert ContestAlreadyCanceled(); canceled = true; @@ -2663,19 +2665,25 @@ abstract contract Governor is GovernorSorting, GovernorMerkleVotes { function setSubmissionMerkleRoot(bytes32 newSubmissionMerkleRoot) public { if (msg.sender != JK_LABS_ADDRESS) revert OnlyJkLabsCanAmend(); - if (state() == ContestState.Completed) revert CannotUpdateAfterCompleted(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } submissionMerkleRoot = newSubmissionMerkleRoot; } function setVotingMerkleRoot(bytes32 newVotingMerkleRoot) public { if (msg.sender != JK_LABS_ADDRESS) revert OnlyJkLabsCanAmend(); - if (state() == ContestState.Completed) revert CannotUpdateAfterCompleted(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } votingMerkleRoot = newVotingMerkleRoot; } function setCreatorSplitDestination(address newCreatorSplitDestination) public { if (msg.sender != creator) revert OnlyCreatorCanAmend(); - if (state() == ContestState.Completed) revert CannotUpdateAfterCompleted(); + if (state() == ContestState.Completed || state() == ContestState.Canceled) { + revert CannotUpdateWhenCompletedOrCanceled(); + } creatorSplitDestination = newCreatorSplitDestination; } } @@ -2970,7 +2978,7 @@ contract RewardsModule { mapping(uint256 => uint256) public shares; // Getter for the amount of shares held by a ranking. mapping(uint256 => uint256) public released; // Getter for the amount of Ether already released to a ranking. uint256[] public payees; - string private constant VERSION = "4.31"; // Private as to not clutter the ABI + string private constant VERSION = "4.32"; // Private as to not clutter the ABI mapping(IERC20 => uint256) public erc20TotalReleased; mapping(IERC20 => mapping(uint256 => uint256)) public erc20Released; diff --git a/packages/react-app-revamp/helpers/getContestContractVersion.ts b/packages/react-app-revamp/helpers/getContestContractVersion.ts index e392a24c9..c709c7630 100644 --- a/packages/react-app-revamp/helpers/getContestContractVersion.ts +++ b/packages/react-app-revamp/helpers/getContestContractVersion.ts @@ -49,6 +49,7 @@ import UpdateForgeLibsContract from "@contracts/bytecodeAndAbi/Contest.4.28.upda import SetSplitDestinationContract from "@contracts/bytecodeAndAbi/Contest.4.29.setSplitDestination.sol/Contest.json"; import MakeJkLabsSplitConfigurableContract from "@contracts/bytecodeAndAbi/Contest.4.30.makeJkLabsSplitConfigurable.sol/Contest.json"; import AddMetadataFieldsContract from "@contracts/bytecodeAndAbi/Contest.4.31.addMetadataFields.sol/Contest.json"; +import CheckCanceledContract from "@contracts/bytecodeAndAbi/Contest.4.32.checkCanceled.sol/Contest.json"; import NewValueAlreadyInArrayContract from "@contracts/bytecodeAndAbi/Contest.4.3.newValueAlreadyInArray.sol/Contest.json"; import UseCustomErrorsContract from "@contracts/bytecodeAndAbi/Contest.4.4.useCustomErrors.sol/Contest.json"; import CleanUpSortingContract from "@contracts/bytecodeAndAbi/Contest.4.5.cleanUpSorting.sol/Contest.json"; @@ -71,7 +72,9 @@ export async function getContestContractVersion(address: string, chainId: number const version: string = await executeWithTimeout(MAX_TIME_TO_WAIT_FOR_RPC, contract.version()); const defaultReturn = { abi: null, version: "unknown" }; - if (version === "4.31") { + if (version === "4.32") { + return { abi: CheckCanceledContract.abi, version }; + } else if (version === "4.31") { return { abi: AddMetadataFieldsContract.abi, version }; } else if (version === "4.30") { return { abi: MakeJkLabsSplitConfigurableContract.abi, version }; diff --git a/packages/react-app-revamp/helpers/getRewardsModuleContractVersion.ts b/packages/react-app-revamp/helpers/getRewardsModuleContractVersion.ts index 5e86b171c..db4039fe6 100644 --- a/packages/react-app-revamp/helpers/getRewardsModuleContractVersion.ts +++ b/packages/react-app-revamp/helpers/getRewardsModuleContractVersion.ts @@ -52,6 +52,7 @@ import UpdateForgeLibsRewards from "@contracts/bytecodeAndAbi/modules/RewardsMod import SetSplitDestinationRewards from "@contracts/bytecodeAndAbi/modules/RewardsModule.4.29.setSplitDestination.sol/RewardsModule.json"; import MakeJkLabsSplitConfigurableRewards from "@contracts/bytecodeAndAbi/modules/RewardsModule.4.30.makeJkLabsSplitConfigurable.sol/RewardsModule.json"; import AddMetadataFieldsRewards from "@contracts/bytecodeAndAbi/modules/RewardsModule.4.31.addMetadataFields.sol/RewardsModule.json"; +import CheckCanceledRewards from "@contracts/bytecodeAndAbi/modules/RewardsModule.4.32.checkCanceled.sol/RewardsModule.json"; import DeployedRewardsContract from "@contracts/bytecodeAndAbi/modules/RewardsModule.sol/RewardsModule.json"; import { ethers } from "ethers"; import { getEthersProvider } from "./ethers"; @@ -63,7 +64,9 @@ export async function getRewardsModuleContractVersion(address: string, chainId: try { const version: string = await executeWithTimeout(MAX_TIME_TO_WAIT_FOR_RPC, contract.version()); - if (version === "4.31") { + if (version === "4.32") { + return CheckCanceledRewards.abi; + } else if (version === "4.31") { return AddMetadataFieldsRewards.abi; } else if (version === "4.30") { return MakeJkLabsSplitConfigurableRewards.abi;