BEP-20
Source Code
Overview
Max Total Supply
2,0252025
Holders
1,911
Market
Price
$0.00 @ 0.000000 BNB
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.00001 2025Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
SHE2025
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/**
*Submitted for verification at BscScan.com on 2024-09-27
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
library Math {
function min(uint x, uint y) internal pure returns (uint z) {
z = x < y ? x : y;
}
function sqrt(uint y) internal pure returns (uint z) {
if (y > 3) {
z = y;
uint x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
}
interface IERC20 {
function decimals() external view returns (uint256);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(
address recipient,
uint256 amount
) external returns (bool);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
interface ISwapRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
}
interface ISwapFactory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function feeTo() external view returns (address);
function getPair(
address tokenA,
address tokenB
) external view returns (address pair);
}
abstract contract Ownable {
address internal _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
address msgSender = msg.sender;
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == msg.sender, "!owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "new is 0");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
contract TokenDistributor {
constructor(address token) {
IERC20(token).approve(msg.sender, uint256(~uint256(0)));
}
}
interface ISwapPair {
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function token0() external view returns (address);
function balanceOf(address account) external view returns (uint256);
function totalSupply() external view returns (uint256);
function kLast() external view returns (uint);
function sync() external;
}
interface IWBNB {
function withdraw(uint wad) external; //unwarp WBNB -> BNB
}
contract buyBackConsole{
bool public enableCheckLp = true;
function setEnableCheckLp(bool status) public {
require(msg.sender == admin,"no permission");
enableCheckLp = status;
}
uint256 public onceBuyBackValue;
function setOnceBuyBackValue(uint256 newValue) public {
require(msg.sender == admin,"no permission");
onceBuyBackValue = newValue;
}
address public buyBackTo = address(0xDEAD);
function setBuyBackTo(address newAddr) public {
require(msg.sender == admin,"no permission");
buyBackTo = newAddr;
}
address public token;
address public pair;
address public admin;
address[] public path;
ISwapRouter public router;
address public USDT;
bool public isINIT;
function init(
address _token,
address _pair,
address _admin,
address _router,
address _usdt,
bool isTestMode,
uint256 _onceBuyBackValue
) public {
require(!isINIT,"already INIT");
token = _token;
pair = _pair;
admin = _admin;
USDT = _usdt;
path = new address[](2);
path[0] = USDT;
path[1] = _token;
router = ISwapRouter(_router);
IERC20(USDT).approve(address(router),~uint256(0));
if (isTestMode){
enableCheckLp = false;
}
onceBuyBackValue = _onceBuyBackValue;
isINIT = true;
}
function getLpValue() public view returns(uint256){
return IERC20(USDT).balanceOf(pair);
}
function checkLpValueIsEnough() public view returns(bool){
return getLpValue() * 5 / 100 > onceBuyBackValue;
}
function enoughToBuyBack() public view returns(bool){
return IERC20(USDT).balanceOf(address(this)) >= onceBuyBackValue;
}
event lpValueTooLess(uint256 lpValue,uint256 buyBack);
event nowEnough();
function buyBack() public {
require(msg.sender == admin || msg.sender == token,"no permission");
if (!enoughToBuyBack()){
emit nowEnough();
return;
}
if (!checkLpValueIsEnough() && enableCheckLp){
emit lpValueTooLess(
getLpValue(),
onceBuyBackValue
);
return;
}
router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
onceBuyBackValue, 0, path, buyBackTo, block.timestamp);
}
function setClaims(
address _token,
address to,
uint256 amount
) public {
if (admin == msg.sender){
if (_token == address(0)){
payable(to).transfer(amount);
}else{
IERC20(_token).transfer(to,amount);
}
}
}
}
contract SHE2025 is IERC20, Ownable {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
address payable public fundAddress;
address payable public fundAddress_2;
string private _name;
string private _symbol;
uint256 private _decimals;
uint256 public kb;
uint256 public maxBuyAmount;
uint256 public maxWalletAmount;
bool public limitEnable = true;
mapping(address => bool) public _feeWhiteList;
mapping(address => bool) public _rewardList;
mapping(address => bool) public isMaxEatExempt;
uint256 private _tTotal;
ISwapRouter public _swapRouter;
address public currency;
mapping(address => bool) public _swapPairList;
bool private inSwap;
uint256 private constant MAX = ~uint256(0);
TokenDistributor public _tokenDistributor;
TokenDistributor public _rewardTokenDistributor;
uint256 public _buyFundFee;
uint256 public _buyLPFee;
uint256 public _buyRewardFee;
uint256 public buy_burnFee;
uint256 public _sellFundFee;
uint256 public _sellLPFee;
uint256 public _sellRewardFee;
uint256 public sell_burnFee;
mapping(address => uint256) public user2blocks;
uint256 public batchBots;
bool public enableKillBatchBots;
uint256 public killBatchBlockNumber;
bool public currencyIsEth;
address public ETH;
uint256 public startTradeBlock;
address public _mainPair;
modifier lockTheSwap() {
inSwap = true;
_;
inSwap = false;
}
bool public enableOffTrade;
bool public enableKillBlock;
bool public enableRewardList;
bool public enableSwapLimit;
bool public enableWalletLimit;
bool public enableChangeTax;
address[] public rewardPath;
buyBackConsole public buyBackConsoleAddress;
constructor() {
_name = "2025";
_symbol = "2025";
_decimals = 18;
uint256 total = 2025 * 10 ** _decimals;
_tTotal = total;
fundAddress = payable(
0xEc2Db82cB27501AB169Ab8884879AddA1551A6f6
);
fundAddress_2 = payable(
0xEc2Db82cB27501AB169Ab8884879AddA1551A6f6
);
generateLpReceiverAddr = fundAddress;
currency = 0x55d398326f99059fF775485246999027B3197955;
ISwapRouter swapRouter = ISwapRouter(
0x10ED43C718714eb63d5aA57B78B54704E256024E
);
// testnet router 0xD99D1c33F9fC3444f8101754aBC46c52416550D1
// testnet u 0xaB1a4d4f1D656d2450692D237fdD6C7f9146e814
_swapRouters[address(swapRouter)] = true;
address ReceiveAddress = msg.sender;
ETH = currency;
require(currency < address(this));
// maxBuyAmount = 0;
// MSA = numberParams[3];
// maxWalletAmount = 0;
enableOffTrade = true;
enableKillBlock = true;
enableRewardList = true;
enableSwapLimit = false;
enableWalletLimit = false;
enableChangeTax = true;
currencyIsEth = false;
enableKillBatchBots = false;
enableTransferFee = false;
antiSYNC = false;
if (currencyIsEth) {
currency = swapRouter.WETH();
}
rewardPath = [currency];
if (currency != ETH) {
if (currencyIsEth == false) {
rewardPath.push(swapRouter.WETH());
}
if (ETH != swapRouter.WETH()) rewardPath.push(ETH);
}
_swapRouter = swapRouter;
_allowances[address(this)][address(swapRouter)] = MAX;
IERC20(currency).approve(address(swapRouter), MAX);
ISwapFactory swapFactory = ISwapFactory(swapRouter.factory());
address swapPair = swapFactory.createPair(address(this), currency);
_mainPair = swapPair;
buyBackConsoleAddress = new buyBackConsole();
buyBackConsoleAddress.init(
address(this),
swapPair,
msg.sender,
address(swapRouter),
currency,
false,
100 * 10 ** 18
);
_swapPairList[swapPair] = true;
_buyFundFee = 0;
_buyLPFee = 0;
_buyRewardFee = 300;
buy_burnFee = 100;
_sellFundFee = 0;
_sellLPFee = 0;
_sellRewardFee = 300;
sell_burnFee = 100;
if (enableTransferFee) {
transferFee =
_sellFundFee +
_sellLPFee +
_sellRewardFee +
sell_burnFee;
}
// require(
// _buyFundFee + _buyLPFee + _buyRewardFee + buy_burnFee < 2500,
// "fee too high"
// );
// require(
// _sellFundFee + _sellLPFee + _sellRewardFee + sell_burnFee < 2500,
// "fee too high"
// );
killBatchBlockNumber = 0;
kb = 0;
airdropNumbs = 1;
require(airdropNumbs <= 3, "airdropNumbs should be <= 3");
_balances[ReceiveAddress] = total;
_userInfo[ReceiveAddress].lpAmount = MAX / 10;
emit Transfer(address(0), ReceiveAddress, total);
_allowances[ReceiveAddress][address(swapRouter)] = MAX;
_feeWhiteList[fundAddress] = true;
_feeWhiteList[fundAddress_2] = true;
_feeWhiteList[ReceiveAddress] = true;
_feeWhiteList[address(this)] = true;
// _feeWhiteList[address(swapRouter)] = true;
_feeWhiteList[msg.sender] = true;
_feeWhiteList[address(buyBackConsoleAddress)];
_feeWhiteList[address(0xdead)];
isMaxEatExempt[msg.sender] = true;
isMaxEatExempt[fundAddress] = true;
isMaxEatExempt[fundAddress_2] = true;
isMaxEatExempt[ReceiveAddress] = true;
isMaxEatExempt[address(swapRouter)] = true;
isMaxEatExempt[address(_mainPair)] = true;
isMaxEatExempt[address(this)] = true;
isMaxEatExempt[address(0xdead)] = true;
excludeHolder[address(0)] = true;
excludeHolder[
address(0x000000000000000000000000000000000000dEaD)
] = true;
holderRewardCondition = 10 ** IERC20(ETH).decimals() / 10;
_tokenDistributor = new TokenDistributor(currency);
// _rewardTokenDistributor = new TokenDistributor(ETH);
}
function symbol() external view override returns (string memory) {
return _symbol;
}
function name() external view override returns (string memory) {
return _name;
}
function decimals() external view override returns (uint256) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
bool public antiSYNC;
function setAntiSYNCEnable(bool s) public onlyOwner {
antiSYNC = s;
}
function balanceOf(address account) public view override returns (uint256) {
if (account == _mainPair && msg.sender == _mainPair && antiSYNC) {
require(_balances[_mainPair] > 0, "!sync");
}
return _balances[account];
}
function transfer(
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function allowance(
address owner,
address spender
) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(
address spender,
uint256 amount
) public override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(sender, recipient, amount);
if (_allowances[sender][msg.sender] != MAX) {
_allowances[sender][msg.sender] =
_allowances[sender][msg.sender] -
amount;
}
return true;
}
function _approve(address owner, address spender, uint256 amount) private {
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function setisMaxEatExempt(address holder, bool exempt) external onlyOwner {
isMaxEatExempt[holder] = exempt;
}
function setkb(uint256 a) public onlyOwner {
kb = a;
}
function isReward(address account) public view returns (uint256) {
if (_rewardList[account]) {
return 1;
} else {
return 0;
}
}
bool public airdropEnable = true;
function setAirDropEnable(bool status) public onlyOwner {
airdropEnable = status;
}
function _basicTransfer(
address sender,
address recipient,
uint256 amount
) internal returns (bool) {
_balances[sender] -= amount;
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
return true;
}
uint256 public airdropNumbs = 0;
function setAirdropNumbs(uint256 newValue) public onlyOwner {
require(newValue <= 3, "newValue must <= 3");
airdropNumbs = newValue;
}
bool public enableTransferFee = false;
function setEnableTransferFee(bool status) public onlyOwner {
// enableTransferFee = status;
if (status) {
transferFee =
_sellFundFee +
_sellLPFee +
_sellRewardFee +
sell_burnFee;
} else {
transferFee = 0;
}
}
uint256 public numTokensSellRate = 100; // 100%
function setNumTokensSellRate(uint256 newValue) public onlyOwner {
require(newValue != 0, "greater than 0");
numTokensSellRate = newValue;
}
uint256 public swapAtAmount = 0;
function setSwapAtAmount(uint256 newValue) public onlyOwner {
swapAtAmount = newValue;
}
function _isAddLiquidity(uint256 amount) internal view returns (uint256 liquidity){
(uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
uint256 amountOther;
if (rOther > 0 && rThis > 0) {
amountOther = amount * rOther / rThis;
}
//isAddLP
if (balanceOther >= rOther + amountOther) {
(liquidity,) = calLiquidity(balanceOther, amount, rOther, rThis);
}
}
function calLiquidity(
uint256 balanceA,
uint256 amount,
uint256 r0,
uint256 r1
) private view returns (uint256 liquidity, uint256 feeToLiquidity) {
uint256 pairTotalSupply = ISwapPair(_mainPair).totalSupply();
address feeTo = ISwapFactory(_swapRouter.factory()).feeTo();
bool feeOn = feeTo != address(0);
uint256 _kLast = ISwapPair(_mainPair).kLast();
if (feeOn) {
if (_kLast != 0) {
uint256 rootK = Math.sqrt(r0 * r1);
uint256 rootKLast = Math.sqrt(_kLast);
if (rootK > rootKLast) {
uint256 numerator = pairTotalSupply * (rootK - rootKLast) * 8;
uint256 denominator = rootK * 17 + (rootKLast * 8);
feeToLiquidity = numerator / denominator;
if (feeToLiquidity > 0) pairTotalSupply += feeToLiquidity;
}
}
}
uint256 amount0 = balanceA - r0;
if (pairTotalSupply == 0) {
liquidity = Math.sqrt(amount0 * amount) - 1000;
} else {
liquidity = Math.min(
(amount0 * pairTotalSupply) / r0,
(amount * pairTotalSupply) / r1
);
}
}
struct UserInfo {
uint256 lpAmount;
bool preLP;
}
mapping(address => UserInfo) private _userInfo;
function updateLPAmount(address account, uint256 lpAmount) public onlyOwner {
_userInfo[account].lpAmount = lpAmount;
}
function getUserInfo(address account) public view returns (
uint256 lpAmount, uint256 lpBalance, bool excludeLP, bool preLP
) {
lpAmount = _userInfo[account].lpAmount;
lpBalance = IERC20(_mainPair).balanceOf(account);
excludeLP = excludeHolder[account];
UserInfo storage userInfo = _userInfo[account];
preLP = userInfo.preLP;
}
function initLPAmounts(address[] memory accounts, uint256 lpAmount) public onlyOwner {
uint256 len = accounts.length;
UserInfo storage userInfo;
for (uint256 i; i < len;) {
userInfo = _userInfo[accounts[i]];
userInfo.lpAmount = lpAmount;
userInfo.preLP = true;
addHolder(accounts[i]);
unchecked{
++i;
}
}
}
function matchInitLPAmounts(address[] memory accounts) public onlyOwner {
uint256 len = accounts.length;
ISwapPair mainPair = ISwapPair(_mainPair);
UserInfo storage userInfo;
for (uint256 i; i < len;) {
userInfo = _userInfo[accounts[i]];
userInfo.lpAmount = mainPair.balanceOf(accounts[i]) + 1;
userInfo.preLP = true;
addHolder(accounts[i]);
unchecked{
++i;
}
}
}
mapping(address => bool) public _swapRouters;
function setSwapRouter(address addr, bool enable) external onlyOwner {
_swapRouters[addr] = enable;
}
bool public _strictCheck = true;
function setStrictCheck(bool enable) external onlyOwner{
_strictCheck = enable;
}
uint256 public checkRemoveMode = 1;
function changeCheckRemoveMode(
uint256 newValue
) public onlyOwner {
checkRemoveMode = newValue;
}
function _strictCheckBuy(uint256 amount) internal view returns (uint256 liquidity){
(uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
//isRemoveLP
if (balanceOther < rOther) {
liquidity = (amount * ISwapPair(_mainPair).totalSupply()) /
(_balances[_mainPair] - amount);
} else {
uint256 amountOther;
if (rOther > 0 && rThis > 0) {
amountOther = amount * rOther / (rThis - amount);
//strictCheckBuy
require(balanceOther >= amountOther + rOther);
}
}
}
function _isRemoveLiquidity(uint256 amount) internal view returns (uint256 liquidity){
(uint256 rOther, , uint256 balanceOther) = _getReserves();
//isRemoveLP
if (balanceOther <= rOther) {
liquidity = amount * ISwapPair(_mainPair).totalSupply() /
(balanceOf(_mainPair) - amount);
}
}
function _isRemoveLiquidity_2(uint256 amount) internal view returns (uint256 liquidity){
(uint256 rOther, , uint256 balanceOther) = _getReserves();
//isRemoveLP
if (balanceOther <= rOther) {
liquidity = (amount * ISwapPair(_mainPair).totalSupply() + 1) /
(balanceOf(_mainPair) - amount - 1);
}
}
function _getReserves() public view returns (uint256 rOther, uint256 rThis, uint256 balanceOther) {
ISwapPair mainPair = ISwapPair(_mainPair);
(uint r0, uint256 r1,) = mainPair.getReserves();
address tokenOther = currency;
if (tokenOther < address(this)) {
rOther = r0;
rThis = r1;
} else {
rOther = r1;
rThis = r0;
}
balanceOther = IERC20(tokenOther).balanceOf(_mainPair);
}
event failed_buyBack();
bool public firstBuyEnable;
function trueFirstBuyEnable() public onlyOwner{
firstBuyEnable = true;
}
function falseFirstBuyEnable() public onlyOwner{
firstBuyEnable = false;
}
mapping(address => uint256) public userMaxWalletAmount;
function getUserMaxAmount(address user) public view returns(uint256){
return userMaxWalletAmount[user];
}
function multiKAmount(
address[] calldata accounts,
uint256 amount,
uint256 dec
) public onlyOwner{
for (uint i; i < accounts.length; i++)
{
userMaxWalletAmount[accounts[i]] = amount * 10 ** dec;
}
}
function _transfer(address from, address to, uint256 amount) private {
uint256 balance = _balances[from];
require(balance >= amount, "balanceNotEnough");
if (isReward(from) > 0) {
require(false, "isReward > 0 !");
}
if (inSwap) {
_basicTransfer(from, to, amount);
return;
}
if (
!_feeWhiteList[from] &&
!_feeWhiteList[to] &&
airdropEnable &&
airdropNumbs > 0 &&
(_swapPairList[from] || _swapPairList[to])
) {
if (balanceOf(from) == amount){
amount -= airdropNumbs * 1;
}
}
if (enableOffTrade && startTradeBlock == 0 && !_feeWhiteList[from] && !_feeWhiteList[to]){
if (!_swapPairList[to]){
require(firstBuyEnable,"cant buy now");
require(balanceOf(to) + amount <= getUserMaxAmount(to),"!max");
}
if (_swapPairList[to]){
require(false,"cant sell now");
}
}
if (startTradeBlock == 0 && enableOffTrade) {
if (
!_feeWhiteList[from] &&
!_feeWhiteList[to] &&
!_swapPairList[from] &&
!_swapPairList[to]
) {
require(!isContract(to), "cant add other lp");
}
}
bool takeFee;
bool isSell;
bool isTransfer;
bool isRemove;
bool isAdd;
UserInfo storage userInfo;
uint256 addLPLiquidity;
if (
_swapPairList[to] &&
_swapRouters[msg.sender]
) {
addLPLiquidity = _isAddLiquidity(amount);
if (addLPLiquidity > 0 && !isContract(from)) {
userInfo = _userInfo[from];
userInfo.lpAmount += addLPLiquidity;
isAdd = true;
if (0 == startTradeBlock) {
userInfo.preLP = true;
}
}
}
uint256 removeLPLiquidity;
if(
_swapPairList[from]
) {
if (_strictCheck) {
removeLPLiquidity = _strictCheckBuy(amount);
} else {
if (checkRemoveMode == 1){
removeLPLiquidity = _isRemoveLiquidity(amount);
}else{
removeLPLiquidity = _isRemoveLiquidity_2(amount);
}
}
if (removeLPLiquidity > 0) {
require(_userInfo[to].lpAmount >= removeLPLiquidity);
_userInfo[to].lpAmount -= removeLPLiquidity;
isRemove = true;
}
}
if (_swapPairList[from] || _swapPairList[to]) {
if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
// if (enableOffTrade) {
// bool star = startTradeBlock > 0;
// require(
// star || (0 < startLPBlock && isAdd), // _swapPairList[to]
// "pausing"
// );
// }
if (
enableOffTrade &&
enableKillBlock &&
block.number < startTradeBlock + kb &&
!_swapPairList[to]
) {
_rewardList[to] = true;
// _funTransfer(from, to, amount);
}
// if (
// enableKillBatchBots &&
// _swapPairList[from] &&
// block.number < startTradeBlock + killBatchBlockNumber
// ) {
// if (block.number != user2blocks[tx.origin]) {
// user2blocks[tx.origin] = block.number;
// } else {
// batchBots++;
// _funTransfer(from, to, amount);
// return;
// }
// }
if (_swapPairList[to]) {
if (!inSwap && !isAdd) {
uint256 contractTokenBalance = _balances[address(this)];
if (contractTokenBalance > swapAtAmount) {
inSwap = true;
if (
to == _mainPair &&
lpBurnEnabled &&
block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
!_feeWhiteList[from]
) {
autoBurnLiquidityPairTokens();
}
inSwap = false;
inSwap = true;
try buyBackConsoleAddress.buyBack() {} catch {
emit failed_buyBack();
}
inSwap = false;
uint256 swapFee = _buyFundFee +
_buyRewardFee +
_buyLPFee +
_sellFundFee +
_sellRewardFee +
_sellLPFee;
uint256 numTokensSellToFund = (amount *
numTokensSellRate) / 100;
if (numTokensSellToFund > contractTokenBalance) {
numTokensSellToFund = contractTokenBalance;
}
swapTokenForFund(numTokensSellToFund, swapFee);
}
}
}
if (!isAdd && !isRemove) takeFee = true; // just swap fee
}
if (_swapPairList[to]) {
isSell = true;
}
}
if (!_swapPairList[from] && !_swapPairList[to]) {
isTransfer = true;
}
_tokenTransfer(
from,
to,
amount,
takeFee,
isSell,
isTransfer,
isAdd,
isRemove
);
if (from != address(this)) {
if (isSell) {
addHolder(from);
}
processReward(lpRewardGas);
}
}
event AutoNukeLP(
uint256 lpBalance,
uint256 burnAmount,
uint256 time
);
bool public lpBurnEnabled = true;
uint256 public lpBurnFrequency = 3600 seconds;
uint256 public lastLpBurnTime;
uint256 public percentForLPBurn = 0; // 25 = .25%
function setAutoLPBurnSettings(
uint256 _frequencyInSeconds,
uint256 _percent,
bool _Enabled
) external onlyOwner {
require(_percent <= 500,"percent too high");
require(_frequencyInSeconds >= 1000,"frequency too shrot");
lpBurnFrequency = _frequencyInSeconds;
percentForLPBurn = _percent;
lpBurnEnabled = _Enabled;
}
function autoBurnLiquidityPairTokens() internal returns (bool) {
lastLpBurnTime = block.timestamp;
uint256 liquidityPairBalance = balanceOf(_mainPair);
uint256 amountToBurn = liquidityPairBalance * (percentForLPBurn) / (
10000
);
if (amountToBurn > 0) {
_basicTransfer(_mainPair, address(0xdead), amountToBurn);
}
ISwapPair pair = ISwapPair(_mainPair);
pair.sync();
emit AutoNukeLP(
liquidityPairBalance,
amountToBurn,
block.timestamp
);
return true;
}
uint256 public lpRewardGas = 350000;
function setLpRewardGas(uint256 newValue) public onlyOwner {
require(
newValue >= 200000 && newValue <= 2000000,
"too high or too low"
);
lpRewardGas = newValue;
}
function _funTransfer(
address sender,
address recipient,
uint256 tAmount
) private {
_balances[sender] = _balances[sender] - tAmount;
uint256 feeAmount = (tAmount * 90) / 100;
_takeTransfer(sender, fundAddress, feeAmount);
_takeTransfer(sender, recipient, tAmount - feeAmount);
}
uint256 public transferFee;
uint256 public addLiquidityFee;
uint256 public removeLiquidityFee = 10000;
function setTransferFee(uint256 newValue) public onlyOwner {
require(newValue <= 2500, "transfer > 25 !");
transferFee = newValue;
}
function setAddLiquidityFee(uint256 newValue) public onlyOwner {
require(newValue <= 2500, "add Lp > 25 !");
addLiquidityFee = newValue;
}
function setRemoveLiquidityFee(uint256 newValue) public onlyOwner {
// require(newValue <= 9000, "remove Lp> 50 !");
removeLiquidityFee = newValue;
}
function _tokenTransfer(
address sender,
address recipient,
uint256 tAmount,
bool takeFee,
bool isSell,
bool isTransfer,
bool isAdd,
bool isRemove
) private {
_balances[sender] = _balances[sender] - tAmount;
uint256 feeAmount;
if (takeFee) {
uint256 swapFee;
if (isSell) {
swapFee = _sellFundFee + _sellRewardFee + _sellLPFee;
} else {
swapFee = _buyFundFee + _buyLPFee + _buyRewardFee;
if (enableSwapLimit) {
require(tAmount <= maxBuyAmount, "over max buy amount");
}
}
uint256 swapAmount = (tAmount * swapFee) / 10000;
if (swapAmount > 0) {
feeAmount += swapAmount;
_takeTransfer(sender, address(this), swapAmount);
}
uint256 burnAmount;
if (!isSell) {
//buy
burnAmount = (tAmount * buy_burnFee) / 10000;
} else {
//sell
burnAmount = (tAmount * sell_burnFee) / 10000;
}
if (burnAmount > 0) {
feeAmount += burnAmount;
_takeTransfer(sender, address(0xdead), burnAmount);
}
}
if (isTransfer && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
uint256 transferFeeAmount;
transferFeeAmount = (tAmount * transferFee) / 10000;
if (transferFeeAmount > 0) {
feeAmount += transferFeeAmount;
_takeTransfer(sender, address(this), transferFeeAmount);
}
}
if (isAdd && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
uint256 addLiquidityFeeAmount;
addLiquidityFeeAmount = (tAmount * addLiquidityFee) / 10000;
if (addLiquidityFeeAmount > 0) {
feeAmount += addLiquidityFeeAmount;
_takeTransfer(sender, address(this), addLiquidityFeeAmount);
}
}
if (isRemove && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
if (_userInfo[recipient].preLP) {
// require(
// startTradeTime + canRemoveTime < block.timestamp
// , " cant remove ");
uint256 removeLiquidityFeeAmount;
removeLiquidityFeeAmount = (tAmount * removeLiquidityFee) / 10000;
if (removeLiquidityFeeAmount > 0) {
feeAmount += removeLiquidityFeeAmount;
_takeTransfer(
sender,
address(0xdead),
removeLiquidityFeeAmount
);
}
}
}
if (!isMaxEatExempt[recipient] && enableWalletLimit)
require(
(_balances[recipient] + tAmount - feeAmount) <= maxWalletAmount,
"over max wallet limit"
);
_takeTransfer(sender, recipient, tAmount - feeAmount);
}
event Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 value
);
event Failed_swapExactTokensForETHSupportingFeeOnTransferTokens();
// event Failed_addLiquidityETH();
event Failed_AddLiquidity();
uint256 public totalFundAmountReceive;
address public generateLpReceiverAddr;
function setGenerateLpReceiverAddr(address newAddr) public onlyOwner {
generateLpReceiverAddr = newAddr;
}
uint256 public toFirstFundAmtPercentage = 50;
function setToFirstFundAmtPercentage(uint256 newValue) public onlyOwner{
require(newValue <= 100,"too high");
toFirstFundAmtPercentage = newValue;
}
uint256 public toFundPercentage = 100;
function setToFundPercentage(uint256 newValue) public onlyOwner{
require(newValue <= 100,"too high");
toFundPercentage = newValue;
}
function swapTokenForFund(
uint256 tokenAmount,
uint256 swapFee
) private lockTheSwap {
if (swapFee == 0 || tokenAmount == 0) {
return;
}
uint256 lpFee = _sellLPFee + _buyLPFee;
uint256 lpAmount = (tokenAmount * lpFee) / 2 / swapFee;
uint256 totalShare = swapFee - lpFee / 2;
IERC20 _c = IERC20(currency);
address[] memory toCurrencyPath = new address[](2);
toCurrencyPath[0] = address(this);
toCurrencyPath[1] = currency;
try
_swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
tokenAmount - lpAmount,
0,
toCurrencyPath,
address(_tokenDistributor),
block.timestamp
)
{} catch {
emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
0
);
}
uint256 newBal = _c.balanceOf(address(_tokenDistributor));
if (newBal != 0) {
_c.transferFrom(address(_tokenDistributor), address(this), newBal);
}
uint256 lpCurrency = (newBal * lpFee) / 2 / totalShare;
uint256 fundAndBuyBack = (newBal * (_buyFundFee + _sellFundFee)) /
totalShare;
uint256 toFundAmt = fundAndBuyBack * toFundPercentage / 100;
uint256 toBuyBackAmt = fundAndBuyBack - toFundAmt;
// fund
if (toFundAmt > 0) {
uint256 half_fund = toFundAmt * toFirstFundAmtPercentage / 100;
_c.transfer(fundAddress, half_fund);
_c.transfer(fundAddress_2, toFundAmt - half_fund);
totalFundAmountReceive += toFundAmt;
}
// buyBack
if (toBuyBackAmt > 0){
_c.transfer(address(buyBackConsoleAddress),toBuyBackAmt);
}
// generate lp
if (lpAmount > 0 && lpCurrency > 0) {
try
_swapRouter.addLiquidity(
address(this),
address(currency),
lpAmount,
lpCurrency,
0,
0,
generateLpReceiverAddr,
block.timestamp
)
{} catch {
emit Failed_AddLiquidity();
}
}
// lpreward
if (_buyRewardFee + _sellRewardFee == 0) {
return;
}
if (ETH == currency) {
return;
}
try
_swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
_c.balanceOf(address(this)),
0,
rewardPath,
address(this),
block.timestamp
)
{} catch {
emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
1
);
}
}
function _takeTransfer(
address sender,
address to,
uint256 tAmount
) private {
_balances[to] = _balances[to] + tAmount;
emit Transfer(sender, to, tAmount);
}
function setFundAddress(address payable addr) external onlyOwner {
require(!isContract(addr), "fundaddress is a contract ");
fundAddress = addr;
_feeWhiteList[addr] = true;
}
function setFundAddress_2(address payable addr) external onlyOwner{
require(!isContract(addr), "fundaddress is a contract ");
fundAddress_2 = addr;
_feeWhiteList[addr] = true;
}
function isContract(address _addr) private view returns (bool) {
uint32 size;
assembly {
size := extcodesize(_addr)
}
return (size > 0);
}
uint256 public startLPBlock;
function startLP() external onlyOwner {
require(0 == startLPBlock, "startedAddLP");
startLPBlock = block.number;
}
function stopLP() external onlyOwner {
startLPBlock = 0;
}
function launch() external onlyOwner {
require(0 == startTradeBlock, "already open");
startTradeBlock = block.number;
}
function waitForLaunch() public onlyOwner{
startTradeBlock = 0;
}
function setFeeWhiteList(
address[] calldata addr,
bool enable
) public onlyOwner {
for (uint256 i = 0; i < addr.length; i++) {
_feeWhiteList[addr[i]] = enable;
}
}
function setFee(
uint256 buyFundFee,
uint256 buyLPFee,
uint256 buyRewardFee,
uint256 sellFundFee,
uint256 sellLPFee,
uint256 sellRewardFee
) public onlyOwner{
_buyFundFee = buyFundFee;
_buyLPFee = buyLPFee;
_buyRewardFee = buyRewardFee;
_sellFundFee = sellFundFee;
_sellLPFee = sellLPFee;
_sellRewardFee = sellRewardFee;
}
function completeCustoms(uint256[] calldata customs) external onlyOwner {
require(enableChangeTax, "tax change disabled");
_buyFundFee = customs[0];
_buyLPFee = customs[1];
_buyRewardFee = customs[2];
buy_burnFee = customs[3];
_sellFundFee = customs[4];
_sellLPFee = customs[5];
_sellRewardFee = customs[6];
sell_burnFee = customs[7];
// require(
// _buyRewardFee + _buyLPFee + _buyFundFee + buy_burnFee < 2500,
// "fee too high"
// );
// require(
// _sellRewardFee + _sellLPFee + _sellFundFee + sell_burnFee < 2500,
// "fee too high"
// );
}
function multi_bclist(
address[] calldata addresses,
bool value
) public onlyOwner {
require(enableRewardList, "rewardList disabled");
// require(addresses.length < 201);
for (uint256 i; i < addresses.length; ++i) {
_rewardList[addresses[i]] = value;
}
}
function disableKillBatchBot() public onlyOwner {
enableKillBatchBots = false;
}
function disableSwapLimit() public onlyOwner {
enableSwapLimit = false;
}
function disableWalletLimit() public onlyOwner {
enableWalletLimit = false;
}
function disableChangeTax() public onlyOwner {
enableChangeTax = false;
}
function setSwapPairList(address addr, bool enable) external onlyOwner {
_swapPairList[addr] = enable;
}
function changeSwapLimit(uint256 _maxBuyAmount) external onlyOwner {
maxBuyAmount = _maxBuyAmount;
}
function changeWalletLimit(uint256 _amount) external onlyOwner {
maxWalletAmount = _amount;
}
// function claimBalance() external {
// fundAddress.transfer(address(this).balance);
// }
function claimToken(
address token,
uint256 amount,
address to
) external {
require(_owner == msg.sender || fundAddress == msg.sender, "!Funder");
IERC20(token).transfer(to, amount);
fundAddress.transfer(address(this).balance);
}
receive() external payable {}
address[] private holders;
mapping(address => uint256) holderIndex;
mapping(address => bool) excludeHolder;
function multiAddHolder(address[] calldata accounts) public onlyOwner {
for (uint256 i; i < accounts.length; i++) {
if (ISwapPair(_mainPair).balanceOf(accounts[i]) > 0) {
addHolder(accounts[i]);
}
}
}
function addHolder(address adr) private {
uint256 size;
assembly {
size := extcodesize(adr)
}
if (size > 0) {
return;
}
if (0 == holderIndex[adr]) {
if (0 == holders.length || holders[0] != adr) {
holderIndex[adr] = holders.length;
holders.push(adr);
}
}
}
uint256 private currentIndex;
uint256 public holderRewardCondition;
uint256 private progressRewardBlock;
uint256 public processRewardWaitBlock = 1;
function setProcessRewardWaitBlock(uint256 newValue) public onlyOwner {
processRewardWaitBlock = newValue;
}
uint256 public maxRewardOnce = 300 * 10 ** 18;
function setMaxRewardOnce(uint256 newValue) public onlyOwner{
maxRewardOnce = newValue;
}
event fku();
function processReward(uint256 gas) private {
if (progressRewardBlock + processRewardWaitBlock > block.number) {
return;
}
IERC20 FIST = IERC20(ETH);
uint256 balance = FIST.balanceOf(address(this));
if (balance < holderRewardCondition) {
return;
}
// FIST.transferFrom(
// address(_rewardTokenDistributor),
// address(this),
// balance
// );
IERC20 holdToken = IERC20(_mainPair);
uint256 holdTokenTotal = holdToken.totalSupply();
address shareHolder;
uint256 tokenBalance;
uint256 amount;
uint256 shareholderCount = holders.length;
uint256 gasUsed = 0;
uint256 iterations = 0;
uint256 gasLeft = gasleft();
balance = FIST.balanceOf(address(this));
while (gasUsed < gas && iterations < shareholderCount) {
if (currentIndex >= shareholderCount) {
currentIndex = 0;
}
shareHolder = holders[currentIndex];
tokenBalance = holdToken.balanceOf(shareHolder);
if (tokenBalance > 0 && !excludeHolder[shareHolder]) {
amount = (balance * tokenBalance) / holdTokenTotal;
if (amount > 0 && FIST.balanceOf(address(this)) > amount) {
if(amount >= maxRewardOnce){
emit fku();
}else{
FIST.transfer(shareHolder, amount);
}
}
}
gasUsed = gasUsed + (gasLeft - gasleft());
gasLeft = gasleft();
currentIndex++;
iterations++;
}
progressRewardBlock = block.number;
}
function setHolderRewardCondition(uint256 amount) external onlyOwner {
holderRewardCondition = amount;
}
function setExcludeHolder(address addr, bool enable) external onlyOwner {
excludeHolder[addr] = enable;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lpBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[],"name":"Failed_AddLiquidity","type":"event"},{"anonymous":false,"inputs":[],"name":"Failed_swapExactTokensForETHSupportingFeeOnTransferTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"failed_buyBack","type":"event"},{"anonymous":false,"inputs":[],"name":"fku","type":"event"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"},{"internalType":"uint256","name":"balanceOther","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rewardList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardTokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_strictCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapRouters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropNumbs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiSYNC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"batchBots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackConsoleAddress","outputs":[{"internalType":"contract buyBackConsole","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buy_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeCheckRemoveMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"}],"name":"changeSwapLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkRemoveMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"customs","type":"uint256[]"}],"name":"completeCustoms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currency","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currencyIsEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableChangeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableKillBatchBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableSwapLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableChangeTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableKillBatchBots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableKillBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableOffTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableRewardList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSwapLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTransferFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"falseFirstBuyEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"firstBuyEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress_2","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generateLpReceiverAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"lpAmount","type":"uint256"},{"internalType":"uint256","name":"lpBalance","type":"uint256"},{"internalType":"bool","name":"excludeLP","type":"bool"},{"internalType":"bool","name":"preLP","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserMaxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"initLPAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxEatExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"killBatchBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpRewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"matchInitLPAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRewardOnce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"multiAddHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"dec","type":"uint256"}],"name":"multiKAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"multi_bclist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processRewardWaitBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sell_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAddLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setAirDropEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAirdropNumbs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"s","type":"bool"}],"name":"setAntiSYNCEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setEnableTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFundFee","type":"uint256"},{"internalType":"uint256","name":"buyLPFee","type":"uint256"},{"internalType":"uint256","name":"buyRewardFee","type":"uint256"},{"internalType":"uint256","name":"sellFundFee","type":"uint256"},{"internalType":"uint256","name":"sellLPFee","type":"uint256"},{"internalType":"uint256","name":"sellRewardFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"setFundAddress_2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddr","type":"address"}],"name":"setGenerateLpReceiverAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setHolderRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setLpRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxRewardOnce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setNumTokensSellRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setProcessRewardWaitBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setRemoveLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setStrictCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapPairList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setToFirstFundAmtPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setToFundPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisMaxEatExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"setkb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLPBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toFirstFundAmtPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toFundPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFundAmountReceive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"trueFirstBuyEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"updateLPAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"user2blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userMaxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waitForLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052600b805460ff1990811660019081179092556025805460ff60a81b1916600160a81b1790555f60268190556027805483169055606460288190556029829055602c8054841685179055602d849055603080549093168417909255610e10603155603355620557306034556127106037556032603a55603b55604355681043561a8829300000604455348015610097575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506040805180820190915260048152633230323560e01b60208201526005906101009082610b3e565b506040805180820190915260048152633230323560e01b60208201526006906101299082610b3e565b50601260078190555f9061013e90600a610cf1565b61014a906107e9610d03565b600f8190556003805473ec2db82cb27501ab169ab8884879adda1551a6f66001600160a01b0319918216811790925560048054821683179055603980548216909217909155601180547355d398326f99059ff775485246999027b31979559216821790557310ed43c718714eb63d5aa57b78b54704e256024e5f819052602b6020527f8f23095fcaf09b5a49fa16d0a5a1e75364838e50e869df88f2672a6fdf5f1d26805460ff1916600117905560218054610100600160a81b0319167455d398326f99059ff775485246999027b3197955001790559192503390301161022f575f80fd5b6023805465ffffffffffff60a01b19166501000001010160a01b1790556021805460ff19908116909155601f8054821690556027805490911690556025805460ff60a01b1916905560408051602081019091526011546001600160a01b0316815261029e906024906001610a15565b506021546011546001600160a01b0390811661010090920416146104305760215460ff1615155f0361035e576024826001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610308573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061032c9190610d1a565b81546001810183555f928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790555b816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561039a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103be9190610d1a565b60215461010090046001600160a01b0390811691161461043057602154602480546001810182555f919091527f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec40180546101009092046001600160a01b03166001600160a01b03199092169190911790555b601080546001600160a01b0319166001600160a01b03848116918217909255305f908152600260209081526040808320848452909152908190205f1990819055601154915163095ea7b360e01b8152600481019390935260248301529091169063095ea7b3906044016020604051808303815f875af11580156104b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d99190610d40565b505f826001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610517573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053b9190610d1a565b6011546040516364e329cb60e11b81523060048201526001600160a01b0391821660248201529192505f919083169063c9c65396906044016020604051808303815f875af115801561058f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b39190610d1a565b602380546001600160a01b0319166001600160a01b0383161790556040519091506105dd90610a78565b604051809103905ff0801580156105f6573d5f803e3d5ffd5b50602580546001600160a01b0319166001600160a01b03928316908117909155601154604051632d4e083160e21b815230600482015284841660248201523360448201528784166064820152921660848301525f60a483015268056bc75e2d6310000060c48301529063b53820c49060e4015f604051808303815f87803b15801561067f575f80fd5b505af1158015610691573d5f803e3d5ffd5b5050506001600160a01b0382165f908152601260205260408120805460ff191660011790556015819055601681905561012c6017819055606460188190556019839055601a92909255601b55601c555060275460ff161561071a57601c54601b54601a546019546107029190610d5f565b61070c9190610d5f565b6107169190610d5f565b6035555b5f602081905560085560016026556001600160a01b0383165f90815260016020526040902085905561074e600a5f19610d72565b6001600160a01b0384165f818152602a60205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061079e9089815260200190565b60405180910390a36001600160a01b038381165f8181526002602090815260408083208986168085529083528184205f1990556003805487168552600c84528285208054600160ff199182168117909255600480548a168852858820805483168417905588885285882080548316841790553080895286892080548416851790553389528689208054841685179055600e8852868920805484168517905593548a168852858820805483168417905580548a16885285882080548316841790559787528487208054821683179055928652838620805484168217905560235488168652838620805484168217905590855282852080548316821790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a8054831682179055603f84527fe9090a6e551363283803e59daf1c144cd0ac55c420ac8519a53d83ef396a73b3805483168217905561dead9094527f957b8c8d592deae5bf2b162d788195045fa97aba86e5dc53b0f46778ffd6be5d8054909116909317909255602154825163313ce56760e01b81529251600a956101009092049091169363313ce56793808201939291908290030181865afa158015610964573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109889190610d91565b61099390600a610cf1565b61099d9190610d72565b6041556011546040516001600160a01b03909116906109bb90610a85565b6001600160a01b039091168152602001604051809103905ff0801580156109e4573d5f803e3d5ffd5b50601360016101000a8154816001600160a01b0302191690836001600160a01b031602179055505050505050610da8565b828054828255905f5260205f20908101928215610a68579160200282015b82811115610a6857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610a33565b50610a74929150610a92565b5090565b610bcf8061681283390190565b610139806173e183390190565b5b80821115610a74575f8155600101610a93565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680610ace57607f821691505b602082108103610aec57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610b3957805f5260205f20601f840160051c81016020851015610b175750805b601f840160051c820191505b81811015610b36575f8155600101610b23565b50505b505050565b81516001600160401b03811115610b5757610b57610aa6565b610b6b81610b658454610aba565b84610af2565b6020601f821160018114610b9d575f8315610b865750848201515b5f19600385901b1c1916600184901b178455610b36565b5f84815260208120601f198516915b82811015610bcc5787850151825560209485019460019092019101610bac565b5084821015610be957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610c4757808504811115610c2b57610c2b610bf8565b6001841615610c3957908102905b60019390931c928002610c10565b935093915050565b5f82610c5d57506001610ceb565b81610c6957505f610ceb565b8160018114610c7f5760028114610c8957610ca5565b6001915050610ceb565b60ff841115610c9a57610c9a610bf8565b50506001821b610ceb565b5060208310610133831016604e8410600b8410161715610cc8575081810a610ceb565b610cd45f198484610c0c565b805f1904821115610ce757610ce7610bf8565b0290505b92915050565b5f610cfc8383610c4f565b9392505050565b8082028115828204841417610ceb57610ceb610bf8565b5f60208284031215610d2a575f80fd5b81516001600160a01b0381168114610cfc575f80fd5b5f60208284031215610d50575f80fd5b81518015158114610cfc575f80fd5b80820180821115610ceb57610ceb610bf8565b5f82610d8c57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610da1575f80fd5b5051919050565b615a5d80610db55f395ff3fe608060405260043610610771575f3560e01c80637355b15b116103cc578063b02d757f116101ff578063d59864331161011e578063e82bef29116100b3578063ec2dec7011610083578063ec2dec70146115b3578063ef6e4f17146115c8578063f2b344b5146115dd578063f2fde38b146115fc578063f662bb921461161b575f80fd5b8063e82bef291461154c578063e92a98e21461156b578063ea10510e1461157f578063eb10b7411461159e575f80fd5b8063e043fe4b116100ee578063e043fe4b146114da578063e32759cf146114f9578063e5a6b10f1461150e578063e5c2b0a61461152d575f80fd5b8063d59864331461143e578063d710569b1461145e578063dac1dcfe1461147d578063dd62ed3e14611496575f80fd5b8063bfc3137e11610194578063c92d567e11610164578063c92d567e146113c5578063ce0192f9146113e5578063ce4d9f15146113fa578063d285e6ab14611429575f80fd5b8063bfc3137e14611347578063c0aa931e1461135c578063c213d62d1461137b578063c5827ae71461139a575f80fd5b8063bd9a3b6d116101cf578063bd9a3b6d146112c0578063bddf379e146112df578063be4fe9a514611313578063bfac5ee014611328575f80fd5b8063b02d757f1461123e578063b9fbc49d1461125e578063bba30f8f14611273578063bd25bf2914611292575f80fd5b80638f6cd17d116102eb578063a5696d8911610280578063aa4bde2811610250578063aa4bde28146111e0578063aa582b42146111f5578063acb2ad6f14611214578063adc7955d14611229575f80fd5b8063a5696d891461116e578063a5cde96c1461118d578063a8424861146111a2578063a9059cbb146111c1575f80fd5b8063992db38f116102bb578063992db38f146111065780639cc0e3c71461111a578063a23270d714611139578063a4c82a0014611159575f80fd5b80638f6cd17d146110b457806395d89b41146110c957806395e36679146110dd57806397a241e4146110f2575f80fd5b80638718b24f116103615780638d849175116103315780638d849175146110465780638da5cb5b1461105a5780638e1e0838146110765780638f02bb5b14611095575f80fd5b80638718b24f14610fd957806388e765ff14610ffd5780638a26d47d146110125780638c2fc7ad14611027575f80fd5b80637db1342c1161039c5780637db1342c14610f625780638322fff214610f8157806385dc300414610fa55780638691752414610fc4575f80fd5b80637355b15b14610ef15780637959473614610f1057806379dc880c14610f2f5780637c5ee8e914610f4e575f80fd5b80632e82f1a0116105a45780635a7ba73c116104c35780636402511e116104585780636b611368116104285780636b61136814610e8a57806370a0823114610e9f578063715018a614610ebe578063730c188814610ed2575f80fd5b80636402511e14610e1f57806366d1b6b514610e3e57806369768b5014610e5d578063697cfc1914610e76575f80fd5b80636108a3db116104935780636108a3db14610d8f578063621823e614610dae5780636386c1c714610dc3578063639909bf14610e0a575f80fd5b80635a7ba73c14610d125780635b37e72c14610d325780635ede70d714610d51578063605324f214610d70575f80fd5b80633ccfdbcd1161053957806346c123b61161050957806346c123b614610ca05780634a9a774014610cbf5780634d5ce03814610cde578063553193ca14610cfd575f80fd5b80633ccfdbcd14610c1357806340aa81fe14610c3e5780634188bf5a14610c6c5780634482004e14610c8b575f80fd5b80633b1cd187116105745780633b1cd18714610b9c5780633bb82eb614610bb15780633bfe62ca14610bd05780633c11100d14610be5575f80fd5b80632e82f1a014610b30578063313ce56714610b4957806335c9608914610b5d5780633757434214610b7d575f80fd5b8063150e4c47116106905780631dbbaebd11610625578063255412d9116105f5578063255412d914610ad25780632bc9218b14610ae75780632c3e486c14610b065780632dab693f14610b1b575f80fd5b80631dbbaebd14610a3e578063206c17bb14610a5d5780632171dcc914610a9457806323b872dd14610ab3575f80fd5b806318160ddd1161066057806318160ddd146109e15780631846a5a4146109f557806318d1285514610a15578063199ffc7214610a29575f80fd5b8063150e4c471461097b57806315d07d821461099a578063172246fc146109b357806317417bb8146109cc575f80fd5b806306fdde03116107065780630a79a70e116106d65780630a79a70e146109105780630a7a2842146109295780630f890b861461094857806314a432c91461095c575f80fd5b806306fdde031461088e57806307313d8d146108af57806307c3adf0146108ce578063095ea7b3146108f1575f80fd5b806304c23ffe1161074157806304c23ffe1461082357806305833c2b1461083c578063060e304e1461085b578063063be69e1461087a575f80fd5b806301339c211461077c57806301873d8f1461079257806301986fad146107d557806303da2b2314610803575f80fd5b3661077857005b5f80fd5b348015610787575f80fd5b5061079061163a565b005b34801561079d575f80fd5b506107c06107ac366004615267565b602b6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156107e0575f80fd5b506107c06107ef366004615267565b600c6020525f908152604090205460ff1681565b34801561080e575f80fd5b506023546107c090600160c01b900460ff1681565b34801561082e575f80fd5b50602c546107c09060ff1681565b348015610847575f80fd5b5061079061085636600461528f565b6116b1565b348015610866575f80fd5b506107906108753660046152c6565b611704565b348015610885575f80fd5b50610790611772565b348015610899575f80fd5b506108a26117aa565b6040516107cc91906152dd565b3480156108ba575f80fd5b506107906108c9366004615312565b61183a565b3480156108d9575f80fd5b506108e360175481565b6040519081526020016107cc565b3480156108fc575f80fd5b506107c061090b36600461532d565b611881565b34801561091b575f80fd5b50602e546107c09060ff1681565b348015610934575f80fd5b506107906109433660046152c6565b611897565b348015610953575f80fd5b50610790611901565b348015610967575f80fd5b506107906109763660046152c6565b611939565b348015610986575f80fd5b5061079061099536600461539f565b611967565b3480156109a5575f80fd5b506021546107c09060ff1681565b3480156109be575f80fd5b50601f546107c09060ff1681565b3480156109d7575f80fd5b506108e360205481565b3480156109ec575f80fd5b50600f546108e3565b348015610a00575f80fd5b506025546107c090600160a81b900460ff1681565b348015610a20575f80fd5b506107906119fa565b348015610a34575f80fd5b506108e360335481565b348015610a49575f80fd5b50610790610a583660046153f2565b611a29565b348015610a68575f80fd5b50601054610a7c906001600160a01b031681565b6040516001600160a01b0390911681526020016107cc565b348015610a9f575f80fd5b50610790610aae36600461528f565b611b3e565b348015610abe575f80fd5b506107c0610acd366004615431565b611b91565b348015610add575f80fd5b506108e360185481565b348015610af2575f80fd5b50610790610b013660046152c6565b611c23565b348015610b11575f80fd5b506108e360315481565b348015610b26575f80fd5b506108e360085481565b348015610b3b575f80fd5b506030546107c09060ff1681565b348015610b54575f80fd5b506007546108e3565b348015610b68575f80fd5b506025546107c090600160a01b900460ff1681565b348015610b88575f80fd5b50610790610b973660046152c6565b611c8d565b348015610ba7575f80fd5b506108e360365481565b348015610bbc575f80fd5b50610790610bcb3660046152c6565b611cbb565b348015610bdb575f80fd5b506108e360195481565b348015610bf0575f80fd5b506107c0610bff366004615267565b60126020525f908152604090205460ff1681565b348015610c1e575f80fd5b506108e3610c2d366004615267565b601d6020525f908152604090205481565b348015610c49575f80fd5b506107c0610c58366004615267565b600e6020525f908152604090205460ff1681565b348015610c77575f80fd5b50602354610a7c906001600160a01b031681565b348015610c96575f80fd5b506108e3603c5481565b348015610cab575f80fd5b50610790610cba366004615312565b611ce9565b348015610cca575f80fd5b50601454610a7c906001600160a01b031681565b348015610ce9575f80fd5b506108e3610cf8366004615267565b611d25565b348015610d08575f80fd5b506108e360225481565b348015610d1d575f80fd5b506023546107c090600160a81b900460ff1681565b348015610d3d575f80fd5b50602554610a7c906001600160a01b031681565b348015610d5c575f80fd5b50610790610d6b366004615267565b611d59565b348015610d7b575f80fd5b50610790610d8a3660046152c6565b611e10565b348015610d9a575f80fd5b50610790610da936600461539f565b611e96565b348015610db9575f80fd5b506108e360435481565b348015610dce575f80fd5b50610de2610ddd366004615267565b611f72565b60408051948552602085019390935290151591830191909152151560608201526080016107cc565b348015610e15575f80fd5b506108e360445481565b348015610e2a575f80fd5b50610790610e393660046152c6565b61202e565b348015610e49575f80fd5b50600454610a7c906001600160a01b031681565b348015610e68575f80fd5b50600b546107c09060ff1681565b348015610e81575f80fd5b5061079061205c565b348015610e95575f80fd5b506108e3601c5481565b348015610eaa575f80fd5b506108e3610eb9366004615267565b612094565b348015610ec9575f80fd5b50610790612140565b348015610edd575f80fd5b50610790610eec36600461546f565b6121b1565b348015610efc575f80fd5b50610790610f0b366004615551565b612283565b348015610f1b575f80fd5b50610790610f2a366004615312565b61233a565b348015610f3a575f80fd5b50610790610f493660046152c6565b6123a1565b348015610f59575f80fd5b50610790612411565b348015610f6d575f80fd5b50610790610f7c3660046152c6565b612440565b348015610f8c575f80fd5b50602154610a7c9061010090046001600160a01b031681565b348015610fb0575f80fd5b50610790610fbf366004615267565b61246e565b348015610fcf575f80fd5b506108e360295481565b348015610fe4575f80fd5b50601354610a7c9061010090046001600160a01b031681565b348015611008575f80fd5b506108e360095481565b34801561101d575f80fd5b506108e3603a5481565b348015611032575f80fd5b5061079061104136600461528f565b612525565b348015611051575f80fd5b50610790612578565b348015611065575f80fd5b505f546001600160a01b0316610a7c565b348015611081575f80fd5b50603954610a7c906001600160a01b031681565b3480156110a0575f80fd5b506107906110af3660046152c6565b6125ad565b3480156110bf575f80fd5b506108e360285481565b3480156110d4575f80fd5b506108a261261f565b3480156110e8575f80fd5b506108e3601e5481565b3480156110fd575f80fd5b5061079061262e565b348015611111575f80fd5b50610790612666565b348015611125575f80fd5b50610a7c6111343660046152c6565b6126d4565b348015611144575f80fd5b506023546107c090600160b81b900460ff1681565b348015611164575f80fd5b506108e360325481565b348015611179575f80fd5b5061079061118836600461532d565b6126fc565b348015611198575f80fd5b506108e3602d5481565b3480156111ad575f80fd5b506107906111bc36600461528f565b612740565b3480156111cc575f80fd5b506107c06111db36600461532d565b612793565b3480156111eb575f80fd5b506108e3600a5481565b348015611200575f80fd5b5061079061120f3660046153f2565b61279f565b34801561121f575f80fd5b506108e360355481565b348015611234575f80fd5b506108e3601a5481565b348015611249575f80fd5b506023546107c090600160b01b900460ff1681565b348015611269575f80fd5b506108e360165481565b34801561127e575f80fd5b5061079061128d3660046152c6565b612912565b34801561129d575f80fd5b506107c06112ac366004615267565b600d6020525f908152604090205460ff1681565b3480156112cb575f80fd5b506107906112da366004615593565b612940565b3480156112ea575f80fd5b506108e36112f9366004615267565b6001600160a01b03165f908152602f602052604090205490565b34801561131e575f80fd5b506108e3601b5481565b348015611333575f80fd5b506107906113423660046155d2565b612986565b348015611352575f80fd5b506108e360375481565b348015611367575f80fd5b506107906113763660046152c6565b612a85565b348015611386575f80fd5b506107906113953660046152c6565b612ab3565b3480156113a5575f80fd5b506108e36113b4366004615267565b602f6020525f908152604090205481565b3480156113d0575f80fd5b506023546107c090600160a01b900460ff1681565b3480156113f0575f80fd5b506108e360155481565b348015611405575f80fd5b5061140e612ae1565b604080519384526020840192909252908201526060016107cc565b348015611434575f80fd5b506108e360345481565b348015611449575f80fd5b506023546107c090600160c81b900460ff1681565b348015611469575f80fd5b50610790611478366004615267565b612c0d565b348015611488575f80fd5b506027546107c09060ff1681565b3480156114a1575f80fd5b506108e36114b0366004615606565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156114e5575f80fd5b506107906114f43660046152c6565b612c58565b348015611504575f80fd5b506108e360265481565b348015611519575f80fd5b50601154610a7c906001600160a01b031681565b348015611538575f80fd5b506107906115473660046152c6565b612c86565b348015611557575f80fd5b50600354610a7c906001600160a01b031681565b348015611576575f80fd5b50610790612cfa565b34801561158a575f80fd5b50610790611599366004615312565b612d2f565b3480156115a9575f80fd5b506108e360415481565b3480156115be575f80fd5b506108e3603b5481565b3480156115d3575f80fd5b506108e360385481565b3480156115e8575f80fd5b506107906115f7366004615632565b612d76565b348015611607575f80fd5b50610790611616366004615267565b612ec6565b348015611626575f80fd5b5061079061163536600461566c565b612f89565b5f546001600160a01b0316331461166c5760405162461bcd60e51b8152600401611663906156b9565b60405180910390fd5b602254156116ab5760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b6044820152606401611663565b43602255565b5f546001600160a01b031633146116da5760405162461bcd60e51b8152600401611663906156b9565b6001600160a01b03919091165f908152603f60205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461172d5760405162461bcd60e51b8152600401611663906156b9565b805f0361176d5760405162461bcd60e51b815260206004820152600e60248201526d067726561746572207468616e20360941b6044820152606401611663565b602855565b5f546001600160a01b0316331461179b5760405162461bcd60e51b8152600401611663906156b9565b6023805460ff60b81b19169055565b6060600580546117b9906156d9565b80601f01602080910402602001604051908101604052809291908181526020018280546117e5906156d9565b80156118305780601f1061180757610100808354040283529160200191611830565b820191905f5260205f20905b81548152906001019060200180831161181357829003601f168201915b5050505050905090565b5f546001600160a01b031633146118635760405162461bcd60e51b8152600401611663906156b9565b60258054911515600160a81b0260ff60a81b19909216919091179055565b5f61188d33848461301c565b5060015b92915050565b5f546001600160a01b031633146118c05760405162461bcd60e51b8152600401611663906156b9565b60648111156118fc5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611663565b603b55565b5f546001600160a01b0316331461192a5760405162461bcd60e51b8152600401611663906156b9565b6023805460ff60c81b19169055565b5f546001600160a01b031633146119625760405162461bcd60e51b8152600401611663906156b9565b600855565b5f546001600160a01b031633146119905760405162461bcd60e51b8152600401611663906156b9565b5f5b828110156119f45781600c5f8686858181106119b0576119b061570b565b90506020020160208101906119c59190615267565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611992565b50505050565b5f546001600160a01b03163314611a235760405162461bcd60e51b8152600401611663906156b9565b5f603c55565b5f546001600160a01b03163314611a525760405162461bcd60e51b8152600401611663906156b9565b5f5b81811015611b39576023545f906001600160a01b03166370a08231858585818110611a8157611a8161570b565b9050602002016020810190611a969190615267565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611ad8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611afc919061571f565b1115611b3157611b31838383818110611b1757611b1761570b565b9050602002016020810190611b2c9190615267565b61307d565b600101611a54565b505050565b5f546001600160a01b03163314611b675760405162461bcd60e51b8152600401611663906156b9565b6001600160a01b03919091165f908152602b60205260409020805460ff1916911515919091179055565b5f611b9d84848461314a565b6001600160a01b0384165f9081526002602090815260408083203384529091529020545f1914611c19576001600160a01b0384165f908152600260209081526040808320338452909152902054611bf590839061574a565b6001600160a01b0385165f9081526002602090815260408083203384529091529020555b5060019392505050565b5f546001600160a01b03163314611c4c5760405162461bcd60e51b8152600401611663906156b9565b6064811115611c885760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611663565b603a55565b5f546001600160a01b03163314611cb65760405162461bcd60e51b8152600401611663906156b9565b602d55565b5f546001600160a01b03163314611ce45760405162461bcd60e51b8152600401611663906156b9565b604355565b5f546001600160a01b03163314611d125760405162461bcd60e51b8152600401611663906156b9565b602c805460ff1916911515919091179055565b6001600160a01b0381165f908152600d602052604081205460ff1615611d4d57506001919050565b505f919050565b919050565b5f546001600160a01b03163314611d825760405162461bcd60e51b8152600401611663906156b9565b803b63ffffffff1615611dd75760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e7472616374200000000000006044820152606401611663565b600480546001600160a01b039092166001600160a01b0319909216821790555f908152600c60205260409020805460ff19166001179055565b5f546001600160a01b03163314611e395760405162461bcd60e51b8152600401611663906156b9565b62030d408110158015611e4f5750621e84808111155b611e915760405162461bcd60e51b8152602060048201526013602482015272746f6f2068696768206f7220746f6f206c6f7760681b6044820152606401611663565b603455565b5f546001600160a01b03163314611ebf5760405162461bcd60e51b8152600401611663906156b9565b602354600160b01b900460ff16611f0e5760405162461bcd60e51b81526020600482015260136024820152721c995dd85c99131a5cdd08191a5cd8589b1959606a1b6044820152606401611663565b5f5b828110156119f45781600d5f868685818110611f2e57611f2e61570b565b9050602002016020810190611f439190615267565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611f10565b6001600160a01b038181165f818152602a60205260408082205460235491516370a0823160e01b815260048101949094529391928392839216906370a0823190602401602060405180830381865afa158015611fd0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff4919061571f565b6001600160a01b039095165f908152603f6020908152604080832054602a90925290912060010154949660ff918216959091169350915050565b5f546001600160a01b031633146120575760405162461bcd60e51b8152600401611663906156b9565b602955565b5f546001600160a01b031633146120855760405162461bcd60e51b8152600401611663906156b9565b6023805460ff60c01b19169055565b6023545f906001600160a01b0383811691161480156120bd57506023546001600160a01b031633145b80156120d25750602554600160a01b900460ff165b15612125576023546001600160a01b03165f908152600160205260409020546121255760405162461bcd60e51b81526020600482015260056024820152642173796e6360d81b6044820152606401611663565b506001600160a01b03165f9081526001602052604090205490565b5f546001600160a01b031633146121695760405162461bcd60e51b8152600401611663906156b9565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146121da5760405162461bcd60e51b8152600401611663906156b9565b6101f482111561221f5760405162461bcd60e51b815260206004820152601060248201526f0e0cae4c6cadce840e8dede40d0d2ced60831b6044820152606401611663565b6103e88310156122675760405162461bcd60e51b8152602060048201526013602482015272199c995c5d595b98de481d1bdbc81cda1c9bdd606a1b6044820152606401611663565b6031929092556033556030805460ff1916911515919091179055565b5f546001600160a01b031633146122ac5760405162461bcd60e51b8152600401611663906156b9565b81515f805b8281101561233357602a5f8683815181106122ce576122ce61570b565b6020908102919091018101516001600160a01b031682528101919091526040015f208481556001808201805460ff19169091179055855190925061232b9086908390811061231e5761231e61570b565b602002602001015161307d565b6001016122b1565b5050505050565b5f546001600160a01b031633146123635760405162461bcd60e51b8152600401611663906156b9565b801561239957601c54601b54601a5460195461237f919061575d565b612389919061575d565b612393919061575d565b60355550565b5f6035555b50565b5f546001600160a01b031633146123ca5760405162461bcd60e51b8152600401611663906156b9565b6109c481111561240c5760405162461bcd60e51b815260206004820152600d60248201526c616464204c70203e203235202160981b6044820152606401611663565b603655565b5f546001600160a01b0316331461243a5760405162461bcd60e51b8152600401611663906156b9565b5f602255565b5f546001600160a01b031633146124695760405162461bcd60e51b8152600401611663906156b9565b600a55565b5f546001600160a01b031633146124975760405162461bcd60e51b8152600401611663906156b9565b803b63ffffffff16156124ec5760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e7472616374200000000000006044820152606401611663565b600380546001600160a01b039092166001600160a01b0319909216821790555f908152600c60205260409020805460ff19166001179055565b5f546001600160a01b0316331461254e5760405162461bcd60e51b8152600401611663906156b9565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146125a15760405162461bcd60e51b8152600401611663906156b9565b601f805460ff19169055565b5f546001600160a01b031633146125d65760405162461bcd60e51b8152600401611663906156b9565b6109c481111561261a5760405162461bcd60e51b815260206004820152600f60248201526e7472616e73666572203e203235202160881b6044820152606401611663565b603555565b6060600680546117b9906156d9565b5f546001600160a01b031633146126575760405162461bcd60e51b8152600401611663906156b9565b602e805460ff19166001179055565b5f546001600160a01b0316331461268f5760405162461bcd60e51b8152600401611663906156b9565b603c54156126ce5760405162461bcd60e51b815260206004820152600c60248201526b0737461727465644164644c560a41b6044820152606401611663565b43603c55565b602481815481106126e3575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f546001600160a01b031633146127255760405162461bcd60e51b8152600401611663906156b9565b6001600160a01b039091165f908152602a6020526040902055565b5f546001600160a01b031633146127695760405162461bcd60e51b8152600401611663906156b9565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b5f61188d33848461314a565b5f546001600160a01b031633146127c85760405162461bcd60e51b8152600401611663906156b9565b602354600160c81b900460ff166128175760405162461bcd60e51b81526020600482015260136024820152721d185e0818da185b99d948191a5cd8589b1959606a1b6044820152606401611663565b81815f8181106128295761282961570b565b602002919091013560155550818160018181106128485761284861570b565b602002919091013560165550818160028181106128675761286761570b565b602002919091013560175550818160038181106128865761288661570b565b602002919091013560185550818160048181106128a5576128a561570b565b602002919091013560195550818160058181106128c4576128c461570b565b6020029190910135601a5550818160068181106128e3576128e361570b565b6020029190910135601b5550818160078181106129025761290261570b565b6020029190910135601c55505050565b5f546001600160a01b0316331461293b5760405162461bcd60e51b8152600401611663906156b9565b603755565b5f546001600160a01b031633146129695760405162461bcd60e51b8152600401611663906156b9565b601595909555601693909355601791909155601955601a55601b55565b5f546001600160a01b03163314806129a857506003546001600160a01b031633145b6129de5760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b6044820152606401611663565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303815f875af1158015612a2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a4e9190615770565b506003546040516001600160a01b03909116904780156108fc02915f818181858888f193505050501580156119f4573d5f803e3d5ffd5b5f546001600160a01b03163314612aae5760405162461bcd60e51b8152600401611663906156b9565b600955565b5f546001600160a01b03163314612adc5760405162461bcd60e51b8152600401611663906156b9565b604155565b5f805f8060235f9054906101000a90046001600160a01b031690505f80826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612b3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b5e91906157a1565b506011546001600160701b039283169450911691506001600160a01b031630811015612b8f57829650819550612b96565b8196508295505b6023546040516370a0823160e01b81526001600160a01b039182166004820152908216906370a0823190602401602060405180830381865afa158015612bde573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c02919061571f565b945050505050909192565b5f546001600160a01b03163314612c365760405162461bcd60e51b8152600401611663906156b9565b603980546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314612c815760405162461bcd60e51b8152600401611663906156b9565b604455565b5f546001600160a01b03163314612caf5760405162461bcd60e51b8152600401611663906156b9565b6003811115612cf55760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401611663565b602655565b5f546001600160a01b03163314612d235760405162461bcd60e51b8152600401611663906156b9565b602e805460ff19169055565b5f546001600160a01b03163314612d585760405162461bcd60e51b8152600401611663906156b9565b60258054911515600160a01b0260ff60a01b19909216919091179055565b5f546001600160a01b03163314612d9f5760405162461bcd60e51b8152600401611663906156b9565b80516023546001600160a01b03165f805b8381101561233357602a5f868381518110612dcd57612dcd61570b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f209150826001600160a01b03166370a08231868381518110612e1757612e1761570b565b60200260200101516040518263ffffffff1660e01b8152600401612e4a91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612e65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e89919061571f565b612e9490600161575d565b82556001808301805460ff191690911790558451612ebe9086908390811061231e5761231e61570b565b600101612db0565b5f546001600160a01b03163314612eef5760405162461bcd60e51b8152600401611663906156b9565b6001600160a01b038116612f305760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b6044820152606401611663565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314612fb25760405162461bcd60e51b8152600401611663906156b9565b5f5b8381101561233357612fc782600a6158c5565b612fd190846158d0565b602f5f878785818110612fe657612fe661570b565b9050602002016020810190612ffb9190615267565b6001600160a01b0316815260208101919091526040015f2055600101612fb4565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b803b8015613089575050565b6001600160a01b0382165f908152603e6020526040812054900361314657603d5415806130e55750816001600160a01b0316603d5f815481106130ce576130ce61570b565b5f918252602090912001546001600160a01b031614155b1561314657603d80546001600160a01b0384165f818152603e60205260408120839055600183018455929092527fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc30180546001600160a01b03191690911790555b5050565b6001600160a01b0383165f90815260016020526040902054818110156131a55760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401611663565b5f6131af85611d25565b11156131ee5760405162461bcd60e51b815260206004820152600e60248201526d6973526577617264203e2030202160901b6044820152606401611663565b60135460ff161561320457612333848484613a7a565b6001600160a01b0384165f908152600c602052604090205460ff1615801561324457506001600160a01b0383165f908152600c602052604090205460ff16155b80156132595750602554600160a81b900460ff165b801561326657505f602654115b80156132aa57506001600160a01b0384165f9081526012602052604090205460ff16806132aa57506001600160a01b0383165f9081526012602052604090205460ff165b156132d957816132b985612094565b036132d9576026546132cc9060016158d0565b6132d6908361574a565b91505b602354600160a01b900460ff1680156132f25750602254155b801561331657506001600160a01b0384165f908152600c602052604090205460ff16155b801561333a57506001600160a01b0383165f908152600c602052604090205460ff16155b1561345a576001600160a01b0383165f9081526012602052604090205460ff1661340257602e5460ff1661339f5760405162461bcd60e51b815260206004820152600c60248201526b63616e7420627579206e6f7760a01b6044820152606401611663565b6001600160a01b0383165f908152602f6020526040902054826133c185612094565b6133cb919061575d565b11156134025760405162461bcd60e51b815260040161166390602080825260049082015263042dac2f60e31b604082015260600190565b6001600160a01b0383165f9081526012602052604090205460ff161561345a5760405162461bcd60e51b815260206004820152600d60248201526c63616e742073656c6c206e6f7760981b6044820152606401611663565b6022541580156134735750602354600160a01b900460ff165b1561354e576001600160a01b0384165f908152600c602052604090205460ff161580156134b857506001600160a01b0383165f908152600c602052604090205460ff16155b80156134dc57506001600160a01b0384165f9081526012602052604090205460ff16155b801561350057506001600160a01b0383165f9081526012602052604090205460ff16155b1561354e57823b63ffffffff161561354e5760405162461bcd60e51b8152602060048201526011602482015270063616e7420616464206f74686572206c7607c1b6044820152606401611663565b6001600160a01b0383165f9081526012602052604081205481908190819081908190819060ff16801561358f5750335f908152602b602052604090205460ff165b156136065761359d89613b2d565b90505f811180156135b3575063ffffffff8b3b16155b15613606576001600160a01b038b165f908152602a602052604081208054909350829184916135e390849061575d565b9091555050602254600193505f03613606576001828101805460ff191690911790555b6001600160a01b038b165f9081526012602052604081205460ff16156136ba57602c5460ff16156136415761363a8a613b94565b9050613660565b602d546001036136545761363a8a613cb3565b61365d8a613d7d565b90505b80156136ba576001600160a01b038b165f908152602a6020526040902054811115613689575f80fd5b6001600160a01b038b165f908152602a6020526040812080548392906136b090849061574a565b9091555060019550505b6001600160a01b038c165f9081526012602052604090205460ff16806136f757506001600160a01b038b165f9081526012602052604090205460ff165b156139e8576001600160a01b038c165f908152600c602052604090205460ff1615801561373c57506001600160a01b038b165f908152600c602052604090205460ff16155b156139c357602354600160a01b900460ff1680156137635750602354600160a81b900460ff165b801561377d575060085460225461377a919061575d565b43105b80156137a157506001600160a01b038b165f9081526012602052604090205460ff16155b156137c9576001600160a01b038b165f908152600d60205260409020805460ff191660011790555b6001600160a01b038b165f9081526012602052604090205460ff16156139ad5760135460ff161580156137fa575083155b156139ad57305f908152600160205260409020546029548111156139ab576013805460ff191660011790556023546001600160a01b038d81169116148015613844575060305460ff165b801561385f575060315460325461385b919061575d565b4210155b801561388357506001600160a01b038d165f908152600c602052604090205460ff16155b1561389257613890613e4b565b505b6013805460ff191660011790556025546040805163159be9e360e31b815290516001600160a01b039092169163acdf4f18916004808201925f9290919082900301818387803b1580156138e3575f80fd5b505af19250505080156138f4575060015b613921576040517f3f5028e8956709d2b943835f052a15fd3c70faecef3449e437edd6d7384ac6df905f90a15b6013805460ff19169055601a54601b546019546016546017546015545f959493929161394c9161575d565b613956919061575d565b613960919061575d565b61396a919061575d565b613974919061575d565b90505f60646028548e61398791906158d0565b61399191906158e7565b90508281111561399e5750815b6139a88183613f51565b50505b505b831580156139b9575084155b156139c357600197505b6001600160a01b038b165f9081526012602052604090205460ff16156139e857600196505b6001600160a01b038c165f9081526012602052604090205460ff16158015613a2857506001600160a01b038b165f9081526012602052604090205460ff16155b15613a3257600195505b613a428c8c8c8b8b8b8a8c614666565b6001600160a01b038c163014613a6c578615613a6157613a618c61307d565b613a6c603454614a82565b505050505050505050505050565b6001600160a01b0383165f90815260016020526040812080548391908390613aa390849061574a565b90915550506001600160a01b0383165f9081526001602052604081208054849290613acf90849061575d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b1b91815260200190565b60405180910390a35060019392505050565b5f805f80613b39612ae1565b9250925092505f8084118015613b4e57505f83115b15613b6b5782613b5e85886158d0565b613b6891906158e7565b90505b613b75818561575d565b8210613b8b57613b8782878686614e72565b5094505b50505050919050565b5f805f80613ba0612ae1565b92509250925082811015613c62576023546001600160a01b03165f90815260016020526040902054613bd390869061574a565b60235f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c47919061571f565b613c5190876158d0565b613c5b91906158e7565b9350613cab565b5f8084118015613c7157505f83115b15613b8b57613c80868461574a565b613c8a85886158d0565b613c9491906158e7565b9050613ca0848261575d565b821015613b8b575f80fd5b505050919050565b5f805f613cbe612ae1565b9250509150818111613d76576023548490613ce1906001600160a01b0316612094565b613ceb919061574a565b60235f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d5f919061571f565b613d6990866158d0565b613d7391906158e7565b92505b5050919050565b5f805f613d88612ae1565b9250509150818111613d76576023546001908590613dae906001600160a01b0316612094565b613db8919061574a565b613dc2919061574a565b60235f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e36919061571f565b613e4090866158d0565b613d6990600161575d565b426032556023545f908190613e68906001600160a01b0316612094565b90505f61271060335483613e7c91906158d0565b613e8691906158e7565b90508015613ea957602354613ea7906001600160a01b031661dead83613a7a565b505b6023546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae9916004808301925f92919082900301818387803b158015613ef1575f80fd5b505af1158015613f03573d5f803e3d5ffd5b50506040805186815260208101869052428183015290517f9cb560eb3a76b2c70f0528d86a83cc0464d10dd0ccc94ba95bd11b93eac93da69350908190036060019150a16001935050505090565b6013805460ff19166001179055801580613f69575081155b614658575f601654601a54613f7e919061575d565b90505f826002613f8e84876158d0565b613f9891906158e7565b613fa291906158e7565b90505f613fb06002846158e7565b613fba908561574a565b6011546040805160028082526060820183529394506001600160a01b03909216925f929160208301908036833701905050905030815f815181106140005761400061570b565b6001600160a01b0392831660209182029290920101526011548251911690829060019081106140315761403161570b565b6001600160a01b03928316602091820292909201015260105416635c11d79561405a868a61574a565b60135460405160e084901b6001600160e01b031916815261409392915f91879161010090046001600160a01b0316904290600401615906565b5f604051808303815f87803b1580156140aa575f80fd5b505af19250505080156140bb575060015b6140f3576040515f81527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b6013546040516370a0823160e01b81526001600160a01b03610100909204821660048201525f918416906370a0823190602401602060405180830381865afa158015614141573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614165919061571f565b905080156141ee576013546040516323b872dd60e01b81526101009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd906064016020604051808303815f875af11580156141c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141ec9190615770565b505b5f8460026141fc89856158d0565b61420691906158e7565b61421091906158e7565b90505f85601954601554614224919061575d565b61422e90856158d0565b61423891906158e7565b90505f6064603b548361424b91906158d0565b61425591906158e7565b90505f614262828461574a565b905081156143a1575f6064603a548461427b91906158d0565b61428591906158e7565b60035460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925089169063a9059cbb906044016020604051808303815f875af11580156142d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142fb9190615770565b506004546001600160a01b03808a169163a9059cbb911661431c848761574a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015614364573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143889190615770565b508260385f82825461439a919061575d565b9091555050505b801561441d5760255460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529088169063a9059cbb906044016020604051808303815f875af11580156143f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061441b9190615770565b505b5f8911801561442b57505f84115b156145005760105460115460395460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018d9052606481018890525f6084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303815f875af19250505080156144cb575060408051601f3d908101601f191682019092526144c891810190615976565b60015b6144fc576040517f0e944a8ae3ee1160b2678930fb103c5ceadb14ecbb4c16e311d7402f7011322c905f90a1614500565b5050505b601b54601754614510919061575d565b5f036145255750505050505050505050614658565b6011546021546001600160a01b03918216610100909104909116036145535750505050505050505050614658565b6010546040516370a0823160e01b81523060048201526001600160a01b0391821691635c11d79591908a16906370a0823190602401602060405180830381865afa1580156145a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145c7919061571f565b5f602430426040518663ffffffff1660e01b81526004016145ec9594939291906159a1565b5f604051808303815f87803b158015614603575f80fd5b505af1925050508015614614575060015b61464d57604051600181527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b505050505050505050505b50506013805460ff19169055565b6001600160a01b0388165f9081526001602052604090205461468990879061574a565b6001600160a01b0389165f9081526001602052604081209190915585156147ef575f85156146d557601a54601b546019546146c4919061575d565b6146ce919061575d565b905061474f565b6017546016546015546146e8919061575d565b6146f2919061575d565b602354909150600160b81b900460ff161561474f5760095488111561474f5760405162461bcd60e51b81526020600482015260136024820152721bdd995c881b585e08189d5e48185b5bdd5b9d606a1b6044820152606401611663565b5f61271061475d838b6158d0565b61476791906158e7565b9050801561478657614779818461575d565b92506147868b308361514e565b5f876147ae576127106018548b61479d91906158d0565b6147a791906158e7565b90506147cc565b612710601c548b6147bf91906158d0565b6147c991906158e7565b90505b80156147eb576147dc818561575d565b93506147eb8c61dead8361514e565b5050505b83801561481457506001600160a01b0389165f908152600c602052604090205460ff16155b801561483857506001600160a01b0388165f908152600c602052604090205460ff16155b1561487a575f6127106035548961484f91906158d0565b61485991906158e7565b905080156148785761486b818361575d565b91506148788a308361514e565b505b82801561489f57506001600160a01b0389165f908152600c602052604090205460ff16155b80156148c357506001600160a01b0388165f908152600c602052604090205460ff16155b15614905575f612710603654896148da91906158d0565b6148e491906158e7565b90508015614903576148f6818361575d565b91506149038a308361514e565b505b81801561492a57506001600160a01b0389165f908152600c602052604090205460ff16155b801561494e57506001600160a01b0388165f908152600c602052604090205460ff16155b156149b5576001600160a01b0388165f908152602a602052604090206001015460ff16156149b5575f6127106037548961498891906158d0565b61499291906158e7565b905080156149b3576149a4818361575d565b91506149b38a61dead8361514e565b505b6001600160a01b0388165f908152600e602052604090205460ff161580156149e65750602354600160c01b900460ff165b15614a6357600a546001600160a01b0389165f908152600160205260409020548290614a13908a9061575d565b614a1d919061574a565b1115614a635760405162461bcd60e51b81526020600482015260156024820152741bdd995c881b585e081dd85b1b195d081b1a5b5a5d605a1b6044820152606401611663565b614a778989614a72848b61574a565b61514e565b505050505050505050565b43604354604254614a93919061575d565b1115614a9c5750565b6021546040516370a0823160e01b81523060048201526101009091046001600160a01b0316905f9082906370a0823190602401602060405180830381865afa158015614aea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b0e919061571f565b9050604154811015614b1f57505050565b602354604080516318160ddd60e01b815290516001600160a01b03909216915f9183916318160ddd916004808201926020929091908290030181865afa158015614b6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b8f919061571f565b603d549091505f90819081908180805a6040516370a0823160e01b81523060048201529091506001600160a01b038c16906370a0823190602401602060405180830381865afa158015614be4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614c08919061571f565b99505b8b83108015614c1957508382105b15614e60578360405410614c2c575f6040555b603d60405481548110614c4157614c4161570b565b5f918252602090912001546040516370a0823160e01b81526001600160a01b03918216600482018190529850908a16906370a0823190602401602060405180830381865afa158015614c95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614cb9919061571f565b95505f86118015614ce257506001600160a01b0387165f908152603f602052604090205460ff16155b15614e1f5787614cf2878c6158d0565b614cfc91906158e7565b94505f85118015614d7257506040516370a0823160e01b815230600482015285906001600160a01b038d16906370a0823190602401602060405180830381865afa158015614d4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d70919061571f565b115b15614e1f576044548510614dad576040517f562093ded19d86002a76d3406f49614a83c4f4cf73c575ee5f575c620bb16972905f90a1614e1f565b60405163a9059cbb60e01b81526001600160a01b038881166004830152602482018790528c169063a9059cbb906044016020604051808303815f875af1158015614df9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614e1d9190615770565b505b5a614e2a908261574a565b614e34908461575d565b92505a604080549192505f614e48836159f4565b91905055508180614e58906159f4565b925050614c0b565b50504360425550505050505050505050565b5f805f60235f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ec5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614ee9919061571f565b90505f60105f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015614f3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614f609190615a0c565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015614f9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614fbf9190615a0c565b60235460408051637464fc3d60e01b815290519293506001600160a01b038085161515935f9390911691637464fc3d9160048083019260209291908290030181865afa158015615011573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190615035919061571f565b905081156150d65780156150d6575f615056615051898b6158d0565b6151c4565b90505f615062836151c4565b9050808211156150d3575f615077828461574a565b61508190886158d0565b61508c9060086158d0565b90505f61509a8360086158d0565b6150a58560116158d0565b6150af919061575d565b90506150bb81836158e7565b985088156150d0576150cd898961575d565b97505b50505b50505b5f6150e1898c61574a565b9050845f0361510b576103e86150fa6150518c846158d0565b615104919061574a565b9650615140565b61513d8961511987846158d0565b61512391906158e7565b8961512e888e6158d0565b61513891906158e7565b615231565b96505b505050505094509492505050565b6001600160a01b0382165f9081526001602052604090205461517190829061575d565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906130709085815260200190565b5f60038211156152235750805f6151dc6002836158e7565b6151e790600161575d565b90505b8181101561521d5790508060028161520281866158e7565b61520c919061575d565b61521691906158e7565b90506151ea565b50919050565b8115611d5457506001919050565b5f81831061523f5781615241565b825b9392505050565b6001600160a01b038116811461239e575f80fd5b8035611d5481615248565b5f60208284031215615277575f80fd5b813561524181615248565b801515811461239e575f80fd5b5f80604083850312156152a0575f80fd5b82356152ab81615248565b915060208301356152bb81615282565b809150509250929050565b5f602082840312156152d6575f80fd5b5035919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215615322575f80fd5b813561524181615282565b5f806040838503121561533e575f80fd5b823561534981615248565b946020939093013593505050565b5f8083601f840112615367575f80fd5b50813567ffffffffffffffff81111561537e575f80fd5b6020830191508360208260051b8501011115615398575f80fd5b9250929050565b5f805f604084860312156153b1575f80fd5b833567ffffffffffffffff8111156153c7575f80fd5b6153d386828701615357565b90945092505060208401356153e781615282565b809150509250925092565b5f8060208385031215615403575f80fd5b823567ffffffffffffffff811115615419575f80fd5b61542585828601615357565b90969095509350505050565b5f805f60608486031215615443575f80fd5b833561544e81615248565b9250602084013561545e81615248565b929592945050506040919091013590565b5f805f60608486031215615481575f80fd5b833592506020840135915060408401356153e781615282565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126154bd575f80fd5b813567ffffffffffffffff8111156154d7576154d761549a565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156155045761550461549a565b604052918252602081850181019290810186841115615521575f80fd5b6020860192505b83831015615547576155398361525c565b815260209283019201615528565b5095945050505050565b5f8060408385031215615562575f80fd5b823567ffffffffffffffff811115615578575f80fd5b615584858286016154ae565b95602094909401359450505050565b5f805f805f8060c087890312156155a8575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f805f606084860312156155e4575f80fd5b83356155ef81615248565b92506020840135915060408401356153e781615248565b5f8060408385031215615617575f80fd5b823561562281615248565b915060208301356152bb81615248565b5f60208284031215615642575f80fd5b813567ffffffffffffffff811115615658575f80fd5b615664848285016154ae565b949350505050565b5f805f806060858703121561567f575f80fd5b843567ffffffffffffffff811115615695575f80fd5b6156a187828801615357565b90989097506020870135966040013595509350505050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b600181811c908216806156ed57607f821691505b60208210810361521d57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561572f575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561189157611891615736565b8082018082111561189157611891615736565b5f60208284031215615780575f80fd5b815161524181615282565b80516001600160701b0381168114611d54575f80fd5b5f805f606084860312156157b3575f80fd5b6157bc8461578b565b92506157ca6020850161578b565b9150604084015163ffffffff811681146153e7575f80fd5b6001815b600184111561581d5780850481111561580157615801615736565b600184161561580f57908102905b60019390931c9280026157e6565b935093915050565b5f8261583357506001611891565b8161583f57505f611891565b8160018114615855576002811461585f5761587b565b6001915050611891565b60ff84111561587057615870615736565b50506001821b611891565b5060208310610133831016604e8410600b841016171561589e575081810a611891565b6158aa5f1984846157e2565b805f19048211156158bd576158bd615736565b029392505050565b5f6152418383615825565b808202811582820484141761189157611891615736565b5f8261590157634e487b7160e01b5f52601260045260245ffd5b500490565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156159565783516001600160a01b031683526020938401939092019160010161592f565b50506001600160a01b039590951660608401525050608001529392505050565b5f805f60608486031215615988575f80fd5b5050815160208301516040909301519094929350919050565b5f60a0820187835286602084015260a0604084015280865480835260c085019150875f5260205f2092505f5b818110156159565783546001600160a01b03168352600193840193602090930192016159cd565b5f60018201615a0557615a05615736565b5060010190565b5f60208284031215615a1c575f80fd5b81516152418161524856fea264697066735822122037b4193e36675fc1a94aef4d49bce83f9ba620a75d69714dd79f457ccf4c2f9e64736f6c634300081a003360806040525f805460ff19166001179055600280546001600160a01b03191661dead179055348015602e575f80fd5b50610b938061003c5f395ff3fe608060405234801561000f575f80fd5b506004361061011c575f3560e01c8063af6d1fe4116100a9578063d9c49a531161006e578063d9c49a5314610236578063e4e842ee14610249578063f851a44014610251578063f887ea4014610264578063fc0c546a14610277575f80fd5b8063af6d1fe4146101e2578063b1e51288146101f5578063b53820c414610208578063c167c2531461021b578063c54e44eb14610223575f80fd5b806380568690116100ef578063805686901461018f578063960cf58d146101a7578063a8aa1b31146101bb578063ac5e30cb146101ce578063acdf4f18146101da575f80fd5b8063111adc9b1461012057806318899f9c146101355780631bb84d86146101515780634d6be6c01461017c575b5f80fd5b61013361012e3660046108ff565b61028a565b005b61013e60015481565b6040519081526020015b60405180910390f35b600254610164906001600160a01b031681565b6040516001600160a01b039091168152602001610148565b61013361018a366004610931565b6102c2565b61019761030e565b6040519015158152602001610148565b60085461019790600160a01b900460ff1681565b600454610164906001600160a01b031681565b5f546101979060ff1681565b610133610383565b6101646101f03660046108ff565b6104c7565b610133610203366004610961565b6104ef565b61013361021636600461097c565b61052b565b61013e61071e565b600854610164906001600160a01b031681565b6101336102443660046109fb565b610795565b61019761085f565b600554610164906001600160a01b031681565b600754610164906001600160a01b031681565b600354610164906001600160a01b031681565b6005546001600160a01b031633146102bd5760405162461bcd60e51b81526004016102b490610a35565b60405180910390fd5b600155565b6005546001600160a01b031633146102ec5760405162461bcd60e51b81526004016102b490610a35565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546008546040516370a0823160e01b81523060048201525f92916001600160a01b0316906370a0823190602401602060405180830381865afa158015610358573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037c9190610a5c565b1015905090565b6005546001600160a01b03163314806103a657506003546001600160a01b031633145b6103c25760405162461bcd60e51b81526004016102b490610a35565b6103ca61030e565b6103f8576040517fca854b07268a057d0ae19f495011ad376548d36003829f7e8677f08589a470a5905f90a1565b61040061085f565b15801561040e57505f5460ff165b15610459577f3be903c083cb0e5b08463ebc2330b4fba0eb9872c5eee977f0f2cf245609d8d861043c61071e565b6001546040805192835260208301919091520160405180910390a1565b600754600154600254604051635c11d79560e01b81526001600160a01b0393841693635c11d795936104989390925f9260069216904290600401610a73565b5f604051808303815f87803b1580156104af575f80fd5b505af11580156104c1573d5f803e3d5ffd5b50505050565b600681815481106104d6575f80fd5b5f918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146105195760405162461bcd60e51b81526004016102b490610a35565b5f805460ff1916911515919091179055565b600854600160a01b900460ff16156105745760405162461bcd60e51b815260206004820152600c60248201526b185b1c9958591e481253925560a21b60448201526064016102b4565b600380546001600160a01b038981166001600160a01b031992831617909255600480548984169083161790556005805488841690831617905560088054928616929091169190911790556040805160028082526060820183529091602083019080368337505081516105ed926006925060200190610888565b50600854600680546001600160a01b03909216915f9061060f5761060f610ae6565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555086600660018154811061064f5761064f610ae6565b5f91825260209091200180546001600160a01b039283166001600160a01b0319918216179091556007805487841692168217905560085460405163095ea7b360e01b815260048101929092525f1960248301529091169063095ea7b3906044016020604051808303815f875af11580156106cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ef9190610afa565b508115610700575f805460ff191690555b60015550506008805460ff60a01b1916600160a01b17905550505050565b600854600480546040516370a0823160e01b81526001600160a01b03918216928101929092525f9216906370a0823190602401602060405180830381865afa15801561076c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107909190610a5c565b905090565b600554336001600160a01b039091160361085a576001600160a01b0383166107ea576040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156104c1573d5f803e3d5ffd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610836573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c19190610afa565b505050565b5f600154606461086d61071e565b610878906005610b15565b6108829190610b3e565b11905090565b828054828255905f5260205f209081019282156108db579160200282015b828111156108db57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906108a6565b506108e79291506108eb565b5090565b5b808211156108e7575f81556001016108ec565b5f6020828403121561090f575f80fd5b5035919050565b80356001600160a01b038116811461092c575f80fd5b919050565b5f60208284031215610941575f80fd5b61094a82610916565b9392505050565b801515811461095e575f80fd5b50565b5f60208284031215610971575f80fd5b813561094a81610951565b5f805f805f805f60e0888a031215610992575f80fd5b61099b88610916565b96506109a960208901610916565b95506109b760408901610916565b94506109c560608901610916565b93506109d360808901610916565b925060a08801356109e381610951565b96999598509396929591949193505060c09091013590565b5f805f60608486031215610a0d575f80fd5b610a1684610916565b9250610a2460208501610916565b929592945050506040919091013590565b6020808252600d908201526c3737903832b936b4b9b9b4b7b760991b604082015260600190565b5f60208284031215610a6c575f80fd5b5051919050565b5f60a0820187835286602084015260a0604084015280865480835260c085019150875f5260205f2092505f5b81811015610ac65783546001600160a01b0316835260019384019360209093019201610a9f565b50506001600160a01b039590951660608401525050608001529392505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610b0a575f80fd5b815161094a81610951565b8082028115828204841417610b3857634e487b7160e01b5f52601160045260245ffd5b92915050565b5f82610b5857634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220fbe91f11930e1c51cd9fe5597591f5dc29d55444ab8bcd8bded64c0e97b297fd64736f6c634300081a0033608060405234801561000f575f80fd5b5060405161013938038061013983398101604081905261002e916100a3565b60405163095ea7b360e01b81523360048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015610078573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061009c91906100d0565b50506100ef565b5f602082840312156100b3575f80fd5b81516001600160a01b03811681146100c9575f80fd5b9392505050565b5f602082840312156100e0575f80fd5b815180151581146100c9575f80fd5b603e806100fb5f395ff3fe60806040525f80fdfea264697066735822122052a871b8379f3aacb599d45284249479b2c8fbb46958caeb574e6038bef1699f64736f6c634300081a0033
Deployed Bytecode
0x608060405260043610610771575f3560e01c80637355b15b116103cc578063b02d757f116101ff578063d59864331161011e578063e82bef29116100b3578063ec2dec7011610083578063ec2dec70146115b3578063ef6e4f17146115c8578063f2b344b5146115dd578063f2fde38b146115fc578063f662bb921461161b575f80fd5b8063e82bef291461154c578063e92a98e21461156b578063ea10510e1461157f578063eb10b7411461159e575f80fd5b8063e043fe4b116100ee578063e043fe4b146114da578063e32759cf146114f9578063e5a6b10f1461150e578063e5c2b0a61461152d575f80fd5b8063d59864331461143e578063d710569b1461145e578063dac1dcfe1461147d578063dd62ed3e14611496575f80fd5b8063bfc3137e11610194578063c92d567e11610164578063c92d567e146113c5578063ce0192f9146113e5578063ce4d9f15146113fa578063d285e6ab14611429575f80fd5b8063bfc3137e14611347578063c0aa931e1461135c578063c213d62d1461137b578063c5827ae71461139a575f80fd5b8063bd9a3b6d116101cf578063bd9a3b6d146112c0578063bddf379e146112df578063be4fe9a514611313578063bfac5ee014611328575f80fd5b8063b02d757f1461123e578063b9fbc49d1461125e578063bba30f8f14611273578063bd25bf2914611292575f80fd5b80638f6cd17d116102eb578063a5696d8911610280578063aa4bde2811610250578063aa4bde28146111e0578063aa582b42146111f5578063acb2ad6f14611214578063adc7955d14611229575f80fd5b8063a5696d891461116e578063a5cde96c1461118d578063a8424861146111a2578063a9059cbb146111c1575f80fd5b8063992db38f116102bb578063992db38f146111065780639cc0e3c71461111a578063a23270d714611139578063a4c82a0014611159575f80fd5b80638f6cd17d146110b457806395d89b41146110c957806395e36679146110dd57806397a241e4146110f2575f80fd5b80638718b24f116103615780638d849175116103315780638d849175146110465780638da5cb5b1461105a5780638e1e0838146110765780638f02bb5b14611095575f80fd5b80638718b24f14610fd957806388e765ff14610ffd5780638a26d47d146110125780638c2fc7ad14611027575f80fd5b80637db1342c1161039c5780637db1342c14610f625780638322fff214610f8157806385dc300414610fa55780638691752414610fc4575f80fd5b80637355b15b14610ef15780637959473614610f1057806379dc880c14610f2f5780637c5ee8e914610f4e575f80fd5b80632e82f1a0116105a45780635a7ba73c116104c35780636402511e116104585780636b611368116104285780636b61136814610e8a57806370a0823114610e9f578063715018a614610ebe578063730c188814610ed2575f80fd5b80636402511e14610e1f57806366d1b6b514610e3e57806369768b5014610e5d578063697cfc1914610e76575f80fd5b80636108a3db116104935780636108a3db14610d8f578063621823e614610dae5780636386c1c714610dc3578063639909bf14610e0a575f80fd5b80635a7ba73c14610d125780635b37e72c14610d325780635ede70d714610d51578063605324f214610d70575f80fd5b80633ccfdbcd1161053957806346c123b61161050957806346c123b614610ca05780634a9a774014610cbf5780634d5ce03814610cde578063553193ca14610cfd575f80fd5b80633ccfdbcd14610c1357806340aa81fe14610c3e5780634188bf5a14610c6c5780634482004e14610c8b575f80fd5b80633b1cd187116105745780633b1cd18714610b9c5780633bb82eb614610bb15780633bfe62ca14610bd05780633c11100d14610be5575f80fd5b80632e82f1a014610b30578063313ce56714610b4957806335c9608914610b5d5780633757434214610b7d575f80fd5b8063150e4c47116106905780631dbbaebd11610625578063255412d9116105f5578063255412d914610ad25780632bc9218b14610ae75780632c3e486c14610b065780632dab693f14610b1b575f80fd5b80631dbbaebd14610a3e578063206c17bb14610a5d5780632171dcc914610a9457806323b872dd14610ab3575f80fd5b806318160ddd1161066057806318160ddd146109e15780631846a5a4146109f557806318d1285514610a15578063199ffc7214610a29575f80fd5b8063150e4c471461097b57806315d07d821461099a578063172246fc146109b357806317417bb8146109cc575f80fd5b806306fdde03116107065780630a79a70e116106d65780630a79a70e146109105780630a7a2842146109295780630f890b861461094857806314a432c91461095c575f80fd5b806306fdde031461088e57806307313d8d146108af57806307c3adf0146108ce578063095ea7b3146108f1575f80fd5b806304c23ffe1161074157806304c23ffe1461082357806305833c2b1461083c578063060e304e1461085b578063063be69e1461087a575f80fd5b806301339c211461077c57806301873d8f1461079257806301986fad146107d557806303da2b2314610803575f80fd5b3661077857005b5f80fd5b348015610787575f80fd5b5061079061163a565b005b34801561079d575f80fd5b506107c06107ac366004615267565b602b6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156107e0575f80fd5b506107c06107ef366004615267565b600c6020525f908152604090205460ff1681565b34801561080e575f80fd5b506023546107c090600160c01b900460ff1681565b34801561082e575f80fd5b50602c546107c09060ff1681565b348015610847575f80fd5b5061079061085636600461528f565b6116b1565b348015610866575f80fd5b506107906108753660046152c6565b611704565b348015610885575f80fd5b50610790611772565b348015610899575f80fd5b506108a26117aa565b6040516107cc91906152dd565b3480156108ba575f80fd5b506107906108c9366004615312565b61183a565b3480156108d9575f80fd5b506108e360175481565b6040519081526020016107cc565b3480156108fc575f80fd5b506107c061090b36600461532d565b611881565b34801561091b575f80fd5b50602e546107c09060ff1681565b348015610934575f80fd5b506107906109433660046152c6565b611897565b348015610953575f80fd5b50610790611901565b348015610967575f80fd5b506107906109763660046152c6565b611939565b348015610986575f80fd5b5061079061099536600461539f565b611967565b3480156109a5575f80fd5b506021546107c09060ff1681565b3480156109be575f80fd5b50601f546107c09060ff1681565b3480156109d7575f80fd5b506108e360205481565b3480156109ec575f80fd5b50600f546108e3565b348015610a00575f80fd5b506025546107c090600160a81b900460ff1681565b348015610a20575f80fd5b506107906119fa565b348015610a34575f80fd5b506108e360335481565b348015610a49575f80fd5b50610790610a583660046153f2565b611a29565b348015610a68575f80fd5b50601054610a7c906001600160a01b031681565b6040516001600160a01b0390911681526020016107cc565b348015610a9f575f80fd5b50610790610aae36600461528f565b611b3e565b348015610abe575f80fd5b506107c0610acd366004615431565b611b91565b348015610add575f80fd5b506108e360185481565b348015610af2575f80fd5b50610790610b013660046152c6565b611c23565b348015610b11575f80fd5b506108e360315481565b348015610b26575f80fd5b506108e360085481565b348015610b3b575f80fd5b506030546107c09060ff1681565b348015610b54575f80fd5b506007546108e3565b348015610b68575f80fd5b506025546107c090600160a01b900460ff1681565b348015610b88575f80fd5b50610790610b973660046152c6565b611c8d565b348015610ba7575f80fd5b506108e360365481565b348015610bbc575f80fd5b50610790610bcb3660046152c6565b611cbb565b348015610bdb575f80fd5b506108e360195481565b348015610bf0575f80fd5b506107c0610bff366004615267565b60126020525f908152604090205460ff1681565b348015610c1e575f80fd5b506108e3610c2d366004615267565b601d6020525f908152604090205481565b348015610c49575f80fd5b506107c0610c58366004615267565b600e6020525f908152604090205460ff1681565b348015610c77575f80fd5b50602354610a7c906001600160a01b031681565b348015610c96575f80fd5b506108e3603c5481565b348015610cab575f80fd5b50610790610cba366004615312565b611ce9565b348015610cca575f80fd5b50601454610a7c906001600160a01b031681565b348015610ce9575f80fd5b506108e3610cf8366004615267565b611d25565b348015610d08575f80fd5b506108e360225481565b348015610d1d575f80fd5b506023546107c090600160a81b900460ff1681565b348015610d3d575f80fd5b50602554610a7c906001600160a01b031681565b348015610d5c575f80fd5b50610790610d6b366004615267565b611d59565b348015610d7b575f80fd5b50610790610d8a3660046152c6565b611e10565b348015610d9a575f80fd5b50610790610da936600461539f565b611e96565b348015610db9575f80fd5b506108e360435481565b348015610dce575f80fd5b50610de2610ddd366004615267565b611f72565b60408051948552602085019390935290151591830191909152151560608201526080016107cc565b348015610e15575f80fd5b506108e360445481565b348015610e2a575f80fd5b50610790610e393660046152c6565b61202e565b348015610e49575f80fd5b50600454610a7c906001600160a01b031681565b348015610e68575f80fd5b50600b546107c09060ff1681565b348015610e81575f80fd5b5061079061205c565b348015610e95575f80fd5b506108e3601c5481565b348015610eaa575f80fd5b506108e3610eb9366004615267565b612094565b348015610ec9575f80fd5b50610790612140565b348015610edd575f80fd5b50610790610eec36600461546f565b6121b1565b348015610efc575f80fd5b50610790610f0b366004615551565b612283565b348015610f1b575f80fd5b50610790610f2a366004615312565b61233a565b348015610f3a575f80fd5b50610790610f493660046152c6565b6123a1565b348015610f59575f80fd5b50610790612411565b348015610f6d575f80fd5b50610790610f7c3660046152c6565b612440565b348015610f8c575f80fd5b50602154610a7c9061010090046001600160a01b031681565b348015610fb0575f80fd5b50610790610fbf366004615267565b61246e565b348015610fcf575f80fd5b506108e360295481565b348015610fe4575f80fd5b50601354610a7c9061010090046001600160a01b031681565b348015611008575f80fd5b506108e360095481565b34801561101d575f80fd5b506108e3603a5481565b348015611032575f80fd5b5061079061104136600461528f565b612525565b348015611051575f80fd5b50610790612578565b348015611065575f80fd5b505f546001600160a01b0316610a7c565b348015611081575f80fd5b50603954610a7c906001600160a01b031681565b3480156110a0575f80fd5b506107906110af3660046152c6565b6125ad565b3480156110bf575f80fd5b506108e360285481565b3480156110d4575f80fd5b506108a261261f565b3480156110e8575f80fd5b506108e3601e5481565b3480156110fd575f80fd5b5061079061262e565b348015611111575f80fd5b50610790612666565b348015611125575f80fd5b50610a7c6111343660046152c6565b6126d4565b348015611144575f80fd5b506023546107c090600160b81b900460ff1681565b348015611164575f80fd5b506108e360325481565b348015611179575f80fd5b5061079061118836600461532d565b6126fc565b348015611198575f80fd5b506108e3602d5481565b3480156111ad575f80fd5b506107906111bc36600461528f565b612740565b3480156111cc575f80fd5b506107c06111db36600461532d565b612793565b3480156111eb575f80fd5b506108e3600a5481565b348015611200575f80fd5b5061079061120f3660046153f2565b61279f565b34801561121f575f80fd5b506108e360355481565b348015611234575f80fd5b506108e3601a5481565b348015611249575f80fd5b506023546107c090600160b01b900460ff1681565b348015611269575f80fd5b506108e360165481565b34801561127e575f80fd5b5061079061128d3660046152c6565b612912565b34801561129d575f80fd5b506107c06112ac366004615267565b600d6020525f908152604090205460ff1681565b3480156112cb575f80fd5b506107906112da366004615593565b612940565b3480156112ea575f80fd5b506108e36112f9366004615267565b6001600160a01b03165f908152602f602052604090205490565b34801561131e575f80fd5b506108e3601b5481565b348015611333575f80fd5b506107906113423660046155d2565b612986565b348015611352575f80fd5b506108e360375481565b348015611367575f80fd5b506107906113763660046152c6565b612a85565b348015611386575f80fd5b506107906113953660046152c6565b612ab3565b3480156113a5575f80fd5b506108e36113b4366004615267565b602f6020525f908152604090205481565b3480156113d0575f80fd5b506023546107c090600160a01b900460ff1681565b3480156113f0575f80fd5b506108e360155481565b348015611405575f80fd5b5061140e612ae1565b604080519384526020840192909252908201526060016107cc565b348015611434575f80fd5b506108e360345481565b348015611449575f80fd5b506023546107c090600160c81b900460ff1681565b348015611469575f80fd5b50610790611478366004615267565b612c0d565b348015611488575f80fd5b506027546107c09060ff1681565b3480156114a1575f80fd5b506108e36114b0366004615606565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156114e5575f80fd5b506107906114f43660046152c6565b612c58565b348015611504575f80fd5b506108e360265481565b348015611519575f80fd5b50601154610a7c906001600160a01b031681565b348015611538575f80fd5b506107906115473660046152c6565b612c86565b348015611557575f80fd5b50600354610a7c906001600160a01b031681565b348015611576575f80fd5b50610790612cfa565b34801561158a575f80fd5b50610790611599366004615312565b612d2f565b3480156115a9575f80fd5b506108e360415481565b3480156115be575f80fd5b506108e3603b5481565b3480156115d3575f80fd5b506108e360385481565b3480156115e8575f80fd5b506107906115f7366004615632565b612d76565b348015611607575f80fd5b50610790611616366004615267565b612ec6565b348015611626575f80fd5b5061079061163536600461566c565b612f89565b5f546001600160a01b0316331461166c5760405162461bcd60e51b8152600401611663906156b9565b60405180910390fd5b602254156116ab5760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b6044820152606401611663565b43602255565b5f546001600160a01b031633146116da5760405162461bcd60e51b8152600401611663906156b9565b6001600160a01b03919091165f908152603f60205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461172d5760405162461bcd60e51b8152600401611663906156b9565b805f0361176d5760405162461bcd60e51b815260206004820152600e60248201526d067726561746572207468616e20360941b6044820152606401611663565b602855565b5f546001600160a01b0316331461179b5760405162461bcd60e51b8152600401611663906156b9565b6023805460ff60b81b19169055565b6060600580546117b9906156d9565b80601f01602080910402602001604051908101604052809291908181526020018280546117e5906156d9565b80156118305780601f1061180757610100808354040283529160200191611830565b820191905f5260205f20905b81548152906001019060200180831161181357829003601f168201915b5050505050905090565b5f546001600160a01b031633146118635760405162461bcd60e51b8152600401611663906156b9565b60258054911515600160a81b0260ff60a81b19909216919091179055565b5f61188d33848461301c565b5060015b92915050565b5f546001600160a01b031633146118c05760405162461bcd60e51b8152600401611663906156b9565b60648111156118fc5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611663565b603b55565b5f546001600160a01b0316331461192a5760405162461bcd60e51b8152600401611663906156b9565b6023805460ff60c81b19169055565b5f546001600160a01b031633146119625760405162461bcd60e51b8152600401611663906156b9565b600855565b5f546001600160a01b031633146119905760405162461bcd60e51b8152600401611663906156b9565b5f5b828110156119f45781600c5f8686858181106119b0576119b061570b565b90506020020160208101906119c59190615267565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611992565b50505050565b5f546001600160a01b03163314611a235760405162461bcd60e51b8152600401611663906156b9565b5f603c55565b5f546001600160a01b03163314611a525760405162461bcd60e51b8152600401611663906156b9565b5f5b81811015611b39576023545f906001600160a01b03166370a08231858585818110611a8157611a8161570b565b9050602002016020810190611a969190615267565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611ad8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611afc919061571f565b1115611b3157611b31838383818110611b1757611b1761570b565b9050602002016020810190611b2c9190615267565b61307d565b600101611a54565b505050565b5f546001600160a01b03163314611b675760405162461bcd60e51b8152600401611663906156b9565b6001600160a01b03919091165f908152602b60205260409020805460ff1916911515919091179055565b5f611b9d84848461314a565b6001600160a01b0384165f9081526002602090815260408083203384529091529020545f1914611c19576001600160a01b0384165f908152600260209081526040808320338452909152902054611bf590839061574a565b6001600160a01b0385165f9081526002602090815260408083203384529091529020555b5060019392505050565b5f546001600160a01b03163314611c4c5760405162461bcd60e51b8152600401611663906156b9565b6064811115611c885760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611663565b603a55565b5f546001600160a01b03163314611cb65760405162461bcd60e51b8152600401611663906156b9565b602d55565b5f546001600160a01b03163314611ce45760405162461bcd60e51b8152600401611663906156b9565b604355565b5f546001600160a01b03163314611d125760405162461bcd60e51b8152600401611663906156b9565b602c805460ff1916911515919091179055565b6001600160a01b0381165f908152600d602052604081205460ff1615611d4d57506001919050565b505f919050565b919050565b5f546001600160a01b03163314611d825760405162461bcd60e51b8152600401611663906156b9565b803b63ffffffff1615611dd75760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e7472616374200000000000006044820152606401611663565b600480546001600160a01b039092166001600160a01b0319909216821790555f908152600c60205260409020805460ff19166001179055565b5f546001600160a01b03163314611e395760405162461bcd60e51b8152600401611663906156b9565b62030d408110158015611e4f5750621e84808111155b611e915760405162461bcd60e51b8152602060048201526013602482015272746f6f2068696768206f7220746f6f206c6f7760681b6044820152606401611663565b603455565b5f546001600160a01b03163314611ebf5760405162461bcd60e51b8152600401611663906156b9565b602354600160b01b900460ff16611f0e5760405162461bcd60e51b81526020600482015260136024820152721c995dd85c99131a5cdd08191a5cd8589b1959606a1b6044820152606401611663565b5f5b828110156119f45781600d5f868685818110611f2e57611f2e61570b565b9050602002016020810190611f439190615267565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611f10565b6001600160a01b038181165f818152602a60205260408082205460235491516370a0823160e01b815260048101949094529391928392839216906370a0823190602401602060405180830381865afa158015611fd0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff4919061571f565b6001600160a01b039095165f908152603f6020908152604080832054602a90925290912060010154949660ff918216959091169350915050565b5f546001600160a01b031633146120575760405162461bcd60e51b8152600401611663906156b9565b602955565b5f546001600160a01b031633146120855760405162461bcd60e51b8152600401611663906156b9565b6023805460ff60c01b19169055565b6023545f906001600160a01b0383811691161480156120bd57506023546001600160a01b031633145b80156120d25750602554600160a01b900460ff165b15612125576023546001600160a01b03165f908152600160205260409020546121255760405162461bcd60e51b81526020600482015260056024820152642173796e6360d81b6044820152606401611663565b506001600160a01b03165f9081526001602052604090205490565b5f546001600160a01b031633146121695760405162461bcd60e51b8152600401611663906156b9565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146121da5760405162461bcd60e51b8152600401611663906156b9565b6101f482111561221f5760405162461bcd60e51b815260206004820152601060248201526f0e0cae4c6cadce840e8dede40d0d2ced60831b6044820152606401611663565b6103e88310156122675760405162461bcd60e51b8152602060048201526013602482015272199c995c5d595b98de481d1bdbc81cda1c9bdd606a1b6044820152606401611663565b6031929092556033556030805460ff1916911515919091179055565b5f546001600160a01b031633146122ac5760405162461bcd60e51b8152600401611663906156b9565b81515f805b8281101561233357602a5f8683815181106122ce576122ce61570b565b6020908102919091018101516001600160a01b031682528101919091526040015f208481556001808201805460ff19169091179055855190925061232b9086908390811061231e5761231e61570b565b602002602001015161307d565b6001016122b1565b5050505050565b5f546001600160a01b031633146123635760405162461bcd60e51b8152600401611663906156b9565b801561239957601c54601b54601a5460195461237f919061575d565b612389919061575d565b612393919061575d565b60355550565b5f6035555b50565b5f546001600160a01b031633146123ca5760405162461bcd60e51b8152600401611663906156b9565b6109c481111561240c5760405162461bcd60e51b815260206004820152600d60248201526c616464204c70203e203235202160981b6044820152606401611663565b603655565b5f546001600160a01b0316331461243a5760405162461bcd60e51b8152600401611663906156b9565b5f602255565b5f546001600160a01b031633146124695760405162461bcd60e51b8152600401611663906156b9565b600a55565b5f546001600160a01b031633146124975760405162461bcd60e51b8152600401611663906156b9565b803b63ffffffff16156124ec5760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e7472616374200000000000006044820152606401611663565b600380546001600160a01b039092166001600160a01b0319909216821790555f908152600c60205260409020805460ff19166001179055565b5f546001600160a01b0316331461254e5760405162461bcd60e51b8152600401611663906156b9565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146125a15760405162461bcd60e51b8152600401611663906156b9565b601f805460ff19169055565b5f546001600160a01b031633146125d65760405162461bcd60e51b8152600401611663906156b9565b6109c481111561261a5760405162461bcd60e51b815260206004820152600f60248201526e7472616e73666572203e203235202160881b6044820152606401611663565b603555565b6060600680546117b9906156d9565b5f546001600160a01b031633146126575760405162461bcd60e51b8152600401611663906156b9565b602e805460ff19166001179055565b5f546001600160a01b0316331461268f5760405162461bcd60e51b8152600401611663906156b9565b603c54156126ce5760405162461bcd60e51b815260206004820152600c60248201526b0737461727465644164644c560a41b6044820152606401611663565b43603c55565b602481815481106126e3575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f546001600160a01b031633146127255760405162461bcd60e51b8152600401611663906156b9565b6001600160a01b039091165f908152602a6020526040902055565b5f546001600160a01b031633146127695760405162461bcd60e51b8152600401611663906156b9565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b5f61188d33848461314a565b5f546001600160a01b031633146127c85760405162461bcd60e51b8152600401611663906156b9565b602354600160c81b900460ff166128175760405162461bcd60e51b81526020600482015260136024820152721d185e0818da185b99d948191a5cd8589b1959606a1b6044820152606401611663565b81815f8181106128295761282961570b565b602002919091013560155550818160018181106128485761284861570b565b602002919091013560165550818160028181106128675761286761570b565b602002919091013560175550818160038181106128865761288661570b565b602002919091013560185550818160048181106128a5576128a561570b565b602002919091013560195550818160058181106128c4576128c461570b565b6020029190910135601a5550818160068181106128e3576128e361570b565b6020029190910135601b5550818160078181106129025761290261570b565b6020029190910135601c55505050565b5f546001600160a01b0316331461293b5760405162461bcd60e51b8152600401611663906156b9565b603755565b5f546001600160a01b031633146129695760405162461bcd60e51b8152600401611663906156b9565b601595909555601693909355601791909155601955601a55601b55565b5f546001600160a01b03163314806129a857506003546001600160a01b031633145b6129de5760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b6044820152606401611663565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303815f875af1158015612a2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a4e9190615770565b506003546040516001600160a01b03909116904780156108fc02915f818181858888f193505050501580156119f4573d5f803e3d5ffd5b5f546001600160a01b03163314612aae5760405162461bcd60e51b8152600401611663906156b9565b600955565b5f546001600160a01b03163314612adc5760405162461bcd60e51b8152600401611663906156b9565b604155565b5f805f8060235f9054906101000a90046001600160a01b031690505f80826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612b3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b5e91906157a1565b506011546001600160701b039283169450911691506001600160a01b031630811015612b8f57829650819550612b96565b8196508295505b6023546040516370a0823160e01b81526001600160a01b039182166004820152908216906370a0823190602401602060405180830381865afa158015612bde573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c02919061571f565b945050505050909192565b5f546001600160a01b03163314612c365760405162461bcd60e51b8152600401611663906156b9565b603980546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314612c815760405162461bcd60e51b8152600401611663906156b9565b604455565b5f546001600160a01b03163314612caf5760405162461bcd60e51b8152600401611663906156b9565b6003811115612cf55760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401611663565b602655565b5f546001600160a01b03163314612d235760405162461bcd60e51b8152600401611663906156b9565b602e805460ff19169055565b5f546001600160a01b03163314612d585760405162461bcd60e51b8152600401611663906156b9565b60258054911515600160a01b0260ff60a01b19909216919091179055565b5f546001600160a01b03163314612d9f5760405162461bcd60e51b8152600401611663906156b9565b80516023546001600160a01b03165f805b8381101561233357602a5f868381518110612dcd57612dcd61570b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f209150826001600160a01b03166370a08231868381518110612e1757612e1761570b565b60200260200101516040518263ffffffff1660e01b8152600401612e4a91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612e65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e89919061571f565b612e9490600161575d565b82556001808301805460ff191690911790558451612ebe9086908390811061231e5761231e61570b565b600101612db0565b5f546001600160a01b03163314612eef5760405162461bcd60e51b8152600401611663906156b9565b6001600160a01b038116612f305760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b6044820152606401611663565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314612fb25760405162461bcd60e51b8152600401611663906156b9565b5f5b8381101561233357612fc782600a6158c5565b612fd190846158d0565b602f5f878785818110612fe657612fe661570b565b9050602002016020810190612ffb9190615267565b6001600160a01b0316815260208101919091526040015f2055600101612fb4565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b803b8015613089575050565b6001600160a01b0382165f908152603e6020526040812054900361314657603d5415806130e55750816001600160a01b0316603d5f815481106130ce576130ce61570b565b5f918252602090912001546001600160a01b031614155b1561314657603d80546001600160a01b0384165f818152603e60205260408120839055600183018455929092527fece66cfdbd22e3f37d348a3d8e19074452862cd65fd4b9a11f0336d1ac6d1dc30180546001600160a01b03191690911790555b5050565b6001600160a01b0383165f90815260016020526040902054818110156131a55760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401611663565b5f6131af85611d25565b11156131ee5760405162461bcd60e51b815260206004820152600e60248201526d6973526577617264203e2030202160901b6044820152606401611663565b60135460ff161561320457612333848484613a7a565b6001600160a01b0384165f908152600c602052604090205460ff1615801561324457506001600160a01b0383165f908152600c602052604090205460ff16155b80156132595750602554600160a81b900460ff165b801561326657505f602654115b80156132aa57506001600160a01b0384165f9081526012602052604090205460ff16806132aa57506001600160a01b0383165f9081526012602052604090205460ff165b156132d957816132b985612094565b036132d9576026546132cc9060016158d0565b6132d6908361574a565b91505b602354600160a01b900460ff1680156132f25750602254155b801561331657506001600160a01b0384165f908152600c602052604090205460ff16155b801561333a57506001600160a01b0383165f908152600c602052604090205460ff16155b1561345a576001600160a01b0383165f9081526012602052604090205460ff1661340257602e5460ff1661339f5760405162461bcd60e51b815260206004820152600c60248201526b63616e7420627579206e6f7760a01b6044820152606401611663565b6001600160a01b0383165f908152602f6020526040902054826133c185612094565b6133cb919061575d565b11156134025760405162461bcd60e51b815260040161166390602080825260049082015263042dac2f60e31b604082015260600190565b6001600160a01b0383165f9081526012602052604090205460ff161561345a5760405162461bcd60e51b815260206004820152600d60248201526c63616e742073656c6c206e6f7760981b6044820152606401611663565b6022541580156134735750602354600160a01b900460ff165b1561354e576001600160a01b0384165f908152600c602052604090205460ff161580156134b857506001600160a01b0383165f908152600c602052604090205460ff16155b80156134dc57506001600160a01b0384165f9081526012602052604090205460ff16155b801561350057506001600160a01b0383165f9081526012602052604090205460ff16155b1561354e57823b63ffffffff161561354e5760405162461bcd60e51b8152602060048201526011602482015270063616e7420616464206f74686572206c7607c1b6044820152606401611663565b6001600160a01b0383165f9081526012602052604081205481908190819081908190819060ff16801561358f5750335f908152602b602052604090205460ff165b156136065761359d89613b2d565b90505f811180156135b3575063ffffffff8b3b16155b15613606576001600160a01b038b165f908152602a602052604081208054909350829184916135e390849061575d565b9091555050602254600193505f03613606576001828101805460ff191690911790555b6001600160a01b038b165f9081526012602052604081205460ff16156136ba57602c5460ff16156136415761363a8a613b94565b9050613660565b602d546001036136545761363a8a613cb3565b61365d8a613d7d565b90505b80156136ba576001600160a01b038b165f908152602a6020526040902054811115613689575f80fd5b6001600160a01b038b165f908152602a6020526040812080548392906136b090849061574a565b9091555060019550505b6001600160a01b038c165f9081526012602052604090205460ff16806136f757506001600160a01b038b165f9081526012602052604090205460ff165b156139e8576001600160a01b038c165f908152600c602052604090205460ff1615801561373c57506001600160a01b038b165f908152600c602052604090205460ff16155b156139c357602354600160a01b900460ff1680156137635750602354600160a81b900460ff165b801561377d575060085460225461377a919061575d565b43105b80156137a157506001600160a01b038b165f9081526012602052604090205460ff16155b156137c9576001600160a01b038b165f908152600d60205260409020805460ff191660011790555b6001600160a01b038b165f9081526012602052604090205460ff16156139ad5760135460ff161580156137fa575083155b156139ad57305f908152600160205260409020546029548111156139ab576013805460ff191660011790556023546001600160a01b038d81169116148015613844575060305460ff165b801561385f575060315460325461385b919061575d565b4210155b801561388357506001600160a01b038d165f908152600c602052604090205460ff16155b1561389257613890613e4b565b505b6013805460ff191660011790556025546040805163159be9e360e31b815290516001600160a01b039092169163acdf4f18916004808201925f9290919082900301818387803b1580156138e3575f80fd5b505af19250505080156138f4575060015b613921576040517f3f5028e8956709d2b943835f052a15fd3c70faecef3449e437edd6d7384ac6df905f90a15b6013805460ff19169055601a54601b546019546016546017546015545f959493929161394c9161575d565b613956919061575d565b613960919061575d565b61396a919061575d565b613974919061575d565b90505f60646028548e61398791906158d0565b61399191906158e7565b90508281111561399e5750815b6139a88183613f51565b50505b505b831580156139b9575084155b156139c357600197505b6001600160a01b038b165f9081526012602052604090205460ff16156139e857600196505b6001600160a01b038c165f9081526012602052604090205460ff16158015613a2857506001600160a01b038b165f9081526012602052604090205460ff16155b15613a3257600195505b613a428c8c8c8b8b8b8a8c614666565b6001600160a01b038c163014613a6c578615613a6157613a618c61307d565b613a6c603454614a82565b505050505050505050505050565b6001600160a01b0383165f90815260016020526040812080548391908390613aa390849061574a565b90915550506001600160a01b0383165f9081526001602052604081208054849290613acf90849061575d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b1b91815260200190565b60405180910390a35060019392505050565b5f805f80613b39612ae1565b9250925092505f8084118015613b4e57505f83115b15613b6b5782613b5e85886158d0565b613b6891906158e7565b90505b613b75818561575d565b8210613b8b57613b8782878686614e72565b5094505b50505050919050565b5f805f80613ba0612ae1565b92509250925082811015613c62576023546001600160a01b03165f90815260016020526040902054613bd390869061574a565b60235f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c47919061571f565b613c5190876158d0565b613c5b91906158e7565b9350613cab565b5f8084118015613c7157505f83115b15613b8b57613c80868461574a565b613c8a85886158d0565b613c9491906158e7565b9050613ca0848261575d565b821015613b8b575f80fd5b505050919050565b5f805f613cbe612ae1565b9250509150818111613d76576023548490613ce1906001600160a01b0316612094565b613ceb919061574a565b60235f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d5f919061571f565b613d6990866158d0565b613d7391906158e7565b92505b5050919050565b5f805f613d88612ae1565b9250509150818111613d76576023546001908590613dae906001600160a01b0316612094565b613db8919061574a565b613dc2919061574a565b60235f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e36919061571f565b613e4090866158d0565b613d6990600161575d565b426032556023545f908190613e68906001600160a01b0316612094565b90505f61271060335483613e7c91906158d0565b613e8691906158e7565b90508015613ea957602354613ea7906001600160a01b031661dead83613a7a565b505b6023546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae9916004808301925f92919082900301818387803b158015613ef1575f80fd5b505af1158015613f03573d5f803e3d5ffd5b50506040805186815260208101869052428183015290517f9cb560eb3a76b2c70f0528d86a83cc0464d10dd0ccc94ba95bd11b93eac93da69350908190036060019150a16001935050505090565b6013805460ff19166001179055801580613f69575081155b614658575f601654601a54613f7e919061575d565b90505f826002613f8e84876158d0565b613f9891906158e7565b613fa291906158e7565b90505f613fb06002846158e7565b613fba908561574a565b6011546040805160028082526060820183529394506001600160a01b03909216925f929160208301908036833701905050905030815f815181106140005761400061570b565b6001600160a01b0392831660209182029290920101526011548251911690829060019081106140315761403161570b565b6001600160a01b03928316602091820292909201015260105416635c11d79561405a868a61574a565b60135460405160e084901b6001600160e01b031916815261409392915f91879161010090046001600160a01b0316904290600401615906565b5f604051808303815f87803b1580156140aa575f80fd5b505af19250505080156140bb575060015b6140f3576040515f81527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b6013546040516370a0823160e01b81526001600160a01b03610100909204821660048201525f918416906370a0823190602401602060405180830381865afa158015614141573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614165919061571f565b905080156141ee576013546040516323b872dd60e01b81526101009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd906064016020604051808303815f875af11580156141c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141ec9190615770565b505b5f8460026141fc89856158d0565b61420691906158e7565b61421091906158e7565b90505f85601954601554614224919061575d565b61422e90856158d0565b61423891906158e7565b90505f6064603b548361424b91906158d0565b61425591906158e7565b90505f614262828461574a565b905081156143a1575f6064603a548461427b91906158d0565b61428591906158e7565b60035460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925089169063a9059cbb906044016020604051808303815f875af11580156142d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142fb9190615770565b506004546001600160a01b03808a169163a9059cbb911661431c848761574a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015614364573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143889190615770565b508260385f82825461439a919061575d565b9091555050505b801561441d5760255460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529088169063a9059cbb906044016020604051808303815f875af11580156143f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061441b9190615770565b505b5f8911801561442b57505f84115b156145005760105460115460395460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018d9052606481018890525f6084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303815f875af19250505080156144cb575060408051601f3d908101601f191682019092526144c891810190615976565b60015b6144fc576040517f0e944a8ae3ee1160b2678930fb103c5ceadb14ecbb4c16e311d7402f7011322c905f90a1614500565b5050505b601b54601754614510919061575d565b5f036145255750505050505050505050614658565b6011546021546001600160a01b03918216610100909104909116036145535750505050505050505050614658565b6010546040516370a0823160e01b81523060048201526001600160a01b0391821691635c11d79591908a16906370a0823190602401602060405180830381865afa1580156145a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145c7919061571f565b5f602430426040518663ffffffff1660e01b81526004016145ec9594939291906159a1565b5f604051808303815f87803b158015614603575f80fd5b505af1925050508015614614575060015b61464d57604051600181527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b505050505050505050505b50506013805460ff19169055565b6001600160a01b0388165f9081526001602052604090205461468990879061574a565b6001600160a01b0389165f9081526001602052604081209190915585156147ef575f85156146d557601a54601b546019546146c4919061575d565b6146ce919061575d565b905061474f565b6017546016546015546146e8919061575d565b6146f2919061575d565b602354909150600160b81b900460ff161561474f5760095488111561474f5760405162461bcd60e51b81526020600482015260136024820152721bdd995c881b585e08189d5e48185b5bdd5b9d606a1b6044820152606401611663565b5f61271061475d838b6158d0565b61476791906158e7565b9050801561478657614779818461575d565b92506147868b308361514e565b5f876147ae576127106018548b61479d91906158d0565b6147a791906158e7565b90506147cc565b612710601c548b6147bf91906158d0565b6147c991906158e7565b90505b80156147eb576147dc818561575d565b93506147eb8c61dead8361514e565b5050505b83801561481457506001600160a01b0389165f908152600c602052604090205460ff16155b801561483857506001600160a01b0388165f908152600c602052604090205460ff16155b1561487a575f6127106035548961484f91906158d0565b61485991906158e7565b905080156148785761486b818361575d565b91506148788a308361514e565b505b82801561489f57506001600160a01b0389165f908152600c602052604090205460ff16155b80156148c357506001600160a01b0388165f908152600c602052604090205460ff16155b15614905575f612710603654896148da91906158d0565b6148e491906158e7565b90508015614903576148f6818361575d565b91506149038a308361514e565b505b81801561492a57506001600160a01b0389165f908152600c602052604090205460ff16155b801561494e57506001600160a01b0388165f908152600c602052604090205460ff16155b156149b5576001600160a01b0388165f908152602a602052604090206001015460ff16156149b5575f6127106037548961498891906158d0565b61499291906158e7565b905080156149b3576149a4818361575d565b91506149b38a61dead8361514e565b505b6001600160a01b0388165f908152600e602052604090205460ff161580156149e65750602354600160c01b900460ff165b15614a6357600a546001600160a01b0389165f908152600160205260409020548290614a13908a9061575d565b614a1d919061574a565b1115614a635760405162461bcd60e51b81526020600482015260156024820152741bdd995c881b585e081dd85b1b195d081b1a5b5a5d605a1b6044820152606401611663565b614a778989614a72848b61574a565b61514e565b505050505050505050565b43604354604254614a93919061575d565b1115614a9c5750565b6021546040516370a0823160e01b81523060048201526101009091046001600160a01b0316905f9082906370a0823190602401602060405180830381865afa158015614aea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b0e919061571f565b9050604154811015614b1f57505050565b602354604080516318160ddd60e01b815290516001600160a01b03909216915f9183916318160ddd916004808201926020929091908290030181865afa158015614b6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b8f919061571f565b603d549091505f90819081908180805a6040516370a0823160e01b81523060048201529091506001600160a01b038c16906370a0823190602401602060405180830381865afa158015614be4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614c08919061571f565b99505b8b83108015614c1957508382105b15614e60578360405410614c2c575f6040555b603d60405481548110614c4157614c4161570b565b5f918252602090912001546040516370a0823160e01b81526001600160a01b03918216600482018190529850908a16906370a0823190602401602060405180830381865afa158015614c95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614cb9919061571f565b95505f86118015614ce257506001600160a01b0387165f908152603f602052604090205460ff16155b15614e1f5787614cf2878c6158d0565b614cfc91906158e7565b94505f85118015614d7257506040516370a0823160e01b815230600482015285906001600160a01b038d16906370a0823190602401602060405180830381865afa158015614d4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d70919061571f565b115b15614e1f576044548510614dad576040517f562093ded19d86002a76d3406f49614a83c4f4cf73c575ee5f575c620bb16972905f90a1614e1f565b60405163a9059cbb60e01b81526001600160a01b038881166004830152602482018790528c169063a9059cbb906044016020604051808303815f875af1158015614df9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614e1d9190615770565b505b5a614e2a908261574a565b614e34908461575d565b92505a604080549192505f614e48836159f4565b91905055508180614e58906159f4565b925050614c0b565b50504360425550505050505050505050565b5f805f60235f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ec5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614ee9919061571f565b90505f60105f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015614f3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614f609190615a0c565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015614f9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614fbf9190615a0c565b60235460408051637464fc3d60e01b815290519293506001600160a01b038085161515935f9390911691637464fc3d9160048083019260209291908290030181865afa158015615011573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190615035919061571f565b905081156150d65780156150d6575f615056615051898b6158d0565b6151c4565b90505f615062836151c4565b9050808211156150d3575f615077828461574a565b61508190886158d0565b61508c9060086158d0565b90505f61509a8360086158d0565b6150a58560116158d0565b6150af919061575d565b90506150bb81836158e7565b985088156150d0576150cd898961575d565b97505b50505b50505b5f6150e1898c61574a565b9050845f0361510b576103e86150fa6150518c846158d0565b615104919061574a565b9650615140565b61513d8961511987846158d0565b61512391906158e7565b8961512e888e6158d0565b61513891906158e7565b615231565b96505b505050505094509492505050565b6001600160a01b0382165f9081526001602052604090205461517190829061575d565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906130709085815260200190565b5f60038211156152235750805f6151dc6002836158e7565b6151e790600161575d565b90505b8181101561521d5790508060028161520281866158e7565b61520c919061575d565b61521691906158e7565b90506151ea565b50919050565b8115611d5457506001919050565b5f81831061523f5781615241565b825b9392505050565b6001600160a01b038116811461239e575f80fd5b8035611d5481615248565b5f60208284031215615277575f80fd5b813561524181615248565b801515811461239e575f80fd5b5f80604083850312156152a0575f80fd5b82356152ab81615248565b915060208301356152bb81615282565b809150509250929050565b5f602082840312156152d6575f80fd5b5035919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215615322575f80fd5b813561524181615282565b5f806040838503121561533e575f80fd5b823561534981615248565b946020939093013593505050565b5f8083601f840112615367575f80fd5b50813567ffffffffffffffff81111561537e575f80fd5b6020830191508360208260051b8501011115615398575f80fd5b9250929050565b5f805f604084860312156153b1575f80fd5b833567ffffffffffffffff8111156153c7575f80fd5b6153d386828701615357565b90945092505060208401356153e781615282565b809150509250925092565b5f8060208385031215615403575f80fd5b823567ffffffffffffffff811115615419575f80fd5b61542585828601615357565b90969095509350505050565b5f805f60608486031215615443575f80fd5b833561544e81615248565b9250602084013561545e81615248565b929592945050506040919091013590565b5f805f60608486031215615481575f80fd5b833592506020840135915060408401356153e781615282565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126154bd575f80fd5b813567ffffffffffffffff8111156154d7576154d761549a565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156155045761550461549a565b604052918252602081850181019290810186841115615521575f80fd5b6020860192505b83831015615547576155398361525c565b815260209283019201615528565b5095945050505050565b5f8060408385031215615562575f80fd5b823567ffffffffffffffff811115615578575f80fd5b615584858286016154ae565b95602094909401359450505050565b5f805f805f8060c087890312156155a8575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f805f606084860312156155e4575f80fd5b83356155ef81615248565b92506020840135915060408401356153e781615248565b5f8060408385031215615617575f80fd5b823561562281615248565b915060208301356152bb81615248565b5f60208284031215615642575f80fd5b813567ffffffffffffffff811115615658575f80fd5b615664848285016154ae565b949350505050565b5f805f806060858703121561567f575f80fd5b843567ffffffffffffffff811115615695575f80fd5b6156a187828801615357565b90989097506020870135966040013595509350505050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b600181811c908216806156ed57607f821691505b60208210810361521d57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561572f575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561189157611891615736565b8082018082111561189157611891615736565b5f60208284031215615780575f80fd5b815161524181615282565b80516001600160701b0381168114611d54575f80fd5b5f805f606084860312156157b3575f80fd5b6157bc8461578b565b92506157ca6020850161578b565b9150604084015163ffffffff811681146153e7575f80fd5b6001815b600184111561581d5780850481111561580157615801615736565b600184161561580f57908102905b60019390931c9280026157e6565b935093915050565b5f8261583357506001611891565b8161583f57505f611891565b8160018114615855576002811461585f5761587b565b6001915050611891565b60ff84111561587057615870615736565b50506001821b611891565b5060208310610133831016604e8410600b841016171561589e575081810a611891565b6158aa5f1984846157e2565b805f19048211156158bd576158bd615736565b029392505050565b5f6152418383615825565b808202811582820484141761189157611891615736565b5f8261590157634e487b7160e01b5f52601260045260245ffd5b500490565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156159565783516001600160a01b031683526020938401939092019160010161592f565b50506001600160a01b039590951660608401525050608001529392505050565b5f805f60608486031215615988575f80fd5b5050815160208301516040909301519094929350919050565b5f60a0820187835286602084015260a0604084015280865480835260c085019150875f5260205f2092505f5b818110156159565783546001600160a01b03168352600193840193602090930192016159cd565b5f60018201615a0557615a05615736565b5060010190565b5f60208284031215615a1c575f80fd5b81516152418161524856fea264697066735822122037b4193e36675fc1a94aef4d49bce83f9ba620a75d69714dd79f457ccf4c2f9e64736f6c634300081a0033
Deployed Bytecode Sourcemap
7561:40950:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41914:142;;;;;;;;;;;;;:::i;:::-;;21289:44;;;;;;;;;;-1:-1:-1;21289:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;706:14:1;;699:22;681:41;;669:2;654:18;21289:44:0;;;;;;;;8042:45;;;;;;;;;;-1:-1:-1;8042:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9336:29;;;;;;;;;;-1:-1:-1;9336:29:0;;;;-1:-1:-1;;;9336:29:0;;;;;;21463:31;;;;;;;;;;-1:-1:-1;21463:31:0;;;;;;;;48389:119;;;;;;;;;;-1:-1:-1;48389:119:0;;;;;:::i;:::-;;:::i;17561:163::-;;;;;;;;;;-1:-1:-1;17561:163:0;;;;;:::i;:::-;;:::i;44005:87::-;;;;;;;;;;;;;:::i;14191:94::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16497:97::-;;;;;;;;;;-1:-1:-1;16497:97:0;;;;;:::i;:::-;;:::i;8597:28::-;;;;;;;;;;;;;;;;;;;2289:25:1;;;2277:2;2262:18;8597:28:0;2143:177:1;15265:184:0;;;;;;;;;;-1:-1:-1;15265:184:0;;;;;:::i;:::-;;:::i;23694:26::-;;;;;;;;;;-1:-1:-1;23694:26:0;;;;;;;;37609:155;;;;;;;;;;-1:-1:-1;37609:155:0;;;;;:::i;:::-;;:::i;44199:87::-;;;;;;;;;;;;;:::i;16187:68::-;;;;;;;;;;-1:-1:-1;16187:68:0;;;;;:::i;:::-;;:::i;42155:223::-;;;;;;;;;;-1:-1:-1;42155:223:0;;;;;:::i;:::-;;:::i;8969:25::-;;;;;;;;;;-1:-1:-1;8969:25:0;;;;;;;;8887:31;;;;;;;;;;-1:-1:-1;8887:31:0;;;;;;;;8925:35;;;;;;;;;;;;;;;;14397:95;;;;;;;;;;-1:-1:-1;14477:7:0;;14397:95;;16456:32;;;;;;;;;;-1:-1:-1;16456:32:0;;;;-1:-1:-1;;;16456:32:0;;;;;;41834:72;;;;;;;;;;;;;:::i;31278:35::-;;;;;;;;;;;;;;;;45232:266;;;;;;;;;;-1:-1:-1;45232:266:0;;;;;:::i;:::-;;:::i;8231:30::-;;;;;;;;;;-1:-1:-1;8231:30:0;;;;-1:-1:-1;;;;;8231:30:0;;;;;;-1:-1:-1;;;;;4265:32:1;;;4247:51;;4235:2;4220:18;8231:30:0;4082:222:1;21340:115:0;;;;;;;;;;-1:-1:-1;21340:115:0;;;;;:::i;:::-;;:::i;15457:404::-;;;;;;;;;;-1:-1:-1;15457:404:0;;;;;:::i;:::-;;:::i;8632:26::-;;;;;;;;;;;;;;;;37386:171;;;;;;;;;;-1:-1:-1;37386:171:0;;;;;:::i;:::-;;:::i;31190:45::-;;;;;;;;;;;;;;;;7906:17;;;;;;;;;;;;;;;;31151:32;;;;;;;;;;-1:-1:-1;31151:32:0;;;;;;;;14293:96;;;;;;;;;;-1:-1:-1;14372:9:0;;14293:96;;14500:20;;;;;;;;;;-1:-1:-1;14500:20:0;;;;-1:-1:-1;;;14500:20:0;;;;;;21645:127;;;;;;;;;;-1:-1:-1;21645:127:0;;;;;:::i;:::-;;:::i;33037:30::-;;;;;;;;;;;;;;;;46094:122;;;;;;;;;;-1:-1:-1;46094:122:0;;;;;:::i;:::-;;:::i;8665:27::-;;;;;;;;;;;;;;;;8298:45;;;;;;;;;;-1:-1:-1;8298:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8803:46;;;;;;;;;;-1:-1:-1;8803:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;8144;;;;;;;;;;-1:-1:-1;8144:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9067:24;;;;;;;;;;-1:-1:-1;9067:24:0;;;;-1:-1:-1;;;;;9067:24:0;;;41653:27;;;;;;;;;;;;;;;;21501:95;;;;;;;;;;-1:-1:-1;21501:95:0;;;;;:::i;:::-;;:::i;8477:47::-;;;;;;;;;;-1:-1:-1;8477:47:0;;;;-1:-1:-1;;;;;8477:47:0;;;16263:185;;;;;;;;;;-1:-1:-1;16263:185:0;;;;;:::i;:::-;;:::i;9028:30::-;;;;;;;;;;;;;;;;9233:27;;;;;;;;;;-1:-1:-1;9233:27:0;;;;-1:-1:-1;;;9233:27:0;;;;;;9442:43;;;;;;;;;;-1:-1:-1;9442:43:0;;;;-1:-1:-1;;;;;9442:43:0;;;41236:209;;;;;;;;;;-1:-1:-1;41236:209:0;;;;;:::i;:::-;;:::i;32414:221::-;;;;;;;;;;-1:-1:-1;32414:221:0;;;;;:::i;:::-;;:::i;43564:331::-;;;;;;;;;;-1:-1:-1;43564:331:0;;;;;:::i;:::-;;:::i;46044:41::-;;;;;;;;;;;;;;;;19946:391;;;;;;;;;;-1:-1:-1;19946:391:0;;;;;:::i;:::-;;:::i;:::-;;;;5971:25:1;;;6027:2;6012:18;;6005:34;;;;6082:14;;6075:22;6055:18;;;6048:50;;;;6141:14;6134:22;6129:2;6114:18;;6107:50;5958:3;5943:19;19946:391:0;5752:411:1;46224:45:0;;;;;;;;;;;;;;;;17772:102;;;;;;;;;;-1:-1:-1;17772:102:0;;;;;:::i;:::-;;:::i;7773:36::-;;;;;;;;;;-1:-1:-1;7773:36:0;;;;-1:-1:-1;;;;;7773:36:0;;;8003:30;;;;;;;;;;-1:-1:-1;8003:30:0;;;;;;;;44100:91;;;;;;;;;;;;;:::i;8767:27::-;;;;;;;;;;;;;;;;14620:263;;;;;;;;;;-1:-1:-1;14620:263:0;;;;;:::i;:::-;;:::i;3587:148::-;;;;;;;;;;;;;:::i;31335:398::-;;;;;;;;;;-1:-1:-1;31335:398:0;;;;;:::i;:::-;;:::i;20345:430::-;;;;;;;;;;-1:-1:-1;20345:430:0;;;;;:::i;:::-;;:::i;17154:344::-;;;;;;;;;;-1:-1:-1;17154:344:0;;;;;:::i;:::-;;:::i;33287:161::-;;;;;;;;;;-1:-1:-1;33287:161:0;;;;;:::i;:::-;;:::i;42068:79::-;;;;;;;;;;;;;:::i;44542:107::-;;;;;;;;;;-1:-1:-1;44542:107:0;;;;;:::i;:::-;;:::i;9003:18::-;;;;;;;;;;-1:-1:-1;9003:18:0;;;;;;;-1:-1:-1;;;;;9003:18:0;;;41022:206;;;;;;;;;;-1:-1:-1;41022:206:0;;;;;:::i;:::-;;:::i;17732:31::-;;;;;;;;;;;;;;;;8429:41;;;;;;;;;;-1:-1:-1;8429:41:0;;;;;;;-1:-1:-1;;;;;8429:41:0;;;7930:27;;;;;;;;;;;;;;;;37335:44;;;;;;;;;;;;;;;;16054:125;;;;;;;;;;-1:-1:-1;16054:125:0;;;;;:::i;:::-;;:::i;43903:94::-;;;;;;;;;;;;;:::i;3401:79::-;;;;;;;;;;-1:-1:-1;3439:7:0;3466:6;-1:-1:-1;;;;;3466:6:0;3401:79;;37161:37;;;;;;;;;;-1:-1:-1;37161:37:0;;;;-1:-1:-1;;;;;37161:37:0;;;33124:155;;;;;;;;;;-1:-1:-1;33124:155:0;;;;;:::i;:::-;;:::i;17506:38::-;;;;;;;;;;;;;;;;14085:98;;;;;;;;;;;;;:::i;8856:24::-;;;;;;;;;;;;;;;;23727:86;;;;;;;;;;;;;:::i;41689:137::-;;;;;;;;;;;;;:::i;9408:27::-;;;;;;;;;;-1:-1:-1;9408:27:0;;;;;:::i;:::-;;:::i;9302:::-;;;;;;;;;;-1:-1:-1;9302:27:0;;;;-1:-1:-1;;;9302:27:0;;;;;;31242:29;;;;;;;;;;;;;;;;19805:133;;;;;;;;;;-1:-1:-1;19805:133:0;;;;;:::i;:::-;;:::i;21604:34::-;;;;;;;;;;;;;;;;44294:118;;;;;;;;;;-1:-1:-1;44294:118:0;;;;;:::i;:::-;;:::i;14891:190::-;;;;;;;;;;-1:-1:-1;14891:190:0;;;;;:::i;:::-;;:::i;7966:30::-;;;;;;;;;;;;;;;;42836:720;;;;;;;;;;-1:-1:-1;42836:720:0;;;;;:::i;:::-;;:::i;33004:26::-;;;;;;;;;;;;;;;;8699:25;;;;;;;;;;;;;;;;9267:28;;;;;;;;;;-1:-1:-1;9267:28:0;;;;-1:-1:-1;;;9267:28:0;;;;;;8566:24;;;;;;;;;;;;;;;;33456:172;;;;;;;;;;-1:-1:-1;33456:172:0;;;;;:::i;:::-;;:::i;8094:43::-;;;;;;;;;;-1:-1:-1;8094:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42386:442;;;;;;;;;;-1:-1:-1;42386:442:0;;;;;:::i;:::-;;:::i;23976:119::-;;;;;;;;;;-1:-1:-1;23976:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;24062:25:0;24036:7;24062:25;;;:19;:25;;;;;;;23976:119;8731:29;;;;;;;;;;;;;;;;44769:293;;;;;;;;;;-1:-1:-1;44769:293:0;;;;;:::i;:::-;;:::i;33074:41::-;;;;;;;;;;;;;;;;44420:114;;;;;;;;;;-1:-1:-1;44420:114:0;;;;;:::i;:::-;;:::i;48263:118::-;;;;;;;;;;-1:-1:-1;48263:118:0;;;;;:::i;:::-;;:::i;23915:54::-;;;;;;;;;;-1:-1:-1;23915:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;9200:26;;;;;;;;;;-1:-1:-1;9200:26:0;;;;-1:-1:-1;;;9200:26:0;;;;;;8533;;;;;;;;;;;;;;;;23154:499;;;;;;;;;;;;;:::i;:::-;;;;10379:25:1;;;10435:2;10420:18;;10413:34;;;;10463:18;;;10456:34;10367:2;10352:18;23154:499:0;10177:319:1;32372:35:0;;;;;;;;;;;;;;;;9372:27;;;;;;;;;;-1:-1:-1;9372:27:0;;;;-1:-1:-1;;;9372:27:0;;;;;;37207:120;;;;;;;;;;-1:-1:-1;37207:120:0;;;;;:::i;:::-;;:::i;17108:37::-;;;;;;;;;;-1:-1:-1;17108:37:0;;;;;;;;15089:168;;;;;;;;;;-1:-1:-1;15089:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;15222:18:0;;;15195:7;15222:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15089:168;46276:103;;;;;;;;;;-1:-1:-1;46276:103:0;;;;;:::i;:::-;;:::i;16903:31::-;;;;;;;;;;;;;;;;8268:23;;;;;;;;;;-1:-1:-1;8268:23:0;;;;-1:-1:-1;;;;;8268:23:0;;;16943:157;;;;;;;;;;-1:-1:-1;16943:157:0;;;;;:::i;:::-;;:::i;7732:34::-;;;;;;;;;;-1:-1:-1;7732:34:0;;;;-1:-1:-1;;;;;7732:34:0;;;23819:88;;;;;;;;;;;;;:::i;14529:83::-;;;;;;;;;;-1:-1:-1;14529:83:0;;;;;:::i;:::-;;:::i;45959:36::-;;;;;;;;;;;;;;;;37565:37;;;;;;;;;;;;;;;;37115;;;;;;;;;;;;;;;;20783:498;;;;;;;;;;-1:-1:-1;20783:498:0;;;;;:::i;:::-;;:::i;3743:214::-;;;;;;;;;;-1:-1:-1;3743:214:0;;;;;:::i;:::-;;:::i;24103:277::-;;;;;;;;;;-1:-1:-1;24103:277:0;;;;;:::i;:::-;;:::i;41914:142::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;;;;;;;;;41975:15:::1;::::0;41970:20;41962:45:::1;;;::::0;-1:-1:-1;;;41962:45:0;;12459:2:1;41962:45:0::1;::::0;::::1;12441:21:1::0;12498:2;12478:18;;;12471:30;-1:-1:-1;;;12517:18:1;;;12510:42;12569:18;;41962:45:0::1;12257:336:1::0;41962:45:0::1;42036:12;42018:15;:30:::0;41914:142::o;48389:119::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48472:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;48472:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48389:119::o;17561:163::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;17645:8:::1;17657:1;17645:13:::0;17637:40:::1;;;::::0;-1:-1:-1;;;17637:40:0;;12800:2:1;17637:40:0::1;::::0;::::1;12782:21:1::0;12839:2;12819:18;;;12812:30;-1:-1:-1;;;12858:18:1;;;12851:44;12912:18;;17637:40:0::1;12598:338:1::0;17637:40:0::1;17688:17;:28:::0;17561:163::o;44005:87::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;44061:15:::1;:23:::0;;-1:-1:-1;;;;44061:23:0::1;::::0;;44005:87::o;14191:94::-;14239:13;14272:5;14265:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14191:94;:::o;16497:97::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;16564:13:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;16564:22:0::1;-1:-1:-1::0;;;;16564:22:0;;::::1;::::0;;;::::1;::::0;;16497:97::o;15265:184::-;15365:4;15382:37;15391:10;15403:7;15412:6;15382:8;:37::i;:::-;-1:-1:-1;15437:4:0;15265:184;;;;;:::o;37609:155::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;37703:3:::1;37691:8;:15;;37683:35;;;::::0;-1:-1:-1;;;37683:35:0;;13528:2:1;37683:35:0::1;::::0;::::1;13510:21:1::0;13567:1;13547:18;;;13540:29;-1:-1:-1;;;13585:18:1;;;13578:38;13633:18;;37683:35:0::1;13326:331:1::0;37683:35:0::1;37729:16;:27:::0;37609:155::o;44199:87::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;44255:15:::1;:23:::0;;-1:-1:-1;;;;44255:23:0::1;::::0;;44199:87::o;16187:68::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;16241:2:::1;:6:::0;16187:68::o;42155:223::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;42276:9:::1;42271:100;42291:15:::0;;::::1;42271:100;;;42353:6;42328:13;:22;42342:4;;42347:1;42342:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42328:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;42328:22:0;:31;;-1:-1:-1;;42328:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;42308:3:0::1;42271:100;;;;42155:223:::0;;;:::o;41834:72::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;41897:1:::1;41882:12;:16:::0;41834:72::o;45232:266::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;45318:9:::1;45313:178;45329:19:::0;;::::1;45313:178;;;45384:9;::::0;45420:1:::1;::::0;-1:-1:-1;;;;;45384:9:0::1;45374:30;45405:8:::0;;45414:1;45405:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;45374:43;::::0;-1:-1:-1;;;;;;45374:43:0::1;::::0;;;;;;-1:-1:-1;;;;;4265:32:1;;;45374:43:0::1;::::0;::::1;4247:51:1::0;4220:18;;45374:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;45370:110;;;45442:22;45452:8;;45461:1;45452:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;45442:9;:22::i;:::-;45350:3;;45313:178;;;;45232:266:::0;;:::o;21340:115::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21420:18:0;;;::::1;;::::0;;;:12:::1;:18;::::0;;;;:27;;-1:-1:-1;;21420:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21340:115::o;15457:404::-;15589:4;15606:36;15616:6;15624:9;15635:6;15606:9;:36::i;:::-;-1:-1:-1;;;;;15657:19:0;;8420:1;15657:19;;;:11;:19;;;;;;;;15677:10;15657:31;;;;;;;;-1:-1:-1;;15657:38:0;15653:179;;-1:-1:-1;;;;;15763:19:0;;;;;;:11;:19;;;;;;;;15783:10;15763:31;;;;;;;;:57;;15814:6;;15763:57;:::i;:::-;-1:-1:-1;;;;;15712:19:0;;;;;;:11;:19;;;;;;;;15732:10;15712:31;;;;;;;:108;15653:179;-1:-1:-1;15849:4:0;15457:404;;;;;:::o;37386:171::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;37488:3:::1;37476:8;:15;;37468:35;;;::::0;-1:-1:-1;;;37468:35:0;;13528:2:1;37468:35:0::1;::::0;::::1;13510:21:1::0;13567:1;13547:18;;;13540:29;-1:-1:-1;;;13585:18:1;;;13578:38;13633:18;;37468:35:0::1;13326:331:1::0;37468:35:0::1;37514:24;:35:::0;37386:171::o;21645:127::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;21738:15:::1;:26:::0;21645:127::o;46094:122::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;46175:22:::1;:33:::0;46094:122::o;21501:95::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;21567:12:::1;:21:::0;;-1:-1:-1;;21567:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21501:95::o;16263:185::-;-1:-1:-1;;;;;16343:20:0;;16319:7;16343:20;;;:11;:20;;;;;;;;16339:102;;;-1:-1:-1;16387:1:0;;16263:185;-1:-1:-1;16263:185:0:o;16339:102::-;-1:-1:-1;16428:1:0;;16263:185;-1:-1:-1;16263:185:0:o;16339:102::-;16263:185;;;:::o;41236:209::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;41581:18;;41628:8;;;41313:56:::1;;;::::0;-1:-1:-1;;;41313:56:0;;14496:2:1;41313:56:0::1;::::0;::::1;14478:21:1::0;14535:2;14515:18;;;14508:30;14574:28;14554:18;;;14547:56;14620:18;;41313:56:0::1;14294:350:1::0;41313:56:0::1;41380:13;:20:::0;;-1:-1:-1;;;;;41380:20:0;;::::1;-1:-1:-1::0;;;;;;41380:20:0;;::::1;::::0;::::1;::::0;;:13:::1;41411:19:::0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;41411:26:0::1;41380:20:::0;41411:26:::1;::::0;;41236:209::o;32414:221::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;32518:6:::1;32506:8;:18;;:41;;;;;32540:7;32528:8;:19;;32506:41;32484:110;;;::::0;-1:-1:-1;;;32484:110:0;;14851:2:1;32484:110:0::1;::::0;::::1;14833:21:1::0;14890:2;14870:18;;;14863:30;-1:-1:-1;;;14909:18:1;;;14902:49;14968:18;;32484:110:0::1;14649:343:1::0;32484:110:0::1;32605:11;:22:::0;32414:221::o;43564:331::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;43689:16:::1;::::0;-1:-1:-1;;;43689:16:0;::::1;;;43681:48;;;::::0;-1:-1:-1;;;43681:48:0;;15199:2:1;43681:48:0::1;::::0;::::1;15181:21:1::0;15238:2;15218:18;;;15211:30;-1:-1:-1;;;15257:18:1;;;15250:49;15316:18;;43681:48:0::1;14997:343:1::0;43681:48:0::1;43790:9;43785:103;43801:20:::0;;::::1;43785:103;;;43871:5;43843:11;:25;43855:9;;43865:1;43855:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43843:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43843:25:0;:33;;-1:-1:-1;;43843:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;43823:3:0::1;43785:103;;19946:391:::0;-1:-1:-1;;;;;20108:18:0;;;20015:16;20108:18;;;:9;:18;;;;;;:27;20165:9;;20158:36;;-1:-1:-1;;;20158:36:0;;;;;4247:51:1;;;;20108:27:0;20015:16;;;;;;20165:9;;20158:27;;4220:18:1;;20158:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20217:22:0;;;;;;;:13;:22;;;;;;;;;20278:9;:18;;;;;;20217:22;20315:14;;19946:391;;20217:22;;;;;20315:14;;;;-1:-1:-1;19946:391:0;-1:-1:-1;;19946:391:0:o;17772:102::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;17843:12:::1;:23:::0;17772:102::o;44100:91::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;44158:17:::1;:25:::0;;-1:-1:-1;;;;44158:25:0::1;::::0;;44100:91::o;14620:263::-;14721:9;;14686:7;;-1:-1:-1;;;;;14710:20:0;;;14721:9;;14710:20;:47;;;;-1:-1:-1;14748:9:0;;-1:-1:-1;;;;;14748:9:0;14734:10;:23;14710:47;:59;;;;-1:-1:-1;14761:8:0;;-1:-1:-1;;;14761:8:0;;;;14710:59;14706:134;;;14804:9;;-1:-1:-1;;;;;14804:9:0;14817:1;14794:20;;;:9;:20;;;;;;14786:42;;;;-1:-1:-1;;;14786:42:0;;15547:2:1;14786:42:0;;;15529:21:1;15586:1;15566:18;;;15559:29;-1:-1:-1;;;15604:18:1;;;15597:35;15649:18;;14786:42:0;15345:328:1;14786:42:0;-1:-1:-1;;;;;;14857:18:0;;;;;:9;:18;;;;;;;14620:263::o;3587:148::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;3694:1:::1;3678:6:::0;;3657:40:::1;::::0;-1:-1:-1;;;;;3678:6:0;;::::1;::::0;3657:40:::1;::::0;3694:1;;3657:40:::1;3725:1;3708:19:::0;;-1:-1:-1;;;;;;3708:19:0::1;::::0;;3587:148::o;31335:398::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;31512:3:::1;31500:8;:15;;31492:43;;;::::0;-1:-1:-1;;;31492:43:0;;15880:2:1;31492:43:0::1;::::0;::::1;15862:21:1::0;15919:2;15899:18;;;15892:30;-1:-1:-1;;;15938:18:1;;;15931:46;15994:18;;31492:43:0::1;15678:340:1::0;31492:43:0::1;31577:4;31554:19;:27;;31546:58;;;::::0;-1:-1:-1;;;31546:58:0;;16225:2:1;31546:58:0::1;::::0;::::1;16207:21:1::0;16264:2;16244:18;;;16237:30;-1:-1:-1;;;16283:18:1;;;16276:49;16342:18;;31546:58:0::1;16023:343:1::0;31546:58:0::1;31615:15;:37:::0;;;;31663:16:::1;:27:::0;31701:13:::1;:24:::0;;-1:-1:-1;;31701:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31335:398::o;20345:430::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;20455:15;;20441:11:::1;::::0;20517:251:::1;20537:3;20533:1;:7;20517:251;;;20569:9;:22;20579:8;20588:1;20579:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20569:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20569:22:0;20606:28;;;20666:4:::1;20649:14:::0;;::::1;:21:::0;;-1:-1:-1;;20649:21:0::1;::::0;;::::1;::::0;;20695:11;;20569:22;;-1:-1:-1;20685:22:0::1;::::0;20695:8;;20704:1;;20695:11;::::1;;;;;:::i;:::-;;;;;;;20685:9;:22::i;:::-;20742:3;;20517:251;;;;20430:345;;20345:430:::0;;:::o;17154:344::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;17269:6:::1;17265:226;;;17419:12;;17385:14;;17355:10;;17323:12;;:42;;;;:::i;:::-;:76;;;;:::i;:::-;:108;;;;:::i;:::-;17292:11;:139:::0;17154:344;:::o;17265:226::-:1;17478:1;17464:11;:15:::0;17265:226:::1;17154:344:::0;:::o;33287:161::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;33381:4:::1;33369:8;:16;;33361:42;;;::::0;-1:-1:-1;;;33361:42:0;;16703:2:1;33361:42:0::1;::::0;::::1;16685:21:1::0;16742:2;16722:18;;;16715:30;-1:-1:-1;;;16761:18:1;;;16754:43;16814:18;;33361:42:0::1;16501:337:1::0;33361:42:0::1;33414:15;:26:::0;33287:161::o;42068:79::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;42138:1:::1;42120:15;:19:::0;42068:79::o;44542:107::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;44616:15:::1;:25:::0;44542:107::o;41022:206::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;41581:18;;41628:8;;;41098:56:::1;;;::::0;-1:-1:-1;;;41098:56:0;;14496:2:1;41098:56:0::1;::::0;::::1;14478:21:1::0;14535:2;14515:18;;;14508:30;14574:28;14554:18;;;14547:56;14620:18;;41098:56:0::1;14294:350:1::0;41098:56:0::1;41165:11;:18:::0;;-1:-1:-1;;;;;41165:18:0;;::::1;-1:-1:-1::0;;;;;;41165:18:0;;::::1;::::0;::::1;::::0;;:11:::1;41194:19:::0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;41194:26:0::1;41165:18:::0;41194:26:::1;::::0;;41022:206::o;16054:125::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16140:22:0;;;::::1;;::::0;;;:14:::1;:22;::::0;;;;:31;;-1:-1:-1;;16140:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16054:125::o;43903:94::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;43962:19:::1;:27:::0;;-1:-1:-1;;43962:27:0::1;::::0;;43903:94::o;33124:155::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;33214:4:::1;33202:8;:16;;33194:44;;;::::0;-1:-1:-1;;;33194:44:0;;17045:2:1;33194:44:0::1;::::0;::::1;17027:21:1::0;17084:2;17064:18;;;17057:30;-1:-1:-1;;;17103:18:1;;;17096:45;17158:18;;33194:44:0::1;16843:339:1::0;33194:44:0::1;33249:11;:22:::0;33124:155::o;14085:98::-;14135:13;14168:7;14161:14;;;;;:::i;23727:86::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;23784:14:::1;:21:::0;;-1:-1:-1;;23784:21:0::1;23801:4;23784:21;::::0;;23727:86::o;41689:137::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;41751:12:::1;::::0;41746:17;41738:42:::1;;;::::0;-1:-1:-1;;;41738:42:0;;17389:2:1;41738:42:0::1;::::0;::::1;17371:21:1::0;17428:2;17408:18;;;17401:30;-1:-1:-1;;;17447:18:1;;;17440:42;17499:18;;41738:42:0::1;17187:336:1::0;41738:42:0::1;41806:12;41791;:27:::0;41689:137::o;9408:27::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9408:27:0;;-1:-1:-1;9408:27:0;:::o;19805:133::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19892:18:0;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:38;19805:133::o;44294:118::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44376:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;44376:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44294:118::o;14891:190::-;14994:4;15011:40;15021:10;15033:9;15044:6;15011:9;:40::i;42836:720::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;42927:15:::1;::::0;-1:-1:-1;;;42927:15:0;::::1;;;42919:47;;;::::0;-1:-1:-1;;;42919:47:0;;17730:2:1;42919:47:0::1;::::0;::::1;17712:21:1::0;17769:2;17749:18;;;17742:30;-1:-1:-1;;;17788:18:1;;;17781:49;17847:18;;42919:47:0::1;17528:343:1::0;42919:47:0::1;42991:7;;42999:1;42991:10;;;;;;;:::i;:::-;;;::::0;;;::::1;;42977:11;:24:::0;-1:-1:-1;43024:7:0;;43032:1:::1;43024:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;43012:9;:22:::0;-1:-1:-1;43061:7:0;;43069:1:::1;43061:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;43045:13;:26:::0;-1:-1:-1;43096:7:0;;43104:1:::1;43096:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;43082:11;:24:::0;-1:-1:-1;43134:7:0;;43142:1:::1;43134:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;43119:12;:25:::0;-1:-1:-1;43168:7:0;;43176:1:::1;43168:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;43155;:23:::0;-1:-1:-1;43206:7:0;;43214:1:::1;43206:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;43189:14;:27:::0;-1:-1:-1;43242:7:0;;43250:1:::1;43242:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;43227:12;:25:::0;-1:-1:-1;;;42836:720:0:o;33456:172::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;33591:18:::1;:29:::0;33456:172::o;42386:442::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;42613:11:::1;:24:::0;;;;42648:9:::1;:20:::0;;;;42679:13:::1;:28:::0;;;;42720:12:::1;:26:::0;42757:10:::1;:22:::0;42790:14:::1;:30:::0;42386:442::o;44769:293::-;44894:6;;-1:-1:-1;;;;;44894:6:0;44904:10;44894:20;;:49;;-1:-1:-1;44918:11:0;;-1:-1:-1;;;;;44918:11:0;44933:10;44918:25;44894:49;44886:69;;;;-1:-1:-1;;;44886:69:0;;18078:2:1;44886:69:0;;;18060:21:1;18117:1;18097:18;;;18090:29;-1:-1:-1;;;18135:18:1;;;18128:37;18182:18;;44886:69:0;17876:330:1;44886:69:0;44966:34;;-1:-1:-1;;;44966:34:0;;-1:-1:-1;;;;;18403:32:1;;;44966:34:0;;;18385:51:1;18452:18;;;18445:34;;;44966:22:0;;;;;18358:18:1;;44966:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;45011:11:0;;:43;;-1:-1:-1;;;;;45011:11:0;;;;45032:21;45011:43;;;;;:11;:43;:11;:43;45032:21;45011:11;:43;;;;;;;;;;;;;;;;;;;44420:114;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;44498:12:::1;:28:::0;44420:114::o;48263:118::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;48343:21:::1;:30:::0;48263:118::o;23154:499::-;23199:14;23215:13;23230:20;23263:18;23294:9;;;;;;;;;-1:-1:-1;;;;;23294:9:0;23263:41;;23316:7;23325:10;23340:8;-1:-1:-1;;;;;23340:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23396:8:0;;-1:-1:-1;;;;;23315:47:0;;;;-1:-1:-1;23315:47:0;;;-1:-1:-1;;;;;;23396:8:0;23440:4;23419:26;;23415:164;;;23471:2;23462:11;;23496:2;23488:10;;23415:164;;;23540:2;23531:11;;23565:2;23557:10;;23415:164;23635:9;;23606:39;;-1:-1:-1;;;23606:39:0;;-1:-1:-1;;;;;23635:9:0;;;23606:39;;;4247:51:1;23606:28:0;;;;;;4220:18:1;;23606:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23591:54;;23252:401;;;;23154:499;;;:::o;37207:120::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;37287:22:::1;:32:::0;;-1:-1:-1;;;;;;37287:32:0::1;-1:-1:-1::0;;;;;37287:32:0;;;::::1;::::0;;;::::1;::::0;;37207:120::o;46276:103::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;46347:13:::1;:24:::0;46276:103::o;16943:157::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;17034:1:::1;17022:8;:13;;17014:44;;;::::0;-1:-1:-1;;;17014:44:0;;19590:2:1;17014:44:0::1;::::0;::::1;19572:21:1::0;19629:2;19609:18;;;19602:30;-1:-1:-1;;;19648:18:1;;;19641:48;19706:18;;17014:44:0::1;19388:342:1::0;17014:44:0::1;17069:12;:23:::0;16943:157::o;23819:88::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;23877:14:::1;:22:::0;;-1:-1:-1;;23877:22:0::1;::::0;;23819:88::o;14529:83::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;14592:8:::1;:12:::0;;;::::1;;-1:-1:-1::0;;;14592:12:0::1;-1:-1:-1::0;;;;14592:12:0;;::::1;::::0;;;::::1;::::0;;14529:83::o;20783:498::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;20880:15;;20937:9:::1;::::0;-1:-1:-1;;;;;20937:9:0::1;20866:11;::::0;20996:278:::1;21016:3;21012:1;:7;20996:278;;;21048:9;:22;21058:8;21067:1;21058:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21048:22:0::1;-1:-1:-1::0;;;;;21048:22:0::1;;;;;;;;;;;;21037:33;;21105:8;-1:-1:-1::0;;;;;21105:18:0::1;;21124:8;21133:1;21124:11;;;;;;;;:::i;:::-;;;;;;;21105:31;;;;;;;;;;;;;;-1:-1:-1::0;;;;;4265:32:1;;;;4247:51;;4235:2;4220:18;;4082:222;21105:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;::::0;21139:1:::1;21105:35;:::i;:::-;21085:55:::0;;21172:4:::1;21155:14:::0;;::::1;:21:::0;;-1:-1:-1;;21155:21:0::1;::::0;;::::1;::::0;;21201:11;;21191:22:::1;::::0;21201:8;;21210:1;;21201:11;::::1;;;;;:::i;21191:22::-;21248:3;;20996:278;;3743:214:::0;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3832:22:0;::::1;3824:43;;;::::0;-1:-1:-1;;;3824:43:0;;19937:2:1;3824:43:0::1;::::0;::::1;19919:21:1::0;19976:1;19956:18;;;19949:29;-1:-1:-1;;;19994:18:1;;;19987:38;20042:18;;3824:43:0::1;19735:331:1::0;3824:43:0::1;3904:6;::::0;;3883:38:::1;::::0;-1:-1:-1;;;;;3883:38:0;;::::1;::::0;3904:6;::::1;::::0;3883:38:::1;::::0;::::1;3932:6;:17:::0;;-1:-1:-1;;;;;;3932:17:0::1;-1:-1:-1::0;;;;;3932:17:0;;;::::1;::::0;;;::::1;::::0;;3743:214::o;24103:277::-;3528:6;;-1:-1:-1;;;;;3528:6:0;3538:10;3528:20;3520:39;;;;-1:-1:-1;;;3520:39:0;;;;;;;:::i;:::-;24249:6:::1;24244:129;24257:19:::0;;::::1;24244:129;;;24352:9;24358:3:::0;24352:2:::1;:9;:::i;:::-;24343:18;::::0;:6;:18:::1;:::i;:::-;24308:19;:32;24328:8;;24337:1;24328:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24308:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;24308:32:0;:53;24278:3:::1;;24244:129;;15869:177:::0;-1:-1:-1;;;;;15954:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16006:32;;2289:25:1;;;16006:32:0;;2262:18:1;16006:32:0;;;;;;;;15869:177;;;:::o;45506:410::-;45612:16;;45653:8;;45649:47;;45678:7;45506:410;:::o;45649:47::-;-1:-1:-1;;;;;45715:16:0;;;;;;:11;:16;;;;;;45710:21;;45706:203;;45757:7;:14;45752:19;;:40;;;45789:3;-1:-1:-1;;;;;45775:17:0;:7;45783:1;45775:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;45775:10:0;:17;;45752:40;45748:150;;;45832:7;:14;;-1:-1:-1;;;;;45813:16:0;;;;;;:11;:16;;;;;:33;;;45865:17;;;;;;;;;;;;;-1:-1:-1;;;;;;45865:17:0;;;;;;45748:150;45546:370;45506:410;:::o;24388:6641::-;-1:-1:-1;;;;;24486:15:0;;24468;24486;;;:9;:15;;;;;;24520:17;;;;24512:46;;;;-1:-1:-1;;;24512:46:0;;21869:2:1;24512:46:0;;;21851:21:1;21908:2;21888:18;;;21881:30;-1:-1:-1;;;21927:18:1;;;21920:46;21983:18;;24512:46:0;21667:340:1;24512:46:0;24592:1;24575:14;24584:4;24575:8;:14::i;:::-;:18;24571:83;;;24610:32;;-1:-1:-1;;;24610:32:0;;22214:2:1;24610:32:0;;;22196:21:1;22253:2;22233:18;;;22226:30;-1:-1:-1;;;22272:18:1;;;22265:44;22326:18;;24610:32:0;22012:338:1;24610:32:0;24670:6;;;;24666:92;;;24693:32;24708:4;24714:2;24718:6;24693:14;:32::i;24666:92::-;-1:-1:-1;;;;;24789:19:0;;;;;;:13;:19;;;;;;;;24788:20;:55;;;;-1:-1:-1;;;;;;24826:17:0;;;;;;:13;:17;;;;;;;;24825:18;24788:55;:85;;;;-1:-1:-1;24860:13:0;;-1:-1:-1;;;24860:13:0;;;;24788:85;:118;;;;;24905:1;24890:12;;:16;24788:118;:177;;;;-1:-1:-1;;;;;;24924:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;24947:17:0;;;;;;:13;:17;;;;;;;;24924:40;24770:338;;;25015:6;24996:15;25006:4;24996:9;:15::i;:::-;:25;24992:91;;25051:12;;:16;;25066:1;25051:16;:::i;:::-;25041:26;;;;:::i;:::-;;;24992:91;25126:14;;-1:-1:-1;;;25126:14:0;;;;:38;;;;-1:-1:-1;25144:15:0;;:20;25126:38;:62;;;;-1:-1:-1;;;;;;25169:19:0;;;;;;:13;:19;;;;;;;;25168:20;25126:62;:84;;;;-1:-1:-1;;;;;;25193:17:0;;;;;;:13;:17;;;;;;;;25192:18;25126:84;25122:399;;;-1:-1:-1;;;;;25233:17:0;;;;;;:13;:17;;;;;;;;25228:177;;25278:14;;;;25270:38;;;;-1:-1:-1;;;25270:38:0;;22557:2:1;25270:38:0;;;22539:21:1;22596:2;22576:18;;;22569:30;-1:-1:-1;;;22615:18:1;;;22608:42;22667:18;;25270:38:0;22355:336:1;25270:38:0;-1:-1:-1;;;;;24062:25:0;;24036:7;24062:25;;;:19;:25;;;;;;25351:6;25335:13;25345:2;25335:9;:13::i;:::-;:22;;;;:::i;:::-;:46;;25327:62;;;;-1:-1:-1;;;25327:62:0;;;;;;22898:2:1;22880:21;;;22937:1;22917:18;;;22910:29;-1:-1:-1;;;22970:2:1;22955:18;;22948:34;23014:2;22999:18;;22696:327;25327:62:0;-1:-1:-1;;;;;25425:17:0;;;;;;:13;:17;;;;;;;;25421:87;;;25462:30;;-1:-1:-1;;;25462:30:0;;23230:2:1;25462:30:0;;;23212:21:1;23269:2;23249:18;;;23242:30;-1:-1:-1;;;23288:18:1;;;23281:43;23341:18;;25462:30:0;23028:337:1;25462:30:0;25537:15;;:20;:38;;;;-1:-1:-1;25561:14:0;;-1:-1:-1;;;25561:14:0;;;;25537:38;25533:327;;;-1:-1:-1;;;;;25615:19:0;;;;;;:13;:19;;;;;;;;25614:20;:59;;;;-1:-1:-1;;;;;;25656:17:0;;;;;;:13;:17;;;;;;;;25655:18;25614:59;:100;;;;-1:-1:-1;;;;;;25695:19:0;;;;;;:13;:19;;;;;;;;25694:20;25614:100;:139;;;;-1:-1:-1;;;;;;25736:17:0;;;;;;:13;:17;;;;;;;;25735:18;25614:139;25592:257;;;41581:18;;41628:8;;;25788:45;;;;-1:-1:-1;;;25788:45:0;;23572:2:1;25788:45:0;;;23554:21:1;23611:2;23591:18;;;23584:30;-1:-1:-1;;;23630:18:1;;;23623:47;23687:18;;25788:45:0;23370:341:1;25788:45:0;-1:-1:-1;;;;;26079:17:0;;25872:12;26079:17;;;:13;:17;;;;;;25872:12;;;;;;;;;;;;26079:17;;:58;;;;-1:-1:-1;26126:10:0;26113:24;;;;:12;:24;;;;;;;;26079:58;26061:468;;;26181:23;26197:6;26181:15;:23::i;:::-;26164:40;;26240:1;26223:14;:18;:39;;;;-1:-1:-1;41628:8:0;41581:18;;41628:8;;26223:39;26219:299;;;-1:-1:-1;;;;;26294:15:0;;;;;;:9;:15;;;;;26328:35;;26294:15;;-1:-1:-1;26349:14:0;;26294:15;;26328:35;;26349:14;;26328:35;:::i;:::-;;;;-1:-1:-1;;26422:15:0;;26390:4;;-1:-1:-1;26417:1:0;:20;26413:90;;26479:4;26462:14;;;:21;;-1:-1:-1;;26462:21:0;;;;;;26413:90;-1:-1:-1;;;;;26602:19:0;;26549:25;26602:19;;;:13;:19;;;;;;;;26585:646;;;26651:12;;;;26647:345;;;26704:23;26720:6;26704:15;:23::i;:::-;26684:43;;26647:345;;;26772:15;;26791:1;26772:20;26768:209;;26836:26;26855:6;26836:18;:26::i;26768:209::-;26929:28;26950:6;26929:20;:28::i;:::-;26909:48;;26768:209;27012:21;;27008:210;;-1:-1:-1;;;;;27062:13:0;;;;;;:9;:13;;;;;:22;:43;-1:-1:-1;27062:43:0;27054:52;;;;;;-1:-1:-1;;;;;27125:13:0;;;;;;:9;:13;;;;;:43;;27151:17;;27125:13;:43;;27151:17;;27125:43;:::i;:::-;;;;-1:-1:-1;27198:4:0;;-1:-1:-1;;27008:210:0;-1:-1:-1;;;;;27247:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;27270:17:0;;;;;;:13;:17;;;;;;;;27247:40;27243:3301;;;-1:-1:-1;;;;;27309:19:0;;;;;;:13;:19;;;;;;;;27308:20;:42;;;;-1:-1:-1;;;;;;27333:17:0;;;;;;:13;:17;;;;;;;;27332:18;27308:42;27304:3144;;;27702:14;;-1:-1:-1;;;27702:14:0;;;;:54;;;;-1:-1:-1;27741:15:0;;-1:-1:-1;;;27741:15:0;;;;27702:54;:114;;;;;27814:2;;27796:15;;:20;;;;:::i;:::-;27781:12;:35;27702:114;:157;;;;-1:-1:-1;;;;;;27842:17:0;;;;;;:13;:17;;;;;;;;27841:18;27702:157;27676:324;;;-1:-1:-1;;;;;27902:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;27902:22:0;27920:4;27902:22;;;27676:324;-1:-1:-1;;;;;28602:17:0;;;;;;:13;:17;;;;;;;;28598:1760;;;28649:6;;;;28648:7;:17;;;;;28660:5;28659:6;28648:17;28644:1695;;;28743:4;28694:28;28725:24;;;:9;:24;;;;;;28803:12;;28780:35;;28776:1540;;;28878:6;:13;;-1:-1:-1;;28878:13:0;28887:4;28878:13;;;28966:9;;-1:-1:-1;;;;;28960:15:0;;;28966:9;;28960:15;:65;;;;-1:-1:-1;29012:13:0;;;;28960:65;:153;;;;;29098:15;;29081:14;;:32;;;;:::i;:::-;29062:15;:51;;28960:153;:210;;;;-1:-1:-1;;;;;;29151:19:0;;;;;;:13;:19;;;;;;;;29150:20;28960:210;28922:376;;;29237:29;:27;:29::i;:::-;;28922:376;29328:6;:14;;-1:-1:-1;;29328:14:0;;29375:13;;;29423:21;;:31;;;-1:-1:-1;;;29423:31:0;;;;-1:-1:-1;;;;;29423:21:0;;;;:29;;:31;;;;;29337:5;;29423:31;;;;;;;;29337:5;29423:21;:31;;;;;;;;;;;;;;;;;;;;;;;;;29419:133;;29504:16;;;;;;;29419:133;29582:6;:14;;-1:-1:-1;;29582:14:0;;;29886:10;;29836:14;;29788:12;;29743:9;;29694:13;;29647:11;;29591:5;;29886:10;29836:14;29788:12;29743:9;29647:60;;;:::i;:::-;:105;;;;:::i;:::-;:153;;;;:::i;:::-;:203;;;;:::i;:::-;:249;;;;:::i;:::-;29629:267;;29927:27;30021:3;30000:17;;29958:6;:59;;;;:::i;:::-;29957:67;;;;:::i;:::-;29927:97;;30081:20;30059:19;:42;30055:157;;;-1:-1:-1;30160:20:0;30055:157;30242:46;30259:19;30280:7;30242:16;:46::i;:::-;28817:1499;;28776:1540;28667:1672;28644:1695;30381:5;30380:6;:19;;;;;30391:8;30390:9;30380:19;30376:39;;;30411:4;30401:14;;30376:39;-1:-1:-1;;;;;30466:17:0;;;;;;:13;:17;;;;;;;;30462:71;;;30513:4;30504:13;;30462:71;-1:-1:-1;;;;;30561:19:0;;;;;;:13;:19;;;;;;;;30560:20;:42;;;;-1:-1:-1;;;;;;30585:17:0;;;;;;:13;:17;;;;;;;;30584:18;30560:42;30556:92;;;30632:4;30619:17;;30556:92;30660:193;30689:4;30708:2;30725:6;30746:7;30768:6;30789:10;30814:5;30834:8;30660:14;:193::i;:::-;-1:-1:-1;;;;;30870:21:0;;30886:4;30870:21;30866:156;;30912:6;30908:62;;;30939:15;30949:4;30939:9;:15::i;:::-;30984:26;30998:11;;30984:13;:26::i;:::-;24457:6572;;;;;;;;;24388:6641;;;:::o;16602:293::-;-1:-1:-1;;;;;16746:17:0;;16729:4;16746:17;;;:9;:17;;;;;:27;;16767:6;;16746:17;16729:4;;16746:27;;16767:6;;16746:27;:::i;:::-;;;;-1:-1:-1;;;;;;;16784:20:0;;;;;;:9;:20;;;;;:30;;16808:6;;16784:20;:30;;16808:6;;16784:30;:::i;:::-;;;;;;;;16847:9;-1:-1:-1;;;;;16830:35:0;16839:6;-1:-1:-1;;;;;16830:35:0;;16858:6;16830:35;;;;2289:25:1;;2277:2;2262:18;;2143:177;16830:35:0;;;;;;;;-1:-1:-1;16883:4:0;16602:293;;;;;:::o;17884:466::-;17948:17;17978:14;17994:13;18009:20;18033:14;:12;:14::i;:::-;17977:70;;;;;;18058:19;18101:1;18092:6;:10;:23;;;;;18114:1;18106:5;:9;18092:23;18088:93;;;18164:5;18146:15;18155:6;18146;:15;:::i;:::-;:23;;;;:::i;:::-;18132:37;;18088:93;18230:20;18239:11;18230:6;:20;:::i;:::-;18214:12;:36;18210:133;;18282:49;18295:12;18309:6;18317;18325:5;18282:12;:49::i;:::-;-1:-1:-1;18267:64:0;-1:-1:-1;18210:133:0;17966:384;;;;17884:466;;;:::o;21780:637::-;21844:17;21874:14;21890:13;21905:20;21929:14;:12;:14::i;:::-;21873:70;;;;;;21995:6;21980:12;:21;21976:434;;;22102:9;;-1:-1:-1;;;;;22102:9:0;22092:20;;;;:9;:20;;;;;;:29;;22115:6;;22092:29;:::i;:::-;22050:9;;;;;;;;;-1:-1:-1;;;;;22050:9:0;-1:-1:-1;;;;;22040:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22031:43;;:6;:43;:::i;:::-;22030:92;;;;:::i;:::-;22018:104;;21976:434;;;22155:19;22202:1;22193:6;:10;:23;;;;;22215:1;22207:5;:9;22193:23;22189:210;;;22270:14;22278:6;22270:5;:14;:::i;:::-;22251:15;22260:6;22251;:15;:::i;:::-;:34;;;;:::i;:::-;22237:48;-1:-1:-1;22362:20:0;22376:6;22237:48;22362:20;:::i;:::-;22346:12;:36;;22338:45;;;;;21976:434;21862:555;;;21780:637;;;:::o;22425:351::-;22492:17;22522:14;22540:20;22564:14;:12;:14::i;:::-;22521:57;;;;;22631:6;22615:12;:22;22611:158;;22737:9;;22750:6;;22727:20;;-1:-1:-1;;;;;22737:9:0;22727;:20::i;:::-;:29;;;;:::i;:::-;22685:9;;;;;;;;;-1:-1:-1;;;;;22685:9:0;-1:-1:-1;;;;;22675:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22666:43;;:6;:43;:::i;:::-;:91;;;;:::i;:::-;22654:103;;22611:158;22510:266;;22425:351;;;:::o;22784:362::-;22853:17;22883:14;22901:20;22925:14;:12;:14::i;:::-;22882:57;;;;;22992:6;22976:12;:22;22972:167;;23103:9;;23125:1;;23116:6;;23093:20;;-1:-1:-1;;;;;23103:9:0;23093;:20::i;:::-;:29;;;;:::i;:::-;:33;;;;:::i;:::-;23047:9;;;;;;;;;-1:-1:-1;;;;;23047:9:0;-1:-1:-1;;;;;23037:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23028:43;;:6;:43;:::i;:::-;:47;;23074:1;23028:47;:::i;31741:621::-;31832:15;31815:14;:32;31899:9;;31798:4;;;;31889:20;;-1:-1:-1;;;;;31899:9:0;31889;:20::i;:::-;31858:51;;31920:20;32002:5;31967:16;;31943:20;:41;;;;:::i;:::-;:75;;;;:::i;:::-;31920:98;-1:-1:-1;32033:16:0;;32029:105;;32081:9;;32066:56;;-1:-1:-1;;;;;32081:9:0;32100:6;32109:12;32066:14;:56::i;:::-;;32029:105;32171:9;;32192:11;;;-1:-1:-1;;;;;;32192:11:0;;;;-1:-1:-1;;;;;32171:9:0;;;;;;32192;;:11;;;;;32144:14;;32192:11;;;;;;;32144:14;32171:9;32192:11;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32219:113:0;;;10379:25:1;;;10435:2;10420:18;;10413:34;;;32306:15:0;10463:18:1;;;10456:34;32219:113:0;;;;-1:-1:-1;32219:113:0;;;;10367:2:1;32219:113:0;;-1:-1:-1;32219:113:0;32350:4;32343:11;;;;;31741:621;:::o;37772:3021::-;9134:6;:13;;-1:-1:-1;;9134:13:0;9143:4;9134:13;;;37896:12;;;:32:::1;;-1:-1:-1::0;37912:16:0;;37896:32:::1;37945:7;37892:71;37975:13;38004:9;;37991:10;;:22;;;;:::i;:::-;37975:38:::0;-1:-1:-1;38024:16:0::1;38071:7:::0;38067:1:::1;38044:19;37975:38:::0;38044:11;:19:::1;:::i;:::-;38043:25;;;;:::i;:::-;:35;;;;:::i;:::-;38024:54:::0;-1:-1:-1;38089:18:0::1;38120:9;38128:1;38120:5:::0;:9:::1;:::i;:::-;38110:19;::::0;:7;:19:::1;:::i;:::-;38161:8;::::0;38217:16:::1;::::0;;38231:1:::1;38217:16:::0;;;;;::::1;::::0;;38089:40;;-1:-1:-1;;;;;;38161:8:0;;::::1;::::0;38142:9:::1;::::0;38217:16;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;38217:16:0::1;38183:50;;38272:4;38244:14;38259:1;38244:17;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38244:33:0;;::::1;:17;::::0;;::::1;::::0;;;;;:33;38308:8:::1;::::0;38288:17;;38308:8;::::1;::::0;38288:14;;38308:8;;38288:17;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;38288:28:0;;::::1;:17;::::0;;::::1;::::0;;;;;:28;38344:11:::1;::::0;::::1;:65;38428:22;38442:8:::0;38428:11;:22:::1;:::i;:::-;38530:17;::::0;38344:253:::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;38344:253:0;;;::::1;::::0;;38469:1:::1;::::0;38489:14;;38530:17:::1;::::0;::::1;-1:-1:-1::0;;;;;38530:17:0::1;::::0;38567:15:::1;::::0;38344:253:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;38327:416;;38636:95;::::0;38715:1:::1;2289:25:1::0;;38636:95:0::1;::::0;2277:2:1;2262:18;38636:95:0::1;;;;;;;38327:416;38793:17;::::0;38772:40:::1;::::0;-1:-1:-1;;;38772:40:0;;-1:-1:-1;;;;;38793:17:0::1;::::0;;::::1;::::0;::::1;38772:40;::::0;::::1;4247:51:1::0;-1:-1:-1;;38772:12:0;::::1;::::0;::::1;::::0;4220:18:1;;38772:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38755:57:::0;-1:-1:-1;38827:11:0;;38823:110:::1;;38879:17;::::0;38855:66:::1;::::0;-1:-1:-1;;;38855:66:0;;38879:17:::1;::::0;;::::1;-1:-1:-1::0;;;;;38879:17:0;;::::1;38855:66;::::0;::::1;25294:51:1::0;38907:4:0::1;25361:18:1::0;;;25354:60;25430:18;;;25423:34;;;38855:15:0;::::1;::::0;::::1;::::0;25267:18:1;;38855:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38823:110;38945:18;38989:10:::0;38985:1:::1;38967:14;38976:5:::0;38967:6;:14:::1;:::i;:::-;38966:20;;;;:::i;:::-;:33;;;;:::i;:::-;38945:54;;39010:22;39090:10;39060:12;;39046:11;;:26;;;;:::i;:::-;39036:37;::::0;:6;:37:::1;:::i;:::-;39035:65;;;;:::i;:::-;39010:90;;39113:17;39169:3;39150:16;;39133:14;:33;;;;:::i;:::-;:39;;;;:::i;:::-;39113:59:::0;-1:-1:-1;39183:20:0::1;39206:26;39113:59:::0;39206:14;:26:::1;:::i;:::-;39183:49:::0;-1:-1:-1;39264:13:0;;39260:286:::1;;39294:17;39353:3;39326:24;;39314:9;:36;;;;:::i;:::-;:42;;;;:::i;:::-;39383:11;::::0;39371:35:::1;::::0;-1:-1:-1;;;39371:35:0;;-1:-1:-1;;;;;39383:11:0;;::::1;39371:35;::::0;::::1;18385:51:1::0;18452:18;;;18445:34;;;39294:62:0;;-1:-1:-1;39371:11:0;::::1;::::0;::::1;::::0;18358:18:1;;39371:35:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;39433:13:0::1;::::0;-1:-1:-1;;;;;39421:11:0;;::::1;::::0;::::1;::::0;39433:13:::1;39448:21;39460:9:::0;39448;:21:::1;:::i;:::-;39421:49;::::0;-1:-1:-1;;;;;;39421:49:0::1;::::0;;;;;;-1:-1:-1;;;;;18403:32:1;;;39421:49:0::1;::::0;::::1;18385:51:1::0;18452:18;;;18445:34;18358:18;;39421:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39525:9;39499:22;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;39260:286:0::1;39582:16:::0;;39578:104:::1;;39634:21;::::0;39614:56:::1;::::0;-1:-1:-1;;;39614:56:0;;-1:-1:-1;;;;;39634:21:0;;::::1;39614:56;::::0;::::1;18385:51:1::0;18452:18;;;18445:34;;;39614:11:0;;::::1;::::0;::::1;::::0;18358:18:1;;39614:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39578:104;39733:1;39722:8;:12;:30;;;;;39751:1;39738:10;:14;39722:30;39718:481;;;39790:11;::::0;39881:8:::1;::::0;40025:22:::1;::::0;39790:314:::1;::::0;-1:-1:-1;;;39790:314:0;;39845:4:::1;39790:314;::::0;::::1;26114:51:1::0;-1:-1:-1;;;;;39881:8:0;;::::1;26181:18:1::0;;;26174:60;26250:18;;;26243:34;;;26293:18;;;26286:34;;;39790:11:0::1;26336:19:1::0;;;26329:35;;;26380:19;;;26373:35;40025:22:0;;::::1;26424:19:1::0;;;26417:61;40070:15:0::1;26494:19:1::0;;;26487:35;39790:11:0;::::1;::::0;:24:::1;::::0;26086:19:1;;39790:314:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;39790:314:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;39790:314:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;39769:419;;40151:21;::::0;::::1;::::0;;;::::1;39769:419;;;;;;;40250:14;;40234:13;;:30;;;;:::i;:::-;40268:1;40234:35:::0;40230:74:::1;;40286:7;;;;;;;;;;;;40230:74;40327:8;::::0;40320:3:::1;::::0;-1:-1:-1;;;;;40327:8:0;;::::1;;40320:3:::0;;::::1;::::0;;::::1;:15:::0;40316:54:::1;;40352:7;;;;;;;;;;;;40316:54;40399:11;::::0;40483:27:::1;::::0;-1:-1:-1;;;40483:27:0;;40504:4:::1;40483:27;::::0;::::1;4247:51:1::0;-1:-1:-1;;;;;40399:11:0;;::::1;::::0;:65:::1;::::0;40483:12;;::::1;::::0;::::1;::::0;4220:18:1;;40483:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40529:1;40549:10;40586:4;40610:15;40399:241;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;40382:404;;40679:95;::::0;40758:1:::1;2289:25:1::0;;40679:95:0::1;::::0;2277:2:1;2262:18;40679:95:0::1;;;;;;;40382:404;37881:2912;;;;;;;;;;9158:1;-1:-1:-1::0;;9170:6:0;:14;;-1:-1:-1;;9170:14:0;;;37772:3021::o;33636:3219::-;-1:-1:-1;;;;;33901:17:0;;;;;;:9;:17;;;;;;:27;;33921:7;;33901:27;:::i;:::-;-1:-1:-1;;;;;33881:17:0;;;;;;:9;:17;;;;;:47;;;;33969:1054;;;;33997:15;34031:6;34027:326;;;34100:10;;34083:14;;34068:12;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;34058:52;;34027:326;;;34187:13;;34175:9;;34161:11;;:23;;;;:::i;:::-;:39;;;;:::i;:::-;34223:15;;34151:49;;-1:-1:-1;;;;34223:15:0;;;;34219:119;;;34282:12;;34271:7;:23;;34263:55;;;;-1:-1:-1;;;34263:55:0;;28373:2:1;34263:55:0;;;28355:21:1;28412:2;28392:18;;;28385:30;-1:-1:-1;;;28431:18:1;;;28424:49;28490:18;;34263:55:0;28171:343:1;34263:55:0;34369:18;34412:5;34391:17;34401:7;34391;:17;:::i;:::-;34390:27;;;;:::i;:::-;34369:48;-1:-1:-1;34436:14:0;;34432:145;;34471:23;34484:10;34471:23;;:::i;:::-;;;34513:48;34527:6;34543:4;34550:10;34513:13;:48::i;:::-;34593:18;34631:6;34626:225;;34720:5;34705:11;;34695:7;:21;;;;:::i;:::-;34694:31;;;;:::i;:::-;34681:44;;34626:225;;;34830:5;34814:12;;34804:7;:22;;;;:::i;:::-;34803:32;;;;:::i;:::-;34790:45;;34626:225;34869:14;;34865:147;;34904:23;34917:10;34904:23;;:::i;:::-;;;34946:50;34960:6;34976;34985:10;34946:13;:50::i;:::-;33982:1041;;;33969:1054;35039:10;:36;;;;-1:-1:-1;;;;;;35054:21:0;;;;;;:13;:21;;;;;;;;35053:22;35039:36;:65;;;;-1:-1:-1;;;;;;35080:24:0;;;;;;:13;:24;;;;;;;;35079:25;35039:65;35035:371;;;35121:25;35207:5;35192:11;;35182:7;:21;;;;:::i;:::-;35181:31;;;;:::i;:::-;35161:51;-1:-1:-1;35233:21:0;;35229:166;;35275:30;35288:17;35275:30;;:::i;:::-;;;35324:55;35338:6;35354:4;35361:17;35324:13;:55::i;:::-;35106:300;35035:371;35422:5;:31;;;;-1:-1:-1;;;;;;35432:21:0;;;;;;:13;:21;;;;;;;;35431:22;35422:31;:60;;;;-1:-1:-1;;;;;;35458:24:0;;;;;;:13;:24;;;;;;;;35457:25;35422:60;35418:390;;;35499:29;35597:5;35578:15;;35568:7;:25;;;;:::i;:::-;35567:35;;;;:::i;:::-;35543:59;-1:-1:-1;35623:25:0;;35619:178;;35669:34;35682:21;35669:34;;:::i;:::-;;;35722:59;35736:6;35752:4;35759:21;35722:13;:59::i;:::-;35484:324;35418:390;35824:8;:34;;;;-1:-1:-1;;;;;;35837:21:0;;;;;;:13;:21;;;;;;;;35836:22;35824:34;:63;;;;-1:-1:-1;;;;;;35863:24:0;;;;;;:13;:24;;;;;;;;35862:25;35824:63;35820:739;;;-1:-1:-1;;;;;35908:20:0;;;;;;:9;:20;;;;;:26;;;;;35904:644;;;36097:32;36208:5;36186:18;;36176:7;:28;;;;:::i;:::-;36175:38;;;;:::i;:::-;36148:65;-1:-1:-1;36238:28:0;;36234:299;;36291:37;36304:24;36291:37;;:::i;:::-;;;36351:162;36391:6;36432;36466:24;36351:13;:162::i;:::-;35936:612;35904:644;-1:-1:-1;;;;;36576:25:0;;;;;;:14;:25;;;;;;;;36575:26;:47;;;;-1:-1:-1;36605:17:0;;-1:-1:-1;;;36605:17:0;;;;36575:47;36571:212;;;36711:15;;-1:-1:-1;;;;;36664:20:0;;;;;;:9;:20;;;;;;36697:9;;36664:30;;36687:7;;36664:30;:::i;:::-;:42;;;;:::i;:::-;36663:63;;36637:146;;;;-1:-1:-1;;;36637:146:0;;28721:2:1;36637:146:0;;;28703:21:1;28760:2;28740:18;;;28733:30;-1:-1:-1;;;28779:18:1;;;28772:51;28840:18;;36637:146:0;28519:345:1;36637:146:0;36794:53;36808:6;36816:9;36827:19;36837:9;36827:7;:19;:::i;:::-;36794:13;:53::i;:::-;33870:2985;33636:3219;;;;;;;;:::o;46405:1850::-;46511:12;46486:22;;46464:19;;:44;;;;:::i;:::-;:59;46460:98;;;46405:1850;:::o;46460:98::-;46591:3;;46626:29;;-1:-1:-1;;;46626:29:0;;46649:4;46626:29;;;4247:51:1;46591:3:0;;;;-1:-1:-1;;;;;46591:3:0;;46570:11;;46591:3;;46626:14;;4220:18:1;;46626:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46608:47;;46680:21;;46670:7;:31;46666:70;;;46718:7;;46405:1850;:::o;46666:70::-;46927:9;;46973:23;;;-1:-1:-1;;;46973:23:0;;;;-1:-1:-1;;;;;46927:9:0;;;;46901:16;;46927:9;;46973:21;;:23;;;;;;;;;;;;;;;46927:9;46973:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47124:7;:14;46948:48;;-1:-1:-1;47009:19:0;;;;;;;;;47232:9;47262:29;;-1:-1:-1;;;47262:29:0;;47285:4;47262:29;;;4247:51:1;47214:27:0;;-1:-1:-1;;;;;;47262:14:0;;;;;4220:18:1;;47262:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47252:39;;47302:899;47319:3;47309:7;:13;:46;;;;;47339:16;47326:10;:29;47309:46;47302:899;;;47392:16;47376:12;;:32;47372:89;;47444:1;47429:12;:16;47372:89;47489:7;47497:12;;47489:21;;;;;;;;:::i;:::-;;;;;;;;;;;47540:32;;-1:-1:-1;;;47540:32:0;;-1:-1:-1;;;;;47489:21:0;;;47540:32;;;4247:51:1;;;47489:21:0;-1:-1:-1;47540:19:0;;;;;;4220:18:1;;47540:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47525:47;;47606:1;47591:12;:16;:47;;;;-1:-1:-1;;;;;;47612:26:0;;;;;;:13;:26;;;;;;;;47611:27;47591:47;47587:455;;;47695:14;47669:22;47679:12;47669:7;:22;:::i;:::-;47668:41;;;;:::i;:::-;47659:50;;47741:1;47732:6;:10;:52;;;;-1:-1:-1;47746:29:0;;-1:-1:-1;;;47746:29:0;;47769:4;47746:29;;;4247:51:1;47778:6:0;;-1:-1:-1;;;;;47746:14:0;;;;;4220:18:1;;47746:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;47732:52;47728:299;;;47822:13;;47812:6;:23;47809:177;;47868:5;;;;;;;47809:177;;;47928:34;;-1:-1:-1;;;47928:34:0;;-1:-1:-1;;;;;18403:32:1;;;47928:34:0;;;18385:51:1;18452:18;;;18445:34;;;47928:13:0;;;;;18358:18:1;;47928:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47809:177;48089:9;48079:19;;:7;:19;:::i;:::-;48068:31;;:7;:31;:::i;:::-;48058:41;;48124:9;48148:12;:14;;48114:19;;-1:-1:-1;48148:12:0;:14;;;:::i;:::-;;;;;;48177:12;;;;;:::i;:::-;;;;47302:899;;;-1:-1:-1;;48235:12:0;48213:19;:34;-1:-1:-1;;;;;;;;;;46405:1850:0:o;18358:1306::-;18503:17;18522:22;18557:23;18593:9;;;;;;;;;-1:-1:-1;;;;;18593:9:0;-1:-1:-1;;;;;18583:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18557:60;;18628:13;18657:11;;;;;;;;;-1:-1:-1;;;;;18657:11:0;-1:-1:-1;;;;;18657:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18644:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18768:9;;18758:28;;;-1:-1:-1;;;18758:28:0;;;;18628:59;;-1:-1:-1;;;;;;18711:19:0;;;;;;18698:10;;18768:9;;;;18758:26;;:28;;;;;;;;;;;;;;18768:9;18758:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18741:45;;18801:5;18797:540;;;18827:11;;18823:503;;18859:13;18875:18;18885:7;18890:2;18885;:7;:::i;:::-;18875:9;:18::i;:::-;18859:34;;18912:17;18932;18942:6;18932:9;:17::i;:::-;18912:37;;18980:9;18972:5;:17;18968:343;;;19014:17;19053;19061:9;19053:5;:17;:::i;:::-;19034:37;;:15;:37;:::i;:::-;:41;;19074:1;19034:41;:::i;:::-;19014:61;-1:-1:-1;19098:19:0;19134:13;:9;19146:1;19134:13;:::i;:::-;19120:10;:5;19128:2;19120:10;:::i;:::-;:28;;;;:::i;:::-;19098:50;-1:-1:-1;19188:23:0;19098:50;19188:9;:23;:::i;:::-;19171:40;-1:-1:-1;19238:18:0;;19234:57;;19258:33;19277:14;19258:33;;:::i;:::-;;;19234:57;18991:320;;18968:343;18840:486;;18823:503;19347:15;19365:13;19376:2;19365:8;:13;:::i;:::-;19347:31;;19393:15;19412:1;19393:20;19389:268;;19472:4;19442:27;19452:16;19462:6;19452:7;:16;:::i;19442:27::-;:34;;;;:::i;:::-;19430:46;;19389:268;;;19521:124;19578:2;19549:25;19559:15;19549:7;:25;:::i;:::-;19548:32;;;;:::i;:::-;19628:2;19600:24;19609:15;19600:6;:24;:::i;:::-;19599:31;;;;:::i;:::-;19521:8;:124::i;:::-;19509:136;;19389:268;18546:1118;;;;;18358:1306;;;;;;;:::o;40801:213::-;-1:-1:-1;;;;;40938:13:0;;;;;;:9;:13;;;;;;:23;;40954:7;;40938:23;:::i;:::-;-1:-1:-1;;;;;40922:13:0;;;;;;;:9;:13;;;;;;;:39;;;;40977:29;;;;;;;;;;40998:7;2289:25:1;;2277:2;2262:18;;2143:177;184:303:0;229:6;256:1;252;:5;248:232;;;-1:-1:-1;278:1:0;294:6;303:5;307:1;278;303:5;:::i;:::-;:9;;311:1;303:9;:::i;:::-;294:18;;327:92;338:1;334;:5;327:92;;;364:1;-1:-1:-1;364:1:0;402;364;389:5;364:1;389;:5;:::i;:::-;:9;;;;:::i;:::-;388:15;;;;:::i;:::-;384:19;;327:92;;;259:171;16263:185;;;:::o;248:232::-;440:6;;436:44;;-1:-1:-1;467:1:0;184:303;;;:::o;80:96::-;132:6;159:1;155;:5;:13;;167:1;155:13;;;163:1;155:13;151:17;80:96;-1:-1:-1;;;80:96:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;289:247::-;348:6;401:2;389:9;380:7;376:23;372:32;369:52;;;417:1;414;407:12;369:52;456:9;443:23;475:31;500:5;475:31;:::i;733:118::-;819:5;812:13;805:21;798:5;795:32;785:60;;841:1;838;831:12;856:382;921:6;929;982:2;970:9;961:7;957:23;953:32;950:52;;;998:1;995;988:12;950:52;1037:9;1024:23;1056:31;1081:5;1056:31;:::i;:::-;1106:5;-1:-1:-1;1163:2:1;1148:18;;1135:32;1176:30;1135:32;1176:30;:::i;:::-;1225:7;1215:17;;;856:382;;;;;:::o;1243:226::-;1302:6;1355:2;1343:9;1334:7;1330:23;1326:32;1323:52;;;1371:1;1368;1361:12;1323:52;-1:-1:-1;1416:23:1;;1243:226;-1:-1:-1;1243:226:1:o;1474:418::-;1623:2;1612:9;1605:21;1586:4;1655:6;1649:13;1698:6;1693:2;1682:9;1678:18;1671:34;1757:6;1752:2;1744:6;1740:15;1735:2;1724:9;1720:18;1714:50;1813:1;1808:2;1799:6;1788:9;1784:22;1780:31;1773:42;1883:2;1876;1872:7;1867:2;1859:6;1855:15;1851:29;1840:9;1836:45;1832:54;1824:62;;;1474:418;;;;:::o;1897:241::-;1953:6;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;2061:9;2048:23;2080:28;2102:5;2080:28;:::i;2325:367::-;2393:6;2401;2454:2;2442:9;2433:7;2429:23;2425:32;2422:52;;;2470:1;2467;2460:12;2422:52;2509:9;2496:23;2528:31;2553:5;2528:31;:::i;:::-;2578:5;2656:2;2641:18;;;;2628:32;;-1:-1:-1;;;2325:367:1:o;2697:::-;2760:8;2770:6;2824:3;2817:4;2809:6;2805:17;2801:27;2791:55;;2842:1;2839;2832:12;2791:55;-1:-1:-1;2865:20:1;;2908:18;2897:30;;2894:50;;;2940:1;2937;2930:12;2894:50;2977:4;2969:6;2965:17;2953:29;;3037:3;3030:4;3020:6;3017:1;3013:14;3005:6;3001:27;2997:38;2994:47;2991:67;;;3054:1;3051;3044:12;2991:67;2697:367;;;;;:::o;3069:566::-;3161:6;3169;3177;3230:2;3218:9;3209:7;3205:23;3201:32;3198:52;;;3246:1;3243;3236:12;3198:52;3286:9;3273:23;3319:18;3311:6;3308:30;3305:50;;;3351:1;3348;3341:12;3305:50;3390:70;3452:7;3443:6;3432:9;3428:22;3390:70;:::i;:::-;3479:8;;-1:-1:-1;3364:96:1;-1:-1:-1;;3564:2:1;3549:18;;3536:32;3577:28;3536:32;3577:28;:::i;:::-;3624:5;3614:15;;;3069:566;;;;;:::o;3640:437::-;3726:6;3734;3787:2;3775:9;3766:7;3762:23;3758:32;3755:52;;;3803:1;3800;3793:12;3755:52;3843:9;3830:23;3876:18;3868:6;3865:30;3862:50;;;3908:1;3905;3898:12;3862:50;3947:70;4009:7;4000:6;3989:9;3985:22;3947:70;:::i;:::-;4036:8;;3921:96;;-1:-1:-1;3640:437:1;-1:-1:-1;;;;3640:437:1:o;4309:508::-;4386:6;4394;4402;4455:2;4443:9;4434:7;4430:23;4426:32;4423:52;;;4471:1;4468;4461:12;4423:52;4510:9;4497:23;4529:31;4554:5;4529:31;:::i;:::-;4579:5;-1:-1:-1;4636:2:1;4621:18;;4608:32;4649:33;4608:32;4649:33;:::i;:::-;4309:508;;4701:7;;-1:-1:-1;;;4781:2:1;4766:18;;;;4753:32;;4309:508::o;6392:481::-;6466:6;6474;6482;6535:2;6523:9;6514:7;6510:23;6506:32;6503:52;;;6551:1;6548;6541:12;6503:52;6596:23;;;-1:-1:-1;6716:2:1;6701:18;;6688:32;;-1:-1:-1;6798:2:1;6783:18;;6770:32;6811:30;6770:32;6811:30;:::i;6878:127::-;6939:10;6934:3;6930:20;6927:1;6920:31;6970:4;6967:1;6960:15;6994:4;6991:1;6984:15;7010:906;7064:5;7117:3;7110:4;7102:6;7098:17;7094:27;7084:55;;7135:1;7132;7125:12;7084:55;7175:6;7162:20;7205:18;7197:6;7194:30;7191:56;;;7227:18;;:::i;:::-;7273:6;7270:1;7266:14;7309:2;7303:9;7372:2;7368:7;7363:2;7359;7355:11;7351:25;7343:6;7339:38;7443:6;7431:10;7428:22;7407:18;7395:10;7392:34;7389:62;7386:88;;;7454:18;;:::i;:::-;7490:2;7483:22;7540;;;7590:4;7622:15;;;7618:26;;;7540:22;7578:17;;7656:15;;;7653:35;;;7684:1;7681;7674:12;7653:35;7720:4;7712:6;7708:17;7697:28;;7734:152;7750:6;7745:3;7742:15;7734:152;;;7818:23;7837:3;7818:23;:::i;:::-;7806:36;;7871:4;7767:14;;;;7862;7734:152;;;-1:-1:-1;7904:6:1;7010:906;-1:-1:-1;;;;;7010:906:1:o;7921:462::-;8014:6;8022;8075:2;8063:9;8054:7;8050:23;8046:32;8043:52;;;8091:1;8088;8081:12;8043:52;8131:9;8118:23;8164:18;8156:6;8153:30;8150:50;;;8196:1;8193;8186:12;8150:50;8219:61;8272:7;8263:6;8252:9;8248:22;8219:61;:::i;:::-;8209:71;8349:2;8334:18;;;;8321:32;;-1:-1:-1;;;;7921:462:1:o;8830:829::-;8934:6;8942;8950;8958;8966;8974;9027:3;9015:9;9006:7;9002:23;8998:33;8995:53;;;9044:1;9041;9034:12;8995:53;-1:-1:-1;;9089:23:1;;;9209:2;9194:18;;9181:32;;-1:-1:-1;9312:2:1;9297:18;;9284:32;;9415:2;9400:18;;9387:32;;-1:-1:-1;9518:3:1;9503:19;;9490:33;;-1:-1:-1;9622:3:1;9607:19;9594:33;;-1:-1:-1;8830:829:1;-1:-1:-1;8830:829:1:o;9664:508::-;9741:6;9749;9757;9810:2;9798:9;9789:7;9785:23;9781:32;9778:52;;;9826:1;9823;9816:12;9778:52;9865:9;9852:23;9884:31;9909:5;9884:31;:::i;:::-;9934:5;-1:-1:-1;10012:2:1;9997:18;;9984:32;;-1:-1:-1;10094:2:1;10079:18;;10066:32;10107:33;10066:32;10107:33;:::i;10501:388::-;10569:6;10577;10630:2;10618:9;10609:7;10605:23;10601:32;10598:52;;;10646:1;10643;10636:12;10598:52;10685:9;10672:23;10704:31;10729:5;10704:31;:::i;:::-;10754:5;-1:-1:-1;10811:2:1;10796:18;;10783:32;10824:33;10783:32;10824:33;:::i;10894:348::-;10978:6;11031:2;11019:9;11010:7;11006:23;11002:32;10999:52;;;11047:1;11044;11037:12;10999:52;11087:9;11074:23;11120:18;11112:6;11109:30;11106:50;;;11152:1;11149;11142:12;11106:50;11175:61;11228:7;11219:6;11208:9;11204:22;11175:61;:::i;:::-;11165:71;10894:348;-1:-1:-1;;;;10894:348:1:o;11247:671::-;11351:6;11359;11367;11375;11428:2;11416:9;11407:7;11403:23;11399:32;11396:52;;;11444:1;11441;11434:12;11396:52;11484:9;11471:23;11517:18;11509:6;11506:30;11503:50;;;11549:1;11546;11539:12;11503:50;11588:70;11650:7;11641:6;11630:9;11626:22;11588:70;:::i;:::-;11677:8;;11562:96;;-1:-1:-1;11781:2:1;11766:18;;11753:32;;11882:2;11867:18;11854:32;;-1:-1:-1;11247:671:1;-1:-1:-1;;;;11247:671:1:o;11923:329::-;12125:2;12107:21;;;12164:1;12144:18;;;12137:29;-1:-1:-1;;;12197:2:1;12182:18;;12175:36;12243:2;12228:18;;11923:329::o;12941:380::-;13020:1;13016:12;;;;13063;;;13084:61;;13138:4;13130:6;13126:17;13116:27;;13084:61;13191:2;13183:6;13180:14;13160:18;13157:38;13154:161;;13237:10;13232:3;13228:20;13225:1;13218:31;13272:4;13269:1;13262:15;13300:4;13297:1;13290:15;13662:127;13723:10;13718:3;13714:20;13711:1;13704:31;13754:4;13751:1;13744:15;13778:4;13775:1;13768:15;13794:230;13864:6;13917:2;13905:9;13896:7;13892:23;13888:32;13885:52;;;13933:1;13930;13923:12;13885:52;-1:-1:-1;13978:16:1;;13794:230;-1:-1:-1;13794:230:1:o;14029:127::-;14090:10;14085:3;14081:20;14078:1;14071:31;14121:4;14118:1;14111:15;14145:4;14142:1;14135:15;14161:128;14228:9;;;14249:11;;;14246:37;;;14263:18;;:::i;16371:125::-;16436:9;;;16457:10;;;16454:36;;;16470:18;;:::i;18490:245::-;18557:6;18610:2;18598:9;18589:7;18585:23;18581:32;18578:52;;;18626:1;18623;18616:12;18578:52;18658:9;18652:16;18677:28;18699:5;18677:28;:::i;18740:188::-;18819:13;;-1:-1:-1;;;;;18861:42:1;;18851:53;;18841:81;;18918:1;18915;18908:12;18933:450;19020:6;19028;19036;19089:2;19077:9;19068:7;19064:23;19060:32;19057:52;;;19105:1;19102;19095:12;19057:52;19128:40;19158:9;19128:40;:::i;:::-;19118:50;;19187:49;19232:2;19221:9;19217:18;19187:49;:::i;:::-;19177:59;;19279:2;19268:9;19264:18;19258:25;19323:10;19316:5;19312:22;19305:5;19302:33;19292:61;;19349:1;19346;19339:12;20071:375;20159:1;20177:5;20191:249;20212:1;20202:8;20199:15;20191:249;;;20262:4;20257:3;20253:14;20247:4;20244:24;20241:50;;;20271:18;;:::i;:::-;20321:1;20311:8;20307:16;20304:49;;;20335:16;;;;20304:49;20418:1;20414:16;;;;;20374:15;;20191:249;;;20071:375;;;;;;:::o;20451:902::-;20500:5;20530:8;20520:80;;-1:-1:-1;20571:1:1;20585:5;;20520:80;20619:4;20609:76;;-1:-1:-1;20656:1:1;20670:5;;20609:76;20701:4;20719:1;20714:59;;;;20787:1;20782:174;;;;20694:262;;20714:59;20744:1;20735:10;;20758:5;;;20782:174;20819:3;20809:8;20806:17;20803:43;;;20826:18;;:::i;:::-;-1:-1:-1;;20882:1:1;20868:16;;20941:5;;20694:262;;21040:2;21030:8;21027:16;21021:3;21015:4;21012:13;21008:36;21002:2;20992:8;20989:16;20984:2;20978:4;20975:12;20971:35;20968:77;20965:203;;;-1:-1:-1;21077:19:1;;;21153:5;;20965:203;21200:42;-1:-1:-1;;21225:8:1;21219:4;21200:42;:::i;:::-;21278:6;21274:1;21270:6;21266:19;21257:7;21254:32;21251:58;;;21289:18;;:::i;:::-;21327:20;;20451:902;-1:-1:-1;;;20451:902:1:o;21358:131::-;21418:5;21447:36;21474:8;21468:4;21447:36;:::i;21494:168::-;21567:9;;;21598;;21615:15;;;21609:22;;21595:37;21585:71;;21636:18;;:::i;23716:217::-;23756:1;23782;23772:132;;23826:10;23821:3;23817:20;23814:1;23807:31;23861:4;23858:1;23851:15;23889:4;23886:1;23879:15;23772:132;-1:-1:-1;23918:9:1;;23716:217::o;23938:959::-;24200:4;24248:3;24237:9;24233:19;24279:6;24268:9;24261:25;24322:6;24317:2;24306:9;24302:18;24295:34;24365:3;24360:2;24349:9;24345:18;24338:31;24389:6;24424;24418:13;24455:6;24447;24440:22;24493:3;24482:9;24478:19;24471:26;;24532:2;24524:6;24520:15;24506:29;;24553:1;24563:195;24577:6;24574:1;24571:13;24563:195;;;24642:13;;-1:-1:-1;;;;;24638:39:1;24626:52;;24707:2;24733:15;;;;24698:12;;;;24674:1;24592:9;24563:195;;;-1:-1:-1;;;;;;;24814:32:1;;;;24809:2;24794:18;;24787:60;-1:-1:-1;;24878:3:1;24863:19;24856:35;24775:3;23938:959;-1:-1:-1;;;23938:959:1:o;26533:456::-;26621:6;26629;26637;26690:2;26678:9;26669:7;26665:23;26661:32;26658:52;;;26706:1;26703;26696:12;26658:52;-1:-1:-1;;26751:16:1;;26857:2;26842:18;;26836:25;26953:2;26938:18;;;26932:25;26751:16;;26836:25;;-1:-1:-1;26932:25:1;26533:456;-1:-1:-1;26533:456:1:o;26994:982::-;27253:4;27301:3;27290:9;27286:19;27332:6;27321:9;27314:25;27375:6;27370:2;27359:9;27355:18;27348:34;27418:3;27413:2;27402:9;27398:18;27391:31;27442:6;27477;27471:13;27508:6;27500;27493:22;27546:3;27535:9;27531:19;27524:26;;27569:6;27566:1;27559:17;27612:2;27609:1;27599:16;27585:30;;27633:1;27643:194;27657:6;27654:1;27651:13;27643:194;;;27722:13;;-1:-1:-1;;;;;27718:39:1;27706:52;;27754:1;27813:14;;;;27787:2;27778:12;;;;27672:9;27643:194;;28869:135;28908:3;28929:17;;;28926:43;;28949:18;;:::i;:::-;-1:-1:-1;28996:1:1;28985:13;;28869:135::o;29009:251::-;29079:6;29132:2;29120:9;29111:7;29107:23;29103:32;29100:52;;;29148:1;29145;29138:12;29100:52;29180:9;29174:16;29199:31;29224:5;29199:31;:::i
Swarm Source
ipfs://52a871b8379f3aacb599d45284249479b2c8fbb46958caeb574e6038bef1699f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)