Contract 0x57ff9294b05065b88cb3ec148beedfb50eda3127

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc865d96b19a441c4bfac93ea35b90d888a7be06ee4b201d648385c56c52f0a34Set Prices With ...566412842023-01-30 13:41:447 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00070166
0x3dc41ce974458e38d6ebced171dd24ffde26e08c6f5deafe63d82f56befa50d0Set Prices With ...566405942023-01-30 13:38:297 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.0006972
0xf244fab01047e93161005834dd488fea23d8485200269e77b11cbbadfee47d32Set Prices With ...566404372023-01-30 13:37:447 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.0006972
0x87319421e3f9d23931acb360de315ee7a46285e6f14827c9b5c4a07fb6f2e329Set Prices With ...566397582023-01-30 13:34:297 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00072929
0x27e41bf6ba4e81ac387e09e8c520aa3dbd306ac6d9e9a0e124df37dd8eeead9eSet Prices With ...566391632023-01-30 13:31:277 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00072929
0xfc1b426e74cf65f006ee71822597a1d18a7144e516ad72be6dae507bf0701c4bSet Prices With ...566386572023-01-30 13:29:027 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00072677
0x720166c8170db4ee9b16cbe869b05603fd59059bf6610a02dc554ad7c9b92e3aSet Prices With ...566383122023-01-30 13:27:297 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00073125
0xb6ab9be75020ba57af1c0945fd1717453a97585d65b15f9817aaa2a455bc25d3Set Prices With ...566376772023-01-30 13:24:207 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00070885
0x2a568e0c51112dc829162ab88449a3435ae09a2370596759f12c9a96bb7fd235Set Prices With ...566376732023-01-30 13:24:197 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00073125
0x75005780e8934b0918294973433952e031b7a16de2031e10e06163f9d0d58790Set Prices With ...566371842023-01-30 13:22:007 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00070946
0x3b5db7e855a7ed32a8549be43f7eb3000f2df063e87956093fe64e34d2abe4a1Set Prices With ...566371782023-01-30 13:21:597 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.0007229
0xc56330685ec83860bcc973b852b89a28e73a12cd41804f0ddcbeee644d455e0bSet Prices With ...566367322023-01-30 13:19:447 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.0007229
0x7149f0942140ea42407c76d103fb39876281f523a67f0d1fc2f1d54a3ae57830Set Prices With ...566361132023-01-30 13:16:397 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00223529
0xee53f692a4d3ec39a31cb60f28cb69120e7c17e6e05f82ca221c4a469d6a375dSet Prices With ...566361092023-01-30 13:16:387 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00092549
0xe0d2e67d7d9065288ea2438cf0bfb2b78612ff0c182587123ee4103efbb30becSet Prices With ...566355932023-01-30 13:13:597 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00072412
0x3dfa4f644c1f62f9d1696e5f31ea3a12b7227b4c8f55781ca5ab6ddda15729a7Set Prices With ...566349542023-01-30 13:10:517 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00162991
0xe8e3d55c86fed983021bea51181a6061501993f95b2af2808419d6615188c3dfSet Prices With ...566348062023-01-30 13:10:077 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00068783
0x22f04253156f08912a7d6d0e3cc6d15aef2387ef5b8240fbbe11aaed6df0617fSet Prices With ...566348022023-01-30 13:10:057 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00071023
0xdca83688fb0a31f174410c409d8d73cb9010d2d96db5774e3ed720a6f8f04d13Set Prices With ...566347342023-01-30 13:09:477 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00071471
0x97ce2f77157cdd494f3126a30ffaa99c352b91d4453544c2dcfc7c2d1e6ab47cSet Prices With ...566345242023-01-30 13:08:467 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00071023
0x2c535e9670efa4e19b9fcc189f5d268b8caa3006e94ba305bed43e3df41ddb61Set Prices With ...566339022023-01-30 13:05:447 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00071023
0x0cbf74d918d76248df6587a9100bda6c36d0a5a4bd8d04111cbc125abe48f6a4Set Prices With ...566332182023-01-30 13:02:307 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.0007051
0x9fa585ac408a6faad6dba542cdc453d4674960749d81d32bc869740dee857bc9Set Prices With ...566328612023-01-30 13:00:487 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00070958
0x293ef75459724c6c06734c3ed6d2b31f5ba00e7a674b9febebf021426cd4f2b1Set Prices With ...566325372023-01-30 12:59:137 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00070958
0x1f02f9017cc653895bc6bf0f485d301727150337bc0ec5cd64e0eb93c884b1e1Set Prices With ...566319072023-01-30 12:56:127 days 12 hrs ago0xb7778a862cba236cd11f61260922ff61c01451ba IN  0x57ff9294b05065b88cb3ec148beedfb50eda31270 ETH0.00065448
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xc865d96b19a441c4bfac93ea35b90d888a7be06ee4b201d648385c56c52f0a34566412842023-01-30 13:41:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xc865d96b19a441c4bfac93ea35b90d888a7be06ee4b201d648385c56c52f0a34566412842023-01-30 13:41:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xc865d96b19a441c4bfac93ea35b90d888a7be06ee4b201d648385c56c52f0a34566412842023-01-30 13:41:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xc865d96b19a441c4bfac93ea35b90d888a7be06ee4b201d648385c56c52f0a34566412842023-01-30 13:41:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xc865d96b19a441c4bfac93ea35b90d888a7be06ee4b201d648385c56c52f0a34566412842023-01-30 13:41:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xc865d96b19a441c4bfac93ea35b90d888a7be06ee4b201d648385c56c52f0a34566412842023-01-30 13:41:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xc865d96b19a441c4bfac93ea35b90d888a7be06ee4b201d648385c56c52f0a34566412842023-01-30 13:41:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x3dc41ce974458e38d6ebced171dd24ffde26e08c6f5deafe63d82f56befa50d0566405942023-01-30 13:38:297 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x3dc41ce974458e38d6ebced171dd24ffde26e08c6f5deafe63d82f56befa50d0566405942023-01-30 13:38:297 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x3dc41ce974458e38d6ebced171dd24ffde26e08c6f5deafe63d82f56befa50d0566405942023-01-30 13:38:297 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x3dc41ce974458e38d6ebced171dd24ffde26e08c6f5deafe63d82f56befa50d0566405942023-01-30 13:38:297 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x3dc41ce974458e38d6ebced171dd24ffde26e08c6f5deafe63d82f56befa50d0566405942023-01-30 13:38:297 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x3dc41ce974458e38d6ebced171dd24ffde26e08c6f5deafe63d82f56befa50d0566405942023-01-30 13:38:297 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x3dc41ce974458e38d6ebced171dd24ffde26e08c6f5deafe63d82f56befa50d0566405942023-01-30 13:38:297 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xf244fab01047e93161005834dd488fea23d8485200269e77b11cbbadfee47d32566404372023-01-30 13:37:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xf244fab01047e93161005834dd488fea23d8485200269e77b11cbbadfee47d32566404372023-01-30 13:37:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xf244fab01047e93161005834dd488fea23d8485200269e77b11cbbadfee47d32566404372023-01-30 13:37:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xf244fab01047e93161005834dd488fea23d8485200269e77b11cbbadfee47d32566404372023-01-30 13:37:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xf244fab01047e93161005834dd488fea23d8485200269e77b11cbbadfee47d32566404372023-01-30 13:37:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xf244fab01047e93161005834dd488fea23d8485200269e77b11cbbadfee47d32566404372023-01-30 13:37:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0xf244fab01047e93161005834dd488fea23d8485200269e77b11cbbadfee47d32566404372023-01-30 13:37:447 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x87319421e3f9d23931acb360de315ee7a46285e6f14827c9b5c4a07fb6f2e329566397582023-01-30 13:34:297 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x87319421e3f9d23931acb360de315ee7a46285e6f14827c9b5c4a07fb6f2e329566397582023-01-30 13:34:297 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x87319421e3f9d23931acb360de315ee7a46285e6f14827c9b5c4a07fb6f2e329566397582023-01-30 13:34:297 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
0x87319421e3f9d23931acb360de315ee7a46285e6f14827c9b5c4a07fb6f2e329566397582023-01-30 13:34:297 days 12 hrs ago 0x57ff9294b05065b88cb3ec148beedfb50eda3127 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FastPriceFeed

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan on 2022-08-19
*/

