Overview
APE Balance
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x6A4F2a37...81f858A69 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
QueryData
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2024-10-21 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.17; /// @title Pool state that never changes /// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values interface IUniswapV3PoolImmutables { /// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface /// @return The contract address function factory() external view returns (address); /// @notice The first of the two tokens of the pool, sorted by address /// @return The token contract address function token0() external view returns (address); /// @notice The second of the two tokens of the pool, sorted by address /// @return The token contract address function token1() external view returns (address); /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6 /// @return The fee function fee() external view returns (uint24); /// @notice The pool tick spacing /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ... /// This value is an int24 to avoid casting even though it is always positive. /// @return The tick spacing function tickSpacing() external view returns (int24); /// @notice The maximum amount of position liquidity that can use any tick in the range /// @dev This parameter is enforced per tick to prevent liquidity from overflowing a uint128 at any point, and /// also prevents out-of-range liquidity from being used to prevent adding in-range liquidity to a pool /// @return The max amount of liquidity per tick function maxLiquidityPerTick() external view returns (uint128); } /// @title Pool state that can change /// @notice These methods compose the pool's state, and can change with any frequency including multiple times /// per transaction interface IUniswapV3PoolState { /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas /// when accessed externally. /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value /// tick The current tick of the pool, i.e. according to the last tick transition that was run. /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick /// boundary. /// observationIndex The index of the last oracle observation that was written, /// observationCardinality The current maximum number of observations stored in the pool, /// observationCardinalityNext The next maximum number of observations, to be updated when the observation. /// feeProtocol The protocol fee for both tokens of the pool. /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0 /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee. /// unlocked Whether the pool is currently locked to reentrancy function slot0() external view returns ( uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked ); /// @notice The fee growth as a Q128.128 fees of token0 collected per unit of liquidity for the entire life of the pool /// @dev This value can overflow the uint256 function feeGrowthGlobal0X128() external view returns (uint256); /// @notice The fee growth as a Q128.128 fees of token1 collected per unit of liquidity for the entire life of the pool /// @dev This value can overflow the uint256 function feeGrowthGlobal1X128() external view returns (uint256); /// @notice The amounts of token0 and token1 that are owed to the protocol /// @dev Protocol fees will never exceed uint128 max in either token function protocolFees() external view returns (uint128 token0, uint128 token1); /// @notice The currently in range liquidity available to the pool /// @dev This value has no relationship to the total liquidity across all ticks function liquidity() external view returns (uint128); /// @notice Look up information about a specific tick in the pool /// @param tick The tick to look up /// @return liquidityGross the total amount of position liquidity that uses the pool either as tick lower or /// tick upper, /// liquidityNet how much liquidity changes when the pool price crosses the tick, /// feeGrowthOutside0X128 the fee growth on the other side of the tick from the current tick in token0, /// feeGrowthOutside1X128 the fee growth on the other side of the tick from the current tick in token1, /// tickCumulativeOutside the cumulative tick value on the other side of the tick from the current tick /// secondsPerLiquidityOutsideX128 the seconds spent per liquidity on the other side of the tick from the current tick, /// secondsOutside the seconds spent on the other side of the tick from the current tick, /// initialized Set to true if the tick is initialized, i.e. liquidityGross is greater than 0, otherwise equal to false. /// Outside values can only be used if the tick is initialized, i.e. if liquidityGross is greater than 0. /// In addition, these values are only relative and must be used only in comparison to previous snapshots for /// a specific position. function ticks( int24 tick ) external view returns ( uint128 liquidityGross, int128 liquidityNet, uint256 feeGrowthOutside0X128, uint256 feeGrowthOutside1X128, int56 tickCumulativeOutside, uint160 secondsPerLiquidityOutsideX128, uint32 secondsOutside, bool initialized ); /// @notice Returns 256 packed tick initialized boolean values. See TickBitmap for more information function tickBitmap(int16 wordPosition) external view returns (uint256); /// @notice Returns the information about a position by the position's key /// @param key The position's key is a hash of a preimage composed by the owner, tickLower and tickUpper /// @return _liquidity The amount of liquidity in the position, /// Returns feeGrowthInside0LastX128 fee growth of token0 inside the tick range as of the last mint/burn/poke, /// Returns feeGrowthInside1LastX128 fee growth of token1 inside the tick range as of the last mint/burn/poke, /// Returns tokensOwed0 the computed amount of token0 owed to the position as of the last mint/burn/poke, /// Returns tokensOwed1 the computed amount of token1 owed to the position as of the last mint/burn/poke function positions( bytes32 key ) external view returns ( uint128 _liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1 ); /// @notice Returns data about a specific observation index /// @param index The element of the observations array to fetch /// @dev You most likely want to use #observe() instead of this method to get an observation as of some amount of time /// ago, rather than at a specific index in the array. /// @return blockTimestamp The timestamp of the observation, /// Returns tickCumulative the tick multiplied by seconds elapsed for the life of the pool as of the observation timestamp, /// Returns secondsPerLiquidityCumulativeX128 the seconds per in range liquidity for the life of the pool as of the observation timestamp, /// Returns initialized whether the observation has been initialized and the values are safe to use function observations( uint256 index ) external view returns ( uint32 blockTimestamp, int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128, bool initialized ); } interface IZumiPool { function points(int24 tick) external view returns (uint256, int128, uint256, uint256, bool); function pointDelta() external view returns (int24); function orderOrEndpoint(int24 tick) external view returns (int24); function limitOrderData( int24 point ) external view returns ( uint128 sellingX, uint128 earnY, uint256 accEarnY, uint256 legacyAccEarnY, uint128 legacyEarnY, uint128 sellingY, uint128 earnX, uint128 legacyEarnX, uint256 accEarnX, uint256 legacyAccEarnX ); function pointBitmap(int16 tick) external view returns (uint256); function factory() external view returns (address); } interface IHorizonPool { function tickDistance() external view returns (int24); function ticks( int24 tick ) external view returns ( uint128 liquidityGross, int128 liquidityNet, uint256 feeGrowthOutside, uint128 secondsPerLiquidityOutside ); function initializedTicks(int24 tick) external view returns (int24 previous, int24 next); function getPoolState() external view returns (uint160 sqrtP, int24 currentTick, int24 nearestCurrentTick, bool locked); } /// @title The interface for a Uniswap V3 Pool /// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform /// to the ERC20 specification /// @dev The pool interface is broken up into many smaller pieces interface IAlgebraPool { function globalState() external view returns ( uint160 price, int24 tick, int24 prevInitializedTick, uint16 fee, uint16 timepointIndex, uint8 communityFee, bool unlocked ); function tickSpacing() external view returns (int24); function ticks( int24 tick ) external view returns ( uint128 liquidityTotal, int128 liquidityDelta, uint256 outerFeeGrowth0Token, uint256 outerFeeGrowth1Token, int24 prevTick, int24 nextTick, uint160 outerSecondsPerLiquidity, uint32 outerSecondsSpent, bool hasLimitOrders ); function tickTable(int16 wordPosition) external view returns (uint256); function prevInitializedTick() external view returns (int24); } interface IAlgebraPoolV1_9 { function globalState() external view returns ( uint160 price, int24 tick, int24 prevInitializedTick, uint16 fee, uint16 timepointIndex, uint8 communityFee, bool unlocked ); function tickSpacing() external view returns (int24); function ticks( int24 tick ) external view returns ( uint128 liquidityTotal, int128 liquidityDelta, uint256 outerFeeGrowth0Token, uint256 outerFeeGrowth1Token, int56 outerTickCumulative, uint160 outerSecondsPerLiquidity, uint32 outerSecondsSpent, bool initialized ); function tickTable(int16 wordPosition) external view returns (uint256); } interface IUniswapV3Pool is IUniswapV3PoolImmutables, IUniswapV3PoolState {} /// @title DexNativeRouter /// @notice Entrance of trading native token in web3-dex contract QueryData { int24 internal constant MIN_TICK_MINUS_1 = -887_272 - 1; int24 internal constant MAX_TICK_PLUS_1 = 887_272 + 1; struct SuperVar { int24 tickSpacing; int24 currTick; int24 right; int24 left; int24 leftMost; int24 rightMost; uint256 initPoint; uint256 initPoint2; } /** * 算法逻辑: * 1. 查到slot0对应的currTick和tickSpacing * 2. 根据currTick算出当前的word, 如果currTick < 0, 则word--. 原因是 tick 1 和 tick -1在除以256之后的word都是0, 为了区别, 将tick -1 存放在 word=-1的map上 * 3. 查到currTick对应的initPoint, 即currTick在tickMap里面的index, index值的取值范围只能是 [0, 255], 所以需要对256 取模. 利用的是 currTick/tickSpacing = index + (currTick/tickSpacing//256 - 0 ? 1)* 256 * 4. 分成两个方向进行遍历, 第一个方向从小到大, 第二个方向从大到小 * 假设tickMap查出来的结果如下: 10101010 (8bit 方便理解), initPoint = 3, 即: 1010[1]010 * 5. 方向从小到大: * 5.1 首先把结果res向右移动initPoint位,得到新的结果如下: 00010101. 移动过后,左侧用0补齐 * 5.2 取res中的最右侧元素与0b00000001进行比较, 如果为true, 此时最右侧元素的index即为原先的initPoint. 如果为false, 说明没有流动性, 则进行下一个循环 * 5.3 然后根据index 和 right值, 重新利用公式 (index + 256 * right) * tickSpacing = tick 算出tick * 5.4 根据算出的tick拿到对应的delta L和 limitOrder的数据 * 5.5 循环开始条件即为 i = initPoint, 循环次数应该为: 256 - initPoint, 即循环条件为 i < 256, 方向为 i++ * 6. 方向从大到小: * 6.1 首先把结果res向左移动256-initPoint位, 得到新的结果如下: 01000000, 移动过后, 右侧用0补齐 * 6.2 去res中的最左侧元素与0b10000000进行比较, 如果为true, 说明有流动性. 注意此时的index为原先的initPoint - 1, 而不是initPoint. 如果为false, 说明没有流动性, 则进行下一个循环 * 6.3 然后根据index 和 left, 重新利用公式 (index + 256 * left) * tickSpacing = tick 算出tick * 6.4 根据算出的tick拿到对应的delta L和 limitOrder的数据 * 6.5 循环的开始条件即为 i = initPoint - 1, 循环次数为: initPoint次, 即循环条件为 i >= 0, 方向为 i-- * * 问题是: * initPoint = 0时, 方向从大到小应该怎么处理? 此时应该进入下一个循环. */ function queryUniv3TicksSuperCompact(address pool, uint256 len) public view returns (bytes memory) { SuperVar memory tmp; tmp.tickSpacing = IUniswapV3Pool(pool).tickSpacing(); // fix-bug: pancake pool's slot returns different types of params than uniV3, which will cause problem { (, bytes memory slot0) = pool.staticcall(abi.encodeWithSignature("slot0()")); int24 currTick; assembly { currTick := mload(add(slot0, 64)) } tmp.currTick = currTick; } tmp.right = tmp.currTick / tmp.tickSpacing / int24(256); tmp.leftMost = -887_272 / tmp.tickSpacing / int24(256) - 2; tmp.rightMost = 887_272 / tmp.tickSpacing / int24(256) + 1; if (tmp.currTick < 0) { tmp.initPoint = uint256( int256(tmp.currTick) / int256(tmp.tickSpacing) - (int256(tmp.currTick) / int256(tmp.tickSpacing) / 256 - 1) * 256 ) % 256; } else { tmp.initPoint = (uint256(int256(tmp.currTick)) / uint256(int256(tmp.tickSpacing))) % 256; } tmp.initPoint2 = tmp.initPoint; if (tmp.currTick < 0) tmp.right--; bytes memory tickInfo; tmp.left = tmp.right; uint256 index = 0; while (index < len / 2 && tmp.right < tmp.rightMost) { uint256 res = IUniswapV3Pool(pool).tickBitmap(int16(tmp.right)); if (res > 0) { res = res >> tmp.initPoint; for (uint256 i = tmp.initPoint; i < 256 && index < len / 2; i++) { uint256 isInit = res & 0x01; if (isInit > 0) { int256 tick = int256((256 * tmp.right + int256(i)) * tmp.tickSpacing); // (, int128 liquidityNet,,,,,,) = IUniswapV3Pool(pool).ticks(int24(int256(tick))); // fix-bug: to make consistent with solidlyV3 and ramsesV2 int128 liquidityNet; (, bytes memory d) = pool.staticcall( abi.encodeWithSelector(IUniswapV3PoolState.ticks.selector, int24(int256(tick))) ); assembly { liquidityNet := mload(add(d, 64)) } int256 data = int256(uint256(int256(tick)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); index++; } res = res >> 1; } } tmp.initPoint = 0; tmp.right++; } bool isInitPoint = true; while (index < len && tmp.left > tmp.leftMost) { uint256 res = IUniswapV3Pool(pool).tickBitmap(int16(tmp.left)); if (res > 0 && tmp.initPoint2 != 0) { res = isInitPoint ? res << ((256 - tmp.initPoint2) % 256) : res; for (uint256 i = tmp.initPoint2 - 1; i >= 0 && index < len; i--) { uint256 isInit = res & 0x8000000000000000000000000000000000000000000000000000000000000000; if (isInit > 0) { int256 tick = int256((256 * tmp.left + int256(i)) * tmp.tickSpacing); // (, int128 liquidityNet,,,,,,) = IUniswapV3Pool(pool).ticks(int24(int256(tick))); // fix-bug: to make consistent with solidlyV3 and ramsesV2 int128 liquidityNet; (, bytes memory d) = pool.staticcall( abi.encodeWithSelector(IUniswapV3PoolState.ticks.selector, int24(int256(tick))) ); assembly { liquidityNet := mload(add(d, 64)) } int256 data = int256(uint256(int256(tick)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); index++; } res = res << 1; if (i == 0) break; } } isInitPoint = false; tmp.initPoint2 = 256; tmp.left--; } return tickInfo; } function queryAlgebraTicksSuperCompact(address pool, uint256 len) public view returns (bytes memory) { SuperVar memory tmp; { (, bytes memory slot0) = pool.staticcall(abi.encodeWithSignature("globalState()")); int24 currTick; assembly { currTick := mload(add(slot0, 64)) } tmp.currTick = currTick; } tmp.right = tmp.currTick / int24(256); tmp.leftMost = -887_272 / int24(256) - 2; tmp.rightMost = 887_272 / int24(256) + 1; if (tmp.currTick < 0) { tmp.initPoint = (256 - (uint256(int256(-tmp.currTick)) % 256)) % 256; } else { tmp.initPoint = uint256(int256(tmp.currTick)) % 256; } tmp.initPoint2 = tmp.initPoint; if (tmp.currTick < 0) tmp.right--; bytes memory tickInfo; tmp.left = tmp.right; uint256 index = 0; while (index < len / 2 && tmp.right < tmp.rightMost) { uint256 res = IAlgebraPoolV1_9(pool).tickTable(int16(tmp.right)); if (res > 0) { res = res >> tmp.initPoint; for (uint256 i = tmp.initPoint; i < 256 && index < len / 2; i++) { uint256 isInit = res & 0x01; if (isInit > 0) { int256 tick = int256((256 * tmp.right + int256(i))); // (, int128 liquidityNet,,,,,,) = IAlgebraPoolV1_9(pool).ticks(int24(int256(tick))); (, bytes memory deltaL) = pool.staticcall(abi.encodeWithSignature("ticks(int24)", tick)); int128 liquidityNet; assembly { liquidityNet := mload(add(deltaL, 64)) } int256 data = int256(uint256(int256(tick)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); index++; } res = res >> 1; } } tmp.initPoint = 0; tmp.right++; } bool isInitPoint = true; while (index < len && tmp.left > tmp.leftMost) { uint256 res = IAlgebraPoolV1_9(pool).tickTable(int16(tmp.left)); if (res > 0 && tmp.initPoint2 != 0) { res = isInitPoint ? res << ((256 - tmp.initPoint2) % 256) : res; for (uint256 i = tmp.initPoint2 - 1; i >= 0 && index < len; i--) { uint256 isInit = res & 0x8000000000000000000000000000000000000000000000000000000000000000; if (isInit > 0) { int256 tick = int256((256 * tmp.left + int256(i))); // (, int128 liquidityNet,,,,,,) = IAlgebraPoolV1_9(pool).ticks(int24(int256(tick))); (, bytes memory deltaL) = pool.staticcall(abi.encodeWithSignature("ticks(int24)", tick)); int128 liquidityNet; assembly { liquidityNet := mload(add(deltaL, 64)) } int256 data = int256(uint256(int256(tick)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); index++; } res = res << 1; if (i == 0) break; } } isInitPoint = false; tmp.initPoint2 = 256; tmp.left--; } return tickInfo; } function queryAlgebraTicksSuperCompact3_back(address pool, uint256 len) public view returns (bytes memory) { SuperVar memory tmp; tmp.tickSpacing = IAlgebraPool(pool).tickSpacing(); { (, bytes memory slot0) = pool.staticcall(abi.encodeWithSignature("globalState()")); int24 currTick; assembly { currTick := mload(add(slot0, 64)) } tmp.currTick = currTick; } tmp.right = tmp.currTick / tmp.tickSpacing / int24(256); tmp.leftMost = -887_272 / tmp.tickSpacing / int24(256) - 2; tmp.rightMost = 887_272 / tmp.tickSpacing / int24(256) + 1; if (tmp.currTick < 0) { tmp.initPoint = uint256( int256(tmp.currTick) / int256(tmp.tickSpacing) - (int256(tmp.currTick) / int256(tmp.tickSpacing) / 256 - 1) * 256 ) % 256; } else { tmp.initPoint = (uint256(int256(tmp.currTick)) / uint256(int256(tmp.tickSpacing))) % 256; } tmp.initPoint2 = tmp.initPoint; if (tmp.currTick < 0) tmp.right--; bytes memory tickInfo; tmp.left = tmp.right; uint256 index = 0; while (index < len / 2 && tmp.right < tmp.rightMost) { uint256 res = IAlgebraPoolV1_9(pool).tickTable(int16(tmp.right)); if (res > 0) { res = res >> tmp.initPoint; for (uint256 i = tmp.initPoint; i < 256 && index < len / 2; i++) { uint256 isInit = res & 0x01; if (isInit > 0) { int256 tick = int256((256 * tmp.right + int256(i)) * tmp.tickSpacing); // (, int128 liquidityNet,,,,,,) = IAlgebraPoolV1_9(pool).ticks(int24(int256(tick))); (, bytes memory deltaL) = pool.staticcall(abi.encodeWithSignature("ticks(int24)", tick)); int128 liquidityNet; assembly { liquidityNet := mload(add(deltaL, 64)) } int256 data = int256(uint256(int256(tick)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); index++; } res = res >> 1; } } tmp.initPoint = 0; tmp.right++; } bool isInitPoint = true; while (index < len && tmp.left > tmp.leftMost) { uint256 res = IAlgebraPoolV1_9(pool).tickTable(int16(tmp.left)); if (res > 0 && tmp.initPoint2 != 0) { res = isInitPoint ? res << ((256 - tmp.initPoint2) % 256) : res; for (uint256 i = tmp.initPoint2 - 1; i >= 0 && index < len; i--) { uint256 isInit = res & 0x8000000000000000000000000000000000000000000000000000000000000000; if (isInit > 0) { int256 tick = int256((256 * tmp.left + int256(i)) * tmp.tickSpacing); // (, int128 liquidityNet,,,,,,) = IAlgebraPoolV1_9(pool).ticks(int24(int256(tick))); (, bytes memory deltaL) = pool.staticcall(abi.encodeWithSignature("ticks(int24)", tick)); int128 liquidityNet; assembly { liquidityNet := mload(add(deltaL, 64)) } int256 data = int256(uint256(int256(tick)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); index++; } res = res << 1; if (i == 0) break; } } isInitPoint = false; tmp.initPoint2 = 256; tmp.left--; } return tickInfo; } function queryHorizonTicksSuperCompact(address pool, uint256 iteration) public view returns (bytes memory) { (, , int24 currTick, ) = IHorizonPool(pool).getPoolState(); int24 currTick2 = currTick; uint256 threshold = iteration / 2; // travel from left to right bytes memory tickInfo; while (currTick < MAX_TICK_PLUS_1 && iteration > threshold) { (, int128 liquidityNet, , ) = IHorizonPool(pool).ticks(currTick); int256 data = int256(uint256(int256(currTick)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); (, int24 nextTick) = IHorizonPool(pool).initializedTicks(currTick); if (currTick == nextTick) { break; } currTick = nextTick; iteration--; } while (currTick2 > MIN_TICK_MINUS_1 && iteration > 0) { (, int128 liquidityNet, , ) = IHorizonPool(pool).ticks(currTick2); int256 data = int256(uint256(int256(currTick2)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); (int24 prevTick, ) = IHorizonPool(pool).initializedTicks(currTick2); if (prevTick == currTick2) { break; } currTick2 = prevTick; iteration--; } return tickInfo; } function queryAlgebraTicksSuperCompact2(address pool, uint256 iteration) public view returns (bytes memory) { int24 currTick; { (bool s, bytes memory res) = pool.staticcall(abi.encodeWithSignature("prevInitializedTick()")); if (s) { currTick = abi.decode(res, (int24)); } else { (s, res) = pool.staticcall(abi.encodeWithSignature("globalState()")); if (s) { assembly { currTick := mload(add(res, 96)) } } } } int24 currTick2 = currTick; uint256 threshold = iteration / 2; // travel from left to right bytes memory tickInfo; while (currTick < MAX_TICK_PLUS_1 && iteration > threshold) { (, int128 liquidityNet, , , int24 prevTick, int24 nextTick, , , ) = IAlgebraPool(pool).ticks(currTick); int256 data = int256(uint256(int256(currTick)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); if (currTick == nextTick) { break; } currTick = nextTick; iteration--; } while (currTick2 > MIN_TICK_MINUS_1 && iteration > 0) { (, int128 liquidityNet, , , int24 prevTick, int24 nextTick, , , ) = IAlgebraPool(pool).ticks(currTick2); int256 data = int256(uint256(int256(currTick2)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); if (currTick2 == prevTick) { break; } currTick2 = prevTick; iteration--; } return tickInfo; } function queryIzumiSuperCompact(address pool, uint256 len) public view returns (bytes memory, bytes memory) { SuperVar memory tmp; tmp.tickSpacing = IZumiPool(pool).pointDelta(); { (, bytes memory slot0) = pool.staticcall(abi.encodeWithSignature("state()")); int24 currTick; assembly { currTick := mload(add(slot0, 64)) } tmp.currTick = currTick; } tmp.right = tmp.currTick / tmp.tickSpacing / int24(256); tmp.leftMost = -887_272 / tmp.tickSpacing / int24(256) - 2; tmp.rightMost = 887_272 / tmp.tickSpacing / int24(256) + 1; if (tmp.currTick < 0) { tmp.initPoint = uint256( int256(tmp.currTick) / int256(tmp.tickSpacing) - (int256(tmp.currTick) / int256(tmp.tickSpacing) / 256 - 1) * 256 ) % 256; } else { tmp.initPoint = (uint256(int256(tmp.currTick)) / uint256(int256(tmp.tickSpacing))) % 256; } tmp.initPoint2 = tmp.initPoint; if (tmp.currTick < 0) tmp.right--; bytes memory tickInfo; bytes memory limitOrderInfo; tmp.left = tmp.right; uint256 index = 0; while (index < len / 2 && tmp.right < tmp.rightMost) { uint256 res = IZumiPool(pool).pointBitmap(int16(tmp.right)); if (res > 0) { res = res >> tmp.initPoint; for (uint256 i = tmp.initPoint; i < 256; i++) { uint256 isInit = res & 0x01; if (isInit > 0) { int24 tick = int24(int256((256 * tmp.right + int256(i)) * tmp.tickSpacing)); int24 orderOrEndpoint = IZumiPool(pool).orderOrEndpoint(tick / tmp.tickSpacing); if (orderOrEndpoint & 0x01 == 0x01) { (, int128 liquidityNet, , , ) = IZumiPool(pool).points(tick); if (liquidityNet != 0) { int256 data = int256(uint256(int256(tick)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); index++; } } if (orderOrEndpoint & 0x02 == 0x02) { (uint128 sellingX, , , , , uint128 sellingY, , , , ) = IZumiPool(pool).limitOrderData(tick); if (sellingX != 0 || sellingY != 0) { bytes32 data = bytes32( abi.encodePacked(int32(tick), uint112(sellingX), uint112(sellingY)) ); limitOrderInfo = bytes.concat(limitOrderInfo, data); index++; } } } res = res >> 1; } } tmp.initPoint = 0; tmp.right++; } bool isInitPoint = true; while (index < len && tmp.left > tmp.leftMost) { uint256 res = IZumiPool(pool).pointBitmap(int16(tmp.left)); if (res > 0 && tmp.initPoint2 != 0) { res = isInitPoint ? res << ((256 - tmp.initPoint2) % 256) : res; for (uint256 i = tmp.initPoint2 - 1; i >= 0 && index < len; i--) { uint256 isInit = res & 0x8000000000000000000000000000000000000000000000000000000000000000; if (isInit > 0) { int24 tick = int24(int256((256 * tmp.left + int256(i)) * tmp.tickSpacing)); int24 orderOrEndpoint = IZumiPool(pool).orderOrEndpoint(tick / tmp.tickSpacing); if (orderOrEndpoint & 0x01 == 0x01) { (, int128 liquidityNet, , , ) = IZumiPool(pool).points(tick); if (liquidityNet != 0) { int256 data = int256(uint256(int256(tick)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); index++; } } if (orderOrEndpoint & 0x02 == 0x02) { (uint128 sellingX, , , , , uint128 sellingY, , , , ) = IZumiPool(pool).limitOrderData(tick); if (sellingX != 0 || sellingY != 0) { bytes32 data = bytes32( abi.encodePacked(int32(tick), uint112(sellingX), uint112(sellingY)) ); limitOrderInfo = bytes.concat(limitOrderInfo, data); index++; } } } res = res << 1; if (i == 0) break; } } isInitPoint = false; tmp.initPoint2 = 256; tmp.left--; } return (tickInfo, limitOrderInfo); } function queryAlgebraTicksSuperCompact3(address pool, uint256 len) public view returns (bytes memory) { SuperVar memory tmp; tmp.tickSpacing = 1; { (, bytes memory slot0) = pool.staticcall(abi.encodeWithSignature("globalState()")); int24 currTick; assembly { currTick := mload(add(slot0, 64)) } tmp.currTick = currTick; } int24 step = int24(int(len)) * 200; tmp.right = tmp.currTick / tmp.tickSpacing / int24(256); tmp.leftMost = (tmp.currTick - step) / tmp.tickSpacing / int24(256) - 2; tmp.rightMost = (tmp.currTick + step) / tmp.tickSpacing / int24(256) + 1; if (tmp.currTick < 0) { tmp.initPoint = uint256( int256(tmp.currTick) / int256(tmp.tickSpacing) - (int256(tmp.currTick) / int256(tmp.tickSpacing) / 256 - 1) * 256 ) % 256; } else { tmp.initPoint = (uint256(int256(tmp.currTick)) / uint256(int256(tmp.tickSpacing))) % 256; } tmp.initPoint2 = tmp.initPoint; if (tmp.currTick < 0) tmp.right--; bytes memory tickInfo; tmp.left = tmp.right; uint256 index = 0; while (index < len / 2 && tmp.right < tmp.rightMost) { uint256 res = IAlgebraPoolV1_9(pool).tickTable(int16(tmp.right)); if (res > 0) { res = res >> tmp.initPoint; for (uint256 i = tmp.initPoint; i < 256 && index < len / 2; i++) { uint256 isInit = res & 0x01; if (isInit > 0) { int256 tick = int256((256 * tmp.right + int256(i)) * tmp.tickSpacing); // (, int128 liquidityNet,,,,,,) = IAlgebraPoolV1_9(pool).ticks(int24(int256(tick))); (, bytes memory deltaL) = pool.staticcall(abi.encodeWithSignature("ticks(int24)", tick)); int128 liquidityNet; assembly { liquidityNet := mload(add(deltaL, 64)) } int256 data = int256(uint256(int256(tick)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); index++; } res = res >> 1; } } tmp.initPoint = 0; tmp.right++; } bool isInitPoint = true; while (index < len && tmp.left > tmp.leftMost) { uint256 res = IAlgebraPoolV1_9(pool).tickTable(int16(tmp.left)); if (res > 0 && tmp.initPoint2 != 0) { res = isInitPoint ? res << ((256 - tmp.initPoint2) % 256) : res; for (uint256 i = tmp.initPoint2 - 1; i >= 0 && index < len; i--) { uint256 isInit = res & 0x8000000000000000000000000000000000000000000000000000000000000000; if (isInit > 0) { int256 tick = int256((256 * tmp.left + int256(i)) * tmp.tickSpacing); // (, int128 liquidityNet,,,,,,) = IAlgebraPoolV1_9(pool).ticks(int24(int256(tick))); (, bytes memory deltaL) = pool.staticcall(abi.encodeWithSignature("ticks(int24)", tick)); int128 liquidityNet; assembly { liquidityNet := mload(add(deltaL, 64)) } int256 data = int256(uint256(int256(tick)) << 128) + (int256(liquidityNet) & 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff); tickInfo = bytes.concat(tickInfo, bytes32(uint256(data))); index++; } res = res << 1; if (i == 0) break; } } isInitPoint = false; tmp.initPoint2 = 256; tmp.left--; } return tickInfo; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"len","type":"uint256"}],"name":"queryAlgebraTicksSuperCompact","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"iteration","type":"uint256"}],"name":"queryAlgebraTicksSuperCompact2","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"len","type":"uint256"}],"name":"queryAlgebraTicksSuperCompact3","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"len","type":"uint256"}],"name":"queryAlgebraTicksSuperCompact3_back","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"iteration","type":"uint256"}],"name":"queryHorizonTicksSuperCompact","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"len","type":"uint256"}],"name":"queryIzumiSuperCompact","outputs":[{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"len","type":"uint256"}],"name":"queryUniv3TicksSuperCompact","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c38f8f351161005b578063c38f8f35146100df578063c684206c146100f2578063ca883bec14610105578063f9f59a771461011857600080fd5b80632d6d225e14610082578063594a1bf3146100ab5780637df8773a146100cc575b600080fd5b610095610090366004612f7c565b61012b565b6040516100a29190612ff8565b60405180910390f35b6100be6100b9366004612f7c565b61088c565b6040516100a2929190613012565b6100956100da366004612f7c565b611354565b6100956100ed366004612f7c565b6119a7565b610095610100366004612f7c565b6120d4565b610095610113366004612f7c565b612442565b610095610126366004612f7c565b6127be565b6060610135612f20565b836001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101979190613057565b60020b815260408051600481526024810182526020810180516001600160e01b03166339db007960e21b17905290516000916001600160a01b038716916101de9190613072565b600060405180830381855afa9150503d8060008114610219576040519150601f19603f3d011682016040523d82523d6000602084013e61021e565b606091505b506040015160020b602084018190528351610100935061023f9250906130ba565b61024991906130ba565b600290810b604083015281516101009061026790620d89e7196130ba565b61027191906130ba565b61027b91906130f4565b60020b608082015280516101009061029690620d89e86130ba565b6102a091906130ba565b6102ab906001613119565b600290810b60a083015260208201516000910b121561033e576101006001610100836000015160020b846020015160020b6102e6919061313e565b6102f0919061313e565b6102fa919061316c565b61030690610100613193565b826000015160020b836020015160020b610320919061313e565b61032a919061316c565b61033491906131c3565b60c082015261036b565b610100816000015160020b826020015160020b61035b91906131d7565b61036591906131c3565b60c08201525b60c081015160e08201526020810151600060029190910b121561039f5760408101805190610398826131eb565b60020b9052505b604081015160020b60608281019190915260005b6103be6002866131d7565b811080156103d957508260a0015160020b836040015160020b125b156105f6576040838101519051630633bf1f60e51b815260019190910b60048201526000906001600160a01b0388169063c677e3e090602401602060405180830381865afa15801561042f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610453919061320e565b905080156105d25760c084015190811c905b6101008110801561047f575061047c6002886131d7565b83105b156105d0576001821680156105b6576000866000015160020b8388604001516101006104ab9190613227565b60020b6104b89190613247565b6104c29190613193565b905060008a6001600160a01b0316826040516024016104e391815260200190565b60408051601f198184030181529181526020820180516001600160e01b031663f30dba9360e01b179052516105189190613072565b600060405180830381855afa9150503d8060008114610553576040519150601f19603f3d011682016040523d82523d6000602084013e610558565b606091505b5060408101519092509050600061057c6001600160801b038316608086901b613247565b604051909150610592908a90839060200161326f565b604051602081830303815290604052985087806105ae90613291565b985050505050505b5060019190911c90806105c881613291565b915050610465565b505b600060c0850152604084018051906105e9826132aa565b60020b9052506103b39050565b60015b85821080156106155750836080015160020b846060015160020b135b1561087f576060840151604051630633bf1f60e51b815260019190910b60048201526000906001600160a01b0389169063c677e3e090602401602060405180830381865afa15801561066b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068f919061320e565b90506000811180156106a4575060e085015115155b1561085657816106b457806106d7565b6101008560e001516101006106c991906132cb565b6106d391906131c3565b81901b5b9050600060018660e001516106ec91906132cb565b90505b8784101561085457600160ff1b8216801561082c576000876000015160020b8389606001516101006107219190613227565b60020b61072e9190613247565b6107389190613193565b905060008b6001600160a01b03168260405160240161075991815260200190565b60408051601f198184030181529181526020820180516001600160e01b031663f30dba9360e01b1790525161078e9190613072565b600060405180830381855afa9150503d80600081146107c9576040519150601f19603f3d011682016040523d82523d6000602084013e6107ce565b606091505b506040810151909250905060006107f26001600160801b038316608086901b613247565b604051909150610808908b90839060200161326f565b6040516020818303038152906040529950888061082490613291565b995050505050505b600183901b9250816000036108415750610854565b508061084c816132de565b9150506106ef565b505b61010060e08601526060850180516000935090610872826131eb565b60020b9052506105f99050565b5090925050505b92915050565b606080610897612f20565b846001600160a01b03166358c51ce66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f99190613057565b60020b815260408051600481526024810182526020810180516001600160e01b031663c19d93fb60e01b17905290516000916001600160a01b038816916109409190613072565b600060405180830381855afa9150503d806000811461097b576040519150601f19603f3d011682016040523d82523d6000602084013e610980565b606091505b506040015160020b60208401819052835161010093506109a19250906130ba565b6109ab91906130ba565b600290810b60408301528151610100906109c990620d89e7196130ba565b6109d391906130ba565b6109dd91906130f4565b60020b60808201528051610100906109f890620d89e86130ba565b610a0291906130ba565b610a0d906001613119565b600290810b60a083015260208201516000910b1215610aa0576101006001610100836000015160020b846020015160020b610a48919061313e565b610a52919061313e565b610a5c919061316c565b610a6890610100613193565b826000015160020b836020015160020b610a82919061313e565b610a8c919061316c565b610a9691906131c3565b60c0820152610acd565b610100816000015160020b826020015160020b610abd91906131d7565b610ac791906131c3565b60c08201525b60c081015160e08201526020810151600060029190910b1215610b015760408101805190610afa826131eb565b60020b9052505b604081015160020b6060828101919091528060005b610b216002886131d7565b81108015610b3c57508360a0015160020b846040015160020b125b15610efc576040848101519051634c507b9760e11b815260019190910b60048201526000906001600160a01b038a16906398a0f72e90602401602060405180830381865afa158015610b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb6919061320e565b90508015610ed85760c085015190811c905b610100811015610ed657600182168015610ebc576000876000015160020b838960400151610100610bf99190613227565b60020b610c069190613247565b610c109190613193565b905060008c6001600160a01b031663edcba3b28a6000015184610c3391906130ba565b6040516001600160e01b031960e084901b16815260029190910b6004820152602401602060405180830381865afa158015610c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c969190613057565b90508060011660020b600103610d7b576040516375c0e0d560e01b8152600283900b60048201526000906001600160a01b038f16906375c0e0d59060240160a060405180830381865afa158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d159190613317565b50505091505080600f0b600014610d79576000610d426001600160801b038316608086901b60120b613247565b604051909150610d58908b90839060200161326f565b60405160208183030381529060405299508780610d7490613291565b985050505b505b8060021660020b600203610eb9576000808e6001600160a01b0316638790aca3856040518263ffffffff1660e01b8152600401610dc1919060029190910b815260200190565b61014060405180830381865afa158015610ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e03919061337e565b505050509550505050509150816001600160801b03166000141580610e3057506001600160801b03811615155b15610eb6576040805160e086901b601e0b60208201526001600160901b0319609085811b8216602484015284901b16603282015260009101604051602081830303815290604052610e809061341c565b90508981604051602001610e9592919061326f565b60405160208183030381529060405299508880610eb190613291565b995050505b50505b50505b5060019190911c9080610ece81613291565b915050610bc8565b505b600060c086015260408501805190610eef826132aa565b60020b905250610b169050565b60015b8782108015610f1b5750846080015160020b856060015160020b135b15611346576060850151604051634c507b9760e11b815260019190910b60048201526000906001600160a01b038b16906398a0f72e90602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f95919061320e565b9050600081118015610faa575060e086015115155b1561131d5781610fba5780610fdd565b6101008660e00151610100610fcf91906132cb565b610fd991906131c3565b81901b5b9050600060018760e00151610ff291906132cb565b90505b8984101561131b57600160ff1b821680156112f3576000886000015160020b838a606001516101006110279190613227565b60020b6110349190613247565b61103e9190613193565b905060008d6001600160a01b031663edcba3b28b600001518461106191906130ba565b6040516001600160e01b031960e084901b16815260029190910b6004820152602401602060405180830381865afa1580156110a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c49190613057565b90508060011660020b6001036111b25760008e6001600160a01b03166375c0e0d5846040518263ffffffff1660e01b815260040161110b919060029190910b815260200190565b60a060405180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190613317565b50505091505080600f0b6000146111b05760006111796001600160801b038316608086901b60120b613247565b60405190915061118f908c90839060200161326f565b6040516020818303038152906040529a5088806111ab90613291565b995050505b505b8060021660020b6002036112f0576000808f6001600160a01b0316638790aca3856040518263ffffffff1660e01b81526004016111f8919060029190910b815260200190565b61014060405180830381865afa158015611216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123a919061337e565b505050509550505050509150816001600160801b0316600014158061126757506001600160801b03811615155b156112ed576040805160e086901b601e0b60208201526001600160901b0319609085811b8216602484015284901b166032820152600091016040516020818303038152906040526112b79061341c565b90508a816040516020016112cc92919061326f565b6040516020818303038152906040529a5089806112e890613291565b9a5050505b50505b50505b600183901b925081600003611308575061131b565b5080611313816132de565b915050610ff5565b505b61010060e08701526060860180516000935090611339826131eb565b60020b905250610eff9050565b509197909650945050505050565b606061135e612f20565b60408051600481526024810182526020810180516001600160e01b03166339db007960e21b17905290516000916001600160a01b038716916113a09190613072565b600060405180830381855afa9150503d80600081146113db576040519150601f19603f3d011682016040523d82523d6000602084013e6113e0565b606091505b506040015160020b602084018190526113fe925061010091506130ba565b600290810b6040830152611418610100620d89e7196130ba565b61142291906130f4565b60020b6080820152611439610100620d89e86130ba565b611444906001613119565b600290810b60a083015260208201516000910b121561149c5761010080826020015161146f90613443565b60020b61147c91906131c3565b611488906101006132cb565b61149291906131c3565b60c08201526114b7565b610100816020015160020b6114b191906131c3565b60c08201525b60c081015160e08201526020810151600060029190910b12156114eb57604081018051906114e4826131eb565b60020b9052505b604081015160020b60608281019190915260005b61150a6002866131d7565b8110801561152557508260a0015160020b836040015160020b125b15611730576040838101519051630633bf1f60e51b815260019190910b60048201526000906001600160a01b0388169063c677e3e090602401602060405180830381865afa15801561157b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159f919061320e565b9050801561170c5760c084015190811c905b610100811080156115cb57506115c86002886131d7565b83105b1561170a576001821680156116f05760008287604001516101006115ef9190613227565b60020b6115fc9190613247565b905060008a6001600160a01b03168260405160240161161d91815260200190565b60408051601f198184030181529181526020820180516001600160e01b031663f30dba9360e01b179052516116529190613072565b600060405180830381855afa9150503d806000811461168d576040519150601f19603f3d011682016040523d82523d6000602084013e611692565b606091505b506040810151909250905060006116b66001600160801b038316608086901b613247565b6040519091506116cc908a90839060200161326f565b604051602081830303815290604052985087806116e890613291565b985050505050505b5060019190911c908061170281613291565b9150506115b1565b505b600060c085015260408401805190611723826132aa565b60020b9052506114ff9050565b60015b858210801561174f5750836080015160020b846060015160020b135b1561087f576060840151604051630633bf1f60e51b815260019190910b60048201526000906001600160a01b0389169063c677e3e090602401602060405180830381865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c9919061320e565b90506000811180156117de575060e085015115155b1561197e57816117ee5780611811565b6101008560e0015161010061180391906132cb565b61180d91906131c3565b81901b5b9050600060018660e0015161182691906132cb565b90505b8784101561197c57600160ff1b821680156119545760008288606001516101006118539190613227565b60020b6118609190613247565b905060008b6001600160a01b03168260405160240161188191815260200190565b60408051601f198184030181529181526020820180516001600160e01b031663f30dba9360e01b179052516118b69190613072565b600060405180830381855afa9150503d80600081146118f1576040519150601f19603f3d011682016040523d82523d6000602084013e6118f6565b606091505b5060408101519092509050600061191a6001600160801b038316608086901b613247565b604051909150611930908b90839060200161326f565b6040516020818303038152906040529950888061194c90613291565b995050505050505b600183901b925081600003611969575061197c565b5080611974816132de565b915050611829565b505b61010060e0860152606085018051600093509061199a826131eb565b60020b9052506117339050565b60606119b1612f20565b6001815260408051600481526024810182526020810180516001600160e01b03166339db007960e21b17905290516000916001600160a01b038716916119f79190613072565b600060405180830381855afa9150503d8060008114611a32576040519150601f19603f3d011682016040523d82523d6000602084013e611a37565b606091505b506040015160020b60208401525060009050611a548460c8613227565b905061010082600001518360200151611a6d91906130ba565b611a7791906130ba565b600290810b6040840152825160208401516101009190611a989085906130f4565b611aa291906130ba565b611aac91906130ba565b611ab691906130f4565b60020b6080830152815160208301516101009190611ad5908490613119565b611adf91906130ba565b611ae991906130ba565b611af4906001613119565b600290810b60a084015260208301516000910b1215611b87576101006001610100846000015160020b856020015160020b611b2f919061313e565b611b39919061313e565b611b43919061316c565b611b4f90610100613193565b836000015160020b846020015160020b611b69919061313e565b611b73919061316c565b611b7d91906131c3565b60c0830152611bb4565b610100826000015160020b836020015160020b611ba491906131d7565b611bae91906131c3565b60c08301525b60c082015160e08301526020820151600060029190910b1215611be85760408201805190611be1826131eb565b60020b9052505b604082015160020b60608381019190915260005b611c076002876131d7565b81108015611c2257508360a0015160020b846040015160020b125b15611e3f576040848101519051630633bf1f60e51b815260019190910b60048201526000906001600160a01b0389169063c677e3e090602401602060405180830381865afa158015611c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9c919061320e565b90508015611e1b5760c085015190811c905b61010081108015611cc85750611cc56002896131d7565b83105b15611e1957600182168015611dff576000876000015160020b838960400151610100611cf49190613227565b60020b611d019190613247565b611d0b9190613193565b905060008b6001600160a01b031682604051602401611d2c91815260200190565b60408051601f198184030181529181526020820180516001600160e01b031663f30dba9360e01b17905251611d619190613072565b600060405180830381855afa9150503d8060008114611d9c576040519150601f19603f3d011682016040523d82523d6000602084013e611da1565b606091505b50604081015190925090506000611dc56001600160801b038316608086901b613247565b604051909150611ddb908a90839060200161326f565b60405160208183030381529060405298508780611df790613291565b985050505050505b5060019190911c9080611e1181613291565b915050611cae565b505b600060c086015260408501805190611e32826132aa565b60020b905250611bfc9050565b60015b8682108015611e5e5750846080015160020b856060015160020b135b156120c8576060850151604051630633bf1f60e51b815260019190910b60048201526000906001600160a01b038a169063c677e3e090602401602060405180830381865afa158015611eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed8919061320e565b9050600081118015611eed575060e086015115155b1561209f5781611efd5780611f20565b6101008660e00151610100611f1291906132cb565b611f1c91906131c3565b81901b5b9050600060018760e00151611f3591906132cb565b90505b8884101561209d57600160ff1b82168015612075576000886000015160020b838a60600151610100611f6a9190613227565b60020b611f779190613247565b611f819190613193565b905060008c6001600160a01b031682604051602401611fa291815260200190565b60408051601f198184030181529181526020820180516001600160e01b031663f30dba9360e01b17905251611fd79190613072565b600060405180830381855afa9150503d8060008114612012576040519150601f19603f3d011682016040523d82523d6000602084013e612017565b606091505b5060408101519092509050600061203b6001600160801b038316608086901b613247565b604051909150612051908b90839060200161326f565b6040516020818303038152906040529950888061206d90613291565b995050505050505b600183901b92508160000361208a575061209d565b5080612095816132de565b915050611f38565b505b61010060e087015260608601805160009350906120bb826131eb565b60020b905250611e429050565b50909695505050505050565b60606000836001600160a01b031663217ac2376040518163ffffffff1660e01b8152600401608060405180830381865afa158015612116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213a9190613465565b5092508291506000905061214f6002866131d7565b905060605b620d89e9600285900b12801561216957508186115b156122c55760405163f30dba9360e01b8152600285900b60048201526000906001600160a01b0389169063f30dba9390602401608060405180830381865afa1580156121b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121dd91906134bb565b509092506000915061220190506001600160801b038316608088901b60120b613247565b604051909150612217908490839060200161326f565b60408051808303601f190181529082905263c0ac75cf60e01b8252600288900b600483015293506000906001600160a01b038b169063c0ac75cf906024016040805180830381865afa158015612271573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229591906134fd565b9150508060020b8760020b036122ad575050506122c5565b955085886122ba816132de565b995050505050612154565b620d89e819600284900b1380156122dc5750600086115b156124385760405163f30dba9360e01b8152600284900b60048201526000906001600160a01b0389169063f30dba9390602401608060405180830381865afa15801561232c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235091906134bb565b509092506000915061237490506001600160801b038316608087901b60120b613247565b60405190915061238a908490839060200161326f565b60408051808303601f190181529082905263c0ac75cf60e01b8252600287900b600483015293506000906001600160a01b038b169063c0ac75cf906024016040805180830381865afa1580156123e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240891906134fd565b5090508560020b8160020b0361242057505050612438565b9450848861242d816132de565b9950505050506122c5565b9695505050505050565b60408051600481526024810182526020810180516001600160e01b031663bba0f17160e01b1790529051606091600091829182916001600160a01b0388169161248a91613072565b600060405180830381855afa9150503d80600081146124c5576040519150601f19603f3d011682016040523d82523d6000602084013e6124ca565b606091505b509150915081156124f057808060200190518101906124e99190613057565b9250612582565b60408051600481526024810182526020810180516001600160e01b03166339db007960e21b17905290516001600160a01b0388169161252e91613072565b600060405180830381855afa9150503d8060008114612569576040519150601f19603f3d011682016040523d82523d6000602084013e61256e565b606091505b509092509050811561258257606081015192505b5081905060006125936002866131d7565b905060605b620d89e9600285900b1280156125ad57508186115b156126aa5760405163f30dba9360e01b8152600285900b6004820152600090819081906001600160a01b038b169063f30dba939060240161012060405180830381865afa158015612602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126269190613530565b505050955095505050935050600083600f0b6001600160801b031660808960020b901b6126539190613247565b604051909150612669908690839060200161326f565b60405160208183030381529060405294508160020b8860020b0361269057505050506126aa565b819750898061269e906132de565b9a505050505050612598565b620d89e819600284900b1380156126c15750600086115b156124385760405163f30dba9360e01b8152600284900b6004820152600090819081906001600160a01b038b169063f30dba939060240161012060405180830381865afa158015612716573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273a9190613530565b505050955095505050935050600083600f0b6001600160801b031660808860020b901b6127679190613247565b60405190915061277d908690839060200161326f565b60405160208183030381529060405294508260020b8760020b036127a45750505050612438565b82965089806127b2906132de565b9a5050505050506126aa565b60606127c8612f20565b836001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282a9190613057565b60020b815260408051600481526024810182526020810180516001600160e01b0316633850c7bd60e01b17905290516000916001600160a01b038716916128719190613072565b600060405180830381855afa9150503d80600081146128ac576040519150601f19603f3d011682016040523d82523d6000602084013e6128b1565b606091505b506040015160020b60208401819052835161010093506128d29250906130ba565b6128dc91906130ba565b600290810b60408301528151610100906128fa90620d89e7196130ba565b61290491906130ba565b61290e91906130f4565b60020b608082015280516101009061292990620d89e86130ba565b61293391906130ba565b61293e906001613119565b600290810b60a083015260208201516000910b12156129d1576101006001610100836000015160020b846020015160020b612979919061313e565b612983919061313e565b61298d919061316c565b61299990610100613193565b826000015160020b836020015160020b6129b3919061313e565b6129bd919061316c565b6129c791906131c3565b60c08201526129fe565b610100816000015160020b826020015160020b6129ee91906131d7565b6129f891906131c3565b60c08201525b60c081015160e08201526020810151600060029190910b1215612a325760408101805190612a2b826131eb565b60020b9052505b604081015160020b60608281019190915260005b612a516002866131d7565b81108015612a6c57508260a0015160020b836040015160020b125b15612c9057604083810151905163299ce14b60e11b815260019190910b60048201526000906001600160a01b03881690635339c29690602401602060405180830381865afa158015612ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae6919061320e565b90508015612c6c5760c084015190811c905b61010081108015612b125750612b0f6002886131d7565b83105b15612c6a57600182168015612c50576000866000015160020b838860400151610100612b3e9190613227565b60020b612b4b9190613247565b612b559190613193565b60408051600283900b60248083019190915282518083039091018152604490910182526020810180516001600160e01b031663f30dba9360e01b179052905191925060009182916001600160a01b038e1691612bb19190613072565b600060405180830381855afa9150503d8060008114612bec576040519150601f19603f3d011682016040523d82523d6000602084013e612bf1565b606091505b5060408101519350915060009050612c166001600160801b038416608086901b613247565b604051909150612c2c908a90839060200161326f565b60405160208183030381529060405298508780612c4890613291565b985050505050505b5060019190911c9080612c6281613291565b915050612af8565b505b600060c085015260408401805190612c83826132aa565b60020b905250612a469050565b60015b8582108015612caf5750836080015160020b846060015160020b135b1561087f57606084015160405163299ce14b60e11b815260019190910b60048201526000906001600160a01b03891690635339c29690602401602060405180830381865afa158015612d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d29919061320e565b9050600081118015612d3e575060e085015115155b15612ef75781612d4e5780612d71565b6101008560e00151610100612d6391906132cb565b612d6d91906131c3565b81901b5b9050600060018660e00151612d8691906132cb565b90505b87841015612ef557600160ff1b82168015612ecd576000876000015160020b838960600151610100612dbb9190613227565b60020b612dc89190613247565b612dd29190613193565b60408051600283900b60248083019190915282518083039091018152604490910182526020810180516001600160e01b031663f30dba9360e01b179052905191925060009182916001600160a01b038f1691612e2e9190613072565b600060405180830381855afa9150503d8060008114612e69576040519150601f19603f3d011682016040523d82523d6000602084013e612e6e565b606091505b5060408101519350915060009050612e936001600160801b038416608086901b613247565b604051909150612ea9908b90839060200161326f565b60405160208183030381529060405299508880612ec590613291565b995050505050505b600183901b925081600003612ee25750612ef5565b5080612eed816132de565b915050612d89565b505b61010060e08601526060850180516000935090612f13826131eb565b60020b905250612c939050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6001600160a01b0381168114612f7957600080fd5b50565b60008060408385031215612f8f57600080fd5b8235612f9a81612f64565b946020939093013593505050565b60005b83811015612fc3578181015183820152602001612fab565b50506000910152565b60008151808452612fe4816020860160208601612fa8565b601f01601f19169290920160200192915050565b60208152600061300b6020830184612fcc565b9392505050565b6040815260006130256040830185612fcc565b82810360208401526130378185612fcc565b95945050505050565b8051600281900b811461305257600080fd5b919050565b60006020828403121561306957600080fd5b61300b82613040565b60008251613084818460208701612fa8565b9190910192915050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008160020b8360020b806130d1576130d161308e565b627fffff198214600019821416156130eb576130eb6130a4565b90059392505050565b600282810b9082900b03627fffff198112627fffff82131715610886576108866130a4565b600281810b9083900b01627fffff8113627fffff1982121715610886576108866130a4565b60008261314d5761314d61308e565b600160ff1b821460001984141615613167576131676130a4565b500590565b818103600083128015838313168383128216171561318c5761318c6130a4565b5092915050565b80820260008212600160ff1b841416156131af576131af6130a4565b8181058314821517610886576108866130a4565b6000826131d2576131d261308e565b500690565b6000826131e6576131e661308e565b500490565b60008160020b627fffff198103613204576132046130a4565b6000190192915050565b60006020828403121561322057600080fd5b5051919050565b60008260020b8260020b028060020b915080821461318c5761318c6130a4565b8082018281126000831280158216821582161715613267576132676130a4565b505092915050565b60008351613281818460208801612fa8565b9190910191825250602001919050565b6000600182016132a3576132a36130a4565b5060010190565b60008160020b627fffff81036132c2576132c26130a4565b60010192915050565b81810381811115610886576108866130a4565b6000816132ed576132ed6130a4565b506000190190565b8051600f81900b811461305257600080fd5b8051801515811461305257600080fd5b600080600080600060a0868803121561332f57600080fd5b8551945061333f602087016132f5565b9350604086015192506060860151915061335b60808701613307565b90509295509295909350565b80516001600160801b038116811461305257600080fd5b6000806000806000806000806000806101408b8d03121561339e57600080fd5b6133a78b613367565b99506133b560208c01613367565b985060408b0151975060608b015196506133d160808c01613367565b95506133df60a08c01613367565b94506133ed60c08c01613367565b93506133fb60e08c01613367565b92506101008b015191506101208b015190509295989b9194979a5092959850565b8051602080830151919081101561343d576000198160200360031b1b821691505b50919050565b60008160020b627fffff19810361345c5761345c6130a4565b60000392915050565b6000806000806080858703121561347b57600080fd5b845161348681612f64565b935061349460208601613040565b92506134a260408601613040565b91506134b060608601613307565b905092959194509250565b600080600080608085870312156134d157600080fd5b6134da85613367565b93506134e8602086016132f5565b9250604085015191506134b060608601613367565b6000806040838503121561351057600080fd5b61351983613040565b915061352760208401613040565b90509250929050565b60008060008060008060008060006101208a8c03121561354f57600080fd5b6135588a613367565b985061356660208b016132f5565b975060408a0151965060608a0151955061358260808b01613040565b945061359060a08b01613040565b935060c08a01516135a081612f64565b60e08b015190935063ffffffff811681146135ba57600080fd5b91506135c96101008b01613307565b9050929598509295985092959856fea26469706673582212202df0001e41a29ceef19ab8015c62046c1357d24ca35f1f6d6e11c66e6e81d02964736f6c63430008110033
Deployed Bytecode Sourcemap
12222:29507:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23573:4353;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31590:5737;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;19631:3934::-;;;;;;:::i;:::-;;:::i;37335:4391::-;;;;;;:::i;:::-;;:::i;27934:1638::-;;;;;;:::i;:::-;;:::i;29580:2002::-;;;;;;:::i;:::-;;:::i;14854:4769::-;;;;;;:::i;:::-;;:::i;23573:4353::-;23666:12;23691:19;;:::i;:::-;23752:4;-1:-1:-1;;;;;23739:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23721:50;;;;23840:40;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23840:40:0;-1:-1:-1;;;23840:40:0;;;23824:57;;23721:15;;-1:-1:-1;;;;;23824:15:0;;;:57;;23840:40;23824:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23982:2:0;23971:14;23965:21;24015:23;;:12;;;:23;;;24087:15;;24111:3;;-1:-1:-1;24072:30:0;;-1:-1:-1;24087:15:0;24072:30;:::i;:::-;:43;;;;:::i;:::-;24060:55;;;;:9;;;:55;24152:15;;24176:3;;24141:26;;-1:-1:-1;;24141:26:0;:::i;:::-;:39;;;;:::i;:::-;:43;;;;:::i;:::-;24126:58;;:12;;;:58;24221:15;;24245:3;;24211:25;;:7;:25;:::i;:::-;:38;;;;:::i;:::-;:42;;24252:1;24211:42;:::i;:::-;24195:58;;;;:13;;;:58;24270:12;;;;24285:1;24270:16;;;24266:463;;;24593:3;24521:1;24515:3;24496;:15;;;24489:23;;24473:3;:12;;;24466:20;;:46;;;;:::i;:::-;:52;;;;:::i;:::-;:56;;;;:::i;:::-;24465:89;;24551:3;24465:89;:::i;:::-;24421:3;:15;;;24414:23;;24373:3;:12;;;24366:20;;:71;;;;:::i;:::-;:188;;;;:::i;:::-;24336:260;;;;:::i;:::-;24303:13;;;:293;24266:463;;;24714:3;24693;:15;;;24686:23;;24661:3;:12;;;24654:20;;24646:64;;;;:::i;:::-;24645:72;;;;:::i;:::-;24629:13;;;:88;24266:463;24756:13;;;;24739:14;;;:30;24786:12;;;;-1:-1:-1;24786:16:0;;;;;;24782:33;;;24804:9;;;:11;;;;;;:::i;:::-;;;;;-1:-1:-1;24782:33:0;24873:9;;;;24862:20;;24828:21;24862:8;;;:20;;;;-1:-1:-1;24925:1365:0;24940:7;24946:1;24940:3;:7;:::i;:::-;24932:5;:15;:44;;;;;24963:3;:13;;;24951:25;;:3;:9;;;:25;;;24932:44;24925:1365;;;25046:9;;;;;25007:50;;-1:-1:-1;;;25007:50:0;;4465:1:1;4454:21;;;;25007:50:0;;;4436:40:1;24993:11:0;;-1:-1:-1;;;;;25007:32:0;;;;;4409:18:1;;25007:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24993:64;-1:-1:-1;25076:7:0;;25072:1149;;25117:13;;;;25110:20;;;;25149:1057;25185:3;25181:1;:7;:26;;;;-1:-1:-1;25200:7:0;25206:1;25200:3;:7;:::i;:::-;25192:5;:15;25181:26;25149:1057;;;25260:4;25254:10;;25291;;25287:861;;25330:11;25383:3;:15;;;25351:47;;25377:1;25358:3;:9;;;25352:3;:15;;;;:::i;:::-;:27;;;;;;:::i;:::-;25351:47;;;;:::i;:::-;25330:69;;25540:19;25563:4;-1:-1:-1;;;;;25563:15:0;25619:4;25579:45;;;;;;5283:25:1;;5271:2;5256:18;;5139:175;25579:45:0;;;;-1:-1:-1;;25579:45:0;;;;;;;;;;;;;;-1:-1:-1;;;;;25579:45:0;-1:-1:-1;;;25579:45:0;;;25563:62;;;25579:45;25563:62;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25772:2:0;25760:15;;25754:22;25537:88;;-1:-1:-1;25754:22:0;-1:-1:-1;25652:19:0;25845:159;-1:-1:-1;;;;;25914:89:0;;25877:3;25852:28;;;25845:159;:::i;:::-;26042:46;;25831:173;;-1:-1:-1;26042:46:0;;26055:8;;25831:173;;26042:46;;;:::i;:::-;;;;;;;;;;;;;26031:57;;26117:7;;;;;:::i;:::-;;;;25303:845;;;;25287:861;-1:-1:-1;26185:1:0;26178:8;;;;;25209:3;;;;:::i;:::-;;;;25149:1057;;;;25072:1149;26251:1;26235:13;;;:17;26267:9;;;:11;;;;;;:::i;:::-;;;;;-1:-1:-1;24925:1365:0;;-1:-1:-1;24925:1365:0;;26319:4;26334:1559;26349:3;26341:5;:11;:38;;;;;26367:3;:12;;;26356:23;;:3;:8;;;:23;;;26341:38;26334:1559;;;26449:8;;;;26410:49;;-1:-1:-1;;;26410:49:0;;4465:1:1;4454:21;;;;26410:49:0;;;4436:40:1;26396:11:0;;-1:-1:-1;;;;;26410:32:0;;;;;4409:18:1;;26410:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26396:63;;26484:1;26478:3;:7;:30;;;;-1:-1:-1;26489:14:0;;;;:19;;26478:30;26474:1312;;;26535:11;:57;;26589:3;26535:57;;;26582:3;26564;:14;;;26558:3;:20;;;;:::i;:::-;26557:28;;;;:::i;:::-;26549:3;:37;;26535:57;26529:63;;26618:9;26647:1;26630:3;:14;;;:18;;;;:::i;:::-;26618:30;;26613:1158;26668:3;26660:5;:11;26613:1158;;;-1:-1:-1;;;26718:72:0;;26817:10;;26813:860;;26856:11;26908:3;:15;;;26877:46;;26902:1;26884:3;:8;;;26878:3;:14;;;;:::i;:::-;:26;;;;;;:::i;:::-;26877:46;;;;:::i;:::-;26856:68;;27067:19;27090:4;-1:-1:-1;;;;;27090:15:0;27146:4;27106:45;;;;;;5283:25:1;;5271:2;5256:18;;5139:175;27106:45:0;;;;-1:-1:-1;;27106:45:0;;;;;;;;;;;;;;-1:-1:-1;;;;;27106:45:0;-1:-1:-1;;;27106:45:0;;;27090:62;;;27106:45;27090:62;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27299:2:0;27287:15;;27281:22;27064:88;;-1:-1:-1;27281:22:0;-1:-1:-1;27179:19:0;27370:159;-1:-1:-1;;;;;27439:89:0;;27402:3;27377:28;;;27370:159;:::i;:::-;27567:46;;27356:173;;-1:-1:-1;27567:46:0;;27580:8;;27356:173;;27567:46;;;:::i;:::-;;;;;;;;;;;;;27556:57;;27642:7;;;;;:::i;:::-;;;;26829:844;;;;26813:860;27710:1;27703:3;:8;;27697:14;;27738:1;27743;27738:6;27734:17;;27746:5;;;27734:17;-1:-1:-1;26673:3:0;;;;:::i;:::-;;;;26613:1158;;;;26474:1312;27851:3;27834:14;;;:20;27871:8;;;:10;;27814:5;;-1:-1:-1;27871:10:0;;;;:::i;:::-;;;;;-1:-1:-1;26334:1559:0;;-1:-1:-1;26334:1559:0;;-1:-1:-1;27910:8:0;;-1:-1:-1;;;23573:4353:0;;;;;:::o;31590:5737::-;31670:12;31684;31709:19;;:::i;:::-;31767:4;-1:-1:-1;;;;;31757:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31739:46;;;;31852:34;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31852:34:0;-1:-1:-1;;;31852:34:0;;;31836:51;;31739:15;;-1:-1:-1;;;;;31836:15:0;;;:51;;31852:34;31836:51;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31988:2:0;31977:14;31971:21;32021:23;;:12;;;:23;;;32095:15;;32119:3;;-1:-1:-1;32080:30:0;;-1:-1:-1;32095:15:0;32080:30;:::i;:::-;:43;;;;:::i;:::-;32068:55;;;;:9;;;:55;32160:15;;32184:3;;32149:26;;-1:-1:-1;;32149:26:0;:::i;:::-;:39;;;;:::i;:::-;:43;;;;:::i;:::-;32134:58;;:12;;;:58;32229:15;;32253:3;;32219:25;;:7;:25;:::i;:::-;:38;;;;:::i;:::-;:42;;32260:1;32219:42;:::i;:::-;32203:58;;;;:13;;;:58;32278:12;;;;32293:1;32278:16;;;32274:463;;;32601:3;32529:1;32523:3;32504;:15;;;32497:23;;32481:3;:12;;;32474:20;;:46;;;;:::i;:::-;:52;;;;:::i;:::-;:56;;;;:::i;:::-;32473:89;;32559:3;32473:89;:::i;:::-;32429:3;:15;;;32422:23;;32381:3;:12;;;32374:20;;:71;;;;:::i;:::-;:188;;;;:::i;:::-;32344:260;;;;:::i;:::-;32311:13;;;:293;32274:463;;;32722:3;32701;:15;;;32694:23;;32669:3;:12;;;32662:20;;32654:64;;;;:::i;:::-;32653:72;;;;:::i;:::-;32637:13;;;:88;32274:463;32764:13;;;;32747:14;;;:30;32794:12;;;;-1:-1:-1;32794:16:0;;;;;;32790:33;;;32812:9;;;:11;;;;;;:::i;:::-;;;;;-1:-1:-1;32790:33:0;32919:9;;;;32908:20;;32836:21;32908:8;;;:20;;;;32836:21;-1:-1:-1;32971:2025:0;32986:7;32992:1;32986:3;:7;:::i;:::-;32978:5;:15;:44;;;;;33009:3;:13;;;32997:25;;:3;:9;;;:25;;;32978:44;32971:2025;;;33087:9;;;;;33053:45;;-1:-1:-1;;;33053:45:0;;4465:1:1;4454:21;;;;33053:45:0;;;4436:40:1;33039:11:0;;-1:-1:-1;;;;;33053:27:0;;;;;4409:18:1;;33053:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33039:59;-1:-1:-1;33117:7:0;;33113:1814;;33158:13;;;;33151:20;;;;33190:1722;33226:3;33222:1;:7;33190:1722;;;33282:4;33276:10;;33313;;33309:1545;;33352:10;33410:3;:15;;;33378:47;;33404:1;33385:3;:9;;;33379:3;:15;;;;:::i;:::-;:27;;;;;;:::i;:::-;33378:47;;;;:::i;:::-;33352:75;;33454:21;33488:4;-1:-1:-1;;;;;33478:31:0;;33517:3;:15;;;33510:4;:22;;;;:::i;:::-;33478:55;;-1:-1:-1;;;;;;33478:55:0;;;;;;;6480:1:1;6469:21;;;;33478:55:0;;;6451:40:1;6424:18;;33478:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33454:79;;33564:15;33582:4;33564:22;:30;;33590:4;33564:30;33560:633;;33659:28;;-1:-1:-1;;;33659:28:0;;6480:1:1;6469:21;;;33659:28:0;;;6451:40:1;33630:19:0;;-1:-1:-1;;;;;33659:22:0;;;;;6424:18:1;;33659:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33627:60;;;;;;33722:12;:17;;33738:1;33722:17;33718:448;;33776:11;33790:208;-1:-1:-1;;;;;33867:130:0;;33822:3;33797:28;;;;;33790:208;:::i;:::-;34044:46;;33776:222;;-1:-1:-1;34044:46:0;;34057:8;;33776:222;;34044:46;;;:::i;:::-;;;;;;;;;;;;;34033:57;;34127:7;;;;;:::i;:::-;;;;33741:425;33718:448;33596:597;33560:633;34223:15;34241:4;34223:22;:30;;34249:4;34223:30;34219:612;;34287:16;34313;34351:4;-1:-1:-1;;;;;34341:30:0;;34372:4;34341:36;;;;;;;;;;;;;;6480:1:1;6469:21;;;;6451:40;;6439:2;6424:18;;6309:188;34341:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34286:91;;;;;;;;;;;;34412:8;-1:-1:-1;;;;;34412:13:0;34424:1;34412:13;;:30;;;-1:-1:-1;;;;;;34429:13:0;;;;34412:30;34408:396;;;34540:67;;;8600:3:1;8596:16;;;;;34540:67:0;;;8584:29:1;-1:-1:-1;;;;;;8712:3:1;8708:16;;;8704:25;;8691:11;;;8684:46;8764:16;;;8760:25;8746:12;;;8739:47;-1:-1:-1;;8802:12:1;34540:67:0;;;;;;;;;;;;34494:148;;;:::i;:::-;34479:163;;34707:14;34723:4;34694:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34677:51;;34765:7;;;;;:::i;:::-;;;;34444:360;34408:396;34255:576;;34219:612;33325:1529;;33309:1545;-1:-1:-1;34891:1:0;34884:8;;;;;33231:3;;;;:::i;:::-;;;;33190:1722;;;;33113:1814;34957:1;34941:13;;;:17;34973:9;;;:11;;;;;;:::i;:::-;;;;;-1:-1:-1;32971:2025:0;;-1:-1:-1;32971:2025:0;;35025:4;35040:2236;35055:3;35047:5;:11;:38;;;;;35073:3;:12;;;35062:23;;:3;:8;;;:23;;;35047:38;35040:2236;;;35150:8;;;;35116:44;;-1:-1:-1;;;35116:44:0;;4465:1:1;4454:21;;;;35116:44:0;;;4436:40:1;35102:11:0;;-1:-1:-1;;;;;35116:27:0;;;;;4409:18:1;;35116:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35102:58;;35185:1;35179:3;:7;:30;;;;-1:-1:-1;35190:14:0;;;;:19;;35179:30;35175:1994;;;35236:11;:57;;35290:3;35236:57;;;35283:3;35265;:14;;;35259:3;:20;;;;:::i;:::-;35258:28;;;;:::i;:::-;35250:3;:37;;35236:57;35230:63;;35317:9;35346:1;35329:3;:14;;;:18;;;;:::i;:::-;35317:30;;35312:1842;35367:3;35359:5;:11;35312:1842;;;-1:-1:-1;;;35417:72:0;;35516:10;;35512:1546;;35555:10;35612:3;:15;;;35581:46;;35606:1;35588:3;:8;;;35582:3;:14;;;;:::i;:::-;:26;;;;;;:::i;:::-;35581:46;;;;:::i;:::-;35555:74;;35658:21;35692:4;-1:-1:-1;;;;;35682:31:0;;35721:3;:15;;;35714:4;:22;;;;:::i;:::-;35682:55;;-1:-1:-1;;;;;;35682:55:0;;;;;;;6480:1:1;6469:21;;;;35682:55:0;;;6451:40:1;6424:18;;35682:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35658:79;;35768:15;35786:4;35768:22;:30;;35794:4;35768:30;35764:633;;35834:19;35873:4;-1:-1:-1;;;;;35863:22:0;;35886:4;35863:28;;;;;;;;;;;;;;6480:1:1;6469:21;;;;6451:40;;6439:2;6424:18;;6309:188;35863:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35831:60;;;;;;35926:12;:17;;35942:1;35926:17;35922:448;;35980:11;35994:208;-1:-1:-1;;;;;36071:130:0;;36026:3;36001:28;;;;;35994:208;:::i;:::-;36248:46;;35980:222;;-1:-1:-1;36248:46:0;;36261:8;;35980:222;;36248:46;;;:::i;:::-;;;;;;;;;;;;;36237:57;;36331:7;;;;;:::i;:::-;;;;35945:425;35922:448;35800:597;35764:633;36427:15;36445:4;36427:22;:30;;36453:4;36427:30;36423:612;;36491:16;36517;36555:4;-1:-1:-1;;;;;36545:30:0;;36576:4;36545:36;;;;;;;;;;;;;;6480:1:1;6469:21;;;;6451:40;;6439:2;6424:18;;6309:188;36545:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36490:91;;;;;;;;;;;;36616:8;-1:-1:-1;;;;;36616:13:0;36628:1;36616:13;;:30;;;-1:-1:-1;;;;;;36633:13:0;;;;36616:30;36612:396;;;36744:67;;;8600:3:1;8596:16;;;;;36744:67:0;;;8584:29:1;-1:-1:-1;;;;;;8712:3:1;8708:16;;;8704:25;;8691:11;;;8684:46;8764:16;;;8760:25;8746:12;;;8739:47;-1:-1:-1;;8802:12:1;36744:67:0;;;;;;;;;;;;36698:148;;;:::i;:::-;36683:163;;36911:14;36927:4;36898:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36881:51;;36969:7;;;;;:::i;:::-;;;;36648:360;36612:396;36459:576;;36423:612;35528:1530;;35512:1546;37093:1;37086:3;:8;;37080:14;;37121:1;37126;37121:6;37117:17;;37129:5;;;37117:17;-1:-1:-1;35372:3:0;;;;:::i;:::-;;;;35312:1842;;;;35175:1994;37234:3;37217:14;;;:20;37254:8;;;:10;;37197:5;;-1:-1:-1;37254:10:0;;;;:::i;:::-;;;;;-1:-1:-1;35040:2236:0;;-1:-1:-1;35040:2236:0;;-1:-1:-1;37294:8:0;;37304:14;;-1:-1:-1;31590:5737:0;-1:-1:-1;;;;;31590:5737:0:o;19631:3934::-;19718:12;19743:19;;:::i;:::-;19831:40;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19831:40:0;-1:-1:-1;;;19831:40:0;;;19815:57;;19793:18;;-1:-1:-1;;;;;19815:15:0;;;:57;;19831:40;19815:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19973:2:0;19962:14;19956:21;20006:23;;:12;;;:23;;;20063:25;;-1:-1:-1;20084:3:0;;-1:-1:-1;20063:25:0;:::i;:::-;20051:37;;;;:9;;;:37;20114:21;20131:3;-1:-1:-1;;20114:21:0;:::i;:::-;:25;;;;:::i;:::-;20099:40;;:12;;;:40;20166:20;20182:3;20166:7;:20;:::i;:::-;:24;;20189:1;20166:24;:::i;:::-;20150:40;;;;:13;;;:40;20207:12;;;;20222:1;20207:16;;;20203:201;;;20305:3;20297;20280;:12;;;20279:13;;;:::i;:::-;20272:21;;20264:36;;;;:::i;:::-;20257:44;;:3;:44;:::i;:::-;20256:52;;;;:::i;:::-;20240:13;;;:68;20203:201;;;20389:3;20372;:12;;;20365:20;;20357:35;;;;:::i;:::-;20341:13;;;:51;20203:201;20431:13;;;;20414:14;;;:30;20461:12;;;;-1:-1:-1;20461:16:0;;;;;;20457:33;;;20479:9;;;:11;;;;;;:::i;:::-;;;;;-1:-1:-1;20457:33:0;20548:9;;;;20537:20;;20503:21;20537:8;;;:20;;;;-1:-1:-1;20600:1347:0;20615:7;20621:1;20615:3;:7;:::i;:::-;20607:5;:15;:44;;;;;20638:3;:13;;;20626:25;;:3;:9;;;:25;;;20607:44;20600:1347;;;20721:9;;;;;20682:50;;-1:-1:-1;;;20682:50:0;;4465:1:1;4454:21;;;;20682:50:0;;;4436:40:1;20668:11:0;;-1:-1:-1;;;;;20682:32:0;;;;;4409:18:1;;20682:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20668:64;-1:-1:-1;20751:7:0;;20747:1131;;20792:13;;;;20785:20;;;;20824:1039;20860:3;20856:1;:7;:26;;;;-1:-1:-1;20875:7:0;20881:1;20875:3;:7;:::i;:::-;20867:5;:15;20856:26;20824:1039;;;20935:4;20929:10;;20966;;20962:843;;21005:11;21052:1;21033:3;:9;;;21027:3;:15;;;;:::i;:::-;:27;;;;;;:::i;:::-;21005:51;;21197:19;21220:4;-1:-1:-1;;;;;21220:15:0;21276:4;21236:45;;;;;;5283:25:1;;5271:2;5256:18;;5139:175;21236:45:0;;;;-1:-1:-1;;21236:45:0;;;;;;;;;;;;;;-1:-1:-1;;;;;21236:45:0;-1:-1:-1;;;21236:45:0;;;21220:62;;;21236:45;21220:62;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21429:2:0;21417:15;;21411:22;21194:88;;-1:-1:-1;21411:22:0;-1:-1:-1;21309:19:0;21502:159;-1:-1:-1;;;;;21571:89:0;;21534:3;21509:28;;;21502:159;:::i;:::-;21699:46;;21488:173;;-1:-1:-1;21699:46:0;;21712:8;;21488:173;;21699:46;;;:::i;:::-;;;;;;;;;;;;;21688:57;;21774:7;;;;;:::i;:::-;;;;20978:827;;;;20962:843;-1:-1:-1;21842:1:0;21835:8;;;;;20884:3;;;;:::i;:::-;;;;20824:1039;;;;20747:1131;21908:1;21892:13;;;:17;21924:9;;;:11;;;;;;:::i;:::-;;;;;-1:-1:-1;20600:1347:0;;-1:-1:-1;20600:1347:0;;21976:4;21991:1541;22006:3;21998:5;:11;:38;;;;;22024:3;:12;;;22013:23;;:3;:8;;;:23;;;21998:38;21991:1541;;;22106:8;;;;22067:49;;-1:-1:-1;;;22067:49:0;;4465:1:1;4454:21;;;;22067:49:0;;;4436:40:1;22053:11:0;;-1:-1:-1;;;;;22067:32:0;;;;;4409:18:1;;22067:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22053:63;;22141:1;22135:3;:7;:30;;;;-1:-1:-1;22146:14:0;;;;:19;;22135:30;22131:1294;;;22192:11;:57;;22246:3;22192:57;;;22239:3;22221;:14;;;22215:3;:20;;;;:::i;:::-;22214:28;;;;:::i;:::-;22206:3;:37;;22192:57;22186:63;;22275:9;22304:1;22287:3;:14;;;:18;;;;:::i;:::-;22275:30;;22270:1140;22325:3;22317:5;:11;22270:1140;;;-1:-1:-1;;;22375:72:0;;22474:10;;22470:842;;22513:11;22559:1;22541:3;:8;;;22535:3;:14;;;;:::i;:::-;:26;;;;;;:::i;:::-;22513:50;;22706:19;22729:4;-1:-1:-1;;;;;22729:15:0;22785:4;22745:45;;;;;;5283:25:1;;5271:2;5256:18;;5139:175;22745:45:0;;;;-1:-1:-1;;22745:45:0;;;;;;;;;;;;;;-1:-1:-1;;;;;22745:45:0;-1:-1:-1;;;22745:45:0;;;22729:62;;;22745:45;22729:62;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22938:2:0;22926:15;;22920:22;22703:88;;-1:-1:-1;22920:22:0;-1:-1:-1;22818:19:0;23009:159;-1:-1:-1;;;;;23078:89:0;;23041:3;23016:28;;;23009:159;:::i;:::-;23206:46;;22995:173;;-1:-1:-1;23206:46:0;;23219:8;;22995:173;;23206:46;;;:::i;:::-;;;;;;;;;;;;;23195:57;;23281:7;;;;;:::i;:::-;;;;22486:826;;;;22470:842;23349:1;23342:3;:8;;23336:14;;23377:1;23382;23377:6;23373:17;;23385:5;;;23373:17;-1:-1:-1;22330:3:0;;;;:::i;:::-;;;;22270:1140;;;;22131:1294;23490:3;23473:14;;;:20;23510:8;;;:10;;23453:5;;-1:-1:-1;23510:10:0;;;;:::i;:::-;;;;;-1:-1:-1;21991:1541:0;;-1:-1:-1;21991:1541:0;37335:4391;37423:12;37448:19;;:::i;:::-;37496:1;37478:19;;37566:40;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37566:40:0;-1:-1:-1;;;37566:40:0;;;37550:57;;37478:15;;-1:-1:-1;;;;;37550:15:0;;;:57;;37566:40;37550:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37708:2:0;37697:14;37691:21;37741:23;;:12;;;:23;-1:-1:-1;37622:14:0;;-1:-1:-1;37799:21:0;37809:3;37817;37799:21;:::i;:::-;37786:34;;37882:3;37858;:15;;;37843:3;:12;;;:30;;;;:::i;:::-;:43;;;;:::i;:::-;37831:55;;;;:9;;;:55;37936:15;;37913:12;;;;37960:3;;37936:15;37913:19;;37928:4;;37913:19;:::i;:::-;37912:39;;;;:::i;:::-;:52;;;;:::i;:::-;:56;;;;:::i;:::-;37897:71;;:12;;;:71;38019:15;;37996:12;;;;38043:3;;38019:15;37996:19;;38011:4;;37996:19;:::i;:::-;37995:39;;;;:::i;:::-;:52;;;;:::i;:::-;:56;;38050:1;37995:56;:::i;:::-;37979:72;;;;:13;;;:72;38068:12;;;;38083:1;38068:16;;;38064:463;;;38391:3;38319:1;38313:3;38294;:15;;;38287:23;;38271:3;:12;;;38264:20;;:46;;;;:::i;:::-;:52;;;;:::i;:::-;:56;;;;:::i;:::-;38263:89;;38349:3;38263:89;:::i;:::-;38219:3;:15;;;38212:23;;38171:3;:12;;;38164:20;;:71;;;;:::i;:::-;:188;;;;:::i;:::-;38134:260;;;;:::i;:::-;38101:13;;;:293;38064:463;;;38512:3;38491;:15;;;38484:23;;38459:3;:12;;;38452:20;;38444:64;;;;:::i;:::-;38443:72;;;;:::i;:::-;38427:13;;;:88;38064:463;38556:13;;;;38539:14;;;:30;38586:12;;;;-1:-1:-1;38586:16:0;;;;;;38582:33;;;38604:9;;;:11;;;;;;:::i;:::-;;;;;-1:-1:-1;38582:33:0;38673:9;;;;38662:20;;38628:21;38662:8;;;:20;;;;-1:-1:-1;38725:1365:0;38740:7;38746:1;38740:3;:7;:::i;:::-;38732:5;:15;:44;;;;;38763:3;:13;;;38751:25;;:3;:9;;;:25;;;38732:44;38725:1365;;;38846:9;;;;;38807:50;;-1:-1:-1;;;38807:50:0;;4465:1:1;4454:21;;;;38807:50:0;;;4436:40:1;38793:11:0;;-1:-1:-1;;;;;38807:32:0;;;;;4409:18:1;;38807:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38793:64;-1:-1:-1;38876:7:0;;38872:1149;;38917:13;;;;38910:20;;;;38949:1057;38985:3;38981:1;:7;:26;;;;-1:-1:-1;39000:7:0;39006:1;39000:3;:7;:::i;:::-;38992:5;:15;38981:26;38949:1057;;;39060:4;39054:10;;39091;;39087:861;;39130:11;39183:3;:15;;;39151:47;;39177:1;39158:3;:9;;;39152:3;:15;;;;:::i;:::-;:27;;;;;;:::i;:::-;39151:47;;;;:::i;:::-;39130:69;;39340:19;39363:4;-1:-1:-1;;;;;39363:15:0;39419:4;39379:45;;;;;;5283:25:1;;5271:2;5256:18;;5139:175;39379:45:0;;;;-1:-1:-1;;39379:45:0;;;;;;;;;;;;;;-1:-1:-1;;;;;39379:45:0;-1:-1:-1;;;39379:45:0;;;39363:62;;;39379:45;39363:62;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39572:2:0;39560:15;;39554:22;39337:88;;-1:-1:-1;39554:22:0;-1:-1:-1;39452:19:0;39645:159;-1:-1:-1;;;;;39714:89:0;;39677:3;39652:28;;;39645:159;:::i;:::-;39842:46;;39631:173;;-1:-1:-1;39842:46:0;;39855:8;;39631:173;;39842:46;;;:::i;:::-;;;;;;;;;;;;;39831:57;;39917:7;;;;;:::i;:::-;;;;39103:845;;;;39087:861;-1:-1:-1;39985:1:0;39978:8;;;;;39009:3;;;;:::i;:::-;;;;38949:1057;;;;38872:1149;40051:1;40035:13;;;:17;40067:9;;;:11;;;;;;:::i;:::-;;;;;-1:-1:-1;38725:1365:0;;-1:-1:-1;38725:1365:0;;40119:4;40134:1559;40149:3;40141:5;:11;:38;;;;;40167:3;:12;;;40156:23;;:3;:8;;;:23;;;40141:38;40134:1559;;;40249:8;;;;40210:49;;-1:-1:-1;;;40210:49:0;;4465:1:1;4454:21;;;;40210:49:0;;;4436:40:1;40196:11:0;;-1:-1:-1;;;;;40210:32:0;;;;;4409:18:1;;40210:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40196:63;;40284:1;40278:3;:7;:30;;;;-1:-1:-1;40289:14:0;;;;:19;;40278:30;40274:1312;;;40335:11;:57;;40389:3;40335:57;;;40382:3;40364;:14;;;40358:3;:20;;;;:::i;:::-;40357:28;;;;:::i;:::-;40349:3;:37;;40335:57;40329:63;;40418:9;40447:1;40430:3;:14;;;:18;;;;:::i;:::-;40418:30;;40413:1158;40468:3;40460:5;:11;40413:1158;;;-1:-1:-1;;;40518:72:0;;40617:10;;40613:860;;40656:11;40708:3;:15;;;40677:46;;40702:1;40684:3;:8;;;40678:3;:14;;;;:::i;:::-;:26;;;;;;:::i;:::-;40677:46;;;;:::i;:::-;40656:68;;40867:19;40890:4;-1:-1:-1;;;;;40890:15:0;40946:4;40906:45;;;;;;5283:25:1;;5271:2;5256:18;;5139:175;40906:45:0;;;;-1:-1:-1;;40906:45:0;;;;;;;;;;;;;;-1:-1:-1;;;;;40906:45:0;-1:-1:-1;;;40906:45:0;;;40890:62;;;40906:45;40890:62;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41099:2:0;41087:15;;41081:22;40864:88;;-1:-1:-1;41081:22:0;-1:-1:-1;40979:19:0;41170:159;-1:-1:-1;;;;;41239:89:0;;41202:3;41177:28;;;41170:159;:::i;:::-;41367:46;;41156:173;;-1:-1:-1;41367:46:0;;41380:8;;41156:173;;41367:46;;;:::i;:::-;;;;;;;;;;;;;41356:57;;41442:7;;;;;:::i;:::-;;;;40629:844;;;;40613:860;41510:1;41503:3;:8;;41497:14;;41538:1;41543;41538:6;41534:17;;41546:5;;;41534:17;-1:-1:-1;40473:3:0;;;;:::i;:::-;;;;40413:1158;;;;40274:1312;41651:3;41634:14;;;:20;41671:8;;;:10;;41614:5;;-1:-1:-1;41671:10:0;;;;:::i;:::-;;;;;-1:-1:-1;40134:1559:0;;-1:-1:-1;40134:1559:0;;-1:-1:-1;41710:8:0;;37335:4391;-1:-1:-1;;;;;;37335:4391:0:o;27934:1638::-;28027:12;28057:14;28090:4;-1:-1:-1;;;;;28077:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28052:58:0;-1:-1:-1;28052:58:0;;-1:-1:-1;28121:15:0;;-1:-1:-1;28178:13:0;28190:1;28178:9;:13;:::i;:::-;28158:33;;28242:21;28276:626;12352:11;28283:26;;;;;:51;;;;;28325:9;28313;:21;28283:51;28276:626;;;28381:34;;-1:-1:-1;;;28381:34:0;;6480:1:1;6469:21;;;28381:34:0;;;6451:40:1;28354:19:0;;-1:-1:-1;;;;;28381:24:0;;;;;6424:18:1;;28381:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28351:64:0;;-1:-1:-1;28432:11:0;;-1:-1:-1;28446:151:0;;-1:-1:-1;;;;;;28507:89:0;;28482:3;28453:32;;;;;28446:151;:::i;:::-;28623:46;;28432:165;;-1:-1:-1;28623:46:0;;28636:8;;28432:165;;28623:46;;;:::i;:::-;;;;;;;-1:-1:-1;;28623:46:0;;;;;;;-1:-1:-1;;;28705:45:0;;6480:1:1;6469:21;;;28705:45:0;;;6451:40:1;28623:46:0;-1:-1:-1;28687:14:0;;-1:-1:-1;;;;;28705:35:0;;;;;6424:18:1;;28705:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28684:66;;;28781:8;28769:20;;:8;:20;;;28765:66;;28810:5;;;;;28765:66;28856:8;-1:-1:-1;28856:8:0;28879:11;;;;:::i;:::-;;;;28336:566;;;28276:626;;;-1:-1:-1;;28921:28:0;;;;;:45;;;;;28965:1;28953:9;:13;28921:45;28914:623;;;29013:35;;-1:-1:-1;;;29013:35:0;;6480:1:1;6469:21;;;29013:35:0;;;6451:40:1;28986:19:0;;-1:-1:-1;;;;;29013:24:0;;;;;6424:18:1;;29013:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28983:65:0;;-1:-1:-1;29063:11:0;;-1:-1:-1;29077:152:0;;-1:-1:-1;;;;;;29139:89:0;;29114:3;29084:33;;;;;29077:152;:::i;:::-;29255:46;;29063:166;;-1:-1:-1;29255:46:0;;29268:8;;29063:166;;29255:46;;;:::i;:::-;;;;;;;-1:-1:-1;;29255:46:0;;;;;;;-1:-1:-1;;;29337:46:0;;6480:1:1;6469:21;;;29337:46:0;;;6451:40:1;29255:46:0;-1:-1:-1;29317:14:0;;-1:-1:-1;;;;;29337:35:0;;;;;6424:18:1;;29337:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29316:67;;;29414:9;29402:21;;:8;:21;;;29398:67;;29444:5;;;;;29398:67;29491:8;-1:-1:-1;29491:8:0;29514:11;;;;:::i;:::-;;;;28968:569;;;28914:623;;;29556:8;27934:1638;-1:-1:-1;;;;;;27934:1638:0:o;29580:2002::-;29784:48;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29784:48:0;-1:-1:-1;;;29784:48:0;;;29768:65;;29674:12;;29699:14;;;;;;-1:-1:-1;;;;;29768:15:0;;;:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29739:94;;;;29852:1;29848:343;;;29896:3;29885:24;;;;;;;;;;;;:::i;:::-;29874:35;;29848:343;;;29977:40;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29977:40:0;-1:-1:-1;;;29977:40:0;;;29961:57;;-1:-1:-1;;;;;29961:15:0;;;:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29950:68:0;;-1:-1:-1;29950:68:0;-1:-1:-1;30037:139:0;;;;30130:2;30125:3;30121:12;30115:19;30103:31;;30037:139;-1:-1:-1;30232:8:0;;-1:-1:-1;30214:15:0;30271:13;30283:1;30271:9;:13;:::i;:::-;30251:33;;30333:21;30367:585;12352:11;30374:26;;;;;:51;;;;;30416:9;30404;:21;30374:51;30367:585;;;30510:34;;-1:-1:-1;;;30510:34:0;;6480:1:1;6469:21;;;30510:34:0;;;6451:40:1;30445:19:0;;;;;;-1:-1:-1;;;;;30510:24:0;;;;;6424:18:1;;30510:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30442:102;;;;;;;;;;;;30561:11;30643:12;30636:20;;-1:-1:-1;;;;;30636:89:0;30611:3;30597:8;30590:16;;30582:32;;30575:151;;;;:::i;:::-;30752:46;;30561:165;;-1:-1:-1;30752:46:0;;30765:8;;30561:165;;30752:46;;;:::i;:::-;;;;;;;;;;;;;30741:57;;30831:8;30819:20;;:8;:20;;;30815:66;;30860:5;;;;;;30815:66;30906:8;30895:19;;30929:11;;;;;:::i;:::-;;;;30427:525;;;;30367:585;;;-1:-1:-1;;30971:28:0;;;;;:45;;;;;31015:1;31003:9;:13;30971:45;30964:583;;;31101:35;;-1:-1:-1;;;31101:35:0;;6480:1:1;6469:21;;;31101:35:0;;;6451:40:1;31036:19:0;;;;;;-1:-1:-1;;;;;31101:24:0;;;;;6424:18:1;;31101:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31033:103;;;;;;;;;;;;31153:11;31236:12;31229:20;;-1:-1:-1;;;;;31229:89:0;31204:3;31189:9;31182:17;;31174:33;;31167:152;;;;:::i;:::-;31345:46;;31153:166;;-1:-1:-1;31345:46:0;;31358:8;;31153:166;;31345:46;;;:::i;:::-;;;;;;;;;;;;;31334:57;;31425:8;31412:21;;:9;:21;;;31408:67;;31454:5;;;;;;31408:67;31501:8;31489:20;;31524:11;;;;;:::i;:::-;;;;31018:529;;;;30964:583;;14854:4769;14939:12;14964:19;;:::i;:::-;15027:4;-1:-1:-1;;;;;15012:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14994:52;;;;15225:34;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15225:34:0;-1:-1:-1;;;15225:34:0;;;15209:51;;14994:15;;-1:-1:-1;;;;;15209:15:0;;;:51;;15225:34;15209:51;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15361:2:0;15350:14;15344:21;15394:23;;:12;;;:23;;;15468:15;;15492:3;;-1:-1:-1;15453:30:0;;-1:-1:-1;15468:15:0;15453:30;:::i;:::-;:43;;;;:::i;:::-;15441:55;;;;:9;;;:55;15533:15;;15557:3;;15522:26;;-1:-1:-1;;15522:26:0;:::i;:::-;:39;;;;:::i;:::-;:43;;;;:::i;:::-;15507:58;;:12;;;:58;15602:15;;15626:3;;15592:25;;:7;:25;:::i;:::-;:38;;;;:::i;:::-;:42;;15633:1;15592:42;:::i;:::-;15576:58;;;;:13;;;:58;15651:12;;;;15666:1;15651:16;;;15647:463;;;15974:3;15902:1;15896:3;15877;:15;;;15870:23;;15854:3;:12;;;15847:20;;:46;;;;:::i;:::-;:52;;;;:::i;:::-;:56;;;;:::i;:::-;15846:89;;15932:3;15846:89;:::i;:::-;15802:3;:15;;;15795:23;;15754:3;:12;;;15747:20;;:71;;;;:::i;:::-;:188;;;;:::i;:::-;15717:260;;;;:::i;:::-;15684:13;;;:293;15647:463;;;16095:3;16074;:15;;;16067:23;;16042:3;:12;;;16035:20;;16027:64;;;;:::i;:::-;16026:72;;;;:::i;:::-;16010:13;;;:88;15647:463;16137:13;;;;16120:14;;;:30;16167:12;;;;-1:-1:-1;16167:16:0;;;;;;16163:33;;;16185:9;;;:11;;;;;;:::i;:::-;;;;;-1:-1:-1;16163:33:0;16254:9;;;;16243:20;;16209:21;16243:8;;;:20;;;;-1:-1:-1;16306:1524:0;16321:7;16327:1;16321:3;:7;:::i;:::-;16313:5;:15;:44;;;;;16344:3;:13;;;16332:25;;:3;:9;;;:25;;;16313:44;16306:1524;;;16426:9;;;;;16388:49;;-1:-1:-1;;;16388:49:0;;4465:1:1;4454:21;;;;16388:49:0;;;4436:40:1;16374:11:0;;-1:-1:-1;;;;;16388:31:0;;;;;4409:18:1;;16388:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16374:63;-1:-1:-1;16456:7:0;;16452:1309;;16497:13;;;;16490:20;;;;16529:1217;16565:3;16561:1;:7;:26;;;;-1:-1:-1;16580:7:0;16586:1;16580:3;:7;:::i;:::-;16572:5;:15;16561:26;16529:1217;;;16640:4;16634:10;;16671;;16667:1021;;16710:11;16763:3;:15;;;16731:47;;16757:1;16738:3;:9;;;16732:3;:15;;;;:::i;:::-;:27;;;;;;:::i;:::-;16731:47;;;;:::i;:::-;17112:79;;;6480:1:1;6469:21;;;17112:79:0;;;;6451:40:1;;;;17112:79:0;;;;;;;;;;6424:18:1;;;;17112:79:0;;;;;;;-1:-1:-1;;;;;17112:79:0;-1:-1:-1;;;17112:79:0;;;17066:152;;6469:21:1;;-1:-1:-1;16999:19:0;;;;-1:-1:-1;;;;;17066:15:0;;;:152;;17112:79;17066:152;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17314:2:0;17307:10;;17301:17;;-1:-1:-1;17045:173:0;-1:-1:-1;17371:11:0;;-1:-1:-1;17385:159:0;-1:-1:-1;;;;;17454:89:0;;17417:3;17392:28;;;17385:159;:::i;:::-;17582:46;;17371:173;;-1:-1:-1;17582:46:0;;17595:8;;17371:173;;17582:46;;;:::i;:::-;;;;;;;;;;;;;17571:57;;17657:7;;;;;:::i;:::-;;;;16683:1005;;;;16667:1021;-1:-1:-1;17725:1:0;17718:8;;;;;16589:3;;;;:::i;:::-;;;;16529:1217;;;;16452:1309;17791:1;17775:13;;;:17;17807:9;;;:11;;;;;;:::i;:::-;;;;;-1:-1:-1;16306:1524:0;;-1:-1:-1;16306:1524:0;;17859:4;17874:1716;17889:3;17881:5;:11;:38;;;;;17907:3;:12;;;17896:23;;:3;:8;;;:23;;;17881:38;17874:1716;;;17988:8;;;;17950:48;;-1:-1:-1;;;17950:48:0;;4465:1:1;4454:21;;;;17950:48:0;;;4436:40:1;17936:11:0;;-1:-1:-1;;;;;17950:31:0;;;;;4409:18:1;;17950:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17936:62;;18023:1;18017:3;:7;:30;;;;-1:-1:-1;18028:14:0;;;;:19;;18017:30;18013:1470;;;18074:11;:57;;18128:3;18074:57;;;18121:3;18103;:14;;;18097:3;:20;;;;:::i;:::-;18096:28;;;;:::i;:::-;18088:3;:37;;18074:57;18068:63;;18155:9;18184:1;18167:3;:14;;;:18;;;;:::i;:::-;18155:30;;18150:1318;18205:3;18197:5;:11;18150:1318;;;-1:-1:-1;;;18255:72:0;;18354:10;;18350:1020;;18393:11;18445:3;:15;;;18414:46;;18439:1;18421:3;:8;;;18415:3;:14;;;;:::i;:::-;:26;;;;;;:::i;:::-;18414:46;;;;:::i;:::-;18794:79;;;6480:1:1;6469:21;;;18794:79:0;;;;6451:40:1;;;;18794:79:0;;;;;;;;;;6424:18:1;;;;18794:79:0;;;;;;;-1:-1:-1;;;;;18794:79:0;-1:-1:-1;;;18794:79:0;;;18748:152;;6469:21:1;;-1:-1:-1;18681:19:0;;;;-1:-1:-1;;;;;18748:15:0;;;:152;;18794:79;18748:152;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18996:2:0;18989:10;;18983:17;;-1:-1:-1;18727:173:0;-1:-1:-1;19053:11:0;;-1:-1:-1;19067:159:0;-1:-1:-1;;;;;19136:89:0;;19099:3;19074:28;;;19067:159;:::i;:::-;19264:46;;19053:173;;-1:-1:-1;19264:46:0;;19277:8;;19053:173;;19264:46;;;:::i;:::-;;;;;;;;;;;;;19253:57;;19339:7;;;;;:::i;:::-;;;;18366:1004;;;;18350:1020;19407:1;19400:3;:8;;19394:14;;19435:1;19440;19435:6;19431:17;;19443:5;;;19431:17;-1:-1:-1;18210:3:0;;;;:::i;:::-;;;;18150:1318;;;;18013:1470;19548:3;19531:14;;;:20;19568:8;;;:10;;19511:5;;-1:-1:-1;19568:10:0;;;;:::i;:::-;;;;;-1:-1:-1;17874:1716:0;;-1:-1:-1;17874:1716:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:315::-;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:1:o;470:250::-;555:1;565:113;579:6;576:1;573:13;565:113;;;655:11;;;649:18;636:11;;;629:39;601:2;594:10;565:113;;;-1:-1:-1;;712:1:1;694:16;;687:27;470:250::o;725:270::-;766:3;804:5;798:12;831:6;826:3;819:19;847:76;916:6;909:4;904:3;900:14;893:4;886:5;882:16;847:76;:::i;:::-;977:2;956:15;-1:-1:-1;;952:29:1;943:39;;;;984:4;939:50;;725:270;-1:-1:-1;;725:270:1:o;1000:217::-;1147:2;1136:9;1129:21;1110:4;1167:44;1207:2;1196:9;1192:18;1184:6;1167:44;:::i;:::-;1159:52;1000:217;-1:-1:-1;;;1000:217:1:o;1222:377::-;1415:2;1404:9;1397:21;1378:4;1441:44;1481:2;1470:9;1466:18;1458:6;1441:44;:::i;:::-;1533:9;1525:6;1521:22;1516:2;1505:9;1501:18;1494:50;1561:32;1586:6;1578;1561:32;:::i;:::-;1553:40;1222:377;-1:-1:-1;;;;;1222:377:1:o;1604:164::-;1681:13;;1734:1;1723:20;;;1713:31;;1703:59;;1758:1;1755;1748:12;1703:59;1604:164;;;:::o;1773:204::-;1841:6;1894:2;1882:9;1873:7;1869:23;1865:32;1862:52;;;1910:1;1907;1900:12;1862:52;1933:38;1961:9;1933:38;:::i;1982:287::-;2111:3;2149:6;2143:13;2165:66;2224:6;2219:3;2212:4;2204:6;2200:17;2165:66;:::i;:::-;2247:16;;;;;1982:287;-1:-1:-1;;1982:287:1:o;2274:127::-;2335:10;2330:3;2326:20;2323:1;2316:31;2366:4;2363:1;2356:15;2390:4;2387:1;2380:15;2406:127;2467:10;2462:3;2458:20;2455:1;2448:31;2498:4;2495:1;2488:15;2522:4;2519:1;2512:15;2538:275;2576:1;2617;2614;2603:16;2653:1;2650;2639:16;2674:3;2664:37;;2681:18;;:::i;:::-;-1:-1:-1;;2717:21:1;;-1:-1:-1;;2740:15:1;;2713:43;2710:69;;;2759:18;;:::i;:::-;2793:14;;;2538:275;-1:-1:-1;;;2538:275:1:o;2818:193::-;2916:1;2905:16;;;2887;;;;2883:39;-1:-1:-1;;2937:23:1;;2972:8;2962:19;;2934:48;2931:74;;;2985:18;;:::i;3016:189::-;3112:1;3083:16;;;3101;;;;3079:39;3166:7;3133:18;;-1:-1:-1;;3153:22:1;;3130:46;3127:72;;;3179:18;;:::i;3210:193::-;3249:1;3275;3265:35;;3280:18;;:::i;:::-;-1:-1:-1;;;3316:18:1;;-1:-1:-1;;3336:13:1;;3312:38;3309:64;;;3353:18;;:::i;:::-;-1:-1:-1;3387:10:1;;3210:193::o;3408:200::-;3474:9;;;3447:4;3502:9;;3530:10;;3542:12;;;3526:29;3565:12;;;3557:21;;3523:56;3520:82;;;3582:18;;:::i;:::-;3520:82;3408:200;;;;:::o;3613:237::-;3685:9;;;3652:7;3710:9;;-1:-1:-1;;;3721:18:1;;3706:34;3703:60;;;3743:18;;:::i;:::-;3816:1;3807:7;3802:16;3799:1;3796:23;3792:1;3785:9;3782:38;3772:72;;3824:18;;:::i;3855:112::-;3887:1;3913;3903:35;;3918:18;;:::i;:::-;-1:-1:-1;3952:9:1;;3855:112::o;3972:120::-;4012:1;4038;4028:35;;4043:18;;:::i;:::-;-1:-1:-1;4077:9:1;;3972:120::o;4097:192::-;4134:3;4181:5;4178:1;4167:20;4215:7;4211:12;4202:7;4199:25;4196:51;;4227:18;;:::i;:::-;-1:-1:-1;;4263:20:1;;4097:192;-1:-1:-1;;4097:192:1:o;4487:184::-;4557:6;4610:2;4598:9;4589:7;4585:23;4581:32;4578:52;;;4626:1;4623;4616:12;4578:52;-1:-1:-1;4649:16:1;;4487:184;-1:-1:-1;4487:184:1:o;4676:237::-;4714:7;4791:1;4788;4777:16;4773:1;4770;4759:16;4755:39;4828:11;4825:1;4814:26;4803:37;;4871:11;4862:7;4859:24;4849:58;;4887:18;;:::i;4918:216::-;4982:9;;;5010:11;;;4957:3;5040:9;;5068:10;;5064:19;;5093:10;;5085:19;;5061:44;5058:70;;;5108:18;;:::i;:::-;5058:70;;4918:216;;;;:::o;5319:383::-;5476:3;5514:6;5508:13;5530:66;5589:6;5584:3;5577:4;5569:6;5565:17;5530:66;:::i;:::-;5618:16;;;;5643:21;;;-1:-1:-1;5691:4:1;5680:16;;5319:383;-1:-1:-1;5319:383:1:o;5707:135::-;5746:3;5767:17;;;5764:43;;5787:18;;:::i;:::-;-1:-1:-1;5834:1:1;5823:13;;5707:135::o;5847:183::-;5884:3;5931:5;5928:1;5917:20;5961:8;5952:7;5949:21;5946:47;;5973:18;;:::i;:::-;6022:1;6009:15;;5847:183;-1:-1:-1;;5847:183:1:o;6035:128::-;6102:9;;;6123:11;;;6120:37;;;6137:18;;:::i;6168:136::-;6207:3;6235:5;6225:39;;6244:18;;:::i;:::-;-1:-1:-1;;;6280:18:1;;6168:136::o;6502:166::-;6580:13;;6633:2;6622:21;;;6612:32;;6602:60;;6658:1;6655;6648:12;6673:164;6749:13;;6798;;6791:21;6781:32;;6771:60;;6827:1;6824;6817:12;6842:470;6944:6;6952;6960;6968;6976;7029:3;7017:9;7008:7;7004:23;7000:33;6997:53;;;7046:1;7043;7036:12;6997:53;7075:9;7069:16;7059:26;;7104:48;7148:2;7137:9;7133:18;7104:48;:::i;:::-;7094:58;;7192:2;7181:9;7177:18;7171:25;7161:35;;7236:2;7225:9;7221:18;7215:25;7205:35;;7259:47;7301:3;7290:9;7286:19;7259:47;:::i;:::-;7249:57;;6842:470;;;;;;;;:::o;7317:192::-;7396:13;;-1:-1:-1;;;;;7438:46:1;;7428:57;;7418:85;;7499:1;7496;7489:12;7514:884;7665:6;7673;7681;7689;7697;7705;7713;7721;7729;7737;7790:3;7778:9;7769:7;7765:23;7761:33;7758:53;;;7807:1;7804;7797:12;7758:53;7830:40;7860:9;7830:40;:::i;:::-;7820:50;;7889:49;7934:2;7923:9;7919:18;7889:49;:::i;:::-;7879:59;;7978:2;7967:9;7963:18;7957:25;7947:35;;8022:2;8011:9;8007:18;8001:25;7991:35;;8045:50;8090:3;8079:9;8075:19;8045:50;:::i;:::-;8035:60;;8114:50;8159:3;8148:9;8144:19;8114:50;:::i;:::-;8104:60;;8183:50;8228:3;8217:9;8213:19;8183:50;:::i;:::-;8173:60;;8252:50;8297:3;8286:9;8282:19;8252:50;:::i;:::-;8242:60;;8342:3;8331:9;8327:19;8321:26;8311:36;;8387:3;8376:9;8372:19;8366:26;8356:36;;7514:884;;;;;;;;;;;;;:::o;8825:297::-;8943:12;;8990:4;8979:16;;;8973:23;;8943:12;9008:16;;9005:111;;;9102:1;9098:6;9088;9082:4;9078:17;9075:1;9071:25;9067:38;9060:5;9056:50;9047:59;;9005:111;;8825:297;;;:::o;9127:184::-;9161:3;9208:5;9205:1;9194:20;9242:7;9238:12;9229:7;9226:25;9223:51;;9254:18;;:::i;:::-;9294:1;9290:15;;9127:184;-1:-1:-1;;9127:184:1:o;9316:493::-;9406:6;9414;9422;9430;9483:3;9471:9;9462:7;9458:23;9454:33;9451:53;;;9500:1;9497;9490:12;9451:53;9532:9;9526:16;9551:31;9576:5;9551:31;:::i;:::-;9601:5;-1:-1:-1;9625:47:1;9668:2;9653:18;;9625:47;:::i;:::-;9615:57;;9691:47;9734:2;9723:9;9719:18;9691:47;:::i;:::-;9681:57;;9757:46;9799:2;9788:9;9784:18;9757:46;:::i;:::-;9747:56;;9316:493;;;;;;;:::o;9814:438::-;9910:6;9918;9926;9934;9987:3;9975:9;9966:7;9962:23;9958:33;9955:53;;;10004:1;10001;9994:12;9955:53;10027:40;10057:9;10027:40;:::i;:::-;10017:50;;10086:48;10130:2;10119:9;10115:18;10086:48;:::i;:::-;10076:58;;10174:2;10163:9;10159:18;10153:25;10143:35;;10197:49;10242:2;10231:9;10227:18;10197:49;:::i;10257:285::-;10332:6;10340;10393:2;10381:9;10372:7;10368:23;10364:32;10361:52;;;10409:1;10406;10399:12;10361:52;10432:38;10460:9;10432:38;:::i;:::-;10422:48;;10489:47;10532:2;10521:9;10517:18;10489:47;:::i;:::-;10479:57;;10257:285;;;;;:::o;10547:953::-;10680:6;10688;10696;10704;10712;10720;10728;10736;10744;10797:3;10785:9;10776:7;10772:23;10768:33;10765:53;;;10814:1;10811;10804:12;10765:53;10837:40;10867:9;10837:40;:::i;:::-;10827:50;;10896:48;10940:2;10929:9;10925:18;10896:48;:::i;:::-;10886:58;;10984:2;10973:9;10969:18;10963:25;10953:35;;11028:2;11017:9;11013:18;11007:25;10997:35;;11051:48;11094:3;11083:9;11079:19;11051:48;:::i;:::-;11041:58;;11118:48;11161:3;11150:9;11146:19;11118:48;:::i;:::-;11108:58;;11209:3;11198:9;11194:19;11188:26;11223:31;11248:5;11223:31;:::i;:::-;11323:3;11308:19;;11302:26;11273:5;;-1:-1:-1;11372:10:1;11359:24;;11347:37;;11337:65;;11398:1;11395;11388:12;11337:65;11421:7;-1:-1:-1;11447:47:1;11489:3;11474:19;;11447:47;:::i;:::-;11437:57;;10547:953;;;;;;;;;;;:::o
Swarm Source
ipfs://2df0001e41a29ceef19ab8015c62046c1357d24ca35f1f6d6e11c66e6e81d029
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.