Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Multisig
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2022-05-21 */ // SPDX-License-Identifier: MIT LICENSE // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [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://diligence.consensys.net/posts/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.5.11/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 functionCall(target, data, "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"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(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) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(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) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason 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 { // 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/Controllable.sol pragma solidity 0.8.9; contract Controllable is Ownable { mapping (address => bool) controllers; event ControllerAdded(address); event ControllerRemoved(address); modifier onlyController() { require(controllers[_msgSender()] || _msgSender() == owner(), "Only controllers can do that"); _; } /*** ADMIN ***/ /** * enables an address to mint / burn * @param controller the address to enable */ function addController(address controller) external onlyOwner { if (!controllers[controller]) { controllers[controller] = true; emit ControllerAdded(controller); } } /** * disables an address from minting / burning * @param controller the address to disbale */ function removeController(address controller) external onlyOwner { if (controllers[controller]) { controllers[controller] = false; emit ControllerRemoved(controller); } } } // File: contracts/Multisig.sol pragma solidity 0.8.9; interface IMultisig { enum ProposalType{ COMMUNITY, TEAM, DEV } struct Proposal { address proposer; uint64 idx; uint64 creationTime; ProposalType proposalType; bool devVeto; bool inactive; bool executed; bool reverted; address[] devsFor; address[] teamFor; address[] communityFor; bytes4[] signature; address[] target; uint256[] value; string[] fun; bytes[] data; string revertReason; } event DevAdded(address a); event TeamAdded(address a); event CommunityAdded(address a); event DevRemoved(address a); event TeamRemoved(address a); event CommunityRemoved(address a); event ProposalCreated(uint256 timestamp, uint256 indexed id, ProposalType proposalType, address indexed proposer); event ProposalExecuted(uint256 timestamp, uint256 indexed id); event ProposalCanceled(uint256 timestamp, uint256 indexed id); event UserApproval(uint256 timestamp, uint256 indexed id); event UserDismissal(uint256 timestamp, uint256 indexed id); } contract Multisig is IMultisig { mapping (uint256 => Proposal) proposals; uint64[] activeProposals; uint64[] inactiveProposals; uint64 proposalCount; mapping (address => bool) devs; mapping (address => bool) team; mapping (address => bool) community; address[] public devList; address[] public teamList; address[] public communityList; uint32 constant DEV_PROPOSAL_DELAY = 120 seconds; uint32 constant TEAM_PROPOSAL_DELAY = 3 days; uint32 constant COMMUNITY_PROPOSAL_DELAY = 7 days; uint32 constant TYPE1_DELAY = 24 hours; uint32 constant TYPE2_DELAY = 72 hours; uint32 constant TYPE3_DELAY = 1 weeks; uint32 constant TYPE4_DELAY = 4 weeks; uint32 constant EXPIRATION_DELAY = 5 weeks; uint32 constant DEV_KICK_GRACE_DELAY = 180 days; uint32 constant TEAM_KICK_GRACE_DELAY = 120 days; uint32 constant COMMUNITY_KICK_GRACE_DELAY = 7 days; uint256 constant PROPOSAL_PRICE = 1 ether / 10; mapping (address => uint256) pingTime; modifier onlyWithRole() { require(_hasAnyRole(msg.sender), "Only members can do this"); _; } modifier onlySelf() { require(msg.sender == address(this), "Only self please"); _; } constructor(address[] memory _devs, address[] memory _team, address[] memory _community) { for (uint256 i = 0; i < _devs.length; i++) { _addDev(_devs[i]); } for (uint256 i = 0; i < _team.length; i++) { _addTeam(_team[i]); } for (uint256 i = 0; i < _community.length; i++) { _addCommunity(_community[i]); } } function ping() external { _ping(msg.sender); } function addDevMemberProposal(address _a) external payable onlyWithRole { require(!_hasAnyRole(_a), "This address already has a role"); _ping(msg.sender); _addProposal(address(this), "addDev(address)", 0, abi.encode(_a)); } function addTeamMemberProposal(address _a) external payable onlyWithRole { require(!_hasAnyRole(_a), "This address already has a role"); _ping(msg.sender); _addProposal(address(this), "addTeam(address)", 0, abi.encode(_a)); } function addCommunityMemberProposal(address _a) external payable onlyWithRole { require(!_hasAnyRole(_a), "This address already has a role"); _ping(msg.sender); _addProposal(address(this), "addCommunity(address)", 0, abi.encode(_a)); } function addRemoveDevMemberProposal(address _a) external payable onlyWithRole { require(devs[_a], "It is not a dev"); require(pingTime[_a] + DEV_KICK_GRACE_DELAY < block.timestamp, "Dev is active"); _ping(msg.sender); _addProposal(address(this), "removeDev(address)", 0, abi.encode(_a)); } function addRemoveTeamMemberProposal(address _a) external payable onlyWithRole { require(team[_a], "It is not a team member"); require(pingTime[_a] + TEAM_KICK_GRACE_DELAY < block.timestamp, "Team member is active"); _ping(msg.sender); _addProposal(address(this), "removeTeam(address)", 0, abi.encode(_a)); } function addRemoveCommunityMemberProposal(address _a) external payable onlyWithRole { require(community[_a], "It is not a community member"); require(pingTime[_a] + COMMUNITY_KICK_GRACE_DELAY < block.timestamp, "Community member is active"); _ping(msg.sender); _addProposal(address(this), "removeCommunity(address)", 0, abi.encode(_a)); } function addWithdrawProposal(address _recipient, uint256 _value) external payable onlyWithRole { require(_recipient != address(this), "Don't call the multisig like that"); _ping(msg.sender); _addProposal(_recipient, "", _value, bytes("")); } function addERC20TransferProposal(address _token, address _recipient, uint256 _amount) external payable onlyWithRole { require(_token != address(this), "Don't call the multisig like that"); _ping(msg.sender); _addProposal(_token, "transfer(address,uint256)", 0, abi.encode(_recipient, _amount)); } function addGenericProposal(address _target, string memory _fun, uint256 _value, bytes memory _data) external payable onlyWithRole { require(_target != address(this), "Don't call the multisig like that"); for (uint256 i = 0; i < bytes(_fun).length; i++) { require(bytes(_fun)[i] != 0x20, "No spaces in fun please"); } _ping(msg.sender); _addProposal(_target, _fun, _value, _data); } function addGenericBatchedProposal(address[] memory _target, string[] memory _fun, uint256[] memory _value, bytes[] memory _data) external payable onlyWithRole { for (uint256 i = 0; i < _target.length; i++) { require(_target[i] != address(this), "Don't call the multisig like that"); for (uint256 j = 0; j < bytes(_fun[i]).length; j++) { require(bytes(_fun[i])[j] != 0x20, "No spaces in fun please"); } } _ping(msg.sender); _addBatchedProposal(_target, _fun, _value, _data); } function approveProposal(uint256 _id) external onlyWithRole { Proposal memory tmp = proposals[_id]; require(tmp.creationTime != 0, "Proposal does not exist"); require(!tmp.inactive, "Already inactive"); _ping(msg.sender); if (devs[msg.sender]) { require(!_isMemberOf(tmp.devsFor, msg.sender), "Already approved"); proposals[_id].devsFor.push(msg.sender); } else if (team[msg.sender]) { require(!_isMemberOf(tmp.teamFor, msg.sender), "Already approved"); proposals[_id].teamFor.push(msg.sender); } else if (community[msg.sender]) { require(!_isMemberOf(tmp.communityFor, msg.sender), "Already approved"); proposals[_id].communityFor.push(msg.sender); } emit UserApproval(block.timestamp, _id); if (_executionAllowed(_id)) { _execute(_id); } } function dismissProposal(uint256 _id) external onlyWithRole { require(proposals[_id].creationTime != 0, "Proposal does not exist"); require(!proposals[_id].inactive, "Already inactive"); _ping(msg.sender); if (devs[msg.sender]) { proposals[_id].devsFor = _removeMemberFromList(proposals[_id].devsFor, msg.sender); proposals[_id].devVeto = true; } else if (team[msg.sender]) { require(_isMemberOf(proposals[_id].teamFor, msg.sender), "Did not vote for or already dismissed"); proposals[_id].teamFor = _removeMemberFromList(proposals[_id].teamFor, msg.sender); } else if (community[msg.sender]) { require(_isMemberOf(proposals[_id].communityFor, msg.sender), "Did not vote for or already dismissed"); proposals[_id].communityFor = _removeMemberFromList(proposals[_id].communityFor, msg.sender); } emit UserDismissal(block.timestamp, _id); if (_cancellationAllowed(_id)) { _cancel(_id); } } function executeProposal(uint256 _id) external onlyWithRole { _ping(msg.sender); _execute(_id); } function cancelProposal(uint256 _id) external onlyWithRole { _ping(msg.sender); _cancel(_id); } /*** SELF CALLS ***/ function addDev(address _a) external onlySelf { require(!_hasAnyRole(_a), "This address already has a role"); _addDev(_a); } function addTeam(address _a) external onlySelf { require(!_hasAnyRole(_a), "This address already has a role"); _addTeam(_a); } function addCommunity(address _a) external onlySelf { require(!_hasAnyRole(_a), "This address already has a role"); _addCommunity(_a); } function removeDev(address _a) external onlySelf { _removeDev(_a); } function removeTeam(address _a) external onlySelf { _removeTeam(_a); } function removeCommunity(address _a) external onlySelf { _removeCommunity(_a); } function executeOrRevert(uint256 _id) external onlySelf { string memory reason; for (uint256 i = 0; i < proposals[_id].target.length; i++){ (bool success, bytes memory retData) = proposals[_id].target[i].call{value: proposals[_id].value[i]}(abi.encodePacked(proposals[_id].signature[i], proposals[_id].data[i])); reason = string(abi.encodePacked(reason,"|")); if (!success && retData.length >= 68) { assembly { // Slice the sighash. retData := add(retData, 0x04) } reason = string(abi.encodePacked(reason,abi.decode(retData, (string)))); } if (!success) revert(reason); } } /*** GETTERS ***/ function getPingTime(address _a) external view returns (uint256) { return pingTime[_a]; } function isDev(address _a) external view returns (bool) { return devs[_a]; } function isTeam(address _a) external view returns (bool) { return team[_a]; } function isCommunity(address _a) external view returns (bool) { return community[_a]; } function getDevCount() external view returns (uint256) { return devList.length; } function getTeamCount() external view returns (uint256) { return teamList.length; } function getCommunityCount() external view returns (uint256) { return communityList.length; } function getProposal(uint256 _id) external view returns (Proposal memory) { return proposals[_id]; } function getProposalCount() external view returns (uint256) { return proposalCount; } function getActiveProposal(uint256 _id) external view returns (uint64) { return activeProposals[_id]; } function getActiveProposalCount() external view returns (uint256) { return activeProposals.length; } function getInactiveProposal(uint256 _id) external view returns (uint64) { return inactiveProposals[_id]; } function getInactiveProposalCount() external view returns (uint256) { return inactiveProposals.length; } function canBeExecuted(uint256 _id) external view returns (bool) { return _executionAllowed(_id); } function canBeCanceled(uint256 _id) external view returns (bool) { return _cancellationAllowed(_id); } /*** INTERNAL ***/ function _ping(address _a) internal { pingTime[_a] = block.timestamp; } function _addDev(address _a) internal { require(!_hasAnyRole(_a), "This address already has a role"); if (!devs[_a]) { _ping(_a); devs[_a] = true; devList.push(_a); emit DevAdded(_a); } } function _addTeam(address _a) internal { require(!_hasAnyRole(_a), "This address already has a role"); if (!team[_a]) { _ping(_a); team[_a] = true; teamList.push(_a); emit TeamAdded(_a); } } function _addCommunity(address _a) internal { require(!_hasAnyRole(_a), "This address already has a role"); if (!community[_a]) { _ping(_a); community[_a] = true; communityList.push(_a); emit CommunityAdded(_a); } } function _removeDev(address _a) internal { require(devList.length > 1, "At least 1 dev member should remain"); require(pingTime[_a] + COMMUNITY_KICK_GRACE_DELAY < block.timestamp, "Dev is active"); if (devs[_a]) { devs[_a] = false; for (uint256 i = 0; i < devList.length; i++) { if (devList[i] == _a) { devList[i] = devList[devList.length - 1]; devList.pop(); break; } } emit DevRemoved(_a); } } function _removeTeam(address _a) internal { require(teamList.length > 1, "At least 1 team member should remain"); require(pingTime[_a] + TEAM_KICK_GRACE_DELAY < block.timestamp, "Team member is active"); if (team[_a]) { team[_a] = false; for (uint256 i = 0; i < teamList.length; i++) { if (teamList[i] == _a) { teamList[i] = teamList[teamList.length - 1]; teamList.pop(); break; } } emit TeamRemoved(_a); } } function _removeCommunity(address _a) internal { require(communityList.length > 1, "At least 1 community member should remain"); require(pingTime[_a] + COMMUNITY_KICK_GRACE_DELAY < block.timestamp, "Community member is active"); if (community[_a]) { community[_a] = false; for (uint256 i = 0; i < communityList.length; i++) { if (communityList[i] == _a) { communityList[i] = communityList[communityList.length - 1]; communityList.pop(); break; } } emit CommunityRemoved(_a); } } function _addProposal(address _target, string memory _fun, uint256 _value, bytes memory _data) internal { address[] memory target = new address[](1); target[0] = _target; string[] memory fun = new string[](1); fun[0] = _fun; uint256[] memory value = new uint256[](1); value[0] = _value; bytes[] memory data = new bytes[](1); data[0] = _data; _addBatchedProposal(target, fun, value, data); } function _addBatchedProposal(address[] memory _target, string[] memory _fun, uint256[] memory _value, bytes[] memory _data) internal { require(devs[msg.sender] || team[msg.sender] || community[msg.sender], "Only members can do this"); require(_target.length == _fun.length && _fun.length == _value.length && _value.length == _data.length, "Params must be the same length"); proposalCount++; Proposal memory tmp; tmp.creationTime = uint64(block.timestamp); tmp.proposalType = ProposalType.COMMUNITY; if (team[msg.sender]) tmp.proposalType = ProposalType.TEAM; if (devs[msg.sender]) tmp.proposalType = ProposalType.DEV; require(tmp.proposalType != ProposalType.COMMUNITY && msg.value == 0 || msg.value == PROPOSAL_PRICE, "Pay exact proposal price"); tmp.signature = new bytes4[](_target.length); tmp.data = _data; tmp.proposer = msg.sender; tmp.target = _target; tmp.value = _value; tmp.fun = _fun; for (uint256 i = 0; i < _fun.length; i++) { require(bytes(_fun[i]).length == 0 || bytes(_fun[i]).length >=3, "provide a valid function specification"); if (bytes(_fun[i]).length != 0) { tmp.signature[i] = (bytes4(keccak256(bytes(_fun[i])))); } else { tmp.signature[i] = ""; } } tmp.idx = uint64(activeProposals.length); proposals[proposalCount] = tmp; activeProposals.push(proposalCount); emit ProposalCreated(uint64(block.timestamp), proposalCount, tmp.proposalType, msg.sender); } function _execute(uint256 _id) internal { require(proposals[_id].creationTime != 0, "Proposal does not exist"); require(_executionAllowed(_id), "Execution not allowed"); _inactivateProposal(_id); proposals[_id].executed = true; (bool success, bytes memory retData) = address(this).call{value: 0}(abi.encodeWithSignature("executeOrRevert(uint256)", _id)); proposals[_id].reverted = !success; if (!success && retData.length >= 68) { assembly { // Slice the sighash. retData := add(retData, 0x04) } proposals[_id].revertReason = abi.decode(retData, (string)); } emit ProposalExecuted(uint64(block.timestamp), uint64(_id)); } function _cancel(uint256 _id) internal { require(proposals[_id].creationTime != 0, "Proposal does not exist"); require(_cancellationAllowed(_id), "Cancellation not allowed"); _inactivateProposal(_id); emit ProposalCanceled(uint64(block.timestamp), uint64(_id)); } function _inactivateProposal(uint256 _id) internal { require(!proposals[_id].inactive, "Already inactive"); proposals[_id].inactive = true; if (proposals[_id].idx != activeProposals.length - 1) { proposals[activeProposals[activeProposals.length - 1]].idx = proposals[_id].idx; activeProposals[proposals[_id].idx] = activeProposals[activeProposals.length - 1]; } proposals[_id].idx = uint64(inactiveProposals.length); inactiveProposals.push(uint64(_id)); activeProposals.pop(); } function _executionAllowed(uint256 _id) internal view returns (bool) { Proposal memory tmp = proposals[_id]; require(tmp.creationTime > 0, "Proposal does not exist"); require(!tmp.inactive, "Already inactive"); if (tmp.devVeto) return false; uint256 startTime = tmp.creationTime; if (tmp.proposalType == ProposalType.COMMUNITY) { startTime += COMMUNITY_PROPOSAL_DELAY; } else if (tmp.proposalType == ProposalType.TEAM) { startTime += TEAM_PROPOSAL_DELAY; } else if (tmp.proposalType == ProposalType.DEV) { startTime += DEV_PROPOSAL_DELAY; } // dont run after expiration if (block.timestamp >= startTime + EXPIRATION_DELAY) return false; uint256 df = tmp.devsFor.length; if (block.timestamp >= tmp.creationTime + DEV_PROPOSAL_DELAY && df >= devList.length) return true; // dont allow before start if (block.timestamp < startTime) return false; uint256 tf = tmp.teamFor.length; uint256 cf = tmp.communityFor.length; uint256 ct = 1; if (communityList.length > ct + 2) ct = communityList.length - 2; if (ct > 3) ct = 3; if (block.timestamp > startTime && df >= (devList.length <= 2 ? 2 : devList.length - 1)) return true; if (block.timestamp > startTime + TYPE1_DELAY && df >= 1 && tf >= 1 && cf >= ct) return true; if (block.timestamp > startTime + TYPE2_DELAY && df >= 1 && tf >= 1 && cf >= 1) return true; if (block.timestamp > startTime + TYPE2_DELAY && df >= 1 && cf >= ct) return true; ct = 1; if (communityList.length > ct + 2) ct = communityList.length - 2; if (ct > 4) ct = 4; if (block.timestamp > startTime + TYPE3_DELAY && tf >= 1 && cf >= ct) return true; if (block.timestamp > startTime + TYPE4_DELAY && cf >= communityList.length - 1) return true; return false; } function _cancellationAllowed(uint256 _id) internal view returns (bool) { Proposal memory tmp = proposals[_id]; require(tmp.creationTime > 0, "Proposal does not exist"); require(!tmp.inactive, "Already inactive"); if (tmp.devVeto) return true; uint256 startTime = tmp.creationTime; if (tmp.proposalType == ProposalType.COMMUNITY) { startTime += COMMUNITY_PROPOSAL_DELAY; } else if (tmp.proposalType == ProposalType.TEAM) { startTime += TEAM_PROPOSAL_DELAY; } else if (tmp.proposalType == ProposalType.DEV) { startTime += DEV_PROPOSAL_DELAY; } if (block.timestamp >= startTime + EXPIRATION_DELAY) return true; return false; } function _hasAnyRole(address _a) internal view returns (bool) { return devs[_a] || team[_a] || community[_a]; } /*** HELPERS ***/ function _isMemberOf(address[] memory _list, address _a) internal pure returns (bool) { for (uint256 i = 0; i < _list.length; i++) { if (_list[i] == _a) return true; } return false; } function _removeMemberFromList(address[] memory _list, address _a) internal pure returns (address[] memory) { if (!_isMemberOf(_list, _a) || _list.length == 0) return _list; address[] memory tmp = new address[](_list.length - 1); uint256 i = 0; uint256 j = 0; for (; i < _list.length; i++) { if (_list[i] != _a) { tmp[j] = _list[i]; j++; } } return tmp; } fallback() external payable {} receive() external payable {} }
[{"inputs":[{"internalType":"address[]","name":"_devs","type":"address[]"},{"internalType":"address[]","name":"_team","type":"address[]"},{"internalType":"address[]","name":"_community","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"CommunityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"CommunityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"DevAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"DevRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"enum IMultisig.ProposalType","name":"proposalType","type":"uint8"},{"indexed":true,"internalType":"address","name":"proposer","type":"address"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"TeamAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"TeamRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"UserApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"UserDismissal","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"addCommunity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"addCommunityMemberProposal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"addDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"addDevMemberProposal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"addERC20TransferProposal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_target","type":"address[]"},{"internalType":"string[]","name":"_fun","type":"string[]"},{"internalType":"uint256[]","name":"_value","type":"uint256[]"},{"internalType":"bytes[]","name":"_data","type":"bytes[]"}],"name":"addGenericBatchedProposal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"string","name":"_fun","type":"string"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"addGenericProposal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"addRemoveCommunityMemberProposal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"addRemoveDevMemberProposal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"addRemoveTeamMemberProposal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"addTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"addTeamMemberProposal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"addWithdrawProposal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"approveProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"canBeCanceled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"canBeExecuted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"cancelProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"communityList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"devList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"dismissProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"executeOrRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"executeProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getActiveProposal","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getActiveProposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCommunityCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDevCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getInactiveProposal","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInactiveProposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"getPingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getProposal","outputs":[{"components":[{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint64","name":"idx","type":"uint64"},{"internalType":"uint64","name":"creationTime","type":"uint64"},{"internalType":"enum IMultisig.ProposalType","name":"proposalType","type":"uint8"},{"internalType":"bool","name":"devVeto","type":"bool"},{"internalType":"bool","name":"inactive","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"bool","name":"reverted","type":"bool"},{"internalType":"address[]","name":"devsFor","type":"address[]"},{"internalType":"address[]","name":"teamFor","type":"address[]"},{"internalType":"address[]","name":"communityFor","type":"address[]"},{"internalType":"bytes4[]","name":"signature","type":"bytes4[]"},{"internalType":"address[]","name":"target","type":"address[]"},{"internalType":"uint256[]","name":"value","type":"uint256[]"},{"internalType":"string[]","name":"fun","type":"string[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"string","name":"revertReason","type":"string"}],"internalType":"struct IMultisig.Proposal","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTeamCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"isCommunity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"isDev","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"isTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"removeCommunity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"removeDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"removeTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"teamList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162006697380380620066978339810160408190526200003491620005e8565b60005b835181101562000083576200006e8482815181106200005a576200005a62000679565b60200260200101516200012d60201b60201c565b806200007a816200068f565b91505062000037565b5060005b8251811015620000d357620000be838281518110620000aa57620000aa62000679565b60200260200101516200025a60201b60201c565b80620000ca816200068f565b91505062000087565b5060005b815181101562000123576200010e828281518110620000fa57620000fa62000679565b60200260200101516200037c60201b60201c565b806200011a816200068f565b915050620000d7565b50505050620006b9565b62000138816200049e565b156200017a5760405162461bcd60e51b815260206004820152601f60248201526000805160206200667783398151915260448201526064015b60405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff166200025757620001bc816001600160a01b03166000908152600a60205260409020429055565b6001600160a01b0381166000818152600460209081526040808320805460ff191660019081179091556007805491820181559093527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b0319168417905590519182527f62bdcff6770832ed27a318b408d43d6b8454fbca399faa678141178eb9298ddb91015b60405180910390a15b50565b62000265816200049e565b15620002a35760405162461bcd60e51b815260206004820152601f602482015260008051602062006677833981519152604482015260640162000171565b6001600160a01b03811660009081526005602052604090205460ff166200025757620002e5816001600160a01b03166000908152600a60205260409020429055565b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556008805491820181559093527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390920180546001600160a01b0319168417905590519182527f3f5f1db80208f0d453083a86e16909cecc1e95e2618d5d927c93ace22b8200fc91016200024e565b62000387816200049e565b15620003c55760405162461bcd60e51b815260206004820152601f602482015260008051602062006677833981519152604482015260640162000171565b6001600160a01b03811660009081526006602052604090205460ff16620002575762000407816001600160a01b03166000908152600a60205260409020429055565b6001600160a01b0381166000818152600660209081526040808320805460ff191660019081179091556009805491820181559093527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90920180546001600160a01b0319168417905590519182527f3df6de6f7acbd50ccf5d3352eaf45f9eaf44b2b259e62a4c04351fdea533287391016200024e565b6001600160a01b03811660009081526004602052604081205460ff1680620004de57506001600160a01b03821660009081526005602052604090205460ff165b806200050257506001600160a01b03821660009081526006602052604090205460ff165b92915050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200053657600080fd5b919050565b600082601f8301126200054d57600080fd5b815160206001600160401b03808311156200056c576200056c62000508565b8260051b604051601f19603f8301168101818110848211171562000594576200059462000508565b604052938452858101830193838101925087851115620005b357600080fd5b83870191505b84821015620005dd57620005cd826200051e565b83529183019190830190620005b9565b979650505050505050565b600080600060608486031215620005fe57600080fd5b83516001600160401b03808211156200061657600080fd5b62000624878388016200053b565b945060208601519150808211156200063b57600080fd5b62000649878388016200053b565b935060408601519150808211156200066057600080fd5b506200066f868287016200053b565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b6000600019821415620006b257634e487b7160e01b600052601160045260246000fd5b5060010190565b615fae80620006c96000396000f3fe6080604052600436106102275760003560e01c806398951b5611610122578063c122b3cb116100a5578063e05d78181161006c578063e05d7818146106b2578063e0a8f6f5146106c5578063e2ff4298146106e5578063e546d9c4146106f8578063fb49b24b1461071857005b8063c122b3cb14610610578063c4026d7b14610625578063c7f758a814610645578063d36afe6614610672578063d57a4a4a1461069257005b8063b1925007116100e9578063b19250071461057d578063b19c01db1461059d578063b463a75c146105b2578063b91d3ace146105d2578063c08cc02d146105f257005b806398951b56146104dc5780639905a9f7146104fc578063993fa20b146105115780639dc0dc1e1461054a578063a681b7ba1461055d57005b806349888822116101aa578063624dfb6311610171578063624dfb631461043e5780637347d9ed146104765780637986b459146104895780638c2a593a1461049c57806392634540146104bc57005b806349888822146103cc57806350be74b3146103df5780635c36b186146103f45780635e6a61ce146104095780636232db751461041e57005b8063248123fd116101ee578063248123fd14610316578063248519141461035a5780633188185514610393578063351dda69146103a657806336061f9f146103b957005b80630c3f64bf146102305780630cdc92ea1461027e5780630d61b5191461029e57806319aa69b9146102be5780631f3dc8c3146102f657005b3661022e57005b005b34801561023c57600080fd5b5061026961024b36600461533e565b6001600160a01b031660009081526004602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561028a57600080fd5b50610269610299366004615360565b61072b565b3480156102aa57600080fd5b5061022e6102b9366004615360565b61073c565b3480156102ca57600080fd5b506102de6102d9366004615360565b61077f565b6040516001600160a01b039091168152602001610275565b34801561030257600080fd5b5061022e610311366004615360565b6107a9565b34801561032257600080fd5b5061034c61033136600461533e565b6001600160a01b03166000908152600a602052604090205490565b604051908152602001610275565b34801561036657600080fd5b5061026961037536600461533e565b6001600160a01b031660009081526005602052604090205460ff1690565b61022e6103a136600461533e565b610bd8565b61022e6103b436600461533e565b610c8e565b61022e6103c736600461533e565b610df6565b61022e6103da366004615379565b610e9e565b3480156103eb57600080fd5b5060025461034c565b34801561040057600080fd5b5061022e610f5d565b34801561041557600080fd5b5060015461034c565b34801561042a57600080fd5b5061022e61043936600461533e565b610f68565b34801561044a57600080fd5b5061045e610459366004615360565b610fb6565b6040516001600160401b039091168152602001610275565b61022e61048436600461533e565b610ffb565b61022e610497366004615478565b61109e565b3480156104a857600080fd5b506102696104b7366004615360565b611195565b3480156104c857600080fd5b5061022e6104d736600461533e565b6111a0565b3480156104e857600080fd5b5061022e6104f7366004615360565b6111c8565b34801561050857600080fd5b5060085461034c565b34801561051d57600080fd5b5061026961052c36600461533e565b6001600160a01b031660009081526006602052604090205460ff1690565b61022e6105583660046154f5565b61197b565b34801561056957600080fd5b506102de610578366004615360565b6119fc565b34801561058957600080fd5b5061022e610598366004615360565b611a0c565b3480156105a957600080fd5b5060075461034c565b3480156105be57600080fd5b5061022e6105cd36600461533e565b611c49565b3480156105de57600080fd5b5061022e6105ed36600461533e565b611c97565b3480156105fe57600080fd5b506003546001600160401b031661034c565b34801561061c57600080fd5b5060095461034c565b34801561063157600080fd5b5061022e61064036600461533e565b611ce5565b34801561065157600080fd5b50610665610660366004615360565b611d0d565b60405161027591906156b2565b34801561067e57600080fd5b506102de61068d366004615360565b612296565b34801561069e57600080fd5b5061045e6106ad366004615360565b6122a6565b61022e6106c036600461533e565b6122bb565b3480156106d157600080fd5b5061022e6106e0366004615360565b6123fa565b61022e6106f33660046159f8565b612431565b34801561070457600080fd5b5061022e61071336600461533e565b612595565b61022e61072636600461533e565b6125bd565b600061073682612713565b92915050565b61074533612daf565b61076a5760405162461bcd60e51b815260040161076190615af4565b60405180910390fd5b61077333612e13565b61077c81612e2f565b50565b6008818154811061078f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6107b233612daf565b6107ce5760405162461bcd60e51b815260040161076190615af4565b6000818152602081905260409020600101546001600160401b03166108055760405162461bcd60e51b815260040161076190615b2b565b600081815260208190526040902060010154600160501b900460ff161561083e5760405162461bcd60e51b815260040161076190615b62565b61084733612e13565b3360009081526004602052604090205460ff161561091f576000818152602081815260409182902060020180548351818402810184019094528084526108cc93928301828280156108c157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108a3575b505050505033613030565b60008281526020818152604090912082516108f1936002909201929190910190614fa1565b506000818152602081905260409020600101805469ff0000000000000000001916600160481b179055610b87565b3360009081526005602052604090205460ff1615610a56576000818152602081815260409182902060030180548351818402810184019094528084526109a4939283018282801561099957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161097b575b505050505033613153565b6109c05760405162461bcd60e51b815260040161076190615b8c565b600081815260208181526040918290206003018054835181840281018401909452808452610a2b93928301828280156108c1576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116108a357505050505033613030565b6000828152602081815260409091208251610a50936003909201929190910190614fa1565b50610b87565b3360009081526006602052604090205460ff1615610b8757600081815260208181526040918290206004018054835181840281018401909452808452610ad99392830182828015610999576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161097b57505050505033613153565b610af55760405162461bcd60e51b815260040161076190615b8c565b600081815260208181526040918290206004018054835181840281018401909452808452610b6093928301828280156108c1576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116108a357505050505033613030565b6000828152602081815260409091208251610b85936004909201929190910190614fa1565b505b807fae98e60326f4f5b5b56e640ace27f530fda97f710c1a1f44dee30ac061362e5742604051610bb991815260200190565b60405180910390a2610bca81612713565b1561077c5761077c816131af565b610be133612daf565b610bfd5760405162461bcd60e51b815260040161076190615af4565b610c0681612daf565b15610c235760405162461bcd60e51b815260040161076190615bd1565b610c2c33612e13565b61077c306040518060400160405280600f81526020016e61646444657628616464726573732960881b815250600084604051602001610c7a91906001600160a01b0391909116815260200190565b604051602081830303815290604052613287565b610c9733612daf565b610cb35760405162461bcd60e51b815260040161076190615af4565b6001600160a01b03811660009081526006602052604090205460ff16610d1b5760405162461bcd60e51b815260206004820152601c60248201527f4974206973206e6f74206120636f6d6d756e697479206d656d626572000000006044820152606401610761565b6001600160a01b0381166000908152600a60205260409020544290610d449062093a8090615c1e565b10610d915760405162461bcd60e51b815260206004820152601a60248201527f436f6d6d756e697479206d656d626572206973206163746976650000000000006044820152606401610761565b610d9a33612e13565b61077c306040518060400160405280601881526020017f72656d6f7665436f6d6d756e6974792861646472657373290000000000000000815250600084604051602001610c7a91906001600160a01b0391909116815260200190565b610dff33612daf565b610e1b5760405162461bcd60e51b815260040161076190615af4565b610e2481612daf565b15610e415760405162461bcd60e51b815260040161076190615bd1565b610e4a33612e13565b61077c3060405180604001604052806015815260200174616464436f6d6d756e69747928616464726573732960581b815250600084604051602001610c7a91906001600160a01b0391909116815260200190565b610ea733612daf565b610ec35760405162461bcd60e51b815260040161076190615af4565b6001600160a01b038316301415610eec5760405162461bcd60e51b815260040161076190615c36565b610ef533612e13565b610f58836040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e74323536290000000000000081525060008585604051602001610c7a9291906001600160a01b03929092168252602082015260400190565b505050565b610f6633612e13565b565b333014610f875760405162461bcd60e51b815260040161076190615c77565b610f9081612daf565b15610fad5760405162461bcd60e51b815260040161076190615bd1565b61077c816133c9565b600060028281548110610fcb57610fcb615ca1565b90600052602060002090600491828204019190066008029054906101000a90046001600160401b03169050919050565b61100433612daf565b6110205760405162461bcd60e51b815260040161076190615af4565b61102981612daf565b156110465760405162461bcd60e51b815260040161076190615bd1565b61104f33612e13565b61077c306040518060400160405280601081526020016f6164645465616d28616464726573732960801b815250600084604051602001610c7a91906001600160a01b0391909116815260200190565b6110a733612daf565b6110c35760405162461bcd60e51b815260040161076190615af4565b6001600160a01b0384163014156110ec5760405162461bcd60e51b815260040161076190615c36565b60005b83518110156111795783818151811061110a5761110a615ca1565b6020910101516001600160f81b031916600160fd1b14156111675760405162461bcd60e51b81526020600482015260176024820152764e6f2073706163657320696e2066756e20706c6561736560481b6044820152606401610761565b8061117181615cb7565b9150506110ef565b5061118333612e13565b61118f84848484613287565b50505050565b6000610736826134b5565b3330146111bf5760405162461bcd60e51b815260040161076190615c77565b61077c81613da9565b6111d133612daf565b6111ed5760405162461bcd60e51b815260040161076190615af4565b60008181526020818152604080832081516102208101835281546001600160a01b0381168252600160a01b90046001600160401b039081169482019490945260018201549384169281019290925290916060830190600160401b900460ff16600281111561125d5761125d61551f565b600281111561126e5761126e61551f565b8152600182015460ff600160481b820481161515602080850191909152600160501b830482161515604080860191909152600160581b8404831615156060860152600160601b9093049091161515608084015260028401805483518184028101840190945280845260a090940193909183018282801561131757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112f9575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561137957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161135b575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156113db57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116113bd575b505050505081526020016005820180548060200260200160405190810160405280929190818152602001828054801561146057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116114225790505b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156114c257602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114a4575b505050505081526020016007820180548060200260200160405190810160405280929190818152602001828054801561151a57602002820191906000526020600020905b815481526020019060010190808311611506575b5050505050815260200160088201805480602002602001604051908101604052809291908181526020016000905b828210156115f457838290600052602060002001805461156790615cd2565b80601f016020809104026020016040519081016040528092919081815260200182805461159390615cd2565b80156115e05780601f106115b5576101008083540402835291602001916115e0565b820191906000526020600020905b8154815290600101906020018083116115c357829003601f168201915b505050505081526020019060010190611548565b50505050815260200160098201805480602002602001604051908101604052809291908181526020016000905b828210156116cd57838290600052602060002001805461164090615cd2565b80601f016020809104026020016040519081016040528092919081815260200182805461166c90615cd2565b80156116b95780601f1061168e576101008083540402835291602001916116b9565b820191906000526020600020905b81548152906001019060200180831161169c57829003601f168201915b505050505081526020019060010190611621565b505050508152602001600a820180546116e590615cd2565b80601f016020809104026020016040519081016040528092919081815260200182805461171190615cd2565b801561175e5780601f106117335761010080835404028352916020019161175e565b820191906000526020600020905b81548152906001019060200180831161174157829003601f168201915b505050505081525050905080604001516001600160401b0316600014156117975760405162461bcd60e51b815260040161076190615b2b565b8060a00151156117b95760405162461bcd60e51b815260040161076190615b62565b6117c233612e13565b3360009081526004602052604090205460ff161561183a576117e981610100015133613153565b156118065760405162461bcd60e51b815260040161076190615d0d565b6000828152602081815260408220600201805460018101825590835291200180546001600160a01b03191633179055611926565b3360009081526005602052604090205460ff16156118b25761186181610120015133613153565b1561187e5760405162461bcd60e51b815260040161076190615d0d565b6000828152602081815260408220600301805460018101825590835291200180546001600160a01b03191633179055611926565b3360009081526006602052604090205460ff1615611926576118d981610140015133613153565b156118f65760405162461bcd60e51b815260040161076190615d0d565b6000828152602081815260408220600401805460018101825590835291200180546001600160a01b031916331790555b817ff1204e138c7a8ebf3e2e1625629e4d3af790fe79b5ecd608c78c809cf063aaab4260405161195891815260200190565b60405180910390a2611969826134b5565b156119775761197782612e2f565b5050565b61198433612daf565b6119a05760405162461bcd60e51b815260040161076190615af4565b6001600160a01b0382163014156119c95760405162461bcd60e51b815260040161076190615c36565b6119d233612e13565b61197782604051806020016040528060008152508360405180602001604052806000815250613287565b6009818154811061078f57600080fd5b333014611a2b5760405162461bcd60e51b815260040161076190615c77565b606060005b600083815260208190526040902060060154811015610f58576000838152602081905260408120600601805482919084908110611a6f57611a6f615ca1565b600091825260208083209091015487835290829052604090912060070180546001600160a01b039092169185908110611aaa57611aaa615ca1565b90600052602060002001546000808881526020019081526020016000206005018581548110611adb57611adb615ca1565b90600052602060002090600891828204019190066004029054906101000a900460e01b6000808981526020019081526020016000206009018681548110611b2457611b24615ca1565b90600052602060002001604051602001611b3f929190615d37565b60408051601f1981840301815290829052611b5991615dec565b60006040518083038185875af1925050503d8060008114611b96576040519150601f19603f3d011682016040523d82523d6000602084013e611b9b565b606091505b509150915083604051602001611bb19190615e08565b604051602081830303815290604052935081158015611bd257506044815110155b15611c15576004810190508381806020019051810190611bf29190615e2d565b604051602001611c03929190615ea3565b60405160208183030381529060405293505b81611c34578360405162461bcd60e51b81526004016107619190615ed2565b50508080611c4190615cb7565b915050611a30565b333014611c685760405162461bcd60e51b815260040161076190615c77565b611c7181612daf565b15611c8e5760405162461bcd60e51b815260040161076190615bd1565b61077c81614005565b333014611cb65760405162461bcd60e51b815260040161076190615c77565b611cbf81612daf565b15611cdc5760405162461bcd60e51b815260040161076190615bd1565b61077c816140ea565b333014611d045760405162461bcd60e51b815260040161076190615c77565b61077c816141cf565b611d15615006565b6000828152602081815260409182902082516102208101845281546001600160a01b0381168252600160a01b90046001600160401b0390811693820193909352600182015492831693810193909352906060830190600160401b900460ff166002811115611d8557611d8561551f565b6002811115611d9657611d9661551f565b8152600182015460ff600160481b820481161515602080850191909152600160501b830482161515604080860191909152600160581b8404831615156060860152600160601b9093049091161515608084015260028401805483518184028101840190945280845260a0909401939091830182828015611e3f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611e21575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015611ea157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611e83575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015611f0357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ee5575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015611f8857602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411611f4a5790505b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611fea57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611fcc575b505050505081526020016007820180548060200260200160405190810160405280929190818152602001828054801561204257602002820191906000526020600020905b81548152602001906001019080831161202e575b5050505050815260200160088201805480602002602001604051908101604052809291908181526020016000905b8282101561211c57838290600052602060002001805461208f90615cd2565b80601f01602080910402602001604051908101604052809291908181526020018280546120bb90615cd2565b80156121085780601f106120dd57610100808354040283529160200191612108565b820191906000526020600020905b8154815290600101906020018083116120eb57829003601f168201915b505050505081526020019060010190612070565b50505050815260200160098201805480602002602001604051908101604052809291908181526020016000905b828210156121f557838290600052602060002001805461216890615cd2565b80601f016020809104026020016040519081016040528092919081815260200182805461219490615cd2565b80156121e15780601f106121b6576101008083540402835291602001916121e1565b820191906000526020600020905b8154815290600101906020018083116121c457829003601f168201915b505050505081526020019060010190612149565b505050508152602001600a8201805461220d90615cd2565b80601f016020809104026020016040519081016040528092919081815260200182805461223990615cd2565b80156122865780601f1061225b57610100808354040283529160200191612286565b820191906000526020600020905b81548152906001019060200180831161226957829003601f168201915b5050505050815250509050919050565b6007818154811061078f57600080fd5b600060018281548110610fcb57610fcb615ca1565b6122c433612daf565b6122e05760405162461bcd60e51b815260040161076190615af4565b6001600160a01b03811660009081526004602052604090205460ff1661233a5760405162461bcd60e51b815260206004820152600f60248201526e24ba1034b9903737ba1030903232bb60891b6044820152606401610761565b6001600160a01b0381166000908152600a602052604090205442906123639062ed4e0090615c1e565b106123a05760405162461bcd60e51b815260206004820152600d60248201526c4465762069732061637469766560981b6044820152606401610761565b6123a933612e13565b61077c306040518060400160405280601281526020017172656d6f766544657628616464726573732960701b815250600084604051602001610c7a91906001600160a01b0391909116815260200190565b61240333612daf565b61241f5760405162461bcd60e51b815260040161076190615af4565b61242833612e13565b61077c816131af565b61243a33612daf565b6124565760405162461bcd60e51b815260040161076190615af4565b60005b845181101561257f57306001600160a01b031685828151811061247e5761247e615ca1565b60200260200101516001600160a01b031614156124ad5760405162461bcd60e51b815260040161076190615c36565b60005b8482815181106124c2576124c2615ca1565b60200260200101515181101561256c578482815181106124e4576124e4615ca1565b602002602001015181815181106124fd576124fd615ca1565b6020910101516001600160f81b031916600160fd1b141561255a5760405162461bcd60e51b81526020600482015260176024820152764e6f2073706163657320696e2066756e20706c6561736560481b6044820152606401610761565b8061256481615cb7565b9150506124b0565b508061257781615cb7565b915050612459565b5061258933612e13565b61118f84848484614415565b3330146125b45760405162461bcd60e51b815260040161076190615c77565b61077c81614aac565b6125c633612daf565b6125e25760405162461bcd60e51b815260040161076190615af4565b6001600160a01b03811660009081526005602052604090205460ff1661264a5760405162461bcd60e51b815260206004820152601760248201527f4974206973206e6f742061207465616d206d656d6265720000000000000000006044820152606401610761565b6001600160a01b0381166000908152600a6020526040902054429061267390629e340090615c1e565b106126b85760405162461bcd60e51b81526020600482015260156024820152745465616d206d656d6265722069732061637469766560581b6044820152606401610761565b6126c133612e13565b61077c306040518060400160405280601381526020017272656d6f76655465616d28616464726573732960681b815250600084604051602001610c7a91906001600160a01b0391909116815260200190565b60008181526020818152604080832081516102208101835281546001600160a01b0381168252600160a01b90046001600160401b039081169482019490945260018201549384169281019290925283926060830190600160401b900460ff1660028111156127835761278361551f565b60028111156127945761279461551f565b8152600182015460ff600160481b820481161515602080850191909152600160501b830482161515604080860191909152600160581b8404831615156060860152600160601b9093049091161515608084015260028401805483518184028101840190945280845260a090940193909183018282801561283d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161281f575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561289f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612881575b505050505081526020016004820180548060200260200160405190810160405280929190818152602001828054801561290157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116128e3575b505050505081526020016005820180548060200260200160405190810160405280929190818152602001828054801561298657602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116129485790505b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156129e857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116129ca575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015612a4057602002820191906000526020600020905b815481526020019060010190808311612a2c575b5050505050815260200160088201805480602002602001604051908101604052809291908181526020016000905b82821015612b1a578382906000526020600020018054612a8d90615cd2565b80601f0160208091040260200160405190810160405280929190818152602001828054612ab990615cd2565b8015612b065780601f10612adb57610100808354040283529160200191612b06565b820191906000526020600020905b815481529060010190602001808311612ae957829003601f168201915b505050505081526020019060010190612a6e565b50505050815260200160098201805480602002602001604051908101604052809291908181526020016000905b82821015612bf3578382906000526020600020018054612b6690615cd2565b80601f0160208091040260200160405190810160405280929190818152602001828054612b9290615cd2565b8015612bdf5780601f10612bb457610100808354040283529160200191612bdf565b820191906000526020600020905b815481529060010190602001808311612bc257829003601f168201915b505050505081526020019060010190612b47565b505050508152602001600a82018054612c0b90615cd2565b80601f0160208091040260200160405190810160405280929190818152602001828054612c3790615cd2565b8015612c845780601f10612c5957610100808354040283529160200191612c84565b820191906000526020600020905b815481529060010190602001808311612c6757829003601f168201915b5050505050815250509050600081604001516001600160401b031611612cbc5760405162461bcd60e51b815260040161076190615b2b565b8060a0015115612cde5760405162461bcd60e51b815260040161076190615b62565b806080015115612cf15750600192915050565b60408101516001600160401b0316600082606001516002811115612d1757612d1761551f565b1415612d3157612d2a62093a8082615c1e565b9050612d88565b600182606001516002811115612d4957612d4961551f565b1415612d5c57612d2a6203f48082615c1e565b600282606001516002811115612d7457612d7461551f565b1415612d8857612d85607882615c1e565b90505b612d95622e248082615c1e565b4210612da5575060019392505050565b5060009392505050565b6001600160a01b03811660009081526004602052604081205460ff1680612dee57506001600160a01b03821660009081526005602052604090205460ff165b806107365750506001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03166000908152600a60205260409020429055565b6000818152602081905260409020600101546001600160401b0316612e665760405162461bcd60e51b815260040161076190615b2b565b612e6f816134b5565b612eb35760405162461bcd60e51b8152602060048201526015602482015274115e1958dd5d1a5bdb881b9bdd08185b1b1bddd959605a1b6044820152606401610761565b612ebc81614cfa565b600081815260208190526040808220600101805460ff60581b1916600160581b179055516024810183905281903090829060440160408051601f198184030181529181526020820180516001600160e01b031663b192500760e01b17905251612f259190615dec565b60006040518083038185875af1925050503d8060008114612f62576040519150601f19603f3d011682016040523d82523d6000602084013e612f67565b606091505b506000858152602081905260409020600101805460ff60601b19168315600160601b81029190911790915591935091508015612fa557506044815110155b15612feb5760048101905080806020019051810190612fc49190615e2d565b6000848152602081815260409091208251612fe993600a909201929190910190615092565b505b6040516001600160401b0342811682528416907ff758fc91e01b00ea6b4a6138756f7f28e021f9bf21db6dbf8c36c88eb737257a9060200160405180910390a2505050565b606061303c8383613153565b158061304757508251155b15613053575081610736565b6000600184516130639190615ee5565b6001600160401b0381111561307a5761307a6153b5565b6040519080825280602002602001820160405280156130a3578160200160208202803683370190505b5090506000805b855182101561314957846001600160a01b03168683815181106130cf576130cf615ca1565b60200260200101516001600160a01b031614613137578582815181106130f7576130f7615ca1565b602002602001015183828151811061311157613111615ca1565b6001600160a01b03909216602092830291909101909101528061313381615cb7565b9150505b8161314181615cb7565b9250506130aa565b5090949350505050565b6000805b8351811015612da557826001600160a01b031684828151811061317c5761317c615ca1565b60200260200101516001600160a01b0316141561319d576001915050610736565b806131a781615cb7565b915050613157565b6000818152602081905260409020600101546001600160401b03166131e65760405162461bcd60e51b815260040161076190615b2b565b6131ef81612713565b61323b5760405162461bcd60e51b815260206004820152601860248201527f43616e63656c6c6174696f6e206e6f7420616c6c6f77656400000000000000006044820152606401610761565b61324481614cfa565b6040516001600160401b0342811682528216907f740823f5b237fe3c86a5ff1cd7a2345263cab48eaddc595c9bbb35d86c6cc4219060200160405180910390a250565b6040805160018082528183019092526000916020808301908036833701905050905084816000815181106132bd576132bd615ca1565b6001600160a01b039290921660209283029190910190910152604080516001808252818301909252600091816020015b60608152602001906001900390816132ed579050509050848160008151811061331857613318615ca1565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050848160008151811061335b5761335b615ca1565b6020908102919091010152604080516001808252818301909252600091816020015b606081526020019060019003908161337d57905050905084816000815181106133a8576133a8615ca1565b60200260200101819052506133bf84848484614415565b5050505050505050565b6133d281612daf565b156133ef5760405162461bcd60e51b815260040161076190615bd1565b6001600160a01b03811660009081526006602052604090205460ff1661077c5761341881612e13565b6001600160a01b0381166000818152600660209081526040808320805460ff191660019081179091556009805491820181559093527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90920180546001600160a01b0319168417905590519182527f3df6de6f7acbd50ccf5d3352eaf45f9eaf44b2b259e62a4c04351fdea533287391015b60405180910390a150565b60008181526020818152604080832081516102208101835281546001600160a01b0381168252600160a01b90046001600160401b039081169482019490945260018201549384169281019290925283926060830190600160401b900460ff1660028111156135255761352561551f565b60028111156135365761353661551f565b8152600182015460ff600160481b820481161515602080850191909152600160501b830482161515604080860191909152600160581b8404831615156060860152600160601b9093049091161515608084015260028401805483518184028101840190945280845260a09094019390918301828280156135df57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116135c1575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561364157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613623575b50505050508152602001600482018054806020026020016040519081016040528092919081815260200182805480156136a357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613685575b505050505081526020016005820180548060200260200160405190810160405280929190818152602001828054801561372857602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116136ea5790505b505050505081526020016006820180548060200260200160405190810160405280929190818152602001828054801561378a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161376c575b50505050508152602001600782018054806020026020016040519081016040528092919081815260200182805480156137e257602002820191906000526020600020905b8154815260200190600101908083116137ce575b5050505050815260200160088201805480602002602001604051908101604052809291908181526020016000905b828210156138bc57838290600052602060002001805461382f90615cd2565b80601f016020809104026020016040519081016040528092919081815260200182805461385b90615cd2565b80156138a85780601f1061387d576101008083540402835291602001916138a8565b820191906000526020600020905b81548152906001019060200180831161388b57829003601f168201915b505050505081526020019060010190613810565b50505050815260200160098201805480602002602001604051908101604052809291908181526020016000905b8282101561399557838290600052602060002001805461390890615cd2565b80601f016020809104026020016040519081016040528092919081815260200182805461393490615cd2565b80156139815780601f1061395657610100808354040283529160200191613981565b820191906000526020600020905b81548152906001019060200180831161396457829003601f168201915b5050505050815260200190600101906138e9565b505050508152602001600a820180546139ad90615cd2565b80601f01602080910402602001604051908101604052809291908181526020018280546139d990615cd2565b8015613a265780601f106139fb57610100808354040283529160200191613a26565b820191906000526020600020905b815481529060010190602001808311613a0957829003601f168201915b5050505050815250509050600081604001516001600160401b031611613a5e5760405162461bcd60e51b815260040161076190615b2b565b8060a0015115613a805760405162461bcd60e51b815260040161076190615b62565b806080015115613a935750600092915050565b60408101516001600160401b0316600082606001516002811115613ab957613ab961551f565b1415613ad357613acc62093a8082615c1e565b9050613b2a565b600182606001516002811115613aeb57613aeb61551f565b1415613afe57613acc6203f48082615c1e565b600282606001516002811115613b1657613b1661551f565b1415613b2a57613b27607882615c1e565b90505b613b37622e248082615c1e565b4210613b47575060009392505050565b610100820151516040830151613b5f90607890615efc565b6001600160401b03164210158015613b7957506007548110155b15613b8957506001949350505050565b81421015613b9c57506000949350505050565b61012083015151610140840151516001613bb7816002615c1e565b6009541115613bd257600954613bcf90600290615ee5565b90505b6003811115613bdf575060035b8442118015613c0f575060075460021015613c0857600754613c0390600190615ee5565b613c0b565b60025b8410155b15613c2257506001979650505050505050565b613c2f6201518086615c1e565b42118015613c3e575060018410155b8015613c4b575060018310155b8015613c575750808210155b15613c6a57506001979650505050505050565b613c776203f48086615c1e565b42118015613c86575060018410155b8015613c93575060018310155b8015613ca0575060018210155b15613cb357506001979650505050505050565b613cc06203f48086615c1e565b42118015613ccf575060018410155b8015613cdb5750808210155b15613cee57506001979650505050505050565b506001613cfc816002615c1e565b6009541115613d1757600954613d1490600290615ee5565b90505b6004811115613d24575060045b613d3162093a8086615c1e565b42118015613d40575060018310155b8015613d4c5750808210155b15613d5f57506001979650505050505050565b613d6c6224ea0086615c1e565b42118015613d885750600954613d8490600190615ee5565b8210155b15613d9b57506001979650505050505050565b506000979650505050505050565b600954600110613e0d5760405162461bcd60e51b815260206004820152602960248201527f4174206c65617374203120636f6d6d756e697479206d656d6265722073686f756044820152683632103932b6b0b4b760b91b6064820152608401610761565b6001600160a01b0381166000908152600a60205260409020544290613e369062093a8090615c1e565b10613e835760405162461bcd60e51b815260206004820152601a60248201527f436f6d6d756e697479206d656d626572206973206163746976650000000000006044820152606401610761565b6001600160a01b03811660009081526006602052604090205460ff161561077c576001600160a01b0381166000908152600660205260408120805460ff191690555b600954811015613fcb57816001600160a01b031660098281548110613eec57613eec615ca1565b6000918252602090912001546001600160a01b03161415613fb95760098054613f1790600190615ee5565b81548110613f2757613f27615ca1565b600091825260209091200154600980546001600160a01b039092169183908110613f5357613f53615ca1565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506009805480613f9257613f92615f1e565b600082815260209020810160001990810180546001600160a01b0319169055019055613fcb565b80613fc381615cb7565b915050613ec5565b506040516001600160a01b03821681527fa285b77d62d36ec6881b2cbc019c53874eb061798176f3577f2beab0848d16c6906020016134aa565b61400e81612daf565b1561402b5760405162461bcd60e51b815260040161076190615bd1565b6001600160a01b03811660009081526005602052604090205460ff1661077c5761405481612e13565b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556008805491820181559093527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390920180546001600160a01b0319168417905590519182527f3f5f1db80208f0d453083a86e16909cecc1e95e2618d5d927c93ace22b8200fc91016134aa565b6140f381612daf565b156141105760405162461bcd60e51b815260040161076190615bd1565b6001600160a01b03811660009081526004602052604090205460ff1661077c5761413981612e13565b6001600160a01b0381166000818152600460209081526040808320805460ff191660019081179091556007805491820181559093527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b0319168417905590519182527f62bdcff6770832ed27a318b408d43d6b8454fbca399faa678141178eb9298ddb91016134aa565b60075460011061422d5760405162461bcd60e51b815260206004820152602360248201527f4174206c65617374203120646576206d656d6265722073686f756c642072656d60448201526230b4b760e91b6064820152608401610761565b6001600160a01b0381166000908152600a602052604090205442906142569062093a8090615c1e565b106142935760405162461bcd60e51b815260206004820152600d60248201526c4465762069732061637469766560981b6044820152606401610761565b6001600160a01b03811660009081526004602052604090205460ff161561077c576001600160a01b0381166000908152600460205260408120805460ff191690555b6007548110156143db57816001600160a01b0316600782815481106142fc576142fc615ca1565b6000918252602090912001546001600160a01b031614156143c9576007805461432790600190615ee5565b8154811061433757614337615ca1565b600091825260209091200154600780546001600160a01b03909216918390811061436357614363615ca1565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060078054806143a2576143a2615f1e565b600082815260209020810160001990810180546001600160a01b03191690550190556143db565b806143d381615cb7565b9150506142d5565b506040516001600160a01b03821681527f1b906a842edba22ebbad00e740e8d7a219947d27d71d8940a0be3a2d16db62a4906020016134aa565b3360009081526004602052604090205460ff168061444257503360009081526005602052604090205460ff165b8061445c57503360009081526006602052604090205460ff165b6144785760405162461bcd60e51b815260040161076190615af4565b8251845114801561448a575081518351145b8015614497575080518251145b6144e35760405162461bcd60e51b815260206004820152601e60248201527f506172616d73206d757374206265207468652073616d65206c656e67746800006044820152606401610761565b600380546001600160401b03169060006144fc83615f34565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050614529615006565b6001600160401b0342166040828101919091526000606083018190523381526005602052205460ff161561455f57600160608201525b3360009081526004602052604090205460ff161561457f57600260608201525b6000816060015160028111156145975761459761551f565b141580156145a3575034155b806145b5575067016345785d8a000034145b6146015760405162461bcd60e51b815260206004820152601860248201527f5061792065786163742070726f706f73616c20707269636500000000000000006044820152606401610761565b84516001600160401b0381111561461a5761461a6153b5565b604051908082528060200260200182016040528015614643578160200160208202803683370190505b506101608201526101e0810182905233815261018081018590526101a081018390526101c0810184905260005b84518110156147d55784818151811061468b5761468b615ca1565b602002602001015151600014806146bd575060038582815181106146b1576146b1615ca1565b60200260200101515110155b6147185760405162461bcd60e51b815260206004820152602660248201527f70726f7669646520612076616c69642066756e6374696f6e207370656369666960448201526531b0ba34b7b760d11b6064820152608401610761565b84818151811061472a5761472a615ca1565b6020026020010151516000146147905784818151811061474c5761474c615ca1565b602002602001015180519060200120826101600151828151811061477257614772615ca1565b6001600160e01b0319909216602092830291909101909101526147c3565b600082610160015182815181106147a9576147a9615ca1565b6001600160e01b0319909216602092830291909101909101525b806147cd81615cb7565b915050614670565b50600180546001600160401b03908116602080850191825260035483166000908152908190526040908190208551815493518516600160a01b026001600160e01b03199094166001600160a01b039091161792909217825584015192810180549390921667ffffffffffffffff198416811783556060850151859492939092909168ffffffffffffffffff1990911617600160401b83600281111561487c5761487c61551f565b0217905550608082015160018201805460a085015160c086015160e08701511515600160601b0260ff60601b19911515600160581b029190911661ffff60581b19921515600160501b0260ff60501b19961515600160481b02969096166affff00000000000000000019909416939093179490941716179190911790556101008201518051614915916002840191602090910190614fa1565b506101208201518051614932916003840191602090910190614fa1565b50610140820151805161494f916004840191602090910190614fa1565b50610160820151805161496c916005840191602090910190615106565b506101808201518051614989916006840191602090910190614fa1565b506101a082015180516149a69160078401916020909101906151ad565b506101c082015180516149c39160088401916020909101906151e7565b506101e082015180516149e0916009840191602090910190615240565b5061020082015180516149fd91600a840191602090910190615092565b5050600380546001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6600482040180546001600160401b039285166008026101000a8381021990911693831602929092179091559054606084015160405133945091909216917fe5869b823d5af0c789b3ea4208515c891cecdb6bec9eb6a6524fc5c9e2cfb5e591614a9d914291615f5b565b60405180910390a35050505050565b600854600110614b0a5760405162461bcd60e51b8152602060048201526024808201527f4174206c656173742031207465616d206d656d6265722073686f756c6420726560448201526336b0b4b760e11b6064820152608401610761565b6001600160a01b0381166000908152600a60205260409020544290614b3390629e340090615c1e565b10614b785760405162461bcd60e51b81526020600482015260156024820152745465616d206d656d6265722069732061637469766560581b6044820152606401610761565b6001600160a01b03811660009081526005602052604090205460ff161561077c576001600160a01b0381166000908152600560205260408120805460ff191690555b600854811015614cc057816001600160a01b031660088281548110614be157614be1615ca1565b6000918252602090912001546001600160a01b03161415614cae5760088054614c0c90600190615ee5565b81548110614c1c57614c1c615ca1565b600091825260209091200154600880546001600160a01b039092169183908110614c4857614c48615ca1565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506008805480614c8757614c87615f1e565b600082815260209020810160001990810180546001600160a01b0319169055019055614cc0565b80614cb881615cb7565b915050614bba565b506040516001600160a01b03821681527f26b6063d78aefcf96f02ff06bc9822b5a623278253add7fffa5fb453db399810906020016134aa565b600081815260208190526040902060010154600160501b900460ff1615614d335760405162461bcd60e51b815260040161076190615b62565b60008181526020819052604090206001908101805460ff60501b1916600160501b1790558054614d639190615ee5565b600082815260208190526040902054600160a01b90046001600160401b031614614ed35760008181526020819052604081205460018054600160a01b9092046001600160401b03169291829190614dbb908290615ee5565b81548110614dcb57614dcb615ca1565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b0390811684529083019390935260409091019020805467ffffffffffffffff60a01b1916600160a01b939092169290920217905560018054614e34908290615ee5565b81548110614e4457614e44615ca1565b60009182526020808320600483040154848452908390526040909220546001805460039093166008026101000a9093046001600160401b039081169392600160a01b90920416908110614e9957614e99615ca1565b90600052602060002090600491828204019190066008026101000a8154816001600160401b0302191690836001600160401b031602179055505b600280546000838152602081905260408120805467ffffffffffffffff60a01b1916600160a01b6001600160401b0394851602179055825460018181018555939091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace6004820401805460039092166008026101000a8084021990921692851691909102919091179055805480614f6d57614f6d615f1e565b60008281526020902060046000199092019182040180546001600160401b03600860038516026101000a0219169055905550565b828054828255906000526020600020908101928215614ff6579160200282015b82811115614ff657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614fc1565b50615002929150615299565b5090565b604080516102208101825260008082526020820181905291810182905290606082019081526020016000151581526020016000151581526020016000151581526020016000151581526020016060815260200160608152602001606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b82805461509e90615cd2565b90600052602060002090601f0160209004810192826150c05760008555614ff6565b82601f106150d957805160ff1916838001178555614ff6565b82800160010185558215614ff6579182015b82811115614ff65782518255916020019190600101906150eb565b82805482825590600052602060002090600701600890048101928215614ff65791602002820160005b8382111561517057835183826101000a81548163ffffffff021916908360e01c0217905550926020019260040160208160030104928301926001030261512f565b80156151a05782816101000a81549063ffffffff0219169055600401602081600301049283019260010302615170565b5050615002929150615299565b828054828255906000526020600020908101928215614ff65791602002820182811115614ff65782518255916020019190600101906150eb565b828054828255906000526020600020908101928215615234579160200282015b828111156152345782518051615224918491602090910190615092565b5091602001919060010190615207565b506150029291506152ae565b82805482825590600052602060002090810192821561528d579160200282015b8281111561528d578251805161527d918491602090910190615092565b5091602001919060010190615260565b506150029291506152cb565b5b80821115615002576000815560010161529a565b808211156150025760006152c282826152e8565b506001016152ae565b808211156150025760006152df82826152e8565b506001016152cb565b5080546152f490615cd2565b6000825580601f10615304575050565b601f01602090049060005260206000209081019061077c9190615299565b80356001600160a01b038116811461533957600080fd5b919050565b60006020828403121561535057600080fd5b61535982615322565b9392505050565b60006020828403121561537257600080fd5b5035919050565b60008060006060848603121561538e57600080fd5b61539784615322565b92506153a560208501615322565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156153f3576153f36153b5565b604052919050565b60006001600160401b03821115615414576154146153b5565b50601f01601f191660200190565b600082601f83011261543357600080fd5b8135615446615441826153fb565b6153cb565b81815284602083860101111561545b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561548e57600080fd5b61549785615322565b935060208501356001600160401b03808211156154b357600080fd5b6154bf88838901615422565b94506040870135935060608701359150808211156154dc57600080fd5b506154e987828801615422565b91505092959194509250565b6000806040838503121561550857600080fd5b61551183615322565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6003811061555357634e487b7160e01b600052602160045260246000fd5b9052565b600081518084526020808501945080840160005b838110156155905781516001600160a01b03168752958201959082019060010161556b565b509495945050505050565b600081518084526020808501945080840160005b838110156155905781516001600160e01b031916875295820195908201906001016155af565b600081518084526020808501945080840160005b83811015615590578151875295820195908201906001016155e9565b60005b83811015615620578181015183820152602001615608565b8381111561118f5750506000910152565b60008151808452615649816020860160208601615605565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156156a5578284038952615693848351615631565b9885019893509084019060010161567b565b5091979650505050505050565b602081526156cc6020820183516001600160a01b03169052565b600060208301516156e860408401826001600160401b03169052565b5060408301516001600160401b03811660608401525060608301516157106080840182615535565b50608083015180151560a08401525060a083015180151560c08401525060c083015180151560e08401525060e08301516101006157508185018315159052565b808501519150506102206101208181860152615770610240860184615557565b9250808601519050601f196101408187860301818801526157918584615557565b9450808801519250506101608187860301818801526157b08584615557565b9450808801519250506101808187860301818801526157cf858461559b565b9450808801519250506101a08187860301818801526157ee8584615557565b9450808801519250506101c081878603018188015261580d85846155d5565b9450808801519250506101e081878603018188015261582c858461565d565b94508088015192505061020081878603018188015261584b858461565d565b9088015187820390920184880152935090506158678382615631565b9695505050505050565b60006001600160401b0382111561588a5761588a6153b5565b5060051b60200190565b600082601f8301126158a557600080fd5b813560206158b561544183615871565b82815260059290921b840181019181810190868411156158d457600080fd5b8286015b848110156159135780356001600160401b038111156158f75760008081fd5b6159058986838b0101615422565b8452509183019183016158d8565b509695505050505050565b600082601f83011261592f57600080fd5b8135602061593f61544183615871565b82815260059290921b8401810191818101908684111561595e57600080fd5b8286015b848110156159135780358352918301918301615962565b600082601f83011261598a57600080fd5b8135602061599a61544183615871565b82815260059290921b840181019181810190868411156159b957600080fd5b8286015b848110156159135780356001600160401b038111156159dc5760008081fd5b6159ea8986838b0101615422565b8452509183019183016159bd565b60008060008060808587031215615a0e57600080fd5b84356001600160401b0380821115615a2557600080fd5b818701915087601f830112615a3957600080fd5b81356020615a4961544183615871565b82815260059290921b8401810191818101908b841115615a6857600080fd5b948201945b83861015615a8d57615a7e86615322565b82529482019490820190615a6d565b98505088013592505080821115615aa357600080fd5b615aaf88838901615894565b94506040870135915080821115615ac557600080fd5b615ad18883890161591e565b93506060870135915080821115615ae757600080fd5b506154e987828801615979565b60208082526018908201527f4f6e6c79206d656d626572732063616e20646f20746869730000000000000000604082015260600190565b60208082526017908201527f50726f706f73616c20646f6573206e6f74206578697374000000000000000000604082015260600190565b60208082526010908201526f416c726561647920696e61637469766560801b604082015260600190565b60208082526025908201527f446964206e6f7420766f746520666f72206f7220616c7265616479206469736d6040820152641a5cdcd95960da1b606082015260800190565b6020808252601f908201527f54686973206164647265737320616c726561647920686173206120726f6c6500604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115615c3157615c31615c08565b500190565b60208082526021908201527f446f6e27742063616c6c20746865206d756c7469736967206c696b65207468616040820152601d60fa1b606082015260800190565b60208082526010908201526f4f6e6c792073656c6620706c6561736560801b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615ccb57615ccb615c08565b5060010190565b600181811c90821680615ce657607f821691505b60208210811415615d0757634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f105b1c9958591e48185c1c1c9bdd995960821b604082015260600190565b6001600160e01b03198316815281546000906004908290600181811c9080831680615d6357607f831692505b6020808410821415615d8257634e487b7160e01b865260228752602486fd5b818015615d965760018114615dab57615ddc565b60ff1986168a890152848a0188019650615ddc565b60008b81526020902060005b86811015615dd25781548c82018b0152908501908301615db7565b505087858b010196505b50949a9950505050505050505050565b60008251615dfe818460208701615605565b9190910192915050565b60008251615e1a818460208701615605565b601f60fa1b920191825250600101919050565b600060208284031215615e3f57600080fd5b81516001600160401b03811115615e5557600080fd5b8201601f81018413615e6657600080fd5b8051615e74615441826153fb565b818152856020838501011115615e8957600080fd5b615e9a826020830160208601615605565b95945050505050565b60008351615eb5818460208801615605565b835190830190615ec9818360208801615605565b01949350505050565b6020815260006153596020830184615631565b600082821015615ef757615ef7615c08565b500390565b60006001600160401b03808316818516808303821115615ec957615ec9615c08565b634e487b7160e01b600052603160045260246000fd5b60006001600160401b0380831681811415615f5157615f51615c08565b6001019392505050565b6001600160401b038316815260408101615359602083018461553556fea2646970667358221220cdaacc3afdaefede45bf0389efe55b351c4477129efd61ab1702878c6771a9cd64736f6c6343000809003354686973206164647265737320616c726561647920686173206120726f6c6500000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000e91b646715c175fc1cff73bbfd19b14848cc913b0000000000000000000000002d7b286b95227f174b24f0c37e5d833236f10dfb0000000000000000000000009256faa05b5bd28a99eef6d48e4a6e32cd1c90fc00000000000000000000000000000000000000000000000000000000000000010000000000000000000000002fbd32a700abfff373e63ccb66ce961700f9140800000000000000000000000000000000000000000000000000000000000000090000000000000000000000001279fe5271b76f6c305b55f59444c8028af9ac510000000000000000000000004cfe6e9cf531d6b07bc95a1d344c3f7257c98d6c00000000000000000000000001f1d1fa0ea7e53f484fc84ca8b7ada2aed9e6df000000000000000000000000911da057b7f735bc54e9ffbe1143dda363dba6fb000000000000000000000000358eae3d08c2bf6cec9259dd800f4e1cb97ed4f300000000000000000000000069ebbf3794e76fc1ffc7021d0b2ee5313bad2aaf0000000000000000000000005b21e0ae319fcffaa2f7041e7e5cf62c6738abde000000000000000000000000e547446348df88a45ddf14c8ea7474c7148502810000000000000000000000008692240d0f529e5c4a278ad14d72c76b5a856710
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000e91b646715c175fc1cff73bbfd19b14848cc913b0000000000000000000000002d7b286b95227f174b24f0c37e5d833236f10dfb0000000000000000000000009256faa05b5bd28a99eef6d48e4a6e32cd1c90fc00000000000000000000000000000000000000000000000000000000000000010000000000000000000000002fbd32a700abfff373e63ccb66ce961700f9140800000000000000000000000000000000000000000000000000000000000000090000000000000000000000001279fe5271b76f6c305b55f59444c8028af9ac510000000000000000000000004cfe6e9cf531d6b07bc95a1d344c3f7257c98d6c00000000000000000000000001f1d1fa0ea7e53f484fc84ca8b7ada2aed9e6df000000000000000000000000911da057b7f735bc54e9ffbe1143dda363dba6fb000000000000000000000000358eae3d08c2bf6cec9259dd800f4e1cb97ed4f300000000000000000000000069ebbf3794e76fc1ffc7021d0b2ee5313bad2aaf0000000000000000000000005b21e0ae319fcffaa2f7041e7e5cf62c6738abde000000000000000000000000e547446348df88a45ddf14c8ea7474c7148502810000000000000000000000008692240d0f529e5c4a278ad14d72c76b5a856710
-----Decoded View---------------
Arg [0] : _devs (address[]): 0xe91b646715c175fc1cff73bbfd19b14848cc913b,0x2d7b286b95227f174b24f0c37e5d833236f10dfb,0x9256faa05b5bd28a99eef6d48e4a6e32cd1c90fc
Arg [1] : _team (address[]): 0x2fbd32a700abfff373e63ccb66ce961700f91408
Arg [2] : _community (address[]): 0x1279fe5271b76f6c305b55f59444c8028af9ac51,0x4cfe6e9cf531d6b07bc95a1d344c3f7257c98d6c,0x01f1d1fa0ea7e53f484fc84ca8b7ada2aed9e6df,0x911da057b7f735bc54e9ffbe1143dda363dba6fb,0x358eae3d08c2bf6cec9259dd800f4e1cb97ed4f3,0x69ebbf3794e76fc1ffc7021d0b2ee5313bad2aaf,0x5b21e0ae319fcffaa2f7041e7e5cf62c6738abde,0xe547446348df88a45ddf14c8ea7474c714850281,0x8692240d0f529e5c4a278ad14d72c76b5a856710
-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [4] : 000000000000000000000000e91b646715c175fc1cff73bbfd19b14848cc913b
Arg [5] : 0000000000000000000000002d7b286b95227f174b24f0c37e5d833236f10dfb
Arg [6] : 0000000000000000000000009256faa05b5bd28a99eef6d48e4a6e32cd1c90fc
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [8] : 0000000000000000000000002fbd32a700abfff373e63ccb66ce961700f91408
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [10] : 0000000000000000000000001279fe5271b76f6c305b55f59444c8028af9ac51
Arg [11] : 0000000000000000000000004cfe6e9cf531d6b07bc95a1d344c3f7257c98d6c
Arg [12] : 00000000000000000000000001f1d1fa0ea7e53f484fc84ca8b7ada2aed9e6df
Arg [13] : 000000000000000000000000911da057b7f735bc54e9ffbe1143dda363dba6fb
Arg [14] : 000000000000000000000000358eae3d08c2bf6cec9259dd800f4e1cb97ed4f3
Arg [15] : 00000000000000000000000069ebbf3794e76fc1ffc7021d0b2ee5313bad2aaf
Arg [16] : 0000000000000000000000005b21e0ae319fcffaa2f7041e7e5cf62c6738abde
Arg [17] : 000000000000000000000000e547446348df88a45ddf14c8ea7474c714850281
Arg [18] : 0000000000000000000000008692240d0f529e5c4a278ad14d72c76b5a856710
Deployed ByteCode Sourcemap
14290:21321:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23578:90;;;;;;;;;;-1:-1:-1;23578:90:0;;;;;:::i;:::-;-1:-1:-1;;;;;23652:8:0;23628:4;23652:8;;;:4;:8;;;;;;;;;23578:90;;;;644:14:1;;637:22;619:41;;607:2;592:18;23578:90:0;;;;;;;;25055:116;;;;;;;;;;-1:-1:-1;25055:116:0;;;;;:::i;:::-;;:::i;21634:120::-;;;;;;;;;;-1:-1:-1;21634:120:0;;;;;:::i;:::-;;:::i;14616:25::-;;;;;;;;;;-1:-1:-1;14616:25:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1129:32:1;;;1111:51;;1099:2;1084:18;14616:25:0;965:203:1;20551:1073:0;;;;;;;;;;-1:-1:-1;20551:1073:0;;;;;:::i;:::-;;:::i;23467:103::-;;;;;;;;;;-1:-1:-1;23467:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;23550:12:0;23523:7;23550:12;;;:8;:12;;;;;;;23467:103;;;;1319:25:1;;;1307:2;1292:18;23467:103:0;1173:177:1;23676:91:0;;;;;;;;;;-1:-1:-1;23676:91:0;;;;;:::i;:::-;-1:-1:-1;;;;;23751:8:0;23727:4;23751:8;;;:4;:8;;;;;;;;;23676:91;16070:255;;;;;;:::i;:::-;;:::i;17568:379::-;;;;;;:::i;:::-;;:::i;16598:267::-;;;;;;:::i;:::-;;:::i;18236:329::-;;;;;;:::i;:::-;;:::i;24808:118::-;;;;;;;;;;-1:-1:-1;24894:17:0;:24;24808:118;;16001:61;;;;;;;;;;;;;:::i;24559:114::-;;;;;;;;;;-1:-1:-1;24643:15:0;:22;24559:114;;22224:159;;;;;;;;;;-1:-1:-1;22224:159:0;;;;;:::i;:::-;;:::i;24681:121::-;;;;;;;;;;-1:-1:-1;24681:121:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1957:31:1;;;1939:50;;1927:2;1912:18;24681:121:0;1795:200:1;16333:257:0;;;;;;:::i;:::-;;:::i;18573:445::-;;;;;;:::i;:::-;;:::i;24934:113::-;;;;;;;;;;-1:-1:-1;24934:113:0;;;;;:::i;:::-;;:::i;22569:94::-;;;;;;;;;;-1:-1:-1;22569:94:0;;;;;:::i;:::-;;:::i;19607:936::-;;;;;;;;;;-1:-1:-1;19607:936:0;;;;;:::i;:::-;;:::i;23987:97::-;;;;;;;;;;-1:-1:-1;24061:8:0;:15;23987:97;;23775:101;;;;;;;;;;-1:-1:-1;23775:101:0;;;;;:::i;:::-;-1:-1:-1;;;;;23855:13:0;23831:4;23855:13;;;:9;:13;;;;;;;;;23775:101;17955:273;;;;;;:::i;:::-;;:::i;14648:30::-;;;;;;;;;;-1:-1:-1;14648:30:0;;;;;:::i;:::-;;:::i;22671:763::-;;;;;;;;;;-1:-1:-1;22671:763:0;;;;;:::i;:::-;;:::i;23884:95::-;;;;;;;;;;-1:-1:-1;23957:7:0;:14;23884:95;;22069:149;;;;;;;;;;-1:-1:-1;22069:149:0;;;;;:::i;:::-;;:::i;21916:147::-;;;;;;;;;;-1:-1:-1;21916:147:0;;;;;:::i;:::-;;:::i;24329:99::-;;;;;;;;;;-1:-1:-1;24407:13:0;;-1:-1:-1;;;;;24407:13:0;24329:99;;24092:107;;;;;;;;;;-1:-1:-1;24171:13:0;:20;24092:107;;22391:82;;;;;;;;;;-1:-1:-1;22391:82:0;;;;;:::i;:::-;;:::i;24207:114::-;;;;;;;;;;-1:-1:-1;24207:114:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14585:24::-;;;;;;;;;;-1:-1:-1;14585:24:0;;;;;:::i;:::-;;:::i;24436:117::-;;;;;;;;;;-1:-1:-1;24436:117:0;;;;;:::i;:::-;;:::i;16873:330::-;;;;;;:::i;:::-;;:::i;21762:118::-;;;;;;;;;;-1:-1:-1;21762:118:0;;;;;:::i;:::-;;:::i;19026:573::-;;;;;;:::i;:::-;;:::i;22479:84::-;;;;;;;;;;-1:-1:-1;22479:84:0;;;;;:::i;:::-;;:::i;17211:349::-;;;;;;:::i;:::-;;:::i;25055:116::-;25114:4;25138:25;25159:3;25138:20;:25::i;:::-;25131:32;25055:116;-1:-1:-1;;25055:116:0:o;21634:120::-;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;;;;;;;;;21705:17:::1;21711:10;21705:5;:17::i;:::-;21733:13;21742:3;21733:8;:13::i;:::-;21634:120:::0;:::o;14616:25::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14616:25:0;;-1:-1:-1;14616:25:0;:::o;20551:1073::-;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;20630:9:::1;:14:::0;;;::::1;::::0;;;;;;:27:::1;;::::0;-1:-1:-1;;;;;20630:27:0::1;20622:68;;;;-1:-1:-1::0;;;20622:68:0::1;;;;;;;:::i;:::-;20710:9;:14:::0;;;::::1;::::0;;;;;;:23:::1;;::::0;-1:-1:-1;;;20710:23:0;::::1;;;20709:24;20701:53;;;;-1:-1:-1::0;;;20701:53:0::1;;;;;;;:::i;:::-;20765:17;20771:10;20765:5;:17::i;:::-;20802:10;20797:16;::::0;;;:4:::1;:16;::::0;;;;;::::1;;20793:693;;;20877:9;:14:::0;;;::::1;::::0;;;;;;;;:22:::1;;20855:57:::0;;;;;;::::1;::::0;;;;;;;;;;::::1;::::0;;;::::1;20877:22:::0;20855:57;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;20855:57:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;20901:10;20855:21;:57::i;:::-;20830:9;:14:::0;;;::::1;::::0;;;;;;;:82;;::::1;::::0;:22:::1;::::0;;::::1;::::0;:82;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;20927:9:0::1;:14:::0;;;::::1;::::0;;;;;;20952:4:::1;20927:22;:29:::0;;-1:-1:-1;;20927:29:0::1;-1:-1:-1::0;;;20927:29:0::1;::::0;;20793:693:::1;;;20983:10;20978:16;::::0;;;:4:::1;:16;::::0;;;;;::::1;;20974:512;;;21031:9;:14:::0;;;::::1;::::0;;;;;;;;:22:::1;;21019:47:::0;;;;;;::::1;::::0;;;;;;;;;;::::1;::::0;;;::::1;21031:22:::0;21019:47;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;21019:47:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;21055:10;21019:11;:47::i;:::-;21011:97;;;;-1:-1:-1::0;;;21011:97:0::1;;;;;;;:::i;:::-;21170:9;:14:::0;;;::::1;::::0;;;;;;;;:22:::1;;21148:57:::0;;;;;;::::1;::::0;;;;;;;;;;::::1;::::0;;;::::1;21170:22:::0;21148:57;;::::1;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;21148:57:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;21194:10;21148:21;:57::i;:::-;21123:9;:14:::0;;;::::1;::::0;;;;;;;:82;;::::1;::::0;:22:::1;::::0;;::::1;::::0;:82;;;::::1;::::0;::::1;:::i;:::-;;20974:512;;;21237:10;21227:21;::::0;;;:9:::1;:21;::::0;;;;;::::1;;21223:263;;;21285:9;:14:::0;;;::::1;::::0;;;;;;;;:27:::1;;21273:52:::0;;;;;;::::1;::::0;;;;;;;;;;::::1;::::0;;;::::1;21285:27:::0;21273:52;;::::1;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;21273:52:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;21314:10;21273:11;:52::i;:::-;21265:102;;;;-1:-1:-1::0;;;21265:102:0::1;;;;;;;:::i;:::-;21434:9;:14:::0;;;::::1;::::0;;;;;;;;:27:::1;;21412:62:::0;;;;;;::::1;::::0;;;;;;;;;;::::1;::::0;;;::::1;21434:27:::0;21412:62;;::::1;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;21412:62:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;21463:10;21412:21;:62::i;:::-;21382:9;:14:::0;;;::::1;::::0;;;;;;;:92;;::::1;::::0;:27:::1;::::0;;::::1;::::0;:92;;;::::1;::::0;::::1;:::i;:::-;;21223:263;21532:3;21501:35;21515:15;21501:35;;;;1319:25:1::0;;1307:2;1292:18;;1173:177;21501:35:0::1;;;;;;;;21551:25;21572:3;21551:20;:25::i;:::-;21547:70;;;21593:12;21601:3;21593:7;:12::i;16070:255::-:0;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;16162:15:::1;16174:2;16162:11;:15::i;:::-;16161:16;16153:60;;;;-1:-1:-1::0;;;16153:60:0::1;;;;;;;:::i;:::-;16224:17;16230:10;16224:5;:17::i;:::-;16252:65;16273:4;16252:65;;;;;;;;;;;;;-1:-1:-1::0;;;16252:65:0::1;;::::0;16299:1:::1;16313:2;16302:14;;;;;;;-1:-1:-1::0;;;;;1129:32:1;;;;1111:51;;1099:2;1084:18;;965:203;16302:14:0::1;;;;;;;;;;;;;16252:12;:65::i;17568:379::-:0;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17671:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;;::::1;;17663:54;;;::::0;-1:-1:-1;;;17663:54:0;;16258:2:1;17663:54:0::1;::::0;::::1;16240:21:1::0;16297:2;16277:18;;;16270:30;16336;16316:18;;;16309:58;16384:18;;17663:54:0::1;16056:352:1::0;17663:54:0::1;-1:-1:-1::0;;;;;17736:12:0;::::1;;::::0;;;:8:::1;:12;::::0;;;;;17780:15:::1;::::0;17736:41:::1;::::0;15234:6:::1;::::0;17736:41:::1;:::i;:::-;:59;17728:98;;;::::0;-1:-1:-1;;;17728:98:0;;16880:2:1;17728:98:0::1;::::0;::::1;16862:21:1::0;16919:2;16899:18;;;16892:30;16958:28;16938:18;;;16931:56;17004:18;;17728:98:0::1;16678:350:1::0;17728:98:0::1;17837:17;17843:10;17837:5;:17::i;:::-;17865:74;17886:4;17865:74;;;;;;;;;;;;;;;;::::0;17921:1:::1;17935:2;17924:14;;;;;;;-1:-1:-1::0;;;;;1129:32:1;;;;1111:51;;1099:2;1084:18;;965:203;16598:267:0;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;16696:15:::1;16708:2;16696:11;:15::i;:::-;16695:16;16687:60;;;;-1:-1:-1::0;;;16687:60:0::1;;;;;;;:::i;:::-;16758:17;16764:10;16758:5;:17::i;:::-;16786:71;16807:4;16786:71;;;;;;;;;;;;;-1:-1:-1::0;;;16786:71:0::1;;::::0;16839:1:::1;16853:2;16842:14;;;;;;;-1:-1:-1::0;;;;;1129:32:1;;;;1111:51;;1099:2;1084:18;;965:203;18236:329:0;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18372:23:0;::::1;18390:4;18372:23;;18364:69;;;;-1:-1:-1::0;;;18364:69:0::1;;;;;;;:::i;:::-;18444:17;18450:10;18444:5;:17::i;:::-;18472:85;18485:6;18472:85;;;;;;;;;;;;;;;;::::0;18522:1:::1;18536:10;18548:7;18525:31;;;;;;;;-1:-1:-1::0;;;;;17627:32:1;;;;17609:51;;17691:2;17676:18;;17669:34;17597:2;17582:18;;17435:274;18472:85:0::1;18236:329:::0;;;:::o;16001:61::-;16037:17;16043:10;16037:5;:17::i;:::-;16001:61::o;22224:159::-;15512:10;15534:4;15512:27;15504:56;;;;-1:-1:-1;;;15504:56:0;;;;;;;:::i;:::-;22296:15:::1;22308:2;22296:11;:15::i;:::-;22295:16;22287:60;;;;-1:-1:-1::0;;;22287:60:0::1;;;;;;;:::i;:::-;22358:17;22372:2;22358:13;:17::i;24681:121::-:0;24746:6;24772:17;24790:3;24772:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24772:22:0;24765:29;;24681:121;;;:::o;16333:257::-;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;16426:15:::1;16438:2;16426:11;:15::i;:::-;16425:16;16417:60;;;;-1:-1:-1::0;;;16417:60:0::1;;;;;;;:::i;:::-;16488:17;16494:10;16488:5;:17::i;:::-;16516:66;16537:4;16516:66;;;;;;;;;;;;;-1:-1:-1::0;;;16516:66:0::1;;::::0;16564:1:::1;16578:2;16567:14;;;;;;;-1:-1:-1::0;;;;;1129:32:1;;;;1111:51;;1099:2;1084:18;;965:203;18573:445:0;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18723:24:0;::::1;18742:4;18723:24;;18715:70;;;;-1:-1:-1::0;;;18715:70:0::1;;;;;;;:::i;:::-;18801:9;18796:134;18826:4;18820:18;18816:1;:22;18796:134;;;18874:4;18880:1;18868:14;;;;;;;;:::i;:::-;;::::0;;;;-1:-1:-1;;;;;;18868:14:0;-1:-1:-1;;;18868:22:0::1;;18860:58;;;::::0;-1:-1:-1;;;18860:58:0;;18393:2:1;18860:58:0::1;::::0;::::1;18375:21:1::0;18432:2;18412:18;;;18405:30;-1:-1:-1;;;18451:18:1;;;18444:53;18514:18;;18860:58:0::1;18191:347:1::0;18860:58:0::1;18840:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18796:134;;;;18940:17;18946:10;18940:5;:17::i;:::-;18968:42;18981:7;18990:4;18996:6;19004:5;18968:12;:42::i;:::-;18573:445:::0;;;;:::o;24934:113::-;24993:4;25017:22;25035:3;25017:17;:22::i;22569:94::-;15512:10;15534:4;15512:27;15504:56;;;;-1:-1:-1;;;15504:56:0;;;;;;;:::i;:::-;22635:20:::1;22652:2;22635:16;:20::i;19607:936::-:0;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;19678:19:::1;19700:14:::0;;;::::1;::::0;;;;;;;19678:36;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;19678:36:0;::::1;::::0;;-1:-1:-1;;;19678:36:0;::::1;-1:-1:-1::0;;;;;19678:36:0;;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;;;19678:36:0;::::1;;;;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;19678:36:0;::::1;::::0;::::1;;;;::::0;;::::1;::::0;;;;-1:-1:-1;;;19678:36:0;::::1;::::0;::::1;;;::::0;;;;;;;;-1:-1:-1;;;19678:36:0;::::1;::::0;::::1;;;::::0;;;;-1:-1:-1;;;19678:36:0;;::::1;::::0;;::::1;;;::::0;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;::::1;::::0;;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;19678:36:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;19678:36:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;19678:36:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;19678:36:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;19678:36:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;19733:3;:16;;;-1:-1:-1::0;;;;;19733:21:0::1;19753:1;19733:21;;19725:57;;;;-1:-1:-1::0;;;19725:57:0::1;;;;;;;:::i;:::-;19802:3;:12;;;19801:13;19793:42;;;;-1:-1:-1::0;;;19793:42:0::1;;;;;;;:::i;:::-;19846:17;19852:10;19846:5;:17::i;:::-;19883:10;19878:16;::::0;;;:4:::1;:16;::::0;;;;;::::1;;19874:534;;;19920:36;19932:3;:11;;;19945:10;19920:11;:36::i;:::-;19919:37;19911:66;;;;-1:-1:-1::0;;;19911:66:0::1;;;;;;;:::i;:::-;19992:9;:14:::0;;;::::1;::::0;;;;;;:22:::1;;:39:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;19992:39:0::1;20020:10;19992:39;::::0;;19874:534:::1;;;20058:10;20053:16;::::0;;;:4:::1;:16;::::0;;;;;::::1;;20049:359;;;20095:36;20107:3;:11;;;20120:10;20095:11;:36::i;:::-;20094:37;20086:66;;;;-1:-1:-1::0;;;20086:66:0::1;;;;;;;:::i;:::-;20167:9;:14:::0;;;::::1;::::0;;;;;;:22:::1;;:39:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;20167:39:0::1;20195:10;20167:39;::::0;;20049:359:::1;;;20238:10;20228:21;::::0;;;:9:::1;:21;::::0;;;;;::::1;;20224:184;;;20275:41;20287:3;:16;;;20305:10;20275:11;:41::i;:::-;20274:42;20266:71;;;;-1:-1:-1::0;;;20266:71:0::1;;;;;;;:::i;:::-;20352:9;:14:::0;;;::::1;::::0;;;;;;:27:::1;;:44:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;20352:44:0::1;20385:10;20352:44;::::0;;20224:184:::1;20453:3;20423:34;20436:15;20423:34;;;;1319:25:1::0;;1307:2;1292:18;;1173:177;20423:34:0::1;;;;;;;;20472:22;20490:3;20472:17;:22::i;:::-;20468:68;;;20511:13;20520:3;20511:8;:13::i;:::-;19667:876;19607:936:::0;:::o;17955:273::-;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18069:27:0;::::1;18091:4;18069:27;;18061:73;;;;-1:-1:-1::0;;;18061:73:0::1;;;;;;;:::i;:::-;18145:17;18151:10;18145:5;:17::i;:::-;18173:47;18186:10;18173:47;;;;;;;;;;;::::0;18202:6:::1;18210:9;;;;;;;;;;;::::0;18173:12:::1;:47::i;14648:30::-:0;;;;;;;;;;;;22671:763;15512:10;15534:4;15512:27;15504:56;;;;-1:-1:-1;;;15504:56:0;;;;;;;:::i;:::-;22738:20:::1;22774:9;22769:658;22793:9;:14:::0;;;::::1;::::0;;;;;;:21:::1;;:28:::0;22789:32;::::1;22769:658;;;22843:12;22881:14:::0;;;::::1;::::0;;;;;;:21:::1;;:24:::0;;22843:12;;22881:21;22903:1;;22881:24;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;22918:14;;;;;;;;;;;:20:::1;;:23:::0;;-1:-1:-1;;;;;22881:24:0;;::::1;::::0;22939:1;;22918:23;::::1;;;;;:::i;:::-;;;;;;;;;22960:9;:14:::0;22970:3:::1;22960:14;;;;;;;;;;;:24;;22985:1;22960:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;22989:9;:14:::0;22999:3:::1;22989:14;;;;;;;;;;;:19;;23009:1;22989:22;;;;;;;;:::i;:::-;;;;;;;;22943:69;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;22943:69:0;;::::1;::::0;;;;;;;22881:132:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22842:171;;;;23061:6;23044:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;23028:45;;23093:7;23092:8;:32;;;;;23122:2;23104:7;:14;:20;;23092:32;23088:285;;;23244:4;23235:7;23231:18;23220:29;;23319:6;23337:7;23326:29;;;;;;;;;;;;:::i;:::-;23302:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23286:71;;23088:285;23392:7;23387:28;;23408:6;23401:14;;-1:-1:-1::0;;;23401:14:0::1;;;;;;;;:::i;23387:28::-;22827:600;;22823:3;;;;;:::i;:::-;;;;22769:658;;22069:149:::0;15512:10;15534:4;15512:27;15504:56;;;;-1:-1:-1;;;15504:56:0;;;;;;;:::i;:::-;22136:15:::1;22148:2;22136:11;:15::i;:::-;22135:16;22127:60;;;;-1:-1:-1::0;;;22127:60:0::1;;;;;;;:::i;:::-;22198:12;22207:2;22198:8;:12::i;21916:147::-:0;15512:10;15534:4;15512:27;15504:56;;;;-1:-1:-1;;;15504:56:0;;;;;;;:::i;:::-;21982:15:::1;21994:2;21982:11;:15::i;:::-;21981:16;21973:60;;;;-1:-1:-1::0;;;21973:60:0::1;;;;;;;:::i;:::-;22044:11;22052:2;22044:7;:11::i;22391:82::-:0;15512:10;15534:4;15512:27;15504:56;;;;-1:-1:-1;;;15504:56:0;;;;;;;:::i;:::-;22451:14:::1;22462:2;22451:10;:14::i;24207:114::-:0;24264:15;;:::i;:::-;24299:9;:14;;;;;;;;;;;;24292:21;;;;;;;;;-1:-1:-1;;;;;24292:21:0;;;;-1:-1:-1;;;24292:21:0;;-1:-1:-1;;;;;24292:21:0;;;;;;;;;;;;;;;;;;;;;;;;24299:14;24292:21;;;;-1:-1:-1;;;24292:21:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;24292:21:0;;;;;;;;;;;;;;-1:-1:-1;;;24292:21:0;;;;;;;;;;;;;;-1:-1:-1;;;24292:21:0;;;;;;;;;;-1:-1:-1;;;24292:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24292:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24292:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24292:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24292:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24292:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24207:114;;;:::o;14585:24::-;;;;;;;;;;;;24436:117;24499:6;24525:15;24541:3;24525:20;;;;;;;;:::i;16873:330::-;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16970:8:0;::::1;;::::0;;;:4:::1;:8;::::0;;;;;::::1;;16962:36;;;::::0;-1:-1:-1;;;16962:36:0;;23043:2:1;16962:36:0::1;::::0;::::1;23025:21:1::0;23082:2;23062:18;;;23055:30;-1:-1:-1;;;23101:18:1;;;23094:45;23156:18;;16962:36:0::1;22841:339:1::0;16962:36:0::1;-1:-1:-1::0;;;;;17017:12:0;::::1;;::::0;;;:8:::1;:12;::::0;;;;;17055:15:::1;::::0;17017:35:::1;::::0;15119:8:::1;::::0;17017:35:::1;:::i;:::-;:53;17009:79;;;::::0;-1:-1:-1;;;17009:79:0;;23387:2:1;17009:79:0::1;::::0;::::1;23369:21:1::0;23426:2;23406:18;;;23399:30;-1:-1:-1;;;23445:18:1;;;23438:43;23498:18;;17009:79:0::1;23185:337:1::0;17009:79:0::1;17099:17;17105:10;17099:5;:17::i;:::-;17127:68;17148:4;17127:68;;;;;;;;;;;;;-1:-1:-1::0;;;17127:68:0::1;;::::0;17177:1:::1;17191:2;17180:14;;;;;;;-1:-1:-1::0;;;;;1129:32:1;;;;1111:51;;1099:2;1084:18;;965:203;21762:118:0;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;21832:17:::1;21838:10;21832:5;:17::i;:::-;21860:12;21868:3;21860:7;:12::i;19026:573::-:0;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;19202:9:::1;19197:307;19221:7;:14;19217:1;:18;19197:307;;;19287:4;-1:-1:-1::0;;;;;19265:27:0::1;:7;19273:1;19265:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;19265:27:0::1;;;19257:73;;;;-1:-1:-1::0;;;19257:73:0::1;;;;;;;:::i;:::-;19350:9;19345:148;19375:4;19380:1;19375:7;;;;;;;;:::i;:::-;;;;;;;19369:21;19365:1;:25;19345:148;;;19430:4;19435:1;19430:7;;;;;;;;:::i;:::-;;;;;;;19439:1;19424:17;;;;;;;;:::i;:::-;;::::0;;;;-1:-1:-1;;;;;;19424:17:0;-1:-1:-1;;;19424:25:0::1;;19416:61;;;::::0;-1:-1:-1;;;19416:61:0;;18393:2:1;19416:61:0::1;::::0;::::1;18375:21:1::0;18432:2;18412:18;;;18405:30;-1:-1:-1;;;18451:18:1;;;18444:53;18514:18;;19416:61:0::1;18191:347:1::0;19416:61:0::1;19392:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19345:148;;;-1:-1:-1::0;19237:3:0;::::1;::::0;::::1;:::i;:::-;;;;19197:307;;;;19514:17;19520:10;19514:5;:17::i;:::-;19542:49;19562:7;19571:4;19577:6;19585:5;19542:19;:49::i;22479:84::-:0;15512:10;15534:4;15512:27;15504:56;;;;-1:-1:-1;;;15504:56:0;;;;;;;:::i;:::-;22540:15:::1;22552:2;22540:11;:15::i;17211:349::-:0;15393:23;15405:10;15393:11;:23::i;:::-;15385:60;;;;-1:-1:-1;;;15385:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17309:8:0;::::1;;::::0;;;:4:::1;:8;::::0;;;;;::::1;;17301:44;;;::::0;-1:-1:-1;;;17301:44:0;;23729:2:1;17301:44:0::1;::::0;::::1;23711:21:1::0;23768:2;23748:18;;;23741:30;23807:25;23787:18;;;23780:53;23850:18;;17301:44:0::1;23527:347:1::0;17301:44:0::1;-1:-1:-1::0;;;;;17364:12:0;::::1;;::::0;;;:8:::1;:12;::::0;;;;;17403:15:::1;::::0;17364:36:::1;::::0;15174:8:::1;::::0;17364:36:::1;:::i;:::-;:54;17356:88;;;::::0;-1:-1:-1;;;17356:88:0;;24081:2:1;17356:88:0::1;::::0;::::1;24063:21:1::0;24120:2;24100:18;;;24093:30;-1:-1:-1;;;24139:18:1;;;24132:51;24200:18;;17356:88:0::1;23879:345:1::0;17356:88:0::1;17455:17;17461:10;17455:5;:17::i;:::-;17483:69;17504:4;17483:69;;;;;;;;;;;;;-1:-1:-1::0;;;17483:69:0::1;;::::0;17534:1:::1;17548:2;17537:14;;;;;;;-1:-1:-1::0;;;;;1129:32:1;;;;1111:51;;1099:2;1084:18;;965:203;33882:767:0;33948:4;33987:14;;;;;;;;;;;33965:36;;;;;;;;;-1:-1:-1;;;;;33965:36:0;;;;-1:-1:-1;;;33965:36:0;;-1:-1:-1;;;;;33965:36:0;;;;;;;;;;;;;;;;;;;;;;;;33948:4;;33965:36;;;;-1:-1:-1;;;33965:36:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;33965:36:0;;;;;;;;;;;;;;-1:-1:-1;;;33965:36:0;;;;;;;;;;;;;;-1:-1:-1;;;33965:36:0;;;;;;;;;;-1:-1:-1;;;33965:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33965:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33965:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33965:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33965:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33965:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34039:1;34020:3;:16;;;-1:-1:-1;;;;;34020:20:0;;34012:56;;;;-1:-1:-1;;;34012:56:0;;;;;;;:::i;:::-;34088:3;:12;;;34087:13;34079:42;;;;-1:-1:-1;;;34079:42:0;;;;;;;:::i;:::-;34136:3;:11;;;34132:28;;;-1:-1:-1;34156:4:0;;33882:767;-1:-1:-1;;33882:767:0:o;34132:28::-;34191:16;;;;-1:-1:-1;;;;;34171:36:0;:17;34222:3;:16;;;:42;;;;;;;;:::i;:::-;;34218:326;;;34281:37;14836:6;34281:37;;:::i;:::-;;;34218:326;;;34360:17;34340:3;:16;;;:37;;;;;;;;:::i;:::-;;34336:208;;;34394:32;14780:6;34394:32;;:::i;34336:208::-;34468:16;34448:3;:16;;;:36;;;;;;;;:::i;:::-;;34444:100;;;34501:31;14724:11;34501:31;;:::i;:::-;;;34444:100;34577:28;15064:7;34577:9;:28;:::i;:::-;34558:15;:47;34554:64;;-1:-1:-1;34614:4:0;;33882:767;-1:-1:-1;;;33882:767:0:o;34554:64::-;-1:-1:-1;34636:5:0;;33882:767;-1:-1:-1;;;33882:767:0:o;34657:125::-;-1:-1:-1;;;;;34737:8:0;;34713:4;34737:8;;;:4;:8;;;;;;;;;:20;;-1:-1:-1;;;;;;34749:8:0;;;;;;:4;:8;;;;;;;;34737:20;:37;;;-1:-1:-1;;;;;;;34761:13:0;;;;;:9;:13;;;;;;;;;34657:125::o;25205:85::-;-1:-1:-1;;;;;25252:12:0;;;;;:8;:12;;;;;25267:15;25252:30;;25205:85::o;30196:782::-;30255:9;:14;;;;;;;;;;:27;;;-1:-1:-1;;;;;30255:27:0;30247:68;;;;-1:-1:-1;;;30247:68:0;;;;;;;:::i;:::-;30334:22;30352:3;30334:17;:22::i;:::-;30326:56;;;;-1:-1:-1;;;30326:56:0;;24431:2:1;30326:56:0;;;24413:21:1;24470:2;24450:18;;;24443:30;-1:-1:-1;;;24489:18:1;;;24482:51;24550:18;;30326:56:0;24229:345:1;30326:56:0;30393:24;30413:3;30393:19;:24::i;:::-;30428:9;:14;;;;;;;;;;;30454:4;30428:23;:30;;-1:-1:-1;;;;30428:30:0;-1:-1:-1;;;30428:30:0;;;30539:56;;;;1319:25:1;;;30428:9:0;;30518:4;;30428:9;;1292:18:1;;30539:56:0;;;-1:-1:-1;;30539:56:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30539:56:0;-1:-1:-1;;;30539:56:0;;;30510:86;;;30539:56;30510:86;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30607:9:0;:14;;;;;;;;;;:23;;:34;;-1:-1:-1;;;;30607:34:0;30633:8;;-1:-1:-1;;;30607:34:0;;;;;;;;;30633:8;;-1:-1:-1;30471:125:0;-1:-1:-1;30607:34:0;;30656:32;;;30686:2;30668:7;:14;:20;;30656:32;30652:249;;;30796:4;30787:7;30783:18;30772:29;;30871:7;30860:29;;;;;;;;;;;;:::i;:::-;30830:9;:14;;;;;;;;;;;:59;;;;:27;;;;;:59;;;;;;:::i;:::-;;30652:249;30916:54;;-1:-1:-1;;;;;30940:15:0;1957:31:1;;1939:50;;30916:54:0;;;;;1927:2:1;1912:18;30916:54:0;;;;;;;30236:742;;30196:782;:::o;35050:483::-;35140:16;35174:22;35186:5;35193:2;35174:11;:22::i;:::-;35173:23;:44;;;-1:-1:-1;35200:12:0;;:17;35173:44;35169:62;;;-1:-1:-1;35226:5:0;35219:12;;35169:62;35242:20;35294:1;35279:5;:12;:16;;;;:::i;:::-;-1:-1:-1;;;;;35265:31:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35265:31:0;;35242:54;;35307:9;35331;35355:150;35366:5;:12;35362:1;:16;35355:150;;;35416:2;-1:-1:-1;;;;;35404:14:0;:5;35410:1;35404:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;35404:14:0;;35400:94;;35448:5;35454:1;35448:8;;;;;;;;:::i;:::-;;;;;;;35439:3;35443:1;35439:6;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35439:17:0;;;:6;;;;;;;;;;;:17;35475:3;;;;:::i;:::-;;;;35400:94;35380:3;;;;:::i;:::-;;;;35355:150;;;-1:-1:-1;35522:3:0;;35050:483;-1:-1:-1;;;;35050:483:0:o;34816:228::-;34896:4;;34913:101;34937:5;:12;34933:1;:16;34913:101;;;34987:2;-1:-1:-1;;;;;34975:14:0;:5;34981:1;34975:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;34975:14:0;;34971:31;;;34998:4;34991:11;;;;;34971:31;34951:3;;;;:::i;:::-;;;;34913:101;;30986:304;31044:9;:14;;;;;;;;;;:27;;;-1:-1:-1;;;;;31044:27:0;31036:68;;;;-1:-1:-1;;;31036:68:0;;;;;;;:::i;:::-;31123:25;31144:3;31123:20;:25::i;:::-;31115:62;;;;-1:-1:-1;;;31115:62:0;;25117:2:1;31115:62:0;;;25099:21:1;25156:2;25136:18;;;25129:30;25195:26;25175:18;;;25168:54;25239:18;;31115:62:0;24915:348:1;31115:62:0;31188:24;31208:3;31188:19;:24::i;:::-;31228:54;;-1:-1:-1;;;;;31252:15:0;1957:31:1;;1939:50;;31228:54:0;;;;;1927:2:1;1912:18;31228:54:0;;;;;;;30986:304;:::o;28041:476::-;28182:16;;;28196:1;28182:16;;;;;;;;;28156:23;;28182:16;;;;;;;;;;;-1:-1:-1;28182:16:0;28156:42;;28221:7;28209:6;28216:1;28209:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28209:19:0;;;;:9;;;;;;;;;;;:19;28261:15;;;28274:1;28261:15;;;;;;;;;28239:19;;28261:15;;;;;;;;;;;;;;;;;;;;28239:37;;28296:4;28287:3;28291:1;28287:6;;;;;;;;:::i;:::-;;;;;;;;;;:13;28336:16;;;28350:1;28336:16;;;;;;;;;28311:22;;28336:16;;;;;;;;;;;;-1:-1:-1;28336:16:0;28311:41;;28374:6;28363:5;28369:1;28363:8;;;;;;;;:::i;:::-;;;;;;;;;;:17;28413:14;;;28425:1;28413:14;;;;;;;;;28391:19;;28413:14;;;;;;;;;;;;;;;;;;;;28391:36;;28448:5;28438:4;28443:1;28438:7;;;;;;;;:::i;:::-;;;;;;:15;;;;28464:45;28484:6;28492:3;28497:5;28504:4;28464:19;:45::i;:::-;28145:372;;;;28041:476;;;;:::o;25859:299::-;25923:15;25935:2;25923:11;:15::i;:::-;25922:16;25914:60;;;;-1:-1:-1;;;25914:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25990:13:0;;;;;;:9;:13;;;;;;;;25985:166;;26020:9;26026:2;26020:5;:9::i;:::-;-1:-1:-1;;;;;26044:13:0;;;;;;:9;:13;;;;;;;;:20;;-1:-1:-1;;26044:20:0;26060:4;26044:20;;;;;;26079:13;:22;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26079:22:0;;;;;26121:18;;1111:51:1;;;26121:18:0;;1084::1;26121::0;;;;;;;;25859:299;:::o;31878:1996::-;31941:4;31980:14;;;;;;;;;;;31958:36;;;;;;;;;-1:-1:-1;;;;;31958:36:0;;;;-1:-1:-1;;;31958:36:0;;-1:-1:-1;;;;;31958:36:0;;;;;;;;;;;;;;;;;;;;;;;;31941:4;;31958:36;;;;-1:-1:-1;;;31958:36:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;31958:36:0;;;;;;;;;;;;;;-1:-1:-1;;;31958:36:0;;;;;;;;;;;;;;-1:-1:-1;;;31958:36:0;;;;;;;;;;-1:-1:-1;;;31958:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31958:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31958:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31958:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31958:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31958:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32032:1;32013:3;:16;;;-1:-1:-1;;;;;32013:20:0;;32005:56;;;;-1:-1:-1;;;32005:56:0;;;;;;;:::i;:::-;32081:3;:12;;;32080:13;32072:42;;;;-1:-1:-1;;;32072:42:0;;;;;;;:::i;:::-;32129:3;:11;;;32125:29;;;-1:-1:-1;32149:5:0;;31878:1996;-1:-1:-1;;31878:1996:0:o;32125:29::-;32185:16;;;;-1:-1:-1;;;;;32165:36:0;:17;32218:3;:16;;;:42;;;;;;;;:::i;:::-;;32214:326;;;32277:37;14836:6;32277:37;;:::i;:::-;;;32214:326;;;32356:17;32336:3;:16;;;:37;;;;;;;;:::i;:::-;;32332:208;;;32390:32;14780:6;32390:32;;:::i;32332:208::-;32464:16;32444:3;:16;;;:36;;;;;;;;:::i;:::-;;32440:100;;;32497:31;14724:11;32497:31;;:::i;:::-;;;32440:100;32611:28;15064:7;32611:9;:28;:::i;:::-;32592:15;:47;32588:65;;-1:-1:-1;32648:5:0;;31878:1996;-1:-1:-1;;;31878:1996:0:o;32588:65::-;32679:11;;;;:18;32733:16;;;;:37;;14724:11;;32733:37;:::i;:::-;-1:-1:-1;;;;;32714:56:0;:15;:56;;:80;;;;-1:-1:-1;32780:7:0;:14;32774:20;;;32714:80;32710:97;;;-1:-1:-1;32803:4:0;;31878:1996;-1:-1:-1;;;;31878:1996:0:o;32710:97::-;32878:9;32860:15;:27;32856:45;;;-1:-1:-1;32896:5:0;;31878:1996;-1:-1:-1;;;;31878:1996:0:o;32856:45::-;32925:11;;;;:18;32967:16;;;;:23;33014:1;33053:6;33014:1;33058;33053:6;:::i;:::-;33030:13;:20;:29;33026:64;;;33066:13;:20;:24;;33089:1;;33066:24;:::i;:::-;33061:29;;33026:64;33110:1;33105:2;:6;33101:18;;;-1:-1:-1;33118:1:0;33101:18;33152:9;33134:15;:27;:83;;;;-1:-1:-1;33172:7:0;:14;33190:1;-1:-1:-1;33172:19:0;:44;;33198:7;:14;:18;;33215:1;;33198:18;:::i;:::-;33172:44;;;33194:1;33172:44;33165:2;:52;;33134:83;33130:100;;;-1:-1:-1;33226:4:0;;31878:1996;-1:-1:-1;;;;;;;31878:1996:0:o;33130:100::-;33263:23;14881:8;33263:9;:23;:::i;:::-;33245:15;:41;:52;;;;;33296:1;33290:2;:7;;33245:52;:63;;;;;33307:1;33301:2;:7;;33245:63;:75;;;;;33318:2;33312;:8;;33245:75;33241:92;;;-1:-1:-1;33329:4:0;;31878:1996;-1:-1:-1;;;;;;;31878:1996:0:o;33241:92::-;33366:23;14926:8;33366:9;:23;:::i;:::-;33348:15;:41;:52;;;;;33399:1;33393:2;:7;;33348:52;:63;;;;;33410:1;33404:2;:7;;33348:63;:74;;;;;33421:1;33415:2;:7;;33348:74;33344:91;;;-1:-1:-1;33431:4:0;;31878:1996;-1:-1:-1;;;;;;;31878:1996:0:o;33344:91::-;33468:23;14926:8;33468:9;:23;:::i;:::-;33450:15;:41;:52;;;;;33501:1;33495:2;:7;;33450:52;:64;;;;;33512:2;33506;:8;;33450:64;33446:81;;;-1:-1:-1;33523:4:0;;31878:1996;-1:-1:-1;;;;;;;31878:1996:0:o;33446:81::-;-1:-1:-1;33543:1:0;33582:6;33543:1;33587;33582:6;:::i;:::-;33559:13;:20;:29;33555:64;;;33595:13;:20;:24;;33618:1;;33595:24;:::i;:::-;33590:29;;33555:64;33639:1;33634:2;:6;33630:18;;;-1:-1:-1;33647:1:0;33630:18;33681:23;14971:7;33681:9;:23;:::i;:::-;33663:15;:41;:52;;;;;33714:1;33708:2;:7;;33663:52;:64;;;;;33725:2;33719;:8;;33663:64;33659:81;;;-1:-1:-1;33736:4:0;;31878:1996;-1:-1:-1;;;;;;;31878:1996:0:o;33659:81::-;33773:23;15015:7;33773:9;:23;:::i;:::-;33755:15;:41;:75;;;;-1:-1:-1;33806:13:0;:20;:24;;33829:1;;33806:24;:::i;:::-;33800:2;:30;;33755:75;33751:92;;;-1:-1:-1;33839:4:0;;31878:1996;-1:-1:-1;;;;;;;31878:1996:0:o;33751:92::-;-1:-1:-1;33861:5:0;;31878:1996;-1:-1:-1;;;;;;;31878:1996:0:o;27365:668::-;27431:13;:20;27454:1;-1:-1:-1;27423:78:0;;;;-1:-1:-1;;;27423:78:0;;25711:2:1;27423:78:0;;;25693:21:1;25750:2;25730:18;;;25723:30;25789:34;25769:18;;;25762:62;-1:-1:-1;;;25840:18:1;;;25833:39;25889:19;;27423:78:0;25509:405:1;27423:78:0;-1:-1:-1;;;;;27520:12:0;;;;;;:8;:12;;;;;;27564:15;;27520:41;;15234:6;;27520:41;:::i;:::-;:59;27512:98;;;;-1:-1:-1;;;27512:98:0;;16880:2:1;27512:98:0;;;16862:21:1;16919:2;16899:18;;;16892:30;16958:28;16938:18;;;16931:56;17004:18;;27512:98:0;16678:350:1;27512:98:0;-1:-1:-1;;;;;27625:13:0;;;;;;:9;:13;;;;;;;;27621:405;;;-1:-1:-1;;;;;27655:13:0;;27671:5;27655:13;;;:9;:13;;;;;:21;;-1:-1:-1;;27655:21:0;;;27691:284;27715:13;:20;27711:24;;27691:284;;;27785:2;-1:-1:-1;;;;;27765:22:0;:13;27779:1;27765:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;27765:16:0;:22;27761:199;;;27831:13;27845:20;;:24;;27868:1;;27845:24;:::i;:::-;27831:39;;;;;;;;:::i;:::-;;;;;;;;;;;27812:13;:16;;-1:-1:-1;;;;;27831:39:0;;;;27826:1;;27812:16;;;;;;:::i;:::-;;;;;;;;;:58;;;;;-1:-1:-1;;;;;27812:58:0;;;;;-1:-1:-1;;;;;27812:58:0;;;;;;27893:13;:19;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;27893:19:0;;;;;-1:-1:-1;;;;;;27893:19:0;;;;;;27935:5;;27761:199;27737:3;;;;:::i;:::-;;;;27691:284;;;-1:-1:-1;27994:20:0;;-1:-1:-1;;;;;1129:32:1;;1111:51;;27994:20:0;;1099:2:1;1084:18;27994:20:0;965:203:1;25577:274:0;25636:15;25648:2;25636:11;:15::i;:::-;25635:16;25627:60;;;;-1:-1:-1;;;25627:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25703:8:0;;;;;;:4;:8;;;;;;;;25698:146;;25728:9;25734:2;25728:5;:9::i;:::-;-1:-1:-1;;;;;25752:8:0;;;;;;:4;:8;;;;;;;;:15;;-1:-1:-1;;25752:15:0;25763:4;25752:15;;;;;;25782:8;:17;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25782:17:0;;;;;25819:13;;1111:51:1;;;25819:13:0;;1084:18:1;25819:13:0;965:203:1;25298:271:0;25356:15;25368:2;25356:11;:15::i;:::-;25355:16;25347:60;;;;-1:-1:-1;;;25347:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25423:8:0;;;;;;:4;:8;;;;;;;;25418:144;;25448:9;25454:2;25448:5;:9::i;:::-;-1:-1:-1;;;;;25472:8:0;;;;;;:4;:8;;;;;;;;:15;;-1:-1:-1;;25472:15:0;25483:4;25472:15;;;;;;25502:7;:16;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25502:16:0;;;;;25538:12;;1111:51:1;;;25538:12:0;;1084:18:1;25538:12:0;965:203:1;26166:585:0;26226:7;:14;26243:1;-1:-1:-1;26218:66:0;;;;-1:-1:-1;;;26218:66:0;;26253:2:1;26218:66:0;;;26235:21:1;26292:2;26272:18;;;26265:30;26331:34;26311:18;;;26304:62;-1:-1:-1;;;26382:18:1;;;26375:33;26425:19;;26218:66:0;26051:399:1;26218:66:0;-1:-1:-1;;;;;26303:12:0;;;;;;:8;:12;;;;;;26347:15;;26303:41;;15234:6;;26303:41;:::i;:::-;:59;26295:85;;;;-1:-1:-1;;;26295:85:0;;23387:2:1;26295:85:0;;;23369:21:1;23426:2;23406:18;;;23399:30;-1:-1:-1;;;23445:18:1;;;23438:43;23498:18;;26295:85:0;23185:337:1;26295:85:0;-1:-1:-1;;;;;26395:8:0;;;;;;:4;:8;;;;;;;;26391:353;;;-1:-1:-1;;;;;26420:8:0;;26431:5;26420:8;;;:4;:8;;;;;:16;;-1:-1:-1;;26420:16:0;;;26451:248;26475:7;:14;26471:18;;26451:248;;;26533:2;-1:-1:-1;;;;;26519:16:0;:7;26527:1;26519:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;26519:10:0;:16;26515:169;;;26573:7;26581:14;;:18;;26598:1;;26581:18;:::i;:::-;26573:27;;;;;;;;:::i;:::-;;;;;;;;;;;26560:7;:10;;-1:-1:-1;;;;;26573:27:0;;;;26568:1;;26560:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;26560:40:0;;;;;-1:-1:-1;;;;;26560:40:0;;;;;;26623:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;26623:13:0;;;;;-1:-1:-1;;;;;;26623:13:0;;;;;;26659:5;;26515:169;26491:3;;;;:::i;:::-;;;;26451:248;;;-1:-1:-1;26718:14:0;;-1:-1:-1;;;;;1129:32:1;;1111:51;;26718:14:0;;1099:2:1;1084:18;26718:14:0;965:203:1;28525:1663:0;28682:10;28677:16;;;;:4;:16;;;;;;;;;:36;;-1:-1:-1;28702:10:0;28697:16;;;;:4;:16;;;;;;;;28677:36;:61;;;-1:-1:-1;28727:10:0;28717:21;;;;:9;:21;;;;;;;;28677:61;28669:98;;;;-1:-1:-1;;;28669:98:0;;;;;;;:::i;:::-;28804:4;:11;28786:7;:14;:29;:61;;;;;28834:6;:13;28819:4;:11;:28;28786:61;:94;;;;;28868:5;:12;28851:6;:13;:29;28786:94;28778:137;;;;-1:-1:-1;;;28778:137:0;;26657:2:1;28778:137:0;;;26639:21:1;26696:2;26676:18;;;26669:30;26735:32;26715:18;;;26708:60;26785:18;;28778:137:0;26455:354:1;28778:137:0;28926:13;:15;;-1:-1:-1;;;;;28926:15:0;;:13;:15;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;28926:15:0;;;;;-1:-1:-1;;;;;28926:15:0;;;;;;;28952:19;;:::i;:::-;-1:-1:-1;;;;;29008:15:0;28982:42;:16;;;;:42;;;;29054:22;29035:16;;;:41;;;29096:10;29091:16;;:4;:16;;;;;;29087:58;;;29128:17;29109:16;;;:36;29087:58;29165:10;29160:16;;;;:4;:16;;;;;;;;29156:57;;;29197:16;29178;;;:35;29156:57;29252:22;29232:3;:16;;;:42;;;;;;;;:::i;:::-;;;:60;;;;-1:-1:-1;29278:9:0;:14;29232:60;:91;;;;15283:12;29296:9;:27;29232:91;29224:128;;;;-1:-1:-1;;;29224:128:0;;27230:2:1;29224:128:0;;;27212:21:1;27269:2;27249:18;;;27242:30;27308:26;27288:18;;;27281:54;27352:18;;29224:128:0;27028:348:1;29224:128:0;29394:7;:14;-1:-1:-1;;;;;29381:28:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29381:28:0;-1:-1:-1;29365:13:0;;;:44;29420:8;;;:16;;;29462:10;29447:25;;29483:10;;;:20;;;29514:9;;;:18;;;29543:7;;;:14;;;-1:-1:-1;29570:372:0;29594:4;:11;29590:1;:15;29570:372;;;29641:4;29646:1;29641:7;;;;;;;;:::i;:::-;;;;;;;29635:21;29660:1;29635:26;:55;;;;29689:1;29671:4;29676:1;29671:7;;;;;;;;:::i;:::-;;;;;;;29665:21;:25;;29635:55;29627:106;;;;-1:-1:-1;;;29627:106:0;;27583:2:1;29627:106:0;;;27565:21:1;27622:2;27602:18;;;27595:30;27661:34;27641:18;;;27634:62;-1:-1:-1;;;27712:18:1;;;27705:36;27758:19;;29627:106:0;27381:402:1;29627:106:0;29758:4;29763:1;29758:7;;;;;;;;:::i;:::-;;;;;;;29752:21;29777:1;29752:26;29748:183;;29842:4;29847:1;29842:7;;;;;;;;:::i;:::-;;;;;;;29826:25;;;;;;29799:3;:13;;;29813:1;29799:16;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;29799:54:0;;;:16;;;;;;;;;;;:54;29748:183;;;29894:21;:3;:13;;;29908:1;29894:16;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;29894:21:0;;;:16;;;;;;;;;;;:21;29748:183;29607:3;;;;:::i;:::-;;;;29570:372;;;-1:-1:-1;29969:15:0;:22;;-1:-1:-1;;;;;29952:40:0;;;:7;;;;:40;;;30013:13;;;;30003:9;:24;;;;;;;;;;;;:30;;;;;;;;-1:-1:-1;;;30003:30:0;-1:-1:-1;;;;;;30003:30:0;;;-1:-1:-1;;;;;30003:30:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30003:30:0;;;;;;;;;;29952:3;;30003:24;;:30;;;;-1:-1:-1;;30003:30:0;;;;-1:-1:-1;;;30003:30:0;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;30003:30:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30003:30:0;-1:-1:-1;;;;30003:30:0;;;-1:-1:-1;;;30003:30:0;;;;;-1:-1:-1;;;;30003:30:0;;;-1:-1:-1;;;30003:30:0;-1:-1:-1;;;;30003:30:0;;;-1:-1:-1;;;30003:30:0;;;;;-1:-1:-1;;30003:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30003:30:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30003:30:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30003:30:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30003:30:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30003:30:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30003:30:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30003:30:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30003:30:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;30065:13:0;;;30044:15;:35;;;;;;;-1:-1:-1;30044:35:0;;;;;;;;;;;-1:-1:-1;;;;;30044:35:0;;;;;30065:13;30044:35;;;;;;;;30065:13;;;30044:35;;;;;;;;30136:13;;30151:16;;;;30095:85;;30169:10;;-1:-1:-1;30136:13:0;;;;;30095:85;;;;30118:15;;30095:85;:::i;:::-;;;;;;;;28658:1530;28525:1663;;;;:::o;26759:598::-;26820:8;:15;26838:1;-1:-1:-1;26812:68:0;;;;-1:-1:-1;;;26812:68:0;;28303:2:1;26812:68:0;;;28285:21:1;28342:2;28322:18;;;28315:30;28381:34;28361:18;;;28354:62;-1:-1:-1;;;28432:18:1;;;28425:34;28476:19;;26812:68:0;28101:400:1;26812:68:0;-1:-1:-1;;;;;26899:12:0;;;;;;:8;:12;;;;;;26938:15;;26899:36;;15174:8;;26899:36;:::i;:::-;:54;26891:88;;;;-1:-1:-1;;;26891:88:0;;24081:2:1;26891:88:0;;;24063:21:1;24120:2;24100:18;;;24093:30;-1:-1:-1;;;24139:18:1;;;24132:51;24200:18;;26891:88:0;23879:345:1;26891:88:0;-1:-1:-1;;;;;26994:8:0;;;;;;:4;:8;;;;;;;;26990:360;;;-1:-1:-1;;;;;27019:8:0;;27030:5;27019:8;;;:4;:8;;;;;:16;;-1:-1:-1;;27019:16:0;;;27050:254;27074:8;:15;27070:19;;27050:254;;;27134:2;-1:-1:-1;;;;;27119:17:0;:8;27128:1;27119:11;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;27119:11:0;:17;27115:174;;;27175:8;27184:15;;:19;;27202:1;;27184:19;:::i;:::-;27175:29;;;;;;;;:::i;:::-;;;;;;;;;;;27161:8;:11;;-1:-1:-1;;;;;27175:29:0;;;;27170:1;;27161:11;;;;;;:::i;:::-;;;;;;;;;:43;;;;;-1:-1:-1;;;;;27161:43:0;;;;;-1:-1:-1;;;;;27161:43:0;;;;;;27227:8;:14;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;27227:14:0;;;;;-1:-1:-1;;;;;;27227:14:0;;;;;;27264:5;;27115:174;27091:3;;;;:::i;:::-;;;;27050:254;;;-1:-1:-1;27323:15:0;;-1:-1:-1;;;;;1129:32:1;;1111:51;;27323:15:0;;1099:2:1;1084:18;27323:15:0;965:203:1;31298:572:0;31369:9;:14;;;;;;;;;;:23;;;-1:-1:-1;;;31369:23:0;;;;31368:24;31360:53;;;;-1:-1:-1;;;31360:53:0;;;;;;;:::i;:::-;31424:9;:14;;;;;;;;;;31450:4;31424:23;;;:30;;-1:-1:-1;;;;31424:30:0;-1:-1:-1;;;31424:30:0;;;31491:22;;:26;;31450:4;31491:26;:::i;:::-;31469:9;:14;;;;;;;;;;:18;-1:-1:-1;;;31469:18:0;;-1:-1:-1;;;;;31469:18:0;:48;31465:256;;31595:9;:14;;;;;;;;;;:18;31544:15;31560:22;;-1:-1:-1;;;31595:18:0;;;-1:-1:-1;;;;;31595:18:0;;:9;;;31544:15;31560:26;;31544:15;;31560:26;:::i;:::-;31544:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31544:43:0;;;31534:54;;;;;;;;;;;;;;;:79;;-1:-1:-1;;;;31534:79:0;-1:-1:-1;;;31534:79:0;;;;;;;;;;;-1:-1:-1;31682:22:0;;:26;;-1:-1:-1;;31682:26:0;:::i;:::-;31666:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;;31644:14;;;;;;;;;;;:18;31628:15;:35;;31666:43;;;;;;;;;;;-1:-1:-1;;;;;31666:43:0;;;;31628:15;-1:-1:-1;;;31644:18:0;;;;;31628:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:81;;;;;-1:-1:-1;;;;;31628:81:0;;;;;-1:-1:-1;;;;;31628:81:0;;;;;;31465:256;31759:17;:24;;31731:9;:14;;;;;;;;;;:53;;-1:-1:-1;;;;31731:53:0;-1:-1:-1;;;;;;;;31731:53:0;;;;;;;31795:35;;-1:-1:-1;31795:35:0;;;;;;;;;;;;;;;;;;;;;;31731:53;31795:35;;;;;;;;;;;;;;;;;;;;;31841:21;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;31841:21:0;;;;;;;;;-1:-1:-1;;;;;31841:21:0;;;;;;;;;;;;;;-1:-1:-1;31298:572:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;671:180::-;730:6;783:2;771:9;762:7;758:23;754:32;751:52;;;799:1;796;789:12;751:52;-1:-1:-1;822:23:1;;671:180;-1:-1:-1;671:180:1:o;1355:328::-;1432:6;1440;1448;1501:2;1489:9;1480:7;1476:23;1472:32;1469:52;;;1517:1;1514;1507:12;1469:52;1540:29;1559:9;1540:29;:::i;:::-;1530:39;;1588:38;1622:2;1611:9;1607:18;1588:38;:::i;:::-;1578:48;;1673:2;1662:9;1658:18;1645:32;1635:42;;1355:328;;;;;:::o;2000:127::-;2061:10;2056:3;2052:20;2049:1;2042:31;2092:4;2089:1;2082:15;2116:4;2113:1;2106:15;2132:275;2203:2;2197:9;2268:2;2249:13;;-1:-1:-1;;2245:27:1;2233:40;;-1:-1:-1;;;;;2288:34:1;;2324:22;;;2285:62;2282:88;;;2350:18;;:::i;:::-;2386:2;2379:22;2132:275;;-1:-1:-1;2132:275:1:o;2412:187::-;2461:4;-1:-1:-1;;;;;2486:6:1;2483:30;2480:56;;;2516:18;;:::i;:::-;-1:-1:-1;2582:2:1;2561:15;-1:-1:-1;;2557:29:1;2588:4;2553:40;;2412:187::o;2604:464::-;2647:5;2700:3;2693:4;2685:6;2681:17;2677:27;2667:55;;2718:1;2715;2708:12;2667:55;2754:6;2741:20;2785:49;2801:32;2830:2;2801:32;:::i;:::-;2785:49;:::i;:::-;2859:2;2850:7;2843:19;2905:3;2898:4;2893:2;2885:6;2881:15;2877:26;2874:35;2871:55;;;2922:1;2919;2912:12;2871:55;2987:2;2980:4;2972:6;2968:17;2961:4;2952:7;2948:18;2935:55;3035:1;3010:16;;;3028:4;3006:27;2999:38;;;;3014:7;2604:464;-1:-1:-1;;;2604:464:1:o;3073:685::-;3178:6;3186;3194;3202;3255:3;3243:9;3234:7;3230:23;3226:33;3223:53;;;3272:1;3269;3262:12;3223:53;3295:29;3314:9;3295:29;:::i;:::-;3285:39;;3375:2;3364:9;3360:18;3347:32;-1:-1:-1;;;;;3439:2:1;3431:6;3428:14;3425:34;;;3455:1;3452;3445:12;3425:34;3478:50;3520:7;3511:6;3500:9;3496:22;3478:50;:::i;:::-;3468:60;;3575:2;3564:9;3560:18;3547:32;3537:42;;3632:2;3621:9;3617:18;3604:32;3588:48;;3661:2;3651:8;3648:16;3645:36;;;3677:1;3674;3667:12;3645:36;;3700:52;3744:7;3733:8;3722:9;3718:24;3700:52;:::i;:::-;3690:62;;;3073:685;;;;;;;:::o;3763:254::-;3831:6;3839;3892:2;3880:9;3871:7;3867:23;3863:32;3860:52;;;3908:1;3905;3898:12;3860:52;3931:29;3950:9;3931:29;:::i;:::-;3921:39;4007:2;3992:18;;;;3979:32;;-1:-1:-1;;;3763:254:1:o;4022:127::-;4083:10;4078:3;4074:20;4071:1;4064:31;4114:4;4111:1;4104:15;4138:4;4135:1;4128:15;4154:240;4238:1;4231:5;4228:12;4218:143;;4283:10;4278:3;4274:20;4271:1;4264:31;4318:4;4315:1;4308:15;4346:4;4343:1;4336:15;4218:143;4370:18;;4154:240::o;4399:461::-;4452:3;4490:5;4484:12;4517:6;4512:3;4505:19;4543:4;4572:2;4567:3;4563:12;4556:19;;4609:2;4602:5;4598:14;4630:1;4640:195;4654:6;4651:1;4648:13;4640:195;;;4719:13;;-1:-1:-1;;;;;4715:39:1;4703:52;;4775:12;;;;4810:15;;;;4751:1;4669:9;4640:195;;;-1:-1:-1;4851:3:1;;4399:461;-1:-1:-1;;;;;4399:461:1:o;4865:::-;4917:3;4955:5;4949:12;4982:6;4977:3;4970:19;5008:4;5037:2;5032:3;5028:12;5021:19;;5074:2;5067:5;5063:14;5095:1;5105:196;5119:6;5116:1;5113:13;5105:196;;;5184:13;;-1:-1:-1;;;;;;5180:40:1;5168:53;;5241:12;;;;5276:15;;;;5141:1;5134:9;5105:196;;5331:435;5384:3;5422:5;5416:12;5449:6;5444:3;5437:19;5475:4;5504:2;5499:3;5495:12;5488:19;;5541:2;5534:5;5530:14;5562:1;5572:169;5586:6;5583:1;5580:13;5572:169;;;5647:13;;5635:26;;5681:12;;;;5716:15;;;;5608:1;5601:9;5572:169;;5771:258;5843:1;5853:113;5867:6;5864:1;5861:13;5853:113;;;5943:11;;;5937:18;5924:11;;;5917:39;5889:2;5882:10;5853:113;;;5984:6;5981:1;5978:13;5975:48;;;-1:-1:-1;;6019:1:1;6001:16;;5994:27;5771:258::o;6034:::-;6076:3;6114:5;6108:12;6141:6;6136:3;6129:19;6157:63;6213:6;6206:4;6201:3;6197:14;6190:4;6183:5;6179:16;6157:63;:::i;:::-;6274:2;6253:15;-1:-1:-1;;6249:29:1;6240:39;;;;6281:4;6236:50;;6034:258;-1:-1:-1;;6034:258:1:o;6297:616::-;6349:3;6387:5;6381:12;6414:6;6409:3;6402:19;6440:4;6481:2;6476:3;6472:12;6506:11;6533;6526:18;;6583:6;6580:1;6576:14;6569:5;6565:26;6553:38;;6625:2;6618:5;6614:14;6646:1;6656:231;6670:6;6667:1;6664:13;6656:231;;;6741:5;6735:4;6731:16;6726:3;6719:29;6769:38;6802:4;6793:6;6787:13;6769:38;:::i;:::-;6865:12;;;;6761:46;-1:-1:-1;6830:15:1;;;;6692:1;6685:9;6656:231;;;-1:-1:-1;6903:4:1;;6297:616;-1:-1:-1;;;;;;;6297:616:1:o;6918:3057::-;7097:2;7086:9;7079:21;7109:53;7158:2;7147:9;7143:18;7134:6;7128:13;-1:-1:-1;;;;;922:31:1;910:44;;856:104;7109:53;7060:4;7209:2;7201:6;7197:15;7191:22;7222:51;7269:2;7258:9;7254:18;7240:12;-1:-1:-1;;;;;1753:30:1;1741:43;;1688:102;7222:51;-1:-1:-1;7322:2:1;7310:15;;7304:22;-1:-1:-1;;;;;1753:30:1;;7384:2;7369:18;;1741:43;7335:53;7437:2;7429:6;7425:15;7419:22;7450:65;7510:3;7499:9;7495:19;7479:14;7450:65;:::i;:::-;-1:-1:-1;7564:3:1;7552:16;;7546:23;453:13;;446:21;7625:3;7610:19;;434:34;-1:-1:-1;7679:3:1;7667:16;;7661:23;453:13;;446:21;7740:3;7725:19;;434:34;-1:-1:-1;7794:3:1;7782:16;;7776:23;453:13;;446:21;7855:3;7840:19;;434:34;7808:52;7909:3;7901:6;7897:16;7891:23;7933:3;7945:51;7992:2;7981:9;7977:18;7961:14;453:13;446:21;434:34;;383:91;7945:51;8045:2;8037:6;8033:15;8027:22;8005:44;;;8068:6;8093:3;8132:2;8127;8116:9;8112:18;8105:30;8158:65;8218:3;8207:9;8203:19;8187:14;8158:65;:::i;:::-;8144:79;;8272:2;8264:6;8260:15;8254:22;8232:44;;8299:2;8295:7;8321:3;8388:2;8376:9;8368:6;8364:22;8360:31;8355:2;8344:9;8340:18;8333:59;8415:52;8460:6;8444:14;8415:52;:::i;:::-;8401:66;;8516:2;8508:6;8504:15;8498:22;8476:44;;;8539:3;8606:2;8594:9;8586:6;8582:22;8578:31;8573:2;8562:9;8558:18;8551:59;8633:52;8678:6;8662:14;8633:52;:::i;:::-;8619:66;;8735:2;8727:6;8723:15;8717:22;8694:45;;;8758:3;8825:2;8813:9;8805:6;8801:22;8797:31;8792:2;8781:9;8777:18;8770:59;8852:52;8897:6;8880:15;8852:52;:::i;:::-;8838:66;;8954:2;8946:6;8942:15;8936:22;8913:45;;;8977:3;9044:2;9032:9;9024:6;9020:22;9016:31;9011:2;9000:9;8996:18;8989:59;9071:53;9117:6;9100:15;9071:53;:::i;:::-;9057:67;;9174:2;9166:6;9162:15;9156:22;9133:45;;;9197:3;9264:2;9252:9;9244:6;9240:22;9236:31;9231:2;9220:9;9216:18;9209:59;9291:53;9337:6;9320:15;9291:53;:::i;:::-;9277:67;;9394:2;9386:6;9382:15;9376:22;9353:45;;;9418:3;9486:2;9474:9;9466:6;9462:22;9458:31;9452:3;9441:9;9437:19;9430:60;9513:52;9558:6;9541:15;9513:52;:::i;:::-;9499:66;;9615:3;9607:6;9603:16;9597:23;9574:46;;;9640:3;9708:2;9696:9;9688:6;9684:22;9680:31;9674:3;9663:9;9659:19;9652:60;9735:52;9780:6;9763:15;9735:52;:::i;:::-;9825:16;;;9819:23;9882:22;;;9878:31;;;9858:18;;;9851:59;9721:66;-1:-1:-1;9819:23:1;-1:-1:-1;9927:42:1;9721:66;9819:23;9927:42;:::i;:::-;9919:50;6918:3057;-1:-1:-1;;;;;;6918:3057:1:o;9980:183::-;10040:4;-1:-1:-1;;;;;10065:6:1;10062:30;10059:56;;;10095:18;;:::i;:::-;-1:-1:-1;10140:1:1;10136:14;10152:4;10132:25;;9980:183::o;10168:888::-;10221:5;10274:3;10267:4;10259:6;10255:17;10251:27;10241:55;;10292:1;10289;10282:12;10241:55;10328:6;10315:20;10354:4;10378:60;10394:43;10434:2;10394:43;:::i;10378:60::-;10472:15;;;10558:1;10554:10;;;;10542:23;;10538:32;;;10503:12;;;;10582:15;;;10579:35;;;10610:1;10607;10600:12;10579:35;10646:2;10638:6;10634:15;10658:369;10674:6;10669:3;10666:15;10658:369;;;10760:3;10747:17;-1:-1:-1;;;;;10783:11:1;10780:35;10777:125;;;10856:1;10885:2;10881;10874:14;10777:125;10927:57;10980:3;10975:2;10961:11;10953:6;10949:24;10945:33;10927:57;:::i;:::-;10915:70;;-1:-1:-1;11005:12:1;;;;10691;;10658:369;;;-1:-1:-1;11045:5:1;10168:888;-1:-1:-1;;;;;;10168:888:1:o;11061:662::-;11115:5;11168:3;11161:4;11153:6;11149:17;11145:27;11135:55;;11186:1;11183;11176:12;11135:55;11222:6;11209:20;11248:4;11272:60;11288:43;11328:2;11288:43;:::i;11272:60::-;11366:15;;;11452:1;11448:10;;;;11436:23;;11432:32;;;11397:12;;;;11476:15;;;11473:35;;;11504:1;11501;11494:12;11473:35;11540:2;11532:6;11528:15;11552:142;11568:6;11563:3;11560:15;11552:142;;;11634:17;;11622:30;;11672:12;;;;11585;;11552:142;;11728:887;11780:5;11833:3;11826:4;11818:6;11814:17;11810:27;11800:55;;11851:1;11848;11841:12;11800:55;11887:6;11874:20;11913:4;11937:60;11953:43;11993:2;11953:43;:::i;11937:60::-;12031:15;;;12117:1;12113:10;;;;12101:23;;12097:32;;;12062:12;;;;12141:15;;;12138:35;;;12169:1;12166;12159:12;12138:35;12205:2;12197:6;12193:15;12217:369;12233:6;12228:3;12225:15;12217:369;;;12319:3;12306:17;-1:-1:-1;;;;;12342:11:1;12339:35;12336:125;;;12415:1;12444:2;12440;12433:14;12336:125;12486:57;12539:3;12534:2;12520:11;12512:6;12508:24;12504:33;12486:57;:::i;:::-;12474:70;;-1:-1:-1;12564:12:1;;;;12250;;12217:369;;12620:1615;12825:6;12833;12841;12849;12902:3;12890:9;12881:7;12877:23;12873:33;12870:53;;;12919:1;12916;12909:12;12870:53;12959:9;12946:23;-1:-1:-1;;;;;13029:2:1;13021:6;13018:14;13015:34;;;13045:1;13042;13035:12;13015:34;13083:6;13072:9;13068:22;13058:32;;13128:7;13121:4;13117:2;13113:13;13109:27;13099:55;;13150:1;13147;13140:12;13099:55;13186:2;13173:16;13208:4;13232:60;13248:43;13288:2;13248:43;:::i;13232:60::-;13326:15;;;13408:1;13404:10;;;;13396:19;;13392:28;;;13357:12;;;;13432:19;;;13429:39;;;13464:1;13461;13454:12;13429:39;13488:11;;;;13508:148;13524:6;13519:3;13516:15;13508:148;;;13590:23;13609:3;13590:23;:::i;:::-;13578:36;;13541:12;;;;13634;;;;13508:148;;;13675:5;-1:-1:-1;;13718:18:1;;13705:32;;-1:-1:-1;;13749:16:1;;;13746:36;;;13778:1;13775;13768:12;13746:36;13801:62;13855:7;13844:8;13833:9;13829:24;13801:62;:::i;:::-;13791:72;;13916:2;13905:9;13901:18;13888:32;13872:48;;13945:2;13935:8;13932:16;13929:36;;;13961:1;13958;13951:12;13929:36;13984:63;14039:7;14028:8;14017:9;14013:24;13984:63;:::i;:::-;13974:73;;14100:2;14089:9;14085:18;14072:32;14056:48;;14129:2;14119:8;14116:16;14113:36;;;14145:1;14142;14135:12;14113:36;;14168:61;14221:7;14210:8;14199:9;14195:24;14168:61;:::i;14240:348::-;14442:2;14424:21;;;14481:2;14461:18;;;14454:30;14520:26;14515:2;14500:18;;14493:54;14579:2;14564:18;;14240:348::o;14593:347::-;14795:2;14777:21;;;14834:2;14814:18;;;14807:30;14873:25;14868:2;14853:18;;14846:53;14931:2;14916:18;;14593:347::o;14945:340::-;15147:2;15129:21;;;15186:2;15166:18;;;15159:30;-1:-1:-1;;;15220:2:1;15205:18;;15198:46;15276:2;15261:18;;14945:340::o;15290:401::-;15492:2;15474:21;;;15531:2;15511:18;;;15504:30;15570:34;15565:2;15550:18;;15543:62;-1:-1:-1;;;15636:2:1;15621:18;;15614:35;15681:3;15666:19;;15290:401::o;15696:355::-;15898:2;15880:21;;;15937:2;15917:18;;;15910:30;15976:33;15971:2;15956:18;;15949:61;16042:2;16027:18;;15696:355::o;16413:127::-;16474:10;16469:3;16465:20;16462:1;16455:31;16505:4;16502:1;16495:15;16529:4;16526:1;16519:15;16545:128;16585:3;16616:1;16612:6;16609:1;16606:13;16603:39;;;16622:18;;:::i;:::-;-1:-1:-1;16658:9:1;;16545:128::o;17033:397::-;17235:2;17217:21;;;17274:2;17254:18;;;17247:30;17313:34;17308:2;17293:18;;17286:62;-1:-1:-1;;;17379:2:1;17364:18;;17357:31;17420:3;17405:19;;17033:397::o;17714:340::-;17916:2;17898:21;;;17955:2;17935:18;;;17928:30;-1:-1:-1;;;17989:2:1;17974:18;;17967:46;18045:2;18030:18;;17714:340::o;18059:127::-;18120:10;18115:3;18111:20;18108:1;18101:31;18151:4;18148:1;18141:15;18175:4;18172:1;18165:15;18543:135;18582:3;-1:-1:-1;;18603:17:1;;18600:43;;;18623:18;;:::i;:::-;-1:-1:-1;18670:1:1;18659:13;;18543:135::o;18683:380::-;18762:1;18758:12;;;;18805;;;18826:61;;18880:4;18872:6;18868:17;18858:27;;18826:61;18933:2;18925:6;18922:14;18902:18;18899:38;18896:161;;;18979:10;18974:3;18970:20;18967:1;18960:31;19014:4;19011:1;19004:15;19042:4;19039:1;19032:15;18896:161;;18683:380;;;:::o;19068:340::-;19270:2;19252:21;;;19309:2;19289:18;;;19282:30;-1:-1:-1;;;19343:2:1;19328:18;;19321:46;19399:2;19384:18;;19068:340::o;19538:1234::-;-1:-1:-1;;;;;;19720:33:1;;19708:46;;19821:13;;19690:3;;19773:1;;19690:3;;19879:1;19899:18;;;;19952;;;;19979:61;;20033:4;20025:6;20021:17;20011:27;;19979:61;20059:2;20107;20099:6;20096:14;20076:18;20073:38;20070:166;;;-1:-1:-1;;;20134:33:1;;20191:4;20180:16;;20221:4;20141:3;20209:17;20070:166;20252:18;20279:122;;;;20415:1;20410:337;;;;20245:502;;20279:122;-1:-1:-1;;20321:24:1;;20307:12;;;20300:46;20370:16;;;20366:25;;;-1:-1:-1;20279:122:1;;20410:337;19485:1;19478:14;;;19522:4;19509:18;;20504:1;20518:174;20532:6;20529:1;20526:13;20518:174;;;20619:14;;20601:11;;;20597:20;;20590:44;20662:16;;;;20547:10;;20518:174;;;20522:3;;20734:2;20725:6;20720:3;20716:16;20712:25;20705:32;;20245:502;-1:-1:-1;20763:3:1;;19538:1234;-1:-1:-1;;;;;;;;;;19538:1234:1:o;20777:274::-;20906:3;20944:6;20938:13;20960:53;21006:6;21001:3;20994:4;20986:6;20982:17;20960:53;:::i;:::-;21029:16;;;;;20777:274;-1:-1:-1;;20777:274:1:o;21056:439::-;21288:3;21326:6;21320:13;21342:53;21388:6;21383:3;21376:4;21368:6;21364:17;21342:53;:::i;:::-;-1:-1:-1;;;21417:16:1;;21442:18;;;-1:-1:-1;21487:1:1;21476:13;;21056:439;-1:-1:-1;21056:439:1:o;21500:636::-;21580:6;21633:2;21621:9;21612:7;21608:23;21604:32;21601:52;;;21649:1;21646;21639:12;21601:52;21682:9;21676:16;-1:-1:-1;;;;;21707:6:1;21704:30;21701:50;;;21747:1;21744;21737:12;21701:50;21770:22;;21823:4;21815:13;;21811:27;-1:-1:-1;21801:55:1;;21852:1;21849;21842:12;21801:55;21881:2;21875:9;21906:49;21922:32;21951:2;21922:32;:::i;21906:49::-;21978:2;21971:5;21964:17;22018:7;22013:2;22008;22004;22000:11;21996:20;21993:33;21990:53;;;22039:1;22036;22029:12;21990:53;22052:54;22103:2;22098;22091:5;22087:14;22082:2;22078;22074:11;22052:54;:::i;:::-;22125:5;21500:636;-1:-1:-1;;;;;21500:636:1:o;22141:470::-;22320:3;22358:6;22352:13;22374:53;22420:6;22415:3;22408:4;22400:6;22396:17;22374:53;:::i;:::-;22490:13;;22449:16;;;;22512:57;22490:13;22449:16;22546:4;22534:17;;22512:57;:::i;:::-;22585:20;;22141:470;-1:-1:-1;;;;22141:470:1:o;22616:220::-;22765:2;22754:9;22747:21;22728:4;22785:45;22826:2;22815:9;22811:18;22803:6;22785:45;:::i;24785:125::-;24825:4;24853:1;24850;24847:8;24844:34;;;24858:18;;:::i;:::-;-1:-1:-1;24895:9:1;;24785:125::o;25268:236::-;25307:3;-1:-1:-1;;;;;25380:2:1;25377:1;25373:10;25410:2;25407:1;25403:10;25441:3;25437:2;25433:12;25428:3;25425:21;25422:47;;;25449:18;;:::i;25919:127::-;25980:10;25975:3;25971:20;25968:1;25961:31;26011:4;26008:1;26001:15;26035:4;26032:1;26025:15;26814:209;26852:3;-1:-1:-1;;;;;26933:2:1;26926:5;26922:14;26960:2;26951:7;26948:15;26945:41;;;26966:18;;:::i;:::-;27015:1;27002:15;;26814:209;-1:-1:-1;;;26814:209:1:o;27788:308::-;-1:-1:-1;;;;;27993:31:1;;27975:50;;27963:2;27948:18;;28034:56;28086:2;28071:18;;28063:6;28034:56;:::i
Swarm Source
ipfs://cdaacc3afdaefede45bf0389efe55b351c4477129efd61ab1702878c6771a9cd
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.