// Sources flattened with hardhat v2.9.3 https://hardhat.org

// File contracts/libraries/math/SafeMath.sol

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


// File contracts/oracle/interfaces/ISecondaryPriceFeed.sol


pragma solidity 0.6.12;

interface ISecondaryPriceFeed {
    function getPrice(
        address _token,
        uint256 _referencePrice,
        bool _maximise
    ) external view returns (uint256);
}


// File contracts/oracle/interfaces/IFastPriceFeed.sol


pragma solidity 0.6.12;

interface IFastPriceFeed {
    function lastUpdatedAt() external view returns (uint256);

    function lastUpdatedBlock() external view returns (uint256);
}


// File contracts/oracle/interfaces/IFastPriceEvents.sol


pragma solidity 0.6.12;

interface IFastPriceEvents {
    function emitPriceEvent(address _token, uint256 _price) external;
}


// File contracts/core/interfaces/IPositionRouter.sol


pragma solidity 0.6.12;

interface IPositionRouter {
    function executeIncreasePositions(uint256 _count, address payable _executionFeeReceiver) external;

    function executeDecreasePositions(uint256 _count, address payable _executionFeeReceiver) external;
}


// File contracts/access/Governable.sol


pragma solidity 0.6.12;

contract Governable {
    address public gov;

    constructor() public {
        gov = msg.sender;
    }

    modifier onlyGov() {
        require(msg.sender == gov, "Governable: forbidden");
        _;
    }

    function setGov(address _gov) external onlyGov {
        gov = _gov;
    }
}


// File contracts/oracle/FastPriceFeed.sol

pragma solidity 0.6.12;

