More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 11,631 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Bet Bull | 99853950 | 44 mins ago | IN | 0.5 FTM | 0.0004122 | ||||
Bet Bear | 99835171 | 5 hrs ago | IN | 1 FTM | 0.00056624 | ||||
Bet Bear | 99835163 | 5 hrs ago | IN | 1 FTM | 0.00056624 | ||||
Bet Bear | 99835137 | 5 hrs ago | IN | 1 FTM | 0.00056624 | ||||
Bet Bear | 99835113 | 5 hrs ago | IN | 1 FTM | 0.00056624 | ||||
Bet Bull | 97911374 | 21 days ago | IN | 1 FTM | 0.00077879 | ||||
Bet Bull | 97872665 | 21 days ago | IN | 0.22634496 FTM | 0.00072132 | ||||
Bet Bull | 97407423 | 27 days ago | IN | 0.5 FTM | 0.00096924 | ||||
Bet Bull | 97407396 | 27 days ago | IN | 0.5 FTM | 0.00093675 | ||||
Bet Bull | 96359071 | 39 days ago | IN | 1.98163379 FTM | 0.00086742 | ||||
Bet Bear | 94755014 | 58 days ago | IN | 7.26697468 FTM | 0.01665781 | ||||
Bet Bear | 94754977 | 58 days ago | IN | 4.84464978 FTM | 0.01333416 | ||||
Bet Bull | 94135458 | 63 days ago | IN | 5.97796041 FTM | 0.02144965 | ||||
Bet Bull | 94135408 | 63 days ago | IN | 5.97796041 FTM | 0.02146504 | ||||
Bet Bear | 94135254 | 63 days ago | IN | 1.20203024 FTM | 0.02146054 | ||||
Bet Bear | 94135225 | 63 days ago | IN | 5 FTM | 0.02146054 | ||||
Bet Bear | 94135203 | 63 days ago | IN | 5 FTM | 0.02146054 | ||||
Bet Bear | 93221279 | 72 days ago | IN | 0.20156156 FTM | 0.00224836 | ||||
Bet Bear | 93221262 | 72 days ago | IN | 0.20156156 FTM | 0.00222752 | ||||
Bet Bull | 92426933 | 80 days ago | IN | 0.16554323 FTM | 0.00106651 | ||||
Bet Bull | 92357003 | 81 days ago | IN | 10 FTM | 0.00158714 | ||||
Bet Bear | 91954890 | 85 days ago | IN | 1 FTM | 0.0012335 | ||||
Bet Bear | 91954857 | 85 days ago | IN | 1 FTM | 0.00101929 | ||||
Bet Bull | 91796600 | 87 days ago | IN | 2 FTM | 0.00197124 | ||||
Bet Bull | 91280833 | 92 days ago | IN | 11.24766273 FTM | 0.00155142 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
83686304 | 170 days ago | 0.097 FTM | ||||
81267086 | 206 days ago | 0.485 FTM | ||||
81048816 | 210 days ago | 21.32997839 FTM | ||||
80685047 | 216 days ago | 0.09967041 FTM | ||||
80646505 | 217 days ago | 0.097 FTM | ||||
80563832 | 219 days ago | 2 FTM | ||||
80563823 | 219 days ago | 2 FTM | ||||
80563402 | 219 days ago | 2 FTM | ||||
80563393 | 219 days ago | 2 FTM | ||||
80562998 | 219 days ago | 2 FTM | ||||
80562990 | 219 days ago | 2 FTM | ||||
80562187 | 219 days ago | 2 FTM | ||||
80562182 | 219 days ago | 2 FTM | ||||
80561770 | 219 days ago | 3.88 FTM | ||||
80561531 | 219 days ago | 3.88 FTM | ||||
80561423 | 219 days ago | 3.88 FTM | ||||
80561316 | 219 days ago | 3.88 FTM | ||||
80561199 | 219 days ago | 3.88 FTM | ||||
80561085 | 219 days ago | 3.88 FTM | ||||
80560963 | 219 days ago | 3.88 FTM | ||||
80560847 | 219 days ago | 3.88 FTM | ||||
80560732 | 219 days ago | 3.88 FTM | ||||
80560625 | 219 days ago | 3.88 FTM | ||||
80560392 | 219 days ago | 2 FTM | ||||
80560387 | 219 days ago | 2 FTM |
Loading...
Loading
Contract Name:
MummyPrediction
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2024-04-17 */ /** *Submitted for verification at BscScan.com on 2021-08-24 */ // SPDX-License-Identifier: MIT 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; } } 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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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); } } } } pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns ( uint8 ); function description() external view returns ( string memory ); function version() external view returns ( uint256 ); // getRoundData and latestRoundData should both raise "No data present" // if they do not have data to report, instead of returning unset values // which could be misinterpreted as actual reported values. function getRoundData( uint80 _roundId ) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } pragma solidity ^0.8.0; pragma abicoder v2; /** * @title MummyPrediction */ contract MummyPrediction is Ownable, Pausable, ReentrancyGuard { using SafeERC20 for IERC20; AggregatorV3Interface public oracle; bool public genesisLockOnce = false; bool public genesisStartOnce = false; address public adminAddress; // address of the admin address public operatorAddress; // address of the operator uint256 public bufferSeconds; // number of seconds for valid execution of a prediction round uint256 public intervalSeconds; // interval in seconds between two prediction rounds uint256 public minBetAmount; // minimum betting amount (denominated in wei) uint256 public treasuryFee; // treasury rate (e.g. 200 = 2%, 150 = 1.50%) uint256 public treasuryAmount; // treasury amount that was not claimed uint256 public currentEpoch; // current epoch for prediction round uint256 public oracleLatestRoundId; // converted from uint80 (Chainlink) uint256 public oracleUpdateAllowance; // seconds uint256 public constant MAX_TREASURY_FEE = 1000; // 10% mapping(uint256 => mapping(address => BetInfo)) public ledger; mapping(uint256 => Round) public rounds; mapping(address => uint256[]) public userRounds; enum Position { Bull, Bear } struct Round { uint256 epoch; uint256 startTimestamp; uint256 lockTimestamp; uint256 closeTimestamp; int256 lockPrice; int256 closePrice; uint256 lockOracleId; uint256 closeOracleId; uint256 totalAmount; uint256 bullAmount; uint256 bearAmount; uint256 rewardBaseCalAmount; uint256 rewardAmount; bool oracleCalled; } struct BetInfo { Position position; uint256 amount; bool claimed; // default false } event BetBear(address indexed sender, uint256 indexed epoch, uint256 amount); event BetBull(address indexed sender, uint256 indexed epoch, uint256 amount); event Claim(address indexed sender, uint256 indexed epoch, uint256 amount); event EndRound(uint256 indexed epoch, uint256 indexed roundId, int256 price); event LockRound(uint256 indexed epoch, uint256 indexed roundId, int256 price); event NewAdminAddress(address admin); event NewBufferAndIntervalSeconds(uint256 bufferSeconds, uint256 intervalSeconds); event NewMinBetAmount(uint256 indexed epoch, uint256 minBetAmount); event NewTreasuryFee(uint256 indexed epoch, uint256 treasuryFee); event NewOperatorAddress(address operator); event NewOracle(address oracle); event NewOracleUpdateAllowance(uint256 oracleUpdateAllowance); event Pause(uint256 indexed epoch); event RewardsCalculated( uint256 indexed epoch, uint256 rewardBaseCalAmount, uint256 rewardAmount, uint256 treasuryAmount ); event StartRound(uint256 indexed epoch); event TokenRecovery(address indexed token, uint256 amount); event TreasuryClaim(uint256 amount); event Unpause(uint256 indexed epoch); modifier onlyAdmin() { require(msg.sender == adminAddress, "Not admin"); _; } modifier onlyAdminOrOperator() { require(msg.sender == adminAddress || msg.sender == operatorAddress, "Not operator/admin"); _; } modifier onlyOperator() { require(msg.sender == operatorAddress, "Not operator"); _; } modifier notContract() { require(!_isContract(msg.sender), "Contract not allowed"); require(msg.sender == tx.origin, "Proxy contract not allowed"); _; } /** * @notice Constructor * @param _oracleAddress: oracle address * @param _adminAddress: admin address * @param _operatorAddress: operator address * @param _intervalSeconds: number of time within an interval * @param _bufferSeconds: buffer of time for resolution of price * @param _minBetAmount: minimum bet amounts (in wei) * @param _oracleUpdateAllowance: oracle update allowance * @param _treasuryFee: treasury fee (1000 = 10%) */ constructor( address _oracleAddress, address _adminAddress, address _operatorAddress, uint256 _intervalSeconds, uint256 _bufferSeconds, uint256 _minBetAmount, uint256 _oracleUpdateAllowance, uint256 _treasuryFee ) { require(_treasuryFee <= MAX_TREASURY_FEE, "Treasury fee too high"); oracle = AggregatorV3Interface(_oracleAddress); adminAddress = _adminAddress; operatorAddress = _operatorAddress; intervalSeconds = _intervalSeconds; bufferSeconds = _bufferSeconds; minBetAmount = _minBetAmount; oracleUpdateAllowance = _oracleUpdateAllowance; treasuryFee = _treasuryFee; } /** * @notice Bet bear position * @param epoch: epoch */ function betBear(uint256 epoch) external payable whenNotPaused nonReentrant notContract { require(epoch == currentEpoch, "Bet is too early/late"); require(_bettable(epoch), "Round not bettable"); require(msg.value >= minBetAmount, "Bet amount must be greater than minBetAmount"); require(ledger[epoch][msg.sender].amount == 0, "Can only bet once per round"); // Update round data uint256 amount = msg.value; Round storage round = rounds[epoch]; round.totalAmount = round.totalAmount + amount; round.bearAmount = round.bearAmount + amount; // Update user data BetInfo storage betInfo = ledger[epoch][msg.sender]; betInfo.position = Position.Bear; betInfo.amount = amount; userRounds[msg.sender].push(epoch); emit BetBear(msg.sender, epoch, amount); } /** * @notice Bet bull position * @param epoch: epoch */ function betBull(uint256 epoch) external payable whenNotPaused nonReentrant notContract { require(epoch == currentEpoch, "Bet is too early/late"); require(_bettable(epoch), "Round not bettable"); require(msg.value >= minBetAmount, "Bet amount must be greater than minBetAmount"); require(ledger[epoch][msg.sender].amount == 0, "Can only bet once per round"); // Update round data uint256 amount = msg.value; Round storage round = rounds[epoch]; round.totalAmount = round.totalAmount + amount; round.bullAmount = round.bullAmount + amount; // Update user data BetInfo storage betInfo = ledger[epoch][msg.sender]; betInfo.position = Position.Bull; betInfo.amount = amount; userRounds[msg.sender].push(epoch); emit BetBull(msg.sender, epoch, amount); } /** * @notice Claim reward for an array of epochs * @param epochs: array of epochs */ function claim(uint256[] calldata epochs) external nonReentrant notContract { uint256 reward; // Initializes reward for (uint256 i = 0; i < epochs.length; i++) { require(rounds[epochs[i]].startTimestamp != 0, "Round has not started"); require(block.timestamp > rounds[epochs[i]].closeTimestamp, "Round has not ended"); uint256 addedReward = 0; // Round valid, claim rewards if (rounds[epochs[i]].oracleCalled) { require(claimable(epochs[i], msg.sender), "Not eligible for claim"); Round memory round = rounds[epochs[i]]; addedReward = (ledger[epochs[i]][msg.sender].amount * round.rewardAmount) / round.rewardBaseCalAmount; } // Round invalid, refund bet amount else { require(refundable(epochs[i], msg.sender), "Not eligible for refund"); addedReward = ledger[epochs[i]][msg.sender].amount; } ledger[epochs[i]][msg.sender].claimed = true; reward += addedReward; emit Claim(msg.sender, epochs[i], addedReward); } if (reward > 0) { _safeTransferFTM(address(msg.sender), reward); } } /** * @notice Start the next round n, lock price for round n-1, end round n-2 * @dev Callable by operator */ function executeRound() external whenNotPaused onlyOperator { require( genesisStartOnce && genesisLockOnce, "Can only run after genesisStartRound and genesisLockRound is triggered" ); (uint80 currentRoundId, int256 currentPrice) = _getPriceFromOracle(); oracleLatestRoundId = uint256(currentRoundId); // CurrentEpoch refers to previous round (n-1) _safeLockRound(currentEpoch, currentRoundId, currentPrice); _safeEndRound(currentEpoch - 1, currentRoundId, currentPrice); _calculateRewards(currentEpoch - 1); // Increment currentEpoch to current round (n) currentEpoch = currentEpoch + 1; _safeStartRound(currentEpoch); } /** * @notice Lock genesis round * @dev Callable by operator */ function genesisLockRound() external whenNotPaused onlyOperator { require(genesisStartOnce, "Can only run after genesisStartRound is triggered"); require(!genesisLockOnce, "Can only run genesisLockRound once"); (uint80 currentRoundId, int256 currentPrice) = _getPriceFromOracle(); oracleLatestRoundId = uint256(currentRoundId); _safeLockRound(currentEpoch, currentRoundId, currentPrice); currentEpoch = currentEpoch + 1; _startRound(currentEpoch); genesisLockOnce = true; } /** * @notice Start genesis round * @dev Callable by admin or operator */ function genesisStartRound() external whenNotPaused onlyOperator { require(!genesisStartOnce, "Can only run genesisStartRound once"); currentEpoch = currentEpoch + 1; _startRound(currentEpoch); genesisStartOnce = true; } /** * @notice called by the admin to pause, triggers stopped state * @dev Callable by admin or operator */ function pause() external whenNotPaused onlyAdminOrOperator { _pause(); emit Pause(currentEpoch); } /** * @notice Claim all rewards in treasury * @dev Callable by admin */ function claimTreasury() external nonReentrant onlyAdmin { uint256 currentTreasuryAmount = treasuryAmount; treasuryAmount = 0; _safeTransferFTM(adminAddress, currentTreasuryAmount); emit TreasuryClaim(currentTreasuryAmount); } /** * @notice called by the admin to unpause, returns to normal state * Reset genesis state. Once paused, the rounds would need to be kickstarted by genesis */ function unpause() external whenPaused onlyAdminOrOperator { genesisStartOnce = false; genesisLockOnce = false; _unpause(); emit Unpause(currentEpoch); } /** * @notice Set buffer and interval (in seconds) * @dev Callable by admin */ function setBufferAndIntervalSeconds(uint256 _bufferSeconds, uint256 _intervalSeconds) external whenPaused onlyAdmin { require(_bufferSeconds < _intervalSeconds, "bufferSeconds must be inferior to intervalSeconds"); bufferSeconds = _bufferSeconds; intervalSeconds = _intervalSeconds; emit NewBufferAndIntervalSeconds(_bufferSeconds, _intervalSeconds); } /** * @notice Set minBetAmount * @dev Callable by admin */ function setMinBetAmount(uint256 _minBetAmount) external whenPaused onlyAdmin { require(_minBetAmount != 0, "Must be superior to 0"); minBetAmount = _minBetAmount; emit NewMinBetAmount(currentEpoch, minBetAmount); } /** * @notice Set operator address * @dev Callable by admin */ function setOperator(address _operatorAddress) external onlyAdmin { require(_operatorAddress != address(0), "Cannot be zero address"); operatorAddress = _operatorAddress; emit NewOperatorAddress(_operatorAddress); } /** * @notice Set Oracle address * @dev Callable by admin */ function setOracle(address _oracle) external whenPaused onlyAdmin { require(_oracle != address(0), "Cannot be zero address"); oracleLatestRoundId = 0; oracle = AggregatorV3Interface(_oracle); // Dummy check to make sure the interface implements this function properly oracle.latestRoundData(); emit NewOracle(_oracle); } /** * @notice Set oracle update allowance * @dev Callable by admin */ function setOracleUpdateAllowance(uint256 _oracleUpdateAllowance) external whenPaused onlyAdmin { oracleUpdateAllowance = _oracleUpdateAllowance; emit NewOracleUpdateAllowance(_oracleUpdateAllowance); } /** * @notice Set treasury fee * @dev Callable by admin */ function setTreasuryFee(uint256 _treasuryFee) external whenPaused onlyAdmin { require(_treasuryFee <= MAX_TREASURY_FEE, "Treasury fee too high"); treasuryFee = _treasuryFee; emit NewTreasuryFee(currentEpoch, treasuryFee); } /** * @notice It allows the owner to recover tokens sent to the contract by mistake * @param _token: token address * @param _amount: token amount * @dev Callable by owner */ function recoverToken(address _token, uint256 _amount) external onlyOwner { IERC20(_token).safeTransfer(address(msg.sender), _amount); emit TokenRecovery(_token, _amount); } /** * @notice Set admin address * @dev Callable by owner */ function setAdmin(address _adminAddress) external onlyOwner { require(_adminAddress != address(0), "Cannot be zero address"); adminAddress = _adminAddress; emit NewAdminAddress(_adminAddress); } /** * @notice Returns round epochs and bet information for a user that has participated * @param user: user address * @param cursor: cursor * @param size: size */ function getUserRounds( address user, uint256 cursor, uint256 size ) external view returns ( uint256[] memory, BetInfo[] memory, uint256 ) { uint256 length = size; if (length > userRounds[user].length - cursor) { length = userRounds[user].length - cursor; } uint256[] memory values = new uint256[](length); BetInfo[] memory betInfo = new BetInfo[](length); for (uint256 i = 0; i < length; i++) { values[i] = userRounds[user][cursor + i]; betInfo[i] = ledger[values[i]][user]; } return (values, betInfo, cursor + length); } /** * @notice Returns round epochs length * @param user: user address */ function getUserRoundsLength(address user) external view returns (uint256) { return userRounds[user].length; } /** * @notice Get the claimable stats of specific epoch and user account * @param epoch: epoch * @param user: user address */ function claimable(uint256 epoch, address user) public view returns (bool) { BetInfo memory betInfo = ledger[epoch][user]; Round memory round = rounds[epoch]; if (round.lockPrice == round.closePrice) { return false; } return round.oracleCalled && betInfo.amount != 0 && !betInfo.claimed && ((round.closePrice > round.lockPrice && betInfo.position == Position.Bull) || (round.closePrice < round.lockPrice && betInfo.position == Position.Bear)); } /** * @notice Get the refundable stats of specific epoch and user account * @param epoch: epoch * @param user: user address */ function refundable(uint256 epoch, address user) public view returns (bool) { BetInfo memory betInfo = ledger[epoch][user]; Round memory round = rounds[epoch]; return !round.oracleCalled && !betInfo.claimed && block.timestamp > round.closeTimestamp + bufferSeconds && betInfo.amount != 0; } /** * @notice Calculate rewards for round * @param epoch: epoch */ function _calculateRewards(uint256 epoch) internal { require(rounds[epoch].rewardBaseCalAmount == 0 && rounds[epoch].rewardAmount == 0, "Rewards calculated"); Round storage round = rounds[epoch]; uint256 rewardBaseCalAmount; uint256 treasuryAmt; uint256 rewardAmount; // Bull wins if (round.closePrice > round.lockPrice) { rewardBaseCalAmount = round.bullAmount; treasuryAmt = (round.totalAmount * treasuryFee) / 10000; rewardAmount = round.totalAmount - treasuryAmt; } // Bear wins else if (round.closePrice < round.lockPrice) { rewardBaseCalAmount = round.bearAmount; treasuryAmt = (round.totalAmount * treasuryFee) / 10000; rewardAmount = round.totalAmount - treasuryAmt; } // House wins else { rewardBaseCalAmount = 0; rewardAmount = 0; treasuryAmt = round.totalAmount; } round.rewardBaseCalAmount = rewardBaseCalAmount; round.rewardAmount = rewardAmount; // Add to treasury treasuryAmount += treasuryAmt; emit RewardsCalculated(epoch, rewardBaseCalAmount, rewardAmount, treasuryAmt); } /** * @notice End round * @param epoch: epoch * @param roundId: roundId * @param price: price of the round */ function _safeEndRound( uint256 epoch, uint256 roundId, int256 price ) internal { require(rounds[epoch].lockTimestamp != 0, "Can only end round after round has locked"); require(block.timestamp >= rounds[epoch].closeTimestamp, "Can only end round after closeTimestamp"); require( block.timestamp <= rounds[epoch].closeTimestamp + bufferSeconds, "Can only end round within bufferSeconds" ); Round storage round = rounds[epoch]; round.closePrice = price; round.closeOracleId = roundId; round.oracleCalled = true; emit EndRound(epoch, roundId, round.closePrice); } /** * @notice Lock round * @param epoch: epoch * @param roundId: roundId * @param price: price of the round */ function _safeLockRound( uint256 epoch, uint256 roundId, int256 price ) internal { require(rounds[epoch].startTimestamp != 0, "Can only lock round after round has started"); require(block.timestamp >= rounds[epoch].lockTimestamp, "Can only lock round after lockTimestamp"); require( block.timestamp <= rounds[epoch].lockTimestamp + bufferSeconds, "Can only lock round within bufferSeconds" ); Round storage round = rounds[epoch]; round.closeTimestamp = block.timestamp + intervalSeconds; round.lockPrice = price; round.lockOracleId = roundId; emit LockRound(epoch, roundId, round.lockPrice); } /** * @notice Start round * Previous round n-2 must end * @param epoch: epoch */ function _safeStartRound(uint256 epoch) internal { require(genesisStartOnce, "Can only run after genesisStartRound is triggered"); require(rounds[epoch - 2].closeTimestamp != 0, "Can only start round after round n-2 has ended"); require( block.timestamp >= rounds[epoch - 2].closeTimestamp, "Can only start new round after round n-2 closeTimestamp" ); _startRound(epoch); } /** * @notice Transfer FTM in a safe way * @param to: address to transfer FTM to * @param value: FTM amount to transfer (in wei) */ function _safeTransferFTM(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(""); require(success, "TransferHelper: FTM_TRANSFER_FAILED"); } /** * @notice Start round * Previous round n-2 must end * @param epoch: epoch */ function _startRound(uint256 epoch) internal { Round storage round = rounds[epoch]; round.startTimestamp = block.timestamp; round.lockTimestamp = block.timestamp + intervalSeconds; round.closeTimestamp = block.timestamp + (2 * intervalSeconds); round.epoch = epoch; round.totalAmount = 0; emit StartRound(epoch); } /** * @notice Determine if a round is valid for receiving bets * Round must have started and locked * Current timestamp must be within startTimestamp and closeTimestamp */ function _bettable(uint256 epoch) internal view returns (bool) { return rounds[epoch].startTimestamp != 0 && rounds[epoch].lockTimestamp != 0 && block.timestamp > rounds[epoch].startTimestamp && block.timestamp < rounds[epoch].lockTimestamp; } /** * @notice Get latest recorded price from oracle * If it falls below allowed buffer or has not updated, it would be invalid. */ function _getPriceFromOracle() internal view returns (uint80, int256) { uint256 leastAllowedTimestamp = block.timestamp + oracleUpdateAllowance; (uint80 roundId, int256 price, , uint256 timestamp, ) = oracle.latestRoundData(); require(timestamp <= leastAllowedTimestamp, "Oracle update exceeded max timestamp allowance"); require( uint256(roundId) > oracleLatestRoundId, "Oracle update roundId must be larger than oracleLatestRoundId" ); return (roundId, price); } /** * @notice Returns true if `account` is a contract. * @param account: account address */ function _isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_oracleAddress","type":"address"},{"internalType":"address","name":"_adminAddress","type":"address"},{"internalType":"address","name":"_operatorAddress","type":"address"},{"internalType":"uint256","name":"_intervalSeconds","type":"uint256"},{"internalType":"uint256","name":"_bufferSeconds","type":"uint256"},{"internalType":"uint256","name":"_minBetAmount","type":"uint256"},{"internalType":"uint256","name":"_oracleUpdateAllowance","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BetBear","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BetBull","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"int256","name":"price","type":"int256"}],"name":"EndRound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"int256","name":"price","type":"int256"}],"name":"LockRound","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"NewAdminAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bufferSeconds","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"intervalSeconds","type":"uint256"}],"name":"NewBufferAndIntervalSeconds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minBetAmount","type":"uint256"}],"name":"NewMinBetAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"}],"name":"NewOperatorAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oracle","type":"address"}],"name":"NewOracle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oracleUpdateAllowance","type":"uint256"}],"name":"NewOracleUpdateAllowance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"NewTreasuryFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardBaseCalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryAmount","type":"uint256"}],"name":"RewardsCalculated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"StartRound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenRecovery","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TreasuryClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_TREASURY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"betBear","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"betBull","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"bufferSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"epochs","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"claimable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executeRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genesisLockOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesisLockRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genesisStartOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesisStartRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"cursor","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"}],"name":"getUserRounds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"components":[{"internalType":"enum MummyPrediction.Position","name":"position","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"}],"internalType":"struct MummyPrediction.BetInfo[]","name":"","type":"tuple[]"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserRoundsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"intervalSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"ledger","outputs":[{"internalType":"enum MummyPrediction.Position","name":"position","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBetAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operatorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleLatestRoundId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleUpdateAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"refundable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rounds","outputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"internalType":"uint256","name":"lockTimestamp","type":"uint256"},{"internalType":"uint256","name":"closeTimestamp","type":"uint256"},{"internalType":"int256","name":"lockPrice","type":"int256"},{"internalType":"int256","name":"closePrice","type":"int256"},{"internalType":"uint256","name":"lockOracleId","type":"uint256"},{"internalType":"uint256","name":"closeOracleId","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"bullAmount","type":"uint256"},{"internalType":"uint256","name":"bearAmount","type":"uint256"},{"internalType":"uint256","name":"rewardBaseCalAmount","type":"uint256"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"bool","name":"oracleCalled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adminAddress","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bufferSeconds","type":"uint256"},{"internalType":"uint256","name":"_intervalSeconds","type":"uint256"}],"name":"setBufferAndIntervalSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minBetAmount","type":"uint256"}],"name":"setMinBetAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operatorAddress","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_oracleUpdateAllowance","type":"uint256"}],"name":"setOracleUpdateAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"setTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userRounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526002805461ffff60a01b191690553480156200001f57600080fd5b50604051620056633803806200566383398101604081905262000042916200017e565b6200004d3362000111565b6000805460ff60a01b19169055600180556103e8811115620000b55760405162461bcd60e51b815260206004820152601560248201527f54726561737572792066656520746f6f20686967680000000000000000000000604482015260640160405180910390fd5b600280546001600160a01b03199081166001600160a01b039a8b1617909155600380548216988a1698909817909755600480549097169590971694909417909455600691909155600555600791909155600c55600855620001f8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200017957600080fd5b919050565b600080600080600080600080610100898b0312156200019b578384fd5b620001a68962000161565b9750620001b660208a0162000161565b9650620001c660408a0162000161565b9550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b61545b80620002086000396000f3fe6080604052600436106102d05760003560e01c80637dc0d1d011610179578063cc32d176116100d6578063ec3247031161008a578063f7fdec2811610064578063f7fdec28146108d1578063fa968eea14610904578063fc6f94681461091a57600080fd5b8063ec32470314610885578063f2b3c8091461089b578063f2fde38b146108b157600080fd5b8063d9d55eac116100bb578063d9d55eac1461083a578063dd1f75961461084f578063eaba23611461086f57600080fd5b8063cc32d17614610804578063cf2f50391461081a57600080fd5b8063951fd6001161012d578063aa6b873a11610112578063aa6b873a146107b1578063b29a8140146107c4578063b3ab15fb146107e457600080fd5b8063951fd60014610762578063a0c7f71c1461079157600080fd5b8063890dc7661161015e578063890dc766146106225780638c65c81f146106425780638da5cb5b1461073757600080fd5b80637dc0d1d0146105e05780638456cb591461060d57600080fd5b80636ba4c1381161023257806376671808116101e65780637b3205f5116101c05780637b3205f5146105955780637bf41254146105aa5780637d1cd04f146105ca57600080fd5b8063766718081461053f57806377e741c7146105555780637adbf9731461057557600080fd5b8063704b6c0211610217578063704b6c02146104af578063715018a6146104cf5780637285c58b146104e457600080fd5b80636ba4c1381461046f5780636c1885931461048f57600080fd5b80633f4ba83a1161028957806357fb096f1161026e57806357fb096f146104165780635c975abb14610429578063605540111461045957600080fd5b80633f4ba83a146103ec578063452fd75a1461040157600080fd5b8063127effb2116102ba578063127effb214610333578063273867d414610385578063368acb09146103d657600080fd5b80623bdc74146102d55780630f74174f146102ec575b600080fd5b3480156102e157600080fd5b506102ea610947565b005b3480156102f857600080fd5b5060025461031e9074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b34801561033f57600080fd5b506004546103609073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032a565b34801561039157600080fd5b506103c86103a0366004614fc2565b73ffffffffffffffffffffffffffffffffffffffff166000908152600f602052604090205490565b60405190815260200161032a565b3480156103e257600080fd5b506103c860095481565b3480156103f857600080fd5b506102ea610aa5565b34801561040d57600080fd5b506102ea610c2a565b6102ea6104243660046150c7565b610e3a565b34801561043557600080fd5b5060005474010000000000000000000000000000000000000000900460ff1661031e565b34801561046557600080fd5b506103c8600c5481565b34801561047b57600080fd5b506102ea61048a366004615037565b6112ce565b34801561049b57600080fd5b506102ea6104aa3660046150c7565b611b0c565b3480156104bb57600080fd5b506102ea6104ca366004614fc2565b611cb7565b3480156104db57600080fd5b506102ea611e2f565b3480156104f057600080fd5b506105306104ff3660046150df565b600d60209081526000928352604080842090915290825290208054600182015460029092015460ff91821692911683565b60405161032a93929190615273565b34801561054b57600080fd5b506103c8600a5481565b34801561056157600080fd5b506102ea6105703660046150c7565b611ebc565b34801561058157600080fd5b506102ea610590366004614fc2565b612065565b3480156105a157600080fd5b506102ea612303565b3480156105b657600080fd5b5061031e6105c53660046150df565b612597565b3480156105d657600080fd5b506103c860065481565b3480156105ec57600080fd5b506002546103609073ffffffffffffffffffffffffffffffffffffffff1681565b34801561061957600080fd5b506102ea612762565b34801561062e57600080fd5b506102ea61063d36600461510a565b6128c0565b34801561064e57600080fd5b506106cd61065d3660046150c7565b600e60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c8d0154600d909d01549b9c9a9b999a98999798969795969495939492939192909160ff168e565b604080519e8f5260208f019d909d529b8d019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e088015261010087015261012086015261014085015261016084015261018083015215156101a08201526101c00161032a565b34801561074357600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610360565b34801561076e57600080fd5b5061078261077d366004615005565b612a9b565b60405161032a939291906151d1565b34801561079d57600080fd5b5061031e6107ac3660046150df565b612e7c565b6102ea6107bf3660046150c7565b6130ed565b3480156107d057600080fd5b506102ea6107df366004614fdc565b613576565b3480156107f057600080fd5b506102ea6107ff366004614fc2565b61366c565b34801561081057600080fd5b506103c860085481565b34801561082657600080fd5b506102ea6108353660046150c7565b6137dd565b34801561084657600080fd5b506102ea613917565b34801561085b57600080fd5b506103c861086a366004614fdc565b613c0d565b34801561087b57600080fd5b506103c860055481565b34801561089157600080fd5b506103c8600b5481565b3480156108a757600080fd5b506103c86103e881565b3480156108bd57600080fd5b506102ea6108cc366004614fc2565b613c3e565b3480156108dd57600080fd5b5060025461031e907501000000000000000000000000000000000000000000900460ff1681565b34801561091057600080fd5b506103c860075481565b34801561092657600080fd5b506003546103609073ffffffffffffffffffffffffffffffffffffffff1681565b600260015414156109b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260015560035473ffffffffffffffffffffffffffffffffffffffff163314610a3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b600980546000909155600354610a6b9073ffffffffffffffffffffffffffffffffffffffff1682613d6e565b6040518181527fb9197c6b8e21274bd1e2d9c956a88af5cfee510f630fab3f046300f88b4223619060200160405180910390a15060018055565b60005474010000000000000000000000000000000000000000900460ff16610b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff16331480610b66575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610bcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f74206f70657261746f722f61646d696e000000000000000000000000000060448201526064016109b0565b600280547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff169055610bfc613e63565b600a546040517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab790600090a2565b60005474010000000000000000000000000000000000000000900460ff1615610caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b60045473ffffffffffffffffffffffffffffffffffffffff163314610d30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f72000000000000000000000000000000000000000060448201526064016109b0565b6002547501000000000000000000000000000000000000000000900460ff1615610ddc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f43616e206f6e6c792072756e2067656e657369735374617274526f756e64206f60448201527f6e6365000000000000000000000000000000000000000000000000000000000060648201526084016109b0565b600a54610dea9060016152e8565b600a819055610df890613f5c565b600280547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b60005474010000000000000000000000000000000000000000900460ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b60026001541415610f2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109b0565b6002600155333b15610f9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f77656400000000000000000000000060448201526064016109b0565b333214611003576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016109b0565b600a54811461106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f42657420697320746f6f206561726c792f6c617465000000000000000000000060448201526064016109b0565b61107781613fda565b6110dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f526f756e64206e6f74206265747461626c65000000000000000000000000000060448201526064016109b0565b60075434101561116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f42657420616d6f756e74206d7573742062652067726561746572207468616e2060448201527f6d696e426574416d6f756e74000000000000000000000000000000000000000060648201526084016109b0565b6000818152600d60209081526040808320338452909152902060010154156111f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616e206f6e6c7920626574206f6e63652070657220726f756e64000000000060448201526064016109b0565b6000818152600e6020526040902060088101543491906112149083906152e8565b600882015560098101546112299083906152e8565b60098201556000838152600d602090815260408083203380855290835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681556001808201889055600f855283862080549182018155865294849020909401879055905185815286927f438122d8cff518d18388099a5181f0d17a12b4f1b55faedf6e4a6acee0060c1291015b60405180910390a35050600180555050565b6002600154141561133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109b0565b6002600155333b156113a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f77656400000000000000000000000060448201526064016109b0565b333214611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016109b0565b6000805b82811015611af257600e600085858481811061145b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135815260200190815260200160002060010154600014156114de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f526f756e6420686173206e6f742073746172746564000000000000000000000060448201526064016109b0565b600e600085858481811061151b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135815260200190815260200160002060030154421161159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f526f756e6420686173206e6f7420656e6465640000000000000000000000000060448201526064016109b0565b6000600e60008686858181106115db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60209081029290920135835250810191909152604001600020600d015460ff16156118695761164985858481811061163c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013533612e7c565b6116af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f7420656c696769626c6520666f7220636c61696d0000000000000000000060448201526064016109b0565b6000600e60008787868181106116ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201358152602001908152602001600020604051806101c001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820160009054906101000a900460ff1615151515815250509050806101600151816101800151600d60008989888181106117f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546118579190615339565b6118619190615300565b9150506119ae565b6118b28585848181106118a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013533612597565b611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420656c696769626c6520666f7220726566756e6400000000000000000060448201526064016109b0565b600d6000868685818110611955577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490505b6001600d60008787868181106119ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602090810292909201358352508181019290925260409081016000908120338252909252902060020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055611a4d81846152e8565b9250848483818110611a88577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201353373ffffffffffffffffffffffffffffffffffffffff167f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf783604051611ad791815260200190565b60405180910390a35080611aea816153bd565b915050611416565b508015611b0357611b033382613d6e565b50506001805550565b60005474010000000000000000000000000000000000000000900460ff16611b90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff163314611c11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b80611c78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d757374206265207375706572696f7220746f2030000000000000000000000060448201526064016109b0565b6007819055600a546040518281527f90eb87c560a0213754ceb3a7fa3012f01acab0a35602c1e1995adf69dabc9d50906020015b60405180910390a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314611d38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109b0565b73ffffffffffffffffffffffffffffffffffffffff8116611db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f20616464726573730000000000000000000060448201526064016109b0565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f137b621413925496477d46e5055ac0d56178bdd724ba8bf843afceef18268ba3906020015b60405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff163314611eb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109b0565b611eba6000614045565b565b60005474010000000000000000000000000000000000000000900460ff16611f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff163314611fc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b6103e881111561202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f54726561737572792066656520746f6f2068696768000000000000000000000060448201526064016109b0565b6008819055600a546040518281527fb1c4ee38d35556741133da7ff9b6f7ab0fa88d0406133126ff128f635490a85790602001611cac565b60005474010000000000000000000000000000000000000000900460ff166120e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff16331461216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b73ffffffffffffffffffffffffffffffffffffffff81166121e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f20616464726573730000000000000000000060448201526064016109b0565b6000600b55600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517ffeaf968c000000000000000000000000000000000000000000000000000000008152905163feaf968c9160048082019260a092909190829003018186803b15801561227e57600080fd5b505afa158015612292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b6919061512b565b505060405173ffffffffffffffffffffffffffffffffffffffff851681527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e93506020019150611e249050565b60005474010000000000000000000000000000000000000000900460ff1615612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b60045473ffffffffffffffffffffffffffffffffffffffff163314612409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f72000000000000000000000000000000000000000060448201526064016109b0565b6002547501000000000000000000000000000000000000000000900460ff16801561244e575060025474010000000000000000000000000000000000000000900460ff165b612500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e6420616e642067656e657369734c6f636b526f756e642069732074726960648201527f6767657265640000000000000000000000000000000000000000000000000000608482015260a4016109b0565b60008061250b6140ba565b915091508169ffffffffffffffffffff16600b8190555061253b600a548369ffffffffffffffffffff16836142b4565b6125606001600a5461254d9190615376565b8369ffffffffffffffffffff168361450d565b6125776001600a546125729190615376565b61477a565b600a546125859060016152e8565b600a8190556125939061491d565b5050565b6000828152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152808220815160608101909252805483929190829060ff166001811115612613577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600181111561264b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260018281015460208084019190915260029384015460ff908116151560409485015260008a8152600e835284902084516101c08101865281548152938101549284019290925293810154928201929092526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d909101549091161580156101a08301819052929350909161272c57508160400151155b80156127485750600554816060015161274591906152e8565b42115b80156127575750602082015115155b925050505b92915050565b60005474010000000000000000000000000000000000000000900460ff16156127e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff16331480612824575060045473ffffffffffffffffffffffffffffffffffffffff1633145b61288a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f74206f70657261746f722f61646d696e000000000000000000000000000060448201526064016109b0565b612892614b32565b600a546040517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d90600090a2565b60005474010000000000000000000000000000000000000000900460ff16612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff1633146129c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b808210612a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f6275666665725365636f6e6473206d75737420626520696e666572696f72207460448201527f6f20696e74657276616c5365636f6e647300000000000000000000000000000060648201526084016109b0565b6005829055600681905560408051838152602081018390527fe60149e0431fec12df63dfab5fce2a9cefe9a4d3df5f41cb626f579ae1f2b91a910160405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604081205460609182918490612ad3908790615376565b811115612b0e5773ffffffffffffffffffffffffffffffffffffffff87166000908152600f6020526040902054612b0b908790615376565b90505b60008167ffffffffffffffff811115612b50577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612b79578160200160208202803683370190505b50905060008267ffffffffffffffff811115612bbe577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612c2757816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181612bdc5790505b50905060005b83811015612e5d5773ffffffffffffffffffffffffffffffffffffffff8a166000908152600f60205260409020612c64828b6152e8565b81548110612c9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154838281518110612cdf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050600d6000848381518110612d28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020908102919091018101518252818101929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff8e168252909252908190208151606081019092528054829060ff166001811115612daf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6001811115612de7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526001820154602082015260029091015460ff1615156040909101528251839083908110612e3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101819052508080612e55906153bd565b915050612c2d565b508181612e6a858b6152e8565b95509550955050505093509350939050565b6000828152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152808220815160608101909252805483929190829060ff166001811115612ef8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6001811115612f30577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260018281015460208084019190915260029384015460ff908116151560409485015260008a8152600e835284902084516101c081018652815481529381015492840192909252938101549282019290925260038201546060820152600482015460808201819052600583015460a08301819052600684015460c0840152600784015460e084015260088401546101008401526009840154610120840152600a840154610140840152600b840154610160840152600c840154610180840152600d9093015490931615156101a082015292935014156130155760009250505061275c565b806101a00151801561302a5750602082015115155b801561303857508160400151155b8015612757575080608001518160a0015113801561308f575060008251600181111561308d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b145b80612757575080608001518160a0015112801561275757506001825160018111156130e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1495945050505050565b60005474010000000000000000000000000000000000000000900460ff1615613172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b600260015414156131df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109b0565b6002600155333b1561324d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f77656400000000000000000000000060448201526064016109b0565b3332146132b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016109b0565b600a548114613321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f42657420697320746f6f206561726c792f6c617465000000000000000000000060448201526064016109b0565b61332a81613fda565b613390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f526f756e64206e6f74206265747461626c65000000000000000000000000000060448201526064016109b0565b600754341015613422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f42657420616d6f756e74206d7573742062652067726561746572207468616e2060448201527f6d696e426574416d6f756e74000000000000000000000000000000000000000060648201526084016109b0565b6000818152600d60209081526040808320338452909152902060010154156134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616e206f6e6c7920626574206f6e63652070657220726f756e64000000000060448201526064016109b0565b6000818152600e6020526040902060088101543491906134c79083906152e8565b6008820155600a8101546134dc9083906152e8565b600a8201556000838152600d602090815260408083203380855290835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081178255808201889055600f855283862080549182018155865294849020909401879055905185815286927f0d8c1fe3e67ab767116a81f122b83c2557a8c2564019cb7c4f83de1aeb1f1f0d91016112bc565b60005473ffffffffffffffffffffffffffffffffffffffff1633146135f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109b0565b61361873ffffffffffffffffffffffffffffffffffffffff83163383614c1e565b8173ffffffffffffffffffffffffffffffffffffffff167f14f11966a996e0629572e51064726d2057a80fbd34efc066682c06a71dbb6e988260405161366091815260200190565b60405180910390a25050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146136ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b73ffffffffffffffffffffffffffffffffffffffff811661376a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f20616464726573730000000000000000000060448201526064016109b0565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fc47d127c07bdd56c5ccba00463ce3bd3c1bca71b4670eea6e5d0c02e4aa156e290602001611e24565b60005474010000000000000000000000000000000000000000900460ff16613861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff1633146138e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b600c8190556040518181527f93ccaceac092ffb842c46b8718667a13a80e9058dcd0bd403d0b47215b30da0790602001611e24565b60005474010000000000000000000000000000000000000000900460ff161561399c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b60045473ffffffffffffffffffffffffffffffffffffffff163314613a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f72000000000000000000000000000000000000000060448201526064016109b0565b6002547501000000000000000000000000000000000000000000900460ff16613ac8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e642069732074726967676572656400000000000000000000000000000060648201526084016109b0565b60025474010000000000000000000000000000000000000000900460ff1615613b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f43616e206f6e6c792072756e2067656e657369734c6f636b526f756e64206f6e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016109b0565b600080613b7e6140ba565b915091508169ffffffffffffffffffff16600b81905550613bae600a548369ffffffffffffffffffff16836142b4565b600a54613bbc9060016152e8565b600a819055613bca90613f5c565b5050600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b600f6020528160005260406000208181548110613c2957600080fd5b90600052602060002001600091509150505481565b60005473ffffffffffffffffffffffffffffffffffffffff163314613cbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109b0565b73ffffffffffffffffffffffffffffffffffffffff8116613d62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109b0565b613d6b81614045565b50565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613dc8576040519150601f19603f3d011682016040523d82523d6000602084013e613dcd565b606091505b5050905080613e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5472616e7366657248656c7065723a2046544d5f5452414e534645525f46414960448201527f4c4544000000000000000000000000000000000000000000000000000000000060648201526084016109b0565b505050565b60005474010000000000000000000000000000000000000000900460ff16613ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000818152600e602052604090204260018201819055600654613f7e916152e8565b600280830191909155600654613f9391615339565b613f9d90426152e8565b600382015581815560006008820181905560405183917f939f42374aa9bf1d8d8cd56d8a9110cb040cd8dfeae44080c6fcf2645e51b45291a25050565b6000818152600e60205260408120600101541580159061400a57506000828152600e602052604090206002015415155b801561402657506000828152600e602052604090206001015442115b801561275c5750506000908152600e6020526040902060020154421090565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000600c54426140cd91906152e8565b90506000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561413c57600080fd5b505afa158015614150573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614174919061512b565b50935050925092508381111561420c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f7261636c6520757064617465206578636565646564206d61782074696d657360448201527f74616d7020616c6c6f77616e636500000000000000000000000000000000000060648201526084016109b0565b600b548369ffffffffffffffffffff16116142a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4f7261636c652075706461746520726f756e644964206d757374206265206c6160448201527f72676572207468616e206f7261636c654c6174657374526f756e64496400000060648201526084016109b0565b509094909350915050565b6000838152600e6020526040902060010154614352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f43616e206f6e6c79206c6f636b20726f756e6420616674657220726f756e642060448201527f686173207374617274656400000000000000000000000000000000000000000060648201526084016109b0565b6000838152600e60205260409020600201544210156143f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c79206c6f636b20726f756e64206166746572206c6f636b546960448201527f6d657374616d700000000000000000000000000000000000000000000000000060648201526084016109b0565b6005546000848152600e602052604090206002015461441291906152e8565b4211156144a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f43616e206f6e6c79206c6f636b20726f756e642077697468696e20627566666560448201527f725365636f6e647300000000000000000000000000000000000000000000000060648201526084016109b0565b6000838152600e602052604090206006546144bc90426152e8565b60038201556004810182905560068101839055604051828152839085907f482e76a65b448a42deef26e99e58fb20c85e26f075defff8df6aa80459b39006906020015b60405180910390a350505050565b6000838152600e60205260409020600201546145ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f43616e206f6e6c7920656e6420726f756e6420616674657220726f756e64206860448201527f6173206c6f636b6564000000000000000000000000000000000000000000000060648201526084016109b0565b6000838152600e602052604090206003015442101561464c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c7920656e6420726f756e6420616674657220636c6f7365546960448201527f6d657374616d700000000000000000000000000000000000000000000000000060648201526084016109b0565b6005546000848152600e602052604090206003015461466b91906152e8565b4211156146fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c7920656e6420726f756e642077697468696e2062756666657260448201527f5365636f6e64730000000000000000000000000000000000000000000000000060648201526084016109b0565b6000838152600e6020526040908190206005810183905560078101849055600d810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559051839085907fb6ff1fe915db84788cbbbc017f0d2bef9485fad9fd0bd8ce9340fde0d8410dd8906144ff9086815260200190565b6000818152600e60205260409020600b01541580156147a857506000818152600e60205260409020600c0154155b61480e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f526577617264732063616c63756c61746564000000000000000000000000000060448201526064016109b0565b6000818152600e60205260408120600481015460058201549192918291829113156148725783600901549250612710600854856008015461484f9190615339565b6148599190615300565b915081846008015461486b9190615376565b90506148ab565b83600401548460050154121561489e5783600a01549250612710600854856008015461484f9190615339565b5050506008810154600090815b600b8401839055600c8401819055600980548391906000906148ce9084906152e8565b9091555050604080518481526020810183905290810183905285907f6dfdfcb09c8804d0058826cd2539f1acfbe3cb887c9be03d928035bce0f1a58d9060600160405180910390a25050505050565b6002547501000000000000000000000000000000000000000000900460ff166149c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e642069732074726967676572656400000000000000000000000000000060648201526084016109b0565b600e60006149d7600284615376565b81526020019081526020016000206003015460001415614a79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f43616e206f6e6c7920737461727420726f756e6420616674657220726f756e6460448201527f206e2d322068617320656e64656400000000000000000000000000000000000060648201526084016109b0565b600e6000614a88600284615376565b815260200190815260200160002060030154421015614b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43616e206f6e6c79207374617274206e657720726f756e64206166746572207260448201527f6f756e64206e2d3220636c6f736554696d657374616d7000000000000000000060648201526084016109b0565b613d6b81613f5c565b60005474010000000000000000000000000000000000000000900460ff1615614bb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613f323390565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152613e5e92869291600091614ce9918516908490614d93565b805190915015613e5e5780806020019051810190614d0791906150a7565b613e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109b0565b6060614da28484600085614dac565b90505b9392505050565b606082471015614e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016109b0565b843b614ea6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109b0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051614ecf91906151b5565b60006040518083038185875af1925050503d8060008114614f0c576040519150601f19603f3d011682016040523d82523d6000602084013e614f11565b606091505b5091509150614f21828286614f2c565b979650505050505050565b60608315614f3b575081614da5565b825115614f4b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b09190615297565b803573ffffffffffffffffffffffffffffffffffffffff81168114614fa357600080fd5b919050565b805169ffffffffffffffffffff81168114614fa357600080fd5b600060208284031215614fd3578081fd5b614da582614f7f565b60008060408385031215614fee578081fd5b614ff783614f7f565b946020939093013593505050565b600080600060608486031215615019578081fd5b61502284614f7f565b95602085013595506040909401359392505050565b60008060208385031215615049578182fd5b823567ffffffffffffffff80821115615060578384fd5b818501915085601f830112615073578384fd5b813581811115615081578485fd5b8660208260051b8501011115615095578485fd5b60209290920196919550909350505050565b6000602082840312156150b8578081fd5b81518015158114614da5578182fd5b6000602082840312156150d8578081fd5b5035919050565b600080604083850312156150f1578182fd5b8235915061510160208401614f7f565b90509250929050565b6000806040838503121561511c578182fd5b50508035926020909101359150565b600080600080600060a08688031215615142578081fd5b61514b86614fa8565b945060208601519350604086015192506060860151915061516e60808701614fa8565b90509295509295909350565b600281106151b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600082516151c781846020870161538d565b9190910192915050565b60608082528451828201819052600091906020906080850190828901855b8281101561520b578151845292840192908401906001016151ef565b50505084810382860152865180825287830191830190855b8181101561525c57835161523884825161517a565b80860151848701526040908101511515908401529284019291850191600101615223565b505080945050505050826040830152949350505050565b60608101615281828661517a565b8360208301528215156040830152949350505050565b60208152600082518060208401526152b681604085016020870161538d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156152fb576152fb6153f6565b500190565b600082615334577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615371576153716153f6565b500290565b600082821015615388576153886153f6565b500390565b60005b838110156153a8578181015183820152602001615390565b838111156153b7576000848401525b50505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153ef576153ef6153f6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220e8139cc890e372dc7ebd972cd5e014f4ed1261f9aa749e95f809b10762d8fbb964736f6c63430008040033000000000000000000000000f4766552d15ae4d256ad41b6cf2933482b0680dc00000000000000000000000021866bc248745e1949749954b6510ab76ba50c1a0000000000000000000000008db52b43b7054083c379cc3370eccac8fef941de000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode
0x6080604052600436106102d05760003560e01c80637dc0d1d011610179578063cc32d176116100d6578063ec3247031161008a578063f7fdec2811610064578063f7fdec28146108d1578063fa968eea14610904578063fc6f94681461091a57600080fd5b8063ec32470314610885578063f2b3c8091461089b578063f2fde38b146108b157600080fd5b8063d9d55eac116100bb578063d9d55eac1461083a578063dd1f75961461084f578063eaba23611461086f57600080fd5b8063cc32d17614610804578063cf2f50391461081a57600080fd5b8063951fd6001161012d578063aa6b873a11610112578063aa6b873a146107b1578063b29a8140146107c4578063b3ab15fb146107e457600080fd5b8063951fd60014610762578063a0c7f71c1461079157600080fd5b8063890dc7661161015e578063890dc766146106225780638c65c81f146106425780638da5cb5b1461073757600080fd5b80637dc0d1d0146105e05780638456cb591461060d57600080fd5b80636ba4c1381161023257806376671808116101e65780637b3205f5116101c05780637b3205f5146105955780637bf41254146105aa5780637d1cd04f146105ca57600080fd5b8063766718081461053f57806377e741c7146105555780637adbf9731461057557600080fd5b8063704b6c0211610217578063704b6c02146104af578063715018a6146104cf5780637285c58b146104e457600080fd5b80636ba4c1381461046f5780636c1885931461048f57600080fd5b80633f4ba83a1161028957806357fb096f1161026e57806357fb096f146104165780635c975abb14610429578063605540111461045957600080fd5b80633f4ba83a146103ec578063452fd75a1461040157600080fd5b8063127effb2116102ba578063127effb214610333578063273867d414610385578063368acb09146103d657600080fd5b80623bdc74146102d55780630f74174f146102ec575b600080fd5b3480156102e157600080fd5b506102ea610947565b005b3480156102f857600080fd5b5060025461031e9074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b34801561033f57600080fd5b506004546103609073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032a565b34801561039157600080fd5b506103c86103a0366004614fc2565b73ffffffffffffffffffffffffffffffffffffffff166000908152600f602052604090205490565b60405190815260200161032a565b3480156103e257600080fd5b506103c860095481565b3480156103f857600080fd5b506102ea610aa5565b34801561040d57600080fd5b506102ea610c2a565b6102ea6104243660046150c7565b610e3a565b34801561043557600080fd5b5060005474010000000000000000000000000000000000000000900460ff1661031e565b34801561046557600080fd5b506103c8600c5481565b34801561047b57600080fd5b506102ea61048a366004615037565b6112ce565b34801561049b57600080fd5b506102ea6104aa3660046150c7565b611b0c565b3480156104bb57600080fd5b506102ea6104ca366004614fc2565b611cb7565b3480156104db57600080fd5b506102ea611e2f565b3480156104f057600080fd5b506105306104ff3660046150df565b600d60209081526000928352604080842090915290825290208054600182015460029092015460ff91821692911683565b60405161032a93929190615273565b34801561054b57600080fd5b506103c8600a5481565b34801561056157600080fd5b506102ea6105703660046150c7565b611ebc565b34801561058157600080fd5b506102ea610590366004614fc2565b612065565b3480156105a157600080fd5b506102ea612303565b3480156105b657600080fd5b5061031e6105c53660046150df565b612597565b3480156105d657600080fd5b506103c860065481565b3480156105ec57600080fd5b506002546103609073ffffffffffffffffffffffffffffffffffffffff1681565b34801561061957600080fd5b506102ea612762565b34801561062e57600080fd5b506102ea61063d36600461510a565b6128c0565b34801561064e57600080fd5b506106cd61065d3660046150c7565b600e60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c8d0154600d909d01549b9c9a9b999a98999798969795969495939492939192909160ff168e565b604080519e8f5260208f019d909d529b8d019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e088015261010087015261012086015261014085015261016084015261018083015215156101a08201526101c00161032a565b34801561074357600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610360565b34801561076e57600080fd5b5061078261077d366004615005565b612a9b565b60405161032a939291906151d1565b34801561079d57600080fd5b5061031e6107ac3660046150df565b612e7c565b6102ea6107bf3660046150c7565b6130ed565b3480156107d057600080fd5b506102ea6107df366004614fdc565b613576565b3480156107f057600080fd5b506102ea6107ff366004614fc2565b61366c565b34801561081057600080fd5b506103c860085481565b34801561082657600080fd5b506102ea6108353660046150c7565b6137dd565b34801561084657600080fd5b506102ea613917565b34801561085b57600080fd5b506103c861086a366004614fdc565b613c0d565b34801561087b57600080fd5b506103c860055481565b34801561089157600080fd5b506103c8600b5481565b3480156108a757600080fd5b506103c86103e881565b3480156108bd57600080fd5b506102ea6108cc366004614fc2565b613c3e565b3480156108dd57600080fd5b5060025461031e907501000000000000000000000000000000000000000000900460ff1681565b34801561091057600080fd5b506103c860075481565b34801561092657600080fd5b506003546103609073ffffffffffffffffffffffffffffffffffffffff1681565b600260015414156109b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260015560035473ffffffffffffffffffffffffffffffffffffffff163314610a3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b600980546000909155600354610a6b9073ffffffffffffffffffffffffffffffffffffffff1682613d6e565b6040518181527fb9197c6b8e21274bd1e2d9c956a88af5cfee510f630fab3f046300f88b4223619060200160405180910390a15060018055565b60005474010000000000000000000000000000000000000000900460ff16610b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff16331480610b66575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610bcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f74206f70657261746f722f61646d696e000000000000000000000000000060448201526064016109b0565b600280547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff169055610bfc613e63565b600a546040517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab790600090a2565b60005474010000000000000000000000000000000000000000900460ff1615610caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b60045473ffffffffffffffffffffffffffffffffffffffff163314610d30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f72000000000000000000000000000000000000000060448201526064016109b0565b6002547501000000000000000000000000000000000000000000900460ff1615610ddc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f43616e206f6e6c792072756e2067656e657369735374617274526f756e64206f60448201527f6e6365000000000000000000000000000000000000000000000000000000000060648201526084016109b0565b600a54610dea9060016152e8565b600a819055610df890613f5c565b600280547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b60005474010000000000000000000000000000000000000000900460ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b60026001541415610f2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109b0565b6002600155333b15610f9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f77656400000000000000000000000060448201526064016109b0565b333214611003576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016109b0565b600a54811461106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f42657420697320746f6f206561726c792f6c617465000000000000000000000060448201526064016109b0565b61107781613fda565b6110dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f526f756e64206e6f74206265747461626c65000000000000000000000000000060448201526064016109b0565b60075434101561116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f42657420616d6f756e74206d7573742062652067726561746572207468616e2060448201527f6d696e426574416d6f756e74000000000000000000000000000000000000000060648201526084016109b0565b6000818152600d60209081526040808320338452909152902060010154156111f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616e206f6e6c7920626574206f6e63652070657220726f756e64000000000060448201526064016109b0565b6000818152600e6020526040902060088101543491906112149083906152e8565b600882015560098101546112299083906152e8565b60098201556000838152600d602090815260408083203380855290835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681556001808201889055600f855283862080549182018155865294849020909401879055905185815286927f438122d8cff518d18388099a5181f0d17a12b4f1b55faedf6e4a6acee0060c1291015b60405180910390a35050600180555050565b6002600154141561133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109b0565b6002600155333b156113a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f77656400000000000000000000000060448201526064016109b0565b333214611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016109b0565b6000805b82811015611af257600e600085858481811061145b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135815260200190815260200160002060010154600014156114de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f526f756e6420686173206e6f742073746172746564000000000000000000000060448201526064016109b0565b600e600085858481811061151b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135815260200190815260200160002060030154421161159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f526f756e6420686173206e6f7420656e6465640000000000000000000000000060448201526064016109b0565b6000600e60008686858181106115db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60209081029290920135835250810191909152604001600020600d015460ff16156118695761164985858481811061163c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013533612e7c565b6116af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f7420656c696769626c6520666f7220636c61696d0000000000000000000060448201526064016109b0565b6000600e60008787868181106116ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201358152602001908152602001600020604051806101c001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820160009054906101000a900460ff1615151515815250509050806101600151816101800151600d60008989888181106117f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546118579190615339565b6118619190615300565b9150506119ae565b6118b28585848181106118a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013533612597565b611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420656c696769626c6520666f7220726566756e6400000000000000000060448201526064016109b0565b600d6000868685818110611955577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490505b6001600d60008787868181106119ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602090810292909201358352508181019290925260409081016000908120338252909252902060020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055611a4d81846152e8565b9250848483818110611a88577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201353373ffffffffffffffffffffffffffffffffffffffff167f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf783604051611ad791815260200190565b60405180910390a35080611aea816153bd565b915050611416565b508015611b0357611b033382613d6e565b50506001805550565b60005474010000000000000000000000000000000000000000900460ff16611b90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff163314611c11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b80611c78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d757374206265207375706572696f7220746f2030000000000000000000000060448201526064016109b0565b6007819055600a546040518281527f90eb87c560a0213754ceb3a7fa3012f01acab0a35602c1e1995adf69dabc9d50906020015b60405180910390a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314611d38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109b0565b73ffffffffffffffffffffffffffffffffffffffff8116611db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f20616464726573730000000000000000000060448201526064016109b0565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f137b621413925496477d46e5055ac0d56178bdd724ba8bf843afceef18268ba3906020015b60405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff163314611eb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109b0565b611eba6000614045565b565b60005474010000000000000000000000000000000000000000900460ff16611f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff163314611fc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b6103e881111561202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f54726561737572792066656520746f6f2068696768000000000000000000000060448201526064016109b0565b6008819055600a546040518281527fb1c4ee38d35556741133da7ff9b6f7ab0fa88d0406133126ff128f635490a85790602001611cac565b60005474010000000000000000000000000000000000000000900460ff166120e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff16331461216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b73ffffffffffffffffffffffffffffffffffffffff81166121e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f20616464726573730000000000000000000060448201526064016109b0565b6000600b55600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517ffeaf968c000000000000000000000000000000000000000000000000000000008152905163feaf968c9160048082019260a092909190829003018186803b15801561227e57600080fd5b505afa158015612292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b6919061512b565b505060405173ffffffffffffffffffffffffffffffffffffffff851681527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e93506020019150611e249050565b60005474010000000000000000000000000000000000000000900460ff1615612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b60045473ffffffffffffffffffffffffffffffffffffffff163314612409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f72000000000000000000000000000000000000000060448201526064016109b0565b6002547501000000000000000000000000000000000000000000900460ff16801561244e575060025474010000000000000000000000000000000000000000900460ff165b612500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e6420616e642067656e657369734c6f636b526f756e642069732074726960648201527f6767657265640000000000000000000000000000000000000000000000000000608482015260a4016109b0565b60008061250b6140ba565b915091508169ffffffffffffffffffff16600b8190555061253b600a548369ffffffffffffffffffff16836142b4565b6125606001600a5461254d9190615376565b8369ffffffffffffffffffff168361450d565b6125776001600a546125729190615376565b61477a565b600a546125859060016152e8565b600a8190556125939061491d565b5050565b6000828152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152808220815160608101909252805483929190829060ff166001811115612613577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600181111561264b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260018281015460208084019190915260029384015460ff908116151560409485015260008a8152600e835284902084516101c08101865281548152938101549284019290925293810154928201929092526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d909101549091161580156101a08301819052929350909161272c57508160400151155b80156127485750600554816060015161274591906152e8565b42115b80156127575750602082015115155b925050505b92915050565b60005474010000000000000000000000000000000000000000900460ff16156127e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff16331480612824575060045473ffffffffffffffffffffffffffffffffffffffff1633145b61288a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f74206f70657261746f722f61646d696e000000000000000000000000000060448201526064016109b0565b612892614b32565b600a546040517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d90600090a2565b60005474010000000000000000000000000000000000000000900460ff16612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff1633146129c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b808210612a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f6275666665725365636f6e6473206d75737420626520696e666572696f72207460448201527f6f20696e74657276616c5365636f6e647300000000000000000000000000000060648201526084016109b0565b6005829055600681905560408051838152602081018390527fe60149e0431fec12df63dfab5fce2a9cefe9a4d3df5f41cb626f579ae1f2b91a910160405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604081205460609182918490612ad3908790615376565b811115612b0e5773ffffffffffffffffffffffffffffffffffffffff87166000908152600f6020526040902054612b0b908790615376565b90505b60008167ffffffffffffffff811115612b50577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612b79578160200160208202803683370190505b50905060008267ffffffffffffffff811115612bbe577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612c2757816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181612bdc5790505b50905060005b83811015612e5d5773ffffffffffffffffffffffffffffffffffffffff8a166000908152600f60205260409020612c64828b6152e8565b81548110612c9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154838281518110612cdf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050600d6000848381518110612d28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020908102919091018101518252818101929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff8e168252909252908190208151606081019092528054829060ff166001811115612daf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6001811115612de7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526001820154602082015260029091015460ff1615156040909101528251839083908110612e3f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101819052508080612e55906153bd565b915050612c2d565b508181612e6a858b6152e8565b95509550955050505093509350939050565b6000828152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152808220815160608101909252805483929190829060ff166001811115612ef8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6001811115612f30577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260018281015460208084019190915260029384015460ff908116151560409485015260008a8152600e835284902084516101c081018652815481529381015492840192909252938101549282019290925260038201546060820152600482015460808201819052600583015460a08301819052600684015460c0840152600784015460e084015260088401546101008401526009840154610120840152600a840154610140840152600b840154610160840152600c840154610180840152600d9093015490931615156101a082015292935014156130155760009250505061275c565b806101a00151801561302a5750602082015115155b801561303857508160400151155b8015612757575080608001518160a0015113801561308f575060008251600181111561308d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b145b80612757575080608001518160a0015112801561275757506001825160018111156130e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1495945050505050565b60005474010000000000000000000000000000000000000000900460ff1615613172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b600260015414156131df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109b0565b6002600155333b1561324d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f77656400000000000000000000000060448201526064016109b0565b3332146132b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016109b0565b600a548114613321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f42657420697320746f6f206561726c792f6c617465000000000000000000000060448201526064016109b0565b61332a81613fda565b613390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f526f756e64206e6f74206265747461626c65000000000000000000000000000060448201526064016109b0565b600754341015613422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f42657420616d6f756e74206d7573742062652067726561746572207468616e2060448201527f6d696e426574416d6f756e74000000000000000000000000000000000000000060648201526084016109b0565b6000818152600d60209081526040808320338452909152902060010154156134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616e206f6e6c7920626574206f6e63652070657220726f756e64000000000060448201526064016109b0565b6000818152600e6020526040902060088101543491906134c79083906152e8565b6008820155600a8101546134dc9083906152e8565b600a8201556000838152600d602090815260408083203380855290835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081178255808201889055600f855283862080549182018155865294849020909401879055905185815286927f0d8c1fe3e67ab767116a81f122b83c2557a8c2564019cb7c4f83de1aeb1f1f0d91016112bc565b60005473ffffffffffffffffffffffffffffffffffffffff1633146135f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109b0565b61361873ffffffffffffffffffffffffffffffffffffffff83163383614c1e565b8173ffffffffffffffffffffffffffffffffffffffff167f14f11966a996e0629572e51064726d2057a80fbd34efc066682c06a71dbb6e988260405161366091815260200190565b60405180910390a25050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146136ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b73ffffffffffffffffffffffffffffffffffffffff811661376a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f20616464726573730000000000000000000060448201526064016109b0565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fc47d127c07bdd56c5ccba00463ce3bd3c1bca71b4670eea6e5d0c02e4aa156e290602001611e24565b60005474010000000000000000000000000000000000000000900460ff16613861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b60035473ffffffffffffffffffffffffffffffffffffffff1633146138e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109b0565b600c8190556040518181527f93ccaceac092ffb842c46b8718667a13a80e9058dcd0bd403d0b47215b30da0790602001611e24565b60005474010000000000000000000000000000000000000000900460ff161561399c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b60045473ffffffffffffffffffffffffffffffffffffffff163314613a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f72000000000000000000000000000000000000000060448201526064016109b0565b6002547501000000000000000000000000000000000000000000900460ff16613ac8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e642069732074726967676572656400000000000000000000000000000060648201526084016109b0565b60025474010000000000000000000000000000000000000000900460ff1615613b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f43616e206f6e6c792072756e2067656e657369734c6f636b526f756e64206f6e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016109b0565b600080613b7e6140ba565b915091508169ffffffffffffffffffff16600b81905550613bae600a548369ffffffffffffffffffff16836142b4565b600a54613bbc9060016152e8565b600a819055613bca90613f5c565b5050600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b600f6020528160005260406000208181548110613c2957600080fd5b90600052602060002001600091509150505481565b60005473ffffffffffffffffffffffffffffffffffffffff163314613cbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109b0565b73ffffffffffffffffffffffffffffffffffffffff8116613d62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109b0565b613d6b81614045565b50565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613dc8576040519150601f19603f3d011682016040523d82523d6000602084013e613dcd565b606091505b5050905080613e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5472616e7366657248656c7065723a2046544d5f5452414e534645525f46414960448201527f4c4544000000000000000000000000000000000000000000000000000000000060648201526084016109b0565b505050565b60005474010000000000000000000000000000000000000000900460ff16613ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109b0565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000818152600e602052604090204260018201819055600654613f7e916152e8565b600280830191909155600654613f9391615339565b613f9d90426152e8565b600382015581815560006008820181905560405183917f939f42374aa9bf1d8d8cd56d8a9110cb040cd8dfeae44080c6fcf2645e51b45291a25050565b6000818152600e60205260408120600101541580159061400a57506000828152600e602052604090206002015415155b801561402657506000828152600e602052604090206001015442115b801561275c5750506000908152600e6020526040902060020154421090565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000600c54426140cd91906152e8565b90506000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561413c57600080fd5b505afa158015614150573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614174919061512b565b50935050925092508381111561420c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f7261636c6520757064617465206578636565646564206d61782074696d657360448201527f74616d7020616c6c6f77616e636500000000000000000000000000000000000060648201526084016109b0565b600b548369ffffffffffffffffffff16116142a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4f7261636c652075706461746520726f756e644964206d757374206265206c6160448201527f72676572207468616e206f7261636c654c6174657374526f756e64496400000060648201526084016109b0565b509094909350915050565b6000838152600e6020526040902060010154614352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f43616e206f6e6c79206c6f636b20726f756e6420616674657220726f756e642060448201527f686173207374617274656400000000000000000000000000000000000000000060648201526084016109b0565b6000838152600e60205260409020600201544210156143f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c79206c6f636b20726f756e64206166746572206c6f636b546960448201527f6d657374616d700000000000000000000000000000000000000000000000000060648201526084016109b0565b6005546000848152600e602052604090206002015461441291906152e8565b4211156144a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f43616e206f6e6c79206c6f636b20726f756e642077697468696e20627566666560448201527f725365636f6e647300000000000000000000000000000000000000000000000060648201526084016109b0565b6000838152600e602052604090206006546144bc90426152e8565b60038201556004810182905560068101839055604051828152839085907f482e76a65b448a42deef26e99e58fb20c85e26f075defff8df6aa80459b39006906020015b60405180910390a350505050565b6000838152600e60205260409020600201546145ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f43616e206f6e6c7920656e6420726f756e6420616674657220726f756e64206860448201527f6173206c6f636b6564000000000000000000000000000000000000000000000060648201526084016109b0565b6000838152600e602052604090206003015442101561464c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c7920656e6420726f756e6420616674657220636c6f7365546960448201527f6d657374616d700000000000000000000000000000000000000000000000000060648201526084016109b0565b6005546000848152600e602052604090206003015461466b91906152e8565b4211156146fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c7920656e6420726f756e642077697468696e2062756666657260448201527f5365636f6e64730000000000000000000000000000000000000000000000000060648201526084016109b0565b6000838152600e6020526040908190206005810183905560078101849055600d810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559051839085907fb6ff1fe915db84788cbbbc017f0d2bef9485fad9fd0bd8ce9340fde0d8410dd8906144ff9086815260200190565b6000818152600e60205260409020600b01541580156147a857506000818152600e60205260409020600c0154155b61480e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f526577617264732063616c63756c61746564000000000000000000000000000060448201526064016109b0565b6000818152600e60205260408120600481015460058201549192918291829113156148725783600901549250612710600854856008015461484f9190615339565b6148599190615300565b915081846008015461486b9190615376565b90506148ab565b83600401548460050154121561489e5783600a01549250612710600854856008015461484f9190615339565b5050506008810154600090815b600b8401839055600c8401819055600980548391906000906148ce9084906152e8565b9091555050604080518481526020810183905290810183905285907f6dfdfcb09c8804d0058826cd2539f1acfbe3cb887c9be03d928035bce0f1a58d9060600160405180910390a25050505050565b6002547501000000000000000000000000000000000000000000900460ff166149c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e642069732074726967676572656400000000000000000000000000000060648201526084016109b0565b600e60006149d7600284615376565b81526020019081526020016000206003015460001415614a79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f43616e206f6e6c7920737461727420726f756e6420616674657220726f756e6460448201527f206e2d322068617320656e64656400000000000000000000000000000000000060648201526084016109b0565b600e6000614a88600284615376565b815260200190815260200160002060030154421015614b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43616e206f6e6c79207374617274206e657720726f756e64206166746572207260448201527f6f756e64206e2d3220636c6f736554696d657374616d7000000000000000000060648201526084016109b0565b613d6b81613f5c565b60005474010000000000000000000000000000000000000000900460ff1615614bb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109b0565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613f323390565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152613e5e92869291600091614ce9918516908490614d93565b805190915015613e5e5780806020019051810190614d0791906150a7565b613e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109b0565b6060614da28484600085614dac565b90505b9392505050565b606082471015614e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016109b0565b843b614ea6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109b0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051614ecf91906151b5565b60006040518083038185875af1925050503d8060008114614f0c576040519150601f19603f3d011682016040523d82523d6000602084013e614f11565b606091505b5091509150614f21828286614f2c565b979650505050505050565b60608315614f3b575081614da5565b825115614f4b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b09190615297565b803573ffffffffffffffffffffffffffffffffffffffff81168114614fa357600080fd5b919050565b805169ffffffffffffffffffff81168114614fa357600080fd5b600060208284031215614fd3578081fd5b614da582614f7f565b60008060408385031215614fee578081fd5b614ff783614f7f565b946020939093013593505050565b600080600060608486031215615019578081fd5b61502284614f7f565b95602085013595506040909401359392505050565b60008060208385031215615049578182fd5b823567ffffffffffffffff80821115615060578384fd5b818501915085601f830112615073578384fd5b813581811115615081578485fd5b8660208260051b8501011115615095578485fd5b60209290920196919550909350505050565b6000602082840312156150b8578081fd5b81518015158114614da5578182fd5b6000602082840312156150d8578081fd5b5035919050565b600080604083850312156150f1578182fd5b8235915061510160208401614f7f565b90509250929050565b6000806040838503121561511c578182fd5b50508035926020909101359150565b600080600080600060a08688031215615142578081fd5b61514b86614fa8565b945060208601519350604086015192506060860151915061516e60808701614fa8565b90509295509295909350565b600281106151b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600082516151c781846020870161538d565b9190910192915050565b60608082528451828201819052600091906020906080850190828901855b8281101561520b578151845292840192908401906001016151ef565b50505084810382860152865180825287830191830190855b8181101561525c57835161523884825161517a565b80860151848701526040908101511515908401529284019291850191600101615223565b505080945050505050826040830152949350505050565b60608101615281828661517a565b8360208301528215156040830152949350505050565b60208152600082518060208401526152b681604085016020870161538d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156152fb576152fb6153f6565b500190565b600082615334577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615371576153716153f6565b500290565b600082821015615388576153886153f6565b500390565b60005b838110156153a8578181015183820152602001615390565b838111156153b7576000848401525b50505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153ef576153ef6153f6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220e8139cc890e372dc7ebd972cd5e014f4ed1261f9aa749e95f809b10762d8fbb964736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f4766552d15ae4d256ad41b6cf2933482b0680dc00000000000000000000000021866bc248745e1949749954b6510ab76ba50c1a0000000000000000000000008db52b43b7054083c379cc3370eccac8fef941de000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000001f4
-----Decoded View---------------
Arg [0] : _oracleAddress (address): 0xf4766552D15AE4d256Ad41B6cf2933482B0680dc
Arg [1] : _adminAddress (address): 0x21866Bc248745E1949749954B6510Ab76bA50c1A
Arg [2] : _operatorAddress (address): 0x8Db52B43b7054083c379Cc3370ECCAc8FEf941dE
Arg [3] : _intervalSeconds (uint256): 300
Arg [4] : _bufferSeconds (uint256): 30
Arg [5] : _minBetAmount (uint256): 100000000000000000
Arg [6] : _oracleUpdateAllowance (uint256): 300
Arg [7] : _treasuryFee (uint256): 500
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000f4766552d15ae4d256ad41b6cf2933482b0680dc
Arg [1] : 00000000000000000000000021866bc248745e1949749954b6510ab76ba50c1a
Arg [2] : 0000000000000000000000008db52b43b7054083c379cc3370eccac8fef941de
Arg [3] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [4] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [5] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [6] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [7] : 00000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode Sourcemap
23461:22860:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34066:269;;;;;;;;;;;;;:::i;:::-;;23610:35;;;;;;;;;;-1:-1:-1;23610:35:0;;;;;;;;;;;;;;6387:14:1;;6380:22;6362:41;;6350:2;6335:18;23610:35:0;;;;;;;;23755:30;;;;;;;;;;-1:-1:-1;23755:30:0;;;;;;;;;;;4356:42:1;4344:55;;;4326:74;;4314:2;4299:18;23755:30:0;4281:125:1;38854:124:0;;;;;;;;;;-1:-1:-1;38854:124:0;;;;;:::i;:::-;38947:16;;38920:7;38947:16;;;:10;:16;;;;;:23;;38854:124;;;;7180:25:1;;;7168:2;7153:18;38854:124:0;7135:76:1;24171:29:0;;;;;;;;;;;;;;;;34526:196;;;;;;;;;;;;;:::i;33438:263::-;;;;;;;;;;;;;:::i;29473:895::-;;;;;;:::i;:::-;;:::i;4112:86::-;;;;;;;;;;-1:-1:-1;4159:4:0;4183:7;;;;;;4112:86;;24401:36;;;;;;;;;;;;;;;;30485:1297;;;;;;;;;;-1:-1:-1;30485:1297:0;;;;;:::i;:::-;;:::i;35338:249::-;;;;;;;;;;-1:-1:-1;35338:249:0;;;;;:::i;:::-;;:::i;37586:228::-;;;;;;;;;;-1:-1:-1;37586:228:0;;;;;:::i;:::-;;:::i;2473:94::-;;;;;;;;;;;;;:::i;24520:61::-;;;;;;;;;;-1:-1:-1;24520:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24249:27::-;;;;;;;;;;;;;;;;36823:257;;;;;;;;;;-1:-1:-1;36823:257:0;;;;;:::i;:::-;;:::i;36022:383::-;;;;;;;;;;-1:-1:-1;36022:383:0;;;;;:::i;:::-;;:::i;31922:758::-;;;;;;;;;;;;;:::i;39858:358::-;;;;;;;;;;-1:-1:-1;39858:358:0;;;;;:::i;:::-;;:::i;23919:30::-;;;;;;;;;;;;;;;;23566:35;;;;;;;;;;-1:-1:-1;23566:35:0;;;;;;;;33839:124;;;;;;;;;;;;;:::i;34832:416::-;;;;;;;;;;-1:-1:-1;34832:416:0;;;;;:::i;:::-;;:::i;24588:39::-;;;;;;;;;;-1:-1:-1;24588:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24584:25:1;;;24640:2;24625:18;;24618:34;;;;24668:18;;;24661:34;;;;24726:2;24711:18;;24704:34;;;;24769:3;24754:19;;24747:35;;;;24813:3;24798:19;;24791:35;;;;24857:3;24842:19;;24835:35;;;;24901:3;24886:19;;24879:35;24945:3;24930:19;;24923:35;24989:3;24974:19;;24967:35;25033:3;25018:19;;25011:36;25078:3;25063:19;;25056:36;25123:3;25108:19;;25101:36;25181:15;25174:23;25168:3;25153:19;;25146:52;24571:3;24556:19;24588:39:0;24538:666:1;1822:87:0;;;;;;;;;;-1:-1:-1;1868:7:0;1895:6;;;1822:87;;38020:730;;;;;;;;;;-1:-1:-1;38020:730:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;39141:553::-;;;;;;;;;;-1:-1:-1;39141:553:0;;;;;:::i;:::-;;:::i;28490:895::-;;;;;;:::i;:::-;;:::i;37297:198::-;;;;;;;;;;-1:-1:-1;37297:198:0;;;;;:::i;:::-;;:::i;35681:249::-;;;;;;;;;;-1:-1:-1;35681:249:0;;;;;:::i;:::-;;:::i;24092:26::-;;;;;;;;;;;;;;;;36506:227;;;;;;;;;;-1:-1:-1;36506:227:0;;;;;:::i;:::-;;:::i;32775:558::-;;;;;;;;;;;;;:::i;24634:47::-;;;;;;;;;;-1:-1:-1;24634:47:0;;;;;:::i;:::-;;:::i;23821:28::-;;;;;;;;;;;;;;;;24323:34;;;;;;;;;;;;;;;;24457:47;;;;;;;;;;;;24500:4;24457:47;;2722:192;;;;;;;;;;-1:-1:-1;2722:192:0;;;;;:::i;:::-;;:::i;23652:36::-;;;;;;;;;;-1:-1:-1;23652:36:0;;;;;;;;;;;24011:27;;;;;;;;;;;;;;;;23697;;;;;;;;;;-1:-1:-1;23697:27:0;;;;;;;;34066:269;6976:1;7572:7;;:19;;7564:63;;;;;;;21719:2:1;7564:63:0;;;21701:21:1;21758:2;21738:18;;;21731:30;21797:33;21777:18;;;21770:61;21848:18;;7564:63:0;;;;;;;;;6976:1;7705:7;:18;26641:12:::1;::::0;::::1;;26627:10;:26;26619:48;;;::::0;::::1;::::0;;23185:2:1;26619:48:0::1;::::0;::::1;23167:21:1::0;23224:1;23204:18;;;23197:29;23262:11;23242:18;;;23235:39;23291:18;;26619:48:0::1;23157:158:1::0;26619:48:0::1;34166:14:::2;::::0;;34134:29:::2;34191:18:::0;;;34237:12:::2;::::0;34220:53:::2;::::0;34237:12:::2;;34166:14:::0;34220:16:::2;:53::i;:::-;34291:36;::::0;7180:25:1;;;34291:36:0::2;::::0;7168:2:1;7153:18;34291:36:0::2;;;;;;;-1:-1:-1::0;6932:1:0;7884:22;;34066:269::o;34526:196::-;4159:4;4183:7;;;;;;4707:41;;;;;;;7865:2:1;4707:41:0;;;7847:21:1;7904:2;7884:18;;;7877:30;7943:22;7923:18;;;7916:50;7983:18;;4707:41:0;7837:170:1;4707:41:0;26759:12:::1;::::0;::::1;;26745:10;:26;::::0;:59:::1;;-1:-1:-1::0;26789:15:0::1;::::0;::::1;;26775:10;:29;26745:59;26737:90;;;::::0;::::1;::::0;;13356:2:1;26737:90:0::1;::::0;::::1;13338:21:1::0;13395:2;13375:18;;;13368:30;13434:20;13414:18;;;13407:48;13472:18;;26737:90:0::1;13328:168:1::0;26737:90:0::1;34596:16:::2;:24:::0;;34631:23;;;;34665:10:::2;:8;:10::i;:::-;34701:12;::::0;34693:21:::2;::::0;::::2;::::0;;;::::2;34526:196::o:0;33438:263::-;4159:4;4183:7;;;;;;4437:9;4429:38;;;;;;;16842:2:1;4429:38:0;;;16824:21:1;16881:2;16861:18;;;16854:30;16920:18;16900;;;16893:46;16956:18;;4429:38:0;16814:166:1;4429:38:0;26912:15:::1;::::0;::::1;;26898:10;:29;26890:54;;;::::0;::::1;::::0;;22844:2:1;26890:54:0::1;::::0;::::1;22826:21:1::0;22883:2;22863:18;;;22856:30;22922:14;22902:18;;;22895:42;22954:18;;26890:54:0::1;22816:162:1::0;26890:54:0::1;33523:16:::2;::::0;;;::::2;;;33522:17;33514:65;;;::::0;::::2;::::0;;19011:2:1;33514:65:0::2;::::0;::::2;18993:21:1::0;19050:2;19030:18;;;19023:30;19089:34;19069:18;;;19062:62;19160:5;19140:18;;;19133:33;19183:19;;33514:65:0::2;18983:225:1::0;33514:65:0::2;33607:12;::::0;:16:::2;::::0;33622:1:::2;33607:16;:::i;:::-;33592:12;:31:::0;;;33634:25:::2;::::0;:11:::2;:25::i;:::-;33670:16;:23:::0;;;::::2;::::0;::::2;::::0;;33438:263::o;29473:895::-;4159:4;4183:7;;;;;;4437:9;4429:38;;;;;;;16842:2:1;4429:38:0;;;16824:21:1;16881:2;16861:18;;;16854:30;16920:18;16900;;;16893:46;16956:18;;4429:38:0;16814:166:1;4429:38:0;6976:1:::1;7572:7;;:19;;7564:63;;;::::0;::::1;::::0;;21719:2:1;7564:63:0::1;::::0;::::1;21701:21:1::0;21758:2;21738:18;;;21731:30;21797:33;21777:18;;;21770:61;21848:18;;7564:63:0::1;21691:181:1::0;7564:63:0::1;6976:1;7705:7;:18:::0;27027:10:::2;46254:20:::0;46302:8;27006:57:::2;;;::::0;::::2;::::0;;11406:2:1;27006:57:0::2;::::0;::::2;11388:21:1::0;11445:2;11425:18;;;11418:30;11484:22;11464:18;;;11457:50;11524:18;;27006:57:0::2;11378:170:1::0;27006:57:0::2;27082:10;27096:9;27082:23;27074:62;;;::::0;::::2;::::0;;17538:2:1;27074:62:0::2;::::0;::::2;17520:21:1::0;17577:2;17557:18;;;17550:30;17616:28;17596:18;;;17589:56;17662:18;;27074:62:0::2;17510:176:1::0;27074:62:0::2;29589:12:::3;;29580:5;:21;29572:55;;;::::0;::::3;::::0;;22079:2:1;29572:55:0::3;::::0;::::3;22061:21:1::0;22118:2;22098:18;;;22091:30;22157:23;22137:18;;;22130:51;22198:18;;29572:55:0::3;22051:171:1::0;29572:55:0::3;29646:16;29656:5;29646:9;:16::i;:::-;29638:47;;;::::0;::::3;::::0;;18254:2:1;29638:47:0::3;::::0;::::3;18236:21:1::0;18293:2;18273:18;;;18266:30;18332:20;18312:18;;;18305:48;18370:18;;29638:47:0::3;18226:168:1::0;29638:47:0::3;29717:12;;29704:9;:25;;29696:82;;;::::0;::::3;::::0;;15268:2:1;29696:82:0::3;::::0;::::3;15250:21:1::0;15307:2;15287:18;;;15280:30;15346:34;15326:18;;;15319:62;15417:14;15397:18;;;15390:42;15449:19;;29696:82:0::3;15240:234:1::0;29696:82:0::3;29797:13;::::0;;;:6:::3;:13;::::0;;;;;;;29811:10:::3;29797:25:::0;;;;;;;:32:::3;;::::0;:37;29789:77:::3;;;::::0;::::3;::::0;;20952:2:1;29789:77:0::3;::::0;::::3;20934:21:1::0;20991:2;20971:18;;;20964:30;21030:29;21010:18;;;21003:57;21077:18;;29789:77:0::3;20924:177:1::0;29789:77:0::3;29909:14;29968:13:::0;;;:6:::3;:13;::::0;;;;30012:17:::3;::::0;::::3;::::0;29926:9:::3;::::0;29968:13;30012:26:::3;::::0;29926:9;;30012:26:::3;:::i;:::-;29992:17;::::0;::::3;:46:::0;30068:16:::3;::::0;::::3;::::0;:25:::3;::::0;30087:6;;30068:25:::3;:::i;:::-;30049:16;::::0;::::3;:44:::0;30135:23:::3;30161:13:::0;;;:6:::3;:13;::::0;;;;;;;30175:10:::3;30161:25:::0;;;;;;;;;30197:32;;;::::3;::::0;;;30240:14;;::::3;:23:::0;;;30274:10:::3;:22:::0;;;;;:34;;;;::::3;::::0;;;;;;;;;;::::3;::::0;;;30326;;7180:25:1;;;30161:13:0;;30326:34:::3;::::0;7153:18:1;30326:34:0::3;;;;;;;;-1:-1:-1::0;;6932:1:0::1;7884:22:::0;;-1:-1:-1;;29473:895:0:o;30485:1297::-;6976:1;7572:7;;:19;;7564:63;;;;;;;21719:2:1;7564:63:0;;;21701:21:1;21758:2;21738:18;;;21731:30;21797:33;21777:18;;;21770:61;21848:18;;7564:63:0;21691:181:1;7564:63:0;6976:1;7705:7;:18;27027:10:::1;46254:20:::0;46302:8;27006:57:::1;;;::::0;::::1;::::0;;11406:2:1;27006:57:0::1;::::0;::::1;11388:21:1::0;11445:2;11425:18;;;11418:30;11484:22;11464:18;;;11457:50;11524:18;;27006:57:0::1;11378:170:1::0;27006:57:0::1;27082:10;27096:9;27082:23;27074:62;;;::::0;::::1;::::0;;17538:2:1;27074:62:0::1;::::0;::::1;17520:21:1::0;17577:2;17557:18;;;17550:30;17616:28;17596:18;;;17589:56;17662:18;;27074:62:0::1;17510:176:1::0;27074:62:0::1;30572:14:::2;::::0;30621:1054:::2;30641:17:::0;;::::2;30621:1054;;;30688:6;:17;30695:6;;30702:1;30695:9;;;;;;;;;;;;;;;;;;;;;30688:17;;;;;;;;;;;:32;;;30724:1;30688:37;;30680:71;;;::::0;::::2;::::0;;20602:2:1;30680:71:0::2;::::0;::::2;20584:21:1::0;20641:2;20621:18;;;20614:30;20680:23;20660:18;;;20653:51;20721:18;;30680:71:0::2;20574:171:1::0;30680:71:0::2;30792:6;:17;30799:6;;30806:1;30799:9;;;;;;;;;;;;;;;;;;;;;30792:17;;;;;;;;;;;:32;;;30774:15;:50;30766:82;;;::::0;::::2;::::0;;15681:2:1;30766:82:0::2;::::0;::::2;15663:21:1::0;15720:2;15700:18;;;15693:30;15759:21;15739:18;;;15732:49;15798:18;;30766:82:0::2;15653:169:1::0;30766:82:0::2;30865:19;30952:6;:17;30959:6;;30966:1;30959:9;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;;30952:17:::0;;-1:-1:-1;30952:17:0;::::2;::::0;;;;;;-1:-1:-1;30952:17:0;:30:::2;;::::0;::::2;;30948:556;;;31011:32;31021:6;;31028:1;31021:9;;;;;;;;;;;;;;;;;;;;;31032:10;31011:9;:32::i;:::-;31003:67;;;::::0;::::2;::::0;;12173:2:1;31003:67:0::2;::::0;::::2;12155:21:1::0;12212:2;12192:18;;;12185:30;12251:24;12231:18;;;12224:52;12293:18;;31003:67:0::2;12145:172:1::0;31003:67:0::2;31089:18;31110:6;:17;31117:6;;31124:1;31117:9;;;;;;;;;;;;;;;;;;;;;31110:17;;;;;;;;;;;31089:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;31222:5;:25;;;31200:5;:18;;;31161:6;:17;31168:6;;31175:1;31168:9;;;;;;;;;;;;;;;;;;;;;31161:17;;;;;;;;;;;:29;31179:10;31161:29;;;;;;;;;;;;;;;:36;;;:57;;;;:::i;:::-;31160:87;;;;:::i;:::-;31146:101;;30948:556;;;;31358:33;31369:6;;31376:1;31369:9;;;;;;;;;;;;;;;;;;;;;31380:10;31358;:33::i;:::-;31350:69;;;::::0;::::2;::::0;;8214:2:1;31350:69:0::2;::::0;::::2;8196:21:1::0;8253:2;8233:18;;;8226:30;8292:25;8272:18;;;8265:53;8335:18;;31350:69:0::2;8186:173:1::0;31350:69:0::2;31452:6;:17;31459:6;;31466:1;31459:9;;;;;;;;;;;;;;;;;;;;;31452:17;;;;;;;;;;;:29;31470:10;31452:29;;;;;;;;;;;;;;;:36;;;31438:50;;30948:556;31560:4;31520:6;:17;31527:6;;31534:1;31527:9;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;;31520:17:::0;;-1:-1:-1;31520:17:0;;::::2;::::0;;;;;;;;-1:-1:-1;31520:17:0;;;31538:10:::2;31520:29:::0;;;;;;;:37:::2;;:44:::0;;;::::2;::::0;::::2;;::::0;;;::::2;::::0;;31579:21:::2;31589:11:::0;31579:21;::::2;:::i;:::-;;;31640:6;;31647:1;31640:9;;;;;;;;;;;;;;;;;;;;;31628:10;31622:41;;;31651:11;31622:41;;;;7180:25:1::0;;7168:2;7153:18;;7135:76;31622:41:0::2;;;;;;;;-1:-1:-1::0;30660:3:0;::::2;::::0;::::2;:::i;:::-;;;;30621:1054;;;-1:-1:-1::0;31691:10:0;;31687:88:::2;;31718:45;31743:10;31756:6;31718:16;:45::i;:::-;-1:-1:-1::0;;6932:1:0;7884:22;;-1:-1:-1;30485:1297:0:o;35338:249::-;4159:4;4183:7;;;;;;4707:41;;;;;;;7865:2:1;4707:41:0;;;7847:21:1;7904:2;7884:18;;;7877:30;7943:22;7923:18;;;7916:50;7983:18;;4707:41:0;7837:170:1;4707:41:0;26641:12:::1;::::0;::::1;;26627:10;:26;26619:48;;;::::0;::::1;::::0;;23185:2:1;26619:48:0::1;::::0;::::1;23167:21:1::0;23224:1;23204:18;;;23197:29;23262:11;23242:18;;;23235:39;23291:18;;26619:48:0::1;23157:158:1::0;26619:48:0::1;35435:18:::0;35427:52:::2;;;::::0;::::2;::::0;;19415:2:1;35427:52:0::2;::::0;::::2;19397:21:1::0;19454:2;19434:18;;;19427:30;19493:23;19473:18;;;19466:51;19534:18;;35427:52:0::2;19387:171:1::0;35427:52:0::2;35490:12;:28:::0;;;35552:12:::2;::::0;35536:43:::2;::::0;7180:25:1;;;35536:43:0::2;::::0;7168:2:1;7153:18;35536:43:0::2;;;;;;;;35338:249:::0;:::o;37586:228::-;1868:7;1895:6;2042:23;1895:6;751:10;2042:23;2034:68;;;;;;;17893:2:1;2034:68:0;;;17875:21:1;;;17912:18;;;17905:30;17971:34;17951:18;;;17944:62;18023:18;;2034:68:0;17865:182:1;2034:68:0;37665:27:::1;::::0;::::1;37657:62;;;::::0;::::1;::::0;;17187:2:1;37657:62:0::1;::::0;::::1;17169:21:1::0;17226:2;17206:18;;;17199:30;17265:24;17245:18;;;17238:52;17307:18;;37657:62:0::1;17159:172:1::0;37657:62:0::1;37730:12;:28:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;37776:30:::1;::::0;4326:74:1;;;37776:30:0::1;::::0;4314:2:1;4299:18;37776:30:0::1;;;;;;;;37586:228:::0;:::o;2473:94::-;1868:7;1895:6;2042:23;1895:6;751:10;2042:23;2034:68;;;;;;;17893:2:1;2034:68:0;;;17875:21:1;;;17912:18;;;17905:30;17971:34;17951:18;;;17944:62;18023:18;;2034:68:0;17865:182:1;2034:68:0;2538:21:::1;2556:1;2538:9;:21::i;:::-;2473:94::o:0;36823:257::-;4159:4;4183:7;;;;;;4707:41;;;;;;;7865:2:1;4707:41:0;;;7847:21:1;7904:2;7884:18;;;7877:30;7943:22;7923:18;;;7916:50;7983:18;;4707:41:0;7837:170:1;4707:41:0;26641:12:::1;::::0;::::1;;26627:10;:26;26619:48;;;::::0;::::1;::::0;;23185:2:1;26619:48:0::1;::::0;::::1;23167:21:1::0;23224:1;23204:18;;;23197:29;23262:11;23242:18;;;23235:39;23291:18;;26619:48:0::1;23157:158:1::0;26619:48:0::1;24500:4:::2;36918:12;:32;;36910:66;;;::::0;::::2;::::0;;8566:2:1;36910:66:0::2;::::0;::::2;8548:21:1::0;8605:2;8585:18;;;8578:30;8644:23;8624:18;;;8617:51;8685:18;;36910:66:0::2;8538:171:1::0;36910:66:0::2;36987:11;:26:::0;;;37046:12:::2;::::0;37031:41:::2;::::0;7180:25:1;;;37031:41:0::2;::::0;7168:2:1;7153:18;37031:41:0::2;7135:76:1::0;36022:383:0;4159:4;4183:7;;;;;;4707:41;;;;;;;7865:2:1;4707:41:0;;;7847:21:1;7904:2;7884:18;;;7877:30;7943:22;7923:18;;;7916:50;7983:18;;4707:41:0;7837:170:1;4707:41:0;26641:12:::1;::::0;::::1;;26627:10;:26;26619:48;;;::::0;::::1;::::0;;23185:2:1;26619:48:0::1;::::0;::::1;23167:21:1::0;23224:1;23204:18;;;23197:29;23262:11;23242:18;;;23235:39;23291:18;;26619:48:0::1;23157:158:1::0;26619:48:0::1;36107:21:::2;::::0;::::2;36099:56;;;::::0;::::2;::::0;;17187:2:1;36099:56:0::2;::::0;::::2;17169:21:1::0;17226:2;17206:18;;;17199:30;17265:24;17245:18;;;17238:52;17307:18;;36099:56:0::2;17159:172:1::0;36099:56:0::2;36188:1;36166:19;:23:::0;36200:6:::2;:39:::0;;;::::2;;::::0;::::2;::::0;;::::2;::::0;;;36337:24:::2;::::0;;;;;;;:22:::2;::::0;:24:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;;36200:39;36337:24;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;36379:18:0::2;::::0;4356:42:1;4344:55;;4326:74;;36379:18:0::2;::::0;-1:-1:-1;4314:2:1;4299:18;;-1:-1:-1;36379:18:0::2;::::0;-1:-1:-1;4281:125:1;31922:758:0;4159:4;4183:7;;;;;;4437:9;4429:38;;;;;;;16842:2:1;4429:38:0;;;16824:21:1;16881:2;16861:18;;;16854:30;16920:18;16900;;;16893:46;16956:18;;4429:38:0;16814:166:1;4429:38:0;26912:15:::1;::::0;::::1;;26898:10;:29;26890:54;;;::::0;::::1;::::0;;22844:2:1;26890:54:0::1;::::0;::::1;22826:21:1::0;22883:2;22863:18;;;22856:30;22922:14;22902:18;;;22895:42;22954:18;;26890:54:0::1;22816:162:1::0;26890:54:0::1;32015:16:::2;::::0;;;::::2;;;:35:::0;::::2;;;-1:-1:-1::0;32035:15:0::2;::::0;;;::::2;;;32015:35;31993:155;;;::::0;::::2;::::0;;19765:2:1;31993:155:0::2;::::0;::::2;19747:21:1::0;19804:2;19784:18;;;19777:30;19843:34;19823:18;;;19816:62;19914:34;19894:18;;;19887:62;19986:8;19965:19;;;19958:37;20012:19;;31993:155:0::2;19737:300:1::0;31993:155:0::2;32162:21;32185:19:::0;32208:21:::2;:19;:21::i;:::-;32161:68;;;;32272:14;32264:23;;32242:19;:45;;;;32356:58;32371:12;;32385:14;32356:58;;32401:12;32356:14;:58::i;:::-;32425:61;32454:1;32439:12;;:16;;;;:::i;:::-;32457:14;32425:61;;32473:12;32425:13;:61::i;:::-;32497:35;32530:1;32515:12;;:16;;;;:::i;:::-;32497:17;:35::i;:::-;32616:12;::::0;:16:::2;::::0;32631:1:::2;32616:16;:::i;:::-;32601:12;:31:::0;;;32643:29:::2;::::0;:15:::2;:29::i;:::-;26955:1;;31922:758::o:0;39858:358::-;39928:4;39970:13;;;:6;:13;;;;;;;;:19;;;;;;;;;;;39945:44;;;;;;;;;;39928:4;;39945:44;39970:19;39945:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40021:13:0;;;:6;:13;;;;;40000:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39945:44;40000:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39945:44;;-1:-1:-1;40000:34:0;;40061:48;;;40094:7;:15;;;40093:16;40061:48;:115;;;;;40163:13;;40140:5;:20;;;:36;;;;:::i;:::-;40122:15;:54;40061:115;:147;;;;-1:-1:-1;40189:14:0;;;;:19;;40061:147;40045:163;;;;39858:358;;;;;:::o;33839:124::-;4159:4;4183:7;;;;;;4437:9;4429:38;;;;;;;16842:2:1;4429:38:0;;;16824:21:1;16881:2;16861:18;;;16854:30;16920:18;16900;;;16893:46;16956:18;;4429:38:0;16814:166:1;4429:38:0;26759:12:::1;::::0;::::1;;26745:10;:26;::::0;:59:::1;;-1:-1:-1::0;26789:15:0::1;::::0;::::1;;26775:10;:29;26745:59;26737:90;;;::::0;::::1;::::0;;13356:2:1;26737:90:0::1;::::0;::::1;13338:21:1::0;13395:2;13375:18;;;13368:30;13434:20;13414:18;;;13407:48;13472:18;;26737:90:0::1;13328:168:1::0;26737:90:0::1;33910:8:::2;:6;:8::i;:::-;33942:12;::::0;33936:19:::2;::::0;::::2;::::0;;;::::2;33839:124::o:0;34832:416::-;4159:4;4183:7;;;;;;4707:41;;;;;;;7865:2:1;4707:41:0;;;7847:21:1;7904:2;7884:18;;;7877:30;7943:22;7923:18;;;7916:50;7983:18;;4707:41:0;7837:170:1;4707:41:0;26641:12:::1;::::0;::::1;;26627:10;:26;26619:48;;;::::0;::::1;::::0;;23185:2:1;26619:48:0::1;::::0;::::1;23167:21:1::0;23224:1;23204:18;;;23197:29;23262:11;23242:18;;;23235:39;23291:18;;26619:48:0::1;23157:158:1::0;26619:48:0::1;35005:16:::2;34988:14;:33;34980:95;;;::::0;::::2;::::0;;11755:2:1;34980:95:0::2;::::0;::::2;11737:21:1::0;11794:2;11774:18;;;11767:30;11833:34;11813:18;;;11806:62;11904:19;11884:18;;;11877:47;11941:19;;34980:95:0::2;11727:239:1::0;34980:95:0::2;35086:13;:30:::0;;;35127:15:::2;:34:::0;;;35179:61:::2;::::0;;23676:25:1;;;23732:2;23717:18;;23710:34;;;35179:61:0::2;::::0;23649:18:1;35179:61:0::2;;;;;;;34832:416:::0;;:::o;38020:730::-;38301:16;;;38223:7;38301:16;;;:10;:16;;;;;:23;38169:16;;;;38271:4;;38301:32;;38327:6;;38301:32;:::i;:::-;38292:6;:41;38288:115;;;38359:16;;;;;;;:10;:16;;;;;:23;:32;;38385:6;;38359:32;:::i;:::-;38350:41;;38288:115;38415:23;38455:6;38441:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38441:21:0;;38415:47;;38473:24;38514:6;38500:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;38500:21:0;;;;;;;;;;;;;;;38473:48;;38539:9;38534:155;38558:6;38554:1;:10;38534:155;;;38598:16;;;;;;;:10;:16;;;;;38615:10;38624:1;38615:6;:10;:::i;:::-;38598:28;;;;;;;;;;;;;;;;;;;;;;;;38586:6;38593:1;38586:9;;;;;;;;;;;;;;;;;;;;;:40;;;;;38654:6;:17;38661:6;38668:1;38661:9;;;;;;;;;;;;;;;;;;;;;;;;;;;38654:17;;;;;;;;;;;;;-1:-1:-1;38654:17:0;;;:23;;;;;;;;;;;;38641:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;;:7;;38649:1;;38641:10;;;;;;;;;;;;;;;;;;;:36;;;;38566:3;;;;;:::i;:::-;;;;38534:155;;;-1:-1:-1;38709:6:0;38717:7;38726:15;38735:6;38726;:15;:::i;:::-;38701:41;;;;;;;;;38020:730;;;;;;;:::o;39141:553::-;39210:4;39252:13;;;:6;:13;;;;;;;;:19;;;;;;;;;;;39227:44;;;;;;;;;;39210:4;;39227:44;39252:19;39227:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39303:13:0;;;:6;:13;;;;;39282:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39227:44;39282:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39227:44;;-1:-1:-1;39331:35:0;39327:80;;;39390:5;39383:12;;;;;;39327:80;39433:5;:18;;;:50;;;;-1:-1:-1;39464:14:0;;;;:19;;39433:50;:79;;;;;39497:7;:15;;;39496:16;39433:79;:253;;;;;39546:5;:15;;;39527:5;:16;;;:34;:71;;;;-1:-1:-1;39585:13:0;39565:16;;:33;;;;;;;;;;;;;;;;;39527:71;39526:159;;;;39632:5;:15;;;39613:5;:16;;;:34;:71;;;;-1:-1:-1;39671:13:0;39651:16;;:33;;;;;;;;;;;;;;;;;;39141:553;-1:-1:-1;;;;;39141:553:0:o;28490:895::-;4159:4;4183:7;;;;;;4437:9;4429:38;;;;;;;16842:2:1;4429:38:0;;;16824:21:1;16881:2;16861:18;;;16854:30;16920:18;16900;;;16893:46;16956:18;;4429:38:0;16814:166:1;4429:38:0;6976:1:::1;7572:7;;:19;;7564:63;;;::::0;::::1;::::0;;21719:2:1;7564:63:0::1;::::0;::::1;21701:21:1::0;21758:2;21738:18;;;21731:30;21797:33;21777:18;;;21770:61;21848:18;;7564:63:0::1;21691:181:1::0;7564:63:0::1;6976:1;7705:7;:18:::0;27027:10:::2;46254:20:::0;46302:8;27006:57:::2;;;::::0;::::2;::::0;;11406:2:1;27006:57:0::2;::::0;::::2;11388:21:1::0;11445:2;11425:18;;;11418:30;11484:22;11464:18;;;11457:50;11524:18;;27006:57:0::2;11378:170:1::0;27006:57:0::2;27082:10;27096:9;27082:23;27074:62;;;::::0;::::2;::::0;;17538:2:1;27074:62:0::2;::::0;::::2;17520:21:1::0;17577:2;17557:18;;;17550:30;17616:28;17596:18;;;17589:56;17662:18;;27074:62:0::2;17510:176:1::0;27074:62:0::2;28606:12:::3;;28597:5;:21;28589:55;;;::::0;::::3;::::0;;22079:2:1;28589:55:0::3;::::0;::::3;22061:21:1::0;22118:2;22098:18;;;22091:30;22157:23;22137:18;;;22130:51;22198:18;;28589:55:0::3;22051:171:1::0;28589:55:0::3;28663:16;28673:5;28663:9;:16::i;:::-;28655:47;;;::::0;::::3;::::0;;18254:2:1;28655:47:0::3;::::0;::::3;18236:21:1::0;18293:2;18273:18;;;18266:30;18332:20;18312:18;;;18305:48;18370:18;;28655:47:0::3;18226:168:1::0;28655:47:0::3;28734:12;;28721:9;:25;;28713:82;;;::::0;::::3;::::0;;15268:2:1;28713:82:0::3;::::0;::::3;15250:21:1::0;15307:2;15287:18;;;15280:30;15346:34;15326:18;;;15319:62;15417:14;15397:18;;;15390:42;15449:19;;28713:82:0::3;15240:234:1::0;28713:82:0::3;28814:13;::::0;;;:6:::3;:13;::::0;;;;;;;28828:10:::3;28814:25:::0;;;;;;;:32:::3;;::::0;:37;28806:77:::3;;;::::0;::::3;::::0;;20952:2:1;28806:77:0::3;::::0;::::3;20934:21:1::0;20991:2;20971:18;;;20964:30;21030:29;21010:18;;;21003:57;21077:18;;28806:77:0::3;20924:177:1::0;28806:77:0::3;28926:14;28985:13:::0;;;:6:::3;:13;::::0;;;;29029:17:::3;::::0;::::3;::::0;28943:9:::3;::::0;28985:13;29029:26:::3;::::0;28943:9;;29029:26:::3;:::i;:::-;29009:17;::::0;::::3;:46:::0;29085:16:::3;::::0;::::3;::::0;:25:::3;::::0;29104:6;;29085:25:::3;:::i;:::-;29066:16;::::0;::::3;:44:::0;29152:23:::3;29178:13:::0;;;:6:::3;:13;::::0;;;;;;;29192:10:::3;29178:25:::0;;;;;;;;;29214:32;;;::::3;29233:13;29214:32:::0;;::::3;::::0;;29257:14;;::::3;:23:::0;;;29291:10:::3;:22:::0;;;;;:34;;;;::::3;::::0;;;;;;;;;;::::3;::::0;;;29343;;7180:25:1;;;29178:13:0;;29343:34:::3;::::0;7153:18:1;29343:34:0::3;7135:76:1::0;37297:198:0;1868:7;1895:6;2042:23;1895:6;751:10;2042:23;2034:68;;;;;;;17893:2:1;2034:68:0;;;17875:21:1;;;17912:18;;;17905:30;17971:34;17951:18;;;17944:62;18023:18;;2034:68:0;17865:182:1;2034:68:0;37382:57:::1;:27;::::0;::::1;37418:10;37431:7:::0;37382:27:::1;:57::i;:::-;37471:6;37457:30;;;37479:7;37457:30;;;;7180:25:1::0;;7168:2;7153:18;;7135:76;37457:30:0::1;;;;;;;;37297:198:::0;;:::o;35681:249::-;26641:12;;;;26627:10;:26;26619:48;;;;;;;23185:2:1;26619:48:0;;;23167:21:1;23224:1;23204:18;;;23197:29;23262:11;23242:18;;;23235:39;23291:18;;26619:48:0;23157:158:1;26619:48:0;35766:30:::1;::::0;::::1;35758:65;;;::::0;::::1;::::0;;17187:2:1;35758:65:0::1;::::0;::::1;17169:21:1::0;17226:2;17206:18;;;17199:30;17265:24;17245:18;;;17238:52;17307:18;;35758:65:0::1;17159:172:1::0;35758:65:0::1;35834:15;:34:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;35886:36:::1;::::0;4326:74:1;;;35886:36:0::1;::::0;4314:2:1;4299:18;35886:36:0::1;4281:125:1::0;36506:227:0;4159:4;4183:7;;;;;;4707:41;;;;;;;7865:2:1;4707:41:0;;;7847:21:1;7904:2;7884:18;;;7877:30;7943:22;7923:18;;;7916:50;7983:18;;4707:41:0;7837:170:1;4707:41:0;26641:12:::1;::::0;::::1;;26627:10;:26;26619:48;;;::::0;::::1;::::0;;23185:2:1;26619:48:0::1;::::0;::::1;23167:21:1::0;23224:1;23204:18;;;23197:29;23262:11;23242:18;;;23235:39;23291:18;;26619:48:0::1;23157:158:1::0;26619:48:0::1;36613:21:::2;:46:::0;;;36677:48:::2;::::0;7180:25:1;;;36677:48:0::2;::::0;7168:2:1;7153:18;36677:48:0::2;7135:76:1::0;32775:558:0;4159:4;4183:7;;;;;;4437:9;4429:38;;;;;;;16842:2:1;4429:38:0;;;16824:21:1;16881:2;16861:18;;;16854:30;16920:18;16900;;;16893:46;16956:18;;4429:38:0;16814:166:1;4429:38:0;26912:15:::1;::::0;::::1;;26898:10;:29;26890:54;;;::::0;::::1;::::0;;22844:2:1;26890:54:0::1;::::0;::::1;22826:21:1::0;22883:2;22863:18;;;22856:30;22922:14;22902:18;;;22895:42;22954:18;;26890:54:0::1;22816:162:1::0;26890:54:0::1;32858:16:::2;::::0;;;::::2;;;32850:78;;;::::0;::::2;::::0;;9328:2:1;32850:78:0::2;::::0;::::2;9310:21:1::0;9367:2;9347:18;;;9340:30;9406:34;9386:18;;;9379:62;9477:19;9457:18;;;9450:47;9514:19;;32850:78:0::2;9300:239:1::0;32850:78:0::2;32948:15;::::0;;;::::2;;;32947:16;32939:63;;;::::0;::::2;::::0;;13703:2:1;32939:63:0::2;::::0;::::2;13685:21:1::0;13742:2;13722:18;;;13715:30;13781:34;13761:18;;;13754:62;13852:4;13832:18;;;13825:32;13874:19;;32939:63:0::2;13675:224:1::0;32939:63:0::2;33016:21;33039:19:::0;33062:21:::2;:19;:21::i;:::-;33015:68;;;;33126:14;33118:23;;33096:19;:45;;;;33154:58;33169:12;;33183:14;33154:58;;33199:12;33154:14;:58::i;:::-;33240:12;::::0;:16:::2;::::0;33255:1:::2;33240:16;:::i;:::-;33225:12;:31:::0;;;33267:25:::2;::::0;:11:::2;:25::i;:::-;-1:-1:-1::0;;33303:15:0::2;:22:::0;;;::::2;::::0;::::2;::::0;;32775:558::o;24634:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2722:192::-;1868:7;1895:6;2042:23;1895:6;751:10;2042:23;2034:68;;;;;;;17893:2:1;2034:68:0;;;17875:21:1;;;17912:18;;;17905:30;17971:34;17951:18;;;17944:62;18023:18;;2034:68:0;17865:182:1;2034:68:0;2811:22:::1;::::0;::::1;2803:73;;;::::0;::::1;::::0;;9746:2:1;2803:73:0::1;::::0;::::1;9728:21:1::0;9785:2;9765:18;;;9758:30;9824:34;9804:18;;;9797:62;9895:8;9875:18;;;9868:36;9921:19;;2803:73:0::1;9718:228:1::0;2803:73:0::1;2887:19;2897:8;2887:9;:19::i;:::-;2722:192:::0;:::o;44092:191::-;44166:12;44184:2;:7;;44199:5;44184:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44165:44;;;44228:7;44220:55;;;;;;;16438:2:1;44220:55:0;;;16420:21:1;16477:2;16457:18;;;16450:30;16516:34;16496:18;;;16489:62;16587:5;16567:18;;;16560:33;16610:19;;44220:55:0;16410:225:1;44220:55:0;44092:191;;;:::o;5171:120::-;4159:4;4183:7;;;;;;4707:41;;;;;;;7865:2:1;4707:41:0;;;7847:21:1;7904:2;7884:18;;;7877:30;7943:22;7923:18;;;7916:50;7983:18;;4707:41:0;7837:170:1;4707:41:0;5240:5:::1;5230:15:::0;;;::::1;::::0;;5261:22:::1;751:10:::0;5270:12:::1;5261:22;::::0;4356:42:1;4344:55;;;4326:74;;4314:2;4299:18;5261:22:0::1;;;;;;;5171:120::o:0;44401:384::-;44457:19;44479:13;;;:6;:13;;;;;44526:15;44503:20;;;:38;;;44592:15;;44574:33;;;:::i;:::-;44552:19;;;;:55;;;;44664:15;;44660:19;;;:::i;:::-;44641:39;;:15;:39;:::i;:::-;44618:20;;;:62;44691:19;;;:11;44721:17;;;:21;;;44760:17;;44705:5;;44760:17;;;44401:384;;:::o;44994:293::-;45051:4;45084:13;;;:6;:13;;;;;:28;;;:33;;;;:78;;-1:-1:-1;45130:13:0;;;;:6;:13;;;;;:27;;;:32;;45084:78;:137;;;;-1:-1:-1;45193:13:0;;;;:6;:13;;;;;:28;;;45175:15;:46;45084:137;:195;;;;-1:-1:-1;;45252:13:0;;;;:6;:13;;;;;:27;;;45234:15;:45;;44994:293::o;2922:173::-;2978:16;2997:6;;;3014:17;;;;;;;;;;3047:40;;2997:6;;;;;;;3047:40;;2978:16;3047:40;2922:173;;:::o;45449:549::-;45503:6;45511;45530:29;45580:21;;45562:15;:39;;;;:::i;:::-;45530:71;;45613:14;45629:12;45645:17;45668:6;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45612:80;;;;;;;;45724:21;45711:9;:34;;45703:93;;;;;;;22429:2:1;45703:93:0;;;22411:21:1;22468:2;22448:18;;;22441:30;22507:34;22487:18;;;22480:62;22578:16;22558:18;;;22551:44;22612:19;;45703:93:0;22401:236:1;45703:93:0;45848:19;;45837:7;45829:16;;:38;45807:149;;;;;;;10568:2:1;45807:149:0;;;10550:21:1;10607:2;10587:18;;;10580:30;10646:34;10626:18;;;10619:62;10717:31;10697:18;;;10690:59;10766:19;;45807:149:0;10540:251:1;45807:149:0;-1:-1:-1;45975:7:0;;45984:5;;-1:-1:-1;45449:549:0;-1:-1:-1;;45449:549:0:o;42617:739::-;42749:13;;;;:6;:13;;;;;:28;;;42741:89;;;;;;;8916:2:1;42741:89:0;;;8898:21:1;8955:2;8935:18;;;8928:30;8994:34;8974:18;;;8967:62;9065:13;9045:18;;;9038:41;9096:19;;42741:89:0;8888:233:1;42741:89:0;42868:13;;;;:6;:13;;;;;:27;;;42849:15;:46;;42841:98;;;;;;;12524:2:1;42841:98:0;;;12506:21:1;12563:2;12543:18;;;12536:30;12602:34;12582:18;;;12575:62;12673:9;12653:18;;;12646:37;12700:19;;42841:98:0;12496:229:1;42841:98:0;43021:13;;42991;;;;:6;:13;;;;;:27;;;:43;;43021:13;42991:43;:::i;:::-;42972:15;:62;;42950:152;;;;;;;16029:2:1;42950:152:0;;;16011:21:1;16068:2;16048:18;;;16041:30;16107:34;16087:18;;;16080:62;16178:10;16158:18;;;16151:38;16206:19;;42950:152:0;16001:230:1;42950:152:0;43113:19;43135:13;;;:6;:13;;;;;43200:15;;43182:33;;:15;:33;:::i;:::-;43159:20;;;:56;43226:15;;;:23;;;43260:18;;;:28;;;43306:42;;7180:25:1;;;43260:28:0;;43316:5;;43306:42;;7168:2:1;7153:18;43306:42:0;;;;;;;;42617:739;;;;:::o;41756:707::-;41887:13;;;;:6;:13;;;;;:27;;;41879:86;;;;;;;18601:2:1;41879:86:0;;;18583:21:1;18640:2;18620:18;;;18613:30;18679:34;18659:18;;;18652:62;18750:11;18730:18;;;18723:39;18779:19;;41879:86:0;18573:231:1;41879:86:0;42003:13;;;;:6;:13;;;;;:28;;;41984:15;:47;;41976:99;;;;;;;14513:2:1;41976:99:0;;;14495:21:1;14552:2;14532:18;;;14525:30;14591:34;14571:18;;;14564:62;14662:9;14642:18;;;14635:37;14689:19;;41976:99:0;14485:229:1;41976:99:0;42158:13;;42127;;;;:6;:13;;;;;:28;;;:44;;42158:13;42127:44;:::i;:::-;42108:15;:63;;42086:152;;;;;;;10998:2:1;42086:152:0;;;10980:21:1;11037:2;11017:18;;;11010:30;11076:34;11056:18;;;11049:62;11147:9;11127:18;;;11120:37;11174:19;;42086:152:0;10970:229:1;42086:152:0;42249:19;42271:13;;;:6;:13;;;;;;;42295:16;;;:24;;;42330:19;;;:29;;;42370:18;;;:25;;;;42391:4;42370:25;;;42413:42;;42352:7;;42278:5;;42413:42;;;;42314:5;7180:25:1;;7168:2;7153:18;;7135:76;40314:1289:0;40384:13;;;;:6;:13;;;;;:33;;;:38;:73;;;;-1:-1:-1;40426:13:0;;;;:6;:13;;;;;:26;;;:31;40384:73;40376:104;;;;;;;14921:2:1;40376:104:0;;;14903:21:1;14960:2;14940:18;;;14933:30;14999:20;14979:18;;;14972:48;15037:18;;40376:104:0;14893:168:1;40376:104:0;40491:19;40513:13;;;:6;:13;;;;;40683:15;;;;40664:16;;;;40513:13;;40491:19;;;;;40664:34;40660:674;;;40737:5;:16;;;40715:38;;40818:5;40803:11;;40783:5;:17;;;:31;;;;:::i;:::-;40782:41;;;;:::i;:::-;40768:55;;40873:11;40853:5;:17;;;:31;;;;:::i;:::-;40838:46;;40660:674;;;40956:5;:15;;;40937:5;:16;;;:34;40933:401;;;41010:5;:16;;;40988:38;;41091:5;41076:11;;41056:5;:17;;;:31;;;;:::i;40933:401::-;-1:-1:-1;;;41305:17:0;;;;41244:1;;;40933:401;41344:25;;;:47;;;41402:18;;;:33;;;41476:14;:29;;41494:11;;41476:14;-1:-1:-1;;41476:29:0;;41494:11;;41476:29;:::i;:::-;;;;-1:-1:-1;;41523:72:0;;;23957:25:1;;;24013:2;23998:18;;23991:34;;;24041:18;;;24034:34;;;41541:5:0;;41523:72;;23945:2:1;23930:18;41523:72:0;;;;;;;40314:1289;;;;;:::o;43474:449::-;43542:16;;;;;;;43534:78;;;;;;;9328:2:1;43534:78:0;;;9310:21:1;9367:2;9347:18;;;9340:30;9406:34;9386:18;;;9379:62;9477:19;9457:18;;;9450:47;9514:19;;43534:78:0;9300:239:1;43534:78:0;43631:6;:17;43638:9;43646:1;43638:5;:9;:::i;:::-;43631:17;;;;;;;;;;;:32;;;43667:1;43631:37;;43623:96;;;;;;;10153:2:1;43623:96:0;;;10135:21:1;10192:2;10172:18;;;10165:30;10231:34;10211:18;;;10204:62;10302:16;10282:18;;;10275:44;10336:19;;43623:96:0;10125:236:1;43623:96:0;43771:6;:17;43778:9;43786:1;43778:5;:9;:::i;:::-;43771:17;;;;;;;;;;;:32;;;43752:15;:51;;43730:156;;;;;;;12932:2:1;43730:156:0;;;12914:21:1;12971:2;12951:18;;;12944:30;13010:34;12990:18;;;12983:62;13081:25;13061:18;;;13054:53;13124:19;;43730:156:0;12904:245:1;43730:156:0;43897:18;43909:5;43897:11;:18::i;4912:118::-;4159:4;4183:7;;;;;;4437:9;4429:38;;;;;;;16842:2:1;4429:38:0;;;16824:21:1;16881:2;16861:18;;;16854:30;16920:18;16900;;;16893:46;16956:18;;4429:38:0;16814:166:1;4429:38:0;4972:7:::1;:14:::0;;;::::1;::::0;::::1;::::0;;5002:20:::1;5009:12;751:10:::0;;671:98;19072:211;19216:58;;;4615:42:1;4603:55;;;19216:58:0;;;4585:74:1;4675:18;;;;4668:34;;;19216:58:0;;;;;;;;;;4558:18:1;;;;19216:58:0;;;;;;;;;;19239:23;19216:58;;;22071:69;;;;;;;;;;;;;;;;19189:86;;19209:5;;19216:58;-1:-1:-1;;22071:69:0;;:27;;;19216:58;;22071:27;:69::i;:::-;22155:17;;22045:95;;-1:-1:-1;22155:21:0;22151:179;;22252:10;22241:30;;;;;;;;;;;;:::i;:::-;22233:85;;;;;;;21308:2:1;22233:85:0;;;21290:21:1;21347:2;21327:18;;;21320:30;21386:34;21366:18;;;21359:62;21457:12;21437:18;;;21430:40;21487:19;;22233:85:0;21280:232:1;14209:229:0;14346:12;14378:52;14400:6;14408:4;14414:1;14417:12;14378:21;:52::i;:::-;14371:59;;14209:229;;;;;;:::o;15329:511::-;15499:12;15557:5;15532:21;:30;;15524:81;;;;;;;14106:2:1;15524:81:0;;;14088:21:1;14145:2;14125:18;;;14118:30;14184:34;14164:18;;;14157:62;14255:8;14235:18;;;14228:36;14281:19;;15524:81:0;14078:228:1;15524:81:0;46254:20;;15616:60;;;;;;;20244:2:1;15616:60:0;;;20226:21:1;20283:2;20263:18;;;20256:30;20322:31;20302:18;;;20295:59;20371:18;;15616:60:0;20216:179:1;15616:60:0;15690:12;15704:23;15731:6;:11;;15750:5;15757:4;15731:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15689:73;;;;15780:52;15798:7;15807:10;15819:12;15780:17;:52::i;:::-;15773:59;15329:511;-1:-1:-1;;;;;;;15329:511:0:o;17798:712::-;17948:12;17977:7;17973:530;;;-1:-1:-1;18008:10:0;18001:17;;17973:530;18122:17;;:21;18118:374;;18320:10;18314:17;18381:15;18368:10;18364:2;18360:19;18353:44;18268:148;18463:12;18456:20;;;;;;;;;;;:::i;14:196:1:-;82:20;;142:42;131:54;;121:65;;111:2;;200:1;197;190:12;111:2;63:147;;;:::o;215:179::-;293:13;;346:22;335:34;;325:45;;315:2;;384:1;381;374:12;399:196;458:6;511:2;499:9;490:7;486:23;482:32;479:2;;;532:6;524;517:22;479:2;560:29;579:9;560:29;:::i;600:264::-;668:6;676;729:2;717:9;708:7;704:23;700:32;697:2;;;750:6;742;735:22;697:2;778:29;797:9;778:29;:::i;:::-;768:39;854:2;839:18;;;;826:32;;-1:-1:-1;;;687:177:1:o;869:332::-;946:6;954;962;1015:2;1003:9;994:7;990:23;986:32;983:2;;;1036:6;1028;1021:22;983:2;1064:29;1083:9;1064:29;:::i;:::-;1054:39;1140:2;1125:18;;1112:32;;-1:-1:-1;1191:2:1;1176:18;;;1163:32;;973:228;-1:-1:-1;;;973:228:1:o;1206:665::-;1292:6;1300;1353:2;1341:9;1332:7;1328:23;1324:32;1321:2;;;1374:6;1366;1359:22;1321:2;1419:9;1406:23;1448:18;1489:2;1481:6;1478:14;1475:2;;;1510:6;1502;1495:22;1475:2;1553:6;1542:9;1538:22;1528:32;;1598:7;1591:4;1587:2;1583:13;1579:27;1569:2;;1625:6;1617;1610:22;1569:2;1670;1657:16;1696:2;1688:6;1685:14;1682:2;;;1717:6;1709;1702:22;1682:2;1775:7;1770:2;1760:6;1757:1;1753:14;1749:2;1745:23;1741:32;1738:45;1735:2;;;1801:6;1793;1786:22;1735:2;1837;1829:11;;;;;1859:6;;-1:-1:-1;1311:560:1;;-1:-1:-1;;;;1311:560:1:o;1876:297::-;1943:6;1996:2;1984:9;1975:7;1971:23;1967:32;1964:2;;;2017:6;2009;2002:22;1964:2;2054:9;2048:16;2107:5;2100:13;2093:21;2086:5;2083:32;2073:2;;2134:6;2126;2119:22;2178:190;2237:6;2290:2;2278:9;2269:7;2265:23;2261:32;2258:2;;;2311:6;2303;2296:22;2258:2;-1:-1:-1;2339:23:1;;2248:120;-1:-1:-1;2248:120:1:o;2373:264::-;2441:6;2449;2502:2;2490:9;2481:7;2477:23;2473:32;2470:2;;;2523:6;2515;2508:22;2470:2;2564:9;2551:23;2541:33;;2593:38;2627:2;2616:9;2612:18;2593:38;:::i;:::-;2583:48;;2460:177;;;;;:::o;2642:258::-;2710:6;2718;2771:2;2759:9;2750:7;2746:23;2742:32;2739:2;;;2792:6;2784;2777:22;2739:2;-1:-1:-1;;2820:23:1;;;2890:2;2875:18;;;2862:32;;-1:-1:-1;2729:171:1:o;2905:483::-;3008:6;3016;3024;3032;3040;3093:3;3081:9;3072:7;3068:23;3064:33;3061:2;;;3115:6;3107;3100:22;3061:2;3143:39;3172:9;3143:39;:::i;:::-;3133:49;;3222:2;3211:9;3207:18;3201:25;3191:35;;3266:2;3255:9;3251:18;3245:25;3235:35;;3310:2;3299:9;3295:18;3289:25;3279:35;;3333:49;3377:3;3366:9;3362:19;3333:49;:::i;:::-;3323:59;;3051:337;;;;;;;;:::o;3393:293::-;3473:1;3466:5;3463:12;3453:2;;3509:77;3506:1;3499:88;3610:4;3607:1;3600:15;3638:4;3635:1;3628:15;3453:2;3662:18;;3443:243::o;3691:274::-;3820:3;3858:6;3852:13;3874:53;3920:6;3915:3;3908:4;3900:6;3896:17;3874:53;:::i;:::-;3943:16;;;;;3828:137;-1:-1:-1;;3828:137:1:o;4713:1504::-;5038:2;5090:21;;;5160:13;;5063:18;;;5182:22;;;5009:4;;5038:2;5258:4;;5235:3;5220:19;;;5285:15;;;5009:4;5331:169;5345:6;5342:1;5339:13;5331:169;;;5406:13;;5394:26;;5440:12;;;;5475:15;;;;5367:1;5360:9;5331:169;;;-1:-1:-1;;;5536:19:1;;;5516:18;;;5509:47;5606:13;;5628:21;;;5704:15;;;;5667:12;;;5739:4;5752:392;5768:8;5763:3;5760:17;5752:392;;;5839:8;5833:15;5861:42;5897:5;5892:2;5886:9;5861:42;:::i;:::-;5945:11;;;5939:18;5923:14;;;5916:42;5981:4;6041:11;;;6035:18;6028:26;6021:34;6005:14;;;5998:58;6117:17;;;;6078:14;;;;5796:1;5787:11;5752:392;;;5756:3;;6161:5;6153:13;;;;;;6204:6;6197:4;6186:9;6182:20;6175:36;5018:1199;;;;;;:::o;6674:357::-;6868:2;6853:18;;6880:43;6857:9;6905:6;6880:43;:::i;:::-;6959:6;6954:2;6943:9;6939:18;6932:34;7016:6;7009:14;7002:22;6997:2;6986:9;6982:18;6975:50;6835:196;;;;;;:::o;7216:442::-;7365:2;7354:9;7347:21;7328:4;7397:6;7391:13;7440:6;7435:2;7424:9;7420:18;7413:34;7456:66;7515:6;7510:2;7499:9;7495:18;7490:2;7482:6;7478:15;7456:66;:::i;:::-;7574:2;7562:15;7579:66;7558:88;7543:104;;;;7649:2;7539:113;;7337:321;-1:-1:-1;;7337:321:1:o;25209:128::-;25249:3;25280:1;25276:6;25273:1;25270:13;25267:2;;;25286:18;;:::i;:::-;-1:-1:-1;25322:9:1;;25257:80::o;25342:274::-;25382:1;25408;25398:2;;25443:77;25440:1;25433:88;25544:4;25541:1;25534:15;25572:4;25569:1;25562:15;25398:2;-1:-1:-1;25601:9:1;;25388:228::o;25621:::-;25661:7;25787:1;25719:66;25715:74;25712:1;25709:81;25704:1;25697:9;25690:17;25686:105;25683:2;;;25794:18;;:::i;:::-;-1:-1:-1;25834:9:1;;25673:176::o;25854:125::-;25894:4;25922:1;25919;25916:8;25913:2;;;25927:18;;:::i;:::-;-1:-1:-1;25964:9:1;;25903:76::o;25984:258::-;26056:1;26066:113;26080:6;26077:1;26074:13;26066:113;;;26156:11;;;26150:18;26137:11;;;26130:39;26102:2;26095:10;26066:113;;;26197:6;26194:1;26191:13;26188:2;;;26232:1;26223:6;26218:3;26214:16;26207:27;26188:2;;26037:205;;;:::o;26247:195::-;26286:3;26317:66;26310:5;26307:77;26304:2;;;26387:18;;:::i;:::-;-1:-1:-1;26434:1:1;26423:13;;26294:148::o;26447:184::-;26499:77;26496:1;26489:88;26596:4;26593:1;26586:15;26620:4;26617:1;26610:15
Swarm Source
ipfs://e8139cc890e372dc7ebd972cd5e014f4ed1261f9aa749e95f809b10762d8fbb9
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
FTM | Fantom (FTM) | 100.00% | $1.26 | 825.0206 | $1,040.46 |
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.