Overview
APE Balance
APE Value
$27.56 (@ $0.19/APE)Multichain Info
Latest 25 from a total of 115,481 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Play | 32795506 | 4 secs ago | IN | 25.07321158 APE | 0.06471833 | ||||
| Play | 32795280 | 6 mins ago | IN | 5.07321158 APE | 0.06474405 | ||||
| Play | 32795266 | 6 mins ago | IN | 10.07321158 APE | 0.06471955 | ||||
| Play | 32795259 | 7 mins ago | IN | 10.07321158 APE | 0.06471955 | ||||
| Play | 32795222 | 8 mins ago | IN | 4.07321158 APE | 0.06473785 | ||||
| Play | 32795207 | 8 mins ago | IN | 0.17321158 APE | 0.06473785 | ||||
| Play | 32795202 | 8 mins ago | IN | 0.17321158 APE | 0.06473785 | ||||
| Play | 32795200 | 8 mins ago | IN | 0.17321158 APE | 0.06473785 | ||||
| Play | 32795197 | 8 mins ago | IN | 0.17321158 APE | 0.06473785 | ||||
| Play | 32795150 | 10 mins ago | IN | 15.07321158 APE | 0.06471955 | ||||
| Play | 32795143 | 10 mins ago | IN | 15.07321158 APE | 0.06471955 | ||||
| Play | 32794956 | 15 mins ago | IN | 15.07321158 APE | 0.06471955 | ||||
| Play | 32794711 | 24 mins ago | IN | 54.47321158 APE | 0.06450947 | ||||
| Play | 32794705 | 24 mins ago | IN | 54.47321158 APE | 0.06450947 | ||||
| Play | 32794694 | 25 mins ago | IN | 24.97321158 APE | 0.06450947 | ||||
| Play | 32794686 | 25 mins ago | IN | 24.97321158 APE | 0.06450947 | ||||
| Play | 32794681 | 25 mins ago | IN | 24.97321158 APE | 0.06957195 | ||||
| Play | 32794671 | 25 mins ago | IN | 24.97321158 APE | 0.06957195 | ||||
| Play | 32794668 | 25 mins ago | IN | 24.97321158 APE | 0.06450947 | ||||
| Play | 32794661 | 25 mins ago | IN | 24.97321158 APE | 0.06450947 | ||||
| Play | 32794657 | 26 mins ago | IN | 24.97321158 APE | 0.06450947 | ||||
| Play | 32794651 | 26 mins ago | IN | 24.97321158 APE | 0.06450825 | ||||
| Play | 32794637 | 26 mins ago | IN | 287.07321158 APE | 0.06450947 | ||||
| Play | 32794626 | 26 mins ago | IN | 287.07321158 APE | 0.06450947 | ||||
| Play | 32794625 | 26 mins ago | IN | 10.07321158 APE | 0.06471955 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 32795508 | 3 secs ago | 24.45 APE | ||||
| 32795506 | 4 secs ago | 0.07321158 APE | ||||
| 32795506 | 4 secs ago | 0.55 APE | ||||
| 32795281 | 6 mins ago | 4.89 APE | ||||
| 32795280 | 6 mins ago | 0.07321158 APE | ||||
| 32795280 | 6 mins ago | 0.11 APE | ||||
| 32795267 | 6 mins ago | 9.78 APE | ||||
| 32795266 | 6 mins ago | 0.07321158 APE | ||||
| 32795266 | 6 mins ago | 0.22 APE | ||||
| 32795261 | 6 mins ago | 9.78 APE | ||||
| 32795259 | 7 mins ago | 0.07321158 APE | ||||
| 32795259 | 7 mins ago | 0.22 APE | ||||
| 32795225 | 7 mins ago | 3.912 APE | ||||
| 32795222 | 8 mins ago | 0.07321158 APE | ||||
| 32795222 | 8 mins ago | 0.088 APE | ||||
| 32795208 | 8 mins ago | 0.0978 APE | ||||
| 32795207 | 8 mins ago | 0.07321158 APE | ||||
| 32795207 | 8 mins ago | 0.0022 APE | ||||
| 32795204 | 8 mins ago | 0.0978 APE | ||||
| 32795202 | 8 mins ago | 0.07321158 APE | ||||
| 32795202 | 8 mins ago | 0.0022 APE | ||||
| 32795201 | 8 mins ago | 0.0978 APE | ||||
| 32795200 | 8 mins ago | 0.07321158 APE | ||||
| 32795200 | 8 mins ago | 0.0022 APE | ||||
| 32795198 | 8 mins ago | 0.0978 APE |
Cross-Chain Transactions
Contract Source Code (Solidity)
/**
*Submitted for verification at apescan.io on 2025-08-11
*/
//SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
interface IGovernanceManager {
function RNG() external view returns (address);
function owner() external view returns (address);
function referralManager() external view returns (address);
function feeReceiver() external view returns (address);
function claimManager() external view returns (address);
function house() external view returns (address);
function isGame(address game) external view returns (bool);
function userInfoTracker() external view returns (address);
function canPlayForOthers(address addr) external view returns (bool);
function paused() external view returns (bool);
function isAdmin(address admin) external view returns (bool);
}
interface IRNG {
function requestRandom(bytes32 userRandomNumber, uint8 numWords) external payable returns (uint64);
function getFee() external view returns (uint256);
}
contract ApeOwnable {
// Governance Manager
IGovernanceManager public constant manager = IGovernanceManager(0x8632f22e5A921C751CFbBFF92F058A3b11E96b8a);
modifier onlyOwner() {
require(
msg.sender == manager.owner(),
'Only Owner'
);
_;
}
modifier onlyGame() {
require(
manager.isGame(msg.sender),
'UnAuthorized'
);
_;
}
modifier onlyRNG() {
require(
msg.sender == manager.RNG(),
'Only RNG Contract'
);
_;
}
modifier validatePlayer(address player) {
if (player != msg.sender) {
require(
manager.canPlayForOthers(msg.sender),
'UnAuthorized To Play For Others'
);
}
_;
}
modifier notPaused() {
require(
manager.paused() == false,
'All Games Paused'
);
_;
}
modifier onlyAdmin() {
require(
manager.isAdmin(msg.sender),
'UnAuthorized'
);
_;
}
}
interface IGame {
/**
Callback to provide us with randomness
*/
function fulfillRandomWords(
uint64 requestId,
uint256[] calldata randomWords
) external;
function play(address user, bytes calldata gameData) external payable;
}
interface IUserInfoTracker {
function wagered(address user, uint256 amount, uint256 GAME_ID) external;
}
interface IClaimManager {
function credit(
uint256 GAME_ID,
address user
) external payable;
function claim() external;
}
interface IHistoryManager {
function addData(address user, uint256 GAME_ID, uint256 gameId) external;
}
interface IFeeRecipient {
function takeFee(address ref, address player) external payable;
}
// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
function safeApprove(
address token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::safeApprove: approve failed'
);
}
function safeTransfer(
address token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::safeTransfer: transfer failed'
);
}
function safeTransferFrom(
address token,
address from,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::transferFrom: transferFrom failed'
);
}
function safeTransferETH(address to, uint256 value) internal {
(bool success, ) = to.call{value: value}(new bytes(0));
require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
}
}
interface IHouse {
/**
House has profited from game, call this to send value into the house and emit the correct event for SubGraphs
*/
function houseProfit(uint256 GAME_ID) external payable;
/**
Function Games Call to tell the house that a user has won the bet
*/
function payout(uint256 GAME_ID, address user, uint256 value) external;
/**
Read function to determine the maximum payout allowed by the house at the current time
*/
function maxPayout() external view returns (uint256);
/**
Randomness has been requested, withdrawals are paused until it is resolved by called `randomRequestResolved()`
*/
function randomRequested() external;
/**
Resolves a random request from chainlink, allowing house users to withdraw
*/
function randomRequestResolved() external;
}
/**
Game Master Class, any inheriting game must pass the necessary fields into the constructor
*/
contract GameMasterclass is ApeOwnable, IGame {
// GAME ID
uint256 public immutable GAME_ID;
// History Manager
IHistoryManager public immutable history;
/** Game Is Either Paused Or Unpaused */
bool public paused = false;
/** List of all used game ids */
uint256[] public usedGameIds;
mapping ( uint256 => bool ) internal isUsedGameId;
// request ID => GameID
mapping ( uint64 => uint256 ) private requestToGame;
/// @notice emitted after a random request has been sent out
event RandomnessRequested(uint256 gameId);
/**
Builds The Necessary Components Of Any Game
*/
constructor(
uint256 GAME_ID_,
address history_
) {
// set other variables
GAME_ID = GAME_ID_;
history = IHistoryManager(history_);
}
//////////////////////////////////////
/////// OWNER FUNCTIONS ////////
//////////////////////////////////////
function pause() external onlyOwner {
paused = true;
}
function resume() external onlyOwner {
paused = false;
}
function withdrawETH(address to, uint256 amount) external onlyOwner {
(bool s,) = payable(to).call{value: amount}("");
require(s);
}
function withdrawToken(address token, uint amount) external onlyOwner {
TransferHelper.safeTransfer(token, msg.sender, amount);
}
function _registerBet(address user, uint256 amount) internal {
IUserInfoTracker(manager.userInfoTracker()).wagered(user, amount, GAME_ID);
}
function _processFee(uint256 feeAmount, address ref, address player) internal {
IFeeRecipient(manager.feeReceiver()).takeFee{value: feeAmount}(ref, player);
}
function getVRFFee() public view returns (uint256) {
return IRNG(manager.RNG()).getFee();
}
function fulfillRandomWords(uint64 requestId, uint256[] calldata randomWords) external virtual {}
function play(address player, bytes calldata gameData) external payable override validatePlayer(player) notPaused() {
require(
!paused,
'Paused'
);
// play game
_playGame(player, gameData);
}
function _playGame(address player, bytes calldata gameData) internal virtual {}
function _handlePayout(address player, uint256 totalToPayout, uint256 amountForHouse) internal {
if (totalToPayout > 0) {
// there is a payout, we won something
if (totalToPayout >= amountForHouse) {
// the user has won more than we are giving to the house
// this means we need to send them (to claim manager) amountForHouse directly
// and only request that the house `payout` the difference!
// add to user's claim manager the amount for the house
IClaimManager(manager.claimManager()).credit{value: amountForHouse}(
GAME_ID,
player
);
// get the difference
uint256 remaining = totalToPayout - amountForHouse;
if (remaining > 0) {
// payout the rest from the house
IHouse(manager.house()).payout(GAME_ID, player, remaining);
}
} else {
// the user has won less than we are giving to the house
// pay them out directly in full, send whatever is left over to the house
// add to user's claim manager the amount for the house
IClaimManager(manager.claimManager()).credit{value: totalToPayout}(
GAME_ID,
player
);
// calculate remaining left for the house
uint256 remaining = amountForHouse - totalToPayout;
// send the remaining to the house
IHouse(manager.house()).houseProfit{value: remaining }(GAME_ID);
}
} else {
// we won nothing, send the house everything
IHouse(manager.house()).houseProfit{value: amountForHouse }(GAME_ID);
}
}
/// @dev logs the gameId in the used list and adds game to player's history
function _registerGameId(address player, uint256 gameId) internal {
// set history data
history.addData(player, GAME_ID, gameId);
// add to list of used game ids
usedGameIds.push(gameId);
isUsedGameId[gameId] = true;
}
function _requestRandom(uint256 gameId, uint8 numWords, bytes32 userRandomWord) internal {
// request random words from RNG contract
uint64 requestId = IRNG(manager.RNG()).requestRandom{value: getVRFFee()}(
userRandomWord, // random user seed
numWords // the number of random results to return
);
// require that the requestId is unused
require(
requestToGame[requestId] == 0,
'RequestId In Use'
);
// map this request ID to the game it belongs to
requestToGame[requestId] = gameId;
// set data in house
IHouse(manager.house()).randomRequested();
// emit event
emit RandomnessRequested(gameId);
}
function _resolveRandom(uint64 requestId) internal {
// resolve request in house
IHouse(manager.house()).randomRequestResolved();
// clear storage
delete requestToGame[requestId];
}
function getGameIdFromRequest(uint64 requestId) internal view returns (uint256) {
return requestToGame[requestId];
}
function getHouse() public view returns (address) {
return manager.house();
}
function isValidGameId(uint256 gameId) public view returns (bool) {
return isUsedGameId[gameId] == false && gameId > 0;
}
function batchCallIsUsedGameId(uint256[] calldata gameIds) external view returns (bool[] memory isUsed) {
uint len = gameIds.length;
isUsed = new bool[](len);
for (uint i = 0; i < len;) {
isUsed[i] = isUsedGameId[gameIds[i]];
unchecked { ++i; }
}
}
function paginateUsedGameIDs(uint256 start, uint256 end) external view returns (uint256[] memory) {
if (end > usedGameIds.length) {
end = usedGameIds.length;
}
uint256[] memory ids = new uint256[](end - start);
for (uint i = start; i < end;) {
ids[i - start] = usedGameIds[i];
unchecked { ++i; }
}
return ids;
}
function numUsedGameIDs() external view returns (uint256) {
return usedGameIds.length;
}
function getEssentialGameInfo(uint256[] calldata gameIds) external view virtual returns (
address[] memory players,
uint256[] memory buyInAmounts,
uint256[] memory totalPayouts,
uint256[] memory timestamps,
bool[] memory hasEndeds
) {}
function batchRawGameInfo(uint256[] calldata gameIds) external view virtual returns (bytes[] memory) {}
}
/**
ApeStrong Game
*/
contract ApeStrong is GameMasterclass {
// Game Struct
struct Game {
/** Player */
address player;
/** Amount Bet Per Guess */
uint256 betAmount;
/** Total Amount For House */
uint256 amountForHouse;
/** Edge Flip Range */
uint8 edgeFlipRange;
/** Winning number */
uint8 winningNumber;
/** Total Payout Amount */
uint256 totalPayout;
/** timestamp */
uint256 timestamp;
/** Whether or not the game has ended and the VRF has called back */
bool hasEnded;
}
// GameInfoReturnType
struct GameInfoReturnType {
address player;
uint256 betAmount;
uint8 edgeFlipRange;
uint8 winningNumber;
uint256 totalPayout;
bool hasEnded;
uint256 timestamp;
}
// mapping from GameID => Game
mapping ( uint256 => Game ) public games;
// request ID => GameID
mapping ( uint256 => uint256 ) private requestToGame;
/** Platform Fee Taken Out Of Buy In */
uint256 public platformFee = 200;
/** Partner Cut */
uint256 public partnerFeeCut = 40;
address public partnerAddress;
// maps a given range to a payout multiplier
mapping ( uint8 => uint256 ) public edgeFlipRangeToPayout;
// Odds locked means the odds can never be updated
bool public oddsLocked;
/** Precision Denominator */
uint256 private constant PRECISION_DENOM = 10_000; // 0.01x precision
/// @notice emitted after the platform fee has been changed
event SetPlatformFee(uint256 newFee);
/// @notice emitted after a game has been started at a specific table
event GameStarted(address indexed user, uint256 gameId);
/// @notice Emitted after the VRF comes back with the index of the winning player
event GameEnded(
address indexed user,
uint256 gameId,
uint256 buyIn,
uint256 payout
);
/// @notice Emitted if the fulfilRandomWords function needs to return out for any reason
event FulfilRandomFailed(uint256 requestId, uint256 gameId, uint256[] randomWords);
/// @notice Emitted when the reel data is updated, emits the odds associated with the reel data
event OddsLocked();
constructor(
/** History Manager */
address history_
) GameMasterclass(12, history_) {
}
function setPlatformFee(uint256 newPlatform) external onlyOwner {
require(
newPlatform <= PRECISION_DENOM / 20,
'Cannot Exceed 5%'
);
platformFee = newPlatform;
emit SetPlatformFee(newPlatform);
}
function setPartnerAddress(address partner_) external onlyOwner {
partnerAddress = partner_;
}
function setPartnerFeeCut(uint256 newCut) external onlyOwner {
require(
newCut < 100,
'100% Partner Fee'
);
partnerFeeCut = newCut;
}
function setRangeToPayout(
uint8[] calldata edgeFlipRanges,
uint256[] calldata payouts
) external onlyOwner {
require(
edgeFlipRanges.length == payouts.length,
'Invalid Lengths'
);
for (uint i = 0; i < edgeFlipRanges.length;) {
require(
edgeFlipRanges[i] < 100 && edgeFlipRanges[i] > 0,
'Invalid Edge Flip Range'
);
require(
payouts[i] < 100 * PRECISION_DENOM,
'Invalid Payout'
);
edgeFlipRangeToPayout[edgeFlipRanges[i]] = payouts[i];
unchecked { ++i; }
}
}
function _playGame(address player, bytes calldata gameData) internal override {
// determine vrf fee
uint256 vrfFee = getVRFFee();
// decode gameData
(
uint8 edgeFlipRange,
uint256 gameId,
address ref,
bytes32 userRandomWord
) = abi.decode(gameData, (uint8, uint256, address, bytes32));
// validate inputs
require(
msg.value >= vrfFee,
'ERR: MIN BUY IN'
);
require(
isValidGameId(gameId) == true,
'ERR: INVALID GAME ID'
);
require(
edgeFlipRangeToPayout[edgeFlipRange] > 0,
'Invalid Edge Flip Range'
);
// determine total bet amount
uint256 totalBetAmount = msg.value - vrfFee;
// take platform fee out of the buy in
uint256 platformFeeAmount = ( totalBetAmount * platformFee ) / PRECISION_DENOM;
if (partnerAddress == address(0) || partnerFeeCut == 0) {
// send to platform receiver (taking ref into account)
_processFee(platformFeeAmount, ref, player);
} else {
// partner cut
uint256 partnerCut = ( platformFeeAmount * partnerFeeCut ) / 100;
// subtract from platform fee
uint256 realPlatformAmount = platformFeeAmount - partnerCut;
// send to platform receiver (taking ref into account)
_processFee(realPlatformAmount, ref, player);
// send to partner
TransferHelper.safeTransferETH(partnerAddress, partnerCut);
}
// save game data
games[gameId].player = player;
games[gameId].betAmount = totalBetAmount;
games[gameId].amountForHouse = totalBetAmount - platformFeeAmount;
games[gameId].edgeFlipRange = edgeFlipRange;
games[gameId].timestamp = block.timestamp;
// register game Id
_registerGameId(player, gameId);
// register bet
_registerBet(player, totalBetAmount);
// emit event
emit GameStarted(player, gameId);
// fetch random number
_requestRandom(gameId, 1, userRandomWord);
}
/**
Callback to provide us with randomness
*/
function fulfillRandomWords(
uint64 requestId,
uint256[] calldata randomWords
) external override onlyRNG {
// get game ID from requestId
uint256 gameId = getGameIdFromRequest(requestId);
// resolve randomness
_resolveRandom(requestId);
// get game ID from requestId
uint256 betAmount = games[gameId].betAmount;
uint8 edgeFlipRange = games[gameId].edgeFlipRange;
// if faulty ID, remove
if (
gameId == 0 ||
games[gameId].player == address(0) ||
games[gameId].hasEnded == true ||
betAmount == 0 ||
edgeFlipRangeToPayout[edgeFlipRange] == 0
) {
emit FulfilRandomFailed(requestId, gameId, randomWords);
return;
}
// set game has ended
games[gameId].hasEnded = true;
// total to pay out for the house and total to send the house
uint256 totalToPayout = 0;
// check if the random number is within the edge flip range
uint8 winningNumber = uint8(randomWords[0] % 100);
// set winning number
games[gameId].winningNumber = winningNumber;
if (winningNumber < edgeFlipRange) {
// we have a winning number, calculate payout
totalToPayout = ( edgeFlipRangeToPayout[edgeFlipRange] * betAmount ) / PRECISION_DENOM;
}
// save payout info
games[gameId].totalPayout = totalToPayout;
// handle payouts
_handlePayout(games[gameId].player, totalToPayout, games[gameId].amountForHouse);
// emit game ended event
emit GameEnded(games[gameId].player, gameId, betAmount, totalToPayout);
}
function getGameInfo(uint256 gameId) public view returns (
GameInfoReturnType memory
) {
return GameInfoReturnType({
player: games[gameId].player,
betAmount: games[gameId].betAmount,
edgeFlipRange: games[gameId].edgeFlipRange,
winningNumber: games[gameId].winningNumber,
totalPayout: games[gameId].totalPayout,
hasEnded: games[gameId].hasEnded,
timestamp: games[gameId].timestamp
});
}
function batchGameInfo(uint256[] calldata gameIds) external view returns (
GameInfoReturnType[] memory
) {
uint len = gameIds.length;
GameInfoReturnType[] memory retTypes = new GameInfoReturnType[](len);
for (uint i = 0; i < len;) {
retTypes[i] = getGameInfo(gameIds[i]);
unchecked { ++i; }
}
return retTypes;
}
function batchRawGameInfo(uint256[] calldata gameIds) external view override returns (bytes[] memory) {
uint len = gameIds.length;
bytes[] memory retTypes = new bytes[](len);
for (uint i = 0; i < len;) {
retTypes[i] = abi.encode(getGameInfo(gameIds[i]));
unchecked { ++i; }
}
return retTypes;
}
function getEssentialGameInfo(uint256[] calldata gameIds) external view override returns (
address[] memory players,
uint256[] memory buyInAmounts,
uint256[] memory totalPayouts,
uint256[] memory timestamps,
bool[] memory hasEndeds
) {
uint len = gameIds.length;
players = new address[](len);
buyInAmounts = new uint256[](len);
totalPayouts = new uint256[](len);
timestamps = new uint256[](len);
hasEndeds = new bool[](len);
for (uint i = 0; i < len;) {
players[i] = games[gameIds[i]].player;
buyInAmounts[i] = games[gameIds[i]].betAmount;
totalPayouts[i] = games[gameIds[i]].totalPayout;
timestamps[i] = games[gameIds[i]].timestamp;
hasEndeds[i] = games[gameIds[i]].hasEnded;
unchecked { ++i; }
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"history_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"FulfilRandomFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"}],"name":"GameEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"GameStarted","type":"event"},{"anonymous":false,"inputs":[],"name":"OddsLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"RandomnessRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"SetPlatformFee","type":"event"},{"inputs":[],"name":"GAME_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchCallIsUsedGameId","outputs":[{"internalType":"bool[]","name":"isUsed","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchGameInfo","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint8","name":"edgeFlipRange","type":"uint8"},{"internalType":"uint8","name":"winningNumber","type":"uint8"},{"internalType":"uint256","name":"totalPayout","type":"uint256"},{"internalType":"bool","name":"hasEnded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct ApeStrong.GameInfoReturnType[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchRawGameInfo","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"edgeFlipRangeToPayout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"requestId","type":"uint64"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"fulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint256","name":"amountForHouse","type":"uint256"},{"internalType":"uint8","name":"edgeFlipRange","type":"uint8"},{"internalType":"uint8","name":"winningNumber","type":"uint8"},{"internalType":"uint256","name":"totalPayout","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"hasEnded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"getEssentialGameInfo","outputs":[{"internalType":"address[]","name":"players","type":"address[]"},{"internalType":"uint256[]","name":"buyInAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"totalPayouts","type":"uint256[]"},{"internalType":"uint256[]","name":"timestamps","type":"uint256[]"},{"internalType":"bool[]","name":"hasEndeds","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"getGameInfo","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"betAmount","type":"uint256"},{"internalType":"uint8","name":"edgeFlipRange","type":"uint8"},{"internalType":"uint8","name":"winningNumber","type":"uint8"},{"internalType":"uint256","name":"totalPayout","type":"uint256"},{"internalType":"bool","name":"hasEnded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct ApeStrong.GameInfoReturnType","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHouse","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVRFFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"history","outputs":[{"internalType":"contract IHistoryManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"isValidGameId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"contract IGovernanceManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numUsedGameIDs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oddsLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"paginateUsedGameIDs","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerFeeCut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"platformFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"bytes","name":"gameData","type":"bytes"}],"name":"play","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"resume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"partner_","type":"address"}],"name":"setPartnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCut","type":"uint256"}],"name":"setPartnerFeeCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPlatform","type":"uint256"}],"name":"setPlatformFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"edgeFlipRanges","type":"uint8[]"},{"internalType":"uint256[]","name":"payouts","type":"uint256[]"}],"name":"setRangeToPayout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usedGameIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c06040526000805460ff1916905560c8600655602860075534801561002457600080fd5b5060405161342038038061342083398101604081905261004391610059565b600c6080526001600160a01b031660a052610089565b60006020828403121561006b57600080fd5b81516001600160a01b038116811461008257600080fd5b9392505050565b60805160a05161333a6100e6600039600081816105b5015261279601526000818161069701528181611dae01528181611eb901528181611fb9015281816120c0015281816121b60152818161276901526128d4015261333a6000f3fe6080604052600436106101d85760003560e01c80635c975abb1161010257806398daac8311610095578063c811ad7111610064578063c811ad7114610648578063cc81d0551461065b578063f0034a7e14610670578063fdcdb06b1461068557600080fd5b806398daac83146105a35780639e281a98146105d7578063c4fd5d6d146105f7578063c6d33e8d1461062857600080fd5b80638456cb59116100d15780638456cb591461052b57806389fc2c0f1461054057806391ea41e61461056057806398af61601461058d57600080fd5b80635c975abb146104975780636d380d28146104b1578063749fa03c146104de5780637b8d3879146104fe57600080fd5b80632e6e800b1161017a578063481c6a7511610149578063481c6a751461040857806348e8294a1461042a57806351e9255914610457578063576168fc1461047757600080fd5b80632e6e800b1461036e57806332883e7e1461038e5780634782f779146103bb57806347e1d550146103db57600080fd5b8063117a5b90116101b6578063117a5b901461025057806312e8e2c31461030a57806326232a2e1461032a5780632dffa8691461034e57600080fd5b8063046f7da2146101dd5780630476f004146101f457806304e2064f14610223575b600080fd5b3480156101e957600080fd5b506101f26106b9565b005b34801561020057600080fd5b50600a5461020e9060ff1681565b60405190151581526020015b60405180910390f35b34801561022f57600080fd5b5061023861076e565b6040516001600160a01b03909116815260200161021a565b34801561025c57600080fd5b506102bf61026b366004612ba6565b600460208190526000918252604090912080546001820154600283015460038401549484015460058501546006909501546001600160a01b03909416959294919360ff808516946101009004811693911688565b604080516001600160a01b03909916895260208901979097529587019490945260ff92831660608701529116608085015260a084015260c0830152151560e08201526101000161021a565b34801561031657600080fd5b506101f2610325366004612ba6565b6107e5565b34801561033657600080fd5b5061034060065481565b60405190815260200161021a565b34801561035a57600080fd5b506101f2610369366004612ba6565b61090f565b34801561037a57600080fd5b506101f2610389366004612bd7565b6109f7565b34801561039a57600080fd5b506103ae6103a9366004612bfb565b610ab9565b60405161021a9190612c59565b3480156103c757600080fd5b506101f26103d6366004612c6c565b610b7d565b3480156103e757600080fd5b506103fb6103f6366004612ba6565b610c82565b60405161021a9190612cec565b34801561041457600080fd5b506102386000805160206132e583398151915281565b34801561043657600080fd5b5061044a610445366004612d45565b610d33565b60405161021a9190612d86565b34801561046357600080fd5b5061020e610472366004612ba6565b610e14565b34801561048357600080fd5b50600854610238906001600160a01b031681565b3480156104a357600080fd5b5060005461020e9060ff1681565b3480156104bd57600080fd5b506103406104cc366004612dea565b60096020526000908152604090205481565b3480156104ea57600080fd5b506101f26104f9366004612e1a565b610e34565b34801561050a57600080fd5b5061051e610519366004612d45565b611127565b60405161021a9190612ea2565b34801561053757600080fd5b506101f26111e4565b34801561054c57600080fd5b5061034061055b366004612ba6565b611293565b34801561056c57600080fd5b5061058061057b366004612d45565b6112b4565b60405161021a9190612ed9565b34801561059957600080fd5b5061034060075481565b3480156105af57600080fd5b506102387f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e357600080fd5b506101f26105f2366004612c6c565b61136b565b34801561060357600080fd5b50610617610612366004612d45565b61141a565b60405161021a959493929190612f59565b34801561063457600080fd5b506101f2610643366004612ff9565b61174d565b6101f2610656366004613068565b6119ac565b34801561066757600080fd5b50600154610340565b34801561067c57600080fd5b50610340611b73565b34801561069157600080fd5b506103407f000000000000000000000000000000000000000000000000000000000000000081565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610705573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072991906130ed565b6001600160a01b0316336001600160a01b0316146107625760405162461bcd60e51b81526004016107599061310a565b60405180910390fd5b6000805460ff19169055565b60006000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e091906130ed565b905090565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085591906130ed565b6001600160a01b0316336001600160a01b0316146108855760405162461bcd60e51b81526004016107599061310a565b610892601461271061315a565b8111156108d45760405162461bcd60e51b815260206004820152601060248201526f43616e6e6f742045786365656420352560801b6044820152606401610759565b60068190556040518181527f05fd392cc4f8fe360ff8b094f628b1c29b9000441290e2f8a597c12d5379b06d9060200160405180910390a150565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f91906130ed565b6001600160a01b0316336001600160a01b0316146109af5760405162461bcd60e51b81526004016107599061310a565b606481106109f25760405162461bcd60e51b815260206004820152601060248201526f3130302520506172746e65722046656560801b6044820152606401610759565b600755565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6791906130ed565b6001600160a01b0316336001600160a01b031614610a975760405162461bcd60e51b81526004016107599061310a565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600154606090821115610acc5760015491505b6000610ad8848461316e565b6001600160401b03811115610aef57610aef613181565b604051908082528060200260200182016040528015610b18578160200160208202803683370190505b509050835b83811015610b735760018181548110610b3857610b38613197565b9060005260206000200154828683610b50919061316e565b81518110610b6057610b60613197565b6020908102919091010152600101610b1d565b5090505b92915050565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906130ed565b6001600160a01b0316336001600160a01b031614610c1d5760405162461bcd60e51b81526004016107599061310a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c6a576040519150601f19603f3d011682016040523d82523d6000602084013e610c6f565b606091505b5050905080610c7d57600080fd5b505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506040805160e08101825260008381526004602081815284832080546001600160a01b03168552600181015482860152600381015460ff808216978701979097526101009004861660608601528083015460808601526006810154909516151560a0850152949091529092526005015460c082015290565b6060816000816001600160401b03811115610d5057610d50613181565b604051908082528060200260200182016040528015610db757816020015b6040805160e08101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c08201528252600019909201910181610d6e5790505b50905060005b82811015610e0b57610de6868683818110610dda57610dda613197565b90506020020135610c82565b828281518110610df857610df8613197565b6020908102919091010152600101610dbd565b50949350505050565b60008181526002602052604081205460ff16158015610b77575050151590565b6000805160206132e58339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea491906130ed565b6001600160a01b0316336001600160a01b031614610ef85760405162461bcd60e51b815260206004820152601160248201527013db9b1e48149391c810dbdb9d1c9858dd607a1b6044820152606401610759565b6001600160401b038316600090815260036020526040902054610f1a84611c46565b6000818152600460205260409020600181015460039091015460ff16821580610f5857506000838152600460205260409020546001600160a01b0316155b80610f79575060008381526004602052604090206006015460ff1615156001145b80610f82575081155b80610f9d575060ff8116600090815260096020526040902054155b15610fe7577f2acb79a40a39601d6c546f6db7b37fd1018c0401f5f5e07754bff874ce6ac8a586848787604051610fd794939291906131ad565b60405180910390a1505050505050565b6000838152600460205260408120600601805460ff191660011790558060648787838161101657611016613197565b9050602002013561102791906131ff565b6000868152600460205260409020600301805460ff808416610100810261ff0019909316929092179092559192508416111561108c5760ff83166000908152600960205260409020546127109061107f908690613213565b611089919061315a565b91505b600085815260046020819052604090912090810183905580546002909101546110c0916001600160a01b0316908490611d22565b6000858152600460209081526040918290205482518881529182018790529181018490526001600160a01b03909116907fc542d3f545425a3b913c4056355fd70bae2039ab35205203499d8bfd03c01ae89060600160405180910390a25050505050505050565b606081806001600160401b0381111561114257611142613181565b60405190808252806020026020018201604052801561116b578160200160208202803683370190505b50915060005b818110156111dc576002600086868481811061118f5761118f613197565b90506020020135815260200190815260200160002060009054906101000a900460ff168382815181106111c4576111c4613197565b91151560209283029190910190910152600101611171565b505092915050565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125491906130ed565b6001600160a01b0316336001600160a01b0316146112845760405162461bcd60e51b81526004016107599061310a565b6000805460ff19166001179055565b600181815481106112a357600080fd5b600091825260209091200154905081565b6060816000816001600160401b038111156112d1576112d1613181565b60405190808252806020026020018201604052801561130457816020015b60608152602001906001900390816112ef5790505b50905060005b82811015610e0b57611327868683818110610dda57610dda613197565b6040516020016113379190612cec565b60405160208183030381529060405282828151811061135857611358613197565b602090810291909101015260010161130a565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113db91906130ed565b6001600160a01b0316336001600160a01b03161461140b5760405162461bcd60e51b81526004016107599061310a565b61141682338361220c565b5050565b60608080808085806001600160401b0381111561143957611439613181565b604051908082528060200260200182016040528015611462578160200160208202803683370190505b509550806001600160401b0381111561147d5761147d613181565b6040519080825280602002602001820160405280156114a6578160200160208202803683370190505b509450806001600160401b038111156114c1576114c1613181565b6040519080825280602002602001820160405280156114ea578160200160208202803683370190505b509350806001600160401b0381111561150557611505613181565b60405190808252806020026020018201604052801561152e578160200160208202803683370190505b509250806001600160401b0381111561154957611549613181565b604051908082528060200260200182016040528015611572578160200160208202803683370190505b50915060005b8181101561174157600460008a8a8481811061159657611596613197565b90506020020135815260200190815260200160002060000160009054906101000a90046001600160a01b03168782815181106115d4576115d4613197565b60200260200101906001600160a01b031690816001600160a01b031681525050600460008a8a8481811061160a5761160a613197565b9050602002013581526020019081526020016000206001015486828151811061163557611635613197565b602002602001018181525050600460008a8a8481811061165757611657613197565b9050602002013581526020019081526020016000206004015485828151811061168257611682613197565b602002602001018181525050600460008a8a848181106116a4576116a4613197565b905060200201358152602001908152602001600020600501548482815181106116cf576116cf613197565b602002602001018181525050600460008a8a848181106116f1576116f1613197565b90506020020135815260200190815260200160002060060160009054906101000a900460ff1683828151811061172957611729613197565b91151560209283029190910190910152600101611578565b50509295509295909350565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd91906130ed565b6001600160a01b0316336001600160a01b0316146117ed5760405162461bcd60e51b81526004016107599061310a565b82811461182e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204c656e6774687360881b6044820152606401610759565b60005b838110156119a557606485858381811061184d5761184d613197565b90506020020160208101906118629190612dea565b60ff1610801561189b5750600085858381811061188157611881613197565b90506020020160208101906118969190612dea565b60ff16115b6118e15760405162461bcd60e51b8152602060048201526017602482015276496e76616c6964204564676520466c69702052616e676560481b6044820152606401610759565b6118ee6127106064613213565b83838381811061190057611900613197565b90506020020135106119455760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a590814185e5bdd5d60921b6044820152606401610759565b82828281811061195757611957613197565b905060200201356009600087878581811061197457611974613197565b90506020020160208101906119899190612dea565b60ff168152602081019190915260400160002055600101611831565b5050505050565b826001600160a01b0381163314611a7657604051636d6d50a160e11b81523360048201526000805160206132e58339815191529063dadaa14290602401602060405180830381865afa158015611a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2a919061322a565b611a765760405162461bcd60e51b815260206004820152601f60248201527f556e417574686f72697a656420546f20506c617920466f72204f7468657273006044820152606401610759565b6000805160206132e58339815191526001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae6919061322a565b15611b265760405162461bcd60e51b815260206004820152601060248201526f105b1b0811d85b595cc814185d5cd95960821b6044820152606401610759565b60005460ff1615611b625760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b6044820152606401610759565b611b6d848484612336565b50505050565b60006000805160206132e58339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be591906130ed565b6001600160a01b031663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e0919061324c565b6000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb691906130ed565b6001600160a01b0316638b3939f26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cf057600080fd5b505af1158015611d04573d6000803e3d6000fd5b505050506001600160401b0316600090815260036020526040812055565b811561213557808210611f3a576000805160206132e58339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9f91906130ed565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0385811660248301529190911690639fec19e09083906044016000604051808303818588803b158015611e0b57600080fd5b505af1158015611e1f573d6000803e3d6000fd5b505050505060008183611e32919061316e565b90508015611b6d576000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eaa91906130ed565b60405163ae2f5d9360e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b03868116602483015260448201849052919091169063ae2f5d9390606401600060405180830381600087803b158015611f1c57600080fd5b505af1158015611f30573d6000803e3d6000fd5b5050505050505050565b6000805160206132e58339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faa91906130ed565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0385811660248301529190911690639fec19e09084906044016000604051808303818588803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b50505050506000828261203d919061316e565b90506000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af91906130ed565b6001600160a01b031663b3cb6f1a827f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016120fd91815260200190565b6000604051808303818588803b15801561211657600080fd5b505af115801561212a573d6000803e3d6000fd5b505050505050505050565b6000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a591906130ed565b6001600160a01b031663b3cb6f1a827f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016121f391815260200190565b6000604051808303818588803b158015611f1c57600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916122689190613265565b6000604051808303816000865af19150503d80600081146122a5576040519150601f19603f3d011682016040523d82523d6000602084013e6122aa565b606091505b50915091508180156122d45750805115806122d45750808060200190518101906122d4919061322a565b6119a55760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610759565b6000612340611b73565b9050600080808061235386880188613281565b93509350935093508434101561239d5760405162461bcd60e51b815260206004820152600f60248201526e22a9291d1026a4a710212aac9024a760891b6044820152606401610759565b6123a683610e14565b15156001146123ee5760405162461bcd60e51b81526020600482015260146024820152731154948e88125395905312510811d0535148125160621b6044820152606401610759565b60ff84166000908152600960205260409020546124475760405162461bcd60e51b8152602060048201526017602482015276496e76616c6964204564676520466c69702052616e676560481b6044820152606401610759565b6000612453863461316e565b90506000612710600654836124689190613213565b612472919061315a565b6008549091506001600160a01b0316158061248d5750600754155b156124a25761249d81858c6125c6565b6124f2565b60006064600754836124b49190613213565b6124be919061315a565b905060006124cc828461316e565b90506124d981878e6125c6565b6008546124ef906001600160a01b031683612670565b50505b600085815260046020526040902080546001600160a01b0319166001600160a01b038c16178155600101829055612529818361316e565b6000868152600460205260409020600281019190915560038101805460ff191660ff8916179055426005909101556125618a8661274a565b61256b8a8361283e565b896001600160a01b03167fea32a03505fd9f04d664676d72295a86c5fb0465e69654751907ca305bc1d1c7866040516125a691815260200190565b60405180910390a26125ba8560018561293c565b50505050505050505050565b6000805160206132e58339815191526001600160a01b031663b3f006746040518163ffffffff1660e01b8152600401602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906130ed565b60405163bc5101e560e01b81526001600160a01b0384811660048301528381166024830152919091169063bc5101e59085906044016121f3565b604080516000808252602082019092526001600160a01b03841690839060405161269a9190613265565b60006040518083038185875af1925050503d80600081146126d7576040519150601f19603f3d011682016040523d82523d6000602084013e6126dc565b606091505b5050905080610c7d5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610759565b604051639a4918c160e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000006024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690639a4918c190606401600060405180830381600087803b1580156127da57600080fd5b505af11580156127ee573d6000803e3d6000fd5b50506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601849055600093845260026020526040909320805460ff1916909317909255505050565b6000805160206132e58339815191526001600160a01b031663846c43986040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ae91906130ed565b60405163759ecdf560e11b81526001600160a01b038481166004830152602482018490527f00000000000000000000000000000000000000000000000000000000000000006044830152919091169063eb3d9bea90606401600060405180830381600087803b15801561292057600080fd5b505af1158015612934573d6000803e3d6000fd5b505050505050565b60006000805160206132e58339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ae91906130ed565b6001600160a01b03166397cca7af6129c4611b73565b6040516001600160e01b031960e084901b1681526004810186905260ff8716602482015260440160206040518083038185885af1158015612a09573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a2e91906132c7565b6001600160401b03811660009081526003602052604090205490915015612a8a5760405162461bcd60e51b815260206004820152601060248201526f52657175657374496420496e2055736560801b6044820152606401610759565b6001600160401b038116600090815260036020908152604091829020869055815160016264c53160e01b0319815291516000805160206132e58339815191529263ff9b3acf9260048083019391928290030181865afa158015612af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1591906130ed565b6001600160a01b0316638d7fe4786040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b4f57600080fd5b505af1158015612b63573d6000803e3d6000fd5b505050507f9ac10fb18c93d33ad7b0a941897aef048d0f8d30756684e82b4552ba12764d4584604051612b9891815260200190565b60405180910390a150505050565b600060208284031215612bb857600080fd5b5035919050565b6001600160a01b0381168114612bd457600080fd5b50565b600060208284031215612be957600080fd5b8135612bf481612bbf565b9392505050565b60008060408385031215612c0e57600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b82811015612c4f578151865260209586019590910190600101612c31565b5093949350505050565b602081526000612bf46020830184612c1d565b60008060408385031215612c7f57600080fd5b8235612c8a81612bbf565b946020939093013593505050565b60018060a01b0381511682526020810151602083015260ff604082015116604083015260ff60608201511660608301526080810151608083015260a0810151151560a083015260c081015160c08301525050565b60e08101610b778284612c98565b60008083601f840112612d0c57600080fd5b5081356001600160401b03811115612d2357600080fd5b6020830191508360208260051b8501011115612d3e57600080fd5b9250929050565b60008060208385031215612d5857600080fd5b82356001600160401b03811115612d6e57600080fd5b612d7a85828601612cfa565b90969095509350505050565b602080825282518282018190526000918401906040840190835b81811015612dc957612db3838551612c98565b6020939093019260e09290920191600101612da0565b509095945050505050565b803560ff81168114612de557600080fd5b919050565b600060208284031215612dfc57600080fd5b612bf482612dd4565b6001600160401b0381168114612bd457600080fd5b600080600060408486031215612e2f57600080fd5b8335612e3a81612e05565b925060208401356001600160401b03811115612e5557600080fd5b612e6186828701612cfa565b9497909650939450505050565b600081518084526020840193506020830160005b82811015612c4f5781511515865260209586019590910190600101612e82565b602081526000612bf46020830184612e6e565b60005b83811015612ed0578181015183820152602001612eb8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612f4d57603f1987860301845281518051808752612f2a816020890160208501612eb5565b601f01601f19169590950160209081019550938401939190910190600101612f01565b50929695505050505050565b60a08082528651908201819052600090602088019060c0840190835b81811015612f9c5783516001600160a01b0316835260209384019390920191600101612f75565b50508381036020850152612fb08189612c1d565b9150508281036040840152612fc58187612c1d565b90508281036060840152612fd98186612c1d565b90508281036080840152612fed8185612e6e565b98975050505050505050565b6000806000806040858703121561300f57600080fd5b84356001600160401b0381111561302557600080fd5b61303187828801612cfa565b90955093505060208501356001600160401b0381111561305057600080fd5b61305c87828801612cfa565b95989497509550505050565b60008060006040848603121561307d57600080fd5b833561308881612bbf565b925060208401356001600160401b038111156130a357600080fd5b8401601f810186136130b457600080fd5b80356001600160401b038111156130ca57600080fd5b8660208284010111156130dc57600080fd5b939660209190910195509293505050565b6000602082840312156130ff57600080fd5b8151612bf481612bbf565b6020808252600a908201526927b7363c9027bbb732b960b11b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826131695761316961312e565b500490565b81810381811115610b7757610b77613144565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160401b038516815260208101849052606060408201819052810182905260006001600160fb1b038311156131e457600080fd5b8260051b808560808501379190910160800195945050505050565b60008261320e5761320e61312e565b500690565b8082028115828204841417610b7757610b77613144565b60006020828403121561323c57600080fd5b81518015158114612bf457600080fd5b60006020828403121561325e57600080fd5b5051919050565b60008251613277818460208701612eb5565b9190910192915050565b6000806000806080858703121561329757600080fd5b6132a085612dd4565b93506020850135925060408501356132b781612bbf565b9396929550929360600135925050565b6000602082840312156132d957600080fd5b8151612bf481612e0556fe0000000000000000000000008632f22e5a921c751cfbbff92f058a3b11e96b8aa264697066735822122024c9925682ff758cc5b181f18f0ecd3c8efad1f48cfc25b0a3faf1c76209b28b64736f6c634300081c0033000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa
Deployed Bytecode
0x6080604052600436106101d85760003560e01c80635c975abb1161010257806398daac8311610095578063c811ad7111610064578063c811ad7114610648578063cc81d0551461065b578063f0034a7e14610670578063fdcdb06b1461068557600080fd5b806398daac83146105a35780639e281a98146105d7578063c4fd5d6d146105f7578063c6d33e8d1461062857600080fd5b80638456cb59116100d15780638456cb591461052b57806389fc2c0f1461054057806391ea41e61461056057806398af61601461058d57600080fd5b80635c975abb146104975780636d380d28146104b1578063749fa03c146104de5780637b8d3879146104fe57600080fd5b80632e6e800b1161017a578063481c6a7511610149578063481c6a751461040857806348e8294a1461042a57806351e9255914610457578063576168fc1461047757600080fd5b80632e6e800b1461036e57806332883e7e1461038e5780634782f779146103bb57806347e1d550146103db57600080fd5b8063117a5b90116101b6578063117a5b901461025057806312e8e2c31461030a57806326232a2e1461032a5780632dffa8691461034e57600080fd5b8063046f7da2146101dd5780630476f004146101f457806304e2064f14610223575b600080fd5b3480156101e957600080fd5b506101f26106b9565b005b34801561020057600080fd5b50600a5461020e9060ff1681565b60405190151581526020015b60405180910390f35b34801561022f57600080fd5b5061023861076e565b6040516001600160a01b03909116815260200161021a565b34801561025c57600080fd5b506102bf61026b366004612ba6565b600460208190526000918252604090912080546001820154600283015460038401549484015460058501546006909501546001600160a01b03909416959294919360ff808516946101009004811693911688565b604080516001600160a01b03909916895260208901979097529587019490945260ff92831660608701529116608085015260a084015260c0830152151560e08201526101000161021a565b34801561031657600080fd5b506101f2610325366004612ba6565b6107e5565b34801561033657600080fd5b5061034060065481565b60405190815260200161021a565b34801561035a57600080fd5b506101f2610369366004612ba6565b61090f565b34801561037a57600080fd5b506101f2610389366004612bd7565b6109f7565b34801561039a57600080fd5b506103ae6103a9366004612bfb565b610ab9565b60405161021a9190612c59565b3480156103c757600080fd5b506101f26103d6366004612c6c565b610b7d565b3480156103e757600080fd5b506103fb6103f6366004612ba6565b610c82565b60405161021a9190612cec565b34801561041457600080fd5b506102386000805160206132e583398151915281565b34801561043657600080fd5b5061044a610445366004612d45565b610d33565b60405161021a9190612d86565b34801561046357600080fd5b5061020e610472366004612ba6565b610e14565b34801561048357600080fd5b50600854610238906001600160a01b031681565b3480156104a357600080fd5b5060005461020e9060ff1681565b3480156104bd57600080fd5b506103406104cc366004612dea565b60096020526000908152604090205481565b3480156104ea57600080fd5b506101f26104f9366004612e1a565b610e34565b34801561050a57600080fd5b5061051e610519366004612d45565b611127565b60405161021a9190612ea2565b34801561053757600080fd5b506101f26111e4565b34801561054c57600080fd5b5061034061055b366004612ba6565b611293565b34801561056c57600080fd5b5061058061057b366004612d45565b6112b4565b60405161021a9190612ed9565b34801561059957600080fd5b5061034060075481565b3480156105af57600080fd5b506102387f000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa81565b3480156105e357600080fd5b506101f26105f2366004612c6c565b61136b565b34801561060357600080fd5b50610617610612366004612d45565b61141a565b60405161021a959493929190612f59565b34801561063457600080fd5b506101f2610643366004612ff9565b61174d565b6101f2610656366004613068565b6119ac565b34801561066757600080fd5b50600154610340565b34801561067c57600080fd5b50610340611b73565b34801561069157600080fd5b506103407f000000000000000000000000000000000000000000000000000000000000000c81565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610705573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072991906130ed565b6001600160a01b0316336001600160a01b0316146107625760405162461bcd60e51b81526004016107599061310a565b60405180910390fd5b6000805460ff19169055565b60006000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e091906130ed565b905090565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085591906130ed565b6001600160a01b0316336001600160a01b0316146108855760405162461bcd60e51b81526004016107599061310a565b610892601461271061315a565b8111156108d45760405162461bcd60e51b815260206004820152601060248201526f43616e6e6f742045786365656420352560801b6044820152606401610759565b60068190556040518181527f05fd392cc4f8fe360ff8b094f628b1c29b9000441290e2f8a597c12d5379b06d9060200160405180910390a150565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097f91906130ed565b6001600160a01b0316336001600160a01b0316146109af5760405162461bcd60e51b81526004016107599061310a565b606481106109f25760405162461bcd60e51b815260206004820152601060248201526f3130302520506172746e65722046656560801b6044820152606401610759565b600755565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6791906130ed565b6001600160a01b0316336001600160a01b031614610a975760405162461bcd60e51b81526004016107599061310a565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600154606090821115610acc5760015491505b6000610ad8848461316e565b6001600160401b03811115610aef57610aef613181565b604051908082528060200260200182016040528015610b18578160200160208202803683370190505b509050835b83811015610b735760018181548110610b3857610b38613197565b9060005260206000200154828683610b50919061316e565b81518110610b6057610b60613197565b6020908102919091010152600101610b1d565b5090505b92915050565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906130ed565b6001600160a01b0316336001600160a01b031614610c1d5760405162461bcd60e51b81526004016107599061310a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c6a576040519150601f19603f3d011682016040523d82523d6000602084013e610c6f565b606091505b5050905080610c7d57600080fd5b505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506040805160e08101825260008381526004602081815284832080546001600160a01b03168552600181015482860152600381015460ff808216978701979097526101009004861660608601528083015460808601526006810154909516151560a0850152949091529092526005015460c082015290565b6060816000816001600160401b03811115610d5057610d50613181565b604051908082528060200260200182016040528015610db757816020015b6040805160e08101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c08201528252600019909201910181610d6e5790505b50905060005b82811015610e0b57610de6868683818110610dda57610dda613197565b90506020020135610c82565b828281518110610df857610df8613197565b6020908102919091010152600101610dbd565b50949350505050565b60008181526002602052604081205460ff16158015610b77575050151590565b6000805160206132e58339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea491906130ed565b6001600160a01b0316336001600160a01b031614610ef85760405162461bcd60e51b815260206004820152601160248201527013db9b1e48149391c810dbdb9d1c9858dd607a1b6044820152606401610759565b6001600160401b038316600090815260036020526040902054610f1a84611c46565b6000818152600460205260409020600181015460039091015460ff16821580610f5857506000838152600460205260409020546001600160a01b0316155b80610f79575060008381526004602052604090206006015460ff1615156001145b80610f82575081155b80610f9d575060ff8116600090815260096020526040902054155b15610fe7577f2acb79a40a39601d6c546f6db7b37fd1018c0401f5f5e07754bff874ce6ac8a586848787604051610fd794939291906131ad565b60405180910390a1505050505050565b6000838152600460205260408120600601805460ff191660011790558060648787838161101657611016613197565b9050602002013561102791906131ff565b6000868152600460205260409020600301805460ff808416610100810261ff0019909316929092179092559192508416111561108c5760ff83166000908152600960205260409020546127109061107f908690613213565b611089919061315a565b91505b600085815260046020819052604090912090810183905580546002909101546110c0916001600160a01b0316908490611d22565b6000858152600460209081526040918290205482518881529182018790529181018490526001600160a01b03909116907fc542d3f545425a3b913c4056355fd70bae2039ab35205203499d8bfd03c01ae89060600160405180910390a25050505050505050565b606081806001600160401b0381111561114257611142613181565b60405190808252806020026020018201604052801561116b578160200160208202803683370190505b50915060005b818110156111dc576002600086868481811061118f5761118f613197565b90506020020135815260200190815260200160002060009054906101000a900460ff168382815181106111c4576111c4613197565b91151560209283029190910190910152600101611171565b505092915050565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125491906130ed565b6001600160a01b0316336001600160a01b0316146112845760405162461bcd60e51b81526004016107599061310a565b6000805460ff19166001179055565b600181815481106112a357600080fd5b600091825260209091200154905081565b6060816000816001600160401b038111156112d1576112d1613181565b60405190808252806020026020018201604052801561130457816020015b60608152602001906001900390816112ef5790505b50905060005b82811015610e0b57611327868683818110610dda57610dda613197565b6040516020016113379190612cec565b60405160208183030381529060405282828151811061135857611358613197565b602090810291909101015260010161130a565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113db91906130ed565b6001600160a01b0316336001600160a01b03161461140b5760405162461bcd60e51b81526004016107599061310a565b61141682338361220c565b5050565b60608080808085806001600160401b0381111561143957611439613181565b604051908082528060200260200182016040528015611462578160200160208202803683370190505b509550806001600160401b0381111561147d5761147d613181565b6040519080825280602002602001820160405280156114a6578160200160208202803683370190505b509450806001600160401b038111156114c1576114c1613181565b6040519080825280602002602001820160405280156114ea578160200160208202803683370190505b509350806001600160401b0381111561150557611505613181565b60405190808252806020026020018201604052801561152e578160200160208202803683370190505b509250806001600160401b0381111561154957611549613181565b604051908082528060200260200182016040528015611572578160200160208202803683370190505b50915060005b8181101561174157600460008a8a8481811061159657611596613197565b90506020020135815260200190815260200160002060000160009054906101000a90046001600160a01b03168782815181106115d4576115d4613197565b60200260200101906001600160a01b031690816001600160a01b031681525050600460008a8a8481811061160a5761160a613197565b9050602002013581526020019081526020016000206001015486828151811061163557611635613197565b602002602001018181525050600460008a8a8481811061165757611657613197565b9050602002013581526020019081526020016000206004015485828151811061168257611682613197565b602002602001018181525050600460008a8a848181106116a4576116a4613197565b905060200201358152602001908152602001600020600501548482815181106116cf576116cf613197565b602002602001018181525050600460008a8a848181106116f1576116f1613197565b90506020020135815260200190815260200160002060060160009054906101000a900460ff1683828151811061172957611729613197565b91151560209283029190910190910152600101611578565b50509295509295909350565b6000805160206132e58339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd91906130ed565b6001600160a01b0316336001600160a01b0316146117ed5760405162461bcd60e51b81526004016107599061310a565b82811461182e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204c656e6774687360881b6044820152606401610759565b60005b838110156119a557606485858381811061184d5761184d613197565b90506020020160208101906118629190612dea565b60ff1610801561189b5750600085858381811061188157611881613197565b90506020020160208101906118969190612dea565b60ff16115b6118e15760405162461bcd60e51b8152602060048201526017602482015276496e76616c6964204564676520466c69702052616e676560481b6044820152606401610759565b6118ee6127106064613213565b83838381811061190057611900613197565b90506020020135106119455760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a590814185e5bdd5d60921b6044820152606401610759565b82828281811061195757611957613197565b905060200201356009600087878581811061197457611974613197565b90506020020160208101906119899190612dea565b60ff168152602081019190915260400160002055600101611831565b5050505050565b826001600160a01b0381163314611a7657604051636d6d50a160e11b81523360048201526000805160206132e58339815191529063dadaa14290602401602060405180830381865afa158015611a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2a919061322a565b611a765760405162461bcd60e51b815260206004820152601f60248201527f556e417574686f72697a656420546f20506c617920466f72204f7468657273006044820152606401610759565b6000805160206132e58339815191526001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae6919061322a565b15611b265760405162461bcd60e51b815260206004820152601060248201526f105b1b0811d85b595cc814185d5cd95960821b6044820152606401610759565b60005460ff1615611b625760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b6044820152606401610759565b611b6d848484612336565b50505050565b60006000805160206132e58339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be591906130ed565b6001600160a01b031663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e0919061324c565b6000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb691906130ed565b6001600160a01b0316638b3939f26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cf057600080fd5b505af1158015611d04573d6000803e3d6000fd5b505050506001600160401b0316600090815260036020526040812055565b811561213557808210611f3a576000805160206132e58339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9f91906130ed565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000c60048201526001600160a01b0385811660248301529190911690639fec19e09083906044016000604051808303818588803b158015611e0b57600080fd5b505af1158015611e1f573d6000803e3d6000fd5b505050505060008183611e32919061316e565b90508015611b6d576000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eaa91906130ed565b60405163ae2f5d9360e01b81527f000000000000000000000000000000000000000000000000000000000000000c60048201526001600160a01b03868116602483015260448201849052919091169063ae2f5d9390606401600060405180830381600087803b158015611f1c57600080fd5b505af1158015611f30573d6000803e3d6000fd5b5050505050505050565b6000805160206132e58339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faa91906130ed565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000c60048201526001600160a01b0385811660248301529190911690639fec19e09084906044016000604051808303818588803b15801561201657600080fd5b505af115801561202a573d6000803e3d6000fd5b50505050506000828261203d919061316e565b90506000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af91906130ed565b6001600160a01b031663b3cb6f1a827f000000000000000000000000000000000000000000000000000000000000000c6040518363ffffffff1660e01b81526004016120fd91815260200190565b6000604051808303818588803b15801561211657600080fd5b505af115801561212a573d6000803e3d6000fd5b505050505050505050565b6000805160206132e58339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a591906130ed565b6001600160a01b031663b3cb6f1a827f000000000000000000000000000000000000000000000000000000000000000c6040518363ffffffff1660e01b81526004016121f391815260200190565b6000604051808303818588803b158015611f1c57600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916122689190613265565b6000604051808303816000865af19150503d80600081146122a5576040519150601f19603f3d011682016040523d82523d6000602084013e6122aa565b606091505b50915091508180156122d45750805115806122d45750808060200190518101906122d4919061322a565b6119a55760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610759565b6000612340611b73565b9050600080808061235386880188613281565b93509350935093508434101561239d5760405162461bcd60e51b815260206004820152600f60248201526e22a9291d1026a4a710212aac9024a760891b6044820152606401610759565b6123a683610e14565b15156001146123ee5760405162461bcd60e51b81526020600482015260146024820152731154948e88125395905312510811d0535148125160621b6044820152606401610759565b60ff84166000908152600960205260409020546124475760405162461bcd60e51b8152602060048201526017602482015276496e76616c6964204564676520466c69702052616e676560481b6044820152606401610759565b6000612453863461316e565b90506000612710600654836124689190613213565b612472919061315a565b6008549091506001600160a01b0316158061248d5750600754155b156124a25761249d81858c6125c6565b6124f2565b60006064600754836124b49190613213565b6124be919061315a565b905060006124cc828461316e565b90506124d981878e6125c6565b6008546124ef906001600160a01b031683612670565b50505b600085815260046020526040902080546001600160a01b0319166001600160a01b038c16178155600101829055612529818361316e565b6000868152600460205260409020600281019190915560038101805460ff191660ff8916179055426005909101556125618a8661274a565b61256b8a8361283e565b896001600160a01b03167fea32a03505fd9f04d664676d72295a86c5fb0465e69654751907ca305bc1d1c7866040516125a691815260200190565b60405180910390a26125ba8560018561293c565b50505050505050505050565b6000805160206132e58339815191526001600160a01b031663b3f006746040518163ffffffff1660e01b8152600401602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906130ed565b60405163bc5101e560e01b81526001600160a01b0384811660048301528381166024830152919091169063bc5101e59085906044016121f3565b604080516000808252602082019092526001600160a01b03841690839060405161269a9190613265565b60006040518083038185875af1925050503d80600081146126d7576040519150601f19603f3d011682016040523d82523d6000602084013e6126dc565b606091505b5050905080610c7d5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610759565b604051639a4918c160e01b81526001600160a01b0383811660048301527f000000000000000000000000000000000000000000000000000000000000000c6024830152604482018390527f000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa1690639a4918c190606401600060405180830381600087803b1580156127da57600080fd5b505af11580156127ee573d6000803e3d6000fd5b50506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601849055600093845260026020526040909320805460ff1916909317909255505050565b6000805160206132e58339815191526001600160a01b031663846c43986040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ae91906130ed565b60405163759ecdf560e11b81526001600160a01b038481166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000c6044830152919091169063eb3d9bea90606401600060405180830381600087803b15801561292057600080fd5b505af1158015612934573d6000803e3d6000fd5b505050505050565b60006000805160206132e58339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ae91906130ed565b6001600160a01b03166397cca7af6129c4611b73565b6040516001600160e01b031960e084901b1681526004810186905260ff8716602482015260440160206040518083038185885af1158015612a09573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a2e91906132c7565b6001600160401b03811660009081526003602052604090205490915015612a8a5760405162461bcd60e51b815260206004820152601060248201526f52657175657374496420496e2055736560801b6044820152606401610759565b6001600160401b038116600090815260036020908152604091829020869055815160016264c53160e01b0319815291516000805160206132e58339815191529263ff9b3acf9260048083019391928290030181865afa158015612af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1591906130ed565b6001600160a01b0316638d7fe4786040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b4f57600080fd5b505af1158015612b63573d6000803e3d6000fd5b505050507f9ac10fb18c93d33ad7b0a941897aef048d0f8d30756684e82b4552ba12764d4584604051612b9891815260200190565b60405180910390a150505050565b600060208284031215612bb857600080fd5b5035919050565b6001600160a01b0381168114612bd457600080fd5b50565b600060208284031215612be957600080fd5b8135612bf481612bbf565b9392505050565b60008060408385031215612c0e57600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b82811015612c4f578151865260209586019590910190600101612c31565b5093949350505050565b602081526000612bf46020830184612c1d565b60008060408385031215612c7f57600080fd5b8235612c8a81612bbf565b946020939093013593505050565b60018060a01b0381511682526020810151602083015260ff604082015116604083015260ff60608201511660608301526080810151608083015260a0810151151560a083015260c081015160c08301525050565b60e08101610b778284612c98565b60008083601f840112612d0c57600080fd5b5081356001600160401b03811115612d2357600080fd5b6020830191508360208260051b8501011115612d3e57600080fd5b9250929050565b60008060208385031215612d5857600080fd5b82356001600160401b03811115612d6e57600080fd5b612d7a85828601612cfa565b90969095509350505050565b602080825282518282018190526000918401906040840190835b81811015612dc957612db3838551612c98565b6020939093019260e09290920191600101612da0565b509095945050505050565b803560ff81168114612de557600080fd5b919050565b600060208284031215612dfc57600080fd5b612bf482612dd4565b6001600160401b0381168114612bd457600080fd5b600080600060408486031215612e2f57600080fd5b8335612e3a81612e05565b925060208401356001600160401b03811115612e5557600080fd5b612e6186828701612cfa565b9497909650939450505050565b600081518084526020840193506020830160005b82811015612c4f5781511515865260209586019590910190600101612e82565b602081526000612bf46020830184612e6e565b60005b83811015612ed0578181015183820152602001612eb8565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015612f4d57603f1987860301845281518051808752612f2a816020890160208501612eb5565b601f01601f19169590950160209081019550938401939190910190600101612f01565b50929695505050505050565b60a08082528651908201819052600090602088019060c0840190835b81811015612f9c5783516001600160a01b0316835260209384019390920191600101612f75565b50508381036020850152612fb08189612c1d565b9150508281036040840152612fc58187612c1d565b90508281036060840152612fd98186612c1d565b90508281036080840152612fed8185612e6e565b98975050505050505050565b6000806000806040858703121561300f57600080fd5b84356001600160401b0381111561302557600080fd5b61303187828801612cfa565b90955093505060208501356001600160401b0381111561305057600080fd5b61305c87828801612cfa565b95989497509550505050565b60008060006040848603121561307d57600080fd5b833561308881612bbf565b925060208401356001600160401b038111156130a357600080fd5b8401601f810186136130b457600080fd5b80356001600160401b038111156130ca57600080fd5b8660208284010111156130dc57600080fd5b939660209190910195509293505050565b6000602082840312156130ff57600080fd5b8151612bf481612bbf565b6020808252600a908201526927b7363c9027bbb732b960b11b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826131695761316961312e565b500490565b81810381811115610b7757610b77613144565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160401b038516815260208101849052606060408201819052810182905260006001600160fb1b038311156131e457600080fd5b8260051b808560808501379190910160800195945050505050565b60008261320e5761320e61312e565b500690565b8082028115828204841417610b7757610b77613144565b60006020828403121561323c57600080fd5b81518015158114612bf457600080fd5b60006020828403121561325e57600080fd5b5051919050565b60008251613277818460208701612eb5565b9190910192915050565b6000806000806080858703121561329757600080fd5b6132a085612dd4565b93506020850135925060408501356132b781612bbf565b9396929550929360600135925050565b6000602082840312156132d957600080fd5b8151612bf481612e0556fe0000000000000000000000008632f22e5a921c751cfbbff92f058a3b11e96b8aa264697066735822122024c9925682ff758cc5b181f18f0ecd3c8efad1f48cfc25b0a3faf1c76209b28b64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa
-----Decoded View---------------
Arg [0] : history_ (address): 0xFa296156dAc165Af92F7Fdb012B61a874670e1AA
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa
Deployed Bytecode Sourcemap
13096:10178:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6794:70;;;;;;;;;;;;;:::i;:::-;;14536:22;;;;;;;;;;-1:-1:-1;14536:22:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;14536:22:0;;;;;;;;11571:91;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;370:32:1;;;352:51;;340:2;325:18;11571:91:0;206:203:1;14037:40:0;;;;;;;;;;-1:-1:-1;14037:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14037:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;992:32:1;;;974:51;;1056:2;1041:18;;1034:34;;;;1084:18;;;1077:34;;;;1159:4;1147:17;;;1142:2;1127:18;;1120:45;1202:17;;1196:3;1181:19;;1174:46;1012:3;1236:19;;1229:35;1295:3;1280:19;;1273:35;1352:14;1345:22;1339:3;1324:19;;1317:51;961:3;946:19;14037:40:0;645:729:1;15595:263:0;;;;;;;;;;-1:-1:-1;15595:263:0;;;;;:::i;:::-;;:::i;14221:32::-;;;;;;;;;;;;;;;;;;;1525:25:1;;;1513:2;1498:18;14221:32:0;1379:177:1;15982:191:0;;;;;;;;;;-1:-1:-1;15982:191:0;;;;;:::i;:::-;;:::i;15866:108::-;;;;;;;;;;-1:-1:-1;15866:108:0;;;;;:::i;:::-;;:::i;12136:409::-;;;;;;;;;;-1:-1:-1;12136:409:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6872:155::-;;;;;;;;;;-1:-1:-1;6872:155:0;;;;;:::i;:::-;;:::i;21045:513::-;;;;;;;;;;-1:-1:-1;21045:513:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1012:107::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1012:107:0;;21566:413;;;;;;;;;;-1:-1:-1;21566:413:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11670:135::-;;;;;;;;;;-1:-1:-1;11670:135:0;;;;;:::i;:::-;;:::i;14326:29::-;;;;;;;;;;-1:-1:-1;14326:29:0;;;;-1:-1:-1;;;;;14326:29:0;;;5943:26;;;;;;;;;;-1:-1:-1;5943:26:0;;;;;;;;14414:57;;;;;;;;;;-1:-1:-1;14414:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;19251:1786;;;;;;;;;;-1:-1:-1;19251:1786:0;;;;;:::i;:::-;;:::i;11813:315::-;;;;;;;;;;-1:-1:-1;11813:315:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6718:68::-;;;;;;;;;;;;;:::i;6016:28::-;;;;;;;;;;-1:-1:-1;6016:28:0;;;;;:::i;:::-;;:::i;21987:370::-;;;;;;;;;;-1:-1:-1;21987:370:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14286:33::-;;;;;;;;;;;;;;;;5848:40;;;;;;;;;;;;;;;7035:143;;;;;;;;;;-1:-1:-1;7035:143:0;;;;;:::i;:::-;;:::i;22365:906::-;;;;;;;;;;-1:-1:-1;22365:906:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;16181:696::-;;;;;;;;;;-1:-1:-1;16181:696:0;;;;;:::i;:::-;;:::i;7750:260::-;;;;;;:::i;:::-;;:::i;12553:102::-;;;;;;;;;;-1:-1:-1;12629:11:0;:18;12553:102;;7532:105;;;;;;;;;;;;;:::i;5783:32::-;;;;;;;;;;;;;;;6794:70;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;;;;;;;;;6851:5:::1;6842:14:::0;;-1:-1:-1;;6842:14:0::1;::::0;;6794:70::o;11571:91::-;11612:7;-1:-1:-1;;;;;;;;;;;;;;;;11639:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11632:22;;11571:91;:::o;15595:263::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;15707:20:::1;15725:2;14644:6;15707:20;:::i;:::-;15692:11;:35;;15670:101;;;::::0;-1:-1:-1;;;15670:101:0;;13269:2:1;15670:101:0::1;::::0;::::1;13251:21:1::0;13308:2;13288:18;;;13281:30;-1:-1:-1;;;13327:18:1;;;13320:46;13383:18;;15670:101:0::1;13067:340:1::0;15670:101:0::1;15782:11;:25:::0;;;15823:27:::1;::::0;1525:25:1;;;15823:27:0::1;::::0;1513:2:1;1498:18;15823:27:0::1;;;;;;;15595:263:::0;:::o;15982:191::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;16085:3:::1;16076:6;:12;16054:78;;;::::0;-1:-1:-1;;;16054:78:0;;13614:2:1;16054:78:0::1;::::0;::::1;13596:21:1::0;13653:2;13633:18;;;13626:30;-1:-1:-1;;;13672:18:1;;;13665:46;13728:18;;16054:78:0::1;13412:340:1::0;16054:78:0::1;16143:13;:22:::0;15982:191::o;15866:108::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;15941:14:::1;:25:::0;;-1:-1:-1;;;;;;15941:25:0::1;-1:-1:-1::0;;;;;15941:25:0;;;::::1;::::0;;;::::1;::::0;;15866:108::o;12136:409::-;12255:11;:18;12216:16;;12249:24;;12245:81;;;12296:11;:18;;-1:-1:-1;12245:81:0;12336:20;12373:11;12379:5;12373:3;:11;:::i;:::-;-1:-1:-1;;;;;12359:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12359:26:0;-1:-1:-1;12336:49:0;-1:-1:-1;12410:5:0;12396:121;12421:3;12417:1;:7;12396:121;;;12459:11;12471:1;12459:14;;;;;;;;:::i;:::-;;;;;;;;;12442:3;12450:5;12446:1;:9;;;;:::i;:::-;12442:14;;;;;;;;:::i;:::-;;;;;;;;;;:31;12500:3;;12396:121;;;-1:-1:-1;12534:3:0;-1:-1:-1;12136:409:0;;;;;:::o;6872:155::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;6952:6:::1;6971:2;-1:-1:-1::0;;;;;6963:16:0::1;6987:6;6963:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6951:47;;;7017:1;7009:10;;;::::0;::::1;;6940:87;6872:155:::0;;:::o;21045:513::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21164:386:0;;;;;;;;-1:-1:-1;21206:13:0;;;:5;:13;;;;;;;:20;;-1:-1:-1;;;;;21206:20:0;21164:386;;21206:20;21252:23;;;21164:386;;;;21305:27;;;;;;;;21164:386;;;;;;;21206:20;21362:27;;;;21164:386;;;;21417:25;;;;21164:386;;;;21467:22;;;;;;;21164:386;;;;;;21515:13;;;;;;;:23;;;21164:386;;;;;21045:513::o;21566:413::-;21650:27;21707:7;21696:8;21707:7;-1:-1:-1;;;;;21771:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21771:29:0;;-1:-1:-1;;21771:29:0;;;;;;;;;;;;21732:68;;21826:6;21821:123;21842:3;21838:1;:7;21821:123;;;21877:23;21889:7;;21897:1;21889:10;;;;;;;:::i;:::-;;;;;;;21877:11;:23::i;:::-;21863:8;21872:1;21863:11;;;;;;;;:::i;:::-;;;;;;;;;;:37;21927:3;;21821:123;;;-1:-1:-1;21963:8:0;21566:413;-1:-1:-1;;;;21566:413:0:o;11670:135::-;11730:4;11754:20;;;:12;:20;;;;;;;;:29;;;:43;;-1:-1:-1;;11787:10:0;;;11670:135::o;19251:1786::-;-1:-1:-1;;;;;;;;;;;;;;;;1490:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1476:27:0;:10;-1:-1:-1;;;;;1476:27:0;;1454:94;;;;-1:-1:-1;;;1454:94:0;;14566:2:1;1454:94:0;;;14548:21:1;14605:2;14585:18;;;14578:30;-1:-1:-1;;;14624:18:1;;;14617:47;14681:18;;1454:94:0;14364:341:1;1454:94:0;-1:-1:-1;;;;;11531:24:0;;19432:14:::1;11531:24:::0;;;:13;:24;;;;;;19524:25:::1;11531:24:::0;19524:14:::1;:25::i;:::-;19601:17;19621:13:::0;;;:5:::1;:13;::::0;;;;:23:::1;::::0;::::1;::::0;19677:27:::1;::::0;;::::1;::::0;::::1;;19776:11:::0;;;:63:::1;;-1:-1:-1::0;19837:1:0::1;19805:13:::0;;;:5:::1;:13;::::0;;;;:20;-1:-1:-1;;;;;19805:20:0::1;:34:::0;19776:63:::1;:111;;;-1:-1:-1::0;19857:13:0::1;::::0;;;:5:::1;:13;::::0;;;;:22:::1;;::::0;::::1;;:30;;:22:::0;:30:::1;19776:111;:142;;;-1:-1:-1::0;19904:14:0;;19776:142:::1;:200;;;-1:-1:-1::0;19935:36:0::1;::::0;::::1;;::::0;;;:21:::1;:36;::::0;;;;;:41;19776:200:::1;19758:333;;;20008:50;20027:9;20038:6;20046:11;;20008:50;;;;;;;;;:::i;:::-;;;;;;;;20073:7;;;6940:87;6872:155:::0;;:::o;19758:333::-:1;20134:13;::::0;;;:5:::1;:13;::::0;;;;:22:::1;;:29:::0;;-1:-1:-1;;20134:29:0::1;20159:4;20134:29;::::0;;:13;20399:3:::1;20382:11:::0;;20134:13;20382:14;::::1;;;;:::i;:::-;;;;;;;:20;;;;:::i;:::-;20447:13;::::0;;;:5:::1;:13;::::0;;;;:27:::1;;:43:::0;;::::1;::::0;;::::1;;::::0;::::1;-1:-1:-1::0;;20447:43:0;;::::1;::::0;;;::::1;::::0;;;20354:49;;-1:-1:-1;20507:29:0;::::1;-1:-1:-1::0;20503:207:0::1;;;20630:36;::::0;::::1;;::::0;;;:21:::1;:36;::::0;;;;;14644:6:::1;::::0;20630:48:::1;::::0;20669:9;;20630:48:::1;:::i;:::-;20628:70;;;;:::i;:::-;20612:86;;20503:207;20751:13;::::0;;;:5:::1;:13;::::0;;;;;;;:25;;::::1;:41:::0;;;20846:20;;20883:28:::1;::::0;;::::1;::::0;20832:80:::1;::::0;-1:-1:-1;;;;;20846:20:0::1;::::0;20779:13;;20832::::1;:80::i;:::-;20974:13;::::0;;;:5:::1;:13;::::0;;;;;;;;:20;20964:65;;15818:25:1;;;15859:18;;;15852:34;;;15902:18;;;15895:34;;;-1:-1:-1;;;;;20974:20:0;;::::1;::::0;20964:65:::1;::::0;15806:2:1;15791:18;20964:65:0::1;;;;;;;19380:1657;;;;;19251:1786:::0;;;:::o;11813:315::-;11895:20;11939:7;;-1:-1:-1;;;;;11973:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11973:15:0;;11964:24;;12004:6;11999:122;12020:3;12016:1;:7;11999:122;;;12053:12;:24;12066:7;;12074:1;12066:10;;;;;;;:::i;:::-;;;;;;;12053:24;;;;;;;;;;;;;;;;;;;;;12041:6;12048:1;12041:9;;;;;;;;:::i;:::-;:36;;;:9;;;;;;;;;;;:36;12104:3;;11999:122;;;;11917:211;11813:315;;;;:::o;6718:68::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;6765:6:::1;:13:::0;;-1:-1:-1;;6765:13:0::1;6774:4;6765:13;::::0;;6718:68::o;6016:28::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6016:28:0;:::o;21987:370::-;22073:14;22111:7;22100:8;22111:7;-1:-1:-1;;;;;22162:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22136:42;;22194:6;22189:135;22210:3;22206:1;:7;22189:135;;;22256:23;22268:7;;22276:1;22268:10;;;;;;;:::i;22256:23::-;22245:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;22231:8;22240:1;22231:11;;;;;;;;:::i;:::-;;;;;;;;;;:49;22307:3;;22189:135;;7035:143;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;7116:54:::1;7144:5;7151:10;7163:6;7116:27;:54::i;:::-;7035:143:::0;;:::o;22365:906::-;22465:24;;;;;22671:7;;-1:-1:-1;;;;;22706:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22706:18:0;;22696:28;;22764:3;-1:-1:-1;;;;;22750:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22750:18:0;;22735:33;;22808:3;-1:-1:-1;;;;;22794:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22794:18:0;;22779:33;;22850:3;-1:-1:-1;;;;;22836:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22836:18:0;;22823:31;;22888:3;-1:-1:-1;;;;;22877:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22877:15:0;;22865:27;;22910:6;22905:359;22926:3;22922:1;:7;22905:359;;;22960:5;:17;22966:7;;22974:1;22966:10;;;;;;;:::i;:::-;;;;;;;22960:17;;;;;;;;;;;:24;;;;;;;;;;-1:-1:-1;;;;;22960:24:0;22947:7;22955:1;22947:10;;;;;;;;:::i;:::-;;;;;;:37;-1:-1:-1;;;;;22947:37:0;;;-1:-1:-1;;;;;22947:37:0;;;;;23017:5;:17;23023:7;;23031:1;23023:10;;;;;;;:::i;:::-;;;;;;;23017:17;;;;;;;;;;;:27;;;22999:12;23012:1;22999:15;;;;;;;;:::i;:::-;;;;;;:45;;;;;23077:5;:17;23083:7;;23091:1;23083:10;;;;;;;:::i;:::-;;;;;;;23077:17;;;;;;;;;;;:29;;;23059:12;23072:1;23059:15;;;;;;;;:::i;:::-;;;;;;:47;;;;;23137:5;:17;23143:7;;23151:1;23143:10;;;;;;;:::i;:::-;;;;;;;23137:17;;;;;;;;;;;:27;;;23121:10;23132:1;23121:13;;;;;;;;:::i;:::-;;;;;;:43;;;;;23194:5;:17;23200:7;;23208:1;23200:10;;;;;;;:::i;:::-;;;;;;;23194:17;;;;;;;;;;;:26;;;;;;;;;;;;23179:9;23189:1;23179:12;;;;;;;;:::i;:::-;:41;;;:12;;;;;;;;;;;:41;23247:3;;22905:359;;;;22649:622;22365:906;;;;;;;;:::o;16181:696::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;16345:39;;::::1;16323:104;;;::::0;-1:-1:-1;;;16323:104:0;;16142:2:1;16323:104:0::1;::::0;::::1;16124:21:1::0;16181:2;16161:18;;;16154:30;-1:-1:-1;;;16200:18:1;;;16193:45;16255:18;;16323:104:0::1;15940:339:1::0;16323:104:0::1;16445:6;16440:430;16457:25:::0;;::::1;16440:430;;;16546:3;16526:14;;16541:1;16526:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:23;;;:48;;;;;16573:1;16553:14;;16568:1;16553:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:21;;;16526:48;16500:133;;;::::0;-1:-1:-1;;;16500:133:0;;16486:2:1;16500:133:0::1;::::0;::::1;16468:21:1::0;16525:2;16505:18;;;16498:30;-1:-1:-1;;;16544:18:1;;;16537:53;16607:18;;16500:133:0::1;16284:347:1::0;16500:133:0::1;16687:21;14644:6;16687:3;:21;:::i;:::-;16674:7;;16682:1;16674:10;;;;;;;:::i;:::-;;;;;;;:34;16648:110;;;::::0;-1:-1:-1;;;16648:110:0;;16838:2:1;16648:110:0::1;::::0;::::1;16820:21:1::0;16877:2;16857:18;;;16850:30;-1:-1:-1;;;16896:18:1;;;16889:44;16950:18;;16648:110:0::1;16636:338:1::0;16648:110:0::1;16816:7;;16824:1;16816:10;;;;;;;:::i;:::-;;;;;;;16773:21;:40;16795:14;;16810:1;16795:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16773:40;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16773:40:0;:53;16853:3:::1;;16440:430;;;;16181:696:::0;;;;:::o;7750:260::-;7846:6;-1:-1:-1;;;;;1631:20:0;;1641:10;1631:20;1627:182;;1694:36;;-1:-1:-1;;;1694:36:0;;1719:10;1694:36;;;352:51:1;-1:-1:-1;;;;;;;;;;;1076:42:0;1694:24;;325:18:1;;1694:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1668:129;;;;-1:-1:-1;;;1668:129:0;;17463:2:1;1668:129:0;;;17445:21:1;17502:2;17482:18;;;17475:30;17541:33;17521:18;;;17514:61;17592:18;;1668:129:0;17261:355:1;1668:129:0;-1:-1:-1;;;;;;;;;;;;;;;;1890:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:25;1868:91;;;::::0;-1:-1:-1;;;1868:91:0;;17823:2:1;1868:91:0::1;::::0;::::1;17805:21:1::0;17862:2;17842:18;;;17835:30;-1:-1:-1;;;17881:18:1;;;17874:46;17937:18;;1868:91:0::1;17621:340:1::0;1868:91:0::1;7900:6:::2;::::0;::::2;;7899:7;7877:63;;;::::0;-1:-1:-1;;;7877:63:0;;18168:2:1;7877:63:0::2;::::0;::::2;18150:21:1::0;18207:1;18187:18;;;18180:29;-1:-1:-1;;;18225:18:1;;;18218:36;18271:18;;7877:63:0::2;17966:329:1::0;7877:63:0::2;7975:27;7985:6;7993:8;;7975:9;:27::i;:::-;7750:260:::0;;;;:::o;7532:105::-;7574:7;-1:-1:-1;;;;;;;;;;;;;;;;7606:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7601:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11201:224::-;-1:-1:-1;;;;;;;;;;;;;;;;11307:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11300:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;11393:24:0;;;;;:13;:24;;;;;11386:31;11201:224::o;8105:1941::-;8217:17;;8213:1824;;8326:14;8309:13;:31;8305:1552;;-1:-1:-1;;;;;;;;;;;;;;;;8696:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8682:145;;-1:-1:-1;;;8682:145:0;;8772:7;8682:145;;;18663:25:1;-1:-1:-1;;;;;18724:32:1;;;18704:18;;;18697:60;8682:44:0;;;;;;;8734:14;;18636:18:1;;8682:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8887:17;8923:14;8907:13;:30;;;;:::i;:::-;8887:50;-1:-1:-1;8960:13:0;;8956:175;;-1:-1:-1;;;;;;;;;;;;;;;;9060:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9053:58;;-1:-1:-1;;;9053:58:0;;9084:7;9053:58;;;18970:25:1;-1:-1:-1;;;;;19031:32:1;;;19011:18;;;19004:60;19080:18;;;19073:34;;;9053:30:0;;;;;;;18943:18:1;;9053:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8342:822;6940:87:::1;6872:155:::0;;:::o;8305:1552::-;-1:-1:-1;;;;;;;;;;;;;;;;9443:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9429:144;;-1:-1:-1;;;9429:144:0;;9518:7;9429:144;;;18663:25:1;-1:-1:-1;;;;;18724:32:1;;;18704:18;;;18697:60;9429:44:0;;;;;;;9481:13;;18636:18:1;;9429:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9653:17;9690:13;9673:14;:30;;;;:::i;:::-;9653:50;;-1:-1:-1;;;;;;;;;;;;;;;;9783:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9776:35:0;;9819:9;9831:7;9776:63;;;;;;;;;;;;;1525:25:1;;1513:2;1498:18;;1379:177;9776:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9170:687;6940:87:::1;6872:155:::0;;:::o;8213:1824::-;-1:-1:-1;;;;;;;;;;;;;;;;9964:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9957:35:0;;10000:14;10017:7;9957:68;;;;;;;;;;;;;1525:25:1;;1513:2;1498:18;;1379:177;9957:68:0;;;;;;;;;;;;;;;;;;;;3503:449;3735:45;;;-1:-1:-1;;;;;19310:32:1;;;3735:45:0;;;19292:51:1;19359:18;;;;19352:34;;;3735:45:0;;;;;;;;;;19265:18:1;;;;3735:45:0;;;;;;;-1:-1:-1;;;;;3735:45:0;-1:-1:-1;;;3735:45:0;;;3724:57;;-1:-1:-1;;;;3724:10:0;;;;:57;;3735:45;3724:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3688:93;;;;3814:7;:57;;;;-1:-1:-1;3826:11:0;;:16;;:44;;;3857:4;3846:24;;;;;;;;;;;;:::i;:::-;3792:152;;;;-1:-1:-1;;;3792:152:0;;19891:2:1;3792:152:0;;;19873:21:1;19930:2;19910:18;;;19903:30;19969:34;19949:18;;;19942:62;-1:-1:-1;;;20020:18:1;;;20013:43;20073:19;;3792:152:0;19689:409:1;16885:2292:0;17006:14;17023:11;:9;:11::i;:::-;17006:28;-1:-1:-1;17090:19:0;;;;17215:56;;;;17226:8;17215:56;:::i;:::-;17075:196;;;;;;;;17347:6;17334:9;:19;;17312:84;;;;-1:-1:-1;;;17312:84:0;;20824:2:1;17312:84:0;;;20806:21:1;20863:2;20843:18;;;20836:30;-1:-1:-1;;;20882:18:1;;;20875:45;20937:18;;17312:84:0;20622:339:1;17312:84:0;17429:21;17443:6;17429:13;:21::i;:::-;:29;;17454:4;17429:29;17407:99;;;;-1:-1:-1;;;17407:99:0;;21168:2:1;17407:99:0;;;21150:21:1;21207:2;21187:18;;;21180:30;-1:-1:-1;;;21226:18:1;;;21219:50;21286:18;;17407:99:0;20966:344:1;17407:99:0;17539:36;;;17578:1;17539:36;;;:21;:36;;;;;;17517:113;;;;-1:-1:-1;;;17517:113:0;;16486:2:1;17517:113:0;;;16468:21:1;16525:2;16505:18;;;16498:30;-1:-1:-1;;;16544:18:1;;;16537:53;16607:18;;17517:113:0;16284:347:1;17517:113:0;17682:22;17707:18;17719:6;17707:9;:18;:::i;:::-;17682:43;;17786:25;14644:6;17833:11;;17816:14;:28;;;;:::i;:::-;17814:50;;;;:::i;:::-;17881:14;;17786:78;;-1:-1:-1;;;;;;17881:14:0;:28;;:50;;-1:-1:-1;17913:13:0;;:18;17881:50;17877:680;;;18018:43;18030:17;18049:3;18054:6;18018:11;:43::i;:::-;17877:680;;;18126:18;18187:3;18169:13;;18149:17;:33;;;;:::i;:::-;18147:43;;;;:::i;:::-;18126:64;-1:-1:-1;18250:26:0;18279:30;18126:64;18279:17;:30;:::i;:::-;18250:59;;18394:44;18406:18;18426:3;18431:6;18394:11;:44::i;:::-;18518:14;;18487:58;;-1:-1:-1;;;;;18518:14:0;18534:10;18487:30;:58::i;:::-;18081:476;;17877:680;18596:13;;;;:5;:13;;;;;:29;;-1:-1:-1;;;;;;18596:29:0;-1:-1:-1;;;;;18596:29:0;;;;;-1:-1:-1;18636:23:0;:40;;;18718:34;18735:17;18636:40;18718:34;:::i;:::-;18687:13;;;;:5;:13;;;;;:28;;;:65;;;;18763:27;;;:43;;-1:-1:-1;;18763:43:0;;;;;;;18843:15;18817:23;;;;:41;18900:31;18916:6;18687:13;18900:15;:31::i;:::-;18969:36;18982:6;18990:14;18969:12;:36::i;:::-;19066:6;-1:-1:-1;;;;;19054:27:0;;19074:6;19054:27;;;;1525:25:1;;1513:2;1498:18;;1379:177;19054:27:0;;;;;;;;19126:41;19141:6;19149:1;19152:14;19126;:41::i;:::-;16963:2214;;;;;;;16885:2292;;;:::o;7348:172::-;-1:-1:-1;;;;;;;;;;;;;;;;7451:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7437:75;;-1:-1:-1;;;7437:75:0;;-1:-1:-1;;;;;21507:32:1;;;7437:75:0;;;21489:51:1;21576:32;;;21556:18;;;21549:60;7437:44:0;;;;;;;7489:9;;21462:18:1;;7437:75:0;21315:300:1;4466:217:0;4579:12;;;4539;4579;;;;;;;;;-1:-1:-1;;;;;4557:7:0;;;4572:5;;4557:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4538:54;;;4611:7;4603:72;;;;-1:-1:-1;;;4603:72:0;;21822:2:1;4603:72:0;;;21804:21:1;21861:2;21841:18;;;21834:30;21900:34;21880:18;;;21873:62;-1:-1:-1;;;21951:18:1;;;21944:50;22011:19;;4603:72:0;21620:416:1;10135:272:0;10243:40;;-1:-1:-1;;;10243:40:0;;-1:-1:-1;;;;;22261:32:1;;;10243:40:0;;;22243:51:1;10267:7:0;22310:18:1;;;22303:34;22353:18;;;22346:34;;;10243:7:0;:15;;;;22216:18:1;;10243:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10337:11:0;:24;;;;;;;;;;;;-1:-1:-1;10372:20:0;;;:12;10337:24;10372:20;;;;;:27;;-1:-1:-1;;10372:27:0;;;;;;;-1:-1:-1;;;10135:272:0:o;7186:154::-;-1:-1:-1;;;;;;;;;;;;;;;;7275:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7258:74;;-1:-1:-1;;;7258:74:0;;-1:-1:-1;;;;;22261:32:1;;;7258:74:0;;;22243:51:1;22310:18;;;22303:34;;;7324:7:0;22353:18:1;;;22346:34;7258:51:0;;;;;;;22216:18:1;;7258:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7186:154;;:::o;10415:778::-;10568:16;-1:-1:-1;;;;;;;;;;;;;;;;10592:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10587:33:0;;10628:11;:9;:11::i;:::-;10587:185;;-1:-1:-1;;;;;;10587:185:0;;;;;;;;;;22561:25:1;;;22634:4;22622:17;;22602:18;;;22595:45;22534:18;;10587:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10856:24:0;;;;;;:13;:24;;;;;;10568:204;;-1:-1:-1;10856:29:0;10834:95;;;;-1:-1:-1;;;10834:95:0;;23107:2:1;10834:95:0;;;23089:21:1;23146:2;23126:18;;;23119:30;-1:-1:-1;;;23165:18:1;;;23158:46;23221:18;;10834:95:0;22905:340:1;10834:95:0;-1:-1:-1;;;;;11000:24:0;;;;;;:13;:24;;;;;;;;;:33;;;11083:15;;-1:-1:-1;;;;;;11083:15:0;;;;-1:-1:-1;;;;;;;;;;;1076:42:0;11083:13;;:15;;;;;11000:24;;11083:15;;;;;1076:42;11083:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11076:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11158:27;11178:6;11158:27;;;;1525:25:1;;1513:2;1498:18;;1379:177;11158:27:0;;;;;;;;10504:689;10415:778;;;:::o;414:226:1:-;473:6;526:2;514:9;505:7;501:23;497:32;494:52;;;542:1;539;532:12;494:52;-1:-1:-1;587:23:1;;414:226;-1:-1:-1;414:226:1:o;1561:131::-;-1:-1:-1;;;;;1636:31:1;;1626:42;;1616:70;;1682:1;1679;1672:12;1616:70;1561:131;:::o;1697:247::-;1756:6;1809:2;1797:9;1788:7;1784:23;1780:32;1777:52;;;1825:1;1822;1815:12;1777:52;1864:9;1851:23;1883:31;1908:5;1883:31;:::i;:::-;1933:5;1697:247;-1:-1:-1;;;1697:247:1:o;1949:346::-;2017:6;2025;2078:2;2066:9;2057:7;2053:23;2049:32;2046:52;;;2094:1;2091;2084:12;2046:52;-1:-1:-1;;2139:23:1;;;2259:2;2244:18;;;2231:32;;-1:-1:-1;1949:346:1:o;2300:420::-;2353:3;2391:5;2385:12;2418:6;2413:3;2406:19;2450:4;2445:3;2441:14;2434:21;;2489:4;2482:5;2478:16;2512:1;2522:173;2536:6;2533:1;2530:13;2522:173;;;2597:13;;2585:26;;2640:4;2631:14;;;;2668:17;;;;2558:1;2551:9;2522:173;;;-1:-1:-1;2711:3:1;;2300:420;-1:-1:-1;;;;2300:420:1:o;2725:261::-;2904:2;2893:9;2886:21;2867:4;2924:56;2976:2;2965:9;2961:18;2953:6;2924:56;:::i;2991:367::-;3059:6;3067;3120:2;3108:9;3099:7;3095:23;3091:32;3088:52;;;3136:1;3133;3126:12;3088:52;3175:9;3162:23;3194:31;3219:5;3194:31;:::i;:::-;3244:5;3322:2;3307:18;;;;3294:32;;-1:-1:-1;;;2991:367:1:o;3363:503::-;3482:1;3478;3473:3;3469:11;3465:19;3457:5;3451:12;3447:38;3442:3;3435:51;3535:4;3528:5;3524:16;3518:23;3511:4;3506:3;3502:14;3495:47;3603:4;3595;3588:5;3584:16;3578:23;3574:34;3567:4;3562:3;3558:14;3551:58;3670:4;3662;3655:5;3651:16;3645:23;3641:34;3634:4;3629:3;3625:14;3618:58;3725:4;3718:5;3714:16;3708:23;3701:4;3696:3;3692:14;3685:47;3795:4;3788:5;3784:16;3778:23;3771:31;3764:39;3757:4;3752:3;3748:14;3741:63;3853:4;3846:5;3842:16;3836:23;3829:4;3824:3;3820:14;3813:47;;;3363:503::o;3871:280::-;4077:3;4062:19;;4090:55;4066:9;4127:6;4090:55;:::i;4389:367::-;4452:8;4462:6;4516:3;4509:4;4501:6;4497:17;4493:27;4483:55;;4534:1;4531;4524:12;4483:55;-1:-1:-1;4557:20:1;;-1:-1:-1;;;;;4589:30:1;;4586:50;;;4632:1;4629;4622:12;4586:50;4669:4;4661:6;4657:17;4645:29;;4729:3;4722:4;4712:6;4709:1;4705:14;4697:6;4693:27;4689:38;4686:47;4683:67;;;4746:1;4743;4736:12;4683:67;4389:367;;;;;:::o;4761:437::-;4847:6;4855;4908:2;4896:9;4887:7;4883:23;4879:32;4876:52;;;4924:1;4921;4914:12;4876:52;4964:9;4951:23;-1:-1:-1;;;;;4989:6:1;4986:30;4983:50;;;5029:1;5026;5019:12;4983:50;5068:70;5130:7;5121:6;5110:9;5106:22;5068:70;:::i;:::-;5157:8;;5042:96;;-1:-1:-1;4761:437:1;-1:-1:-1;;;;4761:437:1:o;5203:715::-;5465:2;5477:21;;;5547:13;;5450:18;;;5569:22;;;5417:4;;5648:15;;;5622:2;5607:18;;;5417:4;5691:201;5705:6;5702:1;5699:13;5691:201;;;5754:56;5806:3;5797:6;5791:13;5754:56;:::i;:::-;5879:2;5867:15;;;;;5839:4;5830:14;;;;;5727:1;5720:9;5691:201;;;-1:-1:-1;5909:3:1;;5203:715;-1:-1:-1;;;;;5203:715:1:o;5923:156::-;5989:20;;6049:4;6038:16;;6028:27;;6018:55;;6069:1;6066;6059:12;6018:55;5923:156;;;:::o;6084:182::-;6141:6;6194:2;6182:9;6173:7;6169:23;6165:32;6162:52;;;6210:1;6207;6200:12;6162:52;6233:27;6250:9;6233:27;:::i;6271:129::-;-1:-1:-1;;;;;6349:5:1;6345:30;6338:5;6335:41;6325:69;;6390:1;6387;6380:12;6405:570;6499:6;6507;6515;6568:2;6556:9;6547:7;6543:23;6539:32;6536:52;;;6584:1;6581;6574:12;6536:52;6623:9;6610:23;6642:30;6666:5;6642:30;:::i;:::-;6691:5;-1:-1:-1;6747:2:1;6732:18;;6719:32;-1:-1:-1;;;;;6763:30:1;;6760:50;;;6806:1;6803;6796:12;6760:50;6845:70;6907:7;6898:6;6887:9;6883:22;6845:70;:::i;:::-;6405:570;;6934:8;;-1:-1:-1;6819:96:1;;-1:-1:-1;;;;6405:570:1:o;6980:433::-;7030:3;7068:5;7062:12;7095:6;7090:3;7083:19;7127:4;7122:3;7118:14;7111:21;;7166:4;7159:5;7155:16;7189:1;7199:189;7213:6;7210:1;7207:13;7199:189;;;7288:13;;7281:21;7274:29;7262:42;;7333:4;7324:14;;;;7361:17;;;;7235:1;7228:9;7199:189;;7418:252;7591:2;7580:9;7573:21;7554:4;7611:53;7660:2;7649:9;7645:18;7637:6;7611:53;:::i;7675:250::-;7760:1;7770:113;7784:6;7781:1;7778:13;7770:113;;;7860:11;;;7854:18;7841:11;;;7834:39;7806:2;7799:10;7770:113;;;-1:-1:-1;;7917:1:1;7899:16;;7892:27;7675:250::o;7930:991::-;8090:4;8138:2;8127:9;8123:18;8168:2;8157:9;8150:21;8191:6;8226;8220:13;8257:6;8249;8242:22;8295:2;8284:9;8280:18;8273:25;;8357:2;8347:6;8344:1;8340:14;8329:9;8325:30;8321:39;8307:53;;8395:2;8387:6;8383:15;8416:1;8426:466;8440:6;8437:1;8434:13;8426:466;;;8533:2;8529:7;8517:9;8509:6;8505:22;8501:36;8496:3;8489:49;8567:6;8561:13;8609:2;8603:9;8640:8;8632:6;8625:24;8662:74;8727:8;8722:2;8714:6;8710:15;8705:2;8701;8697:11;8662:74;:::i;:::-;8802:2;8779:17;-1:-1:-1;;8775:31:1;8763:44;;;;8809:2;8759:53;;;;-1:-1:-1;8870:12:1;;;;8835:15;;;;;8462:1;8455:9;8426:466;;;-1:-1:-1;8909:6:1;;7930:991;-1:-1:-1;;;;;;7930:991:1:o;9157:1424::-;9653:3;9666:22;;;9737:13;;9638:19;;;9759:22;;;9605:4;;9851;9839:17;;;9812:3;9797:19;;;9605:4;9884:199;9898:6;9895:1;9892:13;9884:199;;;9963:13;;-1:-1:-1;;;;;9959:39:1;9947:52;;10028:4;10056:17;;;;10019:14;;;;9995:1;9913:9;9884:199;;;9888:3;;10130:9;10125:3;10121:19;10114:4;10103:9;10099:20;10092:49;10164:41;10201:3;10193:6;10164:41;:::i;:::-;10150:55;;;10253:9;10245:6;10241:22;10236:2;10225:9;10221:18;10214:50;10287:44;10324:6;10316;10287:44;:::i;:::-;10273:58;;10379:9;10371:6;10367:22;10362:2;10351:9;10347:18;10340:50;10413:44;10450:6;10442;10413:44;:::i;:::-;10399:58;;10506:9;10498:6;10494:22;10488:3;10477:9;10473:19;10466:51;10534:41;10568:6;10560;10534:41;:::i;:::-;10526:49;9157:1424;-1:-1:-1;;;;;;;;9157:1424:1:o;10586:766::-;10706:6;10714;10722;10730;10783:2;10771:9;10762:7;10758:23;10754:32;10751:52;;;10799:1;10796;10789:12;10751:52;10839:9;10826:23;-1:-1:-1;;;;;10864:6:1;10861:30;10858:50;;;10904:1;10901;10894:12;10858:50;10943:70;11005:7;10996:6;10985:9;10981:22;10943:70;:::i;:::-;11032:8;;-1:-1:-1;10917:96:1;-1:-1:-1;;11120:2:1;11105:18;;11092:32;-1:-1:-1;;;;;11136:32:1;;11133:52;;;11181:1;11178;11171:12;11133:52;11220:72;11284:7;11273:8;11262:9;11258:24;11220:72;:::i;:::-;10586:766;;;;-1:-1:-1;11311:8:1;-1:-1:-1;;;;10586:766:1:o;11357:721::-;11436:6;11444;11452;11505:2;11493:9;11484:7;11480:23;11476:32;11473:52;;;11521:1;11518;11511:12;11473:52;11560:9;11547:23;11579:31;11604:5;11579:31;:::i;:::-;11629:5;-1:-1:-1;11685:2:1;11670:18;;11657:32;-1:-1:-1;;;;;11701:30:1;;11698:50;;;11744:1;11741;11734:12;11698:50;11767:22;;11820:4;11812:13;;11808:27;-1:-1:-1;11798:55:1;;11849:1;11846;11839:12;11798:55;11889:2;11876:16;-1:-1:-1;;;;;11907:6:1;11904:30;11901:50;;;11947:1;11944;11937:12;11901:50;11992:7;11987:2;11978:6;11974:2;11970:15;11966:24;11963:37;11960:57;;;12013:1;12010;12003:12;11960:57;11357:721;;12044:2;12036:11;;;;;-1:-1:-1;12066:6:1;;-1:-1:-1;;;11357:721:1:o;12083:251::-;12153:6;12206:2;12194:9;12185:7;12181:23;12177:32;12174:52;;;12222:1;12219;12212:12;12174:52;12254:9;12248:16;12273:31;12298:5;12273:31;:::i;12339:334::-;12541:2;12523:21;;;12580:2;12560:18;;;12553:30;-1:-1:-1;;;12614:2:1;12599:18;;12592:40;12664:2;12649:18;;12339:334::o;12678:127::-;12739:10;12734:3;12730:20;12727:1;12720:31;12770:4;12767:1;12760:15;12794:4;12791:1;12784:15;12810:127;12871:10;12866:3;12862:20;12859:1;12852:31;12902:4;12899:1;12892:15;12926:4;12923:1;12916:15;12942:120;12982:1;13008;12998:35;;13013:18;;:::i;:::-;-1:-1:-1;13047:9:1;;12942:120::o;13757:128::-;13824:9;;;13845:11;;;13842:37;;;13859:18;;:::i;13890:127::-;13951:10;13946:3;13942:20;13939:1;13932:31;13982:4;13979:1;13972:15;14006:4;14003:1;13996:15;14022:127;14083:10;14078:3;14074:20;14071:1;14064:31;14114:4;14111:1;14104:15;14138:4;14135:1;14128:15;14710:611;-1:-1:-1;;;;;14954:31:1;;14936:50;;15017:2;15002:18;;14995:34;;;15065:2;15060;15045:18;;15038:30;;;15084:18;;15077:34;;;-1:-1:-1;;;;;;15123:31:1;;15120:51;;;15167:1;15164;15157:12;15120:51;15201:6;15198:1;15194:14;15259:6;15251;15245:3;15234:9;15230:19;15217:49;15287:22;;;;15311:3;15283:32;;14710:611;-1:-1:-1;;;;;14710:611:1:o;15326:112::-;15358:1;15384;15374:35;;15389:18;;:::i;:::-;-1:-1:-1;15423:9:1;;15326:112::o;15443:168::-;15516:9;;;15547;;15564:15;;;15558:22;;15544:37;15534:71;;15585:18;;:::i;16979:277::-;17046:6;17099:2;17087:9;17078:7;17074:23;17070:32;17067:52;;;17115:1;17112;17105:12;17067:52;17147:9;17141:16;17200:5;17193:13;17186:21;17179:5;17176:32;17166:60;;17222:1;17219;17212:12;18300:184;18370:6;18423:2;18411:9;18402:7;18398:23;18394:32;18391:52;;;18439:1;18436;18429:12;18391:52;-1:-1:-1;18462:16:1;;18300:184;-1:-1:-1;18300:184:1:o;19397:287::-;19526:3;19564:6;19558:13;19580:66;19639:6;19634:3;19627:4;19619:6;19615:17;19580:66;:::i;:::-;19662:16;;;;;19397:287;-1:-1:-1;;19397:287:1:o;20103:514::-;20195:6;20203;20211;20219;20272:3;20260:9;20251:7;20247:23;20243:33;20240:53;;;20289:1;20286;20279:12;20240:53;20312:27;20329:9;20312:27;:::i;:::-;20302:37;-1:-1:-1;20408:2:1;20393:18;;20380:32;;-1:-1:-1;20488:2:1;20473:18;;20460:32;20501:33;20460:32;20501:33;:::i;:::-;20103:514;;;;-1:-1:-1;20553:7:1;;20607:2;20592:18;20579:32;;-1:-1:-1;;20103:514:1:o;22651:249::-;22720:6;22773:2;22761:9;22752:7;22748:23;22744:32;22741:52;;;22789:1;22786;22779:12;22741:52;22821:9;22815:16;22840:30;22864:5;22840:30;:::i
Swarm Source
ipfs://24c9925682ff758cc5b181f18f0ecd3c8efad1f48cfc25b0a3faf1c76209b28b
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.