contract FastPriceFeed is ISecondaryPriceFeed, IFastPriceFeed, Governable {
    using SafeMath for uint256;

    uint256 public constant PRICE_PRECISION = 10**30;

    // uint256(~0) is 256 bits of 1s
    // shift the 1s by (256 - 32) to get (256 - 32) 0s followed by 32 1s
    uint256 public constant PRICE_BITMASK = uint256(~0) >> (256 - 32);

    uint256 public constant BASIS_POINTS_DIVISOR = 10000;

    uint256 public constant MAX_PRICE_DURATION = 30 minutes;

    bool public isInitialized;
    bool public isSpreadEnabled = false;
    address public fastPriceEvents;

    address public tokenManager;

    address public positionRouter;

    uint256 public override lastUpdatedAt;
    uint256 public override lastUpdatedBlock;

    uint256 public priceDuration;
    uint256 public minBlockInterval;
    uint256 public maxTimeDeviation;

    // volatility basis points
    uint256 public volBasisPoints;
    // max deviation from primary price
    uint256 public maxDeviationBasisPoints;

    uint256 public minAuthorizations;
    uint256 public disableFastPriceVoteCount = 0;

    mapping(address => bool) public isUpdater;

    mapping(address => uint256) public prices;

    mapping(address => bool) public isSigner;
    mapping(address => bool) public disableFastPriceVotes;

    // array of tokens used in setCompactedPrices, saves L1 calldata gas costs
    address[] public tokens;
    // array of tokenPrecisions used in setCompactedPrices, saves L1 calldata gas costs
    // if the token price will be sent with 3 decimals, then tokenPrecision for that token
    // should be 10 ** 3
    uint256[] public tokenPrecisions;

    event DisableFastPrice(address signer);
    event EnableFastPrice(address signer);

    modifier onlySigner() {
        require(isSigner[msg.sender], "FastPriceFeed: forbidden");
        _;
    }

    modifier onlyUpdater() {
        require(isUpdater[msg.sender], "FastPriceFeed: forbidden");
        _;
    }

    modifier onlyTokenManager() {
        require(msg.sender == tokenManager, "FastPriceFeed: forbidden");
        _;
    }

    constructor(
        uint256 _priceDuration,
        uint256 _minBlockInterval,
        uint256 _maxDeviationBasisPoints,
        address _fastPriceEvents,
        address _tokenManager,
        address _positionRouter
    ) public {
        require(_priceDuration <= MAX_PRICE_DURATION, "FastPriceFeed: invalid _priceDuration");
        priceDuration = _priceDuration;
        minBlockInterval = _minBlockInterval;
        maxDeviationBasisPoints = _maxDeviationBasisPoints;
        fastPriceEvents = _fastPriceEvents;
        tokenManager = _tokenManager;
        positionRouter = _positionRouter;
    }

    function initialize(
        uint256 _minAuthorizations,
        address[] memory _signers,
        address[] memory _updaters
    ) public onlyGov {
        require(!isInitialized, "FastPriceFeed: already initialized");
        isInitialized = true;

        minAuthorizations = _minAuthorizations;

        for (uint256 i = 0; i < _signers.length; i++) {
            address signer = _signers[i];
            isSigner[signer] = true;
        }

        for (uint256 i = 0; i < _updaters.length; i++) {
            address updater = _updaters[i];
            isUpdater[updater] = true;
        }
    }

    function setTokenManager(address _tokenManager) external onlyGov {
        tokenManager = _tokenManager;
    }

    function setSigner(address _account, bool _isActive) external onlyGov {
        isSigner[_account] = _isActive;
    }

    function setUpdater(address _account, bool _isActive) external onlyGov {
        isUpdater[_account] = _isActive;
    }

    function setFastPriceEvents(address _fastPriceEvents) external onlyGov {
        fastPriceEvents = _fastPriceEvents;
    }

    function setPriceDuration(uint256 _priceDuration) external onlyGov {
        require(_priceDuration <= MAX_PRICE_DURATION, "FastPriceFeed: invalid _priceDuration");
        priceDuration = _priceDuration;
    }

    function setMinBlockInterval(uint256 _minBlockInterval) external onlyGov {
        minBlockInterval = _minBlockInterval;
    }

    function setIsSpreadEnabled(bool _isSpreadEnabled) external onlyUpdater {
        isSpreadEnabled = _isSpreadEnabled;
    }

    function setMaxTimeDeviation(uint256 _maxTimeDeviation) external onlyGov {
        maxTimeDeviation = _maxTimeDeviation;
    }

    function setLastUpdatedAt(uint256 _lastUpdatedAt) external onlyGov {
        lastUpdatedAt = _lastUpdatedAt;
    }

    function setVolBasisPoints(uint256 _volBasisPoints) external onlyGov {
        volBasisPoints = _volBasisPoints;
    }

    function setMaxDeviationBasisPoints(uint256 _maxDeviationBasisPoints) external onlyGov {
        maxDeviationBasisPoints = _maxDeviationBasisPoints;
    }

    function setMinAuthorizations(uint256 _minAuthorizations) external onlyTokenManager {
        minAuthorizations = _minAuthorizations;
    }

    function setTokens(address[] memory _tokens, uint256[] memory _tokenPrecisions) external onlyGov {
        require(_tokens.length == _tokenPrecisions.length, "FastPriceFeed: invalid lengths");
        tokens = _tokens;
        tokenPrecisions = _tokenPrecisions;
    }

    function setPrices(
        address[] memory _tokens,
        uint256[] memory _prices,
        uint256 _timestamp
    ) external onlyUpdater {
        bool shouldUpdate = _setLastUpdatedValues(_timestamp);

        if (shouldUpdate) {
            address _fastPriceEvents = fastPriceEvents;

            for (uint256 i = 0; i < _tokens.length; i++) {
                address token = _tokens[i];
                prices[token] = _prices[i];
                _emitPriceEvent(_fastPriceEvents, token, _prices[i]);
            }
        }
    }

    function setCompactedPrices(uint256[] memory _priceBitArray, uint256 _timestamp) external onlyUpdater {
        bool shouldUpdate = _setLastUpdatedValues(_timestamp);

        if (shouldUpdate) {
            address _fastPriceEvents = fastPriceEvents;

            for (uint256 i = 0; i < _priceBitArray.length; i++) {
                uint256 priceBits = _priceBitArray[i];

                for (uint256 j = 0; j < 8; j++) {
                    uint256 index = i * 8 + j;
                    if (index >= tokens.length) {
                        return;
                    }

                    uint256 startBit = 32 * j;
                    uint256 price = (priceBits >> startBit) & PRICE_BITMASK;

                    address token = tokens[i * 8 + j];
                    uint256 tokenPrecision = tokenPrecisions[i * 8 + j];
                    uint256 adjustedPrice = price.mul(PRICE_PRECISION).div(tokenPrecision);
                    prices[token] = adjustedPrice;

                    _emitPriceEvent(_fastPriceEvents, token, adjustedPrice);
                }
            }
        }
    }

    function setPricesWithBits(uint256 _priceBits, uint256 _timestamp) external onlyUpdater {
        _setPricesWithBits(_priceBits, _timestamp);
    }

    function setPricesWithBitsAndExecute(
        uint256 _priceBits,
        uint256 _timestamp,
        uint256 _endIndexForIncreasePositions,
        uint256 _endIndexForDecreasePositions
    ) external onlyUpdater {
        _setPricesWithBits(_priceBits, _timestamp);

        IPositionRouter _positionRouter = IPositionRouter(positionRouter);
        _positionRouter.executeIncreasePositions(_endIndexForIncreasePositions, payable(msg.sender));
        _positionRouter.executeDecreasePositions(_endIndexForDecreasePositions, payable(msg.sender));
    }

    function disableFastPrice() external onlySigner {
        require(!disableFastPriceVotes[msg.sender], "FastPriceFeed: already voted");
        disableFastPriceVotes[msg.sender] = true;
        disableFastPriceVoteCount = disableFastPriceVoteCount.add(1);

        emit DisableFastPrice(msg.sender);
    }

    function enableFastPrice() external onlySigner {
        require(disableFastPriceVotes[msg.sender], "FastPriceFeed: already enabled");
        disableFastPriceVotes[msg.sender] = false;
        disableFastPriceVoteCount = disableFastPriceVoteCount.sub(1);

        emit EnableFastPrice(msg.sender);
    }

    function getPrice(
        address _token,
        uint256 _refPrice,
        bool _maximise
    ) external view override returns (uint256) {
        // If it has been longer than priceDuration since return parameter given
        if (block.timestamp > lastUpdatedAt.add(priceDuration)) {
            return _refPrice;
        }

        uint256 fastPrice = prices[_token];
        if (fastPrice == 0) {
            return _refPrice;
        }

        uint256 maxPrice = _refPrice.mul(BASIS_POINTS_DIVISOR.add(maxDeviationBasisPoints)).div(BASIS_POINTS_DIVISOR);
        uint256 minPrice = _refPrice.mul(BASIS_POINTS_DIVISOR.sub(maxDeviationBasisPoints)).div(BASIS_POINTS_DIVISOR);

        if (favorFastPrice()) {
            if (fastPrice >= minPrice && fastPrice <= maxPrice) {
                if (_maximise) {
                    if (_refPrice > fastPrice) {
                        uint256 volPrice = fastPrice.mul(BASIS_POINTS_DIVISOR.add(volBasisPoints)).div(
                            BASIS_POINTS_DIVISOR
                        );
                        // the volPrice should not be more than _refPrice
                        return volPrice > _refPrice ? _refPrice : volPrice;
                    }
                    return fastPrice;
                }

                if (_refPrice < fastPrice) {
                    uint256 volPrice = fastPrice.mul(BASIS_POINTS_DIVISOR.sub(volBasisPoints)).div(
                        BASIS_POINTS_DIVISOR
                    );
                    // the volPrice should not be less than _refPrice
                    return volPrice < _refPrice ? _refPrice : volPrice;
                }

                return fastPrice;
            }
        }

        if (_maximise) {
            if (_refPrice > fastPrice) {
                return _refPrice;
            }
            return fastPrice > maxPrice ? maxPrice : fastPrice;
        }

        if (_refPrice < fastPrice) {
            return _refPrice;
        }
        return fastPrice < minPrice ? minPrice : fastPrice;
    }

    function favorFastPrice() public view returns (bool) {
        if (isSpreadEnabled) {
            return false;
        }

        if (disableFastPriceVoteCount >= minAuthorizations) {
            return false;
        }

        return true;
    }

    function _setPricesWithBits(uint256 _priceBits, uint256 _timestamp) private {
        bool shouldUpdate = _setLastUpdatedValues(_timestamp);

        if (shouldUpdate) {
            address _fastPriceEvents = fastPriceEvents;

            for (uint256 j = 0; j < 8; j++) {
                uint256 index = j;
                if (index >= tokens.length) {
                    return;
                }

                uint256 startBit = 32 * j;
                uint256 price = (_priceBits >> startBit) & PRICE_BITMASK;

                address token = tokens[j];
                uint256 tokenPrecision = tokenPrecisions[j];
                uint256 adjustedPrice = price.mul(PRICE_PRECISION).div(tokenPrecision);
                prices[token] = adjustedPrice;

                _emitPriceEvent(_fastPriceEvents, token, adjustedPrice);
            }
        }
    }

    function _emitPriceEvent(
        address _fastPriceEvents,
        address _token,
        uint256 _price
    ) private {
        if (_fastPriceEvents == address(0)) {
            return;
        }

        IFastPriceEvents(_fastPriceEvents).emitPriceEvent(_token, _price);
    }

    function _setLastUpdatedValues(uint256 _timestamp) private returns (bool) {
        if (minBlockInterval > 0) {
            require(
                block.number.sub(lastUpdatedBlock) >= minBlockInterval,
                "FastPriceFeed: minBlockInterval not yet passed"
            );
        }

        require(_timestamp > block.timestamp.sub(maxTimeDeviation), "FastPriceFeed: _timestamp below allowed range");
        require(_timestamp < block.timestamp.add(maxTimeDeviation), "FastPriceFeed: _timestamp exceeds allowed range");

        // do not update prices if _timestamp is before the current lastUpdatedAt value
        if (_timestamp < lastUpdatedAt) {
            return false;
        }

        lastUpdatedAt = _timestamp;
        lastUpdatedBlock = block.number;

        return true;
    }
}

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_priceDuration","type":"uint256"},{"internalType":"uint256","name":"_minBlockInterval","type":"uint256"},{"internalType":"uint256","name":"_maxDeviationBasisPoints","type":"uint256"},{"internalType":"address","name":"_fastPriceEvents","type":"address"},{"internalType":"address","name":"_tokenManager","type":"address"},{"internalType":"address","name":"_positionRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"DisableFastPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"EnableFastPrice","type":"event"},{"inputs":[],"name":"BASIS_POINTS_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRICE_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_BITMASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableFastPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableFastPriceVoteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"disableFastPriceVotes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableFastPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fastPriceEvents","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"favorFastPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_refPrice","type":"uint256"},{"internalType":"bool","name":"_maximise","type":"bool"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAuthorizations","type":"uint256"},{"internalType":"address[]","name":"_signers","type":"address[]"},{"internalType":"address[]","name":"_updaters","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSigner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSpreadEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isUpdater","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdatedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdatedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDeviationBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTimeDeviation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAuthorizations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBlockInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positionRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"prices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_priceBitArray","type":"uint256[]"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setCompactedPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fastPriceEvents","type":"address"}],"name":"setFastPriceEvents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isSpreadEnabled","type":"bool"}],"name":"setIsSpreadEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastUpdatedAt","type":"uint256"}],"name":"setLastUpdatedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDeviationBasisPoints","type":"uint256"}],"name":"setMaxDeviationBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTimeDeviation","type":"uint256"}],"name":"setMaxTimeDeviation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAuthorizations","type":"uint256"}],"name":"setMinAuthorizations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minBlockInterval","type":"uint256"}],"name":"setMinBlockInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceDuration","type":"uint256"}],"name":"setPriceDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceBits","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setPricesWithBits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceBits","type":"uint256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"_endIndexForIncreasePositions","type":"uint256"},{"internalType":"uint256","name":"_endIndexForDecreasePositions","type":"uint256"}],"name":"setPricesWithBitsAndExecute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenManager","type":"address"}],"name":"setTokenManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_tokenPrecisions","type":"uint256[]"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setUpdater","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_volBasisPoints","type":"uint256"}],"name":"setVolBasisPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenPrecisions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"volBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526000805460ff60a81b19168155600c5534801561002057600080fd5b5060405161235f38038061235f833981810160405260c081101561004357600080fd5b508051602082015160408301516060840151608085015160a090950151600080546001600160a01b0319163317905593949293919290916107088611156100bb5760405162461bcd60e51b815260040180806020018281038252602581526020018061233a6025913960400191505060405180910390fd5b600695909555600793909355600a91909155600180546001600160a01b039283166001600160a01b031991821617909155600280549383169382169390931790925560038054919093169116179055612221806101196000396000f3fe608060405234801561001057600080fd5b50600436106102305760003560e01c806303b049361461023557806303cd25711461026f57806303f4d7dc146102895780630e9272ea1461032e578063114fbeb314610352578063126082cf1461035a57806312d43a51146103625780631389a3cc1461036a57806314dd2dce14610399578063162ac4e0146103b657806317835d1c146103dc5780631a153391146103ff578063287800c91461042d5780632a709b141461043557806331cb61051461043d578063392e53cd1461046b5780633aa08f861461047357806344c231931461047b5780634d11fb4a146104985780634f64b2be146104b55780634fdfb086146104d257806354aea127146104f857806361ef161f14610500578063668d3d6514610508578063695d4184146105105780636ccd47c414610518578063715c753614610520578063776d16c114610528578063782661bc146105455780637cb2b79c1461066a5780637df73e27146106905780637fbc79c6146106b65780637fece368146107e057806382553aad1461081457806395082d25146108315780639e4de0e314610839578063b0a2566614610856578063b3606b561461085e578063c0e4de8e14610866578063c8390a481461086e578063c84a912414610991578063ce98dfa814610999578063cfad57a2146109b8578063cfed246b146109de578063d6a153f114610a04578063d925351a14610a21578063f67e3bf014610a3e578063f90ce5ba14610a46575b600080fd5b61025b6004803603602081101561024b57600080fd5b50356001600160a01b0316610a4e565b604080519115158252519081900360200190f35b610277610a63565b60408051918252519081900360200190f35b61032c6004803603604081101561029f57600080fd5b810190602081018135600160201b8111156102b957600080fd5b8201836020820111156102cb57600080fd5b803590602001918460208302840111600160201b831117156102ec57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250610a69915050565b005b610336610bf1565b604080516001600160a01b039092168252519081900360200190f35b610277610c00565b610277610c06565b610336610c0c565b61032c6004803603608081101561038057600080fd5b5080359060208101359060408101359060600135610c1b565b61032c600480360360208110156103af57600080fd5b5035610d4f565b61032c600480360360208110156103cc57600080fd5b50356001600160a01b0316610da1565b61032c600480360360408110156103f257600080fd5b5080359060200135610e10565b61032c6004803603604081101561041557600080fd5b506001600160a01b0381351690602001351515610e6c565b610277610ee4565b610336610eea565b61032c6004803603604081101561045357600080fd5b506001600160a01b0381351690602001351515610ef9565b61025b610f71565b610277610f81565b61032c6004803603602081101561049157600080fd5b5035610f87565b610277600480360360208110156104ae57600080fd5b503561101a565b610336600480360360208110156104cb57600080fd5b5035611038565b61025b600480360360208110156104e857600080fd5b50356001600160a01b031661105f565b610277611074565b61033661107a565b610277611089565b61025b61108f565b61032c61109f565b6102776111b2565b61032c6004803603602081101561053e57600080fd5b50356111b8565b61032c6004803603606081101561055b57600080fd5b810190602081018135600160201b81111561057557600080fd5b82018360208201111561058757600080fd5b803590602001918460208302840111600160201b831117156105a857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156105f757600080fd5b82018360208201111561060957600080fd5b803590602001918460208302840111600160201b8311171561062a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061120a915050565b61032c6004803603602081101561068057600080fd5b50356001600160a01b031661130c565b61025b600480360360208110156106a657600080fd5b50356001600160a01b031661137b565b61032c600480360360608110156106cc57600080fd5b81359190810190604081016020820135600160201b8111156106ed57600080fd5b8201836020820111156106ff57600080fd5b803590602001918460208302840111600160201b8311171561072057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561076f57600080fd5b82018360208201111561078157600080fd5b803590602001918460208302840111600160201b831117156107a257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611390945050505050565b610277600480360360608110156107f657600080fd5b506001600160a01b03813516906020810135906040013515156114e9565b61032c6004803603602081101561082a57600080fd5b50356116a7565b6102776116f9565b61032c6004803603602081101561084f57600080fd5b5035611709565b61027761175b565b610277611761565b61025b611767565b61032c6004803603604081101561088457600080fd5b810190602081018135600160201b81111561089e57600080fd5b8201836020820111156108b057600080fd5b803590602001918460208302840111600160201b831117156108d157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561092057600080fd5b82018360208201111561093257600080fd5b803590602001918460208302840111600160201b8311171561095357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061179c945050505050565b61032c611866565b61032c600480360360208110156109af57600080fd5b5035151561197d565b61032c600480360360208110156109ce57600080fd5b50356001600160a01b03166119ed565b610277600480360360208110156109f457600080fd5b50356001600160a01b0316611a5c565b61032c60048036036020811015610a1a57600080fd5b5035611a6e565b61032c60048036036020811015610a3757600080fd5b5035611ac0565b610277611b12565b610277611b1a565b60106020526000908152604090205460ff1681565b60065481565b336000908152600d602052604090205460ff16610abb576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b6000610ac682611b20565b90508015610beb576001546001600160a01b031660005b8451811015610be8576000858281518110610af457fe5b6020026020010151905060005b6008811015610bde57601154600884028201908110610b2557505050505050610bed565b60118054602084029185831c63ffffffff169160009190600889028701908110610b4b57fe5b6000918252602082200154601280546001600160a01b0390921693509060088a028801908110610b7757fe5b60009182526020822001549150610ba482610b9e8668327cb2734119d3b7a9601e1b611c33565b90611c95565b6001600160a01b0384166000908152600e602052604090208190559050610bcc8a8483611cd4565b505060019094019350610b0192505050565b5050600101610add565b50505b505b5050565b6001546001600160a01b031681565b60095481565b61271081565b6000546001600160a01b031681565b336000908152600d602052604090205460ff16610c6d576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b610c778484611d5b565b60035460408051629a208160e81b81526004810185905233602482015290516001600160a01b03909216918291639a20810091604480830192600092919082900301818387803b158015610cca57600080fd5b505af1158015610cde573d6000803e3d6000fd5b50506040805163f3883d8b60e01b81526004810186905233602482015290516001600160a01b038516935063f3883d8b9250604480830192600092919082900301818387803b158015610d3057600080fd5b505af1158015610d44573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b03163314610d9c576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600455565b6000546001600160a01b03163314610dee576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600d602052604090205460ff16610e62576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b610bed8282611d5b565b6000546001600160a01b03163314610eb9576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600b5481565b6002546001600160a01b031681565b6000546001600160a01b03163314610f46576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b600054600160a01b900460ff1681565b60085481565b6000546001600160a01b03163314610fd4576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b6107088111156110155760405162461bcd60e51b81526004018080602001828103825260258152602001806120ba6025913960400191505060405180910390fd5b600655565b6012818154811061102757fe5b600091825260209091200154905081565b6011818154811061104557fe5b6000918252602090912001546001600160a01b0316905081565b600d6020526000908152604090205460ff1681565b60045481565b6003546001600160a01b031681565b61070881565b600054600160a81b900460ff1681565b336000908152600f602052604090205460ff166110f1576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b3360009081526010602052604090205460ff16611155576040805162461bcd60e51b815260206004820152601e60248201527f466173745072696365466565643a20616c726561647920656e61626c65640000604482015290519081900360640190fd5b336000908152601060205260409020805460ff19169055600c5461117a906001611e43565b600c556040805133815290517f9fe0c305c33aa92757a537936872a60be0d91549a4303cc99fd8b7fce8a002759181900360200190a1565b600a5481565b6000546001600160a01b03163314611205576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600855565b336000908152600d602052604090205460ff1661125c576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b600061126782611b20565b90508015611306576001546001600160a01b031660005b855181101561130357600086828151811061129557fe5b602002602001015190508582815181106112ab57fe5b6020026020010151600e6000836001600160a01b03166001600160a01b03168152602001908152602001600020819055506112fa83828885815181106112ed57fe5b6020026020010151611cd4565b5060010161127e565b50505b50505050565b6000546001600160a01b03163314611359576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600f6020526000908152604090205460ff1681565b6000546001600160a01b031633146113dd576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600054600160a01b900460ff16156114265760405162461bcd60e51b81526004018080602001828103825260228152602001806121ca6022913960400191505060405180910390fd5b6000805460ff60a01b1916600160a01b178155600b8490555b825181101561149257600083828151811061145657fe5b6020908102919091018101516001600160a01b03166000908152600f90915260409020805460ff1916600190811790915591909101905061143f565b5060005b81518110156113065760008282815181106114ad57fe5b6020908102919091018101516001600160a01b03166000908152600d90915260409020805460ff19166001908117909155919091019050611496565b6000611502600654600454611e8590919063ffffffff16565b4211156115105750816116a0565b6001600160a01b0384166000908152600e60205260409020548061153757839150506116a0565b6000611560612710610b9e611559600a54612710611e8590919063ffffffff16565b8890611c33565b9050600061158b612710610b9e611584600a54612710611e4390919063ffffffff16565b8990611c33565b9050611595611767565b15611646578083101580156115aa5750818311155b1561164657841561160d57828611156116025760006115e6612710610b9e6115df600954612710611e8590919063ffffffff16565b8790611c33565b90508681116115f557806115f7565b865b9450505050506116a0565b8293505050506116a0565b82861015611602576000611637612710610b9e6115df600954612710611e4390919063ffffffff16565b90508681106115f557806115f7565b8415611678578286111561165f578593505050506116a0565b81831161166c578261166e565b815b93505050506116a0565b8286101561168b578593505050506116a0565b808310611698578261169a565b805b93505050505b9392505050565b6000546001600160a01b031633146116f4576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600a55565b68327cb2734119d3b7a9601e1b81565b6000546001600160a01b03163314611756576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600955565b600c5481565b60075481565b60008054600160a81b900460ff161561178257506000611799565b600b54600c541061179557506000611799565b5060015b90565b6000546001600160a01b031633146117e9576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b805182511461183f576040805162461bcd60e51b815260206004820152601e60248201527f466173745072696365466565643a20696e76616c6964206c656e677468730000604482015290519081900360640190fd5b8151611852906011906020850190611fd9565b508051610beb90601290602084019061203e565b336000908152600f602052604090205460ff166118b8576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b3360009081526010602052604090205460ff161561191c576040805162461bcd60e51b815260206004820152601c60248201527b11985cdd141c9a58d9519959590e88185b1c9958591e481d9bdd195960221b604482015290519081900360640190fd5b336000908152601060205260409020805460ff19166001908117909155600c5461194591611e85565b600c556040805133815290517f4c0c5fabf50e808e3bc8d19577d305e3a7163eea7e8a74a50caa8896694cd44b9181900360200190a1565b336000908152600d602052604090205460ff166119cf576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b60008054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314611a3a576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600e6020526000908152604090205481565b6000546001600160a01b03163314611abb576040805162461bcd60e51b815260206004820152601560248201526000805160206120df833981519152604482015290519081900360640190fd5b600755565b6002546001600160a01b03163314611b0d576040805162461bcd60e51b815260206004820152601860248201526000805160206120ff833981519152604482015290519081900360640190fd5b600b55565b63ffffffff81565b60055481565b60075460009015611b7957600754600554611b3c904390611e43565b1015611b795760405162461bcd60e51b815260040180806020018281038252602e81526020018061219c602e913960400191505060405180910390fd5b600854611b87904290611e43565b8211611bc45760405162461bcd60e51b815260040180806020018281038252602d81526020018061216f602d913960400191505060405180910390fd5b600854611bd2904290611e85565b8210611c0f5760405162461bcd60e51b815260040180806020018281038252602f81526020018061211f602f913960400191505060405180910390fd5b600454821015611c2157506000611c2e565b5060048190554360055560015b919050565b600082611c4257506000611c8f565b82820282848281611c4f57fe5b0414611c8c5760405162461bcd60e51b815260040180806020018281038252602181526020018061214e6021913960400191505060405180910390fd5b90505b92915050565b6000611c8c83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250611edd565b6001600160a01b038316611ce757610beb565b826001600160a01b031663e0409c7183836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d3e57600080fd5b505af1158015611d52573d6000803e3d6000fd5b50505050505050565b6000611d6682611b20565b90508015610beb576001546001600160a01b031660005b6008811015610be85760115481908110611d9a5750505050610bed565b60118054602084029188831c63ffffffff16916000919086908110611dbb57fe5b6000918252602082200154601280546001600160a01b0390921693509087908110611de257fe5b60009182526020822001549150611e0982610b9e8668327cb2734119d3b7a9601e1b611c33565b6001600160a01b0384166000908152600e602052604090208190559050611e31888483611cd4565b505060019094019350611d7d92505050565b6000611c8c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f7f565b600082820183811015611c8c576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b60008183611f695760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f2e578181015183820152602001611f16565b50505050905090810190601f168015611f5b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611f7557fe5b0495945050505050565b60008184841115611fd15760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611f2e578181015183820152602001611f16565b505050900390565b82805482825590600052602060002090810192821561202e579160200282015b8281111561202e57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611ff9565b5061203a929150612085565b5090565b828054828255906000526020600020908101928215612079579160200282015b8281111561207957825182559160200191906001019061205e565b5061203a9291506120a4565b5b8082111561203a5780546001600160a01b0319168155600101612086565b5b8082111561203a57600081556001016120a556fe466173745072696365466565643a20696e76616c6964205f70726963654475726174696f6e476f7665726e61626c653a20666f7262696464656e0000000000000000000000466173745072696365466565643a20666f7262696464656e0000000000000000466173745072696365466565643a205f74696d657374616d70206578636565647320616c6c6f7765642072616e6765536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77466173745072696365466565643a205f74696d657374616d702062656c6f7720616c6c6f7765642072616e6765466173745072696365466565643a206d696e426c6f636b496e74657276616c206e6f742079657420706173736564466173745072696365466565643a20616c726561647920696e697469616c697a6564a26469706673582212208b7367d1d0a6c6122c60ba9e881c570af6c8dfc65c70ca6725ec4aa5929c91ad64736f6c634300060c0033466173745072696365466565643a20696e76616c6964205f70726963654475726174696f6e000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000003934ca8b69d05533769b0d96d1a11c44c1d2fa3b0000000000000000000000008da386b8e9e3c27411ec5972c5d91399ad0b9d02000000000000000000000000e510571cac76279dadf6c4b6eace5370f86e3dc2

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000003934ca8b69d05533769b0d96d1a11c44c1d2fa3b0000000000000000000000008da386b8e9e3c27411ec5972c5d91399ad0b9d02000000000000000000000000e510571cac76279dadf6c4b6eace5370f86e3dc2

