Contract 0xddc4ea147769a1bb83f923789723438c748bb26c 1

 

Contract Overview

Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb24f77387e824658eb5059c3f4914b83e8b8357049540c2a9a0d07de736b3a4cWithdraw506102032023-01-03 18:44:1824 days 9 hrs ago0xa8e3a303fcf17bea14f7d50a1132d5febbc7fce7 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.0000465
0xafcb818de6c13112e49ae0659ea649d866adf99920d52fde13cb07203440dca1Stake443991922022-12-07 17:04:0151 days 11 hrs ago0x79ae5adf2f62b9bd3d2455096c75a7af99727231 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.00002901
0x896e36cc23309ff7b87471a191cf550d0cf62382ab067f91ab0f2053767eea20Stake419758372022-11-28 20:39:1660 days 7 hrs ago0xa8e3a303fcf17bea14f7d50a1132d5febbc7fce7 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.00003118
0x250f86d50ae433a8596f54cad382077868119441980e30122d7d246fb23d1c1cExit272162012022-09-28 13:02:26121 days 15 hrs ago0xcdec018cb8676123cfda6174729ec09e86aa831c IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.00002042
0x0f88aeb2daf537ca7a704eca0c2a809ce6f7f77e63a11bdfe226e6529622fe21Exit264096552022-09-24 14:50:10125 days 13 hrs ago0x562fd7a8f8fb49eac830999a1bde4ddff81cd989 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.00001903
0xb88f2eaf81d33a24f06fd16bf8eb9f07717bb985849ff4b92cbcd7c7907d2f74Withdraw239603362022-09-10 15:12:11139 days 13 hrs ago0x1f1ce512b0d85d888e070985455eb973abbc3490 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.00002891
0xdd4e9f01a422f3119206858d766d06caf8dc90bfc871b99e0d1326a5e6e5392bWithdraw233873872022-09-07 14:10:09142 days 14 hrs ago0x5ec6e2ebe860203f5f0329c822e1ed6fafa00743 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.00003515
0xa9913ceaa285a87654581e2c061616f24b2e48ca812114f684448d4bdcff27e8Exit231963892022-09-06 16:14:56143 days 11 hrs ago0xf1b6f24e7143f2da391209e0253a1950826b2f87 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.00004378
0xe2ef541dd05bf9a390fd59621b09d4a7ff70e5d0e9908415f5f419605c88fd87Withdraw231032802022-09-06 7:11:50143 days 21 hrs ago0xfb64bc39a643a0f26d0a2f38b025541e00681ef5 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.00037275
0x9bf6d6ab297ba91fec18b8c2cfdefbcffa5926c0a4a9f275612785cabd0e7bbcWithdraw224688872022-09-02 10:41:18147 days 17 hrs ago0xbe0d68729e0802a4cdab88e0eb2ad80dce107571 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.0000243
0x9448bc47ae36b90f5c6c6e404a5b48bac7581a13e7ba13f5162097724dffc046Stake222650672022-09-01 1:59:43149 days 2 hrs ago0xcdec018cb8676123cfda6174729ec09e86aa831c IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.00003266
0xf9a1be3ac42541881ac3f483de6524797b2d353b66823a76b99beefed7d03061Withdraw222142222022-08-31 18:09:40149 days 10 hrs ago0x79ae5adf2f62b9bd3d2455096c75a7af99727231 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.00004163
0x98dce632393fce4b3361f386cc136f9d06e2ba66479fd0e33d86821f11548e00Exit214817812022-08-27 2:46:27154 days 1 hr ago0x4232f847988548e78f94175f5201e76f6fa373e7 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.000096534311 ETH
0x19845915868404da0dd80cbe5637d61adc670d053e412250fef0635da2c4d848Withdraw214081692022-08-26 13:13:36154 days 15 hrs ago0x79ae5adf2f62b9bd3d2455096c75a7af99727231 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.000055298285 ETH
0x8a8179de0869d0fe3fab4b216d07eed8fd9efe1da059a2fcdd91be2252e10e31Exit211951662022-08-24 23:49:18156 days 4 hrs ago0x0dd01f57994c11e3f9ffc16e555f95e9a7d62046 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.000079629143 ETH
0xdc1835171e94085981cf4cac4c5ea1a0d46c04221ff0989fe1e8b2a90f32f379Exit208380492022-08-21 4:49:00159 days 23 hrs ago0x2735cc95a133f36aec4f6cf48d20e908a9a1d6ec IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.000044424074 ETH
0x095b110172531da8005a66a8d9bc69a339cf6ec3e9d111b89864f1c752b55199Withdraw206213832022-08-18 19:33:23162 days 8 hrs ago0x5d125481f1f346b86f6a59429422713fa48bf502 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.000093585476 ETH
0x3ca8ff93ab9789a3f3526e595a47301d7d04e3812746446b72b459f6c7058c89Exit205335622022-08-17 19:09:52163 days 9 hrs ago0x37ab14410183de0e568051e1f4f82f2d47f8c9f8 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.000092933604 ETH
0x037b3096fc0831a048a236b6a5eb086f27414f5de99c215e1643a79166b99fe9Exit204118952022-08-16 13:59:03164 days 14 hrs ago0x1c05b2cb0886fc3265ccafc625deef4084dc4e16 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.00008365126 ETH
0xb89def9e053a07450d69f95c409164cbb23bda248043663c4051faa20cc08f57Stake204082242022-08-16 13:11:35164 days 15 hrs ago0x79ae5adf2f62b9bd3d2455096c75a7af99727231 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.000108717137 ETH
0xf88a3bb0884d015d50ccb91c9027b706053b839a2b8928e13707cc0210dbd263Exit203962252022-08-16 10:19:55164 days 17 hrs ago0x33e280244a296f6d595989fda8d1429e80b2a6fd IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.000084396872 ETH
0x764f8e3566b2ab327cc7548e17809d8e313b814e0576fd7233487cfc71bd51e2Exit203462652022-08-15 21:11:40165 days 7 hrs ago0xe3c62d080c3ecd7243a66ab5c28d8b695e85ff6f IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.00011023956 ETH
0x936ea2afddf7b736214ee6e7f86a561253552a89950ff4c903885fd3fc1205f2Stake202797792022-08-15 3:20:13166 days 54 mins ago0x4232f847988548e78f94175f5201e76f6fa373e7 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.000092745252 ETH
0x1b24dac07d365607a66024691a4cf55db7df85586e1377b1a472fa728fb36581Stake202013602022-08-14 4:45:35166 days 23 hrs ago0x2735cc95a133f36aec4f6cf48d20e908a9a1d6ec IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.000068346744 ETH
0xf4d2c007c2b2f7878366b9c3715eed3f91a534e9dfa93d99c52cca40b5ba4982Withdraw201600982022-08-13 13:40:59167 days 14 hrs ago0xb949d9ac8aa5dbdffa7e761950d82bf5650a3df4 IN  0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH0.000066032208 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd03c0ff41d8bc65a76454ba030af7dbe1cd560e5ef76542402104a293e931041559910982023-01-28 0:00:094 hrs 14 mins ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0xf20d8f12756dd14d6ef9307d96cff91aa48f120f746520233a447ad786cc2a48559266632023-01-27 18:00:0910 hrs 14 mins ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x2d39fc69bc9989e219d5a1f482f5eb0c06fb0ec2f65720332e5f245962991b70558521882023-01-27 12:00:0416 hrs 14 mins ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x43888ad51a26b13d4dfee15653bf96a32ec344a4bf7eff0a44e834096a9f6fed557838432023-01-27 6:00:0922 hrs 14 mins ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x67db185d03a15b0872abe920488ce12ee782e93f3aff84ef033afd2bc498c543557251372023-01-27 0:00:061 day 4 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x76800761d1c06a67b2df645d3d3ff1d136073454c37ebae425c7a87ac75109e4556612112023-01-26 18:00:061 day 10 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x2cde318cce814a8d5eb5ee6709496e444fe152990f4a3f4902458b3993616daf555955992023-01-26 12:00:081 day 16 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x59459f7c59b077cc700a5d29fac3f5ceb93645402e84ab4a76c7f6ff536ff4ff555355262023-01-26 6:00:071 day 22 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x9a77115642a1981d2f50455b2657354dcfe5797bf755191d1619b67e39bf3c6d554783102023-01-26 0:00:132 days 4 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x089ea636931cb78bb9f1657bf7e598e25546869d34ea9ba8d7b30adb5ce23850554156762023-01-25 18:00:072 days 10 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x0880058f30f9d4f90617f33aba908d8d928296bafb4ea52864703c23d2a9ca6f553519232023-01-25 12:00:052 days 16 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x969178d9434dbb701ff1f7fe409bf588143666b9d163142a55c01742a659f319552973072023-01-25 6:00:112 days 22 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0xc77fbe4a67667e4cb27ffd859366a71adf5a5c4762d7af99c6759cb9b8464196552486772023-01-25 0:00:073 days 4 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0xc0db5257079b8f12b2cc8040b5823243dcf060679c82f674462489bf1571bd20551874042023-01-24 18:00:103 days 10 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0xc28aa93ca6e63814741d9209cdd42e1a3d50cd6895bf3fffb5115f47ed5036d6551258122023-01-24 12:00:023 days 16 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x54e00851d917f8bebfd9c48dd0f872b0c0d48b9f91b8e1ae36bec73923f00cc7550732982023-01-24 6:00:023 days 22 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x49505d30bf3b42898e0373353b04a31bfb507ea05f3563f52ef9c1ad78b87398550280932023-01-24 0:00:034 days 4 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0xbb27b5a6fe6f5384b698df204b3c696d38956fd3361d0bcead3f08055b606f50549712412023-01-23 18:00:034 days 10 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x6d068b6f9ab4e0a659589e856794ba289d1b1da659ba9585f9e391a14e32a7fe549072412023-01-23 12:00:044 days 16 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0xd00add89fd8428f4b50becd7808620f3dd1613eec5d86d57ad7498bf49af9087548555272023-01-23 6:00:074 days 22 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x3f9c8f1c556d6e4862dfa6d955d6892c4da4f1ff9177a8fc5fc8236d5047d2e4548162762023-01-23 0:00:115 days 4 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x1034f82662f8d2babfb7bb9a8c87743bae86cce10ef76035b90e8152fb675409547651722023-01-22 18:00:055 days 10 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x0139bc0207b2fb9209e927af359c04191d5870a96a1cfa592c332fd263d36cf6547036812023-01-22 12:00:105 days 16 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0x57637a93c9b485f1796cb88b9350130f74babc14744f9df16e9b32a433ac2883546526142023-01-22 6:00:085 days 22 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
0xced732455b411421526754df41e62be746b5affcd573bc716722aae82cda44ec546085342023-01-22 0:00:026 days 4 hrs ago 0xcfc40e6fb7c4dfde31433911da0bc70586880190 0xddc4ea147769a1bb83f923789723438c748bb26c0 ETH
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x74c76108ce9555475a504a2a4a28d3ba3354e89a

