Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- OLD_GLORY_RISE
- Optimization enabled
- true
- Compiler version
- v0.8.26+commit.8a97fa7a
- Optimization runs
- 200
- EVM Version
- shanghai
- Verified at
- 2026-02-10T03:49:23.701621Z
Old_Glory_Rise_v2.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
/*
* @title Old Glory Rise Token - pSunDAI Rewards
* @notice Yield-bearing token with pSunDAI rewards
* @dev Battle-tested CST V6 pattern adapted for pSunDAI
*
* @custom:easter-egg
* - minYield: 0.369 pSunDAI (PulseChain chain ID 369!)
* - Burn address: 0x369
*
* @custom:version 10.0 PRODUCTION (CST V6 PROVEN)
*/
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address a) external view returns (uint256);
function transfer(address to, uint256 v) external returns (bool);
function allowance(address o, address s) external view returns (uint256);
function approve(address s, uint256 v) external returns (bool);
function transferFrom(address f, address t, uint256 v) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 v);
event Approval(address indexed owner, address indexed spender, uint256 v);
}
interface IERC20Metadata is IERC20 {
function decimals() external view returns (uint8);
}
library SafeERC20 {
function safeTransfer(IERC20 token, address to, uint256 value) internal {
require(token.transfer(to, value), "SafeERC20: transfer failed");
}
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed prev, address indexed next);
constructor() {
_transferOwnership(_msgSender());
}
modifier onlyOwner() {
require(owner() == _msgSender(), "not owner");
_;
}
function owner() public view returns (address) {
return _owner;
}
function renounceOwnership() public onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0), "zero");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal {
address old = _owner;
_owner = newOwner;
emit OwnershipTransferred(old, newOwner);
}
}
abstract contract ReentrancyGuard {
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status = _NOT_ENTERED;
modifier nonReentrant() {
require(_status != _ENTERED, "reentrant");
_status = _ENTERED;
_;
_status = _NOT_ENTERED;
}
}
contract ERC20 is Context, IERC20 {
uint256 internal _totalSupply;
mapping(address => uint256) internal _balances;
mapping(address => mapping(address => uint256)) internal _allowances;
string private _name;
string private _symbol;
uint8 private constant _decimals = 18;
constructor(string memory n, string memory s) {
_name = n;
_symbol = s;
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public pure returns (uint8) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
function balanceOf(address a) public view override returns (uint256) {
return _balances[a];
}
function transfer(address to, uint256 v) public override returns (bool) {
_transfer(_msgSender(), to, v);
return true;
}
function allowance(address o, address s) public view override returns (uint256) {
return _allowances[o][s];
}
function approve(address s, uint256 v) public override returns (bool) {
_approve(_msgSender(), s, v);
return true;
}
function transferFrom(address f, address t, uint256 v) public override returns (bool) {
uint256 curr = _allowances[f][_msgSender()];
require(curr >= v, "allowance");
unchecked {
_approve(f, _msgSender(), curr - v);
}
_transfer(f, t, v);
return true;
}
function _transfer(address f, address t, uint256 v) internal virtual {
require(f != address(0) && t != address(0), "zero addr");
uint256 fb = _balances[f];
require(fb >= v, "low bal");
unchecked {
_balances[f] = fb - v;
}
_balances[t] += v;
emit Transfer(f, t, v);
}
function _mintOnce(address a, uint256 v) internal {
require(a != address(0), "mint zero");
require(_totalSupply == 0, "already minted");
_totalSupply += v;
_balances[a] += v;
emit Transfer(address(0), a, v);
}
function _approve(address o, address s, uint256 v) internal virtual {
require(o != address(0) && s != address(0), "approve zero");
_allowances[o][s] = v;
emit Approval(o, s, v);
}
}
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB) external returns (address);
function getPair(address tokenA, address tokenB) external view returns (address);
}
interface IUniswapV2Pair is IERC20 {
function token0() external view returns (address);
function token1() external view returns (address);
}
interface IUniswapV2Router02 {
function factory() external view returns (address);
function WPLS() external view returns (address);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}
contract OLD_GLORY_RISE is ERC20, Ownable, ReentrancyGuard {
using SafeERC20 for IERC20;
enum Fees { BuyBurnFee, BuyYieldFee, SellBurnFee, SellYieldFee }
struct WalletInfo { uint256 share; }
struct RewardTokenInfo { IERC20 token; uint8 decimals; uint256 scale; uint256 shareYieldRay; uint256 totalPaid; uint256 totalYield; }
uint16 private constant _BIPS = 10_000;
uint96 private constant _YIELDX = 1e27;
address private constant BURN = address(0x369);
uint256 public constant MIN_YIELD_BALANCE = 1e18;
uint256 public constant MAX_ITERS = 50;
IUniswapV2Router02 public immutable dexRouter;
IUniswapV2Pair public plsV2LP;
uint16[] public fees;
uint24 public constant lpWeightBips = 20_000;
bool public payoutEnabled = true;
bool public swapEnabled = true;
bool public autoPayout = true;
uint24 public maxGas = 300_000;
uint24 public minWaitSec = 3_600;
uint256 public minYield = 369e15; // 0.369 pSunDAI (PulseChain ID 369!)
uint24 public lpFactor = 2000;
bool private _swapping;
uint32 public currIndex;
uint256 public totalShares;
mapping(address => WalletInfo) public walletInfo;
mapping(address => bool) public noFee;
mapping(address => bool) public noYield;
mapping(address => mapping(address => uint256)) public walletClaimTS;
address[] public wallets;
mapping(address => uint256) public walletIndex;
mapping(address => address) public walletRewardChoice;
mapping(address => mapping(address => uint256)) public yieldDebt;
mapping(address => RewardTokenInfo) public rewardTokens;
address[] public rewardTokenList;
event FeesUpdated(uint16, uint16, uint16, uint16);
event PayoutPolicyUpdated(bool, uint24, uint256, uint24);
event SwapParamsUpdated(bool, uint24);
event NoYieldSet(address indexed, bool);
event YieldPaid(address indexed wallet, address indexed token, uint256 amount);
event RewardTokenAdded(address, uint8);
event RewardChoiceChanged(address indexed wallet, address indexed token);
receive() external payable {}
// ==================== CONSTANTS ====================
address public constant PULSEX_V2_ROUTER = 0x165C3410fC91EF562C50559f7d2289fEbed552d9;
address public constant PSUNDAI = 0x5529c1cb179b2c256501031adCDAfC22D9c6d236;
constructor() ERC20("Old Glory Rise", "RISE") {
dexRouter = IUniswapV2Router02(PULSEX_V2_ROUTER);
address w = dexRouter.WPLS();
address f = dexRouter.factory();
require(w != address(0) && f != address(0), "bad router");
address pair = IUniswapV2Factory(f).getPair(address(this), w);
if (pair == address(0)) pair = IUniswapV2Factory(f).createPair(address(this), w);
plsV2LP = IUniswapV2Pair(pair);
noYield[pair] = true;
noFee[address(this)] = true;
noFee[address(dexRouter)] = true;
noYield[address(0)] = true;
noYield[BURN] = true;
noYield[address(this)] = true;
_mintOnce(msg.sender, 10_000_000 * 1e18);
fees = new uint16[](4);
fees[uint256(Fees.BuyBurnFee)] = 10;
fees[uint256(Fees.BuyYieldFee)] = 35;
fees[uint256(Fees.SellBurnFee)] = 100;
fees[uint256(Fees.SellYieldFee)] = 300;
emit FeesUpdated(10, 35, 100, 300);
_addRewardToken(PSUNDAI);
walletRewardChoice[msg.sender] = PSUNDAI;
}
// ==================== REWARD TOKEN MANAGEMENT ====================
function _addRewardToken(address token) internal {
require(token != address(0), "invalid");
uint8 dec = IERC20Metadata(token).decimals();
require(dec <= 18, "decimals>18");
rewardTokens[token] = RewardTokenInfo(IERC20(token), dec, 10**(18 - dec), 0, 0, 0);
rewardTokenList.push(token);
emit RewardTokenAdded(token, dec);
}
function setRewardChoice(address token) external {
require(token == PSUNDAI, "Only pSunDAI allowed");
_safePayYield(msg.sender, walletRewardChoice[msg.sender]);
walletRewardChoice[msg.sender] = PSUNDAI;
yieldDebt[msg.sender][PSUNDAI] = (walletInfo[msg.sender].share * rewardTokens[PSUNDAI].shareYieldRay) / _YIELDX;
emit RewardChoiceChanged(msg.sender, PSUNDAI);
}
function getUnpaidYield(address wallet, address token) public view returns (uint256) {
uint256 c = (walletInfo[wallet].share * rewardTokens[token].shareYieldRay) / _YIELDX;
if (c <= yieldDebt[wallet][token]) return 0;
return (c - yieldDebt[wallet][token]) / rewardTokens[token].scale;
}
function _safePayYield(address wallet, address token) private {
if (token == address(0)) return;
if (!_isPayEligible(wallet, token)) return;
uint256 amt = getUnpaidYield(wallet, token);
if (amt > 0) {
rewardTokens[token].token.safeTransfer(wallet, amt);
rewardTokens[token].totalPaid += amt;
walletClaimTS[wallet][token] = block.timestamp;
yieldDebt[wallet][token] = (walletInfo[wallet].share * rewardTokens[token].shareYieldRay) / _YIELDX;
emit YieldPaid(wallet, token, amt);
}
}
function _isPayEligible(address wallet, address token) private view returns (bool) {
return (walletClaimTS[wallet][token] + minWaitSec) < block.timestamp &&
getUnpaidYield(wallet, token) > minYield / rewardTokens[token].scale;
}
// ==================== SHARES TRACKING ====================
function _setShare(address wallet, uint256 share_) private {
uint256 old = walletInfo[wallet].share;
if (share_ != old) {
if (old > 0) _safePayYield(wallet, walletRewardChoice[wallet]);
if (share_ == 0) _disableYield(wallet);
else if (old == 0) _enableYield(wallet);
totalShares = totalShares - old + share_;
walletInfo[wallet].share = share_;
address token = walletRewardChoice[wallet];
if (token != address(0)) yieldDebt[wallet][token] = (share_ * rewardTokens[token].shareYieldRay) / _YIELDX;
}
}
function _enableYield(address wallet) private {
if (walletRewardChoice[wallet] == address(0)) walletRewardChoice[wallet] = rewardTokenList[0];
walletIndex[wallet] = wallets.length;
wallets.push(wallet);
}
function _disableYield(address wallet) private {
uint256 idx = walletIndex[wallet];
uint256 n = wallets.length;
if (idx < n - 1) {
address last = wallets[n - 1];
wallets[idx] = last;
walletIndex[last] = idx;
}
wallets.pop();
delete walletIndex[wallet];
}
function _calcShares(address target) private view returns (uint256 s) {
uint256 bal = balanceOf(target);
if (bal < MIN_YIELD_BALANCE) return 0;
uint256 lp = (plsV2LP.balanceOf(target) * lpWeightBips) / _BIPS;
return bal + lp;
}
// ==================== PAYOUT ENGINE ====================
function _payout(uint256 gas_, address token) private {
uint256 n = wallets.length;
if (n == 0) return;
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 iters = 0;
while (gasUsed < gas_ && iters < n && iters < MAX_ITERS) {
if (currIndex >= n) currIndex = 0;
address w = wallets[currIndex];
if (!noYield[w] && getUnpaidYield(w, token) > 0 && _isPayEligible(w, token))
_safePayYield(w, token);
unchecked { currIndex++; iters++; }
gasUsed += gasLeft - gasleft();
gasLeft = gasleft();
}
}
// ==================== SWAPS & YIELD ACCRUAL ====================
function _swapTokensPost(uint256 newRewards, address token) private {
if (newRewards == 0 || totalShares == 0) return;
uint256 scaled = newRewards * rewardTokens[token].scale;
rewardTokens[token].totalYield += scaled;
rewardTokens[token].shareYieldRay += (uint256(_YIELDX) * scaled) / totalShares;
}
function _buildSwapPath(address token) private view returns (address[] memory) {
address[] memory path = new address[](3);
path[0] = address(this);
path[1] = dexRouter.WPLS();
path[2] = token;
return path;
}
function _swapTokens(uint256 amt, address token) private {
if (amt == 0) return;
address[] memory p = _buildSwapPath(token);
uint256 beforeBal = rewardTokens[token].token.balanceOf(address(this));
_approve(address(this), address(dexRouter), 0);
_approve(address(this), address(dexRouter), amt);
try dexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(amt, 0, p, address(this), block.timestamp) {} catch { return; }
uint256 afterBal = rewardTokens[token].token.balanceOf(address(this));
if (afterBal > beforeBal) _swapTokensPost(afterBal - beforeBal, token);
}
function _getSwapSize(uint256 amt) private view returns (uint112 s) {
s = uint112(balanceOf(address(plsV2LP)) / lpFactor);
if (s > amt) s = uint112(amt);
}
function _isMainLP(address a) private view returns (bool) {
return a != address(0) && a == address(plsV2LP);
}
// ==================== TRANSFER OVERRIDE ====================
function _transfer(address from, address to, uint256 amt) internal override {
bool isFromLP = _isMainLP(from);
bool isToLP = _isMainLP(to);
uint256 yieldBal = _balances[address(this)];
uint256 swapAmt = _getSwapSize(amt);
address tokenChoice = walletRewardChoice[from];
if (tokenChoice == address(0)) tokenChoice = rewardTokenList[0];
if (swapEnabled && yieldBal >= swapAmt && !_swapping && to == address(plsV2LP)) {
_swapping = true;
_swapTokens(swapAmt, tokenChoice);
_swapping = false;
}
if (!noFee[from] && !noFee[to]) {
(uint256 burnFee, uint256 yieldFee) = _calcFees(amt, isFromLP, isToLP);
unchecked {
if (burnFee > 0) {
amt -= burnFee;
super._transfer(from, BURN, burnFee);
}
if (yieldFee > 0) {
amt -= yieldFee;
super._transfer(from, address(this), yieldFee);
}
}
}
super._transfer(from, to, amt);
if (payoutEnabled && autoPayout && !_swapping) _payout(maxGas, tokenChoice);
if (!noYield[from]) _setShare(from, _calcShares(from));
if (!noYield[to]) _setShare(to, _calcShares(to));
}
function _calcFees(uint256 amt, bool isFromLP, bool isToLP) private view returns (uint256 burnFee, uint256 yieldFee) {
if (isToLP) {
burnFee = (amt * fees[uint256(Fees.SellBurnFee)]) / _BIPS;
yieldFee = (amt * fees[uint256(Fees.SellYieldFee)]) / _BIPS;
} else if (isFromLP) {
burnFee = (amt * fees[uint256(Fees.BuyBurnFee)]) / _BIPS;
yieldFee = (amt * fees[uint256(Fees.BuyYieldFee)]) / _BIPS;
}
}
// ==================== PUBLIC USER FUNCTIONS ====================
function claimYield() external nonReentrant {
_safePayYield(msg.sender, walletRewardChoice[msg.sender]);
}
function airdrop(address[] calldata to, uint256[] calldata amts) external onlyOwner {
require(to.length == amts.length, "len mismatch");
address s = _msgSender();
for (uint256 i; i < to.length;) {
_transfer(s, to[i], amts[i]);
if (!noYield[to[i]]) _setShare(to[i], _calcShares(to[i]));
unchecked { i++; }
}
if (!noYield[s]) _setShare(s, _calcShares(s));
}
// ==================== OWNER FUNCTIONS ====================
function setFees(uint16 bb, uint16 by, uint16 sb, uint16 sy) external onlyOwner {
require(bb <= 500 && by <= 500 && sb <= 500 && sy <= 500, "fee>5%");
require(bb + by <= 500, "buy>5%");
require(sb + sy <= 500, "sell>5%");
fees[uint256(Fees.BuyBurnFee)] = bb;
fees[uint256(Fees.BuyYieldFee)] = by;
fees[uint256(Fees.SellBurnFee)] = sb;
fees[uint256(Fees.SellYieldFee)] = sy;
emit FeesUpdated(bb, by, sb, sy);
}
function setNoYield(address w, bool f) external onlyOwner {
noYield[w] = f;
if (f) _setShare(w, 0);
else _setShare(w, _calcShares(w));
emit NoYieldSet(w, f);
}
function setPayoutPolicy(bool en, uint24 minDur, uint256 newMin, uint24 gas_) external onlyOwner {
payoutEnabled = en;
minWaitSec = minDur;
minYield = newMin;
maxGas = gas_;
emit PayoutPolicyUpdated(en, minDur, newMin, gas_);
}
function setSwapParams(bool en, uint24 f) external onlyOwner {
swapEnabled = en;
if (en) {
require(f >= 50 && f <= 200_000, "lpFactor OOR");
lpFactor = f;
}
emit SwapParamsUpdated(en, f);
}
function setAutoPayout(bool en) external onlyOwner {
autoPayout = en;
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":200,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"shanghai","compilationTarget":{"Old_Glory_Rise_v2.sol":"OLD_GLORY_RISE"}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"v","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"FeesUpdated","inputs":[{"type":"uint16","name":"","internalType":"uint16","indexed":false},{"type":"uint16","name":"","internalType":"uint16","indexed":false},{"type":"uint16","name":"","internalType":"uint16","indexed":false},{"type":"uint16","name":"","internalType":"uint16","indexed":false}],"anonymous":false},{"type":"event","name":"NoYieldSet","inputs":[{"type":"address","name":"","internalType":"address","indexed":true},{"type":"bool","name":"","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"prev","internalType":"address","indexed":true},{"type":"address","name":"next","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PayoutPolicyUpdated","inputs":[{"type":"bool","name":"","internalType":"bool","indexed":false},{"type":"uint24","name":"","internalType":"uint24","indexed":false},{"type":"uint256","name":"","internalType":"uint256","indexed":false},{"type":"uint24","name":"","internalType":"uint24","indexed":false}],"anonymous":false},{"type":"event","name":"RewardChoiceChanged","inputs":[{"type":"address","name":"wallet","internalType":"address","indexed":true},{"type":"address","name":"token","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RewardTokenAdded","inputs":[{"type":"address","name":"","internalType":"address","indexed":false},{"type":"uint8","name":"","internalType":"uint8","indexed":false}],"anonymous":false},{"type":"event","name":"SwapParamsUpdated","inputs":[{"type":"bool","name":"","internalType":"bool","indexed":false},{"type":"uint24","name":"","internalType":"uint24","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"v","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"YieldPaid","inputs":[{"type":"address","name":"wallet","internalType":"address","indexed":true},{"type":"address","name":"token","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MAX_ITERS","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MIN_YIELD_BALANCE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"PSUNDAI","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"PULSEX_V2_ROUTER","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"airdrop","inputs":[{"type":"address[]","name":"to","internalType":"address[]"},{"type":"uint256[]","name":"amts","internalType":"uint256[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"o","internalType":"address"},{"type":"address","name":"s","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"s","internalType":"address"},{"type":"uint256","name":"v","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"autoPayout","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"a","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"claimYield","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint32","name":"","internalType":"uint32"}],"name":"currIndex","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IUniswapV2Router02"}],"name":"dexRouter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint16","name":"","internalType":"uint16"}],"name":"fees","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getUnpaidYield","inputs":[{"type":"address","name":"wallet","internalType":"address"},{"type":"address","name":"token","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"name":"lpFactor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"name":"lpWeightBips","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"name":"maxGas","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint24","name":"","internalType":"uint24"}],"name":"minWaitSec","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"minYield","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"noFee","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"noYield","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"payoutEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IUniswapV2Pair"}],"name":"plsV2LP","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"rewardTokenList","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"token","internalType":"contract IERC20"},{"type":"uint8","name":"decimals","internalType":"uint8"},{"type":"uint256","name":"scale","internalType":"uint256"},{"type":"uint256","name":"shareYieldRay","internalType":"uint256"},{"type":"uint256","name":"totalPaid","internalType":"uint256"},{"type":"uint256","name":"totalYield","internalType":"uint256"}],"name":"rewardTokens","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setAutoPayout","inputs":[{"type":"bool","name":"en","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint16","name":"bb","internalType":"uint16"},{"type":"uint16","name":"by","internalType":"uint16"},{"type":"uint16","name":"sb","internalType":"uint16"},{"type":"uint16","name":"sy","internalType":"uint16"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNoYield","inputs":[{"type":"address","name":"w","internalType":"address"},{"type":"bool","name":"f","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPayoutPolicy","inputs":[{"type":"bool","name":"en","internalType":"bool"},{"type":"uint24","name":"minDur","internalType":"uint24"},{"type":"uint256","name":"newMin","internalType":"uint256"},{"type":"uint24","name":"gas_","internalType":"uint24"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setRewardChoice","inputs":[{"type":"address","name":"token","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapParams","inputs":[{"type":"bool","name":"en","internalType":"bool"},{"type":"uint24","name":"f","internalType":"uint24"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalShares","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"v","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"f","internalType":"address"},{"type":"address","name":"t","internalType":"address"},{"type":"uint256","name":"v","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"walletClaimTS","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"walletIndex","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"share","internalType":"uint256"}],"name":"walletInfo","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"walletRewardChoice","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"wallets","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"yieldDebt","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
Contract Creation Code
0x60a0604052600160065560098054670e100493e00101016001600160481b031990911617905567051ef38b821e8000600a55600b805462ffffff19166107d017905534801561004c575f80fd5b506040518060400160405280600e81526020016d4f6c6420476c6f7279205269736560901b815250604051806040016040528060048152602001635249534560e01b81525081600390816100a09190610ac2565b5060046100ad8282610ac2565b5050506100c66100c16105f360201b60201c565b6105f7565b73165c3410fc91ef562c50559f7d2289febed552d960808190526040805163ef8ef56f60e01b815290515f929163ef8ef56f9160048083019260209291908290030181865afa15801561011b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013f9190610b7c565b90505f6080516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610180573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a49190610b7c565b90506001600160a01b038216158015906101c657506001600160a01b03811615155b6102045760405162461bcd60e51b815260206004820152600a6024820152693130b2103937baba32b960b11b60448201526064015b60405180910390fd5b60405163e6a4390560e01b81523060048201526001600160a01b0383811660248301525f919083169063e6a4390590604401602060405180830381865afa158015610251573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102759190610b7c565b90506001600160a01b0381166102f7576040516364e329cb60e11b81523060048201526001600160a01b03848116602483015283169063c9c65396906044016020604051808303815f875af11580156102d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102f49190610b7c565b90505b600780546001600160a01b0319166001600160a01b038381169182179092555f908152600f60208181526040808420805460ff19908116600190811790925530808752600e8552838720805483168417905560805190971686528286208054821683179055939092527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec37580548416831790557fae12794d17f0f8d91a7af352510ec4a568a230a07a4208197af414971ed59142805484168317905593835292909120805490911690911790556103d8336a084595161401484a000000610648565b60408051600480825260a08201909252906020820160808036833750508151610408926008925060200190610970565b50600a60085f8154811061041e5761041e610bbd565b905f5260205f2090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550602360086001600381111561046257610462610ba9565b8154811061047257610472610bbd565b905f5260205f2090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060646008600260038111156104b6576104b6610ba9565b815481106104c6576104c6610bbd565b905f5260205f2090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555061012c600860038081111561050a5761050a610ba9565b8154811061051a5761051a610bbd565b5f91825260209182902060108204018054600f9092166002026101000a61ffff8181021990931694909216919091029290921790915560408051600a815260239281019290925260649082015261012c60608201527f82e28ed4e0a5f6621902d3bd7b830a98d7726bfbcba9043688f6225733c753b39060800160405180910390a16105b9735529c1cb179b2c256501031adcdafc22d9c6d23661074f565b5050335f90815260136020526040902080546001600160a01b031916735529c1cb179b2c256501031adcdafc22d9c6d23617905550610d28565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03821661068a5760405162461bcd60e51b81526020600482015260096024820152686d696e74207a65726f60b81b60448201526064016101fb565b5f54156106ca5760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481b5a5b9d195960921b60448201526064016101fb565b805f808282546106da9190610be5565b90915550506001600160a01b0382165f9081526001602052604081208054839290610706908490610be5565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03811661078f5760405162461bcd60e51b81526020600482015260076024820152661a5b9d985b1a5960ca1b60448201526064016101fb565b5f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f09190610bfe565b905060128160ff1611156108345760405162461bcd60e51b815260206004820152600b60248201526a0c8cac6d2dac2d8e67c62760ab1b60448201526064016101fb565b6040805160c0810182526001600160a01b038416815260ff83166020820152908101610861836012610c1e565b61086c90600a610d1a565b81525f6020808301829052604080840183905260609384018390526001600160a01b03878116808552601584528285208751815489870151919094166001600160a81b031990941693909317600160a01b60ff94851602178155878401516001808301919091559688015160028201556080880151600382015560a0909701516004909701969096556016805495860181559093527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b512428990930180546001600160a01b031916851790558251938452908416908301527ffb4bd0c43c446ef8ea76e6ffcdb00787160e35be075b84b07ec2ca3d87659329910160405180910390a15050565b828054828255905f5260205f2090600f01601090048101928215610a06579160200282015f5b838211156109d657835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302610996565b8015610a045782816101000a81549061ffff02191690556002016020816001010492830192600103026109d6565b505b50610a12929150610a16565b5090565b5b80821115610a12575f8155600101610a17565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680610a5257607f821691505b602082108103610a7057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610abd57805f5260205f20601f840160051c81016020851015610a9b5750805b601f840160051c820191505b81811015610aba575f8155600101610aa7565b50505b505050565b81516001600160401b03811115610adb57610adb610a2a565b610aef81610ae98454610a3e565b84610a76565b6020601f821160018114610b21575f8315610b0a5750848201515b5f19600385901b1c1916600184901b178455610aba565b5f84815260208120601f198516915b82811015610b505787850151825560209485019460019092019101610b30565b5084821015610b6d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610b8c575f80fd5b81516001600160a01b0381168114610ba2575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610bf857610bf8610bd1565b92915050565b5f60208284031215610c0e575f80fd5b815160ff81168114610ba2575f80fd5b60ff8281168282160390811115610bf857610bf8610bd1565b6001815b6001841115610c7257808504811115610c5657610c56610bd1565b6001841615610c6457908102905b60019390931c928002610c3b565b935093915050565b5f82610c8857506001610bf8565b81610c9457505f610bf8565b8160018114610caa5760028114610cb457610cd0565b6001915050610bf8565b60ff841115610cc557610cc5610bd1565b50506001821b610bf8565b5060208310610133831016604e8410600b8410161715610cf3575081810a610bf8565b610cff5f198484610c37565b805f1904821115610d1257610d12610bd1565b029392505050565b5f610ba260ff841683610c7a565b608051612d06610d5c5f395f818161030d01528181611d8e01528181611db901528181611df501526126290152612d065ff3fe60806040526004361061028d575f3560e01c80636ddd171311610155578063ae2e9bcb116100be578063dd62ed3e11610078578063dd62ed3e14610873578063e173a7f5146108b7578063e243f05f146108d6578063e430823e146108fd578063f2fde38b1461091c578063f5ab16cc1461093b575f80fd5b8063ae2e9bcb146107a8578063b5d64149146107c1578063b9dc6bfa146107f7578063c4e326e11461080b578063cef8faea14610820578063d6ae0ec21461083f575f80fd5b80638b3ca6071161010f5780638b3ca607146106e55780638da5cb5b14610700578063925ed8f21461071d57806395d89b411461073c578063a146a55b14610750578063a9059cbb14610789575f80fd5b80636ddd17131461062657806370a0823114610644578063715018a6146106785780637764db391461068c5780637ad71f72146106ab578063842742f8146106ca575f80fd5b80633d78d410116101f75780634c8c30e8116101b15780634c8c30e81461054e5780634e2d4c8d1461056d578063500e68e91461059b578063501d815c146105c65780635be60591146105e85780636724348214610607575f80fd5b80633d78d41014610473578063406cf2291461049e57806342f7723f146104b257806348fe2287146104d15780634acc79ed146104e65780634b0432f214610518575f80fd5b806318160ddd1161024857806318160ddd146103c95780631835587e146103dc5780631a8a9eac146103fd57806323b872dd14610424578063313ce567146104435780633a98ef391461045e575f80fd5b80622a20501461029857806306fdde03146102db5780630758d924146102fc57806308233e8514610347578063095ea7b31461038b5780631202aa9a146103aa575f80fd5b3661029457005b5f80fd5b3480156102a3575f80fd5b506102c66102b23660046127e6565b600e6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156102e6575f80fd5b506102ef6109cd565b6040516102d29190612801565b348015610307575f80fd5b5061032f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102d2565b348015610352575f80fd5b5061037d61036136600461284c565b601060209081525f928352604080842090915290825290205481565b6040519081526020016102d2565b348015610396575f80fd5b506102c66103a5366004612883565b610a5d565b3480156103b5575f80fd5b5061037d6103c436600461284c565b610a73565b3480156103d4575f80fd5b505f5461037d565b3480156103e7575f80fd5b506103fb6103f63660046128cc565b610b4a565b005b348015610408575f80fd5b5061032f735529c1cb179b2c256501031adcdafc22d9c6d23681565b34801561042f575f80fd5b506102c661043e3660046128ff565b610c4b565b34801561044e575f80fd5b50604051601281526020016102d2565b348015610469575f80fd5b5061037d600c5481565b34801561047e575f80fd5b5061037d61048d3660046127e6565b60126020525f908152604090205481565b3480156104a9575f80fd5b506103fb610ccd565b3480156104bd575f80fd5b506103fb6104cc36600461294e565b610d39565b3480156104dc575f80fd5b5061037d600a5481565b3480156104f1575f80fd5b5061050561050036600461299f565b611006565b60405161ffff90911681526020016102d2565b348015610523575f80fd5b5060095461053a90600160301b900462ffffff1681565b60405162ffffff90911681526020016102d2565b348015610559575f80fd5b506103fb6105683660046129b6565b61103b565b348015610578575f80fd5b506102c66105873660046127e6565b600f6020525f908152604090205460ff1681565b3480156105a6575f80fd5b5061037d6105b53660046127e6565b600d6020525f908152604090205481565b3480156105d1575f80fd5b5060095461053a906301000000900462ffffff1681565b3480156105f3575f80fd5b5060075461032f906001600160a01b031681565b348015610612575f80fd5b506103fb610621366004612a3f565b611100565b348015610631575f80fd5b506009546102c690610100900460ff1681565b34801561064f575f80fd5b5061037d61065e3660046127e6565b6001600160a01b03165f9081526001602052604090205490565b348015610683575f80fd5b506103fb6112a0565b348015610697575f80fd5b506009546102c69062010000900460ff1681565b3480156106b6575f80fd5b5061032f6106c536600461299f565b6112d5565b3480156106d5575f80fd5b5061037d670de0b6b3a764000081565b3480156106f0575f80fd5b50600b5461053a9062ffffff1681565b34801561070b575f80fd5b506005546001600160a01b031661032f565b348015610728575f80fd5b506103fb610737366004612aab565b6112fd565b348015610747575f80fd5b506102ef611343565b34801561075b575f80fd5b50600b5461077490640100000000900463ffffffff1681565b60405163ffffffff90911681526020016102d2565b348015610794575f80fd5b506102c66107a3366004612883565b611352565b3480156107b3575f80fd5b506009546102c69060ff1681565b3480156107cc575f80fd5b5061037d6107db36600461284c565b601460209081525f928352604080842090915290825290205481565b348015610802575f80fd5b5061037d603281565b348015610816575f80fd5b5061053a614e2081565b34801561082b575f80fd5b5061032f61083a36600461299f565b61135e565b34801561084a575f80fd5b5061032f6108593660046127e6565b60136020525f90815260409020546001600160a01b031681565b34801561087e575f80fd5b5061037d61088d36600461284c565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156108c2575f80fd5b506103fb6108d1366004612ac6565b61136d565b3480156108e1575f80fd5b5061032f73165c3410fc91ef562c50559f7d2289febed552d981565b348015610908575f80fd5b506103fb6109173660046127e6565b611428565b348015610927575f80fd5b506103fb6109363660046127e6565b61158b565b348015610946575f80fd5b506109946109553660046127e6565b60156020525f9081526040902080546001820154600283015460038401546004909401546001600160a01b03841694600160a01b90940460ff16939086565b604080516001600160a01b03909716875260ff9095166020870152938501929092526060840152608083015260a082015260c0016102d2565b6060600380546109dc90612af2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0890612af2565b8015610a535780601f10610a2a57610100808354040283529160200191610a53565b820191905f5260205f20905b815481529060010190602001808311610a3657829003601f168201915b5050505050905090565b5f610a69338484611600565b5060015b92915050565b6001600160a01b038082165f908152601560209081526040808320600201549386168352600d909152812054909182916b033b2e3c9fd0803ce800000091610aba91612b3e565b610ac49190612b55565b6001600160a01b038086165f908152601460209081526040808320938816835292905220549091508111610afb575f915050610a6d565b6001600160a01b038084165f818152601560209081526040808320600101549489168352601482528083209383529290522054610b389083612b74565b610b429190612b55565b949350505050565b6005546001600160a01b03163314610b7d5760405162461bcd60e51b8152600401610b7490612b87565b60405180910390fd5b60098054831580156101000261ff001990921691909117909155610c085760328162ffffff1610158015610bb9575062030d408162ffffff1611155b610bf45760405162461bcd60e51b815260206004820152600c60248201526b36382330b1ba37b91027a7a960a11b6044820152606401610b74565b600b805462ffffff191662ffffff83161790555b60408051831515815262ffffff831660208201527fce6168caec8e3c0ecc305a76ba51b3a63a066a8e0e0f08da50124ac194c45828910160405180910390a15050565b6001600160a01b0383165f90815260026020908152604080832033845290915281205482811015610caa5760405162461bcd60e51b8152602060048201526009602482015268616c6c6f77616e636560b81b6044820152606401610b74565b610cb78533858403611600565b610cc28585856116bc565b506001949350505050565b600260065403610d0b5760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610b74565b6002600655335f81815260136020526040902054610d3291906001600160a01b03166118fd565b6001600655565b6005546001600160a01b03163314610d635760405162461bcd60e51b8152600401610b7490612b87565b6101f48461ffff1611158015610d7f57506101f48361ffff1611155b8015610d9157506101f48261ffff1611155b8015610da357506101f48161ffff1611155b610dd85760405162461bcd60e51b81526020600482015260066024820152656665653e352560d01b6044820152606401610b74565b6101f4610de58486612baa565b61ffff161115610e205760405162461bcd60e51b81526020600482015260066024820152656275793e352560d01b6044820152606401610b74565b6101f4610e2d8284612baa565b61ffff161115610e695760405162461bcd60e51b815260206004820152600760248201526673656c6c3e352560c81b6044820152606401610b74565b8360085f81548110610e7d57610e7d612bd8565b905f5260205f2090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555082600860016003811115610ec057610ec0612bc4565b81548110610ed057610ed0612bd8565b905f5260205f2090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555081600860026003811115610f1357610f13612bc4565b81548110610f2357610f23612bd8565b905f5260205f2090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550806008600380811115610f6557610f65612bc4565b81548110610f7557610f75612bd8565b905f5260205f2090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055507f82e28ed4e0a5f6621902d3bd7b830a98d7726bfbcba9043688f6225733c753b384848484604051610ff8949392919061ffff948516815292841660208401529083166040830152909116606082015260800190565b60405180910390a150505050565b60088181548110611015575f80fd5b905f5260205f209060109182820401919006600202915054906101000a900461ffff1681565b6005546001600160a01b031633146110655760405162461bcd60e51b8152600401610b7490612b87565b60098054600a84905568ffffff0000000000ff191685151568ffffff00000000000019811691909117600160301b62ffffff8781169182029290921765ffffff000000191663010000009286169283021790935560408051928352602083019390935291810184905260608101919091527fef6d1d438cd000dd9f4502fbbd115e71d6c17f337db4835feb3ac8f11025963490608001610ff8565b6005546001600160a01b0316331461112a5760405162461bcd60e51b8152600401610b7490612b87565b8281146111685760405162461bcd60e51b815260206004820152600c60248201526b0d8cadc40dad2e6dac2e8c6d60a31b6044820152606401610b74565b335f5b8481101561126c576111bc8287878481811061118957611189612bd8565b905060200201602081019061119e91906127e6565b8686858181106111b0576111b0612bd8565b905060200201356116bc565b600f5f8787848181106111d1576111d1612bd8565b90506020020160208101906111e691906127e6565b6001600160a01b0316815260208101919091526040015f205460ff166112645761126486868381811061121b5761121b612bd8565b905060200201602081019061123091906127e6565b61125f88888581811061124557611245612bd8565b905060200201602081019061125a91906127e6565b611a4a565b611b10565b60010161116b565b506001600160a01b0381165f908152600f602052604090205460ff16611299576112998161125f83611a4a565b5050505050565b6005546001600160a01b031633146112ca5760405162461bcd60e51b8152600401610b7490612b87565b6112d35f611c31565b565b601181815481106112e4575f80fd5b5f918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146113275760405162461bcd60e51b8152600401610b7490612b87565b60098054911515620100000262ff000019909216919091179055565b6060600480546109dc90612af2565b5f610a693384846116bc565b601681815481106112e4575f80fd5b6005546001600160a01b031633146113975760405162461bcd60e51b8152600401610b7490612b87565b6001600160a01b0382165f908152600f60205260409020805460ff191682158015919091179091556113d2576113cd825f611b10565b6113df565b6113df8261125f84611a4a565b816001600160a01b03167f4ad5c40292f5355e29e1c0077d317469611069eef7ac097f2a2e9dae09111d3f8260405161141c911515815260200190565b60405180910390a25050565b6001600160a01b038116735529c1cb179b2c256501031adcdafc22d9c6d2361461148b5760405162461bcd60e51b815260206004820152601460248201527313db9b1e481c14dd5b91105248185b1b1bddd95960621b6044820152606401610b74565b335f818152601360205260409020546114ad91906001600160a01b03166118fd565b335f81815260136020908152604080832080546001600160a01b031916735529c1cb179b2c256501031adcdafc22d9c6d2361790557ff3f6cd4fc21fb96bcdcd759aaaa174a53cdb884052d91ed820fc88ea9f2848d454938352600d9091529020546b033b2e3c9fd0803ce80000009161152691612b3e565b6115309190612b55565b335f818152601460209081526040808320735529c1cb179b2c256501031adcdafc22d9c6d23680855292528083209490945592517fe6af3df4c89fda70dd523889bcc7fcd9617063079a57a4ca7dd26cd0755d748a9190a350565b6005546001600160a01b031633146115b55760405162461bcd60e51b8152600401610b7490612b87565b6001600160a01b0381166115f45760405162461bcd60e51b8152600401610b74906020808252600490820152637a65726f60e01b604082015260600190565b6115fd81611c31565b50565b6001600160a01b0383161580159061162057506001600160a01b03821615155b61165b5760405162461bcd60e51b815260206004820152600c60248201526b617070726f7665207a65726f60a01b6044820152606401610b74565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6116c684611c82565b90505f6116d284611c82565b305f908152600160205260408120549192506116ed85611cab565b6001600160a01b038089165f908152601360205260409020546001600160701b0392909216925016806117445760165f8154811061172d5761172d612bd8565b5f918252602090912001546001600160a01b031690505b600954610100900460ff16801561175b5750818310155b80156117715750600b546301000000900460ff16155b801561178a57506007546001600160a01b038881169116145b156117ba57600b805463ff000000191663010000001790556117ac8282611cf5565b600b805463ff000000191690555b6001600160a01b0388165f908152600e602052604090205460ff161580156117fa57506001600160a01b0387165f908152600e602052604090205460ff16155b15611842575f8061180c888888611ef9565b909250905081156118295781880397506118298a61036984612044565b801561183f57808803975061183f8a3083612044565b50505b61184d888888612044565b60095460ff168015611867575060095462010000900460ff165b801561187d5750600b546301000000900460ff16155b1561189b5760095461189b906301000000900462ffffff168261217e565b6001600160a01b0388165f908152600f602052604090205460ff166118c7576118c78861125f8a611a4a565b6001600160a01b0387165f908152600f602052604090205460ff166118f3576118f38761125f89611a4a565b5050505050505050565b6001600160a01b03811661190f575050565b61191982826122bf565b611921575050565b5f61192c8383610a73565b90508015611a45576001600160a01b038083165f9081526015602052604090205461195991168483612346565b6001600160a01b0382165f9081526015602052604081206003018054839290611983908490612bec565b90915550506001600160a01b038084165f81815260106020908152604080832094871683529381528382204290556015815283822060020154928252600d905291909120546b033b2e3c9fd0803ce8000000916119df91612b3e565b6119e99190612b55565b6001600160a01b038481165f818152601460209081526040808320948816808452948252918290209490945551848152919290917fd94485a948dec1dc5b1b1d372cc2b813cc40e47cd2a8eeb2f44d93ee966b372191016116af565b505050565b6001600160a01b0381165f90815260016020526040812054670de0b6b3a7640000811015611a7a57505f92915050565b6007546040516370a0823160e01b81526001600160a01b0385811660048301525f9261271092614e2092909116906370a0823190602401602060405180830381865afa158015611acc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611af09190612bff565b611afa9190612b3e565b611b049190612b55565b9050610b428183612bec565b6001600160a01b0382165f908152600d6020526040902054818114611a45578015611b5a576001600160a01b038084165f90815260136020526040902054611b5a918591166118fd565b815f03611b6f57611b6a83612402565b611b7f565b805f03611b7f57611b7f83612506565b8181600c54611b8e9190612b74565b611b989190612bec565b600c556001600160a01b038084165f908152600d602090815260408083208690556013909152902054168015611c2b576001600160a01b0381165f908152601560205260409020600201546b033b2e3c9fd0803ce800000090611bfb9085612b3e565b611c059190612b55565b6001600160a01b038086165f908152601460209081526040808320938616835292905220555b50505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b03821615801590610a6d5750506007546001600160a01b0390811691161490565b600b546007546001600160a01b03165f90815260016020526040812054909162ffffff1690611cda9190612b55565b905081816001600160701b03161115611cf05750805b919050565b815f03611d00575050565b5f611d0a826125cf565b6001600160a01b038381165f908152601560205260408082205490516370a0823160e01b815230600482015293945090929116906370a0823190602401602060405180830381865afa158015611d62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d869190612bff565b9050611db3307f00000000000000000000000000000000000000000000000000000000000000005f611600565b611dde307f000000000000000000000000000000000000000000000000000000000000000086611600565b604051635c11d79560e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c11d79590611e329087905f90879030904290600401612c16565b5f604051808303815f87803b158015611e49575f80fd5b505af1925050508015611e5a575060015b611e645750505050565b6001600160a01b038381165f908152601560205260408082205490516370a0823160e01b8152306004820152919216906370a0823190602401602060405180830381865afa158015611eb8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611edc9190612bff565b90508181111561129957611299611ef38383612b74565b8561270c565b5f808215611f9e576127106008600281548110611f1857611f18612bd8565b5f9182526020909120601082040154611f4191600f166002026101000a900461ffff1687612b3e565b611f4b9190612b55565b91506127106008600381548110611f6457611f64612bd8565b5f9182526020909120601082040154611f8d91600f166002026101000a900461ffff1687612b3e565b611f979190612b55565b905061203c565b831561203c5761271060085f81548110611fba57611fba612bd8565b5f9182526020909120601082040154611fe391600f166002026101000a900461ffff1687612b3e565b611fed9190612b55565b9150612710600860018154811061200657612006612bd8565b5f918252602090912060108204015461202f91600f166002026101000a900461ffff1687612b3e565b6120399190612b55565b90505b935093915050565b6001600160a01b0383161580159061206457506001600160a01b03821615155b61209c5760405162461bcd60e51b81526020600482015260096024820152683d32b9379030b2323960b91b6044820152606401610b74565b6001600160a01b0383165f90815260016020526040902054818110156120ee5760405162461bcd60e51b81526020600482015260076024820152661b1bddc818985b60ca1b6044820152606401610b74565b6001600160a01b038085165f90815260016020526040808220858503905591851681529081208054849290612124908490612bec565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161217091815260200190565b60405180910390a350505050565b6011545f81900361218e57505050565b5f805a90505f5b85831080156121a357508381105b80156121af5750603281105b156122b757600b54640100000000900463ffffffff1684116121dd57600b805467ffffffff00000000191690555b600b54601180545f92640100000000900463ffffffff1690811061220357612203612bd8565b5f9182526020808320909101546001600160a01b0316808352600f90915260409091205490915060ff1615801561224257505f6122408288610a73565b115b8015612253575061225381876122bf565b156122625761226281876118fd565b600b8054600163ffffffff640100000000808404821683019091160267ffffffff00000000199092169190911790915591909101905a6122a29084612b74565b6122ac9085612bec565b93505a925050612195565b505050505050565b6009546001600160a01b038381165f9081526010602090815260408083209386168352929052908120549091429161230391600160301b900462ffffff1690612bec565b10801561233f57506001600160a01b0382165f90815260156020526040902060010154600a546123339190612b55565b61233d8484610a73565b115b9392505050565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015612392573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b69190612c86565b611a455760405162461bcd60e51b815260206004820152601a60248201527f5361666545524332303a207472616e73666572206661696c65640000000000006044820152606401610b74565b6001600160a01b0381165f90815260126020526040902054601154612428600182612b74565b8210156124b5575f601161243d600184612b74565b8154811061244d5761244d612bd8565b5f91825260209091200154601180546001600160a01b03909216925082918590811061247b5761247b612bd8565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526012909152604090208290555b60118054806124c6576124c6612ca1565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b03949094168152601290935250506040812055565b6001600160a01b038181165f908152601360205260409020541661256f5760165f8154811061253757612537612bd8565b5f9182526020808320909101546001600160a01b0384811684526013909252604090922080546001600160a01b031916919092161790555b601180546001600160a01b039092165f818152601260205260408120849055600184018355919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6890910180546001600160a01b0319169091179055565b604080516003808252608082019092526060915f919060208201848036833701905050905030815f8151811061260757612607612bd8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef8ef56f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190612cb5565b816001815181106126ba576126ba612bd8565b60200260200101906001600160a01b031690816001600160a01b03168152505082816002815181106126ee576126ee612bd8565b6001600160a01b039092166020928302919091019091015292915050565b8115806127195750600c54155b15612722575050565b6001600160a01b0381165f908152601560205260408120600101546127479084612b3e565b6001600160a01b0383165f90815260156020526040812060040180549293508392909190612776908490612bec565b9091555050600c54612794826b033b2e3c9fd0803ce8000000612b3e565b61279e9190612b55565b6001600160a01b0383165f90815260156020526040812060020180549091906127c8908490612bec565b9091555050505050565b6001600160a01b03811681146115fd575f80fd5b5f602082840312156127f6575f80fd5b813561233f816127d2565b602081525f82518060208401525f5b8181101561282d5760208186018101516040868401015201612810565b505f604082850101526040601f19601f83011684010191505092915050565b5f806040838503121561285d575f80fd5b8235612868816127d2565b91506020830135612878816127d2565b809150509250929050565b5f8060408385031215612894575f80fd5b823561289f816127d2565b946020939093013593505050565b80151581146115fd575f80fd5b803562ffffff81168114611cf0575f80fd5b5f80604083850312156128dd575f80fd5b82356128e8816128ad565b91506128f6602084016128ba565b90509250929050565b5f805f60608486031215612911575f80fd5b833561291c816127d2565b9250602084013561292c816127d2565b929592945050506040919091013590565b803561ffff81168114611cf0575f80fd5b5f805f8060808587031215612961575f80fd5b61296a8561293d565b93506129786020860161293d565b92506129866040860161293d565b91506129946060860161293d565b905092959194509250565b5f602082840312156129af575f80fd5b5035919050565b5f805f80608085870312156129c9575f80fd5b84356129d4816128ad565b93506129e2602086016128ba565b925060408501359150612994606086016128ba565b5f8083601f840112612a07575f80fd5b50813567ffffffffffffffff811115612a1e575f80fd5b6020830191508360208260051b8501011115612a38575f80fd5b9250929050565b5f805f8060408587031215612a52575f80fd5b843567ffffffffffffffff811115612a68575f80fd5b612a74878288016129f7565b909550935050602085013567ffffffffffffffff811115612a93575f80fd5b612a9f878288016129f7565b95989497509550505050565b5f60208284031215612abb575f80fd5b813561233f816128ad565b5f8060408385031215612ad7575f80fd5b8235612ae2816127d2565b91506020830135612878816128ad565b600181811c90821680612b0657607f821691505b602082108103612b2457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a6d57610a6d612b2a565b5f82612b6f57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610a6d57610a6d612b2a565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b61ffff8181168382160190811115610a6d57610a6d612b2a565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b80820180821115610a6d57610a6d612b2a565b5f60208284031215612c0f575f80fd5b5051919050565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b81811015612c665783516001600160a01b0316835260209384019390920191600101612c3f565b50506001600160a01b039590951660608401525050608001529392505050565b5f60208284031215612c96575f80fd5b815161233f816128ad565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215612cc5575f80fd5b815161233f816127d256fea26469706673582212207217eaf767ccecf32988ee9267c95d484606b00f892cbd850dd87156d0e6f73764736f6c634300081a0033
Deployed ByteCode
0x60806040526004361061028d575f3560e01c80636ddd171311610155578063ae2e9bcb116100be578063dd62ed3e11610078578063dd62ed3e14610873578063e173a7f5146108b7578063e243f05f146108d6578063e430823e146108fd578063f2fde38b1461091c578063f5ab16cc1461093b575f80fd5b8063ae2e9bcb146107a8578063b5d64149146107c1578063b9dc6bfa146107f7578063c4e326e11461080b578063cef8faea14610820578063d6ae0ec21461083f575f80fd5b80638b3ca6071161010f5780638b3ca607146106e55780638da5cb5b14610700578063925ed8f21461071d57806395d89b411461073c578063a146a55b14610750578063a9059cbb14610789575f80fd5b80636ddd17131461062657806370a0823114610644578063715018a6146106785780637764db391461068c5780637ad71f72146106ab578063842742f8146106ca575f80fd5b80633d78d410116101f75780634c8c30e8116101b15780634c8c30e81461054e5780634e2d4c8d1461056d578063500e68e91461059b578063501d815c146105c65780635be60591146105e85780636724348214610607575f80fd5b80633d78d41014610473578063406cf2291461049e57806342f7723f146104b257806348fe2287146104d15780634acc79ed146104e65780634b0432f214610518575f80fd5b806318160ddd1161024857806318160ddd146103c95780631835587e146103dc5780631a8a9eac146103fd57806323b872dd14610424578063313ce567146104435780633a98ef391461045e575f80fd5b80622a20501461029857806306fdde03146102db5780630758d924146102fc57806308233e8514610347578063095ea7b31461038b5780631202aa9a146103aa575f80fd5b3661029457005b5f80fd5b3480156102a3575f80fd5b506102c66102b23660046127e6565b600e6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156102e6575f80fd5b506102ef6109cd565b6040516102d29190612801565b348015610307575f80fd5b5061032f7f000000000000000000000000165c3410fc91ef562c50559f7d2289febed552d981565b6040516001600160a01b0390911681526020016102d2565b348015610352575f80fd5b5061037d61036136600461284c565b601060209081525f928352604080842090915290825290205481565b6040519081526020016102d2565b348015610396575f80fd5b506102c66103a5366004612883565b610a5d565b3480156103b5575f80fd5b5061037d6103c436600461284c565b610a73565b3480156103d4575f80fd5b505f5461037d565b3480156103e7575f80fd5b506103fb6103f63660046128cc565b610b4a565b005b348015610408575f80fd5b5061032f735529c1cb179b2c256501031adcdafc22d9c6d23681565b34801561042f575f80fd5b506102c661043e3660046128ff565b610c4b565b34801561044e575f80fd5b50604051601281526020016102d2565b348015610469575f80fd5b5061037d600c5481565b34801561047e575f80fd5b5061037d61048d3660046127e6565b60126020525f908152604090205481565b3480156104a9575f80fd5b506103fb610ccd565b3480156104bd575f80fd5b506103fb6104cc36600461294e565b610d39565b3480156104dc575f80fd5b5061037d600a5481565b3480156104f1575f80fd5b5061050561050036600461299f565b611006565b60405161ffff90911681526020016102d2565b348015610523575f80fd5b5060095461053a90600160301b900462ffffff1681565b60405162ffffff90911681526020016102d2565b348015610559575f80fd5b506103fb6105683660046129b6565b61103b565b348015610578575f80fd5b506102c66105873660046127e6565b600f6020525f908152604090205460ff1681565b3480156105a6575f80fd5b5061037d6105b53660046127e6565b600d6020525f908152604090205481565b3480156105d1575f80fd5b5060095461053a906301000000900462ffffff1681565b3480156105f3575f80fd5b5060075461032f906001600160a01b031681565b348015610612575f80fd5b506103fb610621366004612a3f565b611100565b348015610631575f80fd5b506009546102c690610100900460ff1681565b34801561064f575f80fd5b5061037d61065e3660046127e6565b6001600160a01b03165f9081526001602052604090205490565b348015610683575f80fd5b506103fb6112a0565b348015610697575f80fd5b506009546102c69062010000900460ff1681565b3480156106b6575f80fd5b5061032f6106c536600461299f565b6112d5565b3480156106d5575f80fd5b5061037d670de0b6b3a764000081565b3480156106f0575f80fd5b50600b5461053a9062ffffff1681565b34801561070b575f80fd5b506005546001600160a01b031661032f565b348015610728575f80fd5b506103fb610737366004612aab565b6112fd565b348015610747575f80fd5b506102ef611343565b34801561075b575f80fd5b50600b5461077490640100000000900463ffffffff1681565b60405163ffffffff90911681526020016102d2565b348015610794575f80fd5b506102c66107a3366004612883565b611352565b3480156107b3575f80fd5b506009546102c69060ff1681565b3480156107cc575f80fd5b5061037d6107db36600461284c565b601460209081525f928352604080842090915290825290205481565b348015610802575f80fd5b5061037d603281565b348015610816575f80fd5b5061053a614e2081565b34801561082b575f80fd5b5061032f61083a36600461299f565b61135e565b34801561084a575f80fd5b5061032f6108593660046127e6565b60136020525f90815260409020546001600160a01b031681565b34801561087e575f80fd5b5061037d61088d36600461284c565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156108c2575f80fd5b506103fb6108d1366004612ac6565b61136d565b3480156108e1575f80fd5b5061032f73165c3410fc91ef562c50559f7d2289febed552d981565b348015610908575f80fd5b506103fb6109173660046127e6565b611428565b348015610927575f80fd5b506103fb6109363660046127e6565b61158b565b348015610946575f80fd5b506109946109553660046127e6565b60156020525f9081526040902080546001820154600283015460038401546004909401546001600160a01b03841694600160a01b90940460ff16939086565b604080516001600160a01b03909716875260ff9095166020870152938501929092526060840152608083015260a082015260c0016102d2565b6060600380546109dc90612af2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0890612af2565b8015610a535780601f10610a2a57610100808354040283529160200191610a53565b820191905f5260205f20905b815481529060010190602001808311610a3657829003601f168201915b5050505050905090565b5f610a69338484611600565b5060015b92915050565b6001600160a01b038082165f908152601560209081526040808320600201549386168352600d909152812054909182916b033b2e3c9fd0803ce800000091610aba91612b3e565b610ac49190612b55565b6001600160a01b038086165f908152601460209081526040808320938816835292905220549091508111610afb575f915050610a6d565b6001600160a01b038084165f818152601560209081526040808320600101549489168352601482528083209383529290522054610b389083612b74565b610b429190612b55565b949350505050565b6005546001600160a01b03163314610b7d5760405162461bcd60e51b8152600401610b7490612b87565b60405180910390fd5b60098054831580156101000261ff001990921691909117909155610c085760328162ffffff1610158015610bb9575062030d408162ffffff1611155b610bf45760405162461bcd60e51b815260206004820152600c60248201526b36382330b1ba37b91027a7a960a11b6044820152606401610b74565b600b805462ffffff191662ffffff83161790555b60408051831515815262ffffff831660208201527fce6168caec8e3c0ecc305a76ba51b3a63a066a8e0e0f08da50124ac194c45828910160405180910390a15050565b6001600160a01b0383165f90815260026020908152604080832033845290915281205482811015610caa5760405162461bcd60e51b8152602060048201526009602482015268616c6c6f77616e636560b81b6044820152606401610b74565b610cb78533858403611600565b610cc28585856116bc565b506001949350505050565b600260065403610d0b5760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610b74565b6002600655335f81815260136020526040902054610d3291906001600160a01b03166118fd565b6001600655565b6005546001600160a01b03163314610d635760405162461bcd60e51b8152600401610b7490612b87565b6101f48461ffff1611158015610d7f57506101f48361ffff1611155b8015610d9157506101f48261ffff1611155b8015610da357506101f48161ffff1611155b610dd85760405162461bcd60e51b81526020600482015260066024820152656665653e352560d01b6044820152606401610b74565b6101f4610de58486612baa565b61ffff161115610e205760405162461bcd60e51b81526020600482015260066024820152656275793e352560d01b6044820152606401610b74565b6101f4610e2d8284612baa565b61ffff161115610e695760405162461bcd60e51b815260206004820152600760248201526673656c6c3e352560c81b6044820152606401610b74565b8360085f81548110610e7d57610e7d612bd8565b905f5260205f2090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555082600860016003811115610ec057610ec0612bc4565b81548110610ed057610ed0612bd8565b905f5260205f2090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555081600860026003811115610f1357610f13612bc4565b81548110610f2357610f23612bd8565b905f5260205f2090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550806008600380811115610f6557610f65612bc4565b81548110610f7557610f75612bd8565b905f5260205f2090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055507f82e28ed4e0a5f6621902d3bd7b830a98d7726bfbcba9043688f6225733c753b384848484604051610ff8949392919061ffff948516815292841660208401529083166040830152909116606082015260800190565b60405180910390a150505050565b60088181548110611015575f80fd5b905f5260205f209060109182820401919006600202915054906101000a900461ffff1681565b6005546001600160a01b031633146110655760405162461bcd60e51b8152600401610b7490612b87565b60098054600a84905568ffffff0000000000ff191685151568ffffff00000000000019811691909117600160301b62ffffff8781169182029290921765ffffff000000191663010000009286169283021790935560408051928352602083019390935291810184905260608101919091527fef6d1d438cd000dd9f4502fbbd115e71d6c17f337db4835feb3ac8f11025963490608001610ff8565b6005546001600160a01b0316331461112a5760405162461bcd60e51b8152600401610b7490612b87565b8281146111685760405162461bcd60e51b815260206004820152600c60248201526b0d8cadc40dad2e6dac2e8c6d60a31b6044820152606401610b74565b335f5b8481101561126c576111bc8287878481811061118957611189612bd8565b905060200201602081019061119e91906127e6565b8686858181106111b0576111b0612bd8565b905060200201356116bc565b600f5f8787848181106111d1576111d1612bd8565b90506020020160208101906111e691906127e6565b6001600160a01b0316815260208101919091526040015f205460ff166112645761126486868381811061121b5761121b612bd8565b905060200201602081019061123091906127e6565b61125f88888581811061124557611245612bd8565b905060200201602081019061125a91906127e6565b611a4a565b611b10565b60010161116b565b506001600160a01b0381165f908152600f602052604090205460ff16611299576112998161125f83611a4a565b5050505050565b6005546001600160a01b031633146112ca5760405162461bcd60e51b8152600401610b7490612b87565b6112d35f611c31565b565b601181815481106112e4575f80fd5b5f918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146113275760405162461bcd60e51b8152600401610b7490612b87565b60098054911515620100000262ff000019909216919091179055565b6060600480546109dc90612af2565b5f610a693384846116bc565b601681815481106112e4575f80fd5b6005546001600160a01b031633146113975760405162461bcd60e51b8152600401610b7490612b87565b6001600160a01b0382165f908152600f60205260409020805460ff191682158015919091179091556113d2576113cd825f611b10565b6113df565b6113df8261125f84611a4a565b816001600160a01b03167f4ad5c40292f5355e29e1c0077d317469611069eef7ac097f2a2e9dae09111d3f8260405161141c911515815260200190565b60405180910390a25050565b6001600160a01b038116735529c1cb179b2c256501031adcdafc22d9c6d2361461148b5760405162461bcd60e51b815260206004820152601460248201527313db9b1e481c14dd5b91105248185b1b1bddd95960621b6044820152606401610b74565b335f818152601360205260409020546114ad91906001600160a01b03166118fd565b335f81815260136020908152604080832080546001600160a01b031916735529c1cb179b2c256501031adcdafc22d9c6d2361790557ff3f6cd4fc21fb96bcdcd759aaaa174a53cdb884052d91ed820fc88ea9f2848d454938352600d9091529020546b033b2e3c9fd0803ce80000009161152691612b3e565b6115309190612b55565b335f818152601460209081526040808320735529c1cb179b2c256501031adcdafc22d9c6d23680855292528083209490945592517fe6af3df4c89fda70dd523889bcc7fcd9617063079a57a4ca7dd26cd0755d748a9190a350565b6005546001600160a01b031633146115b55760405162461bcd60e51b8152600401610b7490612b87565b6001600160a01b0381166115f45760405162461bcd60e51b8152600401610b74906020808252600490820152637a65726f60e01b604082015260600190565b6115fd81611c31565b50565b6001600160a01b0383161580159061162057506001600160a01b03821615155b61165b5760405162461bcd60e51b815260206004820152600c60248201526b617070726f7665207a65726f60a01b6044820152606401610b74565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6116c684611c82565b90505f6116d284611c82565b305f908152600160205260408120549192506116ed85611cab565b6001600160a01b038089165f908152601360205260409020546001600160701b0392909216925016806117445760165f8154811061172d5761172d612bd8565b5f918252602090912001546001600160a01b031690505b600954610100900460ff16801561175b5750818310155b80156117715750600b546301000000900460ff16155b801561178a57506007546001600160a01b038881169116145b156117ba57600b805463ff000000191663010000001790556117ac8282611cf5565b600b805463ff000000191690555b6001600160a01b0388165f908152600e602052604090205460ff161580156117fa57506001600160a01b0387165f908152600e602052604090205460ff16155b15611842575f8061180c888888611ef9565b909250905081156118295781880397506118298a61036984612044565b801561183f57808803975061183f8a3083612044565b50505b61184d888888612044565b60095460ff168015611867575060095462010000900460ff165b801561187d5750600b546301000000900460ff16155b1561189b5760095461189b906301000000900462ffffff168261217e565b6001600160a01b0388165f908152600f602052604090205460ff166118c7576118c78861125f8a611a4a565b6001600160a01b0387165f908152600f602052604090205460ff166118f3576118f38761125f89611a4a565b5050505050505050565b6001600160a01b03811661190f575050565b61191982826122bf565b611921575050565b5f61192c8383610a73565b90508015611a45576001600160a01b038083165f9081526015602052604090205461195991168483612346565b6001600160a01b0382165f9081526015602052604081206003018054839290611983908490612bec565b90915550506001600160a01b038084165f81815260106020908152604080832094871683529381528382204290556015815283822060020154928252600d905291909120546b033b2e3c9fd0803ce8000000916119df91612b3e565b6119e99190612b55565b6001600160a01b038481165f818152601460209081526040808320948816808452948252918290209490945551848152919290917fd94485a948dec1dc5b1b1d372cc2b813cc40e47cd2a8eeb2f44d93ee966b372191016116af565b505050565b6001600160a01b0381165f90815260016020526040812054670de0b6b3a7640000811015611a7a57505f92915050565b6007546040516370a0823160e01b81526001600160a01b0385811660048301525f9261271092614e2092909116906370a0823190602401602060405180830381865afa158015611acc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611af09190612bff565b611afa9190612b3e565b611b049190612b55565b9050610b428183612bec565b6001600160a01b0382165f908152600d6020526040902054818114611a45578015611b5a576001600160a01b038084165f90815260136020526040902054611b5a918591166118fd565b815f03611b6f57611b6a83612402565b611b7f565b805f03611b7f57611b7f83612506565b8181600c54611b8e9190612b74565b611b989190612bec565b600c556001600160a01b038084165f908152600d602090815260408083208690556013909152902054168015611c2b576001600160a01b0381165f908152601560205260409020600201546b033b2e3c9fd0803ce800000090611bfb9085612b3e565b611c059190612b55565b6001600160a01b038086165f908152601460209081526040808320938616835292905220555b50505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b03821615801590610a6d5750506007546001600160a01b0390811691161490565b600b546007546001600160a01b03165f90815260016020526040812054909162ffffff1690611cda9190612b55565b905081816001600160701b03161115611cf05750805b919050565b815f03611d00575050565b5f611d0a826125cf565b6001600160a01b038381165f908152601560205260408082205490516370a0823160e01b815230600482015293945090929116906370a0823190602401602060405180830381865afa158015611d62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d869190612bff565b9050611db3307f000000000000000000000000165c3410fc91ef562c50559f7d2289febed552d95f611600565b611dde307f000000000000000000000000165c3410fc91ef562c50559f7d2289febed552d986611600565b604051635c11d79560e01b81526001600160a01b037f000000000000000000000000165c3410fc91ef562c50559f7d2289febed552d91690635c11d79590611e329087905f90879030904290600401612c16565b5f604051808303815f87803b158015611e49575f80fd5b505af1925050508015611e5a575060015b611e645750505050565b6001600160a01b038381165f908152601560205260408082205490516370a0823160e01b8152306004820152919216906370a0823190602401602060405180830381865afa158015611eb8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611edc9190612bff565b90508181111561129957611299611ef38383612b74565b8561270c565b5f808215611f9e576127106008600281548110611f1857611f18612bd8565b5f9182526020909120601082040154611f4191600f166002026101000a900461ffff1687612b3e565b611f4b9190612b55565b91506127106008600381548110611f6457611f64612bd8565b5f9182526020909120601082040154611f8d91600f166002026101000a900461ffff1687612b3e565b611f979190612b55565b905061203c565b831561203c5761271060085f81548110611fba57611fba612bd8565b5f9182526020909120601082040154611fe391600f166002026101000a900461ffff1687612b3e565b611fed9190612b55565b9150612710600860018154811061200657612006612bd8565b5f918252602090912060108204015461202f91600f166002026101000a900461ffff1687612b3e565b6120399190612b55565b90505b935093915050565b6001600160a01b0383161580159061206457506001600160a01b03821615155b61209c5760405162461bcd60e51b81526020600482015260096024820152683d32b9379030b2323960b91b6044820152606401610b74565b6001600160a01b0383165f90815260016020526040902054818110156120ee5760405162461bcd60e51b81526020600482015260076024820152661b1bddc818985b60ca1b6044820152606401610b74565b6001600160a01b038085165f90815260016020526040808220858503905591851681529081208054849290612124908490612bec565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161217091815260200190565b60405180910390a350505050565b6011545f81900361218e57505050565b5f805a90505f5b85831080156121a357508381105b80156121af5750603281105b156122b757600b54640100000000900463ffffffff1684116121dd57600b805467ffffffff00000000191690555b600b54601180545f92640100000000900463ffffffff1690811061220357612203612bd8565b5f9182526020808320909101546001600160a01b0316808352600f90915260409091205490915060ff1615801561224257505f6122408288610a73565b115b8015612253575061225381876122bf565b156122625761226281876118fd565b600b8054600163ffffffff640100000000808404821683019091160267ffffffff00000000199092169190911790915591909101905a6122a29084612b74565b6122ac9085612bec565b93505a925050612195565b505050505050565b6009546001600160a01b038381165f9081526010602090815260408083209386168352929052908120549091429161230391600160301b900462ffffff1690612bec565b10801561233f57506001600160a01b0382165f90815260156020526040902060010154600a546123339190612b55565b61233d8484610a73565b115b9392505050565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015612392573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b69190612c86565b611a455760405162461bcd60e51b815260206004820152601a60248201527f5361666545524332303a207472616e73666572206661696c65640000000000006044820152606401610b74565b6001600160a01b0381165f90815260126020526040902054601154612428600182612b74565b8210156124b5575f601161243d600184612b74565b8154811061244d5761244d612bd8565b5f91825260209091200154601180546001600160a01b03909216925082918590811061247b5761247b612bd8565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526012909152604090208290555b60118054806124c6576124c6612ca1565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b03949094168152601290935250506040812055565b6001600160a01b038181165f908152601360205260409020541661256f5760165f8154811061253757612537612bd8565b5f9182526020808320909101546001600160a01b0384811684526013909252604090922080546001600160a01b031916919092161790555b601180546001600160a01b039092165f818152601260205260408120849055600184018355919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6890910180546001600160a01b0319169091179055565b604080516003808252608082019092526060915f919060208201848036833701905050905030815f8151811061260757612607612bd8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000165c3410fc91ef562c50559f7d2289febed552d96001600160a01b031663ef8ef56f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a79190612cb5565b816001815181106126ba576126ba612bd8565b60200260200101906001600160a01b031690816001600160a01b03168152505082816002815181106126ee576126ee612bd8565b6001600160a01b039092166020928302919091019091015292915050565b8115806127195750600c54155b15612722575050565b6001600160a01b0381165f908152601560205260408120600101546127479084612b3e565b6001600160a01b0383165f90815260156020526040812060040180549293508392909190612776908490612bec565b9091555050600c54612794826b033b2e3c9fd0803ce8000000612b3e565b61279e9190612b55565b6001600160a01b0383165f90815260156020526040812060020180549091906127c8908490612bec565b9091555050505050565b6001600160a01b03811681146115fd575f80fd5b5f602082840312156127f6575f80fd5b813561233f816127d2565b602081525f82518060208401525f5b8181101561282d5760208186018101516040868401015201612810565b505f604082850101526040601f19601f83011684010191505092915050565b5f806040838503121561285d575f80fd5b8235612868816127d2565b91506020830135612878816127d2565b809150509250929050565b5f8060408385031215612894575f80fd5b823561289f816127d2565b946020939093013593505050565b80151581146115fd575f80fd5b803562ffffff81168114611cf0575f80fd5b5f80604083850312156128dd575f80fd5b82356128e8816128ad565b91506128f6602084016128ba565b90509250929050565b5f805f60608486031215612911575f80fd5b833561291c816127d2565b9250602084013561292c816127d2565b929592945050506040919091013590565b803561ffff81168114611cf0575f80fd5b5f805f8060808587031215612961575f80fd5b61296a8561293d565b93506129786020860161293d565b92506129866040860161293d565b91506129946060860161293d565b905092959194509250565b5f602082840312156129af575f80fd5b5035919050565b5f805f80608085870312156129c9575f80fd5b84356129d4816128ad565b93506129e2602086016128ba565b925060408501359150612994606086016128ba565b5f8083601f840112612a07575f80fd5b50813567ffffffffffffffff811115612a1e575f80fd5b6020830191508360208260051b8501011115612a38575f80fd5b9250929050565b5f805f8060408587031215612a52575f80fd5b843567ffffffffffffffff811115612a68575f80fd5b612a74878288016129f7565b909550935050602085013567ffffffffffffffff811115612a93575f80fd5b612a9f878288016129f7565b95989497509550505050565b5f60208284031215612abb575f80fd5b813561233f816128ad565b5f8060408385031215612ad7575f80fd5b8235612ae2816127d2565b91506020830135612878816128ad565b600181811c90821680612b0657607f821691505b602082108103612b2457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a6d57610a6d612b2a565b5f82612b6f57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610a6d57610a6d612b2a565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b61ffff8181168382160190811115610a6d57610a6d612b2a565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b80820180821115610a6d57610a6d612b2a565b5f60208284031215612c0f575f80fd5b5051919050565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b81811015612c665783516001600160a01b0316835260209384019390920191600101612c3f565b50506001600160a01b039590951660608401525050608001529392505050565b5f60208284031215612c96575f80fd5b815161233f816128ad565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215612cc5575f80fd5b815161233f816127d256fea26469706673582212207217eaf767ccecf32988ee9267c95d484606b00f892cbd850dd87156d0e6f73764736f6c634300081a0033