BscScan - Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,293,791 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact Token... | 44870304 | 16 hrs ago | IN | 0 BNB | 0.00012752 | ||||
Swap Exact Token... | 44870302 | 16 hrs ago | IN | 0 BNB | 0.00012752 | ||||
Swap Exact Token... | 44870299 | 16 hrs ago | IN | 0 BNB | 0.00012752 | ||||
Swap Exact Token... | 44870298 | 16 hrs ago | IN | 0 BNB | 0.00012752 | ||||
Swap Exact Token... | 44870288 | 16 hrs ago | IN | 0 BNB | 0.00012752 | ||||
Swap Exact Token... | 44870286 | 16 hrs ago | IN | 0 BNB | 0.00012752 | ||||
Swap Exact Token... | 44870272 | 16 hrs ago | IN | 0 BNB | 0.00012751 | ||||
Swap Exact Token... | 44870261 | 16 hrs ago | IN | 0 BNB | 0.00012754 | ||||
Swap Exact Token... | 44870248 | 16 hrs ago | IN | 0 BNB | 0.00012754 | ||||
Swap Exact Token... | 44870245 | 16 hrs ago | IN | 0 BNB | 0.00012754 | ||||
Swap Exact Token... | 44870243 | 16 hrs ago | IN | 0 BNB | 0.00011687 | ||||
Swap Exact Token... | 44869666 | 17 hrs ago | IN | 0 BNB | 0.00012753 | ||||
Swap Exact Token... | 44848163 | 35 hrs ago | IN | 0 BNB | 0.00012747 | ||||
Swap Exact Token... | 44839835 | 42 hrs ago | IN | 0 BNB | 0.00012754 | ||||
Swap Exact Token... | 44839826 | 42 hrs ago | IN | 0 BNB | 0.00012754 | ||||
Remove Liquidity | 44809801 | 2 days ago | IN | 0 BNB | 0.00003589 | ||||
Remove Liquidity | 44809569 | 2 days ago | IN | 0 BNB | 0.00002355 | ||||
Remove Liquidity | 44809484 | 2 days ago | IN | 0 BNB | 0.00002349 | ||||
Swap Tokens For ... | 44732488 | 5 days ago | IN | 0 BNB | 0.00023003 | ||||
Swap Exact Token... | 44729178 | 5 days ago | IN | 0 BNB | 0.00012752 | ||||
Swap Exact Token... | 44729172 | 5 days ago | IN | 0 BNB | 0.00014481 | ||||
Swap Exact Token... | 44712095 | 6 days ago | IN | 0 BNB | 0.00012754 | ||||
Swap Exact Token... | 44702565 | 6 days ago | IN | 0 BNB | 0.00012754 | ||||
Swap Exact Token... | 44696690 | 6 days ago | IN | 0 BNB | 0.00012752 | ||||
Swap Exact Token... | 44696673 | 6 days ago | IN | 0 BNB | 0.00012752 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
44879870 | 8 hrs ago | 0.02217239 BNB | ||||
44879870 | 8 hrs ago | 0.02217239 BNB | ||||
44866584 | 19 hrs ago | 0.01201503 BNB | ||||
44866584 | 19 hrs ago | 0.01201503 BNB | ||||
44853274 | 31 hrs ago | 0.002991 BNB | ||||
44853274 | 31 hrs ago | 0.002991 BNB | ||||
44852892 | 31 hrs ago | 0.01620074 BNB | ||||
44852892 | 31 hrs ago | 0.01620074 BNB | ||||
44836893 | 44 hrs ago | 0.0154112 BNB | ||||
44836893 | 44 hrs ago | 0.0154112 BNB | ||||
44813011 | 2 days ago | 0.01782941 BNB | ||||
44813011 | 2 days ago | 0.01782941 BNB | ||||
44805598 | 2 days ago | 0.006979 BNB | ||||
44805598 | 2 days ago | 0.006979 BNB | ||||
44784354 | 3 days ago | 0.00121071 BNB | ||||
44784354 | 3 days ago | 0.00121071 BNB | ||||
44779626 | 3 days ago | 0.04330497 BNB | ||||
44779626 | 3 days ago | 0.04330497 BNB | ||||
44768393 | 4 days ago | 0.004985 BNB | ||||
44768393 | 4 days ago | 0.004985 BNB | ||||
44766582 | 4 days ago | 0.00460999 BNB | ||||
44766582 | 4 days ago | 0.00460999 BNB | ||||
44757996 | 4 days ago | 0.0096222 BNB | ||||
44757996 | 4 days ago | 0.0096222 BNB | ||||
44756999 | 4 days ago | 0.00077256 BNB |
Loading...
Loading
Contract Name:
MdexRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2021-04-06 */ pragma solidity =0.6.6; interface IMdexFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function FEE_RATE_DENOMINATOR() external view returns (uint256); function feeRateNumerator() external view returns (uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function feeToRate() external view returns (uint256); function initCodeHash() external view returns (bytes32); function pairFeeToRate(address) external view returns (uint256); function pairFees(address) external view returns (uint256); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function addPair(address) external returns (bool); function delPair(address) external returns (bool); function getSupportListLength() external view returns (uint256); function isSupportPair(address pair) external view returns (bool); function getSupportPair(uint256 index) external view returns (address); function setFeeRateNumerator(uint256) external; function setPairFees(address pair, uint256 fee) external; function setDefaultFeeToRate(uint256) external; function setPairFeeToRate(address pair, uint256 rate) external; function getPairFees(address) external view returns (uint256); function getPairRate(address) external view returns (uint256); function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1); function pairFor(address tokenA, address tokenB) external view returns (address pair); function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB); function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB); function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut); function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IMdexPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IMdexRouter { function factory() external pure returns (address); function WBNB() external pure returns (address); function swapMining() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external view returns (uint256 amountB); function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut); function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface ISwapMining { function swap(address account, address input, address output, uint256 amount) external returns (bool); } interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } interface IWBNB { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } library SafeMath { uint256 constant WAD = 10 ** 18; uint256 constant RAY = 10 ** 27; function wad() public pure returns (uint256) { return WAD; } function ray() public pure returns (uint256) { return RAY; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a <= b ? a : b; } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function sqrt(uint256 a) internal pure returns (uint256 b) { if (a > 3) { b = a; uint256 x = a / 2 + 1; while (x < b) { b = x; x = (a / x + x) / 2; } } else if (a != 0) { b = 1; } } function wmul(uint256 a, uint256 b) internal pure returns (uint256) { return mul(a, b) / WAD; } function wmulRound(uint256 a, uint256 b) internal pure returns (uint256) { return add(mul(a, b), WAD / 2) / WAD; } function rmul(uint256 a, uint256 b) internal pure returns (uint256) { return mul(a, b) / RAY; } function rmulRound(uint256 a, uint256 b) internal pure returns (uint256) { return add(mul(a, b), RAY / 2) / RAY; } function wdiv(uint256 a, uint256 b) internal pure returns (uint256) { return div(mul(a, WAD), b); } function wdivRound(uint256 a, uint256 b) internal pure returns (uint256) { return add(mul(a, WAD), b / 2) / b; } function rdiv(uint256 a, uint256 b) internal pure returns (uint256) { return div(mul(a, RAY), b); } function rdivRound(uint256 a, uint256 b) internal pure returns (uint256) { return add(mul(a, RAY), b / 2) / b; } function wpow(uint256 x, uint256 n) internal pure returns (uint256) { uint256 result = WAD; while (n > 0) { if (n % 2 != 0) { result = wmul(result, x); } x = wmul(x, x); n /= 2; } return result; } function rpow(uint256 x, uint256 n) internal pure returns (uint256) { uint256 result = RAY; while (n > 0) { if (n % 2 != 0) { result = rmul(result, x); } x = rmul(x, x); n /= 2; } return result; } } library TransferHelper { function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value : value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } } contract Ownable { address private _owner; constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } function owner() public view returns (address) { return _owner; } function isOwner(address account) public view returns (bool) { return account == _owner; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } modifier onlyOwner() { require(isOwner(msg.sender), "Ownable: caller is not the owner"); _; } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); } contract MdexRouter is IMdexRouter, Ownable { using SafeMath for uint256; address public immutable override factory; address public immutable override WBNB; address public override swapMining; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'MdexRouter: EXPIRED'); _; } constructor(address _factory, address _WBNB) public { factory = _factory; WBNB = _WBNB; } receive() external payable { assert(msg.sender == WBNB); // only accept BNB via fallback from the WBNB contract } function pairFor(address tokenA, address tokenB) public view returns (address pair){ pair = IMdexFactory(factory).pairFor(tokenA, tokenB); } function setSwapMining(address _swapMininng) public onlyOwner { swapMining = _swapMininng; } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet if (IMdexFactory(factory).getPair(tokenA, tokenB) == address(0)) { IMdexFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = IMdexFactory(factory).getReserves(tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = IMdexFactory(factory).quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'MdexRouter: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = IMdexFactory(factory).quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'MdexRouter: INSUFFICIENT_A_AMOUNT'); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = pairFor(tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IMdexPair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WBNB, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = pairFor(token, WBNB); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWBNB(WBNB).deposit{value : amountETH}(); assert(IWBNB(WBNB).transfer(pair, amountETH)); liquidity = IMdexPair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = pairFor(tokenA, tokenB); IMdexPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IMdexPair(pair).burn(to); (address token0,) = IMdexFactory(factory).sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'MdexRouter: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'MdexRouter: INSUFFICIENT_B_AMOUNT'); } function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) { (amountToken, amountETH) = removeLiquidity( token, WBNB, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWBNB(WBNB).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountA, uint amountB) { address pair = pairFor(tokenA, tokenB); uint value = approveMax ? uint(- 1) : liquidity; IMdexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountToken, uint amountETH) { address pair = pairFor(token, WBNB); uint value = approveMax ? uint(- 1) : liquidity; IMdexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountETH) { (, amountETH) = removeLiquidity( token, WBNB, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this))); IWBNB(WBNB).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountETH) { address pair = pairFor(token, WBNB); uint value = approveMax ? uint(- 1) : liquidity; IMdexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = IMdexFactory(factory).sortTokens(input, output); uint amountOut = amounts[i + 1]; if (swapMining != address(0)) { ISwapMining(swapMining).swap(msg.sender, input, output, amountOut); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? pairFor(output, path[i + 2]) : _to; IMdexPair(pairFor(input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = IMdexFactory(factory).getAmountsOut(amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, pairFor(path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = IMdexFactory(factory).getAmountsIn(amountOut, path); require(amounts[0] <= amountInMax, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, pairFor(path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WBNB, 'MdexRouter: INVALID_PATH'); amounts = IMdexFactory(factory).getAmountsOut(msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWBNB(WBNB).deposit{value : amounts[0]}(); assert(IWBNB(WBNB).transfer(pairFor(path[0], path[1]), amounts[0])); _swap(amounts, path, to); } function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WBNB, 'MdexRouter: INVALID_PATH'); amounts = IMdexFactory(factory).getAmountsIn(amountOut, path); require(amounts[0] <= amountInMax, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, pairFor(path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWBNB(WBNB).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WBNB, 'MdexRouter: INVALID_PATH'); amounts = IMdexFactory(factory).getAmountsOut(amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, pairFor(path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWBNB(WBNB).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WBNB, 'MdexRouter: INVALID_PATH'); amounts = IMdexFactory(factory).getAmountsIn(amountOut, path); require(amounts[0] <= msg.value, 'MdexRouter: EXCESSIVE_INPUT_AMOUNT'); IWBNB(WBNB).deposit{value : amounts[0]}(); assert(IWBNB(WBNB).transfer(pairFor(path[0], path[1]), amounts[0])); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = IMdexFactory(factory).sortTokens(input, output); IMdexPair pair = IMdexPair(pairFor(input, output)); uint amountInput; uint amountOutput; {// scope to avoid stack too deep errors (uint reserve0, uint reserve1,) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = IMdexFactory(factory).getAmountOut(amountInput, reserveInput, reserveOutput, input, output); } if (swapMining != address(0)) { ISwapMining(swapMining).swap(msg.sender, input, output, amountOutput); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? pairFor(output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, pairFor(path[0], path[1]), amountIn ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { require(path[0] == WBNB, 'MdexRouter: INVALID_PATH'); uint amountIn = msg.value; IWBNB(WBNB).deposit{value : amountIn}(); assert(IWBNB(WBNB).transfer(pairFor(path[0], path[1]), amountIn)); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WBNB, 'MdexRouter: INVALID_PATH'); TransferHelper.safeTransferFrom( path[0], msg.sender, pairFor(path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WBNB).balanceOf(address(this)); require(amountOut >= amountOutMin, 'MdexRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWBNB(WBNB).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) public view override returns (uint256 amountB) { return IMdexFactory(factory).quote(amountA, reserveA, reserveB); } function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) public view override returns (uint256 amountOut){ return IMdexFactory(factory).getAmountOut(amountIn, reserveIn, reserveOut, token0, token1); } function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) public view override returns (uint256 amountIn){ return IMdexFactory(factory).getAmountIn(amountOut, reserveIn, reserveOut, token0, token1); } function getAmountsOut(uint256 amountIn, address[] memory path) public view override returns (uint256[] memory amounts){ return IMdexFactory(factory).getAmountsOut(amountIn, path); } function getAmountsIn(uint256 amountOut, address[] memory path) public view override returns (uint256[] memory amounts){ return IMdexFactory(factory).getAmountsIn(amountOut, path); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WBNB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"WBNB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapMininng","type":"address"}],"name":"setSwapMining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapMining","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561001057600080fd5b506040516200516e3803806200516e8339818101604052604081101561003557600080fd5b508051602090910151600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614fb9620001b5600039806101ec5280610ec65280610f015280610fe352806112e452806118aa5280611b7e5280611fc852806120c2528061217852806122465280612491528061251952806128435280612abf5280612b6e5280612c3a5280612ccf5280612d43528061337952806136315280613666528061369a528061370e52806138ae5280613af55280613b7d52508061109952806113d5528061167e5280611960528061230252806126a85280612892528061294d52806129cd52806130d1528061323f52806132a35280613313528061396952806140cf528061442d528061463f528061493152806149df5280614a865280614b225280614c175250614fb96000f3fe6080604052600436106101dc5760003560e01c80638da5cb5b11610102578063c45a015511610095578063e8e3370011610064578063e8e3370014610cfc578063f2fde38b14610d7c578063f305d71914610daf578063fb3bdb4114610df557610215565b8063c45a015514610b72578063cd7290d514610b87578063d06ca61f14610bd4578063ded9382a14610c8957610215565b8063ad615dec116100d1578063ad615dec14610a08578063af2979eb14610a3e578063b6f9de9514610a91578063baa2abde14610b1557610215565b80638da5cb5b146109565780638dd950021461096b57806396ed28f91461098057806399ef4b87146109bb57610215565b80634e5eda111161017a578063715018a611610149578063715018a614610791578063791ac947146107a65780637ff36ab51461083c5780638803dbee146108c057610215565b80634e5eda11146106125780634f887183146106435780635b0d5984146106765780635c11d795146106fb57610215565b80632195995c116101b65780632195995c146104215780632f54bf6e1461049f57806338ed1739146104e65780634a25d94a1461057c57610215565b806302751cec1461021a57806318cbafe5146102865780631f00ca741461036c57610215565b3661021557336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e79565b6040805192835260208301919091528051918290030190f35b34801561029257600080fd5b5061031c600480360360a08110156102a957600080fd5b813591602081013591810190606081016040820135600160201b8111156102cf57600080fd5b8201836020820111156102e157600080fd5b803590602001918460208302840111600160201b8311171561030257600080fd5b91935091506001600160a01b038135169060200135610f93565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610358578181015183820152602001610340565b505050509050019250505060405180910390f35b34801561037857600080fd5b5061031c6004803603604081101561038f57600080fd5b81359190810190604081016020820135600160201b8111156103b057600080fd5b8201836020820111156103c257600080fd5b803590602001918460208302840111600160201b831117156103e357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113a3945050505050565b34801561042d57600080fd5b5061026d600480360361016081101561044557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561151e565b3480156104ab57600080fd5b506104d2600480360360208110156104c257600080fd5b50356001600160a01b03166115f7565b604080519115158252519081900360200190f35b3480156104f257600080fd5b5061031c600480360360a081101561050957600080fd5b813591602081013591810190606081016040820135600160201b81111561052f57600080fd5b82018360208201111561054157600080fd5b803590602001918460208302840111600160201b8311171561056257600080fd5b91935091506001600160a01b03813516906020013561160b565b34801561058857600080fd5b5061031c600480360360a081101561059f57600080fd5b813591602081013591810190606081016040820135600160201b8111156105c557600080fd5b8201836020820111156105d757600080fd5b803590602001918460208302840111600160201b831117156105f857600080fd5b91935091506001600160a01b03813516906020013561185a565b34801561061e57600080fd5b50610627611aea565b604080516001600160a01b039092168252519081900360200190f35b34801561064f57600080fd5b506102136004803603602081101561066657600080fd5b50356001600160a01b0316611af9565b34801561068257600080fd5b506106e9600480360361014081101561069a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611b75565b60408051918252519081900360200190f35b34801561070757600080fd5b50610213600480360360a081101561071e57600080fd5b813591602081013591810190606081016040820135600160201b81111561074457600080fd5b82018360208201111561075657600080fd5b803590602001918460208302840111600160201b8311171561077757600080fd5b91935091506001600160a01b038135169060200135611c62565b34801561079d57600080fd5b50610213611ed6565b3480156107b257600080fd5b50610213600480360360a08110156107c957600080fd5b813591602081013591810190606081016040820135600160201b8111156107ef57600080fd5b82018360208201111561080157600080fd5b803590602001918460208302840111600160201b8311171561082257600080fd5b91935091506001600160a01b038135169060200135611f7a565b61031c6004803603608081101561085257600080fd5b81359190810190604081016020820135600160201b81111561087357600080fd5b82018360208201111561088557600080fd5b803590602001918460208302840111600160201b831117156108a657600080fd5b91935091506001600160a01b0381351690602001356121fe565b3480156108cc57600080fd5b5061031c600480360360a08110156108e357600080fd5b813591602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460208302840111600160201b8311171561093c57600080fd5b91935091506001600160a01b038135169060200135612635565b34801561096257600080fd5b50610627612832565b34801561097757600080fd5b50610627612841565b34801561098c57600080fd5b50610627600480360360408110156109a357600080fd5b506001600160a01b0381358116916020013516612865565b3480156109c757600080fd5b506106e9600480360360a08110156109de57600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661290b565b348015610a1457600080fd5b506106e960048036036060811015610a2b57600080fd5b50803590602081013590604001356129c9565b348015610a4a57600080fd5b506106e9600480360360c0811015610a6157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a73565b61021360048036036080811015610aa757600080fd5b81359190810190604081016020820135600160201b811115610ac857600080fd5b820183602082011115610ada57600080fd5b803590602001918460208302840111600160201b83111715610afb57600080fd5b91935091506001600160a01b038135169060200135612bf4565b348015610b2157600080fd5b5061026d600480360360e0811015610b3857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612f5f565b348015610b7e57600080fd5b5061062761323d565b348015610b9357600080fd5b506106e9600480360360a0811015610baa57600080fd5b508035906020810135906040810135906001600160a01b0360608201358116916080013516613261565b348015610be057600080fd5b5061031c60048036036040811015610bf757600080fd5b81359190810190604081016020820135600160201b811115610c1857600080fd5b820183602082011115610c2a57600080fd5b803590602001918460208302840111600160201b83111715610c4b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506132e9945050505050565b348015610c9557600080fd5b5061026d6004803603610140811015610cad57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561336e565b348015610d0857600080fd5b50610d5e6004803603610100811015610d2057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613461565b60408051938452602084019290925282820152519081900360600190f35b348015610d8857600080fd5b5061021360048036036020811015610d9f57600080fd5b50356001600160a01b031661357c565b610d5e600480360360c0811015610dc557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356135e2565b61031c60048036036080811015610e0b57600080fd5b81359190810190604081016020820135600160201b811115610e2c57600080fd5b820183602082011115610e3e57600080fd5b803590602001918460208302840111600160201b83111715610e5f57600080fd5b91935091506001600160a01b038135169060200135613866565b6000808242811015610ec0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b610eef897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612f5f565b9093509150610eff898685613ccb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f6557600080fd5b505af1158015610f79573d6000803e3d6000fd5b50505050610f878583613e35565b50965096945050505050565b60608142811015610fd9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061101357fe5b905060200201356001600160a01b03166001600160a01b03161461106c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561110757600080fd5b505afa15801561111b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561114457600080fd5b8101908080516040519392919084600160201b82111561116357600080fd5b90830190602082018581111561117857600080fd5b82518660208202830111600160201b8211171561119457600080fd5b82525081516020918201928201910280838360005b838110156111c15781810151838201526020016111a9565b50505050905001604052505050915086826001845103815181106111e157fe5b602002602001015110156112265760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b6112a38686600081811061123657fe5b905060200201356001600160a01b0316336112898989600081811061125757fe5b905060200201356001600160a01b03168a8a600181811061127457fe5b905060200201356001600160a01b0316612865565b8560008151811061129657fe5b6020026020010151613f2d565b6112e28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061408a915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061132157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561135f57600080fd5b505af1158015611373573d6000803e3d6000fd5b50505050611398848360018551038151811061138b57fe5b6020026020010151613e35565b509695505050505050565b604080516307c0329d60e21b815260048101848152602482019283528351604483015283516060936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693631f00ca7493889388939192606401906020808601910280838360005b8381101561142b578181015183820152602001611413565b50505050905001935050505060006040518083038186803b15801561144f57600080fd5b505afa158015611463573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561148c57600080fd5b8101908080516040519392919084600160201b8211156114ab57600080fd5b9083019060208201858111156114c057600080fd5b82518660208202830111600160201b821117156114dc57600080fd5b82525081516020918201928201910280838360005b838110156115095781810151838201526020016114f1565b50505050905001604052505050905092915050565b600080600061152d8e8e612865565b905060008761153c578c611540565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115b657600080fd5b505af11580156115ca573d6000803e3d6000fd5b505050506115dd8f8f8f8f8f8f8f612f5f565b809450819550505050509b509b9950505050505050505050565b6000546001600160a01b0390811691161490565b60608142811015611651576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561172957600080fd5b8101908080516040519392919084600160201b82111561174857600080fd5b90830190602082018581111561175d57600080fd5b82518660208202830111600160201b8211171561177957600080fd5b82525081516020918201928201910280838360005b838110156117a657818101518382015260200161178e565b50505050905001604052505050915086826001845103815181106117c657fe5b6020026020010151101561180b5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b61181b8686600081811061123657fe5b6113988287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b606081428110156118a0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106118da57fe5b905060200201356001600160a01b03166001600160a01b031614611933576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611a0b57600080fd5b8101908080516040519392919084600160201b821115611a2a57600080fd5b908301906020820185811115611a3f57600080fd5b82518660208202830111600160201b82111715611a5b57600080fd5b82525081516020918201928201910280838360005b83811015611a88578181015183820152602001611a70565b5050505090500160405250505091508682600081518110611aa557fe5b602002602001015111156112265760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6001546001600160a01b031681565b611b02336115f7565b611b53576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ba28c7f0000000000000000000000000000000000000000000000000000000000000000612865565b9050600086611bb1578b611bb5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611c2b57600080fd5b505af1158015611c3f573d6000803e3d6000fd5b50505050611c518d8d8d8d8d8d612a73565b9d9c50505050505050505050505050565b8042811015611ca6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b611cfa85856000818110611cb657fe5b905060200201356001600160a01b031633611cf488886000818110611cd757fe5b905060200201356001600160a01b03168989600181811061127457fe5b8a613f2d565b600085856000198101818110611d0c57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d7157600080fd5b505afa158015611d85573d6000803e3d6000fd5b505050506040513d6020811015611d9b57600080fd5b50516040805160208881028281018201909352888252929350611ddd9290918991899182918501908490808284376000920191909152508892506143e8915050565b86611e8f8288886000198101818110611df257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b505afa158015611e6b573d6000803e3d6000fd5b505050506040513d6020811015611e8157600080fd5b50519063ffffffff6148b716565b1015611ecc5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b5050505050505050565b611edf336115f7565b611f30576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b8042811015611fbe576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611ff857fe5b905060200201356001600160a01b03166001600160a01b031614612051576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b61206185856000818110611cb657fe5b61209f8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506143e8915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561210957600080fd5b505afa15801561211d573d6000803e3d6000fd5b505050506040513d602081101561213357600080fd5b50519050868110156121765760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121dc57600080fd5b505af11580156121f0573d6000803e3d6000fd5b50505050611ecc8482613e35565b60608142811015612244576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061227b57fe5b905060200201356001600160a01b03166001600160a01b0316146122d4576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152346004820181815260248301938452604483018990526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363d06ca61f938b928b929091606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561237057600080fd5b505afa158015612384573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156123ad57600080fd5b8101908080516040519392919084600160201b8211156123cc57600080fd5b9083019060208201858111156123e157600080fd5b82518660208202830111600160201b821117156123fd57600080fd5b82525081516020918201928201910280838360005b8381101561242a578181015183820152602001612412565b505050509050016040525050509150868260018451038151811061244a57fe5b6020026020010151101561248f5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106124cb57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255688886000818110611cd757fe5b8460008151811061256357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156125ba57600080fd5b505af11580156125ce573d6000803e3d6000fd5b505050506040513d60208110156125e457600080fd5b50516125ec57fe5b61262b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b5095945050505050565b6060814281101561267b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561271657600080fd5b505afa15801561272a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561275357600080fd5b8101908080516040519392919084600160201b82111561277257600080fd5b90830190602082018581111561278757600080fd5b82518660208202830111600160201b821117156127a357600080fd5b82525081516020918201928201910280838360005b838110156127d05781810151838201526020016127b8565b50505050905001604052505050915086826000815181106127ed57fe5b6020026020010151111561180b5760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516396ed28f960e01b81526001600160a01b038481166004830152838116602483015291516000927f000000000000000000000000000000000000000000000000000000000000000016916396ed28f9916044808301926020929190829003018186803b1580156128d857600080fd5b505afa1580156128ec573d6000803e3d6000fd5b505050506040513d602081101561290257600080fd5b50519392505050565b604080516399ef4b8760e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f000000000000000000000000000000000000000000000000000000000000000016916399ef4b879160a4808301926020929190829003018186803b15801561299357600080fd5b505afa1580156129a7573d6000803e3d6000fd5b505050506040513d60208110156129bd57600080fd5b50519695505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8585856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612a3f57600080fd5b505afa158015612a53573d6000803e3d6000fd5b505050506040513d6020811015612a6957600080fd5b5051949350505050565b60008142811015612ab9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b612ae8887f00000000000000000000000000000000000000000000000000000000000000008989893089612f5f565b604080516370a0823160e01b81523060048201529051919450612b6c92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612b3b57600080fd5b505afa158015612b4f573d6000803e3d6000fd5b505050506040513d6020811015612b6557600080fd5b5051613ccb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b505050506113988483613e35565b8042811015612c38576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685856000818110612c6f57fe5b905060200201356001600160a01b03166001600160a01b031614612cc8576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d2857600080fd5b505af1158015612d3c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612d8088886000818110611cd757fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612dd057600080fd5b505af1158015612de4573d6000803e3d6000fd5b505050506040513d6020811015612dfa57600080fd5b5051612e0257fe5b600086866000198101818110612e1457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612e7957600080fd5b505afa158015612e8d573d6000803e3d6000fd5b505050506040513d6020811015612ea357600080fd5b50516040805160208981028281018201909352898252929350612ee59290918a918a9182918501908490808284376000920191909152508992506143e8915050565b87611e8f8289896000198101818110612efa57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b6000808242811015612fa6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6000612fb28b8b612865565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561300d57600080fd5b505af1158015613021573d6000803e3d6000fd5b505050506040513d602081101561303757600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561308457600080fd5b505af1158015613098573d6000803e3d6000fd5b505050506040513d60408110156130ae57600080fd5b8101908080519060200190929190805190602001909291905050509150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa568f8f6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561315e57600080fd5b505afa158015613172573d6000803e3d6000fd5b505050506040513d604081101561318857600080fd5b505190506001600160a01b038e8116908216146131a65781836131a9565b82825b90975095508a8710156131ed5760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b8986101561322c5760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040805163cd7290d560e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f0000000000000000000000000000000000000000000000000000000000000000169163cd7290d59160a4808301926020929190829003018186803b15801561299357600080fd5b6040805163d06ca61f60e01b815260048101848152602482019283528351604483015283516060937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169363d06ca61f9388938893919260640190602080860191028083836000831561142b578181015183820152602001611413565b600080600061339d8d7f0000000000000000000000000000000000000000000000000000000000000000612865565b90506000876133ac578c6133b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561342657600080fd5b505af115801561343a573d6000803e3d6000fd5b5050505061344c8e8e8e8e8e8e610e79565b909f909e509c50505050505050505050505050565b600080600083428110156134aa576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6134b88c8c8c8c8c8c614900565b909450925060006134c98d8d612865565b90506134d78d338388613f2d565b6134e38c338387613f2d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b505050506040513d602081101561356557600080fd5b5051949d939c50939a509198505050505050505050565b613585336115f7565b6135d6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6135df81614d15565b50565b6000806000834281101561362b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6136598a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614900565b9094509250600061368a8b7f0000000000000000000000000000000000000000000000000000000000000000612865565b90506136988b338388613f2d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156136f357600080fd5b505af1158015613707573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561378c57600080fd5b505af11580156137a0573d6000803e3d6000fd5b505050506040513d60208110156137b657600080fd5b50516137be57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561381657600080fd5b505af115801561382a573d6000803e3d6000fd5b505050506040513d602081101561384057600080fd5b50519250348410156138585761385833853403613e35565b505096509650969350505050565b606081428110156138ac576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106138e357fe5b905060200201356001600160a01b03166001600160a01b03161461393c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b81526004810189815260248201928352604482018890526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692631f00ca74928b928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156139d757600080fd5b505afa1580156139eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613a1457600080fd5b8101908080516040519392919084600160201b821115613a3357600080fd5b908301906020820185811115613a4857600080fd5b82518660208202830111600160201b82111715613a6457600080fd5b82525081516020918201928201910280838360005b83811015613a91578181015183820152602001613a79565b5050505090500160405250505091503482600081518110613aae57fe5b60200260200101511115613af35760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110613b2f57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b6257600080fd5b505af1158015613b76573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb613bba88886000818110611cd757fe5b84600081518110613bc757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613c1e57600080fd5b505af1158015613c32573d6000803e3d6000fd5b505050506040513d6020811015613c4857600080fd5b5051613c5057fe5b613c8f8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b81600081518110613c9c57fe5b602002602001015134111561262b5761262b3383600081518110613cbc57fe5b60200260200101513403613e35565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310613d485780518252601f199092019160209182019101613d29565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613daa576040519150601f19603f3d011682016040523d82523d6000602084013e613daf565b606091505b5091509150818015613ddd575080511580613ddd5750808060200190516020811015613dda57600080fd5b50515b613e2e576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613e815780518252601f199092019160209182019101613e62565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613ee3576040519150601f19603f3d011682016040523d82523d6000602084013e613ee8565b606091505b5050905080613f285760405162461bcd60e51b8152600401808060200182810382526023815260200180614f1d6023913960400191505060405180910390fd5b505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613fb25780518252601f199092019160209182019101613f93565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614014576040519150601f19603f3d011682016040523d82523d6000602084013e614019565b606091505b5091509150818015614047575080511580614047575080806020019051602081101561404457600080fd5b50515b6140825760405162461bcd60e51b8152600401808060200182810382526024815260200180614f606024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156143e2576000808483815181106140a857fe5b60200260200101518584600101815181106140bf57fe5b60200260200101519150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d604081101561418657600080fd5b5051875190915060009088906001870190811061419f57fe5b60209081029190910101516001549091506001600160a01b03161561424f576001546040805163152cf14360e31b81523360048201526001600160a01b0387811660248301528681166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561422257600080fd5b505af1158015614236573d6000803e3d6000fd5b505050506040513d602081101561424c57600080fd5b50505b600080836001600160a01b0316866001600160a01b03161461427357826000614277565b6000835b91509150600060028a5103881061428e57886142ae565b6142ae868b8a600201815181106142a157fe5b6020026020010151612865565b90506142ba8787612865565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156142f7576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614368578181015183820152602001614350565b50505050905090810190601f1680156143955780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156143b757600080fd5b505af11580156143cb573d6000803e3d6000fd5b50506001909901985061408d975050505050505050565b50505050565b60005b6001835103811015613f285760008084838151811061440657fe5b602002602001015185846001018151811061441d57fe5b60200260200101519150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b1580156144ba57600080fd5b505afa1580156144ce573d6000803e3d6000fd5b505050506040513d60408110156144e457600080fd5b5051905060006144f48484612865565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561453557600080fd5b505afa158015614549573d6000803e3d6000fd5b505050506040513d606081101561455f57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a81169089161461459c57828461459f565b83835b915091506145fd828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b604080516399ef4b8760e01b81526004810183905260248101859052604481018490526001600160a01b038d811660648301528c8116608483015291519298507f0000000000000000000000000000000000000000000000000000000000000000909116916399ef4b879160a480820192602092909190829003018186803b15801561468857600080fd5b505afa15801561469c573d6000803e3d6000fd5b505050506040513d60208110156146b257600080fd5b50516001549095506001600160a01b031615935061475f92505050576001546040805163152cf14360e31b81523360048201526001600160a01b0389811660248301528881166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561473257600080fd5b505af1158015614746573d6000803e3d6000fd5b505050506040513d602081101561475c57600080fd5b50505b600080856001600160a01b0316886001600160a01b03161461478357826000614787565b6000835b91509150600060028c51038a1061479e578a6147b1565b6147b1888d8c600201815181106142a157fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561483b578181015183820152602001614823565b50505050905090810190601f1680156148685780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561488a57600080fd5b505af115801561489e573d6000803e3d6000fd5b50506001909b019a506143eb9950505050505050505050565b60006148f983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614db5565b9392505050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561497a57600080fd5b505afa15801561498e573d6000803e3d6000fd5b505050506040513d60208110156149a457600080fd5b50516001600160a01b03161415614a5757604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614a2a57600080fd5b505af1158015614a3e573d6000803e3d6000fd5b505050506040513d6020811015614a5457600080fd5b50505b6040805163354aedbd60e21b81526001600160a01b038a811660048301528981166024830152825160009384937f00000000000000000000000000000000000000000000000000000000000000009093169263d52bb6f49260448083019392829003018186803b158015614aca57600080fd5b505afa158015614ade573d6000803e3d6000fd5b505050506040513d6040811015614af457600080fd5b508051602090910151909250905081158015614b0e575080155b15614b1e57879350869250614d08565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8a85856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614b9457600080fd5b505afa158015614ba8573d6000803e3d6000fd5b505050506040513d6020811015614bbe57600080fd5b50519050878111614c135785811015614c085760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b889450925082614d06565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad615dec8a85876040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614c8957600080fd5b505afa158015614c9d573d6000803e3d6000fd5b505050506040513d6020811015614cb357600080fd5b5051905089811115614cc157fe5b87811015614d005760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6001600160a01b038116614d5a5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e4d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008184841115614e445760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614e09578181015183820152602001614df1565b50505050905090810190601f168015614e365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d646578526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544d646578526f757465723a20494e53554646494349454e545f425f414d4f554e544d646578526f757465723a20494e56414c49445f5041544800000000000000004d646578526f757465723a20494e53554646494349454e545f415f414d4f554e544d646578526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444d646578526f757465723a2045585049524544000000000000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220f831312457d8a1582493d53a913d8636b218075ef92e9898c55f4075f6b186a464736f6c634300060600330000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Deployed Bytecode
0x6080604052600436106101dc5760003560e01c80638da5cb5b11610102578063c45a015511610095578063e8e3370011610064578063e8e3370014610cfc578063f2fde38b14610d7c578063f305d71914610daf578063fb3bdb4114610df557610215565b8063c45a015514610b72578063cd7290d514610b87578063d06ca61f14610bd4578063ded9382a14610c8957610215565b8063ad615dec116100d1578063ad615dec14610a08578063af2979eb14610a3e578063b6f9de9514610a91578063baa2abde14610b1557610215565b80638da5cb5b146109565780638dd950021461096b57806396ed28f91461098057806399ef4b87146109bb57610215565b80634e5eda111161017a578063715018a611610149578063715018a614610791578063791ac947146107a65780637ff36ab51461083c5780638803dbee146108c057610215565b80634e5eda11146106125780634f887183146106435780635b0d5984146106765780635c11d795146106fb57610215565b80632195995c116101b65780632195995c146104215780632f54bf6e1461049f57806338ed1739146104e65780634a25d94a1461057c57610215565b806302751cec1461021a57806318cbafe5146102865780631f00ca741461036c57610215565b3661021557336001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e79565b6040805192835260208301919091528051918290030190f35b34801561029257600080fd5b5061031c600480360360a08110156102a957600080fd5b813591602081013591810190606081016040820135600160201b8111156102cf57600080fd5b8201836020820111156102e157600080fd5b803590602001918460208302840111600160201b8311171561030257600080fd5b91935091506001600160a01b038135169060200135610f93565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610358578181015183820152602001610340565b505050509050019250505060405180910390f35b34801561037857600080fd5b5061031c6004803603604081101561038f57600080fd5b81359190810190604081016020820135600160201b8111156103b057600080fd5b8201836020820111156103c257600080fd5b803590602001918460208302840111600160201b831117156103e357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113a3945050505050565b34801561042d57600080fd5b5061026d600480360361016081101561044557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561151e565b3480156104ab57600080fd5b506104d2600480360360208110156104c257600080fd5b50356001600160a01b03166115f7565b604080519115158252519081900360200190f35b3480156104f257600080fd5b5061031c600480360360a081101561050957600080fd5b813591602081013591810190606081016040820135600160201b81111561052f57600080fd5b82018360208201111561054157600080fd5b803590602001918460208302840111600160201b8311171561056257600080fd5b91935091506001600160a01b03813516906020013561160b565b34801561058857600080fd5b5061031c600480360360a081101561059f57600080fd5b813591602081013591810190606081016040820135600160201b8111156105c557600080fd5b8201836020820111156105d757600080fd5b803590602001918460208302840111600160201b831117156105f857600080fd5b91935091506001600160a01b03813516906020013561185a565b34801561061e57600080fd5b50610627611aea565b604080516001600160a01b039092168252519081900360200190f35b34801561064f57600080fd5b506102136004803603602081101561066657600080fd5b50356001600160a01b0316611af9565b34801561068257600080fd5b506106e9600480360361014081101561069a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611b75565b60408051918252519081900360200190f35b34801561070757600080fd5b50610213600480360360a081101561071e57600080fd5b813591602081013591810190606081016040820135600160201b81111561074457600080fd5b82018360208201111561075657600080fd5b803590602001918460208302840111600160201b8311171561077757600080fd5b91935091506001600160a01b038135169060200135611c62565b34801561079d57600080fd5b50610213611ed6565b3480156107b257600080fd5b50610213600480360360a08110156107c957600080fd5b813591602081013591810190606081016040820135600160201b8111156107ef57600080fd5b82018360208201111561080157600080fd5b803590602001918460208302840111600160201b8311171561082257600080fd5b91935091506001600160a01b038135169060200135611f7a565b61031c6004803603608081101561085257600080fd5b81359190810190604081016020820135600160201b81111561087357600080fd5b82018360208201111561088557600080fd5b803590602001918460208302840111600160201b831117156108a657600080fd5b91935091506001600160a01b0381351690602001356121fe565b3480156108cc57600080fd5b5061031c600480360360a08110156108e357600080fd5b813591602081013591810190606081016040820135600160201b81111561090957600080fd5b82018360208201111561091b57600080fd5b803590602001918460208302840111600160201b8311171561093c57600080fd5b91935091506001600160a01b038135169060200135612635565b34801561096257600080fd5b50610627612832565b34801561097757600080fd5b50610627612841565b34801561098c57600080fd5b50610627600480360360408110156109a357600080fd5b506001600160a01b0381358116916020013516612865565b3480156109c757600080fd5b506106e9600480360360a08110156109de57600080fd5b508035906020810135906040810135906001600160a01b036060820135811691608001351661290b565b348015610a1457600080fd5b506106e960048036036060811015610a2b57600080fd5b50803590602081013590604001356129c9565b348015610a4a57600080fd5b506106e9600480360360c0811015610a6157600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a73565b61021360048036036080811015610aa757600080fd5b81359190810190604081016020820135600160201b811115610ac857600080fd5b820183602082011115610ada57600080fd5b803590602001918460208302840111600160201b83111715610afb57600080fd5b91935091506001600160a01b038135169060200135612bf4565b348015610b2157600080fd5b5061026d600480360360e0811015610b3857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612f5f565b348015610b7e57600080fd5b5061062761323d565b348015610b9357600080fd5b506106e9600480360360a0811015610baa57600080fd5b508035906020810135906040810135906001600160a01b0360608201358116916080013516613261565b348015610be057600080fd5b5061031c60048036036040811015610bf757600080fd5b81359190810190604081016020820135600160201b811115610c1857600080fd5b820183602082011115610c2a57600080fd5b803590602001918460208302840111600160201b83111715610c4b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506132e9945050505050565b348015610c9557600080fd5b5061026d6004803603610140811015610cad57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561336e565b348015610d0857600080fd5b50610d5e6004803603610100811015610d2057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613461565b60408051938452602084019290925282820152519081900360600190f35b348015610d8857600080fd5b5061021360048036036020811015610d9f57600080fd5b50356001600160a01b031661357c565b610d5e600480360360c0811015610dc557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356135e2565b61031c60048036036080811015610e0b57600080fd5b81359190810190604081016020820135600160201b811115610e2c57600080fd5b820183602082011115610e3e57600080fd5b803590602001918460208302840111600160201b83111715610e5f57600080fd5b91935091506001600160a01b038135169060200135613866565b6000808242811015610ec0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b610eef897f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8a8a8a308a612f5f565b9093509150610eff898685613ccb565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f6557600080fd5b505af1158015610f79573d6000803e3d6000fd5b50505050610f878583613e35565b50965096945050505050565b60608142811015610fd9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c168686600019810181811061101357fe5b905060200201356001600160a01b03166001600160a01b03161461106c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561110757600080fd5b505afa15801561111b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561114457600080fd5b8101908080516040519392919084600160201b82111561116357600080fd5b90830190602082018581111561117857600080fd5b82518660208202830111600160201b8211171561119457600080fd5b82525081516020918201928201910280838360005b838110156111c15781810151838201526020016111a9565b50505050905001604052505050915086826001845103815181106111e157fe5b602002602001015110156112265760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b6112a38686600081811061123657fe5b905060200201356001600160a01b0316336112898989600081811061125757fe5b905060200201356001600160a01b03168a8a600181811061127457fe5b905060200201356001600160a01b0316612865565b8560008151811061129657fe5b6020026020010151613f2d565b6112e28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061408a915050565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d8360018551038151811061132157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561135f57600080fd5b505af1158015611373573d6000803e3d6000fd5b50505050611398848360018551038151811061138b57fe5b6020026020010151613e35565b509695505050505050565b604080516307c0329d60e21b815260048101848152602482019283528351604483015283516060936001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b81693631f00ca7493889388939192606401906020808601910280838360005b8381101561142b578181015183820152602001611413565b50505050905001935050505060006040518083038186803b15801561144f57600080fd5b505afa158015611463573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561148c57600080fd5b8101908080516040519392919084600160201b8211156114ab57600080fd5b9083019060208201858111156114c057600080fd5b82518660208202830111600160201b821117156114dc57600080fd5b82525081516020918201928201910280838360005b838110156115095781810151838201526020016114f1565b50505050905001604052505050905092915050565b600080600061152d8e8e612865565b905060008761153c578c611540565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115b657600080fd5b505af11580156115ca573d6000803e3d6000fd5b505050506115dd8f8f8f8f8f8f8f612f5f565b809450819550505050509b509b9950505050505050505050565b6000546001600160a01b0390811691161490565b60608142811015611651576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8169263d06ca61f928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561172957600080fd5b8101908080516040519392919084600160201b82111561174857600080fd5b90830190602082018581111561175d57600080fd5b82518660208202830111600160201b8211171561177957600080fd5b82525081516020918201928201910280838360005b838110156117a657818101518382015260200161178e565b50505050905001604052505050915086826001845103815181106117c657fe5b6020026020010151101561180b5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b61181b8686600081811061123657fe5b6113988287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b606081428110156118a0576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16868660001981018181106118da57fe5b905060200201356001600160a01b03166001600160a01b031614611933576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b81692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611a0b57600080fd5b8101908080516040519392919084600160201b821115611a2a57600080fd5b908301906020820185811115611a3f57600080fd5b82518660208202830111600160201b82111715611a5b57600080fd5b82525081516020918201928201910280838360005b83811015611a88578181015183820152602001611a70565b5050505090500160405250505091508682600081518110611aa557fe5b602002602001015111156112265760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6001546001600160a01b031681565b611b02336115f7565b611b53576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ba28c7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c612865565b9050600086611bb1578b611bb5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611c2b57600080fd5b505af1158015611c3f573d6000803e3d6000fd5b50505050611c518d8d8d8d8d8d612a73565b9d9c50505050505050505050505050565b8042811015611ca6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b611cfa85856000818110611cb657fe5b905060200201356001600160a01b031633611cf488886000818110611cd757fe5b905060200201356001600160a01b03168989600181811061127457fe5b8a613f2d565b600085856000198101818110611d0c57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611d7157600080fd5b505afa158015611d85573d6000803e3d6000fd5b505050506040513d6020811015611d9b57600080fd5b50516040805160208881028281018201909352888252929350611ddd9290918991899182918501908490808284376000920191909152508892506143e8915050565b86611e8f8288886000198101818110611df257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b505afa158015611e6b573d6000803e3d6000fd5b505050506040513d6020811015611e8157600080fd5b50519063ffffffff6148b716565b1015611ecc5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b5050505050505050565b611edf336115f7565b611f30576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b8042811015611fbe576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1685856000198101818110611ff857fe5b905060200201356001600160a01b03166001600160a01b031614612051576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b61206185856000818110611cb657fe5b61209f8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506143e8915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c16916370a0823191602480820192602092909190829003018186803b15801561210957600080fd5b505afa15801561211d573d6000803e3d6000fd5b505050506040513d602081101561213357600080fd5b50519050868110156121765760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121dc57600080fd5b505af11580156121f0573d6000803e3d6000fd5b50505050611ecc8482613e35565b60608142811015612244576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b03168686600081811061227b57fe5b905060200201356001600160a01b03166001600160a01b0316146122d4576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b6040805163d06ca61f60e01b8152346004820181815260248301938452604483018990526001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8169363d06ca61f938b928b929091606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561237057600080fd5b505afa158015612384573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156123ad57600080fd5b8101908080516040519392919084600160201b8211156123cc57600080fd5b9083019060208201858111156123e157600080fd5b82518660208202830111600160201b821117156123fd57600080fd5b82525081516020918201928201910280838360005b8381101561242a578181015183820152602001612412565b505050509050016040525050509150868260018451038151811061244a57fe5b6020026020010151101561248f5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e736026913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db0836000815181106124cb57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb61255688886000818110611cd757fe5b8460008151811061256357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156125ba57600080fd5b505af11580156125ce573d6000803e3d6000fd5b505050506040513d60208110156125e457600080fd5b50516125ec57fe5b61262b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b5095945050505050565b6060814281101561267b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b8152600481018a815260248201928352604482018890526001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b81692631f00ca74928c928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b15801561271657600080fd5b505afa15801561272a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561275357600080fd5b8101908080516040519392919084600160201b82111561277257600080fd5b90830190602082018581111561278757600080fd5b82518660208202830111600160201b821117156127a357600080fd5b82525081516020918201928201910280838360005b838110156127d05781810151838201526020016127b8565b50505050905001604052505050915086826000815181106127ed57fe5b6020026020010151111561180b5760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b6000546001600160a01b031690565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c81565b604080516396ed28f960e01b81526001600160a01b038481166004830152838116602483015291516000927f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b816916396ed28f9916044808301926020929190829003018186803b1580156128d857600080fd5b505afa1580156128ec573d6000803e3d6000fd5b505050506040513d602081101561290257600080fd5b50519392505050565b604080516399ef4b8760e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b816916399ef4b879160a4808301926020929190829003018186803b15801561299357600080fd5b505afa1580156129a7573d6000803e3d6000fd5b505050506040513d60208110156129bd57600080fd5b50519695505050505050565b60007f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b031663ad615dec8585856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015612a3f57600080fd5b505afa158015612a53573d6000803e3d6000fd5b505050506040513d6020811015612a6957600080fd5b5051949350505050565b60008142811015612ab9576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b612ae8887f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8989893089612f5f565b604080516370a0823160e01b81523060048201529051919450612b6c92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015612b3b57600080fd5b505afa158015612b4f573d6000803e3d6000fd5b505050506040513d6020811015612b6557600080fd5b5051613ccb565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612bd257600080fd5b505af1158015612be6573d6000803e3d6000fd5b505050506113988483613e35565b8042811015612c38576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031685856000818110612c6f57fe5b905060200201356001600160a01b03166001600160a01b031614612cc8576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b60003490507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d2857600080fd5b505af1158015612d3c573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb612d8088886000818110611cd757fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612dd057600080fd5b505af1158015612de4573d6000803e3d6000fd5b505050506040513d6020811015612dfa57600080fd5b5051612e0257fe5b600086866000198101818110612e1457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612e7957600080fd5b505afa158015612e8d573d6000803e3d6000fd5b505050506040513d6020811015612ea357600080fd5b50516040805160208981028281018201909352898252929350612ee59290918a918a9182918501908490808284376000920191909152508992506143e8915050565b87611e8f8289896000198101818110612efa57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b6000808242811015612fa6576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6000612fb28b8b612865565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561300d57600080fd5b505af1158015613021573d6000803e3d6000fd5b505050506040513d602081101561303757600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561308457600080fd5b505af1158015613098573d6000803e3d6000fd5b505050506040513d60408110156130ae57600080fd5b8101908080519060200190929190805190602001909291905050509150915060007f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b031663544caa568f8f6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561315e57600080fd5b505afa158015613172573d6000803e3d6000fd5b505050506040513d604081101561318857600080fd5b505190506001600160a01b038e8116908216146131a65781836131a9565b82825b90975095508a8710156131ed5760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b8986101561322c5760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b505050505097509795505050505050565b7f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b881565b6040805163cd7290d560e01b81526004810187905260248101869052604481018590526001600160a01b038481166064830152838116608483015291516000927f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8169163cd7290d59160a4808301926020929190829003018186803b15801561299357600080fd5b6040805163d06ca61f60e01b815260048101848152602482019283528351604483015283516060937f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b03169363d06ca61f9388938893919260640190602080860191028083836000831561142b578181015183820152602001611413565b600080600061339d8d7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c612865565b90506000876133ac578c6133b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561342657600080fd5b505af115801561343a573d6000803e3d6000fd5b5050505061344c8e8e8e8e8e8e610e79565b909f909e509c50505050505050505050505050565b600080600083428110156134aa576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6134b88c8c8c8c8c8c614900565b909450925060006134c98d8d612865565b90506134d78d338388613f2d565b6134e38c338387613f2d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b505050506040513d602081101561356557600080fd5b5051949d939c50939a509198505050505050505050565b613585336115f7565b6135d6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6135df81614d15565b50565b6000806000834281101561362b576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b6136598a7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8b348c8c614900565b9094509250600061368a8b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c612865565b90506136988b338388613f2d565b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156136f357600080fd5b505af1158015613707573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561378c57600080fd5b505af11580156137a0573d6000803e3d6000fd5b505050506040513d60208110156137b657600080fd5b50516137be57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561381657600080fd5b505af115801561382a573d6000803e3d6000fd5b505050506040513d602081101561384057600080fd5b50519250348410156138585761385833853403613e35565b505096509650969350505050565b606081428110156138ac576040805162461bcd60e51b81526020600482015260136024820152600080516020614f40833981519152604482015290519081900360640190fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b0316868660008181106138e357fe5b905060200201356001600160a01b03166001600160a01b03161461393c576040805162461bcd60e51b81526020600482015260186024820152600080516020614eba833981519152604482015290519081900360640190fd5b604080516307c0329d60e21b81526004810189815260248201928352604482018890526001600160a01b037f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b81692631f00ca74928b928b928b92606401846020850280828437600081840152601f19601f82011690508083019250505094505050505060006040518083038186803b1580156139d757600080fd5b505afa1580156139eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613a1457600080fd5b8101908080516040519392919084600160201b821115613a3357600080fd5b908301906020820185811115613a4857600080fd5b82518660208202830111600160201b82111715613a6457600080fd5b82525081516020918201928201910280838360005b83811015613a91578181015183820152602001613a79565b5050505090500160405250505091503482600081518110613aae57fe5b60200260200101511115613af35760405162461bcd60e51b8152600401808060200182810382526022815260200180614efb6022913960400191505060405180910390fd5b7f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663d0e30db083600081518110613b2f57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b6257600080fd5b505af1158015613b76573d6000803e3d6000fd5b50505050507f000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6001600160a01b031663a9059cbb613bba88886000818110611cd757fe5b84600081518110613bc757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613c1e57600080fd5b505af1158015613c32573d6000803e3d6000fd5b505050506040513d6020811015613c4857600080fd5b5051613c5057fe5b613c8f8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061408a915050565b81600081518110613c9c57fe5b602002602001015134111561262b5761262b3383600081518110613cbc57fe5b60200260200101513403613e35565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310613d485780518252601f199092019160209182019101613d29565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613daa576040519150601f19603f3d011682016040523d82523d6000602084013e613daf565b606091505b5091509150818015613ddd575080511580613ddd5750808060200190516020811015613dda57600080fd5b50515b613e2e576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613e815780518252601f199092019160209182019101613e62565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613ee3576040519150601f19603f3d011682016040523d82523d6000602084013e613ee8565b606091505b5050905080613f285760405162461bcd60e51b8152600401808060200182810382526023815260200180614f1d6023913960400191505060405180910390fd5b505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613fb25780518252601f199092019160209182019101613f93565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614014576040519150601f19603f3d011682016040523d82523d6000602084013e614019565b606091505b5091509150818015614047575080511580614047575080806020019051602081101561404457600080fd5b50515b6140825760405162461bcd60e51b8152600401808060200182810382526024815260200180614f606024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156143e2576000808483815181106140a857fe5b60200260200101518584600101815181106140bf57fe5b60200260200101519150915060007f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b15801561415c57600080fd5b505afa158015614170573d6000803e3d6000fd5b505050506040513d604081101561418657600080fd5b5051875190915060009088906001870190811061419f57fe5b60209081029190910101516001549091506001600160a01b03161561424f576001546040805163152cf14360e31b81523360048201526001600160a01b0387811660248301528681166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561422257600080fd5b505af1158015614236573d6000803e3d6000fd5b505050506040513d602081101561424c57600080fd5b50505b600080836001600160a01b0316866001600160a01b03161461427357826000614277565b6000835b91509150600060028a5103881061428e57886142ae565b6142ae868b8a600201815181106142a157fe5b6020026020010151612865565b90506142ba8787612865565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156142f7576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614368578181015183820152602001614350565b50505050905090810190601f1680156143955780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156143b757600080fd5b505af11580156143cb573d6000803e3d6000fd5b50506001909901985061408d975050505050505050565b50505050565b60005b6001835103811015613f285760008084838151811061440657fe5b602002602001015185846001018151811061441d57fe5b60200260200101519150915060007f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b031663544caa5684846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050604080518083038186803b1580156144ba57600080fd5b505afa1580156144ce573d6000803e3d6000fd5b505050506040513d60408110156144e457600080fd5b5051905060006144f48484612865565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561453557600080fd5b505afa158015614549573d6000803e3d6000fd5b505050506040513d606081101561455f57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a81169089161461459c57828461459f565b83835b915091506145fd828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611e5757600080fd5b604080516399ef4b8760e01b81526004810183905260248101859052604481018490526001600160a01b038d811660648301528c8116608483015291519298507f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8909116916399ef4b879160a480820192602092909190829003018186803b15801561468857600080fd5b505afa15801561469c573d6000803e3d6000fd5b505050506040513d60208110156146b257600080fd5b50516001549095506001600160a01b031615935061475f92505050576001546040805163152cf14360e31b81523360048201526001600160a01b0389811660248301528881166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b15801561473257600080fd5b505af1158015614746573d6000803e3d6000fd5b505050506040513d602081101561475c57600080fd5b50505b600080856001600160a01b0316886001600160a01b03161461478357826000614787565b6000835b91509150600060028c51038a1061479e578a6147b1565b6147b1888d8c600201815181106142a157fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561483b578181015183820152602001614823565b50505050905090810190601f1680156148685780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561488a57600080fd5b505af115801561489e573d6000803e3d6000fd5b50506001909b019a506143eb9950505050505050505050565b60006148f983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614db5565b9392505050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b89092169163e6a4390591604480820192602092909190829003018186803b15801561497a57600080fd5b505afa15801561498e573d6000803e3d6000fd5b505050506040513d60208110156149a457600080fd5b50516001600160a01b03161415614a5757604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b89092169163c9c65396916044808201926020929091908290030181600087803b158015614a2a57600080fd5b505af1158015614a3e573d6000803e3d6000fd5b505050506040513d6020811015614a5457600080fd5b50505b6040805163354aedbd60e21b81526001600160a01b038a811660048301528981166024830152825160009384937f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b89093169263d52bb6f49260448083019392829003018186803b158015614aca57600080fd5b505afa158015614ade573d6000803e3d6000fd5b505050506040513d6040811015614af457600080fd5b508051602090910151909250905081158015614b0e575080155b15614b1e57879350869250614d08565b60007f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b031663ad615dec8a85856040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614b9457600080fd5b505afa158015614ba8573d6000803e3d6000fd5b505050506040513d6020811015614bbe57600080fd5b50519050878111614c135785811015614c085760405162461bcd60e51b8152600401808060200182810382526021815260200180614e996021913960400191505060405180910390fd5b889450925082614d06565b60007f0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b86001600160a01b031663ad615dec8a85876040518463ffffffff1660e01b815260040180848152602001838152602001828152602001935050505060206040518083038186803b158015614c8957600080fd5b505afa158015614c9d573d6000803e3d6000fd5b505050506040513d6020811015614cb357600080fd5b5051905089811115614cc157fe5b87811015614d005760405162461bcd60e51b8152600401808060200182810382526021815260200180614eda6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6001600160a01b038116614d5a5760405162461bcd60e51b8152600401808060200182810382526026815260200180614e4d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008184841115614e445760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614e09578181015183820152602001614df1565b50505050905090810190601f168015614e365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d646578526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544d646578526f757465723a20494e53554646494349454e545f425f414d4f554e544d646578526f757465723a20494e56414c49445f5041544800000000000000004d646578526f757465723a20494e53554646494349454e545f415f414d4f554e544d646578526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444d646578526f757465723a2045585049524544000000000000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220f831312457d8a1582493d53a913d8636b218075ef92e9898c55f4075f6b186a464736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
-----Decoded View---------------
Arg [0] : _factory (address): 0x3CD1C46068dAEa5Ebb0d3f55F6915B10648062B8
Arg [1] : _WBNB (address): 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003cd1c46068daea5ebb0d3f55f6915b10648062b8
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Deployed Bytecode Sourcemap
18180:18375:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18696:10;-1:-1:-1;;;;;18710:4:0;18696:18;;18689:26;;;;18180:18375;;12:1:-1;9;2:12;23030:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23030:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23030:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30025:790;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30025:790:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30025:790:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30025:790:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30025:790:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30025:790:0;;-1:-1:-1;30025:790:0;-1:-1:-1;;;;;;30025:790:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30025:790:0;;;;;;;;;;;;;;;;;36354:196;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36354:196:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36354:196:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36354:196:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36354:196:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36354:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36354:196:0;;-1:-1:-1;36354:196:0;;-1:-1:-1;;;;;36354:196:0:i;23711:647::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23711:647:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23711:647:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17349:104::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17349:104:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17349:104:0;-1:-1:-1;;;;;17349:104:0;;:::i;:::-;;;;;;;;;;;;;;;;;;27427:593;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27427:593:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27427:593:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27427:593:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27427:593:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27427:593:0;;-1:-1:-1;27427:593:0;-1:-1:-1;;;;;;27427:593:0;;;;;;;;:::i;29249:768::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29249:768:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29249:768:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29249:768:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29249:768:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29249:768:0;;-1:-1:-1;29249:768:0;-1:-1:-1;;;;;;29249:768:0;;;;;;;;:::i;18359:34::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18359:34:0;;;:::i;:::-;;;;-1:-1:-1;;;;;18359:34:0;;;;;;;;;;;;;;18957:106;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18957:106:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18957:106:0;-1:-1:-1;;;;;18957:106:0;;:::i;25792:688::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25792:688:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25792:688:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33065:683;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33065:683:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33065:683:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33065:683:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33065:683:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33065:683:0;;-1:-1:-1;33065:683:0;-1:-1:-1;;;;;;33065:683:0;;;;;;;;:::i;17461:140::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17461:140:0;;;:::i;34559:791::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34559:791:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34559:791:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34559:791:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34559:791:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34559:791:0;;-1:-1:-1;34559:791:0;-1:-1:-1;;;;;;34559:791:0;;;;;;;;:::i;28607:634::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28607:634:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28607:634:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28607:634:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28607:634:0;;-1:-1:-1;28607:634:0;-1:-1:-1;;;;;;28607:634:0;;;;;;;;:::i;28028:571::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28028:571:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28028:571:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28028:571:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28028:571:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28028:571:0;;-1:-1:-1;28028:571:0;-1:-1:-1;;;;;;28028:571:0;;;;;;;;:::i;17262:79::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17262:79:0;;;:::i;18314:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18314:38:0;;;:::i;18795:154::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18795:154:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;18795:154:0;;;;;;;;;;:::i;35599:268::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35599:268:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;35599:268:0;;;;;;;;;;;;;-1:-1:-1;;;;;35599:268:0;;;;;;;;;;;;:::i;35394:197::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35394:197:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35394:197:0;;;;;;;;;;;;:::i;25084:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25084:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25084:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33756:795::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33756:795:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33756:795:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33756:795:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33756:795:0;;-1:-1:-1;33756:795:0;-1:-1:-1;;;;;;33756:795:0;;;;;;;;:::i;22189:833::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22189:833:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22189:833:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18266:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18266:41:0;;;:::i;35875:267::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35875:267:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;35875:267:0;;;;;;;;;;;;;-1:-1:-1;;;;;35875:267:0;;;;;;;;;;;;:::i;36150:196::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36150:196:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;36150:196:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36150:196:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36150:196:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36150:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36150:196:0;;-1:-1:-1;36150:196:0;;-1:-1:-1;;;;;36150:196:0:i;24366:639::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24366:639:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24366:639:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20487:707::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20487:707:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20487:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;17846:109;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17846:109:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17846:109:0;-1:-1:-1;;;;;17846:109:0;;:::i;21202:944::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21202:944:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30823:747::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30823:747:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30823:747:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30823:747:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30823:747:0;;-1:-1:-1;30823:747:0;-1:-1:-1;;;;;;30823:747:0;;;;;;;;:::i;23030:673::-;23267:16;23285:14;23248:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;23339:196:::1;23369:5;23389:4;23408:9;23432:14;23461:12;23496:4;23516:8;23339:15;:196::i;:::-;23312:223:::0;;-1:-1:-1;23312:223:0;-1:-1:-1;23546:51:0::1;23574:5:::0;23581:2;23312:223;23546:27:::1;:51::i;:::-;23614:4;-1:-1:-1::0;;;;;23608:20:0::1;;23629:9;23608:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23608:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23608:31:0;;;;23650:45;23681:2;23685:9;23650:30;:45::i;:::-;23030:673:::0;;;;;;;;;;:::o;30025:790::-;30219:21;30195:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30291:4:0::1;30266:29;:4:::0;;-1:-1:-1;;30271:15:0;;30266:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30266:21:0::1;-1:-1:-1::0;;;;;30266:29:0::1;;30258:66;;;::::0;;-1:-1:-1;;;30258:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30258:66:0;;;;;;;;;;;;;::::1;;30345:51;::::0;;-1:-1:-1;;;30345:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30358:7:0::1;30345:35;::::0;::::1;::::0;30381:8;;30391:4;;;;30345:51;;30391:4;30345:51:::1;::::0;::::1;::::0;30391:4;30345:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;30345:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30345:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30345:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;30345:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;30345:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;30345:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;30345:51:0;::::1;::::0;::::1;::::0;412:14:-1;30345:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;30345:51:0;;;;;;;;::::0;::::1;;30335:61;;30446:12;30415:7;30440:1;30423:7;:14;:18;30415:27;;;;;;;;;;;;;;:43;;30407:94;;;;-1:-1:-1::0;;;30407:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30512:115;30558:4;;30563:1;30558:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30558:7:0::1;30567:10;30579:25;30587:4;;30592:1;30587:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30587:7:0::1;30596:4;;30601:1;30596:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30596:7:0::1;30579;:25::i;:::-;30606:7;30614:1;30606:10;;;;;;;;;;;;;;30512:31;:115::i;:::-;30638:35;30644:7;30653:4;;30638:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30667:4:0::1;::::0;-1:-1:-1;30638:5:0::1;::::0;-1:-1:-1;;30638:35:0:i:1;:::-;30690:4;-1:-1:-1::0;;;;;30684:20:0::1;;30705:7;30730:1;30713:7;:14;:18;30705:27;;;;;;;;;;;;;;30684:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30684:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30684:49:0;;;;30744:63;30775:2;30779:7;30804:1;30787:7;:14;:18;30779:27;;;;;;;;;;;;;;30744:30;:63::i;:::-;30025:790:::0;;;;;;;;;:::o;36354:196::-;36491:51;;;-1:-1:-1;;;36491:51:0;;;;;;;;;;;;;;;;;;;;;;36448:24;;-1:-1:-1;;;;;36504:7:0;36491:34;;;;36526:9;;36537:4;;36491:51;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36491:51:0;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36491:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36491:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;36491:51:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;15:2;7:11;;4:2;;;31:1;28;21:12;4:2;36491:51:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;36491:51:0;;421:4:-1;412:14;;;;36491:51:0;;;;;412:14:-1;36491:51:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36491:51:0;;;;;;;;;;;36484:58;;36354:196;;;;:::o;23711:647::-;24017:12;24031;24056;24071:23;24079:6;24087;24071:7;:23::i;:::-;24056:38;;24105:10;24118;:34;;24143:9;24118:34;;;-1:-1:-1;;24118:34:0;24163:75;;;-1:-1:-1;;;24163:75:0;;24186:10;24163:75;;;;24206:4;24163:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24105:47;;-1:-1:-1;;;;;;24163:22:0;;;;;:75;;;;;-1:-1:-1;;24163:75:0;;;;;;;;-1:-1:-1;24163:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;24163:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24163:75:0;;;;24270:80;24286:6;24294;24302:9;24313:10;24325;24337:2;24341:8;24270:15;:80::i;:::-;24249:101;;;;;;;;23711:647;;;;;;;;;;;;;;;;:::o;17349:104::-;17404:4;17439:6;-1:-1:-1;;;;;17439:6:0;;;17428:17;;;;17349:104::o;27427:593::-;27651:21;27632:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;27695:51:::1;::::0;;-1:-1:-1;;;27695:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27708:7:0::1;27695:35;::::0;::::1;::::0;27731:8;;27741:4;;;;27695:51;;27741:4;27695:51:::1;::::0;::::1;::::0;27741:4;27695:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;27695:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27695:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27695:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;27695:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;27695:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;27695:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;27695:51:0;::::1;::::0;::::1;::::0;412:14:-1;27695:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;27695:51:0;;;;;;;;::::0;::::1;;27685:61;;27796:12;27765:7;27790:1;27773:7;:14;:18;27765:27;;;;;;;;;;;;;;:43;;27757:94;;;;-1:-1:-1::0;;;27757:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27862:115;27908:4;;27913:1;27908:7;;;;;;27862:115;27988:24;27994:7;28003:4;;27988:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28009:2:0;;-1:-1:-1;27988:5:0::1;::::0;-1:-1:-1;;27988:24:0:i:1;29249:768::-:0;29443:21;29419:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29515:4:0::1;29490:29;:4:::0;;-1:-1:-1;;29495:15:0;;29490:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29490:21:0::1;-1:-1:-1::0;;;;;29490:29:0::1;;29482:66;;;::::0;;-1:-1:-1;;;29482:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29482:66:0;;;;;;;;;;;;;::::1;;29569:51;::::0;;-1:-1:-1;;;29569:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29582:7:0::1;29569:34;::::0;::::1;::::0;29604:9;;29615:4;;;;29569:51;;29615:4;29569:51:::1;::::0;::::1;::::0;29615:4;29569:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29569:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29569:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29569:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;29569:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;29569:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;29569:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;29569:51:0;::::1;::::0;::::1;::::0;412:14:-1;29569:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;29569:51:0;;;;;;;;::::0;::::1;;29559:61;;29653:11;29639:7;29647:1;29639:10;;;;;;;;;;;;;;:25;;29631:72;;;;-1:-1:-1::0;;;29631:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18359:34:::0;;;-1:-1:-1;;;;;18359:34:0;;:::o;18957:106::-;18005:19;18013:10;18005:7;:19::i;:::-;17997:64;;;;;-1:-1:-1;;;17997:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19030:10:::1;:25:::0;;-1:-1:-1;;;;;;19030:25:0::1;-1:-1:-1::0;;;;;19030:25:0;;;::::1;::::0;;;::::1;::::0;;18957:106::o;25792:688::-;26110:14;26137:12;26152:20;26160:5;26167:4;26152:7;:20::i;:::-;26137:35;;26183:10;26196;:34;;26221:9;26196:34;;;-1:-1:-1;;26196:34:0;26241:75;;;-1:-1:-1;;;26241:75:0;;26264:10;26241:75;;;;26284:4;26241:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26183:47;;-1:-1:-1;;;;;;26241:22:0;;;;;:75;;;;;-1:-1:-1;;26241:75:0;;;;;;;;-1:-1:-1;26241:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;26241:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26241:75:0;;;;26339:133;26401:5;26408:9;26419:14;26435:12;26449:2;26453:8;26339:47;:133::i;:::-;26327:145;25792:688;-1:-1:-1;;;;;;;;;;;;;25792:688:0:o;33065:683::-;33299:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;33320:113:::1;33366:4;;33371:1;33366:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33366:7:0::1;33375:10;33387:25;33395:4;;33400:1;33395:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33395:7:0::1;33404:4;;33409:1;33404:7;;;;;;33387:25;33414:8;33320:31;:113::i;:::-;33444:18;33472:4:::0;;-1:-1:-1;;33477:15:0;;33472:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33472:21:0::1;-1:-1:-1::0;;;;;33465:39:0::1;;33505:2;33465:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33465:43:0::1;-1:-1:-1::0;;;;;33465:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33465:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33465:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33465:43:0;33519:44:::1;::::0;;33465:43:::1;33519:44:::0;;::::1;::::0;;;;;;;;;;;33465:43;;-1:-1:-1;33519:44:0::1;::::0;;;33554:4;;;;;;33519:44;::::1;::::0;33554:4;;33519:44;33554:4;33519:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33560:2:0;;-1:-1:-1;33519:34:0::1;::::0;-1:-1:-1;;33519:44:0:i:1;:::-;33662:12:::0;33596:62:::1;33644:13:::0;33603:4;;-1:-1:-1;;33608:15:0;;33603:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33603:21:0::1;-1:-1:-1::0;;;;;33596:39:0::1;;33636:2;33596:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33596:43:0::1;-1:-1:-1::0;;;;;33596:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33596:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33596:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33596:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;33574:166;;;;-1:-1:-1::0;;;33574:166:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18514:1;33065:683:::0;;;;;;;:::o;17461:140::-;18005:19;18013:10;18005:7;:19::i;:::-;17997:64;;;;;-1:-1:-1;;;17997:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17560:1:::1;17544:6:::0;;17523:40:::1;::::0;-1:-1:-1;;;;;17544:6:0;;::::1;::::0;17523:40:::1;::::0;17560:1;;17523:40:::1;17591:1;17574:19:::0;;-1:-1:-1;;;;;;17574:19:0::1;::::0;;17461:140::o;34559:791::-;34810:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34869:4:0::1;34844:29;:4:::0;;-1:-1:-1;;34849:15:0;;34844:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34844:21:0::1;-1:-1:-1::0;;;;;34844:29:0::1;;34836:66;;;::::0;;-1:-1:-1;;;34836:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34836:66:0;;;;;;;;;;;;;::::1;;34913:113;34959:4;;34964:1;34959:7;;;;;;34913:113;35037:55;35072:4;;35037:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35086:4:0::1;::::0;-1:-1:-1;35037:34:0::1;::::0;-1:-1:-1;;35037:55:0:i:1;:::-;35120:37;::::0;;-1:-1:-1;;;35120:37:0;;35151:4:::1;35120:37;::::0;::::1;::::0;;;35103:14:::1;::::0;-1:-1:-1;;;;;35127:4:0::1;35120:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;35120:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35120:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35120:37:0;;-1:-1:-1;35176:25:0;;::::1;;35168:76;;;;-1:-1:-1::0;;;35168:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35261:4;-1:-1:-1::0;;;;;35255:20:0::1;;35276:9;35255:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35255:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35255:31:0;;;;35297:45;35328:2;35332:9;35297:30;:45::i;28607:634::-:0;28799:21;28775:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;28857:4:::1;-1:-1:-1::0;;;;;28846:15:0::1;:4;;28851:1;28846:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28846:7:0::1;-1:-1:-1::0;;;;;28846:15:0::1;;28838:52;;;::::0;;-1:-1:-1;;;28838:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28838:52:0;;;;;;;;;;;;;::::1;;28911;::::0;;-1:-1:-1;;;28911:52:0;;28947:9:::1;28911:52;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28924:7:0::1;28911:35;::::0;::::1;::::0;28958:4;;;;28911:52;;;;28958:4;28911:52:::1;::::0;::::1;::::0;28958:4;28911:52;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28911:52:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28911:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28911:52:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;28911:52:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;28911:52:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;28911:52:0;;421:4:-1::1;412:14:::0;;::::1;::::0;28911:52:0;::::1;::::0;::::1;::::0;412:14:-1;28911:52:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;28911:52:0;;;;;;;;::::0;::::1;;28901:62;;29013:12;28982:7;29007:1;28990:7;:14;:18;28982:27;;;;;;;;;;;;;;:43;;28974:94;;;;-1:-1:-1::0;;;28974:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29085:4;-1:-1:-1::0;;;;;29079:19:0::1;;29107:7;29115:1;29107:10;;;;;;;;;;;;;;29079:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29079:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29079:41:0;;;;;29144:4;-1:-1:-1::0;;;;;29138:20:0::1;;29159:25;29167:4;;29172:1;29167:7;;;;;;29159:25;29186:7;29194:1;29186:10;;;;;;;;;;;;;;29138:59;;;;;;;;;;;;;-1:-1:-1::0;;;;;29138:59:0::1;-1:-1:-1::0;;;;;29138:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29138:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29138:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29138:59:0;29131:67:::1;;;;29209:24;29215:7;29224:4;;29209:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29230:2:0;;-1:-1:-1;29209:5:0::1;::::0;-1:-1:-1;;29209:24:0:i:1;:::-;28607:634:::0;;;;;;;;:::o;28028:571::-;28252:21;28233:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;28296:51:::1;::::0;;-1:-1:-1;;;28296:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28309:7:0::1;28296:34;::::0;::::1;::::0;28331:9;;28342:4;;;;28296:51;;28342:4;28296:51:::1;::::0;::::1;::::0;28342:4;28296:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28296:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28296:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28296:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;28296:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;28296:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;28296:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;28296:51:0;::::1;::::0;::::1;::::0;412:14:-1;28296:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;28296:51:0;;;;;;;;::::0;::::1;;28286:61;;28380:11;28366:7;28374:1;28366:10;;;;;;;;;;;;;;:25;;28358:72;;;;-1:-1:-1::0;;;28358:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17262:79:::0;17300:7;17327:6;-1:-1:-1;;;;;17327:6:0;17262:79;:::o;18314:38::-;;;:::o;18795:154::-;18896:45;;;-1:-1:-1;;;18896:45:0;;-1:-1:-1;;;;;18896:45:0;;;;;;;;;;;;;;;;18865:12;;18909:7;18896:29;;;;:45;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;18896:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18896:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18896:45:0;;18795:154;-1:-1:-1;;;18795:154:0:o;35599:268::-;35776:83;;;-1:-1:-1;;;35776:83:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35776:83:0;;;;;;;;;;;;;;;;35740:17;;35789:7;35776:34;;;;:83;;;;;;;;;;;;;;:34;:83;;;2:2:-1;;;;27:1;24;17:12;2:2;35776:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35776:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35776:83:0;;35599:268;-1:-1:-1;;;;;;35599:268:0:o;35394:197::-;35492:15;35540:7;-1:-1:-1;;;;;35527:27:0;;35555:7;35564:8;35574;35527:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35527:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35527:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35527:56:0;;35394:197;-1:-1:-1;;;;35394:197:0:o;25084:700::-;25350:14;25331:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;25393:196:::1;25423:5;25443:4;25462:9;25486:14;25515:12;25550:4;25570:8;25393:15;:196::i;:::-;25639:38;::::0;;-1:-1:-1;;;25639:38:0;;25671:4:::1;25639:38;::::0;::::1;::::0;;;25377:212;;-1:-1:-1;25600:78:0::1;::::0;-1:-1:-1;25628:5:0;;25635:2;;-1:-1:-1;;;;;25639:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;25639:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25639:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25639:38:0;25600:27:::1;:78::i;:::-;25695:4;-1:-1:-1::0;;;;;25689:20:0::1;;25710:9;25689:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25689:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25689:31:0;;;;25731:45;25762:2;25766:9;25731:30;:45::i;33756:795::-:0;33996:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;34041:4:::1;-1:-1:-1::0;;;;;34030:15:0::1;:4;;34035:1;34030:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34030:7:0::1;-1:-1:-1::0;;;;;34030:15:0::1;;34022:52;;;::::0;;-1:-1:-1;;;34022:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34022:52:0;;;;;;;;;;;;;::::1;;34085:13;34101:9;34085:25;;34127:4;-1:-1:-1::0;;;;;34121:19:0::1;;34149:8;34121:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34121:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34121:39:0;;;;;34184:4;-1:-1:-1::0;;;;;34178:20:0::1;;34199:25;34207:4;;34212:1;34207:7;;;;;;34199:25;34226:8;34178:57;;;;;;;;;;;;;-1:-1:-1::0;;;;;34178:57:0::1;-1:-1:-1::0;;;;;34178:57:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34178:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34178:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34178:57:0;34171:65:::1;;;;34247:18;34275:4:::0;;-1:-1:-1;;34280:15:0;;34275:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34275:21:0::1;-1:-1:-1::0;;;;;34268:39:0::1;;34308:2;34268:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34268:43:0::1;-1:-1:-1::0;;;;;34268:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34268:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34268:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34268:43:0;34322:44:::1;::::0;;34268:43:::1;34322:44:::0;;::::1;::::0;;;;;;;;;;;34268:43;;-1:-1:-1;34322:44:0::1;::::0;;;34357:4;;;;;;34322:44;::::1;::::0;34357:4;;34322:44;34357:4;34322:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34363:2:0;;-1:-1:-1;34322:34:0::1;::::0;-1:-1:-1;;34322:44:0:i:1;:::-;34465:12:::0;34399:62:::1;34447:13:::0;34406:4;;-1:-1:-1;;34411:15:0;;34406:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34406:21:0::1;-1:-1:-1::0;;;;;34399:39:0::1;;34439:2;34399:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;34399:43:0::1;-1:-1:-1::0;;;;;34399:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;22189:833:0::0;22443:12;22457;22424:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;22482:12:::1;22497:23;22505:6;22513;22497:7;:23::i;:::-;22531:57;::::0;;-1:-1:-1;;;22531:57:0;;22560:10:::1;22531:57;::::0;::::1;::::0;-1:-1:-1;;;;;22531:28:0;::::1;:57:::0;;;;;;;;;;;;;;22482:38;;-1:-1:-1;22531:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;22531:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22531:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22531:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;22665:24:0::1;::::0;;-1:-1:-1;;;22665:24:0;;-1:-1:-1;;;;;22665:24:0;;::::1;;::::0;::::1;::::0;;;22635:12:::1;::::0;;;22665:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;22635:12;22665:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22665:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22665:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;22665:24:0;;;;;;;;;;;;;;;;;;;;;;;;;22634:55;;;;22701:14;22733:7;-1:-1:-1::0;;;;;22720:32:0::1;;22753:6;22761;22720:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;22720:48:0::1;-1:-1:-1::0;;;;;22720:48:0::1;;;;;;-1:-1:-1::0;;;;;22720:48:0::1;-1:-1:-1::0;;;;;22720:48:0::1;;;;;;;;;;::::0;::::1;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22720:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22720:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22720:48:0;;-1:-1:-1;;;;;;22800:16:0;;::::1;::::0;;::::1;;:58;;22841:7;22850;22800:58;;;22820:7;22829;22800:58;22779:79:::0;;-1:-1:-1;22779:79:0;-1:-1:-1;22877:21:0;;::::1;;22869:67;;;;-1:-1:-1::0;;;22869:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22966:10;22955:7;:21;;22947:67;;;;-1:-1:-1::0;;;22947:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18514:1;;;;22189:833:::0;;;;;;;;;;;:::o;18266:41::-;;;:::o;35875:267::-;36051:83;;;-1:-1:-1;;;36051:83:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36051:83:0;;;;;;;;;;;;;;;;36016:16;;36064:7;36051:33;;;;:83;;;;;;;;;;;;;;:33;:83;;;2:2:-1;;;;27:1;24;17:12;36150:196:0;36287:51;;;-1:-1:-1;;;36287:51:0;;;;;;;;;;;;;;;;;;;;;;36244:24;;36300:7;-1:-1:-1;;;;;36287:35:0;;;;:51;;;;;;;;;;;;;;;;;;-1:-1:-1;27:10;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;24366:639:0;24655:16;24673:14;24700:12;24715:20;24723:5;24730:4;24715:7;:20::i;:::-;24700:35;;24746:10;24759;:34;;24784:9;24759:34;;;-1:-1:-1;;24759:34:0;24804:75;;;-1:-1:-1;;;24804:75:0;;24827:10;24804:75;;;;24847:4;24804:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24746:47;;-1:-1:-1;;;;;;24804:22:0;;;;;:75;;;;;-1:-1:-1;;24804:75:0;;;;;;;;-1:-1:-1;24804:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;24804:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24804:75:0;;;;24917:80;24936:5;24943:9;24954:14;24970:12;24984:2;24988:8;24917:18;:80::i;:::-;24890:107;;;;-1:-1:-1;24366:639:0;-1:-1:-1;;;;;;;;;;;;;24366:639:0:o;20487:707::-;20775:12;20789;20803:14;20756:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;20851:85:::1;20865:6;20873;20881:14;20897;20913:10;20925;20851:13;:85::i;:::-;20830:106:::0;;-1:-1:-1;20830:106:0;-1:-1:-1;20947:12:0::1;20962:23;20970:6:::0;20978;20962:7:::1;:23::i;:::-;20947:38;;20996:66;21028:6;21036:10;21048:4;21054:7;20996:31;:66::i;:::-;21073;21105:6;21113:10;21125:4;21131:7;21073:31;:66::i;:::-;21172:4;-1:-1:-1::0;;;;;21162:20:0::1;;21183:2;21162:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;21162:24:0::1;-1:-1:-1::0;;;;;21162:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21162:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21162:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21162:24:0;20487:707;;;;-1:-1:-1;21162:24:0;;-1:-1:-1;20487:707:0;;-1:-1:-1;;;;;;;;;20487:707:0:o;17846:109::-;18005:19;18013:10;18005:7;:19::i;:::-;17997:64;;;;;-1:-1:-1;;;17997:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17919:28:::1;17938:8;17919:18;:28::i;:::-;17846:109:::0;:::o;21202:944::-;21455:16;21473:14;21489;21436:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;21543:176:::1;21571:5;21591:4;21610:18;21643:9;21667:14;21696:12;21543:13;:176::i;:::-;21516:203:::0;;-1:-1:-1;21516:203:0;-1:-1:-1;21730:12:0::1;21745:20;21753:5:::0;21760:4:::1;21745:7;:20::i;:::-;21730:35;;21776:69;21808:5;21815:10;21827:4;21833:11;21776:31;:69::i;:::-;21862:4;-1:-1:-1::0;;;;;21856:19:0::1;;21884:9;21856:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21856:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21856:40:0;;;;;21920:4;-1:-1:-1::0;;;;;21914:20:0::1;;21935:4;21941:9;21914:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;21914:37:0::1;-1:-1:-1::0;;;;;21914:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21914:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21914:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21914:37:0;21907:45:::1;;;;21985:4;-1:-1:-1::0;;;;;21975:20:0::1;;21996:2;21975:24;;;;;;;;;;;;;-1:-1:-1::0;;;;;21975:24:0::1;-1:-1:-1::0;;;;;21975:24:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21975:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21975:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21975:24:0;;-1:-1:-1;22050:9:0::1;:21:::0;-1:-1:-1;22046:92:0::1;;;22073:65;22104:10;22128:9;22116;:21;22073:30;:65::i;:::-;18514:1;21202:944:::0;;;;;;;;;;;:::o;30823:747::-;31012:21;30988:8;18464:15;18452:8;:27;;18444:59;;;;;-1:-1:-1;;;18444:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18444:59:0;;;;;;;;;;;;;;;31070:4:::1;-1:-1:-1::0;;;;;31059:15:0::1;:4;;31064:1;31059:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31059:7:0::1;-1:-1:-1::0;;;;;31059:15:0::1;;31051:52;;;::::0;;-1:-1:-1;;;31051:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31051:52:0;;;;;;;;;;;;;::::1;;31124:51;::::0;;-1:-1:-1;;;31124:51:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31137:7:0::1;31124:34;::::0;::::1;::::0;31159:9;;31170:4;;;;31124:51;;31170:4;31124:51:::1;::::0;::::1;::::0;31170:4;31124:51;1:33:-1::1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;31124:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31124:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31124:51:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;31124:51:0;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;15:2:::1;7:11:::0;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;31124:51:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::1;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::1;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;31124:51:0;;421:4:-1::1;412:14:::0;;::::1;::::0;31124:51:0;::::1;::::0;::::1;::::0;412:14:-1;31124:51:0;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;31124:51:0;;;;;;;;::::0;::::1;;31114:61;;31208:9;31194:7;31202:1;31194:10;;;;;;;;;;;;;;:23;;31186:70;;;;-1:-1:-1::0;;;31186:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31273:4;-1:-1:-1::0;;;;;31267:19:0::1;;31295:7;31303:1;31295:10;;;;;;;;;;;;;;31267:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31267:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31267:41:0;;;;;31332:4;-1:-1:-1::0;;;;;31326:20:0::1;;31347:25;31355:4;;31360:1;31355:7;;;;;;31347:25;31374:7;31382:1;31374:10;;;;;;;;;;;;;;31326:59;;;;;;;;;;;;;-1:-1:-1::0;;;;;31326:59:0::1;-1:-1:-1::0;;;;;31326:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31326:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31326:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31326:59:0;31319:67:::1;;;;31397:24;31403:7;31412:4;;31397:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31418:2:0;;-1:-1:-1;31397:5:0::1;::::0;-1:-1:-1;;31397:24:0:i:1;:::-;31484:7;31492:1;31484:10;;;;;;;;;;;;;;31472:9;:22;31468:94;;;31496:66;31527:10;31551:7;31559:1;31551:10;;;;;;;;;;;;;;31539:9;:22;31496:30;:66::i;16098:361::-:0;16293:45;;;-1:-1:-1;;;;;16293:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16293:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;16282:57:0;;;;16247:12;;16261:17;;16282:10;;;;16293:45;16282:57;;;25:18:-1;16282:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16282:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;16246:93:0;;;;16358:7;:57;;;;-1:-1:-1;16370:11:0;;:16;;:44;;;16401:4;16390:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16390:24:0;16370:44;16350:101;;;;;-1:-1:-1;;;16350:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16098:361;;;;;:::o;16877:197::-;16987:12;;;16947;16987;;;;;;;;;-1:-1:-1;;;;;16964:7:0;;;16980:5;;16964:36;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16964:36:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;16946:54:0;;;17019:7;17011:55;;;;-1:-1:-1;;;17011:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16877:197;;;:::o;16467:402::-;16692:51;;;-1:-1:-1;;;;;16692:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16692:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;16681:63:0;;;;16646:12;;16660:17;;16681:10;;;;16692:51;16681:63;;;25:18:-1;16681:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16681:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;16645:99:0;;;;16763:7;:57;;;;-1:-1:-1;16775:11:0;;:16;;:44;;;16806:4;16795:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16795:24:0;16775:44;16755:106;;;;-1:-1:-1;;;16755:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16467:402;;;;;;:::o;26591:828::-;26698:6;26693:719;26724:1;26710:4;:11;:15;26706:1;:19;26693:719;;;26748:13;26763:14;26782:4;26787:1;26782:7;;;;;;;;;;;;;;26791:4;26796:1;26800;26796:5;26791:11;;;;;;;;;;;;;;26747:56;;;;26819:14;26851:7;-1:-1:-1;;;;;26838:32:0;;26871:5;26878:6;26838:47;;;;;;;;;;;;;-1:-1:-1;;;;;26838:47:0;-1:-1:-1;;;;;26838:47:0;;;;;;-1:-1:-1;;;;;26838:47:0;-1:-1:-1;;;;;26838:47:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26838:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26838:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26838:47:0;26917:14;;26838:47;;-1:-1:-1;26900:14:0;;26917:7;;26929:1;26925:5;;;26917:14;;;;;;;;;;;;;;;;26950:10;;26917:14;;-1:-1:-1;;;;;;26950:10:0;:24;26946:131;;27007:10;;26995:66;;;-1:-1:-1;;;26995:66:0;;27024:10;26995:66;;;;-1:-1:-1;;;;;26995:66:0;;;;;;;;;;;;;;;;;;;;;;27007:10;;;;;26995:28;;:66;;;;;;;;;;;;;;27007:10;;26995:66;;;2:2:-1;;;;27:1;24;17:12;2:2;26995:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26995:66:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;26946:131:0;27092:15;27109;27137:6;-1:-1:-1;;;;;27128:15:0;:5;-1:-1:-1;;;;;27128:15:0;;:61;;27170:9;27186:1;27128:61;;;27152:1;27156:9;27128:61;27091:98;;;;27204:10;27235:1;27221:4;:11;:15;27217:1;:19;:56;;27270:3;27217:56;;;27239:28;27247:6;27255:4;27260:1;27264;27260:5;27255:11;;;;;;;;;;;;;;27239:7;:28::i;:::-;27204:69;;27298:22;27306:5;27313:6;27298:7;:22::i;:::-;-1:-1:-1;;;;;27288:38:0;;27345:10;27357;27369:2;27383:1;27373:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;27373:12:0;87:42:-1;143:17;;-1:-1;27373:12:0;;27288:112;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27288:112:0;-1:-1:-1;;;;;27288:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27288:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27288:112:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26727:3:0;;;;;-1:-1:-1;26693:719:0;;-1:-1:-1;;;;;;;;26693:719:0;;;26591:828;;;:::o;31717:1340::-;31830:6;31825:1225;31856:1;31842:4;:11;:15;31838:1;:19;31825:1225;;;31880:13;31895:14;31914:4;31919:1;31914:7;;;;;;;;;;;;;;31923:4;31928:1;31932;31928:5;31923:11;;;;;;;;;;;;;;31879:56;;;;31951:14;31983:7;-1:-1:-1;;;;;31970:32:0;;32003:5;32010:6;31970:47;;;;;;;;;;;;;-1:-1:-1;;;;;31970:47:0;-1:-1:-1;;;;;31970:47:0;;;;;;-1:-1:-1;;;;;31970:47:0;-1:-1:-1;;;;;31970:47:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31970:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31970:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31970:47:0;;-1:-1:-1;32032:14:0;32059:22;32067:5;32074:6;32059:7;:22::i;:::-;32032:50;;32097:16;32128:17;32219:13;32234;32252:4;-1:-1:-1;;;;;32252:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32252:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32252:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32252:18:0;;;;;;;32218:52;;;;;-1:-1:-1;32218:52:0;;-1:-1:-1;32290:17:0;;-1:-1:-1;;;;;32331:15:0;;;;;;;:61;;32373:8;32383;32331:61;;;32350:8;32360;32331:61;32289:103;;;;32425:56;32468:12;32432:5;-1:-1:-1;;;;;32425:23:0;;32457:4;32425:38;;;;;;;;;;;;;-1:-1:-1;;;;;32425:38:0;-1:-1:-1;;;;;32425:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;32425:56:0;32515:91;;;-1:-1:-1;;;32515:91:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32515:91:0;;;;;;;;;;;;;;;;;;-1:-1:-1;32528:7:0;32515:34;;;;;;:91;;;;;;;;;;;;;;;:34;:91;;;2:2:-1;;;;27:1;24;17:12;2:2;32515:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32515:91:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32515:91:0;32640:10;;32515:91;;-1:-1:-1;;;;;;32640:10:0;:24;;-1:-1:-1;32636:134:0;;-1:-1:-1;;;32636:134:0;32697:10;;32685:69;;;-1:-1:-1;;;32685:69:0;;32714:10;32685:69;;;;-1:-1:-1;;;;;32685:69:0;;;;;;;;;;;;;;;;;;;;;;32697:10;;;;;32685:28;;:69;;;;;;;;;;;;;;32697:10;;32685:69;;;2:2:-1;;;;27:1;24;17:12;2:2;32685:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32685:69:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;32636:134:0;32785:15;32802;32830:6;-1:-1:-1;;;;;32821:15:0;:5;-1:-1:-1;;;;;32821:15:0;;:67;;32866:12;32885:1;32821:67;;;32845:1;32849:12;32821:67;32784:104;;;;32903:10;32934:1;32920:4;:11;:15;32916:1;:19;:56;;32969:3;32916:56;;;32938:28;32946:6;32954:4;32959:1;32963;32959:5;32954:11;;;;;;;32938:28;33025:12;;;33035:1;33025:12;;;;;;;;;;-1:-1:-1;;;32987:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32987:51:0;;;;;;;;;;;;;;;;;;;;;;32903:69;;-1:-1:-1;32987:9:0;;;;;;32997:10;;33009;;32903:69;;33025:12;;32987:51;;;;;;;;33025:12;;32987:51;;;;33025:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32987:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32987:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31859:3:0;;;;;-1:-1:-1;31825:1225:0;;-1:-1:-1;;;;;;;;;;31825:1225:0;11881:136;11939:7;11966:43;11970:1;11973;11966:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11959:50;11881:136;-1:-1:-1;;;11881:136:0:o;19103:1376::-;19416:45;;;-1:-1:-1;;;19416:45:0;;-1:-1:-1;;;;;19416:45:0;;;;;;;;;;;;;;;;19321:12;;;;;;19429:7;19416:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;19416:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19416:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19416:45:0;-1:-1:-1;;;;;19416:59:0;;19412:140;;;19492:48;;;-1:-1:-1;;;19492:48:0;;-1:-1:-1;;;;;19492:48:0;;;;;;;;;;;;;;;;19505:7;19492:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;19492:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;19492:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19492:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;19412:140:0;19595:49;;;-1:-1:-1;;;19595:49:0;;-1:-1:-1;;;;;19595:49:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;19608:7:0;19595:33;;;;;;:49;;;;;;;;;;;:33;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;19595:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19595:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19595:49:0;;;;;;;;;-1:-1:-1;19595:49:0;-1:-1:-1;19659:13:0;;:30;;;;-1:-1:-1;19676:13:0;;19659:30;19655:817;;;19728:14;;-1:-1:-1;19744:14:0;;-1:-1:-1;19655:817:0;;;19792:19;19827:7;-1:-1:-1;;;;;19814:27:0;;19842:14;19858:8;19868;19814:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19814:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19814:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19814:63:0;;-1:-1:-1;19896:32:0;;;19892:569;;19975:10;19957:14;:28;;19949:74;;;;-1:-1:-1;;;19949:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20064:14;;-1:-1:-1;20080:14:0;-1:-1:-1;20080:14:0;19892:569;;;20136:19;20171:7;-1:-1:-1;;;;;20158:27:0;;20186:14;20202:8;20212;20158:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20158:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20158:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20158:63:0;;-1:-1:-1;20247:32:0;;;;20240:40;;;;20325:10;20307:14;:28;;20299:74;;;;-1:-1:-1;;;20299:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20414:14;-1:-1:-1;20430:14:0;;-1:-1:-1;19892:569:0;19655:817;;19103:1376;;;;;;;;;;;:::o;17609:229::-;-1:-1:-1;;;;;17683:22:0;;17675:73;;;;-1:-1:-1;;;17675:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17785:6;;;17764:38;;-1:-1:-1;;;;;17764:38:0;;;;17785:6;;;17764:38;;;17813:6;:17;;-1:-1:-1;;;;;;17813:17:0;-1:-1:-1;;;;;17813:17:0;;;;;;;;;;17609:229::o;12025:192::-;12111:7;12147:12;12139:6;;;;12131:29;;;;-1:-1:-1;;;12131:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12131:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12183:5:0;;;12025:192::o
Swarm Source
ipfs://f831312457d8a1582493d53a913d8636b218075ef92e9898c55f4075f6b186a4
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.