Contract Name:
Masonry

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan on 2022-07-21
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/math/SafeMath.sol


pragma solidity >=0.6.0 <0.8.0;

/**
 * @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, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @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) {
        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, reverting 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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * 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);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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: @openzeppelin/contracts/utils/Address.sol


pragma solidity >=0.6.2 <0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol


pragma solidity >=0.6.0 <0.8.0;




/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: contracts/utils/ContractGuard.sol


pragma solidity 0.6.12;

contract ContractGuard {
    mapping(uint256 => mapping(address => bool)) private _status;

    function checkSameOriginReentranted() internal view returns (bool) {
        return _status[block.number][tx.origin];
    }

    function checkSameSenderReentranted() internal view returns (bool) {
        return _status[block.number][msg.sender];
    }

    modifier onlyOneBlock() {
        require(!checkSameOriginReentranted(), "ContractGuard: one block, one function");
        require(!checkSameSenderReentranted(), "ContractGuard: one block, one function");

        _;

        _status[block.number][tx.origin] = true;
        _status[block.number][msg.sender] = true;
    }
}

// File: contracts/interfaces/IBasisAsset.sol


pragma solidity ^0.6.0;

interface IBasisAsset {
    function mint(address recipient, uint256 amount) external returns (bool);

    function burn(uint256 amount) external;

    function burnFrom(address from, uint256 amount) external;

    function isOperator() external returns (bool);

    function operator() external view returns (address);

    function transferOperator(address newOperator_) external;
}

// File: contracts/interfaces/ITreasury.sol


pragma solidity 0.6.12;

interface ITreasury {
    function epoch() external view returns (uint256);

    function nextEpochPoint() external view returns (uint256);

    function getPegPrice() external view returns (uint256);

    function buyBonds(uint256 amount, uint256 targetPrice) external;

    function redeemBonds(uint256 amount, uint256 targetPrice) external;
}

// File: contracts/Masonry.sol


pragma solidity 0.6.12;





contract ShareWrapper {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    IERC20 public pae;

    uint256 private _totalSupply;
    mapping(address => uint256) private _balances;

    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    function stake(uint256 amount) public virtual {
        _totalSupply = _totalSupply.add(amount);
        _balances[msg.sender] = _balances[msg.sender].add(amount);
        pae.safeTransferFrom(msg.sender, address(this), amount);
    }

    function withdraw(uint256 amount) public virtual {
        uint256 masonShare = _balances[msg.sender];
        require(masonShare >= amount, "Masonry: withdraw request greater than staked amount");
        _totalSupply = _totalSupply.sub(amount);
        _balances[msg.sender] = masonShare.sub(amount);
        pae.safeTransfer(msg.sender, amount);
    }
}

contract Masonry is ShareWrapper, ContractGuard {
    using SafeERC20 for IERC20;
    using Address for address;
    using SafeMath for uint256;

    /* ========== DATA STRUCTURES ========== */

    struct Masonseat {
        uint256 lastSnapshotIndex;
        uint256 rewardEarned;
        uint256 epochTimerStart;
    }

    struct MasonrySnapshot {
        uint256 time;
        uint256 rewardReceived;
        uint256 rewardPerShare;
    }

    /* ========== STATE VARIABLES ========== */

    // governance
    address public operator;

    // flags
    bool public initialized = false;

    IERC20 public pToken;
    ITreasury public treasury;

    mapping(address => Masonseat) public masons;
    MasonrySnapshot[] public masonryHistory;

    uint256 public withdrawLockupEpochs;
    uint256 public rewardLockupEpochs;

    /* ========== EVENTS ========== */

    event Initialized(address indexed executor, uint256 at);
    event Staked(address indexed user, uint256 amount);
    event Withdrawn(address indexed user, uint256 amount);
    event RewardPaid(address indexed user, uint256 reward);
    event RewardAdded(address indexed user, uint256 reward);

    /* ========== Modifiers =============== */

    modifier onlyOperator() {
        require(operator == msg.sender, "Masonry: caller is not the operator");
        _;
    }

    modifier masonExists {
        require(balanceOf(msg.sender) > 0, "Masonry: The mason does not exist");
        _;
    }

    modifier updateReward(address mason) {
        if (mason != address(0)) {
            Masonseat memory seat = masons[mason];
            seat.rewardEarned = earned(mason);
            seat.lastSnapshotIndex = latestSnapshotIndex();
            masons[mason] = seat;
        }
        _;
    }

    modifier notInitialized {
        require(!initialized, "Masonry: already initialized");
        _;
    }

    /* ========== GOVERNANCE ========== */

    function initialize(
        IERC20 _pToken,
        IERC20 _pae,
        ITreasury _treasury
    ) public notInitialized {
        pToken = _pToken;
        pae = _pae;
        treasury = _treasury;

        MasonrySnapshot memory genesisSnapshot = MasonrySnapshot({time : block.number, rewardReceived : 0, rewardPerShare : 0});
        masonryHistory.push(genesisSnapshot);

        withdrawLockupEpochs = 6; // Lock for 6 epochs (36h) before release withdraw
        rewardLockupEpochs = 3; // Lock for 3 epochs (18h) before release claimReward

        initialized = true;
        operator = msg.sender;
        emit Initialized(msg.sender, block.number);
    }

    function setOperator(address _operator) external onlyOperator {
        operator = _operator;
    }

    function setLockUp(uint256 _withdrawLockupEpochs, uint256 _rewardLockupEpochs) external onlyOperator {
        require(_withdrawLockupEpochs >= _rewardLockupEpochs && _withdrawLockupEpochs <= 56, "_withdrawLockupEpochs: out of range"); // <= 2 week
        withdrawLockupEpochs = _withdrawLockupEpochs;
        rewardLockupEpochs = _rewardLockupEpochs;
    }

    /* ========== VIEW FUNCTIONS ========== */

    // =========== Snapshot getters

    function latestSnapshotIndex() public view returns (uint256) {
        return masonryHistory.length.sub(1);
    }

    function getLatestSnapshot() internal view returns (MasonrySnapshot memory) {
        return masonryHistory[latestSnapshotIndex()];
    }

    function getLastSnapshotIndexOf(address mason) public view returns (uint256) {
        return masons[mason].lastSnapshotIndex;
    }

    function getLastSnapshotOf(address mason) internal view returns (MasonrySnapshot memory) {
        return masonryHistory[getLastSnapshotIndexOf(mason)];
    }

    function canWithdraw(address mason) external view returns (bool) {
        return masons[mason].epochTimerStart.add(withdrawLockupEpochs) <= treasury.epoch();
    }

    function canClaimReward(address mason) external view returns (bool) {
        return masons[mason].epochTimerStart.add(rewardLockupEpochs) <= treasury.epoch();
    }

    function epoch() external view returns (uint256) {
        return treasury.epoch();
    }

    function nextEpochPoint() external view returns (uint256) {
        return treasury.nextEpochPoint();
    }

    function getPegPrice() external view returns (uint256) {
        return treasury.getPegPrice();
    }

    // =========== Mason getters

    function rewardPerShare() public view returns (uint256) {
        return getLatestSnapshot().rewardPerShare;
    }

    function earned(address mason) public view returns (uint256) {
        uint256 latestRPS = getLatestSnapshot().rewardPerShare;
        uint256 storedRPS = getLastSnapshotOf(mason).rewardPerShare;

        return balanceOf(mason).mul(latestRPS.sub(storedRPS)).div(1e18).add(masons[mason].rewardEarned);
    }

    /* ========== MUTATIVE FUNCTIONS ========== */

    function stake(uint256 amount) public override onlyOneBlock updateReward(msg.sender) {
        require(amount > 0, "Masonry: Cannot stake 0");
        super.stake(amount);
        masons[msg.sender].epochTimerStart = treasury.epoch(); // reset timer
        emit Staked(msg.sender, amount);
    }

    function withdraw(uint256 amount) public override onlyOneBlock masonExists updateReward(msg.sender) {
        require(amount > 0, "Masonry: Cannot withdraw 0");
        require(masons[msg.sender].epochTimerStart.add(withdrawLockupEpochs) <= treasury.epoch(), "Masonry: still in withdraw lockup");
        claimReward();
        super.withdraw(amount);
        emit Withdrawn(msg.sender, amount);
    }

    function emergencyWithdraw() external onlyOneBlock masonExists updateReward(msg.sender) {
        uint256 amount = balanceOf(msg.sender);
        require(amount > 0, "Masonry: Cannot withdraw 0");
        require(masons[msg.sender].epochTimerStart.add(withdrawLockupEpochs) <= treasury.epoch(), "Masonry: still in withdraw lockup");
        super.withdraw(amount);
        masons[msg.sender].epochTimerStart = treasury.epoch(); // reset timer
        masons[msg.sender].rewardEarned = 0; // reset rewards
        emit Withdrawn(msg.sender, amount);
    }

    function exit() external {
        withdraw(balanceOf(msg.sender));
    }

    function claimReward() public updateReward(msg.sender) {
        uint256 reward = masons[msg.sender].rewardEarned;
        if (reward > 0) {
            require(masons[msg.sender].epochTimerStart.add(rewardLockupEpochs) <= treasury.epoch(), "Masonry: still in reward lockup");
            masons[msg.sender].epochTimerStart = treasury.epoch(); // reset timer
            masons[msg.sender].rewardEarned = 0;
            pToken.safeTransfer(msg.sender, reward);
            emit RewardPaid(msg.sender, reward);
        }
    }

    function allocateSeigniorage(uint256 amount) external onlyOneBlock onlyOperator {
        require(amount > 0, "Masonry: Cannot allocate 0");
        require(totalSupply() > 0, "Masonry: Cannot allocate when totalSupply is 0");

        // Create & add new snapshot
        uint256 prevRPS = getLatestSnapshot().rewardPerShare;
        uint256 nextRPS = prevRPS.add(amount.mul(1e18).div(totalSupply()));

        MasonrySnapshot memory newSnapshot = MasonrySnapshot({
            time: block.number,
            rewardReceived: amount,
            rewardPerShare: nextRPS
        });
        masonryHistory.push(newSnapshot);

        pToken.safeTransferFrom(msg.sender, address(this), amount);
        emit RewardAdded(msg.sender, amount);
    }

    function governanceRecoverUnsupported(IERC20 _token, uint256 _amount, address _to) external onlyOperator {
        // do not allow to drain core tokens
        require(address(_token) != address(pToken), "pToken");
        require(address(_token) != address(pae), "pae");
        _token.safeTransfer(_to, _amount);
    }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":false,"internalType":"uint256","name":"at","type":"uint256"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"allocateSeigniorage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mason","type":"address"}],"name":"canClaimReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mason","type":"address"}],"name":"canWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mason","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mason","type":"address"}],"name":"getLastSnapshotIndexOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPegPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"governanceRecoverUnsupported","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_pToken","type":"address"},{"internalType":"contract IERC20","name":"_pae","type":"address"},{"internalType":"contract ITreasury","name":"_treasury","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestSnapshotIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"masonryHistory","outputs":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"rewardReceived","type":"uint256"},{"internalType":"uint256","name":"rewardPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"masons","outputs":[{"internalType":"uint256","name":"lastSnapshotIndex","type":"uint256"},{"internalType":"uint256","name":"rewardEarned","type":"uint256"},{"internalType":"uint256","name":"epochTimerStart","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextEpochPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pae","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardLockupEpochs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawLockupEpochs","type":"uint256"},{"internalType":"uint256","name":"_rewardLockupEpochs","type":"uint256"}],"name":"setLockUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"contract ITreasury","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawLockupEpochs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526004805460ff60a01b1916905534801561001d57600080fd5b5061236f8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c806361d027b311610104578063b3ab15fb116100a2578063cfa37c3611610071578063cfa37c3614610491578063db2e21bc14610499578063e0f6dc9e146104a1578063e9fad8ee146104c7576101d9565b8063b3ab15fb14610423578063b88a802f14610449578063c0c53b8b14610451578063c5967c2614610489576101d9565b80638cd9a27f116100de5780638cd9a27f146103a6578063900cf0cf146103e157806397ffe1d7146103e9578063a694fc3a14610406576101d9565b806361d027b31461035257806370a082311461035a578063714b465814610380576101d9565b8063270ec0cc1161017c578063446a2ec81161014b578063446a2ec8146102e857806354575af4146102f0578063570ca7351461032657806358a06f071461034a576101d9565b8063270ec0cc146102965780632e1a7d4d1461029e5780632ffaaa09146102bd5780633f9e3f04146102e0576101d9565b8063158ef93e116101b8578063158ef93e1461025857806318160ddd1461026057806319262d30146102685780631e85cd651461028e576101d9565b80628cc262146101de578063022ba18d14610216578063046335d01461021e575b600080fd5b610204600480360360208110156101f457600080fd5b50356001600160a01b03166104cf565b60408051918252519081900360200190f35b610204610550565b6102446004803603602081101561023457600080fd5b50356001600160a01b0316610556565b604080519115158252519081900360200190f35b6102446105f7565b610204610607565b6102446004803603602081101561027e57600080fd5b50356001600160a01b031661060d565b6102046106a6565b6102046106ac565b6102bb600480360360208110156102b457600080fd5b5035610722565b005b6102bb600480360360408110156102d357600080fd5b5080359060200135610a3c565b610204610adc565b610204610af2565b6102bb6004803603606081101561030657600080fd5b506001600160a01b03813581169160208101359160409091013516610b05565b61032e610bfc565b604080516001600160a01b039092168252519081900360200190f35b61032e610c0b565b61032e610c1a565b6102046004803603602081101561037057600080fd5b50356001600160a01b0316610c29565b6102046004803603602081101561039657600080fd5b50356001600160a01b0316610c44565b6103c3600480360360208110156103bc57600080fd5b5035610c5f565b60408051938452602084019290925282820152519081900360600190f35b610204610c8f565b6102bb600480360360208110156103ff57600080fd5b5035610cd4565b6102bb6004803603602081101561041c57600080fd5b5035610fb8565b6102bb6004803603602081101561043957600080fd5b50356001600160a01b031661123d565b6102bb6112a8565b6102bb6004803603606081101561046757600080fd5b506001600160a01b038135811691602081013582169160409091013516611535565b6102046116e7565b61032e61172c565b6102bb61173b565b6103c3600480360360208110156104b757600080fd5b50356001600160a01b0316611af5565b6102bb611b16565b6000806104da611b29565b60400151905060006104eb84611b81565b6040908101516001600160a01b03861660009081526007602052919091206001015490915061054890610542670de0b6b3a764000061053c61052d8787611bdc565b6105368a610c29565b90611c3e565b90611c9e565b90611d05565b949350505050565b600a5481565b6006546040805163900cf0cf60e01b815290516000926001600160a01b03169163900cf0cf916004808301926020929190829003018186803b15801561059b57600080fd5b505afa1580156105af573d6000803e3d6000fd5b505050506040513d60208110156105c557600080fd5b5051600a546001600160a01b0384166000908152600760205260409020600201546105ef91611d05565b111592915050565b600454600160a01b900460ff1681565b60015490565b6006546040805163900cf0cf60e01b815290516000926001600160a01b03169163900cf0cf916004808301926020929190829003018186803b15801561065257600080fd5b505afa158015610666573d6000803e3d6000fd5b505050506040513d602081101561067c57600080fd5b50516009546001600160a01b0384166000908152600760205260409020600201546105ef91611d05565b60095481565b600654604080516309c3b03360e21b815290516000926001600160a01b03169163270ec0cc916004808301926020929190829003018186803b1580156106f157600080fd5b505afa158015610705573d6000803e3d6000fd5b505050506040513d602081101561071b57600080fd5b5051905090565b61072a611d5f565b156107665760405162461bcd60e51b81526004018080602001828103825260268152602001806123146026913960400191505060405180910390fd5b61076e611d80565b156107aa5760405162461bcd60e51b81526004018080602001828103825260268152602001806123146026913960400191505060405180910390fd5b60006107b533610c29565b116107f15760405162461bcd60e51b81526004018080602001828103825260218152602001806122a86021913960400191505060405180910390fd5b33801561088b576108006121bd565b506001600160a01b0381166000908152600760209081526040918290208251606081018452815481526001820154928101929092526002015491810191909152610849826104cf565b6020820152610856610adc565b81526001600160a01b038216600090815260076020908152604091829020835181559083015160018201559101516002909101555b600082116108e0576040805162461bcd60e51b815260206004820152601a60248201527f4d61736f6e72793a2043616e6e6f742077697468647261772030000000000000604482015290519081900360640190fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561092e57600080fd5b505afa158015610942573d6000803e3d6000fd5b505050506040513d602081101561095857600080fd5b50516009543360009081526007602052604090206002015461097991611d05565b11156109b65760405162461bcd60e51b81526004018080602001828103825260218152602001806122c96021913960400191505060405180910390fd5b6109be6112a8565b6109c782611da1565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a250504360009081526003602090815260408083203284529091528082208054600160ff1991821681179092553384529190922080549091169091179055565b6004546001600160a01b03163314610a855760405162461bcd60e51b81526004018080602001828103825260238152602001806122416023913960400191505060405180910390fd5b808210158015610a96575060388211155b610ad15760405162461bcd60e51b81526004018080602001828103825260238152602001806122856023913960400191505060405180910390fd5b600991909155600a55565b600854600090610aed906001611bdc565b905090565b6000610afc611b29565b60400151905090565b6004546001600160a01b03163314610b4e5760405162461bcd60e51b81526004018080602001828103825260238152602001806122416023913960400191505060405180910390fd5b6005546001600160a01b0384811691161415610b9a576040805162461bcd60e51b8152602060048201526006602482015265382a37b5b2b760d11b604482015290519081900360640190fd5b6000546001600160a01b0384811691161415610be3576040805162461bcd60e51b815260206004820152600360248201526270616560e81b604482015290519081900360640190fd5b610bf76001600160a01b0384168284611e31565b505050565b6004546001600160a01b031681565b6005546001600160a01b031681565b6006546001600160a01b031681565b6001600160a01b031660009081526002602052604090205490565b6001600160a01b031660009081526007602052604090205490565b60088181548110610c6c57fe5b600091825260209091206003909102018054600182015460029092015490925083565b6006546040805163900cf0cf60e01b815290516000926001600160a01b03169163900cf0cf916004808301926020929190829003018186803b1580156106f157600080fd5b610cdc611d5f565b15610d185760405162461bcd60e51b81526004018080602001828103825260268152602001806123146026913960400191505060405180910390fd5b610d20611d80565b15610d5c5760405162461bcd60e51b81526004018080602001828103825260268152602001806123146026913960400191505060405180910390fd5b6004546001600160a01b03163314610da55760405162461bcd60e51b81526004018080602001828103825260238152602001806122416023913960400191505060405180910390fd5b60008111610dfa576040805162461bcd60e51b815260206004820152601a60248201527f4d61736f6e72793a2043616e6e6f7420616c6c6f636174652030000000000000604482015290519081900360640190fd5b6000610e04610607565b11610e405760405162461bcd60e51b815260040180806020018281038252602e8152602001806121df602e913960400191505060405180910390fd5b6000610e4a611b29565b6040015190506000610e79610e72610e60610607565b61053c86670de0b6b3a7640000611c3e565b8390611d05565b9050610e836121bd565b5060408051606081018252438152602081018581529181018381526008805460018101825560009190915282517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee360039092029182015592517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4840155517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee590920191909155600554610f41906001600160a01b0316333087611e83565b60408051858152905133917fac24935fd910bc682b5ccb1a07b718cadf8cf2f6d1404c4f3ddc3662dae40e29919081900360200190a250504360009081526003602090815260408083203284529091528082208054600160ff19918216811790925533845291909220805490911690911790555050565b610fc0611d5f565b15610ffc5760405162461bcd60e51b81526004018080602001828103825260268152602001806123146026913960400191505060405180910390fd5b611004611d80565b156110405760405162461bcd60e51b81526004018080602001828103825260268152602001806123146026913960400191505060405180910390fd5b3380156110da5761104f6121bd565b506001600160a01b0381166000908152600760209081526040918290208251606081018452815481526001820154928101929092526002015491810191909152611098826104cf565b60208201526110a5610adc565b81526001600160a01b038216600090815260076020908152604091829020835181559083015160018201559101516002909101555b6000821161112f576040805162461bcd60e51b815260206004820152601760248201527f4d61736f6e72793a2043616e6e6f74207374616b652030000000000000000000604482015290519081900360640190fd5b61113882611ee3565b600660009054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561118657600080fd5b505afa15801561119a573d6000803e3d6000fd5b505050506040513d60208110156111b057600080fd5b505133600081815260076020908152604091829020600201939093558051858152905191927f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d92918290030190a250504360009081526003602090815260408083203284529091528082208054600160ff1991821681179092553384529190922080549091169091179055565b6004546001600160a01b031633146112865760405162461bcd60e51b81526004018080602001828103825260238152602001806122416023913960400191505060405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b338015611342576112b76121bd565b506001600160a01b0381166000908152600760209081526040918290208251606081018452815481526001820154928101929092526002015491810191909152611300826104cf565b602082015261130d610adc565b81526001600160a01b038216600090815260076020908152604091829020835181559083015160018201559101516002909101555b33600090815260076020526040902060010154801561153157600660009054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a957600080fd5b505afa1580156113bd573d6000803e3d6000fd5b505050506040513d60208110156113d357600080fd5b5051600a54336000908152600760205260409020600201546113f491611d05565b1115611447576040805162461bcd60e51b815260206004820152601f60248201527f4d61736f6e72793a207374696c6c20696e20726577617264206c6f636b757000604482015290519081900360640190fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561149557600080fd5b505afa1580156114a9573d6000803e3d6000fd5b505050506040513d60208110156114bf57600080fd5b505133600081815260076020526040812060028101939093556001909201919091556005546114fa916001600160a01b039091169083611e31565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b5050565b600454600160a01b900460ff1615611594576040805162461bcd60e51b815260206004820152601c60248201527f4d61736f6e72793a20616c726561647920696e697469616c697a656400000000604482015290519081900360640190fd5b600580546001600160a01b038086166001600160a01b0319928316179092556000805485841690831617905560068054928416929091169190911790556115d96121bd565b50604080516060810182524380825260006020808401828152848601838152600880546001810182559452855160039485027ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee381019190915591517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4830155517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee5909101556006600955600a91909155600480546001600160a01b031960ff60a01b19909116600160a01b171633908117909155845192835293519293927f25ff68dd81b34665b5ba7e553ee5511bf6812e12adb4a7e2c0d9e26b3099ce799281900390910190a250505050565b600654604080516362cb3e1360e11b815290516000926001600160a01b03169163c5967c26916004808301926020929190829003018186803b1580156106f157600080fd5b6000546001600160a01b031681565b611743611d5f565b1561177f5760405162461bcd60e51b81526004018080602001828103825260268152602001806123146026913960400191505060405180910390fd5b611787611d80565b156117c35760405162461bcd60e51b81526004018080602001828103825260268152602001806123146026913960400191505060405180910390fd5b60006117ce33610c29565b1161180a5760405162461bcd60e51b81526004018080602001828103825260218152602001806122a86021913960400191505060405180910390fd5b3380156118a4576118196121bd565b506001600160a01b0381166000908152600760209081526040918290208251606081018452815481526001820154928101929092526002015491810191909152611862826104cf565b602082015261186f610adc565b81526001600160a01b038216600090815260076020908152604091829020835181559083015160018201559101516002909101555b60006118af33610c29565b905060008111611906576040805162461bcd60e51b815260206004820152601a60248201527f4d61736f6e72793a2043616e6e6f742077697468647261772030000000000000604482015290519081900360640190fd5b600660009054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561195457600080fd5b505afa158015611968573d6000803e3d6000fd5b505050506040513d602081101561197e57600080fd5b50516009543360009081526007602052604090206002015461199f91611d05565b11156119dc5760405162461bcd60e51b81526004018080602001828103825260218152602001806122c96021913960400191505060405180910390fd5b6119e581611da1565b600660009054906101000a90046001600160a01b03166001600160a01b031663900cf0cf6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3357600080fd5b505afa158015611a47573d6000803e3d6000fd5b505050506040513d6020811015611a5d57600080fd5b505133600081815260076020908152604080832060028101959095556001909401919091558251848152925191927f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5929081900390910190a250504360009081526003602090815260408083203284529091528082208054600160ff1991821681179092553384529190922080549091169091179055565b60076020526000908152604090208054600182015460029092015490919083565b611b27611b2233610c29565b610722565b565b611b316121bd565b6008611b3b610adc565b81548110611b4557fe5b90600052602060002090600302016040518060600160405290816000820154815260200160018201548152602001600282015481525050905090565b611b896121bd565b6008611b9483610c44565b81548110611b9e57fe5b906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820154815250509050919050565b600082821115611c33576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b600082611c4d57506000611c38565b82820282848281611c5a57fe5b0414611c975760405162461bcd60e51b81526004018080602001828103825260218152602001806122646021913960400191505060405180910390fd5b9392505050565b6000808211611cf4576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611cfd57fe5b049392505050565b600082820183811015611c97576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b43600090815260036020908152604080832032845290915290205460ff1690565b43600090815260036020908152604080832033845290915290205460ff1690565b3360009081526002602052604090205481811015611df05760405162461bcd60e51b815260040180806020018281038252603481526020018061220d6034913960400191505060405180910390fd5b600154611dfd9083611bdc565b600155611e0a8183611bdc565b336000818152600260205260408120929092559054611531916001600160a01b0390911690845b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610bf7908490611f3c565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611edd908590611f3c565b50505050565b600154611ef09082611d05565b60015533600090815260026020526040902054611f0d9082611d05565b336000818152600260205260408120929092559054611f39916001600160a01b03909116903084611e83565b50565b6060611f91826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fed9092919063ffffffff16565b805190915015610bf757808060200190516020811015611fb057600080fd5b5051610bf75760405162461bcd60e51b815260040180806020018281038252602a8152602001806122ea602a913960400191505060405180910390fd5b606061054884846000858561200185612113565b612052576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106120915780518252601f199092019160209182019101612072565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146120f3576040519150601f19603f3d011682016040523d82523d6000602084013e6120f8565b606091505b5091509150612108828286612119565b979650505050505050565b3b151590565b60608315612128575081611c97565b8251156121385782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561218257818101518382015260200161216a565b50505050905090810190601f1680156121af5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040518060600160405280600081526020016000815260200160008152509056fe4d61736f6e72793a2043616e6e6f7420616c6c6f63617465207768656e20746f74616c537570706c7920697320304d61736f6e72793a20776974686472617720726571756573742067726561746572207468616e207374616b656420616d6f756e744d61736f6e72793a2063616c6c6572206973206e6f7420746865206f70657261746f72536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775f77697468647261774c6f636b757045706f6368733a206f7574206f662072616e67654d61736f6e72793a20546865206d61736f6e20646f6573206e6f742065786973744d61736f6e72793a207374696c6c20696e207769746864726177206c6f636b75705361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436f6e747261637447756172643a206f6e6520626c6f636b2c206f6e652066756e6374696f6ea264697066735822122026c6f6d6d5a4fa6cdeb1b04d193abcbd99bf18981f2d3a59fd11ff7eeed67d6764736f6c634300060c0033

Deployed ByteCode Sourcemap

24877:8063:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29549:312;;;;;;;;;;;;;;;;-1:-1:-1;29549:312:0;-1:-1:-1;;;;;29549:312:0;;:::i;:::-;;;;;;;;;;;;;;;;25702:33;;;:::i;28887:167::-;;;;;;;;;;;;;;;;-1:-1:-1;28887:167:0;-1:-1:-1;;;;;28887:167:0;;:::i;:::-;;;;;;;;;;;;;;;;;;25461:31;;;:::i;24047:91::-;;;:::i;28713:166::-;;;;;;;;;;;;;;;;-1:-1:-1;28713:166:0;-1:-1:-1;;;;;28713:166:0;;:::i;25660:35::-;;;:::i;29278:103::-;;;:::i;30232:407::-;;;;;;;;;;;;;;;;-1:-1:-1;30232:407:0;;:::i;:::-;;27674:362;;;;;;;;;;;;;;;;-1:-1:-1;27674:362:0;;;;;;;:::i;28133:115::-;;;:::i;29425:116::-;;;:::i;32612:325::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32612:325:0;;;;;;;;;;;;;;;;;:::i;25415:23::-;;;:::i;:::-;;;;-1:-1:-1;;;;;25415:23:0;;;;;;;;;;;;;;25501:20;;;:::i;25528:25::-;;;:::i;24146:110::-;;;;;;;;;;;;;;;;-1:-1:-1;24146:110:0;-1:-1:-1;;;;;24146:110:0;;:::i;28403:134::-;;;;;;;;;;;;;;;;-1:-1:-1;28403:134:0;-1:-1:-1;;;;;28403:134:0;;:::i;25612:39::-;;;;;;;;;;;;;;;;-1:-1:-1;25612:39:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;29062:91;;;:::i;31842:762::-;;;;;;;;;;;;;;;;-1:-1:-1;31842:762:0;;:::i;29923:301::-;;;;;;;;;;;;;;;;-1:-1:-1;29923:301:0;;:::i;27565:101::-;;;;;;;;;;;;;;;;-1:-1:-1;27565:101:0;-1:-1:-1;;;;;27565:101:0;;:::i;31300:534::-;;;:::i;26874:683::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26874:683:0;;;;;;;;;;;;;;;;;;;:::i;29161:109::-;;;:::i;23932:17::-;;;:::i;30647:562::-;;;:::i;25562:43::-;;;;;;;;;;;;;;;;-1:-1:-1;25562:43:0;-1:-1:-1;;;;;25562:43:0;;:::i;31217:75::-;;;:::i;29549:312::-;29601:7;29621:17;29641:19;:17;:19::i;:::-;:34;;;29621:54;;29686:17;29706:24;29724:5;29706:17;:24::i;:::-;:39;;;;;-1:-1:-1;;;;;29826:13:0;;;;;;:6;:13;;;;;;:26;;;29706:39;;-1:-1:-1;29765:88:0;;:56;29816:4;29765:46;29786:24;:9;29706:39;29786:13;:24::i;:::-;29765:16;29775:5;29765:9;:16::i;:::-;:20;;:46::i;:::-;:50;;:56::i;:::-;:60;;:88::i;:::-;29758:95;29549:312;-1:-1:-1;;;;29549:312:0:o;25702:33::-;;;;:::o;28887:167::-;29030:8;;:16;;;-1:-1:-1;;;29030:16:0;;;;28949:4;;-1:-1:-1;;;;;29030:8:0;;:14;;:16;;;;;;;;;;;;;;:8;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29030:16:0;29007:18;;-1:-1:-1;;;;;28973:13:0;;;;;;:6;29030:16;28973:13;;;;:29;;;:53;;:33;:53::i;:::-;:73;;;28887:167;-1:-1:-1;;28887:167:0:o;25461:31::-;;;-1:-1:-1;;;25461:31:0;;;;;:::o;24047:91::-;24118:12;;24047:91;:::o;28713:166::-;28855:8;;:16;;;-1:-1:-1;;;28855:16:0;;;;28772:4;;-1:-1:-1;;;;;28855:8:0;;:14;;:16;;;;;;;;;;;;;;:8;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28855:16:0;28830:20;;-1:-1:-1;;;;;28796:13:0;;;;;;:6;28855:16;28796:13;;;;:29;;;:55;;:33;:55::i;25660:35::-;;;;:::o;29278:103::-;29351:8;;:22;;;-1:-1:-1;;;29351:22:0;;;;29324:7;;-1:-1:-1;;;;;29351:8:0;;:20;;:22;;;;;;;;;;;;;;:8;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29351:22:0;;-1:-1:-1;29278:103:0;:::o;30232:407::-;22557:28;:26;:28::i;:::-;22556:29;22548:80;;;;-1:-1:-1;;;22548:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22648:28;:26;:28::i;:::-;22647:29;22639:80;;;;-1:-1:-1;;;22639:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26337:1:::1;26313:21;26323:10;26313:9;:21::i;:::-;:25;26305:71;;;;-1:-1:-1::0;;;26305:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30320:10:::2;26456:19:::0;;26452:233:::2;;26492:21;;:::i;:::-;-1:-1:-1::0;;;;;;26516:13:0;::::2;;::::0;;;:6:::2;:13;::::0;;;;;;;;26492:37;;::::2;::::0;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;;::::2;;::::0;;;;;;;;26564:13:::2;26523:5:::0;26564:6:::2;:13::i;:::-;26544:17;::::0;::::2;:33:::0;26617:21:::2;:19;:21::i;:::-;26592:46:::0;;-1:-1:-1;;;;;26653:13:0;::::2;26592:22;26653:13:::0;;;:6:::2;:13;::::0;;;;;;;;:20;;;;;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;26452:233:::2;30360:1:::3;30351:6;:10;30343:49;;;::::0;;-1:-1:-1;;;30343:49:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;30475:8;;;;;;;;;-1:-1:-1::0;;;;;30475:8:0::3;-1:-1:-1::0;;;;;30475:14:0::3;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;30475:16:0;30450:20:::3;::::0;30418:10:::3;30411:18;::::0;;;:6:::3;30475:16;30411:18:::0;;;;:34:::3;;::::0;:60:::3;::::0;:38:::3;:60::i;:::-;:80;;30403:126;;;;-1:-1:-1::0;;;30403:126:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30540:13;:11;:13::i;:::-;30564:22;30579:6;30564:14;:22::i;:::-;30602:29;::::0;;;;;;;30612:10:::3;::::0;30602:29:::3;::::0;;;;;::::3;::::0;;::::3;-1:-1:-1::0;;22754:12:0;22746:21;;;;:7;:21;;;;;;;;22768:9;22746:32;;;;;;;;:39;;22781:4;-1:-1:-1;;22746:39:0;;;;;;;;22818:10;22796:33;;;;;;:40;;;;;;;;;;30232:407::o;27674:362::-;26183:8;;-1:-1:-1;;;;;26183:8:0;26195:10;26183:22;26175:70;;;;-1:-1:-1;;;26175:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27819:19:::1;27794:21;:44;;:75;;;;;27867:2;27842:21;:27;;27794:75;27786:123;;;;-1:-1:-1::0;;;27786:123:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27933:20;:44:::0;;;;27988:18:::1;:40:::0;27674:362::o;28133:115::-;28212:14;:21;28185:7;;28212:28;;28238:1;28212:25;:28::i;:::-;28205:35;;28133:115;:::o;29425:116::-;29472:7;29499:19;:17;:19::i;:::-;:34;;;29492:41;;29425:116;:::o;32612:325::-;26183:8;;-1:-1:-1;;;;;26183:8:0;26195:10;26183:22;26175:70;;;;-1:-1:-1;;;26175:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32809:6:::1;::::0;-1:-1:-1;;;;;32782:34:0;;::::1;32809:6:::0;::::1;32782:34;;32774:53;;;::::0;;-1:-1:-1;;;32774:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32774:53:0;;;;;;;;;;;;;::::1;;32873:3;::::0;-1:-1:-1;;;;;32846:31:0;;::::1;32873:3:::0;::::1;32846:31;;32838:47;;;::::0;;-1:-1:-1;;;32838:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32838:47:0;;;;;;;;;;;;;::::1;;32896:33;-1:-1:-1::0;;;;;32896:19:0;::::1;32916:3:::0;32921:7;32896:19:::1;:33::i;:::-;32612:325:::0;;;:::o;25415:23::-;;;-1:-1:-1;;;;;25415:23:0;;:::o;25501:20::-;;;-1:-1:-1;;;;;25501:20:0;;:::o;25528:25::-;;;-1:-1:-1;;;;;25528:25:0;;:::o;24146:110::-;-1:-1:-1;;;;;24230:18:0;24203:7;24230:18;;;:9;:18;;;;;;;24146:110::o;28403:134::-;-1:-1:-1;;;;;28498:13:0;28471:7;28498:13;;;:6;:13;;;;;:31;;28403:134::o;25612:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25612:39:0;:::o;29062:91::-;29129:8;;:16;;;-1:-1:-1;;;29129:16:0;;;;29102:7;;-1:-1:-1;;;;;29129:8:0;;:14;;:16;;;;;;;;;;;;;;:8;:16;;;;;;;;;;31842:762;22557:28;:26;:28::i;:::-;22556:29;22548:80;;;;-1:-1:-1;;;22548:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22648:28;:26;:28::i;:::-;22647:29;22639:80;;;;-1:-1:-1;;;22639:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26183:8:::1;::::0;-1:-1:-1;;;;;26183:8:0::1;26195:10;26183:22;26175:70;;;;-1:-1:-1::0;;;26175:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31950:1:::2;31941:6;:10;31933:49;;;::::0;;-1:-1:-1;;;31933:49:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;32017:1;32001:13;:11;:13::i;:::-;:17;31993:76;;;;-1:-1:-1::0;;;31993:76:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32120:15;32138:19;:17;:19::i;:::-;:34;;;32120:52;;32183:15;32201:48;32213:35;32234:13;:11;:13::i;:::-;32213:16;:6:::0;32224:4:::2;32213:10;:16::i;:35::-;32201:7:::0;;:11:::2;:48::i;:::-;32183:66;;32262:34;;:::i;:::-;-1:-1:-1::0;32299:136:0::2;::::0;;::::2;::::0;::::2;::::0;;32336:12:::2;32299:136:::0;;::::2;::::0;::::2;::::0;;;;;;;;;32446:14:::2;:32:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;32446:32:0;;;;;;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;;;;32491:6:::2;::::0;:58:::2;::::0;-1:-1:-1;;;;;32491:6:0::2;32515:10;32535:4;32299:136:::0;32491:23:::2;:58::i;:::-;32565:31;::::0;;;;;;;32577:10:::2;::::0;32565:31:::2;::::0;;;;;::::2;::::0;;::::2;-1:-1:-1::0;;22754:12:0;22746:21;;;;:7;:21;;;;;;;;22768:9;22746:32;;;;;;;;:39;;22781:4;-1:-1:-1;;22746:39:0;;;;;;;;22818:10;22796:33;;;;;;:40;;;;;;;;;;-1:-1:-1;;31842:762:0:o;29923:301::-;22557:28;:26;:28::i;:::-;22556:29;22548:80;;;;-1:-1:-1;;;22548:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22648:28;:26;:28::i;:::-;22647:29;22639:80;;;;-1:-1:-1;;;22639:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29996:10:::1;26456:19:::0;;26452:233:::1;;26492:21;;:::i;:::-;-1:-1:-1::0;;;;;;26516:13:0;::::1;;::::0;;;:6:::1;:13;::::0;;;;;;;;26492:37;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;;::::0;;;;;;;;26564:13:::1;26523:5:::0;26564:6:::1;:13::i;:::-;26544:17;::::0;::::1;:33:::0;26617:21:::1;:19;:21::i;:::-;26592:46:::0;;-1:-1:-1;;;;;26653:13:0;::::1;26592:22;26653:13:::0;;;:6:::1;:13;::::0;;;;;;;;:20;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;26452:233:::1;30036:1:::2;30027:6;:10;30019:46;;;::::0;;-1:-1:-1;;;30019:46:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;30076:19;30088:6;30076:11;:19::i;:::-;30143:8;;;;;;;;;-1:-1:-1::0;;;;;30143:8:0::2;-1:-1:-1::0;;;;;30143:14:0::2;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;30143:16:0;30113:10:::2;30106:18;::::0;;;:6:::2;30143:16;30106:18:::0;;;;;;;;:34:::2;;:53:::0;;;;30190:26;;;;;;;30113:10;;30190:26:::2;::::0;;;;;;;::::2;-1:-1:-1::0;;22754:12:0;22746:21;;;;:7;:21;;;;;;;;22768:9;22746:32;;;;;;;;:39;;22781:4;-1:-1:-1;;22746:39:0;;;;;;;;22818:10;22796:33;;;;;;:40;;;;;;;;;;29923:301::o;27565:101::-;26183:8;;-1:-1:-1;;;;;26183:8:0;26195:10;26183:22;26175:70;;;;-1:-1:-1;;;26175:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27638:8:::1;:20:::0;;-1:-1:-1;;;;;;27638:20:0::1;-1:-1:-1::0;;;;;27638:20:0;;;::::1;::::0;;;::::1;::::0;;27565:101::o;31300:534::-;31343:10;26456:19;;26452:233;;26492:21;;:::i;:::-;-1:-1:-1;;;;;;26516:13:0;;;;;;:6;:13;;;;;;;;;26492:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26564:13;26523:5;26564:6;:13::i;:::-;26544:17;;;:33;26617:21;:19;:21::i;:::-;26592:46;;-1:-1:-1;;;;;26653:13:0;;26592:22;26653:13;;;:6;:13;;;;;;;;;:20;;;;;;;;;;;;;;;;;;;;26452:233;31390:10:::1;31366:14;31383:18:::0;;;:6:::1;:18;::::0;;;;:31:::1;;::::0;31429:10;;31425:402:::1;;31526:8;;;;;;;;;-1:-1:-1::0;;;;;31526:8:0::1;-1:-1:-1::0;;;;;31526:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31526:16:0;31503:18:::1;::::0;31471:10:::1;31464:18;::::0;;;:6:::1;31526:16;31464:18:::0;;;;:34:::1;;::::0;:58:::1;::::0;:38:::1;:58::i;:::-;:78;;31456:122;;;::::0;;-1:-1:-1;;;31456:122:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31630:8;;;;;;;;;-1:-1:-1::0;;;;;31630:8:0::1;-1:-1:-1::0;;;;;31630:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31630:16:0;31600:10:::1;31593:18;::::0;;;:6:::1;31630:16;31593:18:::0;;;;:34:::1;::::0;::::1;:53:::0;;;;31676:31:::1;::::0;;::::1;:35:::0;;;;31726:6:::1;::::0;:39:::1;::::0;-1:-1:-1;;;;;31726:6:0;;::::1;::::0;31758;31726:19:::1;:39::i;:::-;31785:30;::::0;;;;;;;31796:10:::1;::::0;31785:30:::1;::::0;;;;;::::1;::::0;;::::1;31425:402;26695:1;31300:534:::0;:::o;26874:683::-;26756:11;;-1:-1:-1;;;26756:11:0;;;;26755:12;26747:53;;;;;-1:-1:-1;;;26747:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27011:6:::1;:16:::0;;-1:-1:-1;;;;;27011:16:0;;::::1;-1:-1:-1::0;;;;;;27011:16:0;;::::1;;::::0;;;:6:::1;27038:10:::0;;;;::::1;::::0;;::::1;;::::0;;27059:8:::1;:20:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;27092:38:::1;;:::i;:::-;-1:-1:-1::0;27133:78:0::1;::::0;;::::1;::::0;::::1;::::0;;27157:12:::1;27133:78:::0;;;-1:-1:-1;27133:78:0::1;::::0;;::::1;::::0;;;;;;;;;27222:14:::1;:36:::0;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;27294:1:::1;27271:20;:24:::0;27357:18:::1;:22:::0;;;;27446:11:::1;:18:::0;;-1:-1:-1;;;;;;;;;;27446:18:0;;::::1;-1:-1:-1::0;;;27446:18:0::1;27475:21;27486:10;27475:21:::0;;::::1;::::0;;;27512:37;;;;;;;27133:78;;27486:10;27512:37:::1;::::0;;;;;;;;::::1;26811:1;26874:683:::0;;;:::o;29161:109::-;29237:8;;:25;;;-1:-1:-1;;;29237:25:0;;;;29210:7;;-1:-1:-1;;;;;29237:8:0;;:23;;:25;;;;;;;;;;;;;;:8;:25;;;;;;;;;;23932:17;;;-1:-1:-1;;;;;23932:17:0;;:::o;30647:562::-;22557:28;:26;:28::i;:::-;22556:29;22548:80;;;;-1:-1:-1;;;22548:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22648:28;:26;:28::i;:::-;22647:29;22639:80;;;;-1:-1:-1;;;22639:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26337:1:::1;26313:21;26323:10;26313:9;:21::i;:::-;:25;26305:71;;;;-1:-1:-1::0;;;26305:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30723:10:::2;26456:19:::0;;26452:233:::2;;26492:21;;:::i;:::-;-1:-1:-1::0;;;;;;26516:13:0;::::2;;::::0;;;:6:::2;:13;::::0;;;;;;;;26492:37;;::::2;::::0;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;;::::2;;::::0;;;;;;;;26564:13:::2;26523:5:::0;26564:6:::2;:13::i;:::-;26544:17;::::0;::::2;:33:::0;26617:21:::2;:19;:21::i;:::-;26592:46:::0;;-1:-1:-1;;;;;26653:13:0;::::2;26592:22;26653:13:::0;;;:6:::2;:13;::::0;;;;;;;;:20;;;;;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;26452:233:::2;30746:14:::3;30763:21;30773:10;30763:9;:21::i;:::-;30746:38;;30812:1;30803:6;:10;30795:49;;;::::0;;-1:-1:-1;;;30795:49:0;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;::::3;::::0;;;;;;;;;;;;;::::3;;30927:8;;;;;;;;;-1:-1:-1::0;;;;;30927:8:0::3;-1:-1:-1::0;;;;;30927:14:0::3;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;30927:16:0;30902:20:::3;::::0;30870:10:::3;30863:18;::::0;;;:6:::3;30927:16;30863:18:::0;;;;:34:::3;;::::0;:60:::3;::::0;:38:::3;:60::i;:::-;:80;;30855:126;;;;-1:-1:-1::0;;;30855:126:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30992:22;31007:6;30992:14;:22::i;:::-;31062:8;;;;;;;;;-1:-1:-1::0;;;;;31062:8:0::3;-1:-1:-1::0;;;;;31062:14:0::3;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;31062:16:0;31032:10:::3;31025:18;::::0;;;:6:::3;31062:16;31025:18:::0;;;;;;;:34:::3;::::0;::::3;:53:::0;;;;31104:31:::3;::::0;;::::3;:35:::0;;;;31172:29;;;;;;;31032:10;;31172:29:::3;::::0;;;;;;;;;::::3;-1:-1:-1::0;;22754:12:0;22746:21;;;;:7;:21;;;;;;;;22768:9;22746:32;;;;;;;;:39;;22781:4;-1:-1:-1;;22746:39:0;;;;;;;;22818:10;22796:33;;;;;;:40;;;;;;;;;;30647:562::o;25562:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31217:75::-;31253:31;31262:21;31272:10;31262:9;:21::i;:::-;31253:8;:31::i;:::-;31217:75::o;28256:139::-;28308:22;;:::i;:::-;28350:14;28365:21;:19;:21::i;:::-;28350:37;;;;;;;;;;;;;;;;;;28343:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28256:139;:::o;28545:160::-;28610:22;;:::i;:::-;28652:14;28667:29;28690:5;28667:22;:29::i;:::-;28652:45;;;;;;;;;;;;;;;;;;28645:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28545:160;;;:::o;6099:158::-;6157:7;6190:1;6185;:6;;6177:49;;;;;-1:-1:-1;;;6177:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6244:5:0;;;6099:158;;;;;:::o;6516:220::-;6574:7;6598:6;6594:20;;-1:-1:-1;6613:1:0;6606:8;;6594:20;6637:5;;;6641:1;6637;:5;:1;6661:5;;;;;:10;6653:56;;;;-1:-1:-1;;;6653:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6727:1;6516:220;-1:-1:-1;;;6516:220:0:o;7214:153::-;7272:7;7304:1;7300;:5;7292:44;;;;;-1:-1:-1;;;7292:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7358:1;7354;:5;;;;;;;7214:153;-1:-1:-1;;;7214:153:0:o;5637:179::-;5695:7;5727:5;;;5751:6;;;;5743:46;;;;;-1:-1:-1;;;5743:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;22246:125;22339:12;22307:4;22331:21;;;:7;:21;;;;;;;;22353:9;22331:32;;;;;;;;;;22246:125;:::o;22379:126::-;22472:12;22440:4;22464:21;;;:7;:21;;;;;;;;22486:10;22464:33;;;;;;;;;;22379:126;:::o;24510:360::-;24601:10;24570:18;24591:21;;;:9;:21;;;;;;24631:20;;;;24623:85;;;;-1:-1:-1;;;24623:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24734:12;;:24;;24751:6;24734:16;:24::i;:::-;24719:12;:39;24793:22;:10;24808:6;24793:14;:22::i;:::-;24779:10;24769:21;;;;:9;:21;;;;;:46;;;;24826:3;;:36;;-1:-1:-1;;;;;24826:3:0;;;;24855:6;18999:177;19109:58;;;-1:-1:-1;;;;;19109:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19109:58:0;-1:-1:-1;;;19109:58:0;;;19082:86;;19102:5;;19082:19;:86::i;19184:205::-;19312:68;;;-1:-1:-1;;;;;19312:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19312:68:0;-1:-1:-1;;;19312:68:0;;;19285:96;;19305:5;;19285:19;:96::i;:::-;19184:205;;;;:::o;24264:238::-;24336:12;;:24;;24353:6;24336:16;:24::i;:::-;24321:12;:39;24405:10;24395:21;;;;:9;:21;;;;;;:33;;24421:6;24395:25;:33::i;:::-;24381:10;24371:21;;;;:9;:21;;;;;:57;;;;24439:3;;:55;;-1:-1:-1;;;;;24439:3:0;;;;24480:4;24487:6;24439:20;:55::i;:::-;24264:238;:::o;21304:761::-;21728:23;21754:69;21782:4;21754:69;;;;;;;;;;;;;;;;;21762:5;-1:-1:-1;;;;;21754:27:0;;;:69;;;;;:::i;:::-;21838:17;;21728:95;;-1:-1:-1;21838:21:0;21834:224;;21980:10;21969:30;;;;;;;;;;;;;;;-1:-1:-1;21969:30:0;21961:85;;;;-1:-1:-1;;;21961:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13994:195;14097:12;14129:52;14151:6;14159:4;14165:1;14168:12;14097;15298:18;15309:6;15298:10;:18::i;:::-;15290:60;;;;;-1:-1:-1;;;15290:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15424:12;15438:23;15465:6;-1:-1:-1;;;;;15465:11:0;15485:5;15493:4;15465:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15465:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15423:75;;;;15516:52;15534:7;15543:10;15555:12;15516:17;:52::i;:::-;15509:59;15046:530;-1:-1:-1;;;;;;;15046:530:0:o;11076:422::-;11443:20;11482:8;;;11076:422::o;17586:742::-;17701:12;17730:7;17726:595;;;-1:-1:-1;17761:10:0;17754:17;;17726:595;17875:17;;:21;17871:439;;18138:10;18132:17;18199:15;18186:10;18182:2;18178:19;18171:44;18086:148;18281:12;18274:20;;-1:-1:-1;;;18274:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o

Metadata Hash

26c6f6d6d5a4fa6cdeb1b04d193abcbd99bf18981f2d3a59fd11ff7eeed67d67
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.