-----Decoded View---------------
Arg [0] : _priceDuration (uint256): 300
Arg [1] : _minBlockInterval (uint256): 0
Arg [2] : _maxDeviationBasisPoints (uint256): 250
Arg [3] : _fastPriceEvents (address): 0x3934ca8b69d05533769b0d96d1a11c44c1d2fa3b
Arg [4] : _tokenManager (address): 0x8da386b8e9e3c27411ec5972c5d91399ad0b9d02
Arg [5] : _positionRouter (address): 0xe510571cac76279dadf6c4b6eace5370f86e3dc2

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000fa
Arg [3] : 0000000000000000000000003934ca8b69d05533769b0d96d1a11c44c1d2fa3b
Arg [4] : 0000000000000000000000008da386b8e9e3c27411ec5972c5d91399ad0b9d02
Arg [5] : 000000000000000000000000e510571cac76279dadf6c4b6eace5370f86e3dc2


Deployed ByteCode Sourcemap

7097:12832:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8369:53;;;;;;;;;;;;;;;;-1:-1:-1;8369:53:0;-1:-1:-1;;;;;8369:53:0;;:::i;:::-;;;;;;;;;;;;;;;;;;7861:28;;;:::i;:::-;;;;;;;;;;;;;;;;13047:1125;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13047:1125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13047:1125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13047:1125:0;;-1:-1:-1;;13047:1125:0;;;-1:-1:-1;13047:1125:0;;-1:-1:-1;;13047:1125:0:i;:::-;;7655:30;;;:::i;:::-;;;;-1:-1:-1;;;;;7655:30:0;;;;;;;;;;;;;;8006:29;;;:::i;7456:52::-;;;:::i;6739:18::-;;;:::i;14337:564::-;;;;;;;;;;;;;;;;-1:-1:-1;14337:564:0;;;;;;;;;;;;;;;;;:::i;11639:116::-;;;;;;;;;;;;;;;;-1:-1:-1;11639:116:0;;:::i;10881:124::-;;;;;;;;;;;;;;;;-1:-1:-1;10881:124:0;-1:-1:-1;;;;;10881:124:0;;:::i;14180:149::-;;;;;;;;;;;;;;;;-1:-1:-1;14180:149:0;;;;;;;:::i;10752:121::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10752:121:0;;;;;;;;;;:::i;8130:32::-;;;:::i;7694:27::-;;;:::i;10625:119::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10625:119:0;;;;;;;;;;:::i;7581:25::-;;;:::i;7934:31::-;;;:::i;11013:213::-;;;;;;;;;;;;;;;;-1:-1:-1;11013:213:0;;:::i;8748:32::-;;;;;;;;;;;;;;;;-1:-1:-1;8748:32:0;;:::i;8511:23::-;;;;;;;;;;;;;;;;-1:-1:-1;8511:23:0;;:::i;8222:41::-;;;;;;;;;;;;;;;;-1:-1:-1;8222:41:0;-1:-1:-1;;;;;8222:41:0;;:::i;7768:37::-;;;:::i;7730:29::-;;;:::i;7517:55::-;;;:::i;7613:35::-;;;:::i;15227:310::-;;;:::i;8083:38::-;;;:::i;11503:128::-;;;;;;;;;;;;;;;;-1:-1:-1;11503:128:0;;:::i;12484:555::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12484:555:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12484:555:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12484:555:0;;;;;;;;-1:-1:-1;12484:555:0;;-1:-1:-1;;;;;12484:555:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12484:555:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12484:555:0;;-1:-1:-1;;12484:555:0;;;-1:-1:-1;12484:555:0;;-1:-1:-1;;12484:555:0:i;10505:112::-;;;;;;;;;;;;;;;;-1:-1:-1;10505:112:0;-1:-1:-1;;;;;10505:112:0;;:::i;8322:40::-;;;;;;;;;;;;;;;;-1:-1:-1;8322:40:0;-1:-1:-1;;;;;8322:40:0;;:::i;9876:621::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9876:621:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9876:621:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9876:621:0;;;;;;;;-1:-1:-1;9876:621:0;;-1:-1:-1;;;;;9876:621:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9876:621:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9876:621:0;;-1:-1:-1;9876:621:0;;-1:-1:-1;;;;;9876:621:0:i;15545:2091::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15545:2091:0;;;;;;;;;;;;;;;:::i;11891:156::-;;;;;;;;;;;;;;;;-1:-1:-1;11891:156:0;;:::i;7213:48::-;;;:::i;11763:120::-;;;;;;;;;;;;;;;;-1:-1:-1;11763:120:0;;:::i;8169:44::-;;;:::i;7896:31::-;;;:::i;17644:258::-;;;:::i;12204:272::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12204:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12204:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12204:272:0;;;;;;;;-1:-1:-1;12204:272:0;;-1:-1:-1;;;;;12204:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12204:272:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12204:272:0;;-1:-1:-1;12204:272:0;;-1:-1:-1;;;;;12204:272:0:i;14909:310::-;;;:::i;11370:125::-;;;;;;;;;;;;;;;;-1:-1:-1;11370:125:0;;;;:::i;6939:76::-;;;;;;;;;;;;;;;;-1:-1:-1;6939:76:0;-1:-1:-1;;;;;6939:76:0;;:::i;8272:41::-;;;;;;;;;;;;;;;;-1:-1:-1;8272:41:0;-1:-1:-1;;;;;8272:41:0;;:::i;11234:128::-;;;;;;;;;;;;;;;;-1:-1:-1;11234:128:0;;:::i;12055:141::-;;;;;;;;;;;;;;;;-1:-1:-1;12055:141:0;;:::i;7382:65::-;;;:::i;7812:40::-;;;:::i;8369:53::-;;;;;;;;;;;;;;;:::o;7861:28::-;;;;:::o;13047:1125::-;9050:10;9040:21;;;;:9;:21;;;;;;;;9032:58;;;;;-1:-1:-1;;;9032:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9032:58:0;;;;;;;;;;;;;;;13160:17:::1;13180:33;13202:10;13180:21;:33::i;:::-;13160:53;;13230:12;13226:939;;;13286:15;::::0;-1:-1:-1;;;;;13286:15:0::1;13259:24;13318:836;13342:14;:21;13338:1;:25;13318:836;;;13389:17;13409:14;13424:1;13409:17;;;;;;;;;;;;;;13389:37;;13452:9;13447:692;13471:1;13467;:5;13447:692;;;13563:6;:13:::0;13522:1:::1;13518:5:::0;::::1;:9:::0;::::1;::::0;13554:22;::::1;13550:85;;13605:7;;;;;;;;13550:85;13803:6;:17:::0;;13678:2:::1;:6:::0;::::1;::::0;13724:21;;::::1;7422:25:::0;13723:39:::1;::::0;13659:16:::1;::::0;13803:6;13814:1:::1;13810:5:::0;::::1;:9:::0;::::1;::::0;13803:17;::::1;;;;;;::::0;;;::::1;::::0;;::::1;::::0;13868:15:::1;:26:::0;;-1:-1:-1;;;;;13803:17:0;;::::1;::::0;-1:-1:-1;13868:15:0;13888:1:::1;13884:5:::0;::::1;:9:::0;::::1;::::0;13868:26;::::1;;;;;;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;13941:46:0::1;13868:26:::0;13941::::1;:5:::0;-1:-1:-1;;;13941:9:0::1;:26::i;:::-;:30:::0;::::1;:46::i;:::-;-1:-1:-1::0;;;;;14010:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;:29;;;13917:70;-1:-1:-1;14064:55:0::1;14080:16:::0;14017:5;13917:70;14064:15:::1;:55::i;:::-;-1:-1:-1::0;;13474:3:0::1;::::0;;::::1;::::0;-1:-1:-1;13447:692:0::1;::::0;-1:-1:-1;;;13447:692:0::1;;-1:-1:-1::0;;13365:3:0::1;;13318:836;;;;13226:939;;9101:1;;13047:1125:::0;;:::o;7655:30::-;;;-1:-1:-1;;;;;7655:30:0;;:::o;8006:29::-;;;;:::o;7456:52::-;7503:5;7456:52;:::o;6739:18::-;;;-1:-1:-1;;;;;6739:18:0;;:::o;14337:564::-;9050:10;9040:21;;;;:9;:21;;;;;;;;9032:58;;;;;-1:-1:-1;;;9032:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9032:58:0;;;;;;;;;;;;;;;14567:42:::1;14586:10;14598;14567:18;:42::i;:::-;14672:14;::::0;14698:92:::1;::::0;;-1:-1:-1;;;14698:92:0;;::::1;::::0;::::1;::::0;;;14778:10:::1;14698:92:::0;;;;;;-1:-1:-1;;;;;14672:14:0;;::::1;::::0;;;14698:40:::1;::::0;:92;;;;;14622:31:::1;::::0;14698:92;;;;;;;14622:31;14672:14;14698:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;14801:92:0::1;::::0;;-1:-1:-1;;;14801:92:0;;::::1;::::0;::::1;::::0;;;14881:10:::1;14801:92:::0;;;;;;-1:-1:-1;;;;;14801:40:0;::::1;::::0;-1:-1:-1;14801:40:0::1;::::0;-1:-1:-1;14801:92:0;;;;;-1:-1:-1;;14801:92:0;;;;;;;-1:-1:-1;14801:40:0;:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9101:1;14337:564:::0;;;;:::o;11639:116::-;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;11717:13:::1;:30:::0;11639:116::o;10881:124::-;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;10963:15:::1;:34:::0;;-1:-1:-1;;;;;;10963:34:0::1;-1:-1:-1::0;;;;;10963:34:0;;;::::1;::::0;;;::::1;::::0;;10881:124::o;14180:149::-;9050:10;9040:21;;;;:9;:21;;;;;;;;9032:58;;;;;-1:-1:-1;;;9032:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9032:58:0;;;;;;;;;;;;;;;14279:42:::1;14298:10;14310;14279:18;:42::i;10752:121::-:0;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10834:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:31;;-1:-1:-1;;10834:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10752:121::o;8130:32::-;;;;:::o;7694:27::-;;;-1:-1:-1;;;;;7694:27:0;;:::o;10625:119::-;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10706:18:0;;;::::1;;::::0;;;:8:::1;:18;::::0;;;;:30;;-1:-1:-1;;10706:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10625:119::o;7581:25::-;;;-1:-1:-1;;;7581:25:0;;;;;:::o;7934:31::-;;;;:::o;11013:213::-;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;7562:10:::1;11099:14;:36;;11091:86;;;;-1:-1:-1::0;;;11091:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11188:13;:30:::0;11013:213::o;8748:32::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8748:32:0;:::o;8511:23::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8511:23:0;;-1:-1:-1;8511:23:0;:::o;8222:41::-;;;;;;;;;;;;;;;:::o;7768:37::-;;;;:::o;7730:29::-;;;-1:-1:-1;;;;;7730:29:0;;:::o;7517:55::-;7562:10;7517:55;:::o;7613:35::-;;;-1:-1:-1;;;7613:35:0;;;;;:::o;15227:310::-;8930:10;8921:20;;;;:8;:20;;;;;;;;8913:57;;;;;-1:-1:-1;;;8913:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8913:57:0;;;;;;;;;;;;;;;15315:10:::1;15293:33;::::0;;;:21:::1;:33;::::0;;;;;::::1;;15285:76;;;::::0;;-1:-1:-1;;;15285:76:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15394:10;15408:5;15372:33:::0;;;:21:::1;:33;::::0;;;;:41;;-1:-1:-1;;15372:41:0::1;::::0;;15452:25:::1;::::0;:32:::1;::::0;15372:41;15452:29:::1;:32::i;:::-;15424:25;:60:::0;15502:27:::1;::::0;;15518:10:::1;15502:27:::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;15227:310::o:0;8083:38::-;;;;:::o;11503:128::-;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;11587:16:::1;:36:::0;11503:128::o;12484:555::-;9050:10;9040:21;;;;:9;:21;;;;;;;;9032:58;;;;;-1:-1:-1;;;9032:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9032:58:0;;;;;;;;;;;;;;;12641:17:::1;12661:33;12683:10;12661:21;:33::i;:::-;12641:53;;12711:12;12707:325;;;12767:15;::::0;-1:-1:-1;;;;;12767:15:0::1;12740:24;12799:222;12823:7;:14;12819:1;:18;12799:222;;;12863:13;12879:7;12887:1;12879:10;;;;;;;;;;;;;;12863:26;;12924:7;12932:1;12924:10;;;;;;;;;;;;;;12908:6;:13;12915:5;-1:-1:-1::0;;;;;12908:13:0::1;-1:-1:-1::0;;;;;12908:13:0::1;;;;;;;;;;;;:26;;;;12953:52;12969:16;12987:5;12994:7;13002:1;12994:10;;;;;;;;;;;;;;12953:15;:52::i;:::-;-1:-1:-1::0;12839:3:0::1;;12799:222;;;;12707:325;;9101:1;12484:555:::0;;;:::o;10505:112::-;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;10581:12:::1;:28:::0;;-1:-1:-1;;;;;;10581:28:0::1;-1:-1:-1::0;;;;;10581:28:0;;;::::1;::::0;;;::::1;::::0;;10505:112::o;8322:40::-;;;;;;;;;;;;;;;:::o;9876:621::-;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;10048:13:::1;::::0;-1:-1:-1;;;10048:13:0;::::1;;;10047:14;10039:61;;;;-1:-1:-1::0;;;10039:61:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10111:13;:20:::0;;-1:-1:-1;;;;10111:20:0::1;-1:-1:-1::0;;;10111:20:0::1;::::0;;10144:17:::1;:38:::0;;;10195:139:::1;10219:8;:15;10215:1;:19;10195:139;;;10256:14;10273:8;10282:1;10273:11;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;10299:16:0::1;;::::0;;;:8:::1;:16:::0;;;;;;:23;;-1:-1:-1;;10299:23:0::1;10318:4;10299:23:::0;;::::1;::::0;;;10236:3;;;::::1;::::0;-1:-1:-1;10195:139:0::1;;;;10351:9;10346:144;10370:9;:16;10366:1;:20;10346:144;;;10408:15;10426:9;10436:1;10426:12;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;10453:18:0::1;;::::0;;;:9:::1;:18:::0;;;;;;:25;;-1:-1:-1;;10453:25:0::1;10474:4;10453:25:::0;;::::1;::::0;;;10388:3;;;::::1;::::0;-1:-1:-1;10346:144:0::1;;15545:2091:::0;15680:7;15804:32;15822:13;;15804;;:17;;:32;;;;:::i;:::-;15786:15;:50;15782:99;;;-1:-1:-1;15860:9:0;15853:16;;15782:99;-1:-1:-1;;;;;15913:14:0;;15893:17;15913:14;;;:6;:14;;;;;;15942;15938:63;;15980:9;15973:16;;;;;15938:63;16013:16;16032:90;7503:5;16032:64;16046:49;16071:23;;7503:5;16046:24;;:49;;;;:::i;:::-;16032:9;;:13;:64::i;:90::-;16013:109;;16133:16;16152:90;7503:5;16152:64;16166:49;16191:23;;7503:5;16166:24;;:49;;;;:::i;:::-;16152:9;;:13;:64::i;:90::-;16133:109;;16259:16;:14;:16::i;:::-;16255:1035;;;16309:8;16296:9;:21;;:46;;;;;16334:8;16321:9;:21;;16296:46;16292:987;;;16367:9;16363:482;;;16417:9;16405;:21;16401:386;;;16455:16;16474:137;7503:5;16474:55;16488:40;16513:14;;7503:5;16488:24;;:40;;;;:::i;:::-;16474:9;;:13;:55::i;:137::-;16455:156;;16731:9;16720:8;:20;:43;;16755:8;16720:43;;;16743:9;16720:43;16713:50;;;;;;;;16401:386;16816:9;16809:16;;;;;;;16363:482;16881:9;16869;:21;16865:362;;;16915:16;16934:129;7503:5;16934:55;16948:40;16973:14;;7503:5;16948:24;;:40;;;;:::i;16934:129::-;16915:148;;17175:9;17164:8;:20;:43;;17199:8;17164:43;;16292:987;17306:9;17302:184;;;17348:9;17336;:21;17332:78;;;17385:9;17378:16;;;;;;;17332:78;17443:8;17431:9;:20;:43;;17465:9;17431:43;;;17454:8;17431:43;17424:50;;;;;;;17302:184;17514:9;17502;:21;17498:70;;;17547:9;17540:16;;;;;;;17498:70;17597:8;17585:9;:20;:43;;17619:9;17585:43;;;17608:8;17585:43;17578:50;;;;;15545:2091;;;;;;:::o;11891:156::-;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;11989:23:::1;:50:::0;11891:156::o;7213:48::-;-1:-1:-1;;;7213:48:0;:::o;11763:120::-;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;11843:14:::1;:32:::0;11763:120::o;8169:44::-;;;;:::o;7896:31::-;;;;:::o;17644:258::-;17691:4;17712:15;;-1:-1:-1;;;17712:15:0;;;;17708:60;;;-1:-1:-1;17751:5:0;17744:12;;17708:60;17813:17;;17784:25;;:46;17780:91;;-1:-1:-1;17854:5:0;17847:12;;17780:91;-1:-1:-1;17890:4:0;17644:258;;:::o;12204:272::-;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;12338:16:::1;:23;12320:7;:14;:41;12312:84;;;::::0;;-1:-1:-1;;;12312:84:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12407:16:::0;;::::1;::::0;:6:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12434:34:0;;::::1;::::0;:15:::1;::::0;:34:::1;::::0;::::1;::::0;::::1;:::i;14909:310::-:0;8930:10;8921:20;;;;:8;:20;;;;;;;;8913:57;;;;;-1:-1:-1;;;8913:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8913:57:0;;;;;;;;;;;;;;;14999:10:::1;14977:33;::::0;;;:21:::1;:33;::::0;;;;;::::1;;14976:34;14968:75;;;::::0;;-1:-1:-1;;;14968:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;14968:75:0;;;;;;;;;;;;;::::1;;15076:10;15054:33;::::0;;;:21:::1;:33;::::0;;;;:40;;-1:-1:-1;;15054:40:0::1;15090:4;15054:40:::0;;::::1;::::0;;;15133:25:::1;::::0;:32:::1;::::0;:29:::1;:32::i;:::-;15105:25;:60:::0;15183:28:::1;::::0;;15200:10:::1;15183:28:::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;14909:310::o:0;11370:125::-;9050:10;9040:21;;;;:9;:21;;;;;;;;9032:58;;;;;-1:-1:-1;;;9032:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9032:58:0;;;;;;;;;;;;;;;11453:15:::1;:34:::0;;;::::1;;-1:-1:-1::0;;;11453:34:0::1;-1:-1:-1::0;;;;11453:34:0;;::::1;::::0;;;::::1;::::0;;11370:125::o;6939:76::-;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;6997:3:::1;:10:::0;;-1:-1:-1;;;;;;6997:10:0::1;-1:-1:-1::0;;;;;6997:10:0;;;::::1;::::0;;;::::1;::::0;;6939:76::o;8272:41::-;;;;;;;;;;;;;:::o;11234:128::-;6882:3;;-1:-1:-1;;;;;6882:3:0;6868:10;:17;6860:51;;;;;-1:-1:-1;;;6860:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6860:51:0;;;;;;;;;;;;;;;11318:16:::1;:36:::0;11234:128::o;12055:141::-;9179:12;;-1:-1:-1;;;;;9179:12:0;9165:10;:26;9157:63;;;;;-1:-1:-1;;;9157:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9157:63:0;;;;;;;;;;;;;;;12150:17:::1;:38:::0;12055:141::o;7382:65::-;7422:25;7382:65;:::o;7812:40::-;;;;:::o;19100:826::-;19189:16;;19168:4;;19189:20;19185:215;;19290:16;;19269;;19252:34;;:12;;:16;:34::i;:::-;:54;;19226:162;;;;-1:-1:-1;;;19226:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19453:16;;19433:37;;:15;;:19;:37::i;:::-;19420:10;:50;19412:108;;;;-1:-1:-1;;;19412:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19572:16;;19552:37;;:15;;:19;:37::i;:::-;19539:10;:50;19531:110;;;;-1:-1:-1;;;19531:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19760:13;;19747:10;:26;19743:71;;;-1:-1:-1;19797:5:0;19790:12;;19743:71;-1:-1:-1;19826:13:0;:26;;;19882:12;19863:16;:31;19914:4;19100:826;;;;:::o;2403:471::-;2461:7;2706:6;2702:47;;-1:-1:-1;2736:1:0;2729:8;;2702:47;2773:5;;;2777:1;2773;:5;:1;2797:5;;;;;:10;2789:56;;;;-1:-1:-1;;;2789:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2865:1;-1:-1:-1;2403:471:0;;;;;:::o;3350:132::-;3408:7;3435:39;3439:1;3442;3435:39;;;;;;;;;;;;;-1:-1:-1;;;3435:39:0;;;:3;:39::i;18802:290::-;-1:-1:-1;;;;;18942:30:0;;18938:69;;18989:7;;18938:69;19036:16;-1:-1:-1;;;;;19019:49:0;;19069:6;19077;19019:65;;;;;;;;;;;;;-1:-1:-1;;;;;19019:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18802:290;;;:::o;17910:884::-;17997:17;18017:33;18039:10;18017:21;:33::i;:::-;17997:53;;18067:12;18063:724;;;18123:15;;-1:-1:-1;;;;;18123:15:0;18096:24;18155:621;18179:1;18175;:5;18155:621;;;18255:6;:13;18222:1;;18246:22;;18242:77;;18293:7;;;;;;18242:77;18476:6;:9;;18358:2;:6;;;18400:22;;;7422:25;18399:40;;18339:16;;18476:6;18363:1;;18476:9;;;;;;;;;;;;;;;18529:15;:18;;-1:-1:-1;;;;;18476:9:0;;;;-1:-1:-1;18529:15:0;18545:1;;18529:18;;;;;;;;;;;;;;;;-1:-1:-1;18590:46:0;18529:18;18590:26;:5;-1:-1:-1;;;18590:9:0;:26::i;:46::-;-1:-1:-1;;;;;18655:13:0;;;;;;:6;:13;;;;;:29;;;18566:70;-1:-1:-1;18705:55:0;18721:16;18662:5;18566:70;18705:15;:55::i;:::-;-1:-1:-1;;18182:3:0;;;;;-1:-1:-1;18155:621:0;;-1:-1:-1;;;18155:621:0;1479:136;1537:7;1564:43;1568:1;1571;1564:43;;;;;;;;;;;;;;;;;:3;:43::i;1015:181::-;1073:7;1105:5;;;1129:6;;;;1121:46;;;;;-1:-1:-1;;;1121:46:0;;;;;;;;;;;;-1:-1:-1;;;1121:46:0;;;;;;;;;;;;;;3978:312;4098:7;4133:12;4126:5;4118:28;;;;-1:-1:-1;;;4118:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4157:9;4173:1;4169;:5;;;;;;;3978:312;-1:-1:-1;;;;;3978:312:0:o;1918:226::-;2038:7;2074:12;2066:6;;;;2058:29;;;;-1:-1:-1;;;2058:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2110:5:0;;;1918:226::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Metadata Hash

8b7367d1d0a6c6122c60ba9e881c570af6c8dfc65c70ca6725ec4aa5929c91ad
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.