Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,649 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
BUY | 14809224 | 799 days ago | IN | 0.03376383 ETH | 0.00221962 | ||||
BUY | 14808295 | 799 days ago | IN | 0.05 ETH | 0.00318833 | ||||
BUY | 14808269 | 799 days ago | IN | 0.03 ETH | 0.00351161 | ||||
Sync | 14789978 | 802 days ago | IN | 0 ETH | 0.00548293 | ||||
Sync | 14789937 | 802 days ago | IN | 0 ETH | 0.00726252 | ||||
SELL | 14779736 | 803 days ago | IN | 0 ETH | 0.01091272 | ||||
BUY | 14773685 | 804 days ago | IN | 0.06 ETH | 0.01430882 | ||||
BUY | 14771158 | 805 days ago | IN | 0.02422453 ETH | 0.0297825 | ||||
BUY | 14767044 | 805 days ago | IN | 0.06 ETH | 0.01988643 | ||||
BUY | 14765256 | 806 days ago | IN | 0.35432901 ETH | 0.03061471 | ||||
BUY | 14763780 | 806 days ago | IN | 0.14 ETH | 0.03710254 | ||||
BUY | 14763556 | 806 days ago | IN | 0.04 ETH | 0.02873434 | ||||
BUY | 14760832 | 806 days ago | IN | 0.08622601 ETH | 0.0209939 | ||||
BUY | 14752287 | 808 days ago | IN | 0.01 ETH | 0.01369736 | ||||
BUY | 14751057 | 808 days ago | IN | 0.17 ETH | 0.05907966 | ||||
BUY | 14748591 | 808 days ago | IN | 0.37432277 ETH | 0.01295556 | ||||
BUY | 14748032 | 808 days ago | IN | 0.26 ETH | 0.01160223 | ||||
BUY | 14746534 | 809 days ago | IN | 0.28 ETH | 0.01853683 | ||||
BUY | 14743886 | 809 days ago | IN | 0.2 ETH | 0.03020696 | ||||
BUY | 14739385 | 810 days ago | IN | 0.08196383 ETH | 0.01084012 | ||||
SELL | 14737011 | 810 days ago | IN | 0 ETH | 0.01321878 | ||||
BUY | 14733962 | 811 days ago | IN | 0.08235692 ETH | 0.00844795 | ||||
BUY | 14733928 | 811 days ago | IN | 0.07088062 ETH | 0.00999748 | ||||
BUY | 14733686 | 811 days ago | IN | 0.09 ETH | 0.00983987 | ||||
BUY | 14733572 | 811 days ago | IN | 0.08277157 ETH | 0.00819371 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14809224 | 799 days ago | 0.00016881 ETH | ||||
14809224 | 799 days ago | 0.03359501 ETH | ||||
14808295 | 799 days ago | 0.00025 ETH | ||||
14808295 | 799 days ago | 0.04975 ETH | ||||
14808269 | 799 days ago | 0.00015 ETH | ||||
14808269 | 799 days ago | 0.02985 ETH | ||||
14779736 | 803 days ago | 0.00526748 ETH | ||||
14779736 | 803 days ago | 0.00526748 ETH | ||||
14779736 | 803 days ago | 0.84616871 ETH | ||||
14779736 | 803 days ago | 0.84744562 ETH | ||||
14773685 | 804 days ago | 0.0003 ETH | ||||
14773685 | 804 days ago | 0.0597 ETH | ||||
14771158 | 805 days ago | 0.00012112 ETH | ||||
14771158 | 805 days ago | 0.0241034 ETH | ||||
14767044 | 805 days ago | 0.0003 ETH | ||||
14767044 | 805 days ago | 0.0597 ETH | ||||
14765256 | 806 days ago | 0.00177164 ETH | ||||
14765256 | 806 days ago | 0.35255736 ETH | ||||
14763780 | 806 days ago | 0.00397746 ETH | ||||
14763780 | 806 days ago | 0.0007 ETH | ||||
14763780 | 806 days ago | 0.1393 ETH | ||||
14763556 | 806 days ago | 0.0002 ETH | ||||
14763556 | 806 days ago | 0.0398 ETH | ||||
14760832 | 806 days ago | 0.00043113 ETH | ||||
14760832 | 806 days ago | 0.08579488 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x80598337...3ACE27272 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
FEGexPRO
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-19 */ pragma solidity 0.8.7; // SPDX-License-Identifier: UNLICENSED contract FEGmath { function btoi(uint256 a) internal pure returns (uint256) { return a / 1e18; } function bfloor(uint256 a) internal pure returns (uint256) { return btoi(a) * 1e18; } function badd(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "ERR_ADD_OVERFLOW"); return c; } function bsub(uint256 a, uint256 b) internal pure returns (uint256) { (uint256 c, bool flag) = bsubSign(a, b); require(!flag, "ERR_SUB_UNDERFLOW"); return c; } function bsubSign(uint256 a, uint256 b) internal pure returns (uint, bool) { if (a >= b) { return (a - b, false); } else { return (b - a, true); } } function bmul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c0 = a * b; require(a == 0 || c0 / a == b, "ERR_MUL_OVERFLOW"); uint256 c1 = c0 + (1e18 / 2); require(c1 >= c0, "ERR_MUL_OVERFLOW"); uint256 c2 = c1 / 1e18; return c2; } function bdiv(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "ERR_DIV_ZERO"); uint256 c0 = a * 1e18; require(a == 0 || c0 / a == 1e18, "ERR_DIV_INTERNAL"); // bmul overflow uint256 c1 = c0 + (b / 2); require(c1 >= c0, "ERR_DIV_INTERNAL"); // badd require uint256 c2 = c1 / b; return c2; } function bpowi(uint256 a, uint256 n) internal pure returns (uint256) { uint256 z = n % 2 != 0 ? a : 1e18; for (n /= 2; n != 0; n /= 2) { a = bmul(a, a); if (n % 2 != 0) { z = bmul(z, a); } } return z; } function bpow(uint256 base, uint256 exp) internal pure returns (uint256) { require(base >= 1 wei, "ERR_BPOW_BASE_TOO_LOW"); require(base <= (2 * 1e18) - 1 wei, "ERR_BPOW_BASE_TOO_HIGH"); uint256 whole = bfloor(exp); uint256 remain = bsub(exp, whole); uint256 wholePow = bpowi(base, btoi(whole)); if (remain == 0) { return wholePow; } uint256 partialResult = bpowApprox(base, remain, 1e18 / 1e10); return bmul(wholePow, partialResult); } function bpowApprox(uint256 base, uint256 exp, uint256 precision) internal pure returns (uint256) { uint256 a = exp; (uint256 x, bool xneg) = bsubSign(base, 1e18); uint256 term = 1e18; uint256 sum = term; bool negative = false; for (uint256 i = 1; term >= precision; i++) { uint256 bigK = i * 1e18; (uint256 c, bool cneg) = bsubSign(a, bsub(bigK, 1e18)); term = bmul(term, bmul(c, x)); term = bdiv(term, bigK); if (term == 0) break; if (xneg) negative = !negative; if (cneg) negative = !negative; if (negative) { sum = bsub(sum, term); } else { sum = badd(sum, term); } } return sum; } } contract FMath is FEGmath { function calcSpotPrice( uint256 tokenBalanceIn, uint256 tokenWeightIn, uint256 tokenBalanceOut, uint256 tokenWeightOut, uint256 swapFee ) public pure returns (uint256 spotPrice) { uint256 numer = bdiv(tokenBalanceIn, tokenWeightIn); uint256 denom = bdiv(tokenBalanceOut, tokenWeightOut); uint256 ratio = bdiv(numer, denom); uint256 scale = bdiv(10**18, bsub(10**18, swapFee)); return (spotPrice = bmul(ratio, scale)); } function calcOutGivenIn( uint256 tokenBalanceIn, uint256 tokenWeightIn, uint256 tokenBalanceOut, uint256 tokenWeightOut, uint256 tokenAmountIn, uint256 swapFee ) public pure returns (uint256 tokenAmountOut, uint256 tokenInFee) { uint256 weightRatio = bdiv(tokenWeightIn, tokenWeightOut); uint256 adjustedIn = bsub(10**18, swapFee); adjustedIn = bmul(tokenAmountIn, adjustedIn); uint256 y = bdiv(tokenBalanceIn, badd(tokenBalanceIn, adjustedIn)); uint256 foo = bpow(y, weightRatio); uint256 bar = bsub(1e18, foo); tokenAmountOut = bmul(tokenBalanceOut, bar); tokenInFee = bsub(tokenAmountIn, adjustedIn); return (tokenAmountOut, tokenInFee); } function calcOutGivenIn1( uint256 tokenBalanceIn, uint256 tokenWeightIn, uint256 tokenBalanceOut, uint256 tokenWeightOut, uint256 tokenAmountIn ) public pure returns (uint256 tokenAmountOut) { uint256 weightRatio = bdiv(tokenWeightIn, tokenWeightOut); uint256 adjustedIn = bsub(10**18, 0); adjustedIn = bmul(tokenAmountIn, adjustedIn); uint256 y = bdiv(tokenBalanceIn, badd(tokenBalanceIn, adjustedIn)); uint256 foo = bpow(y, weightRatio); uint256 bar = bsub(1e18, foo); tokenAmountOut = bmul(tokenBalanceOut, bar); return tokenAmountOut; } function calcInGivenOut( uint256 tokenBalanceIn, uint256 tokenWeightIn, uint256 tokenBalanceOut, uint256 tokenWeightOut, uint256 tokenAmountOut, uint256 swapFee ) public pure returns (uint256 tokenAmountIn, uint256 tokenInFee) { uint256 weightRatio = bdiv(tokenWeightOut, tokenWeightIn); uint256 diff = bsub(tokenBalanceOut, tokenAmountOut); uint256 y = bdiv(tokenBalanceOut, diff); uint256 foo = bpow(y, weightRatio); foo = bsub(foo, 1e18); foo = bmul(tokenBalanceIn, foo); tokenAmountIn = bsub(1e18, swapFee); tokenAmountIn = bdiv(foo, tokenAmountIn); tokenInFee = bdiv(foo, 1e18); tokenInFee = bsub(tokenAmountIn, tokenInFee); return (tokenAmountIn, tokenInFee); } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address whom) external view returns (uint256); function allowance(address src, address dst) external view returns (uint256); function approve(address dst, uint256 amt) external returns (bool); function transfer(address dst, uint256 amt) external returns (bool); function transferFrom( address src, address dst, uint256 amt ) external returns (bool); } interface wrap { function deposit() external payable; function withdraw(uint256 amt) external; function transfer(address recipient, uint256 amount) external returns (bool); } interface swap { function depositInternal(address asset, uint256 amt) external; function payMain(address payee, uint256 amount) external; function payToken(address payee, uint256 amount) external; function BUY(uint256 dot, address to, uint256 minAmountOut) external payable; } library TransferHelper { function safeTransferFrom(address token, address from, address to, uint256 value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint256 value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract LPTokenBase is FEGmath { mapping(address => uint256) internal _balance; mapping(address => mapping(address=>uint256)) internal _allowance; uint256 public totalSupply = 0; event Approval(address indexed src, address indexed dst, uint256 amt); event Transfer(address indexed src, address indexed dst, uint256 amt); function _mint(uint256 amt) internal { _balance[address(this)] = badd(_balance[address(this)], amt); totalSupply = badd(totalSupply, amt); emit Transfer(address(0), address(this), amt); } function _move(address src, address dst, uint256 amt) internal { require(_balance[src] >= amt); _balance[src] = bsub(_balance[src], amt); _balance[dst] = badd(_balance[dst], amt); emit Transfer(src, dst, amt); } function _push(address to, uint256 amt) internal { _move(address(this), to, amt); } } contract LPToken is LPTokenBase { string public name = "FEGex PRO"; string public symbol = "LP Token"; uint8 public decimals = 18; function allowance(address src, address dst) external view returns (uint256) { return _allowance[src][dst]; } function balanceOf(address whom) external view returns (uint256) { return _balance[whom]; } function approve(address dst, uint256 amt) external returns (bool) { _allowance[msg.sender][dst] = amt; emit Approval(msg.sender, dst, amt); return true; } function increaseApproval(address dst, uint256 amt) external returns (bool) { _allowance[msg.sender][dst] = badd(_allowance[msg.sender][dst], amt); emit Approval(msg.sender, dst, _allowance[msg.sender][dst]); return true; } function decreaseApproval(address dst, uint256 amt) external returns (bool) { uint256 oldValue = _allowance[msg.sender][dst]; if (amt > oldValue) { _allowance[msg.sender][dst] = 0; } else { _allowance[msg.sender][dst] = bsub(oldValue, amt); } emit Approval(msg.sender, dst, _allowance[msg.sender][dst]); return true; } } interface FEGexPair { function initialize(address, address, address, address, uint256) external; function deploySwap(address, uint256) external; function userBalanceInternal(address _addr) external returns (uint256, uint256); } interface newDeployer { function createPair(address token, uint256 liqmain, uint256 liqtoken, address owner) external; } contract FEGexPRO is LPToken, FMath { using Address for address; struct Record { uint256 index; uint256 balance; } struct userLock { bool setLock; // true = lockedLiquidity, false = unlockedLiquidity uint256 unlockTime; // time liquidity can be released } function getUserLock(address usr) public view returns(bool lock){ return (_userlock[usr].setLock); } event LOG_SWAP( address indexed caller, address indexed tokenIn, address indexed tokenOut, uint256 tokenAmountIn, uint256 tokenAmountOut ); event LOG_JOIN( address indexed caller, address indexed tokenIn, uint256 tokenAmountIn, uint256 reservesAmount ); event LOG_EXIT( address indexed caller, address indexed tokenOut, uint256 tokenAmountOut, uint256 reservesAmount ); event LOG_SMARTSWAP( address indexed caller, address indexed tokenIn, address indexed tokenOut, uint256 AmountIn, uint256 AmountOut ); uint256 private spec; address private _controller = 0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C; address private _setter = 0x86882FA66aC57039b10D78e2D3205592A44664c0; address private fegp; address private FEG = 0x389999216860AB8E0175387A0c90E5c52522C945; address private burn = 0x000000000000000000000000000000000000dEaD; address public _poolOwner; address public Main = 0xf786c34106762Ab4Eeb45a51B42a62470E9D5332; address private newDep; address public Token; address public pairRewardPool; address private FEGstake; address public Bonus; uint256 public MAX_BUY_RATIO = 100e18; uint256 public MAX_SELL_RATIO; uint256 public PSS = 20; // pairRewardPool Share 0.2% default uint256 public RPF = 1000; // Smart Rising Price Floor Setting address[] private _tokens; uint256 public _totalSupply1; uint256 public _totalSupply2; uint256 public _totalSupply7; uint256 public _totalSupply8; uint256 public lockedLiquidity; uint256 public totalSentRebates; bool private live = false; //bool private on = true; bool public open = false; mapping(address=>Record) private _records; mapping(address=>userLock) private _userlock; mapping(address=>userLock) public _unlockTime; mapping(address=>bool) private whiteListContract; mapping(address => uint256) private _balances1; mapping(address => uint256) private _balances2; uint256 private constant MAX_RATIO = 50; // Max ratio for all trades based on liquidity amount uint256 public tx1; uint256 public tx2 = 99; uint256 private status = 0; function initialize( address _token1, address owner, address _made, address _fegp, uint256 ol) external{ require(live == false, "Can only use once"); Token = _token1; _poolOwner = owner; pairRewardPool = owner; spec = ol; fegp = _fegp; FEGstake = _made; MAX_SELL_RATIO = bmul(IERC20(Token).totalSupply(), bdiv(1, 20)); } receive() external payable { } function userBalanceInternal(address _addr) public view returns(uint256, uint256) { uint256 main = _balances2[_addr]; uint256 token = _balances1[_addr]; return (token, main); } function isContract(address account) internal view returns(bool) { if(IsWhiteListContract(account)) { return false; } bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } function addWhiteListContract(address _addy, bool boolean) public { require(msg.sender == _setter); whiteListContract[_addy] = boolean; } function IsWhiteListContract(address _addy) public view returns(bool){ return whiteListContract[_addy]; } modifier noContract() { require(isContract(msg.sender) == false, "Unapproved contracts are not allowed to interact with the swap"); _; } function sync() public { // updates the liquidity to current state _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1; uint256 al = (_totalSupply2 + _totalSupply7 + _totalSupply8); _records[Main].balance = IERC20(Main).balanceOf(address(this)) - al; } function setMaxBuySellRatio(uint256 sellmax, uint256 buymax) public { require(msg.sender == _poolOwner, "You do not have permission"); uint256 tob = IERC20(Token).totalSupply(); require (sellmax >= tob/1000 && sellmax <= tob, "min 0.1% of token supply, max 100% of token supply"); require (buymax >= 1e18, "1 BNB minimum"); MAX_SELL_RATIO = sellmax; MAX_BUY_RATIO = buymax; } function openit() public{ // Since only sets to true, trading can never be turned off require(msg.sender == _poolOwner); open = true; } function setBonus(address _bonus) public{ // For tokens that have a 3rd party token reflection require(msg.sender == _poolOwner && _bonus != Main && _bonus != Token); require(isContract(_bonus) == true); Bonus = _bonus; } function setStakePool(address _stake, address _fegp, address newd) public { require(msg.sender == _setter); FEGstake = _stake; fegp = _fegp; newDep = newd; } function setPRP(address prp) public { require(msg.sender == _setter); pairRewardPool = prp; } function setTX1(uint256 amt) public { require(msg.sender == _setter); tx1 = amt; } function getBalance(address token) external view returns (uint256) { return _records[token].balance; } function setCont(address manager, address set, address ad) external { require(msg.sender == _controller); _controller = manager; _setter = set; _poolOwner = ad; // Incase pool owner wallet was compromised and needs new access } function setLockLiquidity() public { // address user; user = msg.sender; require(getUserLock(user) == false, "Liquidity already locked"); uint256 total = IERC20(address(this)).balanceOf(user); userLock storage ulock = _userlock[user]; userLock storage time = _unlockTime[user]; ulock.setLock = true; time.unlockTime = block.timestamp + 90 days; lockedLiquidity += total; } function deploySwap (address _from, uint256 liqtoken) external { require(live == false); uint256 much = IERC20(Token).balanceOf(address(this)); uint256 much1 = IERC20(Main).balanceOf(address(this)); _records[Token] = Record({ index: _tokens.length, balance: much }); _records[Main] = Record({ index: _tokens.length, balance: much1 }); _tokens.push(Token); _tokens.push(Main); uint256 a = bdiv(_records[Token].balance, 1e9); uint256 b = bdiv(_records[Main].balance, 1e18); uint256 c = a + b; _mint(c); _push(_from, c); lockedLiquidity = badd(lockedLiquidity, c); userLock storage ulock = _userlock[_from]; userLock storage time = _unlockTime[_from]; ulock.setLock = true; time.unlockTime = block.timestamp + 365 days; live = true; tx1 = bmul(100, bdiv(much, liqtoken)); } function getSpotPrice(address tokenIn, address tokenOut) public view returns (uint256 spotPrice) { Record storage inRecord = _records[address(tokenIn)]; Record storage outRecord = _records[address(tokenOut)]; return calcSpotPrice(inRecord.balance, bmul(1e18, 25), outRecord.balance, bmul(1e18, 25), 2e15); } function depositInternal(address asset, uint256 amt) external { require(asset == Main || asset == Token, "Not supported"); require(status == 0, "No reentry"); status = 1; require(open == true); if(asset == Token){ uint256 bef = _records[Token].balance; _pullUnderlying(Token, msg.sender, amt); uint256 aft = bsub(IERC20(Token).balanceOf(address(this)), _totalSupply1); uint256 finalAmount = bsub(aft, bef); _totalSupply1 += finalAmount; _balances1[msg.sender] += finalAmount; } else{ uint256 bef = _records[Main].balance; _pullUnderlying(Main, msg.sender, amt); uint256 aft = bsub(IERC20(Main).balanceOf(address(this)), badd(_totalSupply2, badd(_totalSupply7, _totalSupply8))); uint256 finalAmount = bsub(aft, bef); _totalSupply2 += finalAmount; _balances2[msg.sender] += finalAmount; } status = 0; } function withdrawInternal(address asset, uint256 amt) external { require(asset == Main || asset == Token, "Not supported"); require(status == 0, "No reentry"); status = 1; if(asset == Token){ require(_balances1[msg.sender] >= amt, "Not enough Token"); _totalSupply1 -= amt; _balances1[msg.sender] -= amt; _pushUnderlying(Token, msg.sender, amt); } else{ require(_balances2[msg.sender] >= amt, "Not enough Main"); _totalSupply2 -= amt; _balances2[msg.sender] -= amt; _pushUnderlying(Main, msg.sender, amt); } status = 0; } function swapToSwap(address path, address asset, address to, uint256 amt) external { require(asset == Main || asset == Token, "Not supported"); require(status == 0, "No reentry"); status = 1; if(asset == Main){ require(_balances2[msg.sender] >= amt, "Not enough Main"); IERC20(address(Main)).approve(address(path), amt); _totalSupply2 -= amt; _balances2[msg.sender] -= amt; swap(path).depositInternal(Main, amt); (uint256 tokens, uint256 mains) = FEGexPair(path).userBalanceInternal(address(this)); swap(path).payMain(to, mains); tokens = 0; } else{ require(_balances1[msg.sender] >= amt, "Not enough Token"); IERC20(address(Token)).approve(address(path), amt); _totalSupply1 -= amt; _balances1[msg.sender] -= amt; swap(path).depositInternal(Token, amt); (uint256 tokens, uint256 mains) = FEGexPair(path).userBalanceInternal(address(this)); swap(path).payToken(to, tokens); mains = 0; } status = 0; } function transfer(address dst, uint256 amt) external returns(bool) { require(getUserLock(msg.sender) == false, "Liquidity is locked, you cannot remove liquidity until after lock time."); _move(msg.sender, dst, amt); return true; } function transferFrom(address src, address dst, uint256 amt) external returns(bool) { require(msg.sender == src || amt <= _allowance[src][msg.sender]); require(getUserLock(msg.sender) == false, "Liquidity is locked, you cannot remove liquidity until after lock time."); _move(src, dst, amt); if (msg.sender != src && _allowance[src][msg.sender] != type(uint256).max) { _allowance[src][msg.sender] = bsub(_allowance[src][msg.sender], amt); emit Approval(msg.sender, dst, _allowance[src][msg.sender]); } return true; } function addBothLiquidity(uint256 poolAmountOut, uint[] calldata maxAmountsIn) external { require(status == 0, "No reentry"); status = 1; uint256 poolTotal = totalSupply; uint256 ratio = bdiv(poolAmountOut, poolTotal); if(getUserLock(msg.sender) == true){ lockedLiquidity += poolAmountOut; } for (uint256 i = 0; i < _tokens.length; i++) { address t = _tokens[i]; uint256 bal = _records[t].balance; uint256 tokenAmountIn = bmul(ratio, bal); require(tokenAmountIn <= maxAmountsIn[i]); emit LOG_JOIN(msg.sender, t, tokenAmountIn, 0); _pullUnderlying(t, msg.sender, tokenAmountIn); } _mint(poolAmountOut); _push(msg.sender, poolAmountOut); sync(); status = 0; } function removeBothLiquidity(uint256 poolAmountIn, uint[] calldata minAmountsOut) external { require(getUserLock(msg.sender) == false, "Liquidity is locked, you cannot remove liquidity until after lock time."); require(status == 0, "No reentry"); status = 1; sync(); uint256 poolTotal = totalSupply; uint256 ratio = bdiv(poolAmountIn, poolTotal); _balance[msg.sender] -= poolAmountIn; totalSupply -= poolAmountIn; emit Transfer(msg.sender, address(0), poolAmountIn); for (uint256 i = 0; i < _tokens.length; i++) { address t = _tokens[i]; uint256 bal = _records[t].balance; uint256 tokenAmountOut = bmul(ratio, bal); require(tokenAmountOut >= minAmountsOut[i], "Minimum amount out not met"); emit LOG_EXIT(msg.sender, t, tokenAmountOut, 0); _pushUnderlying(t, msg.sender, tokenAmountOut); } uint256 tab = bmul(ratio, _balances2[burn]); _balances2[burn] -= tab; _balances2[msg.sender] += tab; sync(); if(Bonus != address(0)){ uint256 bal1 = bmul(ratio, IERC20(Bonus).balanceOf(address(this))); if(bal1 > 0){ _pushUnderlying(Bonus, msg.sender, bal1); } } status = 0; } function sendRebate() internal { uint256 re = address(this).balance / 8; TransferHelper.safeTransferETH(msg.sender, re); totalSentRebates += re; } function BUYSmart( uint256 tokenAmountIn, uint256 minAmountOut ) external returns(uint256 tokenAmountOut) { require(_balances2[msg.sender] >= tokenAmountIn, "Not enough Main, deposit more"); require(status == 0, "No reentry"); status = 1; Record storage inRecord = _records[address(Main)]; Record storage outRecord = _records[address(Token)]; require(tokenAmountIn <= MAX_BUY_RATIO, "ERR_BUY_IN_RATIO"); uint256 tokenInFee; (tokenAmountOut, tokenInFee) = calcOutGivenIn( inRecord.balance, bmul(1e18, 25), outRecord.balance, bmul(1e18, 25), bmul(tokenAmountIn, bdiv(999, 1000)), 0 ); require(tokenAmountOut <= bmul(outRecord.balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO"); require(tokenAmountOut >= minAmountOut, "Minimum amount out not met"); _balances2[msg.sender] -= tokenAmountIn; _totalSupply2 -= tokenAmountIn; _balances1[msg.sender] += tokenAmountOut; _totalSupply1 += tokenAmountOut; _totalSupply8 += bmul(tokenAmountIn, bdiv(1, 1000)); sync(); emit LOG_SMARTSWAP(msg.sender, Main, Token, tokenAmountIn, tokenAmountOut); uint256 hold = IERC20(FEG).balanceOf(address(msg.sender)); if(address(this).balance > 0 && tokenAmountIn >= 5e16 && hold >= 2e19){ uint256 re = bdiv(address(this).balance, 8); TransferHelper.safeTransferETH(msg.sender, re); totalSentRebates += re; } status = 0; return(tokenAmountOut); } function BUY( uint256 dot, address to, uint256 minAmountOut ) external payable returns(uint256 tokenAmountOut) { require(status == 0, "No reentry"); status = 1; require(open == true, "Swap not opened"); uint256 maker = bmul(msg.value, bdiv(995, 1000)); wrap(Main).deposit{value: maker}(); TransferHelper.safeTransferETH(msg.sender, bmul(msg.value, bdiv(5, 1000))); if(Address.isContract(msg.sender) == true){ require(dot == spec, "Contracts are not allowed to interact with the Swap"); } uint256 hold = IERC20(FEG).balanceOf(address(msg.sender)); uint256 io = address(this).balance; if(io > 0 && msg.value >= 5e16 && hold >= 2e19){ sendRebate(); } Record storage inRecord = _records[address(Main)]; Record storage outRecord = _records[address(Token)]; require(msg.value <= MAX_BUY_RATIO, "ERR_BUY_IN_RATIO"); uint256 tokenInFee; (tokenAmountOut, tokenInFee) = calcOutGivenIn( inRecord.balance, bmul(1e18, 25), outRecord.balance, bmul(1e18, 25), bmul(maker, bdiv(999, 1000)), 0 ); require(tokenAmountOut <= bmul(outRecord.balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO"); _totalSupply8 += bmul(msg.value, bdiv(1, 1000)); require(tokenAmountOut >= minAmountOut, "Minimum amount out not met"); _pushUnderlying(Token, to, tokenAmountOut); sync(); emit LOG_SWAP(msg.sender, Main, Token, msg.value, bmul(tokenAmountOut, bdiv(tx1, 100))); status = 0; return(tokenAmountOut); } function SELL( uint256 dot, address to, uint256 tokenAmountIn, uint256 minAmountOut ) external returns(uint256 tokenAmountOut) { if(IsWhiteListContract(msg.sender) == false){ require(status == 0, "No reentry"); } status = 1; require(open == true, "Swap not opened"); if(Address.isContract(msg.sender) == true){ require(dot == spec, "Contracts are not allowed to interact with the Swap"); } require(tokenAmountIn <= MAX_SELL_RATIO, "ERR_SELL_RATIO"); uint256 omm = _records[Token].balance; _pullUnderlying(Token, msg.sender, tokenAmountIn); _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1; uint256 trueamount = bmul((_records[Token].balance - omm), bdiv(998, 1000)); tokenAmountOut = calcOutGivenIn1( _records[Token].balance, bmul(1e18, 25), _records[Main].balance, bmul(1e18, 25), trueamount ); require(tokenAmountOut <= bmul(_records[Main].balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO"); require(tokenAmountOut >= minAmountOut, "Minimum amount out not met"); uint256 toka = bmul(tokenAmountOut, bdiv(RPF, 1000)); uint256 tokAmountI = bmul(toka, bdiv(15, 10000)); uint256 tok = bmul(toka, bdiv(15, 10000)); uint256 tokAmountI2 = bmul(toka, bdiv(PSS, 10000)); uint256 io = (toka - (tokAmountI + tok + tokAmountI2)); uint256 tokAmountI1 = bmul(io, bdiv(999, 1000)); uint256 ox = _balances2[address(this)]; if(ox > 1e16){ _totalSupply2 -= ox; _balances2[address(this)] = 0; } wrap(Main).withdraw(tokAmountI1 + ox + tokAmountI); TransferHelper.safeTransferETH(to, bmul(tokAmountI1, bdiv(99, 100))); _totalSupply8 += bmul(io, bdiv(1, 1000)); uint256 oss = bmul(tokAmountI2, bdiv(5, 100)); uint256 osss = bmul(tokAmountI2, bdiv(15, 100)); _balances2[pairRewardPool] += bmul(tokAmountI2, bdiv(80, 100)); _balances2[_setter] += osss; _balances2[burn] += oss; _totalSupply2 += tokAmountI2; _totalSupply7 += tok; payStake(); burnFEG(); sync(); emit LOG_SWAP(msg.sender, Token, Main, trueamount, bmul(tokAmountI1, bdiv(99, 100))); status = 0; return tokAmountI1; } function SELLSmart( uint256 tokenAmountIn, uint256 minAmountOut ) external returns(uint256 tokenAmountOut) { require(status == 0, "No reentry"); status = 1; uint256 tai = tokenAmountIn; require(_balances1[msg.sender] >= tokenAmountIn, "Not enough Token"); Record storage inRecord = _records[address(Token)]; Record storage outRecord = _records[address(Main)]; require(tokenAmountIn <= MAX_SELL_RATIO, "ERR_SELL_RATIO"); tokenAmountOut = calcOutGivenIn1( inRecord.balance, bmul(1e18, 25), outRecord.balance, bmul(1e18, 25), bmul(tokenAmountIn, bdiv(998, 1000)) // 0.2% liquidity fee ); require(tokenAmountOut <= bmul(outRecord.balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO"); uint256 toka = bmul(tokenAmountOut, bdiv(RPF, 1000)); uint256 tokAmountI = bmul(toka, bdiv(15, 10000)); uint256 tok = bmul(toka, bdiv(15, 10000)); uint256 tokAmountI2 = bmul(toka, bdiv(PSS, 10000)); uint256 io = (toka - (tokAmountI + tok + tokAmountI2)); uint256 tokAmountI1 = bmul(io, bdiv(999, 1000)); _totalSupply8 += bmul(io, bdiv(1, 1000)); require(tokAmountI1 >= minAmountOut, "Minimum amount out not met"); _balances1[msg.sender] -= tokenAmountIn; _totalSupply1 -= tokenAmountIn; _balances2[msg.sender] += tokAmountI1; _balances2[address(this)] += tokAmountI; uint256 os = bmul(tokAmountI2, bdiv(80, 100)); uint256 oss = bmul(tokAmountI2, bdiv(5, 100)); uint256 osss = bmul(tokAmountI2, bdiv(15, 100)); _balances2[pairRewardPool] += os; _balances2[_setter] += osss; _balances2[burn] += oss; _totalSupply2 += (tokAmountI + tokAmountI2 + tokAmountI1); _totalSupply7 += tok; sync(); burnFEG(); emit LOG_SMARTSWAP(msg.sender, Token, Main, tai, tokAmountI1); status = 0; return(tokAmountI1); } function setPSSRPF(uint256 _PSS, uint256 _RPF) external { uint256 tot = _records[Main].balance; require(msg.sender == _poolOwner && tot >= 5e18, "You do not have permission"); if(tot < 20e18) {// Incentive for providing higher liquidity require(_RPF >= 990 && _RPF <= 1000 && _PSS <= 100 && _PSS != 0, "Cannot set over 1%"); } if(tot >= 20e18) {// Incentive for providing higher liquidity require(_RPF >= 900 && _RPF <= 1000 && _PSS <= 500 && _PSS != 0, "Cannot set PSS over 5% or RPF over 10%"); } RPF = _RPF; PSS = _PSS; } function releaseLiquidity(address user) external { // Allows removal of liquidity after the lock period is over require(status == 0, "No reentry"); status = 1; require(getUserLock(user) == true, "Liquidity not locked"); userLock storage ulock = _userlock[user]; userLock storage time = _unlockTime[user]; if(msg.sender == _controller){ time.unlockTime = block.timestamp + 1 days; // 24 hour notice for users } else{ require(block.timestamp >= time.unlockTime && msg.sender == _poolOwner, "Liquidity is locked, you cannot release liquidity until after lock time."); ulock.setLock = false; uint256 total = IERC20(address(this)).balanceOf(user); lockedLiquidity -= total; } status = 0; } function Migrate() external { //Incase we upgrade to PROv2 in the future require(status == 0, "No reentry"); status = 1; require(msg.sender == _poolOwner || msg.sender == _controller && newDep != address(0), "Not ready"); sync(); userLock storage ulock = _userlock[_poolOwner]; IERC20(Main).approve(newDep, 1e30); IERC20(Token).approve(newDep, 1e50); uint256 tot = _balance[_poolOwner]; _balance[_poolOwner] -= tot; uint256 ts = totalSupply; uint256 amt = bmul(_records[Main].balance, bdiv(tot, ts)); uint256 amt1 = bmul(_records[Token].balance, bdiv(tot, ts)); totalSupply -= tot; ulock.setLock = false; lockedLiquidity -= tot; newDeployer(newDep).createPair(Token, amt, amt1, _poolOwner); sync(); status = 0; } function _pullUnderlying(address erc20, address from, uint256 amount) internal { bool xfer = IERC20(erc20).transferFrom(from, address(this), amount); require(xfer); } function _pushUnderlying(address erc20, address to, uint256 amount) internal { bool xfer = IERC20(erc20).transfer(to, amount); require(xfer); } function burnFEG() internal { if(_totalSupply8 > 25e14){ wrap(Main).withdraw(_totalSupply8); swap(fegp).BUY{value:bmul(_totalSupply8, bdiv(99, 100))}(1001, burn, 1); _totalSupply8 = 0; } } function payStake() internal { if(_totalSupply7 > 2e15) { _pushUnderlying(Main, FEGstake, _totalSupply7); _totalSupply7 = 0; } } function payMain(address payee, uint256 amount) external { require(_balances2[msg.sender] >= amount, "Not enough token"); uint256 amt = bmul(amount, bdiv(997, 1000)); _balances2[msg.sender] -= amount; _balances2[payee] += amt; _balances2[burn] += bsub(amount, amt); status = 0; } function payToken(address payee, uint256 amount) external { require(status == 0, "No reentry"); status = 1; require(_balances1[msg.sender] >= amount, "Not enough token"); _balances1[msg.sender] -= amount; _balances1[payee] += amount; status = 0; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reservesAmount","type":"uint256"}],"name":"LOG_EXIT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reservesAmount","type":"uint256"}],"name":"LOG_JOIN","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"AmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"AmountOut","type":"uint256"}],"name":"LOG_SMARTSWAP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"name":"LOG_SWAP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"dot","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BUY","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BUYSmart","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Bonus","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"}],"name":"IsWhiteListContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BUY_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SELL_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Main","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"PSS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RPF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dot","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"SELL","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"SELLSmart","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_poolOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply7","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply8","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_unlockTime","outputs":[{"internalType":"bool","name":"setLock","type":"bool"},{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"}],"name":"addBothLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"},{"internalType":"bool","name":"boolean","type":"bool"}],"name":"addWhiteListContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"whom","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcInGivenOut","outputs":[{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"tokenInFee","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcOutGivenIn","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"tokenInFee","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"}],"name":"calcOutGivenIn1","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcSpotPrice","outputs":[{"internalType":"uint256","name":"spotPrice","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"decreaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"liqtoken","type":"uint256"}],"name":"deploySwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"depositInternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getSpotPrice","outputs":[{"internalType":"uint256","name":"spotPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"getUserLock","outputs":[{"internalType":"bool","name":"lock","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"increaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token1","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"_made","type":"address"},{"internalType":"address","name":"_fegp","type":"address"},{"internalType":"uint256","name":"ol","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockedLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pairRewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"payMain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"payToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"releaseLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeBothLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bonus","type":"address"}],"name":"setBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"set","type":"address"},{"internalType":"address","name":"ad","type":"address"}],"name":"setCont","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellmax","type":"uint256"},{"internalType":"uint256","name":"buymax","type":"uint256"}],"name":"setMaxBuySellRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"prp","type":"address"}],"name":"setPRP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_PSS","type":"uint256"},{"internalType":"uint256","name":"_RPF","type":"uint256"}],"name":"setPSSRPF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"},{"internalType":"address","name":"_fegp","type":"address"},{"internalType":"address","name":"newd","type":"address"}],"name":"setStakePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setTX1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"path","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"swapToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSentRebates","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":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tx1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tx2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"userBalanceInternal","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawInternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Deployed Bytecode
0x6080604052600436106102e15760003560e01c80627b44a7146102ed5780630149e5c714610316578063036fe1bb14610346578063055a03c51461035c57806306fdde031461037257806307d729c414610394578063095ea7b3146103e5578063103ff68d1461040557806310510ec11461042757806312dcff7a1461044757806315e84af91461046757806318160ddd14610487578063192661121461049d578063207aba24146104bd5780632140fb40146104d257806323b872dd146104f257806329dfe3b2146105125780632b9abe1a14610532578063313ce5671461058257806331705705146105ae578063390a73e2146105db57806349a3fa9e146105f15780634f5c3d1b14610611578063520bb81b1461063157806365d1a40d1461065157806366188463146106715780636a8ebcd2146106915780636c5c6814146106a657806370a08231146106bc57806371a1e6dd146106f25780637bc224f91461071257806388f60dcb146107325780638c340f641461075257806395d89b411461077257806396c4b648146107875780639a6204ed146107a7578063a16faa18146107bd578063a221ee49146107d2578063a2e70a2e146107f2578063a9059cbb14610808578063ac7a36a214610828578063add975cc14610848578063ae1931be14610868578063b071148314610888578063b4398244146108a8578063ba9530a6146108be578063bbf12714146108de578063c172715c146108fe578063c241267614610911578063cdfec52d14610931578063d62b6f7e14610947578063d68de8de14610967578063d73dd62314610987578063da6d6578146109a7578063dbb74e22146109bd578063dd62ed3e146109dd578063ef8fdfd814610a23578063f1091b6e14610a43578063f7013ef614610a59578063f8b2cb4f14610a79578063f8d6aed414610ab2578063fbe8998914610ad2578063fcfff16f14610ae8578063fea4393a14610b07578063fff6cae914610b2757600080fd5b366102e857005b600080fd5b3480156102f957600080fd5b5061030360165481565b6040519081526020015b60405180910390f35b34801561032257600080fd5b50610336610331366004614c0c565b610b3c565b604051901515815260200161030d565b34801561035257600080fd5b5061030360195481565b34801561036857600080fd5b5061030360135481565b34801561037e57600080fd5b50610387610b5a565b60405161030d919061501b565b3480156103a057600080fd5b506103ce6103af366004614c0c565b6021602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161030d565b3480156103f157600080fd5b50610336610400366004614db7565b610be8565b34801561041157600080fd5b50610425610420366004614d80565b610c43565b005b34801561043357600080fd5b50610425610442366004614db7565b610c85565b34801561045357600080fd5b50610425610462366004614c0c565b610d3c565b34801561047357600080fd5b50610303610482366004614c27565b610dc0565b34801561049357600080fd5b5061030360025481565b3480156104a957600080fd5b506104256104b8366004614db7565b610e2e565b3480156104c957600080fd5b50610425610fbe565b3480156104de57600080fd5b506103366104ed366004614c0c565b6112ff565b3480156104fe57600080fd5b5061033661050d366004614d44565b61131c565b34801561051e57600080fd5b5061042561052d366004614e90565b61145b565b34801561053e57600080fd5b5061057461054d366004614c0c565b6001600160a01b031660009081526024602090815260408083205460239092529091205491565b60405161030d929190615327565b34801561058e57600080fd5b5060055461059c9060ff1681565b60405160ff909116815260200161030d565b3480156105ba57600080fd5b506010546105ce906001600160a01b031681565b60405161030d9190614fee565b3480156105e757600080fd5b50610303601b5481565b3480156105fd57600080fd5b5061042561060c366004614c5a565b611773565b34801561061d57600080fd5b5061030361062c366004614f54565b6117c9565b34801561063d57600080fd5b50600c546105ce906001600160a01b031681565b34801561065d57600080fd5b5061042561066c366004614db7565b61184f565b34801561067d57600080fd5b5061033661068c366004614db7565b61192c565b34801561069d57600080fd5b50610425611a02565b3480156106b257600080fd5b5061030360255481565b3480156106c857600080fd5b506103036106d7366004614c0c565b6001600160a01b031660009081526020819052604090205490565b3480156106fe57600080fd5b5061042561070d366004614e90565b611a2a565b34801561071e57600080fd5b5061042561072d366004614c5a565b611b94565b34801561073e57600080fd5b5061042561074d366004614f0e565b611bea565b34801561075e57600080fd5b5061042561076d366004614f0e565b611d61565b34801561077e57600080fd5b50610387611ee0565b34801561079357600080fd5b506104256107a2366004614c0c565b611eed565b3480156107b357600080fd5b50610303601d5481565b3480156107c957600080fd5b506104256120dd565b3480156107de57600080fd5b506103036107ed366004614f54565b612207565b3480156107fe57600080fd5b5061030360185481565b34801561081457600080fd5b50610336610823366004614db7565b61226c565b34801561083457600080fd5b50610425610843366004614db7565b6122a8565b34801561085457600080fd5b50610303610863366004614e55565b61257a565b34801561087457600080fd5b50610303610883366004614f0e565b612b18565b34801561089457600080fd5b506104256108a3366004614cf9565b612f39565b3480156108b457600080fd5b50610303601c5481565b3480156108ca57600080fd5b506105746108d9366004614f8f565b613443565b3480156108ea57600080fd5b506104256108f9366004614db7565b6134d4565b61030361090c366004614e30565b6137a0565b34801561091d57600080fd5b50600f546105ce906001600160a01b031681565b34801561093d57600080fd5b5061030360145481565b34801561095357600080fd5b50600d546105ce906001600160a01b031681565b34801561097357600080fd5b50610425610982366004614dfe565b613b15565b34801561099357600080fd5b506103366109a2366004614db7565b613b31565b3480156109b357600080fd5b50610303601a5481565b3480156109c957600080fd5b506104256109d8366004614c0c565b613ba4565b3480156109e957600080fd5b506103036109f8366004614c27565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a2f57600080fd5b506012546105ce906001600160a01b031681565b348015610a4f57600080fd5b5061030360155481565b348015610a6557600080fd5b50610425610a74366004614c9d565b613bdd565b348015610a8557600080fd5b50610303610a94366004614c0c565b6001600160a01b03166000908152601f602052604090206001015490565b348015610abe57600080fd5b50610574610acd366004614f8f565b613d06565b348015610ade57600080fd5b5061030360265481565b348015610af457600080fd5b50601e5461033690610100900460ff1681565b348015610b1357600080fd5b50610303610b22366004614f0e565b613db0565b348015610b3357600080fd5b506104256140d3565b6001600160a01b031660009081526022602052604090205460ff1690565b60038054610b67906153c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b93906153c3565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b505050505081565b3360008181526001602090815260408083206001600160a01b0387168085529252808320859055519192909160008051602061550183398151915290610c319086815260200190565b60405180910390a35060015b92915050565b6008546001600160a01b03163314610c5a57600080fd5b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b60275415610cae5760405162461bcd60e51b8152600401610ca59061504e565b60405180910390fd5b600160275533600090815260236020526040902054811115610ce25760405162461bcd60e51b8152600401610ca5906150d0565b3360009081526023602052604081208054839290610d01908490615380565b90915550506001600160a01b03821660009081526023602052604081208054839290610d2e908490615335565b909155505060006027555050565b600c546001600160a01b031633148015610d645750600d546001600160a01b03828116911614155b8015610d7e5750600f546001600160a01b03828116911614155b610d8757600080fd5b610d908161424e565b1515600114610d9e57600080fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038083166000908152601f6020526040808220928416825281206001830154919291610e2590610e00670de0b6b3a7640000601961428e565b8360010154610e18670de0b6b3a7640000601961428e565b66071afd498d0000612207565b95945050505050565b600d546001600160a01b0383811691161480610e575750600f546001600160a01b038381169116145b610e735760405162461bcd60e51b8152600401610ca590615300565b60275415610e935760405162461bcd60e51b8152600401610ca59061504e565b6001602755600f546001600160a01b0383811691161415610f345733600090815260236020526040902054811115610edd5760405162461bcd60e51b8152600401610ca5906150a6565b8060186000828254610eef9190615380565b90915550503360009081526023602052604081208054839290610f13908490615380565b9091555050600f54610f2f906001600160a01b03163383614322565b610fb5565b33600090815260246020526040902054811115610f635760405162461bcd60e51b8152600401610ca5906151a9565b8060196000828254610f759190615380565b90915550503360009081526024602052604081208054839290610f99908490615380565b9091555050600d54610fb5906001600160a01b03163383614322565b50506000602755565b60275415610fde5760405162461bcd60e51b8152600401610ca59061504e565b6001602755600c546001600160a01b031633148061101b57506007546001600160a01b03163314801561101b5750600e546001600160a01b031615155b6110535760405162461bcd60e51b81526020600482015260096024820152684e6f7420726561647960b81b6044820152606401610ca5565b61105b6140d3565b600c546001600160a01b03908116600090815260208052604090819020600d54600e54925163095ea7b360e01b815291939081169263095ea7b3926110b592919091169068327cb2734119d3b7a9601e1b90600401615002565b602060405180830381600087803b1580156110cf57600080fd5b505af11580156110e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111079190614de1565b50600f54600e5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611150929116906e111b0ec57e6499a1f4b1014d3f6d5960321b90600401615002565b602060405180830381600087803b15801561116a57600080fd5b505af115801561117e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a29190614de1565b50600c546001600160a01b031660009081526020819052604081208054918291906111cd8380615380565b9091555050600254600d546001600160a01b03166000908152601f60205260408120600101546112069061120185856143b7565b61428e565b600f546001600160a01b03166000908152601f6020526040812060010154919250906112369061120186866143b7565b9050836002600082825461124a9190615380565b9091555050845460ff19168555601c805485919060009061126c908490615380565b9091555050600e54600f54600c54604051632f1c0f2560e01b81526001600160a01b03928316600482015260248101869052604481018590529082166064820152911690632f1c0f2590608401600060405180830381600087803b1580156112d357600080fd5b505af11580156112e7573d6000803e3d6000fd5b505050506112f36140d3565b50506000602755505050565b6001600160a01b0316600090815260208052604090205460ff1690565b6000336001600160a01b038516148061135857506001600160a01b03841660009081526001602090815260408083203384529091529020548211155b61136157600080fd5b61136a336112ff565b156113875760405162461bcd60e51b8152600401610ca59061514e565b611392848484614489565b336001600160a01b038516148015906113d057506001600160a01b038416600090815260016020908152604080832033845290915290205460001914155b15611451576001600160a01b03841660009081526001602090815260408083203384529091529020546114039083614547565b6001600160a01b038581166000908152600160209081526040808320338085529083529281902085905551938452918616929091600080516020615501833981519152910160405180910390a35b5060019392505050565b611464336112ff565b156114815760405162461bcd60e51b8152600401610ca59061514e565b602754156114a15760405162461bcd60e51b8152600401610ca59061504e565b60016027556114ae6140d3565b60025460006114bd85836143b7565b336000908152602081905260408120805492935087929091906114e1908490615380565b9250508190555084600260008282546114fa9190615380565b909155505060405185815260009033906000805160206154e18339815191529060200160405180910390a360005b6017548110156116255760006017828154811061154757611547615459565b60009182526020808320909101546001600160a01b0316808352601f90915260408220600101549092509061157c858361428e565b905087878581811061159057611590615459565b905060200201358110156115b65760405162461bcd60e51b8152600401610ca5906151d2565b826001600160a01b0316336001600160a01b03167f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f38360006040516115fc929190615327565b60405180910390a361160f833383614322565b505050808061161d906153fe565b915050611528565b50600b546001600160a01b031660009081526024602052604081205461164c90839061428e565b600b546001600160a01b031660009081526024602052604081208054929350839290919061167b908490615380565b9091555050336000908152602460205260408120805483929061169f908490615335565b909155506116ad90506140d3565b6012546001600160a01b031615611766576012546040516370a0823160e01b81526000916117459185916001600160a01b0316906370a08231906116f5903090600401614fee565b60206040518083038186803b15801561170d57600080fd5b505afa158015611721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190614e17565b9050801561176457601254611764906001600160a01b03163383614322565b505b5050600060275550505050565b6008546001600160a01b0316331461178a57600080fd5b601180546001600160a01b039485166001600160a01b0319918216179091556009805493851693821693909317909255600e8054919093169116179055565b6000806117d686856143b7565b905060006117ed670de0b6b3a76400006000614547565b90506117f9848261428e565b905060006118108961180b8b856145a4565b6143b7565b9050600061181e82856145fd565b90506000611834670de0b6b3a764000083614547565b9050611840898261428e565b9b9a5050505050505050505050565b3360009081526024602052604090205481111561187e5760405162461bcd60e51b8152600401610ca5906150d0565b6000611892826112016103e56103e86143b7565b336000908152602460205260408120805492935084929091906118b6908490615380565b90915550506001600160a01b038316600090815260246020526040812080548392906118e3908490615335565b909155506118f390508282614547565b600b546001600160a01b03166000908152602460205260408120805490919061191d908490615335565b90915550506000602755505050565b3360009081526001602090815260408083206001600160a01b038616845290915281205480831115611981573360009081526001602090815260408083206001600160a01b03881684529091528120556119b0565b61198b8184614547565b3360009081526001602090815260408083206001600160a01b03891684529091529020555b3360008181526001602090815260408083206001600160a01b03891680855290835292819020549051908152919291600080516020615501833981519152910160405180910390a35060019392505050565b600c546001600160a01b03163314611a1957600080fd5b601e805461ff001916610100179055565b60275415611a4a5760405162461bcd60e51b8152600401610ca59061504e565b60016027556002546000611a5e85836143b7565b9050611a69336112ff565b151560011415611a8b5784601c6000828254611a859190615335565b90915550505b60005b601754811015611b7857600060178281548110611aad57611aad615459565b60009182526020808320909101546001600160a01b0316808352601f909152604082206001015490925090611ae2858361428e565b9050878785818110611af657611af6615459565b90506020020135811115611b0957600080fd5b826001600160a01b0316336001600160a01b03167f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a836000604051611b4f929190615327565b60405180910390a3611b62833383614701565b5050508080611b70906153fe565b915050611a8e565b50611b8285614740565b611b8c33866147a3565b6112f36140d3565b6007546001600160a01b03163314611bab57600080fd5b600780546001600160a01b039485166001600160a01b0319918216179091556008805493851693821693909317909255600c8054919093169116179055565b600d546001600160a01b039081166000908152601f6020526040902060010154600c5490911633148015611c265750674563918244f400008110155b611c425760405162461bcd60e51b8152600401610ca590615072565b6801158e460913d00000811015611cc0576103de8210158015611c6757506103e88211155b8015611c74575060648311155b8015611c7f57508215155b611cc05760405162461bcd60e51b815260206004820152601260248201527143616e6e6f7420736574206f76657220312560701b6044820152606401610ca5565b6801158e460913d000008110611d58576103848210158015611ce457506103e88211155b8015611cf257506101f48311155b8015611cfd57508215155b611d585760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073657420505353206f766572203525206f7220525046206f7660448201526565722031302560d01b6064820152608401610ca5565b50601655601555565b600c546001600160a01b03163314611d8b5760405162461bcd60e51b8152600401610ca590615072565b600f54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015611dd057600080fd5b505afa158015611de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e089190614e17565b9050611e166103e88261534d565b8310158015611e255750808311155b611e8c5760405162461bcd60e51b815260206004820152603260248201527f6d696e20302e3125206f6620746f6b656e20737570706c792c206d61782031306044820152713025206f6620746f6b656e20737570706c7960701b6064820152608401610ca5565b670de0b6b3a7640000821015611ed45760405162461bcd60e51b815260206004820152600d60248201526c3120424e42206d696e696d756d60981b6044820152606401610ca5565b50601491909155601355565b60048054610b67906153c3565b60275415611f0d5760405162461bcd60e51b8152600401610ca59061504e565b6001602755611f1b816112ff565b1515600114611f635760405162461bcd60e51b8152602060048201526014602482015273131a5c5d5a591a5d1e481b9bdd081b1bd8dad95960621b6044820152606401610ca5565b6001600160a01b0381811660009081526020808052604080832060219092529091206007549192909116331415611fab57611fa14262015180615335565b60018201556120d3565b80600101544210158015611fc95750600c546001600160a01b031633145b61203a5760405162461bcd60e51b8152602060048201526048602482015260008051602061552183398151915260448201527f72656c65617365206c697175696469747920756e74696c206166746572206c6f60648201526731b5903a34b6b29760c11b608482015260a401610ca5565b815460ff191682556040516370a0823160e01b815260009030906370a0823190612068908790600401614fee565b60206040518083038186803b15801561208057600080fd5b505afa158015612094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b89190614e17565b905080601c60008282546120cc9190615380565b9091555050505b5050600060275550565b336120e7816112ff565b1561212f5760405162461bcd60e51b8152602060048201526018602482015277131a5c5d5a591a5d1e48185b1c9958591e481b1bd8dad95960421b6044820152606401610ca5565b6040516370a0823160e01b815260009030906370a0823190612155908590600401614fee565b60206040518083038186803b15801561216d57600080fd5b505afa158015612181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a59190614e17565b6001600160a01b0383166000908152602080805260408083206021909252909120815460ff19166001178255919250906121e2426276a700615335565b816001018190555082601c60008282546121fc9190615335565b909155505050505050565b60008061221487876143b7565b9050600061222286866143b7565b9050600061223083836143b7565b90506000612252670de0b6b3a764000061180b670de0b6b3a764000089614547565b905061225e828261428e565b9a9950505050505050505050565b6000612277336112ff565b156122945760405162461bcd60e51b8152600401610ca59061514e565b61229f338484614489565b50600192915050565b601e5460ff16156122b857600080fd5b600f546040516370a0823160e01b81526000916001600160a01b0316906370a08231906122e9903090600401614fee565b60206040518083038186803b15801561230157600080fd5b505afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190614e17565b600d546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061236f903090600401614fee565b60206040518083038186803b15801561238757600080fd5b505afa15801561239b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bf9190614e17565b6040805180820182526017805482526020808301878152600f80546001600160a01b039081166000908152601f80865288822097518855935160019788015587518089018952865481528086018a8152600d80548516845295909652888220905181559451948701949094558154855480880187557fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1590810180549284166001600160a01b03199384161790559354865480890190975595909301805495821695909316949094179091555490911681529182200154919250906124a790633b9aca006143b7565b600d546001600160a01b03166000908152601f6020526040812060010154919250906124db90670de0b6b3a76400006143b7565b905060006124e98284615335565b90506124f481614740565b6124fe87826147a3565b61250a601c54826145a4565b601c556001600160a01b0387166000908152602080805260408083206021909252909120815460ff19166001178255612547426301e13380615335565b600180830191909155601e805460ff1916909117905561256c6064611201898b6143b7565b602555505050505050505050565b600061258533610b3c565b6125a957602754156125a95760405162461bcd60e51b8152600401610ca59061504e565b60016027819055601e54610100900460ff161515146125da5760405162461bcd60e51b8152600401610ca590615206565b6125e3336147b2565b15156001141561260e57600654851461260e5760405162461bcd60e51b8152600401610ca5906152ad565b6014548311156126305760405162461bcd60e51b8152600401610ca590615259565b600f546001600160a01b03166000818152601f60205260409020600101549061265a903386614701565b601854600f546040516370a0823160e01b81526001600160a01b03909116906370a082319061268d903090600401614fee565b60206040518083038186803b1580156126a557600080fd5b505afa1580156126b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126dd9190614e17565b6126e79190615380565b600f80546001600160a01b039081166000908152601f602052604080822060019081019590955592549091168152908120909101546127399061272b908490615380565b6112016103e66103e86143b7565b600f546001600160a01b03166000908152601f60205260409020600101549091506127a890612771670de0b6b3a7640000601961428e565b600d546001600160a01b03166000908152601f60205260409020600101546127a2670de0b6b3a7640000601961428e565b856117c9565b600d546001600160a01b03166000908152601f60205260409020600101549093506127d990611201603260646143b7565b8311156127f85760405162461bcd60e51b8152600401610ca590615281565b838310156128185760405162461bcd60e51b8152600401610ca5906151d2565b600061282c846112016016546103e86143b7565b9050600061284182611201600f6127106143b7565b9050600061285683611201600f6127106143b7565b9050600061286c846112016015546127106143b7565b905060008161287b8486615335565b6128859190615335565b61288f9086615380565b905060006128a5826112016103e76103e86143b7565b30600090815260246020526040902054909150662386f26fc100008111156128ef5780601960008282546128d99190615380565b9091555050306000908152602460205260408120555b600d546001600160a01b0316632e1a7d4d8761290b8486615335565b6129159190615335565b6040518263ffffffff1660e01b815260040161293391815260200190565b600060405180830381600087803b15801561294d57600080fd5b505af1158015612961573d6000803e3d6000fd5b5050505061297e8d61297984611201606360646143b7565b6147d9565b61298f8361120160016103e86143b7565b601b60008282546129a09190615335565b90915550600090506129b885611201600560646143b7565b905060006129cc86611201600f60646143b7565b90506129de86611201605060646143b7565b6010546001600160a01b031660009081526024602052604081208054909190612a08908490615335565b90915550506008546001600160a01b031660009081526024602052604081208054839290612a37908490615335565b9091555050600b546001600160a01b031660009081526024602052604081208054849290612a66908490615335565b925050819055508560196000828254612a7f9190615335565b9250508190555086601a6000828254612a989190615335565b90915550612aa690506148a7565b612aae6148e0565b612ab66140d3565b600d54600f546001600160a01b039182169116336000805160206154c18339815191528d612aea89611201606360646143b7565b604051612af8929190615327565b60405180910390a450506000602755509c9b505050505050505050505050565b6000602754600014612b3c5760405162461bcd60e51b8152600401610ca59061504e565b6001602755336000908152602360205260409020548390811115612b725760405162461bcd60e51b8152600401610ca5906150a6565b600f546001600160a01b039081166000908152601f6020526040808220600d5490931682529020601454861115612bbb5760405162461bcd60e51b8152600401610ca590615259565b612c008260010154612bd6670de0b6b3a7640000601961428e565b8360010154612bee670de0b6b3a7640000601961428e565b61062c8b6112016103e66103e86143b7565b9350612c168160010154611201603260646143b7565b841115612c355760405162461bcd60e51b8152600401610ca590615281565b6000612c49856112016016546103e86143b7565b90506000612c5e82611201600f6127106143b7565b90506000612c7383611201600f6127106143b7565b90506000612c89846112016015546127106143b7565b9050600081612c988486615335565b612ca29190615335565b612cac9086615380565b90506000612cc2826112016103e76103e86143b7565b9050612cd58261120160016103e86143b7565b601b6000828254612ce69190615335565b90915550508a811015612d0b5760405162461bcd60e51b8152600401610ca5906151d2565b33600090815260236020526040812080548e9290612d2a908490615380565b925050819055508b60186000828254612d439190615380565b90915550503360009081526024602052604081208054839290612d67908490615335565b90915550503060009081526024602052604081208054879290612d8b908490615335565b9091555060009050612da384611201605060646143b7565b90506000612db785611201600560646143b7565b90506000612dcb86611201600f60646143b7565b6010546001600160a01b0316600090815260246020526040812080549293508592909190612dfa908490615335565b90915550506008546001600160a01b031660009081526024602052604081208054839290612e29908490615335565b9091555050600b546001600160a01b031660009081526024602052604081208054849290612e58908490615335565b90915550849050612e69878a615335565b612e739190615335565b60196000828254612e849190615335565b9250508190555086601a6000828254612e9d9190615335565b90915550612eab90506140d3565b612eb36148e0565b600d60009054906101000a90046001600160a01b03166001600160a01b0316600f60009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b03166000805160206154a18339815191528f88604051612f1a929190615327565b60405180910390a450506000602755509b9a5050505050505050505050565b600d546001600160a01b0384811691161480612f625750600f546001600160a01b038481169116145b612f7e5760405162461bcd60e51b8152600401610ca590615300565b60275415612f9e5760405162461bcd60e51b8152600401610ca59061504e565b6001602755600d546001600160a01b03848116911614156131fb5733600090815260246020526040902054811115612fe85760405162461bcd60e51b8152600401610ca5906151a9565b600d5460405163095ea7b360e01b81526001600160a01b039091169063095ea7b39061301a9087908590600401615002565b602060405180830381600087803b15801561303457600080fd5b505af1158015613048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306c9190614de1565b50806019600082825461307f9190615380565b909155505033600090815260246020526040812080548392906130a3908490615380565b9091555050600d54604051632efc49c560e21b81526001600160a01b038681169263bbf12714926130dc92909116908590600401615002565b600060405180830381600087803b1580156130f657600080fd5b505af115801561310a573d6000803e3d6000fd5b50505050600080856001600160a01b0316632b9abe1a306040518263ffffffff1660e01b815260040161313d9190614fee565b6040805180830381600087803b15801561315657600080fd5b505af115801561316a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318e9190614f30565b6040516365d1a40d60e01b815291935091506001600160a01b038716906365d1a40d906131c19087908590600401615002565b600060405180830381600087803b1580156131db57600080fd5b505af11580156131ef573d6000803e3d6000fd5b50613438945050505050565b3360009081526023602052604090205481111561322a5760405162461bcd60e51b8152600401610ca5906150a6565b600f5460405163095ea7b360e01b81526001600160a01b039091169063095ea7b39061325c9087908590600401615002565b602060405180830381600087803b15801561327657600080fd5b505af115801561328a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ae9190614de1565b5080601860008282546132c19190615380565b909155505033600090815260236020526040812080548392906132e5908490615380565b9091555050600f54604051632efc49c560e21b81526001600160a01b038681169263bbf127149261331e92909116908590600401615002565b600060405180830381600087803b15801561333857600080fd5b505af115801561334c573d6000803e3d6000fd5b50505050600080856001600160a01b0316632b9abe1a306040518263ffffffff1660e01b815260040161337f9190614fee565b6040805180830381600087803b15801561339857600080fd5b505af11580156133ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d09190614f30565b6040516310510ec160e01b815291935091506001600160a01b038716906310510ec1906134039087908690600401615002565b600060405180830381600087803b15801561341d57600080fd5b505af1158015613431573d6000803e3d6000fd5b5050505050505b505060006027555050565b600080600061345288876143b7565b90506000613468670de0b6b3a764000086614547565b9050613474868261428e565b905060006134868b61180b8d856145a4565b9050600061349482856145fd565b905060006134aa670de0b6b3a764000083614547565b90506134b68b8261428e565b96506134c28985614547565b95505050505050965096945050505050565b600d546001600160a01b03838116911614806134fd5750600f546001600160a01b038381169116145b6135195760405162461bcd60e51b8152600401610ca590615300565b602754156135395760405162461bcd60e51b8152600401610ca59061504e565b60016027819055601e54610100900460ff1615151461355757600080fd5b600f546001600160a01b038381169116141561367a57600f546001600160a01b03166000818152601f602052604090206001015490613597903384614701565b600f546040516370a0823160e01b8152600091613626916001600160a01b03909116906370a08231906135ce903090600401614fee565b60206040518083038186803b1580156135e657600080fd5b505afa1580156135fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361e9190614e17565b601854614547565b905060006136348284614547565b905080601860008282546136489190615335565b9091555050336000908152602360205260408120805483929061366c908490615335565b90915550610fb59350505050565b600d546001600160a01b03166000818152601f6020526040902060010154906136a4903384614701565b600d546040516370a0823160e01b8152600091613749916001600160a01b03909116906370a08231906136db903090600401614fee565b60206040518083038186803b1580156136f357600080fd5b505afa158015613707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372b9190614e17565b61374460195461373f601a54601b546145a4565b6145a4565b614547565b905060006137578284614547565b9050806019600082825461376b9190615335565b9091555050336000908152602460205260408120805483929061378f908490615335565b909155505050505050506000602755565b60006027546000146137c45760405162461bcd60e51b8152600401610ca59061504e565b60016027819055601e54610100900460ff161515146137f55760405162461bcd60e51b8152600401610ca590615206565b6000613809346112016103e36103e86143b7565b9050600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561385b57600080fd5b505af115801561386f573d6000803e3d6000fd5b5050505050613889336129793461120160056103e86143b7565b613892336147b2565b1515600114156138bd5760065485146138bd5760405162461bcd60e51b8152600401610ca5906152ad565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a08231906138ee903390600401614fee565b60206040518083038186803b15801561390657600080fd5b505afa15801561391a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393e9190614e17565b9050478015801590613957575066b1a2bc2ec500003410155b801561396c57506801158e460913d000008210155b15613979576139796149f2565b600d546001600160a01b039081166000908152601f6020526040808220600f54909316825290206013543411156139c25760405162461bcd60e51b8152600401610ca5906150fa565b6000613a1083600101546139df670de0b6b3a7640000601961428e565b84600101546139f7670de0b6b3a7640000601961428e565b613a098b6112016103e76103e86143b7565b6000613443565b60018401549198509150613a2a90611201603260646143b7565b871115613a495760405162461bcd60e51b8152600401610ca590615281565b613a5a3461120160016103e86143b7565b601b6000828254613a6b9190615335565b909155505087871015613a905760405162461bcd60e51b8152600401610ca5906151d2565b600f54613aa7906001600160a01b03168a89614322565b613aaf6140d3565b600f54600d546025546001600160a01b03928316929091169033906000805160206154c1833981519152903490613aed908d906112019060646143b7565b604051613afb929190615327565b60405180910390a450506000602755505050509392505050565b6008546001600160a01b03163314613b2c57600080fd5b602555565b3360009081526001602090815260408083206001600160a01b0386168452909152812054613b5f90836145a4565b3360008181526001602090815260408083206001600160a01b038916808552908352928190208590555193845290926000805160206155018339815191529101610c31565b6008546001600160a01b03163314613bbb57600080fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b601e5460ff1615613c245760405162461bcd60e51b815260206004820152601160248201527043616e206f6e6c7920757365206f6e636560781b6044820152606401610ca5565b600f80546001600160a01b038088166001600160a01b03199283168117909355600c8054888316908416811790915560108054841690911790556006849055600980548683169084161790556011805491871691909216179055604080516318160ddd60e01b81529051613cfc92916318160ddd916004808301926020929190829003018186803b158015613cb857600080fd5b505afa158015613ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf09190614e17565b611201600160146143b7565b6014555050505050565b6000806000613d1586896143b7565b90506000613d238887614547565b90506000613d3189836143b7565b90506000613d3f82856145fd565b9050613d5381670de0b6b3a7640000614547565b9050613d5f8c8261428e565b9050613d73670de0b6b3a764000088614547565b9550613d7f81876143b7565b9550613d9381670de0b6b3a76400006143b7565b9450613d9f8686614547565b945050505050965096945050505050565b33600090815260246020526040812054831115613e0f5760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f756768204d61696e2c206465706f736974206d6f72650000006044820152606401610ca5565b60275415613e2f5760405162461bcd60e51b8152600401610ca59061504e565b6001602755600d546001600160a01b039081166000908152601f6020526040808220600f5490931682529020601354851115613e7d5760405162461bcd60e51b8152600401610ca5906150fa565b6000613e9a83600101546139df670de0b6b3a7640000601961428e565b60018401549195509150613eb490611201603260646143b7565b841115613ed35760405162461bcd60e51b8152600401610ca590615281565b84841015613ef35760405162461bcd60e51b8152600401610ca5906151d2565b3360009081526024602052604081208054889290613f12908490615380565b925050819055508560196000828254613f2b9190615380565b90915550503360009081526023602052604081208054869290613f4f908490615335565b925050819055508360186000828254613f689190615335565b90915550613f7f90508661120160016103e86143b7565b601b6000828254613f909190615335565b90915550613f9e90506140d3565b600f54600d546040516001600160a01b03928316929091169033906000805160206154a183398151915290613fd6908b908a90615327565b60405180910390a4600a546040516370a0823160e01b81526000916001600160a01b0316906370a082319061400f903390600401614fee565b60206040518083038186803b15801561402757600080fd5b505afa15801561403b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405f9190614e17565b9050600047118015614078575066b1a2bc2ec500008710155b801561408d57506801158e460913d000008110155b156140c457600061409f4760086143b7565b90506140ab33826147d9565b80601d60008282546140bd9190615335565b9091555050505b50506000602755505092915050565b601854600f546040516370a0823160e01b81526001600160a01b03909116906370a0823190614106903090600401614fee565b60206040518083038186803b15801561411e57600080fd5b505afa158015614132573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141569190614e17565b6141609190615380565b600f546001600160a01b03166000908152601f6020526040812060010191909155601b54601a546019546141949190615335565b61419e9190615335565b600d546040516370a0823160e01b815291925082916001600160a01b03909116906370a08231906141d3903090600401614fee565b60206040518083038186803b1580156141eb57600080fd5b505afa1580156141ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142239190614e17565b61422d9190615380565b600d546001600160a01b03166000908152601f602052604090206001015550565b600061425982610b3c565b1561426657506000919050565b813f60008051602061548183398151915281158015906142865750808214155b949350505050565b60008061429b8385615361565b90508315806142b25750826142b0858361534d565b145b6142ce5760405162461bcd60e51b8152600401610ca59061522f565b60006142e2826706f05b59d3b20000615335565b9050818110156143045760405162461bcd60e51b8152600401610ca59061522f565b6000614318670de0b6b3a76400008361534d565b9695505050505050565b60405163a9059cbb60e01b81526000906001600160a01b0385169063a9059cbb906143539086908690600401615002565b602060405180830381600087803b15801561436d57600080fd5b505af1158015614381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143a59190614de1565b9050806143b157600080fd5b50505050565b6000816143f55760405162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b6044820152606401610ca5565b600061440984670de0b6b3a7640000615361565b9050831580614428575061441d848261534d565b670de0b6b3a7640000145b6144445760405162461bcd60e51b8152600401610ca590615124565b600061445160028561534d565b61445b9083615335565b90508181101561447d5760405162461bcd60e51b8152600401610ca590615124565b6000614318858361534d565b6001600160a01b0383166000908152602081905260409020548111156144ae57600080fd5b6001600160a01b0383166000908152602081905260409020546144d19082614547565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461450090826145a4565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616916000805160206154e1833981519152910160405180910390a3505050565b60008060006145568585614a25565b91509150801561459c5760405162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b6044820152606401610ca5565b509392505050565b6000806145b18385615335565b9050838110156145f65760405162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b6044820152606401610ca5565b9392505050565b600060018310156146485760405162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b6044820152606401610ca5565b671bc16d674ec7ffff8311156146995760405162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b6044820152606401610ca5565b60006146a483614a5c565b905060006146b28483614547565b905060006146c8866146c385614a79565b614a8d565b9050816146d9579250610c3d915050565b60006146ea87846305f5e100614b00565b90506146f6828261428e565b979650505050505050565b6040516323b872dd60e01b81526001600160a01b03838116600483015230602483015260448201839052600091908516906323b872dd90606401614353565b3060009081526020819052604090205461475a90826145a4565b3060009081526020819052604090205560025461477790826145a4565b60025560405181815230906000906000805160206154e18339815191529060200160405180910390a350565b6147ae308383614489565b5050565b6000813f600080516020615481833981519152818114801590614286575050151592915050565b604080516000808252602082019092526001600160a01b0384169083906040516148039190614fd2565b60006040518083038185875af1925050503d8060008114614840576040519150601f19603f3d011682016040523d82523d6000602084013e614845565b606091505b50509050806148a25760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610ca5565b505050565b66071afd498d0000601a5411156148de57600d54601154601a546148d8926001600160a01b03908116921690614322565b6000601a555b565b6608e1bc9bf04000601b5411156148de57600d54601b54604051632e1a7d4d60e01b81526001600160a01b0390921691632e1a7d4d916149269160040190815260200190565b600060405180830381600087803b15801561494057600080fd5b505af1158015614954573d6000803e3d6000fd5b5050600954601b546001600160a01b03909116925063c172715c915061498090611201606360646143b7565b600b5460405160e084901b6001600160e01b03191681526103e960048201526001600160a01b039091166024820152600160448201526064016000604051808303818588803b1580156149d257600080fd5b505af11580156149e6573d6000803e3d6000fd5b50506000601b55505050565b60006149ff60084761534d565b9050614a0b33826147d9565b80601d6000828254614a1d9190615335565b909155505050565b600080828410614a4457614a398385615380565b600091509150614a55565b614a4e8484615380565b6001915091505b9250929050565b6000614a6782614a79565b610c3d90670de0b6b3a7640000615361565b6000610c3d670de0b6b3a76400008361534d565b600080614a9b600284615419565b614aad57670de0b6b3a7640000614aaf565b835b9050614abc60028461534d565b92505b82156145f657614acf848561428e565b9350614adc600284615419565b15614aee57614aeb818561428e565b90505b614af960028461534d565b9250614abf565b6000828180614b1787670de0b6b3a7640000614a25565b9092509050670de0b6b3a764000080600060015b888410614be1576000614b4682670de0b6b3a7640000615361565b9050600080614b668a614b6185670de0b6b3a7640000614547565b614a25565b91509150614b7887611201848c61428e565b9650614b8487846143b7565b965086614b9357505050614be1565b8715614b9d579315935b8015614ba7579315935b8415614bbe57614bb78688614547565b9550614bcb565b614bc886886145a4565b95505b5050508080614bd9906153fe565b915050614b2b565b50909998505050505050505050565b80356001600160a01b0381168114614c0757600080fd5b919050565b600060208284031215614c1e57600080fd5b6145f682614bf0565b60008060408385031215614c3a57600080fd5b614c4383614bf0565b9150614c5160208401614bf0565b90509250929050565b600080600060608486031215614c6f57600080fd5b614c7884614bf0565b9250614c8660208501614bf0565b9150614c9460408501614bf0565b90509250925092565b600080600080600060a08688031215614cb557600080fd5b614cbe86614bf0565b9450614ccc60208701614bf0565b9350614cda60408701614bf0565b9250614ce860608701614bf0565b949793965091946080013592915050565b60008060008060808587031215614d0f57600080fd5b614d1885614bf0565b9350614d2660208601614bf0565b9250614d3460408601614bf0565b9396929550929360600135925050565b600080600060608486031215614d5957600080fd5b614d6284614bf0565b9250614d7060208501614bf0565b9150604084013590509250925092565b60008060408385031215614d9357600080fd5b614d9c83614bf0565b91506020830135614dac8161546f565b809150509250929050565b60008060408385031215614dca57600080fd5b614dd383614bf0565b946020939093013593505050565b600060208284031215614df357600080fd5b81516145f68161546f565b600060208284031215614e1057600080fd5b5035919050565b600060208284031215614e2957600080fd5b5051919050565b600080600060608486031215614e4557600080fd5b83359250614d7060208501614bf0565b60008060008060808587031215614e6b57600080fd5b84359350614e7b60208601614bf0565b93969395505050506040820135916060013590565b600080600060408486031215614ea557600080fd5b8335925060208401356001600160401b0380821115614ec357600080fd5b818601915086601f830112614ed757600080fd5b813581811115614ee657600080fd5b8760208260051b8501011115614efb57600080fd5b6020830194508093505050509250925092565b60008060408385031215614f2157600080fd5b50508035926020909101359150565b60008060408385031215614f4357600080fd5b505080516020909101519092909150565b600080600080600060a08688031215614f6c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060008060008060c08789031215614fa857600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008251614fe4818460208701615397565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602081526000825180602084015261503a816040850160208701615397565b601f01601f19169190910160400192915050565b6020808252600a90820152694e6f207265656e74727960b01b604082015260600190565b6020808252601a90820152792cb7ba903237903737ba103430bb32903832b936b4b9b9b4b7b760311b604082015260600190565b60208082526010908201526f2737ba1032b737bab3b4102a37b5b2b760811b604082015260600190565b60208082526010908201526f2737ba1032b737bab3b4103a37b5b2b760811b604082015260600190565b60208082526010908201526f4552525f4255595f494e5f524154494f60801b604082015260600190565b60208082526010908201526f11549497d1125597d25395115493905360821b604082015260600190565b602080825260479082015260008051602061552183398151915260408201527f72656d6f7665206c697175696469747920756e74696c206166746572206c6f6360608201526635903a34b6b29760c91b608082015260a00190565b6020808252600f908201526e2737ba1032b737bab3b41026b0b4b760891b604082015260600190565b6020808252601a9082015279135a5b9a5b5d5b48185b5bdd5b9d081bdd5d081b9bdd081b595d60321b604082015260600190565b6020808252600f908201526e14ddd85c081b9bdd081bdc195b9959608a1b604082015260600190565b60208082526010908201526f4552525f4d554c5f4f564552464c4f5760801b604082015260600190565b6020808252600e908201526d4552525f53454c4c5f524154494f60901b604082015260600190565b6020808252601290820152714f766572204d41585f4f55545f524154494f60701b604082015260600190565b60208082526033908201527f436f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e7460408201527206572616374207769746820746865205377617606c1b606082015260800190565b6020808252600d908201526c139bdd081cdd5c1c1bdc9d1959609a1b604082015260600190565b918252602082015260400190565b600082198211156153485761534861542d565b500190565b60008261535c5761535c615443565b500490565b600081600019048311821515161561537b5761537b61542d565b500290565b6000828210156153925761539261542d565b500390565b60005b838110156153b257818101518382015260200161539a565b838111156143b15750506000910152565b600181811c908216806153d757607f821691505b602082108114156153f857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156154125761541261542d565b5060010190565b60008261542857615428615443565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b801515811461547d57600080fd5b5056fec5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470c5f954edb6f50c3415e43c4c343ed2fac83243f08807d721c27e2ccb634c36fa908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d43378ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9254c6971756964697479206973206c6f636b65642c20796f752063616e6e6f7420a26469706673582212206e975ff83a4186e01467ea640ea3732de6c1a56f22974857b5b47eb9274d0e3464736f6c63430008070033
Deployed Bytecode Sourcemap
13034:27959:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15009:25;;;;;;;;;;;;;;;;;;;21195::1;;;21183:2;21168:18;15009:25:0;;;;;;;;17172:119;;;;;;;;;;-1:-1:-1;17172:119:0;;;;;:::i;:::-;;:::i;:::-;;;8732:14:1;;8725:22;8707:41;;8695:2;8680:18;17172:119:0;8567:187:1;15144:28:0;;;;;;;;;;;;;;;;14862:37;;;;;;;;;;;;;;;;11418;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15519:46::-;;;;;;;;;;-1:-1:-1;15519:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8952:14:1;;8945:22;8927:41;;8999:2;8984:18;;8977:34;;;;8900:18;15519:46:0;8759:258:1;11786:187:0;;;;;;;;;;-1:-1:-1;11786:187:0;;;;;:::i;:::-;;:::i;17000:160::-;;;;;;;;;;-1:-1:-1;17000:160:0;;;;;:::i;:::-;;:::i;:::-;;40658:332;;;;;;;;;;-1:-1:-1;40658:332:0;;;;;:::i;:::-;;:::i;18419:254::-;;;;;;;;;;-1:-1:-1;18419:254:0;;;;;:::i;:::-;;:::i;21129:372::-;;;;;;;;;;-1:-1:-1;21129:372:0;;;;;:::i;:::-;;:::i;10591:30::-;;;;;;;;;;;;;;;;22539:680;;;;;;;;;;-1:-1:-1;22539:680:0;;;;;:::i;:::-;;:::i;38542:879::-;;;;;;;;;;;;;:::i;13368:114::-;;;;;;;;;;-1:-1:-1;13368:114:0;;;;;:::i;:::-;;:::i;24639:601::-;;;;;;;;;;-1:-1:-1;24639:601:0;;;;;:::i;:::-;;:::i;26188:1393::-;;;;;;;;;;-1:-1:-1;26188:1393:0;;;;;:::i;:::-;;:::i;16379:209::-;;;;;;;;;;-1:-1:-1;16379:209:0;;;;;:::i;:::-;-1:-1:-1;;;;;16488:17:0;16443:7;16488:17;;;:10;:17;;;;;;;;;16532:10;:17;;;;;;;;16379:209;;;;;;;;;:::i;11505:28::-;;;;;;;;;;-1:-1:-1;11505:28:0;;;;;;;;;;;21917:4:1;21905:17;;;21887:36;;21875:2;21860:18;11505:28:0;21745:184:1;14768:29:0;;;;;;;;;;-1:-1:-1;14768:29:0;;;;-1:-1:-1;;;;;14768:29:0;;;;;;;;;;:::i;15214:28::-;;;;;;;;;;;;;;;;18685:198;;;;;;;;;;-1:-1:-1;18685:198:0;;;;;:::i;:::-;;:::i;4953:690::-;;;;;;;;;;-1:-1:-1;4953:690:0;;;;;:::i;:::-;;:::i;14609:25::-;;;;;;;;;;-1:-1:-1;14609:25:0;;;;-1:-1:-1;;;;;14609:25:0;;;40279:367;;;;;;;;;;-1:-1:-1;40279:367:0;;;;;:::i;:::-;;:::i;12244:403::-;;;;;;;;;;-1:-1:-1;12244:403:0;;;;;:::i;:::-;;:::i;18249:158::-;;;;;;;;;;;;;:::i;15834:18::-;;;;;;;;;;;;;;;;11673:105;;;;;;;;;;-1:-1:-1;11673:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;11756:14:0;11729:7;11756:14;;;;;;;;;;;;11673:105;25252:925;;;;;;;;;;-1:-1:-1;25252:925:0;;;;;:::i;:::-;;:::i;19297:282::-;;;;;;;;;;-1:-1:-1;19297:282:0;;;;;:::i;:::-;;:::i;37037:661::-;;;;;;;;;;-1:-1:-1;37037:661:0;;;;;:::i;:::-;;:::i;17802:435::-;;;;;;;;;;-1:-1:-1;17802:435:0;;;;;:::i;:::-;;:::i;11462:36::-;;;;;;;;;;;;;:::i;37710:824::-;;;;;;;;;;-1:-1:-1;37710:824:0;;;;;:::i;:::-;;:::i;15286:31::-;;;;;;;;;;;;;;;;19591:459;;;;;;;;;;;;;:::i;3582:543::-;;;;;;;;;;-1:-1:-1;3582:543:0;;;;;:::i;:::-;;:::i;15109:28::-;;;;;;;;;;;;;;;;24369:262;;;;;;;;;;-1:-1:-1;24369:262:0;;;;;:::i;:::-;;:::i;20062:1056::-;;;;;;;;;;-1:-1:-1;20062:1056:0;;;;;:::i;:::-;;:::i;31894:2806::-;;;;;;;;;;-1:-1:-1;31894:2806:0;;;;;:::i;:::-;;:::i;34713:2308::-;;;;;;;;;;-1:-1:-1;34713:2308:0;;;;;:::i;:::-;;:::i;23227:1130::-;;;;;;;;;;-1:-1:-1;23227:1130:0;;;;;:::i;:::-;;:::i;15249:30::-;;;;;;;;;;;;;;;;4135:810;;;;;;;;;;-1:-1:-1;4135:810:0;;;;;:::i;:::-;;:::i;21517:1014::-;;;;;;;;;;-1:-1:-1;21517:1014:0;;;;;:::i;:::-;;:::i;29755:2127::-;;;;;;:::i;:::-;;:::i;14741:20::-;;;;;;;;;;-1:-1:-1;14741:20:0;;;;-1:-1:-1;;;;;14741:20:0;;;14906:29;;;;;;;;;;;;;;;;14641:64;;;;;;;;;;-1:-1:-1;14641:64:0;;;;-1:-1:-1;;;;;14641:64:0;;;19023:105;;;;;;;;;;-1:-1:-1;19023:105:0;;;;;:::i;:::-;;:::i;11981:255::-;;;;;;;;;;-1:-1:-1;11981:255:0;;;;;:::i;:::-;;:::i;15179:28::-;;;;;;;;;;;;;;;;18895:116;;;;;;;;;;-1:-1:-1;18895:116:0;;;;;:::i;:::-;;:::i;11542:123::-;;;;;;;;;;-1:-1:-1;11542:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;11637:15:0;;;11610:7;11637:15;;;:10;:15;;;;;;;;:20;;;;;;;;;;;;;11542:123;14835:20;;;;;;;;;;-1:-1:-1;14835:20:0;;;;-1:-1:-1;;;;;14835:20:0;;;14942:23;;;;;;;;;;;;;;;;15927:397;;;;;;;;;;-1:-1:-1;15927:397:0;;;;;:::i;:::-;;:::i;19140:149::-;;;;;;;;;;-1:-1:-1;19140:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;19258:15:0;19216:7;19258:15;;;:8;:15;;;;;:23;;;;19140:149;5651:853;;;;;;;;;;-1:-1:-1;5651:853:0;;;;;:::i;:::-;;:::i;15859:23::-;;;;;;;;;;;;;;;;15387:24;;;;;;;;;;-1:-1:-1;15387:24:0;;;;;;;;;;;27783:1960;;;;;;;;;;-1:-1:-1;27783:1960:0;;;;;:::i;:::-;;:::i;17474:316::-;;;;;;;;;;;;;:::i;17172:119::-;-1:-1:-1;;;;;17259:24:0;17236:4;17259:24;;;:17;:24;;;;;;;;;17172:119::o;11418:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11786:187::-;11875:10;11847:4;11864:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;11864:27:0;;;;;;;;;;:33;;;11913:30;11847:4;;11864:27;;-1:-1:-1;;;;;;;;;;;11913:30:0;;;11894:3;21195:25:1;;21183:2;21168:18;;21049:177;11913:30:0;;;;;;;;-1:-1:-1;11961:4:0;11786:187;;;;;:::o;17000:160::-;17099:7;;-1:-1:-1;;;;;17099:7:0;17085:10;:21;17077:30;;;;;;-1:-1:-1;;;;;17118:24:0;;;;;;;;:17;:24;;;;;:34;;-1:-1:-1;;17118:34:0;;;;;;;;;;17000:160::o;40658:332::-;40761:6;;:11;40753:34;;;;-1:-1:-1;;;40753:34:0;;;;;;;:::i;:::-;;;;;;;;;40807:1;40798:6;:10;40838;40827:22;;;;:10;:22;;;;;;:32;-1:-1:-1;40827:32:0;40819:61;;;;-1:-1:-1;;;40819:61:0;;;;;;;:::i;:::-;40902:10;40891:22;;;;:10;:22;;;;;:32;;40917:6;;40891:22;:32;;40917:6;;40891:32;:::i;:::-;;;;-1:-1:-1;;;;;;;40934:17:0;;;;;;:10;:17;;;;;:27;;40955:6;;40934:17;:27;;40955:6;;40934:27;:::i;:::-;;;;-1:-1:-1;;40981:1:0;40972:6;:10;-1:-1:-1;;40658:332:0:o;18419:254::-;18545:10;;-1:-1:-1;;;;;18545:10:0;18531;:24;:42;;;;-1:-1:-1;18569:4:0;;-1:-1:-1;;;;;18559:14:0;;;18569:4;;18559:14;;18531:42;:62;;;;-1:-1:-1;18588:5:0;;-1:-1:-1;;;;;18578:15:0;;;18588:5;;18578:15;;18531:62;18523:71;;;;;;18613:18;18624:6;18613:10;:18::i;:::-;:26;;18635:4;18613:26;18605:35;;;;;;18651:5;:14;;-1:-1:-1;;;;;;18651:14:0;-1:-1:-1;;;;;18651:14:0;;;;;;;;;;18419:254::o;21129:372::-;-1:-1:-1;;;;;21296:26:0;;;21225:17;21296:26;;;:8;:26;;;;;;21360:27;;;;;;;21419:16;;;;21225:17;;21296:26;21405:88;;21437:14;21442:4;21448:2;21437:4;:14::i;:::-;21453:9;:17;;;21472:14;21477:4;21483:2;21472:4;:14::i;:::-;21488:4;21405:13;:88::i;:::-;21398:95;21129:372;-1:-1:-1;;;;;21129:372:0:o;22539:680::-;22630:4;;-1:-1:-1;;;;;22621:13:0;;;22630:4;;22621:13;;:31;;-1:-1:-1;22647:5:0;;-1:-1:-1;;;;;22638:14:0;;;22647:5;;22638:14;22621:31;22613:57;;;;-1:-1:-1;;;22613:57:0;;;;;;;:::i;:::-;22689:6;;:11;22681:34;;;;-1:-1:-1;;;22681:34:0;;;;;;;:::i;:::-;22735:1;22726:6;:10;22769:5;;-1:-1:-1;;;;;22760:14:0;;;22769:5;;22760:14;22757:434;;;22805:10;22794:22;;;;:10;:22;;;;;;:29;-1:-1:-1;22794:29:0;22786:58;;;;-1:-1:-1;;;22786:58:0;;;;;;;:::i;:::-;22872:3;22855:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;22897:10:0;22886:22;;;;:10;:22;;;;;:29;;22912:3;;22886:22;:29;;22912:3;;22886:29;:::i;:::-;;;;-1:-1:-1;;22942:5:0;;22926:39;;-1:-1:-1;;;;;22942:5:0;22949:10;22961:3;22926:15;:39::i;:::-;22757:434;;;23021:10;23010:22;;;;:10;:22;;;;;;:29;-1:-1:-1;23010:29:0;23002:57;;;;-1:-1:-1;;;23002:57:0;;;;;;;:::i;:::-;23087:3;23070:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;23112:10:0;23101:22;;;;:10;:22;;;;;:29;;23127:3;;23101:22;:29;;23127:3;;23101:29;:::i;:::-;;;;-1:-1:-1;;23157:4:0;;23141:38;;-1:-1:-1;;;;;23157:4:0;23163:10;23175:3;23141:15;:38::i;:::-;-1:-1:-1;;23210:1:0;23201:6;:10;22539:680::o;38542:879::-;38632:6;;:11;38624:34;;;;-1:-1:-1;;;38624:34:0;;;;;;;:::i;:::-;38678:1;38669:6;:10;38712;;-1:-1:-1;;;;;38712:10:0;38698;:24;;:77;;-1:-1:-1;38740:11:0;;-1:-1:-1;;;;;38740:11:0;38726:10;:25;:49;;;;-1:-1:-1;38755:6:0;;-1:-1:-1;;;;;38755:6:0;:20;;38726:49;38690:99;;;;-1:-1:-1;;;38690:99:0;;10675:2:1;38690:99:0;;;10657:21:1;10714:1;10694:18;;;10687:29;-1:-1:-1;;;10732:18:1;;;10725:39;10781:18;;38690:99:0;10473:332:1;38690:99:0;38800:6;:4;:6::i;:::-;38852:10;;-1:-1:-1;;;;;38852:10:0;;;38817:22;38842:21;;;:9;:21;;;;;;;38881:4;;38895:6;;38874:34;;-1:-1:-1;;;38874:34:0;;38842:21;;38881:4;;;;38874:20;;:34;;38895:6;;;;;-1:-1:-1;;;38903:4:0;38874:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38926:5:0;;38941:6;;38919:35;;-1:-1:-1;;;38919:35:0;;-1:-1:-1;;;;;38926:5:0;;;;38919:21;;:35;;38941:6;;;-1:-1:-1;;;38949:4:0;38919:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38988:10:0;;-1:-1:-1;;;;;38988:10:0;38965:11;38979:20;;;;;;;;;;;;;;;;39010:27;38979:20;;39010:27;:::i;:::-;;;;-1:-1:-1;;39061:11:0;;39111:4;;-1:-1:-1;;;;;39111:4:0;39048:10;39102:14;;;:8;:14;;;;;39111:4;39102:22;;39097:43;;39126:13;39131:3;39061:11;39126:4;:13::i;:::-;39097:4;:43::i;:::-;39180:5;;-1:-1:-1;;;;;39180:5:0;39151:12;39171:15;;;:8;:15;;;;;39180:5;39171:23;;39083:57;;-1:-1:-1;39151:12:0;39166:44;;39196:13;39201:3;39206:2;39196:4;:13::i;39166:44::-;39151:59;;39236:3;39221:11;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;39250:21:0;;-1:-1:-1;;39250:21:0;;;39282:15;:22;;39301:3;;39282:15;39266:5;;39282:22;;39301:3;;39282:22;:::i;:::-;;;;-1:-1:-1;;39327:6:0;;39346:5;;39364:10;;39315:60;;-1:-1:-1;;;39315:60:0;;-1:-1:-1;;;;;39346:5:0;;;39315:60;;;8384:34:1;8434:18;;;8427:34;;;8477:18;;;8470:34;;;39364:10:0;;;8520:18:1;;;8513:43;39327:6:0;;;39315:30;;8318:19:1;;39315:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39386:6;:4;:6::i;:::-;-1:-1:-1;;39412:1:0;39403:6;:10;-1:-1:-1;;;38542:879:0:o;13368:114::-;-1:-1:-1;;;;;13451:14:0;13422:9;13451:14;;;:9;:14;;;;;:22;;;;13368:114::o;24639:601::-;24717:4;24742:10;-1:-1:-1;;;;;24742:17:0;;;;:55;;-1:-1:-1;;;;;;24770:15:0;;;;;;:10;:15;;;;;;;;24786:10;24770:27;;;;;;;;24763:34;;;24742:55;24734:64;;;;;;24817:23;24829:10;24817:11;:23::i;:::-;:32;24809:116;;;;-1:-1:-1;;;24809:116:0;;;;;;;:::i;:::-;24936:20;24942:3;24947;24952;24936:5;:20::i;:::-;24971:10;-1:-1:-1;;;;;24971:17:0;;;;;;:69;;-1:-1:-1;;;;;;24992:15:0;;;;;;:10;:15;;;;;;;;25008:10;24992:27;;;;;;;;-1:-1:-1;;24992:48:0;;24971:69;24967:244;;;-1:-1:-1;;;;;25092:15:0;;;;;;:10;:15;;;;;;;;25108:10;25092:27;;;;;;;;25087:38;;25121:3;25087:4;:38::i;:::-;-1:-1:-1;;;;;25057:15:0;;;;;;;:10;:15;;;;;;;;25073:10;25057:27;;;;;;;;;;:68;;;25145:54;21195:25:1;;;25145:54:0;;;;25073:10;;-1:-1:-1;;;;;;;;;;;25145:54:0;21168:18:1;25145:54:0;;;;;;;24967:244;-1:-1:-1;25228:4:0;24639:601;;;;;:::o;26188:1393::-;26323:23;26335:10;26323:11;:23::i;:::-;:32;26315:116;;;;-1:-1:-1;;;26315:116:0;;;;;;;:::i;:::-;26450:6;;:11;26442:34;;;;-1:-1:-1;;;26442:34:0;;;;;;;:::i;:::-;26496:1;26487:6;:10;26508:6;:4;:6::i;:::-;26545:11;;26525:17;26583:29;26588:12;26545:11;26583:4;:29::i;:::-;26634:10;26625:8;:20;;;;;;;;;;:36;;26567:45;;-1:-1:-1;26649:12:0;;26625:20;;:8;:36;;26649:12;;26625:36;:::i;:::-;;;;;;;;26687:12;26672:11;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;26715:46:0;;21195:25:1;;;26744:1:0;;26724:10;;-1:-1:-1;;;;;;;;;;;26715:46:0;21183:2:1;21168:18;26715:46:0;;;;;;;26787:9;26782:409;26806:7;:14;26802:18;;26782:409;;;26842:9;26854:7;26862:1;26854:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26854:10:0;26893:11;;;:8;:11;;;;;;26854:10;26893:19;;26854:10;;-1:-1:-1;26893:19:0;26952:16;26957:5;26893:19;26952:4;:16::i;:::-;26927:41;;27009:13;;27023:1;27009:16;;;;;;;:::i;:::-;;;;;;;26991:14;:34;;26983:73;;;;-1:-1:-1;;;26983:73:0;;;;;;;:::i;:::-;27097:1;-1:-1:-1;;;;;27076:42:0;27085:10;-1:-1:-1;;;;;27076:42:0;;27100:14;27116:1;27076:42;;;;;;;:::i;:::-;;;;;;;;27133:46;27149:1;27152:10;27164:14;27133:15;:46::i;:::-;26827:364;;;26822:3;;;;;:::i;:::-;;;;26782:409;;;-1:-1:-1;27248:4:0;;-1:-1:-1;;;;;27248:4:0;27211:11;27237:16;;;:10;:16;;;;;;27225:29;;27230:5;;27225:4;:29::i;:::-;27276:4;;-1:-1:-1;;;;;27276:4:0;27265:16;;;;:10;:16;;;;;:23;;27211:43;;-1:-1:-1;27211:43:0;;27265:16;;;:23;;27211:43;;27265:23;:::i;:::-;;;;-1:-1:-1;;27310:10:0;27299:22;;;;:10;:22;;;;;:29;;27325:3;;27299:22;:29;;27325:3;;27299:29;:::i;:::-;;;;-1:-1:-1;27339:6:0;;-1:-1:-1;27339:4:0;:6::i;:::-;27359:5;;-1:-1:-1;;;;;27359:5:0;:19;27356:197;;27424:5;;27417:38;;-1:-1:-1;;;27417:38:0;;27390:12;;27405:51;;27410:5;;-1:-1:-1;;;;;27424:5:0;;27417:23;;:38;;27449:4;;27417:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27405:51::-;27390:66;-1:-1:-1;27470:8:0;;27467:75;;27506:5;;27490:40;;-1:-1:-1;;;;;27506:5:0;27513:10;27525:4;27490:15;:40::i;:::-;27379:174;27356:197;-1:-1:-1;;27572:1:0;27563:6;:10;-1:-1:-1;;;;26188:1393:0:o;18685:198::-;18792:7;;-1:-1:-1;;;;;18792:7:0;18778:10;:21;18770:30;;;;;;18811:8;:17;;-1:-1:-1;;;;;18811:17:0;;;-1:-1:-1;;;;;;18811:17:0;;;;;;;18839:4;:12;;;;;;;;;;;;;;;18862:6;:13;;;;;;;;;;;18685:198::o;4953:690::-;5188:22;5228:19;5250:35;5255:13;5270:14;5250:4;:35::i;:::-;5228:57;;5296:18;5317:15;5322:6;5330:1;5317:4;:15::i;:::-;5296:36;;5356:31;5361:13;5376:10;5356:4;:31::i;:::-;5343:44;;5398:9;5410:54;5415:14;5431:32;5436:14;5452:10;5431:4;:32::i;:::-;5410:4;:54::i;:::-;5398:66;;5475:11;5489:20;5494:1;5497:11;5489:4;:20::i;:::-;5475:34;;5520:11;5534:15;5539:4;5545:3;5534:4;:15::i;:::-;5520:29;;5577:26;5582:15;5599:3;5577:4;:26::i;:::-;5560:43;4953:690;-1:-1:-1;;;;;;;;;;;4953:690:0:o;40279:367::-;40395:10;40384:22;;;;:10;:22;;;;;;:32;-1:-1:-1;40384:32:0;40376:61;;;;-1:-1:-1;;;40376:61:0;;;;;;;:::i;:::-;40448:11;40462:29;40467:6;40475:15;40480:3;40485:4;40475;:15::i;40462:29::-;40513:10;40502:22;;;;:10;:22;;;;;:32;;40448:43;;-1:-1:-1;40528:6:0;;40502:22;;;:32;;40528:6;;40502:32;:::i;:::-;;;;-1:-1:-1;;;;;;;40545:17:0;;;;;;:10;:17;;;;;:24;;40566:3;;40545:17;:24;;40566:3;;40545:24;:::i;:::-;;;;-1:-1:-1;40600:17:0;;-1:-1:-1;40605:6:0;40613:3;40600:4;:17::i;:::-;40591:4;;-1:-1:-1;;;;;40591:4:0;40580:16;;;;:10;:16;;;;;:37;;:16;;;:37;;;;;:::i;:::-;;;;-1:-1:-1;;40637:1:0;40628:6;:10;-1:-1:-1;;;40279:367:0:o;12244:403::-;12361:10;12314:4;12350:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12350:27:0;;;;;;;;;;12392:14;;;12388:160;;;12434:10;12453:1;12423:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12423:27:0;;;;;;;;;:31;12388:160;;;12517:19;12522:8;12532:3;12517:4;:19::i;:::-;12498:10;12487:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12487:27:0;;;;;;;;;:49;12388:160;12572:10;12589:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12563:54:0;;12589:27;;;;;;;;;;;12563:54;;21195:25:1;;;12563:54:0;;12572:10;-1:-1:-1;;;;;;;;;;;12563:54:0;21168:18:1;12563:54:0;;;;;;;-1:-1:-1;12635:4:0;;12244:403;-1:-1:-1;;;12244:403:0:o;18249:158::-;18366:10;;-1:-1:-1;;;;;18366:10:0;18352;:24;18344:33;;;;;;18388:4;:11;;-1:-1:-1;;18388:11:0;;;;;18249:158::o;25252:925::-;25374:6;;:11;25366:34;;;;-1:-1:-1;;;25366:34:0;;;;;;;:::i;:::-;25420:1;25411:6;:10;25452:11;;25432:17;25490:30;25495:13;25452:11;25490:4;:30::i;:::-;25474:46;;25544:23;25556:10;25544:11;:23::i;:::-;:31;;25571:4;25544:31;25541:94;;;25606:13;25587:15;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;25541:94:0;25660:9;25655:403;25679:7;:14;25675:18;;25655:403;;;25715:9;25727:7;25735:1;25727:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25727:10:0;25766:11;;;:8;:11;;;;;;25727:10;25766:19;;25727:10;;-1:-1:-1;25766:19:0;25838:16;25843:5;25766:19;25838:4;:16::i;:::-;25814:40;;25895:12;;25908:1;25895:15;;;;;;;:::i;:::-;;;;;;;25878:13;:32;;25870:41;;;;;;25952:1;-1:-1:-1;;;;;25931:41:0;25940:10;-1:-1:-1;;;;;25931:41:0;;25955:13;25970:1;25931:41;;;;;;;:::i;:::-;;;;;;;;25987:45;26003:1;26006:10;26018:13;25987:15;:45::i;:::-;25700:358;;;25695:3;;;;;:::i;:::-;;;;25655:403;;;;26068:20;26074:13;26068:5;:20::i;:::-;26099:32;26105:10;26117:13;26099:5;:32::i;:::-;26142:6;:4;:6::i;19297:282::-;19412:11;;-1:-1:-1;;;;;19412:11:0;19398:10;:25;19390:34;;;;;;19435:11;:21;;-1:-1:-1;;;;;19435:21:0;;;-1:-1:-1;;;;;;19435:21:0;;;;;;;19467:7;:13;;;;;;;;;;;;;;;19491:10;:15;;;;;;;;;;;19297:282::o;37037:661::-;37137:4;;-1:-1:-1;;;;;37137:4:0;;;37114:11;37128:14;;;:8;:14;;;;;37137:4;37128:22;;37183:10;;37128:22;;37183:10;37169;:24;:39;;;;;37204:4;37197:3;:11;;37169:39;37161:78;;;;-1:-1:-1;;;37161:78:0;;;;;;;:::i;:::-;37269:5;37263:3;:11;37260:169;;;37346:3;37338:4;:11;;:27;;;;;37361:4;37353;:12;;37338:27;:42;;;;;37377:3;37369:4;:11;;37338:42;:55;;;;-1:-1:-1;37384:9:0;;;37338:55;37330:86;;;;-1:-1:-1;;;37330:86:0;;20553:2:1;37330:86:0;;;20535:21:1;20592:2;20572:18;;;20565:30;-1:-1:-1;;;20611:18:1;;;20604:48;20669:18;;37330:86:0;20351:342:1;37330:86:0;37459:5;37452:3;:12;37449:190;;37536:3;37528:4;:11;;:27;;;;;37551:4;37543;:12;;37528:27;:42;;;;;37567:3;37559:4;:11;;37528:42;:55;;;;-1:-1:-1;37574:9:0;;;37528:55;37520:106;;;;-1:-1:-1;;;37520:106:0;;15157:2:1;37520:106:0;;;15139:21:1;15196:2;15176:18;;;15169:30;15235:34;15215:18;;;15208:62;-1:-1:-1;;;15286:18:1;;;15279:36;15332:19;;37520:106:0;14955:402:1;37520:106:0;-1:-1:-1;37659:3:0;:10;37680:3;:10;37037:661::o;17802:435::-;17903:10;;-1:-1:-1;;;;;17903:10:0;17889;:24;17881:63;;;;-1:-1:-1;;;17881:63:0;;;;;;;:::i;:::-;17976:5;;17969:27;;;-1:-1:-1;;;17969:27:0;;;;17955:11;;-1:-1:-1;;;;;17976:5:0;;17969:25;;:27;;;;;;;;;;;;;;17976:5;17969:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17955:41;-1:-1:-1;18027:8:0;18031:4;17955:41;18027:8;:::i;:::-;18016:7;:19;;:37;;;;;18050:3;18039:7;:14;;18016:37;18007:101;;;;-1:-1:-1;;;18007:101:0;;14048:2:1;18007:101:0;;;14030:21:1;14087:2;14067:18;;;14060:30;14126:34;14106:18;;;14099:62;-1:-1:-1;;;14177:18:1;;;14170:48;14235:19;;18007:101:0;13846:414:1;18007:101:0;18139:4;18129:6;:14;;18120:41;;;;-1:-1:-1;;;18120:41:0;;12191:2:1;18120:41:0;;;12173:21:1;12230:2;12210:18;;;12203:30;-1:-1:-1;;;12249:18:1;;;12242:43;12302:18;;18120:41:0;11989:337:1;18120:41:0;-1:-1:-1;18172:14:0;:24;;;;18207:13;:22;17802:435::o;11462:36::-;;;;;;;:::i;37710:824::-;37839:6;;:11;37831:34;;;;-1:-1:-1;;;37831:34:0;;;;;;;:::i;:::-;37885:1;37876:6;:10;37905:17;37917:4;37905:11;:17::i;:::-;:25;;37926:4;37905:25;37897:58;;;;-1:-1:-1;;;37897:58:0;;15919:2:1;37897:58:0;;;15901:21:1;15958:2;15938:18;;;15931:30;-1:-1:-1;;;15977:18:1;;;15970:50;16037:18;;37897:58:0;15717:344:1;37897:58:0;-1:-1:-1;;;;;37991:15:0;;;37966:22;37991:15;;;:9;:15;;;;;;;38041:11;:17;;;;;;38086:11;;37991:15;;38041:17;;38086:11;38072:10;:25;38069:437;;;38127:24;:15;38145:6;38127:24;:::i;:::-;38109:15;;;:42;38069:437;;;38243:4;:15;;;38224;:34;;:62;;;;-1:-1:-1;38276:10:0;;-1:-1:-1;;;;;38276:10:0;38262;:24;38224:62;38216:147;;;;-1:-1:-1;;;38216:147:0;;11710:2:1;38216:147:0;;;11692:21:1;11749:2;11729:18;;;11722:30;-1:-1:-1;;;;;;;;;;;11768:18:1;;;11761:62;11859:34;11839:18;;;11832:62;-1:-1:-1;;;11910:19:1;;;11903:39;11959:19;;38216:147:0;11508:476:1;38216:147:0;38374:21;;-1:-1:-1;;38374:21:0;;;38422:37;;-1:-1:-1;;;38422:37:0;;38390:5;;38437:4;;38422:31;;:37;;38454:4;;38422:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38406:53;;38489:5;38470:15;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;;38069:437:0;-1:-1:-1;;38525:1:0;38516:6;:10;-1:-1:-1;37710:824:0:o;19591:459::-;19670:10;19699:17;19670:10;19699:11;:17::i;:::-;:26;19691:63;;;;-1:-1:-1;;;19691:63:0;;11357:2:1;19691:63:0;;;11339:21:1;11396:2;11376:18;;;11369:30;-1:-1:-1;;;11415:18:1;;;11408:54;11479:18;;19691:63:0;11155:348:1;19691:63:0;19781:37;;-1:-1:-1;;;19781:37:0;;19765:13;;19796:4;;19781:31;;:37;;19813:4;;19781:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19854:15:0;;19829:22;19854:15;;;:9;:15;;;;;;;19904:11;:17;;;;;;19932:20;;-1:-1:-1;;19932:20:0;19948:4;19932:20;;;19765:53;;-1:-1:-1;19854:15:0;19981:25;:15;19999:7;19981:25;:::i;:::-;19963:4;:15;;:43;;;;20037:5;20018:15;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;19591:459:0:o;3582:543::-;3809:17;3844:13;3860:35;3865:14;3881:13;3860:4;:35::i;:::-;3844:51;;3906:13;3922:37;3927:15;3944:14;3922:4;:37::i;:::-;3906:53;;3970:13;3986:18;3991:5;3998;3986:4;:18::i;:::-;3970:34;;4015:13;4031:35;4036:6;4044:21;4049:6;4057:7;4044:4;:21::i;4031:35::-;4015:51;;4098:18;4103:5;4110;4098:4;:18::i;:::-;4086:30;3582:543;-1:-1:-1;;;;;;;;;;3582:543:0:o;24369:262::-;24430:4;24455:23;24467:10;24455:11;:23::i;:::-;:32;24447:116;;;;-1:-1:-1;;;24447:116:0;;;;;;;:::i;:::-;24574:27;24580:10;24592:3;24597;24574:5;:27::i;:::-;-1:-1:-1;24619:4:0;24369:262;;;;:::o;20062:1056::-;20162:4;;;;:13;20154:22;;;;;;20209:5;;20202:38;;-1:-1:-1;;;20202:38:0;;20187:12;;-1:-1:-1;;;;;20209:5:0;;20202:23;;:38;;20234:4;;20202:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20274:4;;20267:37;;-1:-1:-1;;;20267:37:0;;20187:53;;-1:-1:-1;20251:13:0;;-1:-1:-1;;;;;20274:4:0;;;;20267:22;;:37;;20298:4;;20267:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20333:83;;;;;;;;20362:7;:14;;20333:83;;;;;;;;;20324:5;;;-1:-1:-1;;;;;20324:5:0;;;-1:-1:-1;20315:15:0;;;:8;:15;;;;;;:101;;;;;;20324:5;20315:101;;;;20454:84;;;;;;;20483:14;;20454:84;;;;;;;;20446:4;;;;;20437:14;;;;;;;;;:101;;;;;;;;;;;;;20572:5;;20559:19;;;;;;;;;;;;;20572:5;;;-1:-1:-1;;;;;;20559:19:0;;;;;;20602:4;;20589:18;;;;;;;;;;;;;;20602:4;;;20589:18;;;;;;;;;;;20644:5;;;;20635:15;;;;;:23;;20454:84;;-1:-1:-1;;20630:34:0;;20660:3;20630:4;:34::i;:::-;20701:4;;-1:-1:-1;;;;;20701:4:0;20675:9;20692:14;;;:8;:14;;;;;20701:4;20692:22;;20618:46;;-1:-1:-1;20675:9:0;20687:34;;20716:4;20687;:34::i;:::-;20675:46;-1:-1:-1;20732:9:0;20744:5;20675:46;20744:1;:5;:::i;:::-;20732:17;;20760:8;20766:1;20760:5;:8::i;:::-;20779:15;20785:5;20792:1;20779:5;:15::i;:::-;20823:24;20828:15;;20845:1;20823:4;:24::i;:::-;20805:15;:42;-1:-1:-1;;;;;20883:16:0;;20858:22;20883:16;;;:9;:16;;;;;;;20934:11;:18;;;;;;20963:20;;-1:-1:-1;;20963:20:0;20979:4;20963:20;;;21012:26;:15;21030:8;21012:26;:::i;:::-;20994:15;;;;:44;;;;21050:4;:11;;-1:-1:-1;;21050:11:0;;;;;;21078:31;21083:3;21088:20;21093:4;21099:8;21088:4;:20::i;21078:31::-;21072:3;:37;-1:-1:-1;;;;;;;;;20062:1056:0:o;31894:2806::-;32059:22;32105:31;32125:10;32105:19;:31::i;:::-;32102:101;;32165:6;;:11;32157:34;;;;-1:-1:-1;;;32157:34:0;;;;;;;:::i;:::-;32222:1;32213:6;:10;;;32242:4;;;;;;;:12;;;32234:40;;;;-1:-1:-1;;;32234:40:0;;;;;;;:::i;:::-;32288:30;32307:10;32288:18;:30::i;:::-;:38;;32322:4;32288:38;32285:141;;;32354:4;;32347:3;:11;32339:75;;;;-1:-1:-1;;;32339:75:0;;;;;;;:::i;:::-;32471:14;;32454:13;:31;;32446:58;;;;-1:-1:-1;;;32446:58:0;;;;;;;:::i;:::-;32538:5;;-1:-1:-1;;;;;32538:5:0;32515:11;32529:15;;;:8;:15;;;;;32538:5;32529:23;;;32563:49;;32586:10;32598:13;32563:15;:49::i;:::-;32690:13;;32656:5;;32649:38;;-1:-1:-1;;;32649:38:0;;-1:-1:-1;;;;;32656:5:0;;;;32649:23;;:38;;32681:4;;32649:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;32632:5;;;-1:-1:-1;;;;;32632:5:0;;;32623:15;;;;:8;:15;;;;;;32632:5;32623:23;;;:80;;;;32750:5;;;;;32741:15;;;;;:23;;;;32735:54;;32741:29;;32767:3;;32741:29;:::i;:::-;32773:15;32778:3;32783:4;32773;:15::i;32735:54::-;32898:5;;-1:-1:-1;;;;;32898:5:0;32889:15;;;;:8;:15;;;;;32898:5;32889:23;;32714:75;;-1:-1:-1;32827:376:0;;32959:14;32964:4;32970:2;32959:4;:14::i;:::-;33029:4;;-1:-1:-1;;;;;33029:4:0;33020:14;;;;:8;:14;;;;;33029:4;33020:22;;33089:14;33094:4;33100:2;33089:4;:14::i;:::-;33150:10;32827:15;:376::i;:::-;33264:4;;-1:-1:-1;;;;;33264:4:0;33255:14;;;;:8;:14;;;;;33264:4;33255:22;;32810:393;;-1:-1:-1;33250:50:0;;33279:20;15771:2;33295:3;33279:4;:20::i;33250:50::-;33232:14;:68;;33224:99;;;;-1:-1:-1;;;33224:99:0;;;;;;;:::i;:::-;33392:12;33374:14;:30;;33366:69;;;;-1:-1:-1;;;33366:69:0;;;;;;;:::i;:::-;33446:12;33461:37;33466:14;33482:15;33487:3;;33492:4;33482;:15::i;33461:37::-;33446:52;;33509:18;33531:27;33536:4;33542:15;33547:2;33551:5;33542:4;:15::i;33531:27::-;33509:49;;33569:11;33583:27;33588:4;33594:15;33599:2;33603:5;33594:4;:15::i;33583:27::-;33569:41;;33621:19;33644:28;33649:4;33655:16;33660:3;;33665:5;33655:4;:16::i;33644:28::-;33621:51;-1:-1:-1;33683:10:0;33621:51;33705:16;33718:3;33705:10;:16;:::i;:::-;:30;;;;:::i;:::-;33697:39;;:4;:39;:::i;:::-;33683:54;;33748:19;33770:25;33775:2;33779:15;33784:3;33789:4;33779;:15::i;33770:25::-;33838:4;33806:10;33819:25;;;:10;:25;;;;;;33748:47;;-1:-1:-1;33873:4:0;33868:9;;33865:95;;;33906:2;33889:13;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;33938:4:0;33947:1;33919:25;;;:10;:25;;;;;:29;33865:95;33985:4;;-1:-1:-1;;;;;33985:4:0;33980:19;34019:10;34000:16;34014:2;34000:11;:16;:::i;:::-;:29;;;;:::i;:::-;33980:50;;;;;;;;;;;;;21195:25:1;;21183:2;21168:18;;21049:177;33980:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34041:68;34072:2;34076:32;34081:11;34094:13;34099:2;34103:3;34094:4;:13::i;34076:32::-;34041:30;:68::i;:::-;34137:23;34142:2;34146:13;34151:1;34154:4;34146;:13::i;34137:23::-;34120:13;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;34171:11:0;;-1:-1:-1;34185:31:0;34190:11;34203:12;34208:1;34211:3;34203:4;:12::i;34185:31::-;34171:45;;34227:12;34242:32;34247:11;34260:13;34265:2;34269:3;34260:4;:13::i;34242:32::-;34227:47;;34315:32;34320:11;34333:13;34338:2;34342:3;34333:4;:13::i;34315:32::-;34296:14;;-1:-1:-1;;;;;34296:14:0;34285:26;;;;:10;:26;;;;;:62;;:26;;;:62;;;;;:::i;:::-;;;;-1:-1:-1;;34369:7:0;;-1:-1:-1;;;;;34369:7:0;34358:19;;;;:10;:19;;;;;:27;;34381:4;;34358:19;:27;;34381:4;;34358:27;:::i;:::-;;;;-1:-1:-1;;34407:4:0;;-1:-1:-1;;;;;34407:4:0;34396:16;;;;:10;:16;;;;;:23;;34416:3;;34396:16;:23;;34416:3;;34396:23;:::i;:::-;;;;;;;;34447:11;34430:13;;:28;;;;;;;:::i;:::-;;;;;;;;34486:3;34469:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;34500:10:0;;-1:-1:-1;34500:8:0;:10::i;:::-;34521:9;:7;:9::i;:::-;34541:6;:4;:6::i;:::-;34591:4;;34584:5;;-1:-1:-1;;;;;34591:4:0;;;;34584:5;34572:10;-1:-1:-1;;;;;;;;;;;34597:10:0;34609:32;34614:11;34627:13;34632:2;34636:3;34627:4;:13::i;34609:32::-;34563:79;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;34662:1:0;34653:6;:10;-1:-1:-1;34681:11:0;31894:2806;-1:-1:-1;;;;;;;;;;;;31894:2806:0:o;34713:2308::-;34840:22;34888:6;;34898:1;34888:11;34880:34;;;;-1:-1:-1;;;34880:34:0;;;;;;;:::i;:::-;34934:1;34925:6;:10;35003;34946:11;34992:22;;;:10;:22;;;;;;34960:13;;34992:39;-1:-1:-1;34992:39:0;34984:68;;;;-1:-1:-1;;;34984:68:0;;;;;;;:::i;:::-;35106:5;;-1:-1:-1;;;;;35106:5:0;;;35063:23;35089:24;;;:8;:24;;;;;;35168:4;;;;;35151:23;;;;35210:14;;35193:31;;;35185:58;;;;-1:-1:-1;;;35185:58:0;;;;;;;:::i;:::-;35273:412;35335:8;:16;;;35398:14;35403:4;35409:2;35398:4;:14::i;:::-;35459:9;:17;;;35523:14;35528:4;35534:2;35523:4;:14::i;:::-;35584:36;35589:13;35604:15;35609:3;35614:4;35604;:15::i;35273:412::-;35256:429;;35724:45;35729:9;:17;;;35748:20;15771:2;35764:3;35748:4;:20::i;35724:45::-;35706:14;:63;;35698:94;;;;-1:-1:-1;;;35698:94:0;;;;;;;:::i;:::-;35803:12;35818:37;35823:14;35839:15;35844:3;;35849:4;35839;:15::i;35818:37::-;35803:52;;35866:18;35888:27;35893:4;35899:15;35904:2;35908:5;35899:4;:15::i;35888:27::-;35866:49;;35926:11;35940:27;35945:4;35951:15;35956:2;35960:5;35951:4;:15::i;35940:27::-;35926:41;;35978:19;36001:28;36006:4;36012:16;36017:3;;36022:5;36012:4;:16::i;36001:28::-;35978:51;-1:-1:-1;36040:10:0;35978:51;36062:16;36075:3;36062:10;:16;:::i;:::-;:30;;;;:::i;:::-;36054:39;;:4;:39;:::i;:::-;36040:54;;36105:19;36127:25;36132:2;36136:15;36141:3;36146:4;36136;:15::i;36127:25::-;36105:47;;36180:23;36185:2;36189:13;36194:1;36197:4;36189;:13::i;36180:23::-;36163:13;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;;36222:27:0;;;;36214:66;;;;-1:-1:-1;;;36214:66:0;;;;;;;:::i;:::-;36302:10;36291:22;;;;:10;:22;;;;;:39;;36317:13;;36291:22;:39;;36317:13;;36291:39;:::i;:::-;;;;;;;;36358:13;36341;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;36393:10:0;36382:22;;;;:10;:22;;;;;:37;;36408:11;;36382:22;:37;;36408:11;;36382:37;:::i;:::-;;;;-1:-1:-1;;36449:4:0;36430:25;;;;:10;:25;;;;;:39;;36459:10;;36430:25;:39;;36459:10;;36430:39;:::i;:::-;;;;-1:-1:-1;36480:10:0;;-1:-1:-1;36493:32:0;36498:11;36511:13;36516:2;36520:3;36511:4;:13::i;36493:32::-;36480:45;;36536:11;36550:31;36555:11;36568:12;36573:1;36576:3;36568:4;:12::i;36550:31::-;36536:45;;36592:12;36607:32;36612:11;36625:13;36630:2;36634:3;36625:4;:13::i;36607:32::-;36661:14;;-1:-1:-1;;;;;36661:14:0;36650:26;;;;:10;:26;;;;;:32;;36592:47;;-1:-1:-1;36680:2:0;;36650:26;;;:32;;36680:2;;36650:32;:::i;:::-;;;;-1:-1:-1;;36704:7:0;;-1:-1:-1;;;;;36704:7:0;36693:19;;;;:10;:19;;;;;:27;;36716:4;;36693:19;:27;;36716:4;;36693:27;:::i;:::-;;;;-1:-1:-1;;36742:4:0;;-1:-1:-1;;;;;36742:4:0;36731:16;;;;:10;:16;;;;;:23;;36751:3;;36731:16;:23;;36751:3;;36731:23;:::i;:::-;;;;-1:-1:-1;36810:11:0;;-1:-1:-1;36783:24:0;36796:11;36783:10;:24;:::i;:::-;:38;;;;:::i;:::-;36765:13;;:57;;;;;;;:::i;:::-;;;;;;;;36850:3;36833:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;36864:6:0;;-1:-1:-1;36864:4:0;:6::i;:::-;36881:9;:7;:9::i;:::-;36939:4;;;;;;;;;-1:-1:-1;;;;;36939:4:0;-1:-1:-1;;;;;36906:56:0;36932:5;;;;;;;;;-1:-1:-1;;;;;36932:5:0;-1:-1:-1;;;;;36906:56:0;36920:10;-1:-1:-1;;;;;36906:56:0;-1:-1:-1;;;;;;;;;;;36945:3:0;36950:11;36906:56;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;36982:1:0;36973:6;:10;-1:-1:-1;37001:11:0;34713:2308;-1:-1:-1;;;;;;;;;;;34713:2308:0:o;23227:1130::-;23338:4;;-1:-1:-1;;;;;23329:13:0;;;23338:4;;23329:13;;:31;;-1:-1:-1;23355:5:0;;-1:-1:-1;;;;;23346:14:0;;;23355:5;;23346:14;23329:31;23321:57;;;;-1:-1:-1;;;23321:57:0;;;;;;;:::i;:::-;23397:6;;:11;23389:34;;;;-1:-1:-1;;;23389:34:0;;;;;;;:::i;:::-;23443:1;23434:6;:10;23467:4;;-1:-1:-1;;;;;23458:13:0;;;23467:4;;23458:13;23455:874;;;23502:10;23491:22;;;;:10;:22;;;;;;:29;-1:-1:-1;23491:29:0;23483:57;;;;-1:-1:-1;;;23483:57:0;;;;;;;:::i;:::-;23566:4;;23551:49;;-1:-1:-1;;;23551:49:0;;-1:-1:-1;;;;;23566:4:0;;;;23551:29;;:49;;23589:4;;23596:3;;23551:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23631:3;23614:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;23656:10:0;23645:22;;;;:10;:22;;;;;:29;;23671:3;;23645:22;:29;;23671:3;;23645:29;:::i;:::-;;;;-1:-1:-1;;23712:4:0;;23685:37;;-1:-1:-1;;;23685:37:0;;-1:-1:-1;;;;;23685:26:0;;;;;;:37;;23712:4;;;;23718:3;;23685:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23734:14;23750:13;23777:4;-1:-1:-1;;;;;23767:35:0;;23811:4;23767:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23828:29;;-1:-1:-1;;;23828:29:0;;23733:84;;-1:-1:-1;23733:84:0;-1:-1:-1;;;;;;23828:18:0;;;;;:29;;23847:2;;23733:84;;23828:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23455:874:0;;-1:-1:-1;;;;;23455:874:0;;23940:10;23929:22;;;;:10;:22;;;;;;:29;-1:-1:-1;23929:29:0;23921:58;;;;-1:-1:-1;;;23921:58:0;;;;;;;:::i;:::-;24005:5;;23990:50;;-1:-1:-1;;;23990:50:0;;-1:-1:-1;;;;;24005:5:0;;;;23990:30;;:50;;24029:4;;24036:3;;23990:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24068:3;24051:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;24093:10:0;24082:22;;;;:10;:22;;;;;:29;;24108:3;;24082:22;:29;;24108:3;;24082:29;:::i;:::-;;;;-1:-1:-1;;24149:5:0;;24122:38;;-1:-1:-1;;;24122:38:0;;-1:-1:-1;;;;;24122:26:0;;;;;;:38;;24149:5;;;;24156:3;;24122:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24172:14;24188:13;24215:4;-1:-1:-1;;;;;24205:35:0;;24249:4;24205:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24266:31;;-1:-1:-1;;;24266:31:0;;24171:84;;-1:-1:-1;24171:84:0;-1:-1:-1;;;;;;24266:19:0;;;;;:31;;24286:2;;24171:84;;24266:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23455:874:0;-1:-1:-1;;24348:1:0;24339:6;:10;-1:-1:-1;;23227:1130:0:o;4135:810::-;4395:22;4419:18;4455:19;4477:35;4482:13;4497:14;4477:4;:35::i;:::-;4455:57;;4523:18;4544:21;4549:6;4557:7;4544:4;:21::i;:::-;4523:42;;4589:31;4594:13;4609:10;4589:4;:31::i;:::-;4576:44;;4631:9;4643:54;4648:14;4664:32;4669:14;4685:10;4664:4;:32::i;4643:54::-;4631:66;;4708:11;4722:20;4727:1;4730:11;4722:4;:20::i;:::-;4708:34;;4753:11;4767:15;4772:4;4778:3;4767:4;:15::i;:::-;4753:29;;4810:26;4815:15;4832:3;4810:4;:26::i;:::-;4793:43;;4860:31;4865:13;4880:10;4860:4;:31::i;:::-;4847:44;;4902:35;;;;;4135:810;;;;;;;;;:::o;21517:1014::-;21607:4;;-1:-1:-1;;;;;21598:13:0;;;21607:4;;21598:13;;:31;;-1:-1:-1;21624:5:0;;-1:-1:-1;;;;;21615:14:0;;;21624:5;;21615:14;21598:31;21590:57;;;;-1:-1:-1;;;21590:57:0;;;;;;;:::i;:::-;21666:6;;:11;21658:34;;;;-1:-1:-1;;;21658:34:0;;;;;;;:::i;:::-;21712:1;21703:6;:10;;;21732:4;;;;;;;:12;;;21724:21;;;;;;21778:5;;-1:-1:-1;;;;;21769:14:0;;;21778:5;;21769:14;21766:737;;;21818:5;;-1:-1:-1;;;;;21818:5:0;21795:11;21809:15;;;:8;:15;;;;;21818:5;21809:23;;;21848:39;;21871:10;21883:3;21848:15;:39::i;:::-;21924:5;;21917:38;;-1:-1:-1;;;21917:38:0;;21898:11;;21912:59;;-1:-1:-1;;;;;21924:5:0;;;;21917:23;;:38;;21949:4;;21917:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21957:13;;21912:4;:59::i;:::-;21898:73;;21984:19;22006:14;22011:3;22016;22006:4;:14::i;:::-;21984:36;;22050:11;22033:13;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;22083:10:0;22072:22;;;;:10;:22;;;;;:37;;22098:11;;22072:22;:37;;22098:11;;22072:37;:::i;:::-;;;;-1:-1:-1;21766:737:0;;-1:-1:-1;;;;21766:737:0;;22169:4;;-1:-1:-1;;;;;22169:4:0;22146:11;22160:14;;;:8;:14;;;;;22169:4;22160:22;;;22193:38;;22215:10;22227:3;22193:15;:38::i;:::-;22268:4;;22261:37;;-1:-1:-1;;;22261:37:0;;22242:11;;22256:100;;-1:-1:-1;;;;;22268:4:0;;;;22261:22;;:37;;22292:4;;22261:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22300:55;22305:13;;22320:34;22325:13;;22340;;22320:4;:34::i;:::-;22300:4;:55::i;:::-;22256:4;:100::i;:::-;22242:114;;22367:19;22389:14;22394:3;22399;22389:4;:14::i;:::-;22367:36;;22432:11;22414:13;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;22465:10:0;22454:22;;;;:10;:22;;;;;:37;;22480:11;;22454:22;:37;;22480:11;;22454:37;:::i;:::-;;;;-1:-1:-1;;;;;;;22522:1:0;22513:6;:10;21517:1014::o;29755:2127::-;29894:22;29942:6;;29952:1;29942:11;29934:34;;;;-1:-1:-1;;;29934:34:0;;;;;;;:::i;:::-;29988:1;29979:6;:10;;;30008:4;;;;;;;:12;;;30000:40;;;;-1:-1:-1;;;30000:40:0;;;;;;;:::i;:::-;30051:13;30067:32;30072:9;30083:15;30088:3;30093:4;30083;:15::i;30067:32::-;30051:48;;30115:4;;;;;;;;;-1:-1:-1;;;;;30115:4:0;-1:-1:-1;;;;;30110:18:0;;30136:5;30110:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30155:74;30186:10;30198:30;30203:9;30214:13;30219:1;30222:4;30214;:13::i;30155:74::-;30253:30;30272:10;30253:18;:30::i;:::-;:38;;30287:4;30253:38;30250:141;;;30319:4;;30312:3;:11;30304:75;;;;-1:-1:-1;;;30304:75:0;;;;;;;:::i;:::-;30433:3;;30426:42;;-1:-1:-1;;;30426:42:0;;30411:12;;-1:-1:-1;;;;;30433:3:0;;30426:21;;:42;;30456:10;;30426:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30411:57;-1:-1:-1;30492:21:0;30537:6;;;;;:27;;;30560:4;30547:9;:17;;30537:27;:43;;;;;30576:4;30568;:12;;30537:43;30534:82;;;30592:12;:10;:12::i;:::-;30679:4;;-1:-1:-1;;;;;30679:4:0;;;30636:23;30662;;;:8;:23;;;;;;30740:5;;;;;30723:24;;;;30789:13;;30776:9;:26;;30768:55;;;;-1:-1:-1;;;30768:55:0;;;;;;;:::i;:::-;30844:18;30904:429;30965:8;:16;;;31028:14;31033:4;31039:2;31028:4;:14::i;:::-;31089:9;:17;;;31153:14;31158:4;31164:2;31153:4;:14::i;:::-;31214:28;31219:5;31226:15;31231:3;31236:4;31226;:15::i;31214:28::-;31289:1;30904:14;:429::i;:::-;31417:17;;;;30873:460;;-1:-1:-1;30873:460:0;-1:-1:-1;31412:45:0;;31436:20;15771:2;31452:3;31436:4;:20::i;31412:45::-;31394:14;:63;;31386:94;;;;-1:-1:-1;;;31386:94:0;;;;;;;:::i;:::-;31508:30;31513:9;31524:13;31529:1;31532:4;31524;:13::i;31508:30::-;31491:13;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;31589:30:0;;;;31581:69;;;;-1:-1:-1;;;31581:69:0;;;;;;;:::i;:::-;31677:5;;31661:42;;-1:-1:-1;;;;;31677:5:0;31684:2;31688:14;31661:15;:42::i;:::-;31714:6;:4;:6::i;:::-;31765:5;;31759:4;;31809:3;;-1:-1:-1;;;;;31765:5:0;;;;31759:4;;;;31747:10;;-1:-1:-1;;;;;;;;;;;31738:82:0;31772:9;;31783:36;;31788:14;;31804;;31814:3;31804:4;:14::i;31783:36::-;31738:82;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;31840:1:0;31831:6;:10;-1:-1:-1;;;;29755:2127:0;;;;;:::o;19023:105::-;19092:7;;-1:-1:-1;;;;;19092:7:0;19078:10;:21;19070:30;;;;;;19111:3;:9;19023:105::o;11981:255::-;12114:10;12051:4;12103:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12103:27:0;;;;;;;;;;12098:38;;12132:3;12098:4;:38::i;:::-;12079:10;12068:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12068:27:0;;;;;;;;;;;;:68;;;12152:54;21195:25:1;;;12068:27:0;;-1:-1:-1;;;;;;;;;;;12152:54:0;21168:18:1;12152:54:0;21049:177:1;18895:116:0;18964:7;;-1:-1:-1;;;;;18964:7:0;18950:10;:21;18942:30;;;;;;18983:14;:20;;-1:-1:-1;;;;;;18983:20:0;-1:-1:-1;;;;;18983:20:0;;;;;;;;;;18895:116::o;15927:397::-;16049:4;;;;:13;16041:43;;;;-1:-1:-1;;;16041:43:0;;14811:2:1;16041:43:0;;;14793:21:1;14850:2;14830:18;;;14823:30;-1:-1:-1;;;14869:18:1;;;14862:47;14926:18;;16041:43:0;14609:341:1;16041:43:0;16095:5;:15;;-1:-1:-1;;;;;16095:15:0;;;-1:-1:-1;;;;;;16095:15:0;;;;;;;;16121:10;:18;;;;;;;;;;;;;16150:14;:22;;;;;;;;;16183:4;:9;;;-1:-1:-1;16203:12:0;;;;;;;;;;;16226:8;:16;;;;;;;;;;;;16275:27;;;-1:-1:-1;;;16275:27:0;;;;16270:46;;16095:15;16275:25;;:27;;;;;;;;;;;;;;16095:15;16275:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16304:11;16309:1;16312:2;16304:4;:11::i;16270:46::-;16253:14;:63;-1:-1:-1;;;;;15927:397:0:o;5651:853::-;5912:21;5935:18;5971:19;5993:35;5998:14;6014:13;5993:4;:35::i;:::-;5971:57;;6039:12;6054:37;6059:15;6076:14;6054:4;:37::i;:::-;6039:52;;6102:9;6114:27;6119:15;6136:4;6114;:27::i;:::-;6102:39;;6152:11;6166:20;6171:1;6174:11;6166:4;:20::i;:::-;6152:34;;6203:15;6208:3;6213:4;6203;:15::i;:::-;6197:21;;6235:25;6240:14;6256:3;6235:4;:25::i;:::-;6229:31;;6287:19;6292:4;6298:7;6287:4;:19::i;:::-;6271:35;;6333:24;6338:3;6343:13;6333:4;:24::i;:::-;6317:40;;6381:15;6386:3;6391:4;6381;:15::i;:::-;6368:28;;6420:31;6425:13;6440:10;6420:4;:31::i;:::-;6407:44;;6462:34;;;;5651:853;;;;;;;;;:::o;27783:1960::-;27971:10;27910:22;27960;;;:10;:22;;;;;;:39;-1:-1:-1;27960:39:0;27952:81;;;;-1:-1:-1;;;27952:81:0;;18758:2:1;27952:81:0;;;18740:21:1;18797:2;18777:18;;;18770:30;18836:31;18816:18;;;18809:59;18885:18;;27952:81:0;18556:353:1;27952:81:0;28052:6;;:11;28044:34;;;;-1:-1:-1;;;28044:34:0;;;;;;;:::i;:::-;28098:1;28089:6;:10;28153:4;;-1:-1:-1;;;;;28153:4:0;;;28110:23;28136;;;:8;:23;;;;;;28214:5;;;;;28197:24;;;;28257:13;;28240:30;;;28232:59;;;;-1:-1:-1;;;28232:59:0;;;;;;;:::i;:::-;28302:18;28362:437;28423:8;:16;;;28486:14;28491:4;28497:2;28486:4;:14::i;28362:437::-;28851:17;;;;28331:468;;-1:-1:-1;28331:468:0;-1:-1:-1;28846:45:0;;28870:20;15771:2;28886:3;28870:4;:20::i;28846:45::-;28828:14;:63;;28820:94;;;;-1:-1:-1;;;28820:94:0;;;;;;;:::i;:::-;28983:12;28965:14;:30;;28957:69;;;;-1:-1:-1;;;28957:69:0;;;;;;;:::i;:::-;29051:10;29040:22;;;;:10;:22;;;;;:39;;29066:13;;29040:22;:39;;29066:13;;29040:39;:::i;:::-;;;;;;;;29107:13;29090;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;29142:10:0;29131:22;;;;:10;:22;;;;;:40;;29157:14;;29131:22;:40;;29157:14;;29131:40;:::i;:::-;;;;;;;;29199:14;29182:13;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;29241:34:0;;-1:-1:-1;29246:13:0;29261;29266:1;29269:4;29261;:13::i;29241:34::-;29224:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;29286:6:0;;-1:-1:-1;29286:4:0;:6::i;:::-;29340:5;;29334:4;;29308:69;;-1:-1:-1;;;;;29340:5:0;;;;29334:4;;;;29322:10;;-1:-1:-1;;;;;;;;;;;29308:69:0;;;29347:13;;29362:14;;29308:69;:::i;:::-;;;;;;;;29410:3;;29403:42;;-1:-1:-1;;;29403:42:0;;29388:12;;-1:-1:-1;;;;;29410:3:0;;29403:21;;:42;;29433:10;;29403:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29388:57;;29483:1;29459:21;:25;:50;;;;;29505:4;29488:13;:21;;29459:50;:66;;;;;29521:4;29513;:12;;29459:66;29456:226;;;29537:10;29550:30;29555:21;29578:1;29550:4;:30::i;:::-;29537:43;;29591:46;29622:10;29634:2;29591:30;:46::i;:::-;29668:2;29648:16;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;29456:226:0;-1:-1:-1;;29701:1:0;29692:6;:10;-1:-1:-1;;27783:1960:0;;;;:::o;17474:316::-;17618:13;;17584:5;;17577:38;;-1:-1:-1;;;17577:38:0;;-1:-1:-1;;;;;17584:5:0;;;;17577:23;;:38;;17609:4;;17577:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;17560:5;;-1:-1:-1;;;;;17560:5:0;17551:15;;;;:8;:15;;;;;17560:5;17551:23;:80;;;;17690:13;;17674;;17658;;:29;;17674:13;17658:29;:::i;:::-;:45;;;;:::i;:::-;17747:4;;17740:37;;-1:-1:-1;;;17740:37:0;;17644:60;;-1:-1:-1;17644:60:0;;-1:-1:-1;;;;;17747:4:0;;;;17740:22;;:37;;17771:4;;17740:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;;;:::i;:::-;17724:4;;-1:-1:-1;;;;;17724:4:0;17715:14;;;;:8;:14;;;;;17724:4;17715:22;:67;-1:-1:-1;17474:316:0:o;16601:387::-;16660:4;16690:28;16710:7;16690:19;:28::i;:::-;16687:51;;;-1:-1:-1;16730:5:0;;16601:387;-1:-1:-1;16601:387:0:o;16687:51::-;16897:20;;-1:-1:-1;;;;;;;;;;;16937:15:0;;;;;:42;;;16968:11;16956:8;:23;;16937:42;16929:51;16601:387;-1:-1:-1;;;;16601:387:0:o;1009:329::-;1086:7;;1124:5;1128:1;1124;:5;:::i;:::-;1111:18;-1:-1:-1;1148:6:0;;;:21;;-1:-1:-1;1168:1:0;1158:6;1163:1;1158:2;:6;:::i;:::-;:11;1148:21;1140:50;;;;-1:-1:-1;;;1140:50:0;;;;;;;:::i;:::-;1201:10;1214:15;:2;1220:8;1214:15;:::i;:::-;1201:28;;1254:2;1248;:8;;1240:37;;;;-1:-1:-1;;;1240:37:0;;;;;;;:::i;:::-;1288:10;1301:9;1306:4;1301:2;:9;:::i;:::-;1288:22;1009:329;-1:-1:-1;;;;;;1009:329:0:o;39648:184::-;39766:34;;-1:-1:-1;;;39766:34:0;;39754:9;;-1:-1:-1;;;;;39766:22:0;;;;;:34;;39789:2;;39793:6;;39766:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39754:46;;39819:4;39811:13;;;;;;39740:92;39648:184;;;:::o;1346:405::-;1423:7;1456:6;1448:31;;;;-1:-1:-1;;;1448:31:0;;16957:2:1;1448:31:0;;;16939:21:1;16996:2;16976:18;;;16969:30;-1:-1:-1;;;17015:18:1;;;17008:42;17067:18;;1448:31:0;16755:336:1;1448:31:0;1490:10;1503:8;:1;1507:4;1503:8;:::i;:::-;1490:21;-1:-1:-1;1530:6:0;;;:24;;-1:-1:-1;1540:6:0;1545:1;1540:2;:6;:::i;:::-;1550:4;1540:14;1530:24;1522:53;;;;-1:-1:-1;;;1522:53:0;;;;;;;:::i;:::-;1603:10;1622:5;1626:1;1622;:5;:::i;:::-;1616:12;;:2;:12;:::i;:::-;1603:25;;1653:2;1647;:8;;1639:37;;;;-1:-1:-1;;;1639:37:0;;;;;;;:::i;:::-;1704:10;1717:6;1722:1;1717:2;:6;:::i;11013:252::-;-1:-1:-1;;;;;11095:13:0;;:8;:13;;;;;;;;;;;:20;-1:-1:-1;11095:20:0;11087:29;;;;;;-1:-1:-1;;;;;11148:13:0;;:8;:13;;;;;;;;;;;11143:24;;11163:3;11143:4;:24::i;:::-;-1:-1:-1;;;;;11127:13:0;;;:8;:13;;;;;;;;;;;:40;;;;11199:13;;;;;;;11194:24;;11214:3;11194:4;:24::i;:::-;-1:-1:-1;;;;;11178:13:0;;;:8;:13;;;;;;;;;;;;:40;;;;11234:23;21195:25:1;;;11178:13:0;;11234:23;;;;-1:-1:-1;;;;;;;;;;;11234:23:0;21168:18:1;11234:23:0;;;;;;;11013:252;;;:::o;550:214::-;627:7;653:9;664;677:14;686:1;689;677:8;:14::i;:::-;652:39;;;;711:4;710:5;702:35;;;;-1:-1:-1;;;702:35:0;;19520:2:1;702:35:0;;;19502:21:1;19559:2;19539:18;;;19532:30;-1:-1:-1;;;19578:18:1;;;19571:47;19635:18;;702:35:0;19318:341:1;702:35:0;-1:-1:-1;755:1:0;550:214;-1:-1:-1;;;550:214:0:o;350:192::-;427:7;;464:5;468:1;464;:5;:::i;:::-;452:17;;493:1;488;:6;;480:35;;;;-1:-1:-1;;;480:35:0;;19866:2:1;480:35:0;;;19848:21:1;19905:2;19885:18;;;19878:30;-1:-1:-1;;;19924:18:1;;;19917:46;19980:18;;480:35:0;19664:340:1;480:35:0;533:1;350:192;-1:-1:-1;;;350:192:0:o;2093:567::-;2175:7;2216:5;2208:4;:13;;2200:47;;;;-1:-1:-1;;;2200:47:0;;18408:2:1;2200:47:0;;;18390:21:1;18447:2;18427:18;;;18420:30;-1:-1:-1;;;18466:18:1;;;18459:51;18527:18;;2200:47:0;18206:345:1;2200:47:0;2274:18;2266:4;:26;;2258:61;;;;-1:-1:-1;;;2258:61:0;;20900:2:1;2258:61:0;;;20882:21:1;20939:2;20919:18;;;20912:30;-1:-1:-1;;;20958:18:1;;;20951:52;21020:18;;2258:61:0;20698:346:1;2258:61:0;2332:13;2349:11;2356:3;2349:6;:11::i;:::-;2332:28;;2371:14;2388:16;2393:3;2398:5;2388:4;:16::i;:::-;2371:33;;2417:16;2436:24;2442:4;2448:11;2453:5;2448:4;:11::i;:::-;2436:5;:24::i;:::-;2417:43;-1:-1:-1;2477:11:0;2473:59;;2512:8;-1:-1:-1;2505:15:0;;-1:-1:-1;;2505:15:0;2473:59;2544:21;2568:37;2579:4;2585:6;2593:11;2568:10;:37::i;:::-;2544:61;;2623:29;2628:8;2638:13;2623:4;:29::i;:::-;2616:36;2093:567;-1:-1:-1;;;;;;;2093:567:0:o;39429:207::-;39549:55;;-1:-1:-1;;;39549:55:0;;-1:-1:-1;;;;;7060:15:1;;;39549:55:0;;;7042:34:1;39590:4:0;7092:18:1;;;7085:43;7144:18;;;7137:34;;;39537:9:0;;39549:26;;;;;;6977:18:1;;39549:55:0;6802:375:1;10786:219:0;10882:4;10865:8;:23;;;;;;;;;;;10860:34;;10890:3;10860:4;:34::i;:::-;10851:4;10834:8;:23;;;;;;;;;;:60;10924:11;;10919:22;;10937:3;10919:4;:22::i;:::-;10905:11;:36;10957:40;;21195:25:1;;;10986:4:0;;10974:1;;-1:-1:-1;;;;;;;;;;;10957:40:0;21183:2:1;21168:18;10957:40:0;;;;;;;10786:219;:::o;11273:97::-;11333:29;11347:4;11354:2;11358:3;11333:5;:29::i;:::-;11273:97;;:::o;8106:318::-;8166:4;8333:20;;-1:-1:-1;;;;;;;;;;;8373:23:0;;;;;;:42;;-1:-1:-1;;8400:15:0;;;8365:51;-1:-1:-1;;8106:318:0:o;7872:198::-;7983:12;;;7945;7983;;;;;;;;;-1:-1:-1;;;;;7962:7:0;;;7976:5;;7962:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7944:52;;;8015:7;8007:55;;;;-1:-1:-1;;;8007:55:0;;19116:2:1;8007:55:0;;;19098:21:1;19155:2;19135:18;;;19128:30;19194:34;19174:18;;;19167:62;-1:-1:-1;;;19245:18:1;;;19238:33;19288:19;;8007:55:0;18914:399:1;8007:55:0;7933:137;7872:198;;:::o;40095:172::-;40157:4;40141:13;;:20;40138:122;;;40190:4;;40196:8;;40206:13;;40174:46;;-1:-1:-1;;;;;40190:4:0;;;;40196:8;;40174:15;:46::i;:::-;40247:1;40231:13;:17;40138:122;40095:172::o;39844:239::-;39902:5;39886:13;;:21;39883:193;;;39925:4;;39940:13;;39920:34;;-1:-1:-1;;;39920:34:0;;-1:-1:-1;;;;;39925:4:0;;;;39920:19;;:34;;;;21195:25:1;;;21183:2;21168:18;;21049:177;39920:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39970:4:0;;39991:13;;-1:-1:-1;;;;;39970:4:0;;;;-1:-1:-1;39965:14:0;;-1:-1:-1;39986:34:0;;40006:13;40011:2;40015:3;40006:4;:13::i;39986:34::-;40028:4;;39965:71;;;;;;-1:-1:-1;;;;;;39965:71:0;;;40022:4;39965:71;;;9243:25:1;-1:-1:-1;;;;;40028:4:0;;;9284:18:1;;;9277:60;40028:4:0;9353:18:1;;;9346:34;9216:18;;39965:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40063:1:0;40047:13;:17;-1:-1:-1;;;39844:239:0:o;27593:178::-;27635:10;27648:25;27672:1;27648:21;:25;:::i;:::-;27635:38;;27684:46;27715:10;27727:2;27684:30;:46::i;:::-;27761:2;27741:16;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;27593:178:0:o;772:229::-;853:4;859;890:1;885;:6;881:113;;916:5;920:1;916;:5;:::i;:::-;923;908:21;;;;;;881:113;970:5;974:1;970;:5;:::i;:::-;977:4;962:20;;;;881:113;772:229;;;;;:::o;220:122::-;288:7;320;325:1;320:4;:7::i;:::-;:14;;330:4;320:14;:::i;98:114::-;164:7;196:8;200:4;196:1;:8;:::i;1759:326::-;1837:7;;1874:5;1878:1;1874;:5;:::i;:::-;:21;;1891:4;1874:21;;;1887:1;1874:21;1862:33;-1:-1:-1;1913:6:0;1918:1;1913:6;;:::i;:::-;;;1908:151;1921:6;;1908:151;;1956:10;1961:1;1964;1956:4;:10::i;:::-;1952:14;-1:-1:-1;1987:5:0;1991:1;1987;:5;:::i;:::-;:10;1983:65;;2022:10;2027:1;2030;2022:4;:10::i;:::-;2018:14;;1983:65;1929:6;1934:1;1929:6;;:::i;:::-;;;1908:151;;2668:864;2775:7;2816:3;2775:7;;2856:20;2865:4;2871;2856:8;:20::i;:::-;2830:46;;-1:-1:-1;2830:46:0;-1:-1:-1;2902:4:0;;2887:12;3001:1;2984:518;3012:9;3004:4;:17;2984:518;;3043:12;3058:8;:1;3062:4;3058:8;:::i;:::-;3043:23;;3082:9;3093;3106:29;3115:1;3118:16;3123:4;3129;3118;:16::i;:::-;3106:8;:29::i;:::-;3081:54;;;;3157:22;3162:4;3168:10;3173:1;3176;3168:4;:10::i;3157:22::-;3150:29;;3201:16;3206:4;3212;3201;:16::i;:::-;3194:23;-1:-1:-1;3236:9:0;3232:20;;3247:5;;;;;3232:20;3273:4;3269:30;;;3290:9;;;3269:30;3318:4;3314:30;;;3335:9;;;3314:30;3363:8;3359:132;;;3398:15;3403:3;3408:4;3398;:15::i;:::-;3392:21;;3359:132;;;3460:15;3465:3;3470:4;3460;:15::i;:::-;3454:21;;3359:132;3028:474;;;3023:3;;;;;:::i;:::-;;;;2984:518;;;-1:-1:-1;3521:3:0;;2668:864;-1:-1:-1;;;;;;;;;2668:864:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:334::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;938:38;972:2;961:9;957:18;938:38;:::i;:::-;928:48;;648:334;;;;;:::o;987:478::-;1082:6;1090;1098;1106;1114;1167:3;1155:9;1146:7;1142:23;1138:33;1135:53;;;1184:1;1181;1174:12;1135:53;1207:29;1226:9;1207:29;:::i;:::-;1197:39;;1255:38;1289:2;1278:9;1274:18;1255:38;:::i;:::-;1245:48;;1312:38;1346:2;1335:9;1331:18;1312:38;:::i;:::-;1302:48;;1369:38;1403:2;1392:9;1388:18;1369:38;:::i;:::-;987:478;;;;-1:-1:-1;987:478:1;;1454:3;1439:19;1426:33;;987:478;-1:-1:-1;;987:478:1:o;1470:403::-;1556:6;1564;1572;1580;1633:3;1621:9;1612:7;1608:23;1604:33;1601:53;;;1650:1;1647;1640:12;1601:53;1673:29;1692:9;1673:29;:::i;:::-;1663:39;;1721:38;1755:2;1744:9;1740:18;1721:38;:::i;:::-;1711:48;;1778:38;1812:2;1801:9;1797:18;1778:38;:::i;:::-;1470:403;;;;-1:-1:-1;1768:48:1;;1863:2;1848:18;1835:32;;-1:-1:-1;;1470:403:1:o;1878:328::-;1955:6;1963;1971;2024:2;2012:9;2003:7;1999:23;1995:32;1992:52;;;2040:1;2037;2030:12;1992:52;2063:29;2082:9;2063:29;:::i;:::-;2053:39;;2111:38;2145:2;2134:9;2130:18;2111:38;:::i;:::-;2101:48;;2196:2;2185:9;2181:18;2168:32;2158:42;;1878:328;;;;;:::o;2211:315::-;2276:6;2284;2337:2;2325:9;2316:7;2312:23;2308:32;2305:52;;;2353:1;2350;2343:12;2305:52;2376:29;2395:9;2376:29;:::i;:::-;2366:39;;2455:2;2444:9;2440:18;2427:32;2468:28;2490:5;2468:28;:::i;:::-;2515:5;2505:15;;;2211:315;;;;;:::o;2531:254::-;2599:6;2607;2660:2;2648:9;2639:7;2635:23;2631:32;2628:52;;;2676:1;2673;2666:12;2628:52;2699:29;2718:9;2699:29;:::i;:::-;2689:39;2775:2;2760:18;;;;2747:32;;-1:-1:-1;;;2531:254:1:o;2790:245::-;2857:6;2910:2;2898:9;2889:7;2885:23;2881:32;2878:52;;;2926:1;2923;2916:12;2878:52;2958:9;2952:16;2977:28;2999:5;2977:28;:::i;3040:180::-;3099:6;3152:2;3140:9;3131:7;3127:23;3123:32;3120:52;;;3168:1;3165;3158:12;3120:52;-1:-1:-1;3191:23:1;;3040:180;-1:-1:-1;3040:180:1:o;3225:184::-;3295:6;3348:2;3336:9;3327:7;3323:23;3319:32;3316:52;;;3364:1;3361;3354:12;3316:52;-1:-1:-1;3387:16:1;;3225:184;-1:-1:-1;3225:184:1:o;3414:322::-;3491:6;3499;3507;3560:2;3548:9;3539:7;3535:23;3531:32;3528:52;;;3576:1;3573;3566:12;3528:52;3612:9;3599:23;3589:33;;3641:38;3675:2;3664:9;3660:18;3641:38;:::i;3741:391::-;3827:6;3835;3843;3851;3904:3;3892:9;3883:7;3879:23;3875:33;3872:53;;;3921:1;3918;3911:12;3872:53;3957:9;3944:23;3934:33;;3986:38;4020:2;4009:9;4005:18;3986:38;:::i;:::-;3741:391;;3976:48;;-1:-1:-1;;;;4071:2:1;4056:18;;4043:32;;4122:2;4107:18;4094:32;;3741:391::o;4137:683::-;4232:6;4240;4248;4301:2;4289:9;4280:7;4276:23;4272:32;4269:52;;;4317:1;4314;4307:12;4269:52;4340:23;;;-1:-1:-1;4414:2:1;4399:18;;4386:32;-1:-1:-1;;;;;4467:14:1;;;4464:34;;;4494:1;4491;4484:12;4464:34;4532:6;4521:9;4517:22;4507:32;;4577:7;4570:4;4566:2;4562:13;4558:27;4548:55;;4599:1;4596;4589:12;4548:55;4639:2;4626:16;4665:2;4657:6;4654:14;4651:34;;;4681:1;4678;4671:12;4651:34;4734:7;4729:2;4719:6;4716:1;4712:14;4708:2;4704:23;4700:32;4697:45;4694:65;;;4755:1;4752;4745:12;4694:65;4786:2;4782;4778:11;4768:21;;4808:6;4798:16;;;;;4137:683;;;;;:::o;4825:248::-;4893:6;4901;4954:2;4942:9;4933:7;4929:23;4925:32;4922:52;;;4970:1;4967;4960:12;4922:52;-1:-1:-1;;4993:23:1;;;5063:2;5048:18;;;5035:32;;-1:-1:-1;4825:248:1:o;5078:245::-;5157:6;5165;5218:2;5206:9;5197:7;5193:23;5189:32;5186:52;;;5234:1;5231;5224:12;5186:52;-1:-1:-1;;5257:16:1;;5313:2;5298:18;;;5292:25;5257:16;;5292:25;;-1:-1:-1;5078:245:1:o;5328:454::-;5423:6;5431;5439;5447;5455;5508:3;5496:9;5487:7;5483:23;5479:33;5476:53;;;5525:1;5522;5515:12;5476:53;-1:-1:-1;;5548:23:1;;;5618:2;5603:18;;5590:32;;-1:-1:-1;5669:2:1;5654:18;;5641:32;;5720:2;5705:18;;5692:32;;-1:-1:-1;5771:3:1;5756:19;5743:33;;-1:-1:-1;5328:454:1;-1:-1:-1;5328:454:1:o;5787:523::-;5891:6;5899;5907;5915;5923;5931;5984:3;5972:9;5963:7;5959:23;5955:33;5952:53;;;6001:1;5998;5991:12;5952:53;-1:-1:-1;;6024:23:1;;;6094:2;6079:18;;6066:32;;-1:-1:-1;6145:2:1;6130:18;;6117:32;;6196:2;6181:18;;6168:32;;-1:-1:-1;6247:3:1;6232:19;;6219:33;;-1:-1:-1;6299:3:1;6284:19;6271:33;;-1:-1:-1;5787:523:1;-1:-1:-1;5787:523:1:o;6315:274::-;6444:3;6482:6;6476:13;6498:53;6544:6;6539:3;6532:4;6524:6;6520:17;6498:53;:::i;:::-;6567:16;;;;;6315:274;-1:-1:-1;;6315:274:1:o;6594:203::-;-1:-1:-1;;;;;6758:32:1;;;;6740:51;;6728:2;6713:18;;6594:203::o;7182:332::-;-1:-1:-1;;;;;7432:32:1;;;;7414:51;;7496:2;7481:18;;7474:34;7402:2;7387:18;;7182:332::o;9391:383::-;9540:2;9529:9;9522:21;9503:4;9572:6;9566:13;9615:6;9610:2;9599:9;9595:18;9588:34;9631:66;9690:6;9685:2;9674:9;9670:18;9665:2;9657:6;9653:15;9631:66;:::i;:::-;9758:2;9737:15;-1:-1:-1;;9733:29:1;9718:45;;;;9765:2;9714:54;;9391:383;-1:-1:-1;;9391:383:1:o;9779:334::-;9981:2;9963:21;;;10020:2;10000:18;;;9993:30;-1:-1:-1;;;10054:2:1;10039:18;;10032:40;10104:2;10089:18;;9779:334::o;10118:350::-;10320:2;10302:21;;;10359:2;10339:18;;;10332:30;-1:-1:-1;;;10393:2:1;10378:18;;10371:56;10459:2;10444:18;;10118:350::o;10810:340::-;11012:2;10994:21;;;11051:2;11031:18;;;11024:30;-1:-1:-1;;;11085:2:1;11070:18;;11063:46;11141:2;11126:18;;10810:340::o;12331:::-;12533:2;12515:21;;;12572:2;12552:18;;;12545:30;-1:-1:-1;;;12606:2:1;12591:18;;12584:46;12662:2;12647:18;;12331:340::o;12676:::-;12878:2;12860:21;;;12917:2;12897:18;;;12890:30;-1:-1:-1;;;12951:2:1;12936:18;;12929:46;13007:2;12992:18;;12676:340::o;13021:::-;13223:2;13205:21;;;13262:2;13242:18;;;13235:30;-1:-1:-1;;;13296:2:1;13281:18;;13274:46;13352:2;13337:18;;13021:340::o;13366:475::-;13568:2;13550:21;;;13607:2;13587:18;;;13580:30;-1:-1:-1;;;;;;;;;;;13641:2:1;13626:18;;13619:62;13717:34;13712:2;13697:18;;13690:62;-1:-1:-1;;;13783:3:1;13768:19;;13761:38;13831:3;13816:19;;13366:475::o;14265:339::-;14467:2;14449:21;;;14506:2;14486:18;;;14479:30;-1:-1:-1;;;14540:2:1;14525:18;;14518:45;14595:2;14580:18;;14265:339::o;15362:350::-;15564:2;15546:21;;;15603:2;15583:18;;;15576:30;-1:-1:-1;;;15637:2:1;15622:18;;15615:56;15703:2;15688:18;;15362:350::o;16066:339::-;16268:2;16250:21;;;16307:2;16287:18;;;16280:30;-1:-1:-1;;;16341:2:1;16326:18;;16319:45;16396:2;16381:18;;16066:339::o;16410:340::-;16612:2;16594:21;;;16651:2;16631:18;;;16624:30;-1:-1:-1;;;16685:2:1;16670:18;;16663:46;16741:2;16726:18;;16410:340::o;17096:338::-;17298:2;17280:21;;;17337:2;17317:18;;;17310:30;-1:-1:-1;;;17371:2:1;17356:18;;17349:44;17425:2;17410:18;;17096:338::o;17439:342::-;17641:2;17623:21;;;17680:2;17660:18;;;17653:30;-1:-1:-1;;;17714:2:1;17699:18;;17692:48;17772:2;17757:18;;17439:342::o;17786:415::-;17988:2;17970:21;;;18027:2;18007:18;;;18000:30;18066:34;18061:2;18046:18;;18039:62;-1:-1:-1;;;18132:2:1;18117:18;;18110:49;18191:3;18176:19;;17786:415::o;20009:337::-;20211:2;20193:21;;;20250:2;20230:18;;;20223:30;-1:-1:-1;;;20284:2:1;20269:18;;20262:43;20337:2;20322:18;;20009:337::o;21231:256::-;21413:25;;;21469:2;21454:18;;21447:34;21401:2;21386:18;;21231:256::o;21934:128::-;21974:3;22005:1;22001:6;21998:1;21995:13;21992:39;;;22011:18;;:::i;:::-;-1:-1:-1;22047:9:1;;21934:128::o;22067:120::-;22107:1;22133;22123:35;;22138:18;;:::i;:::-;-1:-1:-1;22172:9:1;;22067:120::o;22192:168::-;22232:7;22298:1;22294;22290:6;22286:14;22283:1;22280:21;22275:1;22268:9;22261:17;22257:45;22254:71;;;22305:18;;:::i;:::-;-1:-1:-1;22345:9:1;;22192:168::o;22365:125::-;22405:4;22433:1;22430;22427:8;22424:34;;;22438:18;;:::i;:::-;-1:-1:-1;22475:9:1;;22365:125::o;22495:258::-;22567:1;22577:113;22591:6;22588:1;22585:13;22577:113;;;22667:11;;;22661:18;22648:11;;;22641:39;22613:2;22606:10;22577:113;;;22708:6;22705:1;22702:13;22699:48;;;-1:-1:-1;;22743:1:1;22725:16;;22718:27;22495:258::o;22758:380::-;22837:1;22833:12;;;;22880;;;22901:61;;22955:4;22947:6;22943:17;22933:27;;22901:61;23008:2;23000:6;22997:14;22977:18;22974:38;22971:161;;;23054:10;23049:3;23045:20;23042:1;23035:31;23089:4;23086:1;23079:15;23117:4;23114:1;23107:15;22971:161;;22758:380;;;:::o;23143:135::-;23182:3;-1:-1:-1;;23203:17:1;;23200:43;;;23223:18;;:::i;:::-;-1:-1:-1;23270:1:1;23259:13;;23143:135::o;23283:112::-;23315:1;23341;23331:35;;23346:18;;:::i;:::-;-1:-1:-1;23380:9:1;;23283:112::o;23400:127::-;23461:10;23456:3;23452:20;23449:1;23442:31;23492:4;23489:1;23482:15;23516:4;23513:1;23506:15;23532:127;23593:10;23588:3;23584:20;23581:1;23574:31;23624:4;23621:1;23614:15;23648:4;23645:1;23638:15;23664:127;23725:10;23720:3;23716:20;23713:1;23706:31;23756:4;23753:1;23746:15;23780:4;23777:1;23770:15;23928:118;24014:5;24007:13;24000:21;23993:5;23990:32;23980:60;;24036:1;24033;24026:12;23980:60;23928:118;:::o
Swarm Source
ipfs://6e975ff83a4186e01467ea640ea3732de6c1a56f22974857b5b47eb9274d0e34
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.