Contract 0x5EA29eEe799aA7cC379FdE5cf370BC24f2Ea7c81

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x321f5b8bfcdf843682378e63ac35a269c6948df9f37cdf909a81a5f8a7d3375f72917892021-05-10 7:48:469 mins ago0xc7df374349f545db6598805bfcdddc74ea01ee20 IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0x6fe2446e220c219bf45d07d256cfb3c3a17c0274e2e7b027234383b5adbd361272909552021-05-10 7:02:2655 mins ago0x3511a3eac2373ad47c6e965c67c2b52ada230abf IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0x0657f16c3bb0c9c34df5c3e2a55b3a5b47bc13140b13869189b110e1af8cafd372908152021-05-10 6:54:381 hr 3 mins ago0x857e12fa9da51961d7d854e2b6638bf47b7c4812 IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0xe38686f9879bb7f6f9b8949f45759ecccc1380997c86dfd3af4f069236e9975172900472021-05-10 6:13:351 hr 44 mins ago0x3c838f76563839e4e68c552cec63fd5d1c803f07 IN  Keep3rb Network: KP3RB Token0 BNB0.000265884
0xef5139f632069ef34d9daf707efe9ebacd0e85c6a2867f0974f3a29d11750dff72896942021-05-10 5:55:412 hrs 2 mins ago0x8c128dba2cb66399341aa877315be1054be75da8 IN  Keep3rb Network: KP3RB Token0 BNB0.00051263
0x466b947bfc92f65de891cd4e24dda1965f3a2ecac3dcb6c6cec437399c66a0f372889342021-05-10 5:16:572 hrs 41 mins ago0xdebd76150279b2f003691c22aac8759c7a4c8be8 IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0x74deff40891e114f2ce1d0a28965340defb60e7eb47dcb9e09ac3eebf10cd0a172879672021-05-10 4:27:413 hrs 30 mins ago0x2b83f654b3aa613d91a49fc323ebf8edc5592734 IN  Keep3rb Network: KP3RB Token0 BNB0.000072325
0x3a7b78f5b6db9a549cc5c9ed5a19aaa79a64ced98a3ad79fee43e32a224e808172865962021-05-10 3:17:034 hrs 41 mins ago0x3511a3eac2373ad47c6e965c67c2b52ada230abf IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0xea71f2a044409a64ff440783876856ed80e8e57f12aef2dfd3ae01cbdbf1c36c72865712021-05-10 3:15:484 hrs 42 mins ago0xbfc3805fe2ebd0dcb2fb748501b86340aca89cc3 IN  Keep3rb Network: KP3RB Token0 BNB0.000265884
0xbbebe58a70398760cc29df02e911068d6dbeb1c6cc0bfb145165d632cd08a25472864942021-05-10 3:11:564 hrs 46 mins ago0xb9c97e4e4188974146a880173b3ebd0ab9f62dac IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0xc6a4411b8ea3033d3d523085a525f5f3e43eae632f2271b9ef592b3019f55ec772838562021-05-10 0:59:396 hrs 58 mins ago0xa30df6de9d5ab4dc5b1c4a834731a4606c5b4fe4 IN  Keep3rb Network: KP3RB Token0 BNB0.000265884
0x97510457b57b47d5487796d4c71898e3e713cf40eb7c487d3c3d0c5236dec45072798602021-05-09 21:34:3010 hrs 23 mins ago0xb0c1a90b2c03603a53ef9f67f9c71e9745dc9c7e IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0xaa36953fdee4fa8289bbd0d355a7710383dec5c58b1aaf1239b3286dd0b06bcc72795732021-05-09 21:19:5710 hrs 38 mins ago0x19535cb55feea22688daf4812bfc30f28b80e175 IN  Keep3rb Network: KP3RB Token0 BNB0.000181375
0x9ca18cdc00363a9af83b0b3c05d7b72999983e57e934a57934cc46ae1a206d9072795462021-05-09 21:18:3610 hrs 39 mins ago0xfbb8895f471650ea857f39a96ec035add196c9f4 IN  Keep3rb Network: KP3RB Token0 BNB0.00022007
0x2055df988b01eb0465898d12fc53c96005b464ad2c8c36fa35bd03562dea0a6e72795382021-05-09 21:18:1210 hrs 39 mins ago0x19535cb55feea22688daf4812bfc30f28b80e175 IN  Keep3rb Network: KP3RB Token0 BNB0.005296095
0x11eea1d29e3b39b7b65e3565bcc48df71a44d5a585972b7c3f0c17ec13548fb972787202021-05-09 20:36:3311 hrs 21 mins ago0x1fdbfcb005dbf40e12c6a3b403d8988b34cc8b16 IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0x85a8785984e13eebdb6d1ea68a9f24c91437962b3eff5cc148fb313e1786f84a72773702021-05-09 19:27:2112 hrs 30 mins ago0x71d0cbc62bd49d4e13499fc706d935d0c8a2e355 IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0xb2ccd89f8a8d813a8c29066172465997247875a0e494d4428f7312a2dc3eb67c72763212021-05-09 18:33:0313 hrs 25 mins ago0x57352aa4accf9c1ccea16e1b91578b09f97c915f IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0x3be0f517cd114e68f3644438136dfb0e69087e9044f6237bb46f2ed74e3c118372715232021-05-09 14:09:0817 hrs 49 mins ago0x57634f759bb327042558c5a3cce5c4c0173ee57d IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0x6f037a00baed0fbeeae3f5e5f846035b31f96f8630b5f4e8bbcc882cec49770e72703202021-05-09 13:07:3418 hrs 50 mins ago0xa30df6de9d5ab4dc5b1c4a834731a4606c5b4fe4 IN  Keep3rb Network: KP3RB Token0 BNB0.000265884
0x2c71b9aa9bcbeb929ca9f0ff273fb3cab76680fca58b7fefff24b6147c89173d72700002021-05-09 12:51:0619 hrs 7 mins ago0xbaf47169330aa4f44a7c4e85240981c86fd3a664 IN  Keep3rb Network: KP3RB Token0 BNB0.005094339
0x13cb6b30658700b2030af5d26874e4343853dba44b2c1e709f17c692d90e5a2272696462021-05-09 12:30:5819 hrs 27 mins ago0x334f835640e3742efc7e60117f8bd10bceb5977f IN  Keep3rb Network: KP3RB Token0 BNB0.000256435
0xf8588ea3927905d5469faaa355ba13504d6f7dba5f4f14fb8571a848c69b9e1072682962021-05-09 11:22:4620 hrs 35 mins ago0xa9eec68de86655abf56c1b17a950756a7b911687 IN  Keep3rb Network: KP3RB Token0 BNB0.000181435
0x2a099051cac997289c04fdd9f07fac575e314e3f604391fd1d49df6f7a5574e372670742021-05-09 10:17:2521 hrs 40 mins ago0xa5b03f9cef172ce3a8bbe8cda6e117bc51c3e535 IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
0x64ee4c68072a3d7f9302ff7e9185cc037ff408ec2f1c1778f69e89d0151afb9172627772021-05-09 6:36:211 day 1 hr ago0x7fc86c5c18175ed00f3025f87f878fa420617688 IN  Keep3rb Network: KP3RB Token0 BNB0.00022157
[ Download CSV Export 

OVERVIEW

KP3RB token is a Keep3r fork project on Binance Smart Chain.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x92029437a8c19a083692e0704d274480b9ec2cb36463c73796e2e89ca28576d054713212021-03-07 11:59:0063 days 19 hrs ago CheeseSwap: KP3RB-BUSD Keep3rb Network: KP3RB Token0 BNB
0x92029437a8c19a083692e0704d274480b9ec2cb36463c73796e2e89ca28576d054713212021-03-07 11:59:0063 days 19 hrs ago CheeseSwap: KP3RB-CHS Keep3rb Network: KP3RB Token0 BNB
0x92029437a8c19a083692e0704d274480b9ec2cb36463c73796e2e89ca28576d054713212021-03-07 11:59:0063 days 19 hrs ago CheeseSwap: KP3RB-CHS Keep3rb Network: KP3RB Token0 BNB
0x52bec892a349af4f5fb9724e635b409845e59539a976692a3af73312234d9dab54712992021-03-07 11:57:5463 days 20 hrs ago PizzaFinance: SmartChef KP3RB Keep3rb Network: KP3RB Token0 BNB
0x52bec892a349af4f5fb9724e635b409845e59539a976692a3af73312234d9dab54712992021-03-07 11:57:5463 days 20 hrs ago PizzaFinance: SmartChef KP3RB Keep3rb Network: KP3RB Token0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:3963 days 20 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:3963 days 20 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:3963 days 20 hrs ago Keep3rb Network: KP3RB Token Keep3rb Network: Keep3rbHelper0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:3963 days 20 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:3963 days 20 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:3963 days 20 hrs ago Keep3rb Network: KP3RB Token Keep3rb Network: Keep3rbHelper0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:3963 days 20 hrs ago Keep3rb Network: Pancake Sliding Oracle Keep3rb Network: KP3RB Token0 BNB
0xe6ed81f94abefdb64b8ecf569e4774db3cd028d216f981c16650acd6ff5abb1954710342021-03-07 11:44:3963 days 20 hrs ago Keep3rb Network: Pancake Sliding Oracle Keep3rb Network: KP3RB Token0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:5463 days 20 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:5463 days 20 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:5463 days 20 hrs ago Keep3rb Network: KP3RB Token Keep3rb Network: Keep3rbHelper0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:5463 days 20 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:5463 days 20 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:5463 days 20 hrs ago Keep3rb Network: KP3RB Token Keep3rb Network: Keep3rbHelper0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:5463 days 20 hrs ago Keep3rb Network: KP3RB/CHS Oracle Keep3rb Network: KP3RB Token0 BNB
0x33f3cd1ed60710e98aa2e237fb16b776f9fba8e11b438ae8c285eeb0aeba554354707392021-03-07 11:29:5463 days 20 hrs ago Keep3rb Network: KP3RB/CHS Oracle Keep3rb Network: KP3RB Token0 BNB
0xe3bdd274366e04b64d36a42b083a7fcd1da4c2abe969d4e9fad2b0057aa87f5154707272021-03-07 11:29:1863 days 20 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xe3bdd274366e04b64d36a42b083a7fcd1da4c2abe969d4e9fad2b0057aa87f5154707272021-03-07 11:29:1863 days 20 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
0xe3bdd274366e04b64d36a42b083a7fcd1da4c2abe969d4e9fad2b0057aa87f5154707272021-03-07 11:29:1863 days 20 hrs ago Keep3rb Network: KP3RB Token Keep3rb Network: Keep3rbHelper0 BNB
0xe3bdd274366e04b64d36a42b083a7fcd1da4c2abe969d4e9fad2b0057aa87f5154707272021-03-07 11:29:1863 days 20 hrs ago Keep3rb Network: Keep3rbHelper Keep3rb Network: KP3RB Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Keep3rb

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 BscScan.com on 2020-12-05
*/

// SPDX-License-Identifier: MIT


pragma solidity ^0.6.12;


library SafeMath {
    function add(uint a, uint b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, "add: +");

        return c;
    }
   function add(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, errorMessage);

        return c;
    }
   function sub(uint a, uint b) internal pure returns (uint) {
        return sub(a, b, "sub: -");
    }
   function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b <= a, errorMessage);
        uint c = a - b;

        return c;
    }
  function mul(uint a, uint b) internal pure returns (uint) {
       if (a == 0) {
            return 0;
        }
        uint c = a * b;
        require(c / a == b, "mul: *");

        return c;
    }
  function mul(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
       if (a == 0) {
            return 0;
        }
        uint c = a * b;
        require(c / a == b, errorMessage);
        return c;
    }
  function div(uint a, uint b) internal pure returns (uint) {
        return div(a, b, "div: /");
    }
  function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b > 0, errorMessage);
        uint c = a / b;
        return c;
    }
   function mod(uint a, uint b) internal pure returns (uint) {
        return mod(a, b, "mod: %");
    }
  function mod(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b != 0, errorMessage);
        return a % b;
    }
}


contract ReentrancyGuard {
   uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
       require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
       _status = _ENTERED;
       _;
       _status = _NOT_ENTERED;
    }
}


interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    }

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }
   function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call{value:amount}("");
        require(success, "Address: reverted");
    }
}
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));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // 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: < 0");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function callOptionalReturn(IERC20 token, bytes memory data) private {
           // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: !contract");
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "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: !succeed");
        }
    }
}

library Keep3rbLibrary {
    function getReserve(address pair, address reserve) external view returns (uint) {
        (uint _r0, uint _r1,) = ICheeseSwapPair(pair).getReserves();
        if (ICheeseSwapPair(pair).token0() == reserve) {
            return _r0;
        } else if (ICheeseSwapPair(pair).token1() == reserve) {
            return _r1;
        } else {
            return 0;
        }
    }
}

interface ICheeseSwapPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IGovernance {
    function proposeJob(address job) external;
}

interface IKeep3rbHelper {
    function getQuoteLimit(uint gasUsed) external view returns (uint);
}

contract Keep3rb is ReentrancyGuard {
    using SafeMath for uint;
    using SafeERC20 for IERC20;

    /// @notice Keep3r Helper to set max prices for the ecosystem
    IKeep3rbHelper public KPRH;

    /// @notice EIP-20 token name for this token
    string public constant name = "Keep3r BSC Network";

    /// @notice EIP-20 token symbol for this token
    string public constant symbol = "KP3RB";

    /// @notice EIP-20 token decimals for this token
    uint8 public constant decimals = 18;

    /// @notice Total number of tokens in circulation
    uint public totalSupply = 0; // Initial 0

    /// @notice A record of each accounts delegate
    mapping (address => address) public delegates;

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    mapping (address => mapping (address => uint)) internal allowances;
    mapping (address => uint) internal balances;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint chainId,address verifyingContract)");
    bytes32 public immutable DOMAINSEPARATOR;

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint nonce,uint expiry)");

    /// @notice The EIP-712 typehash for the permit struct used by the contract
    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint value,uint nonce,uint deadline)");


    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

    /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint votes;
    }

    function delegate(address delegatee) public {
        _delegate(msg.sender, delegatee);
    }

    function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public {
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", DOMAINSEPARATOR, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "delegateBySig: sig");
        require(nonce == nonces[signatory]++, "delegateBySig: nonce");
        require(now <= expiry, "delegateBySig: expired");
        _delegate(signatory, delegatee);
    }

  
    function getCurrentVotes(address account) external view returns (uint) {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    function getPriorVotes(address account, uint blockNumber) public view returns (uint) {
        require(blockNumber < block.number, "getPriorVotes:");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = delegates[delegator];
        uint delegatorBalance = votes[delegator].add(bonds[delegator][address(this)]);
        delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveDelegates(address srcRep, address dstRep, uint amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint srcRepNew = srcRepOld.sub(amount, "_moveVotes: underflows");
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint dstRepNew = dstRepOld.add(amount);
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint oldVotes, uint newVotes) internal {
      uint32 blockNumber = safe32(block.number, "_writeCheckpoint: 32 bits");

      if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
          checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
      } else {
          checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
          numCheckpoints[delegatee] = nCheckpoints + 1;
      }

      emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    /// @notice The standard EIP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint amount);

    /// @notice The standard EIP-20 approval event
    event Approval(address indexed owner, address indexed spender, uint amount);

    /// @notice Submit a job
    event SubmitJob(address indexed job, address indexed liquidity, address indexed provider, uint block, uint credit);

    /// @notice Apply credit to a job
    event ApplyCredit(address indexed job, address indexed liquidity, address indexed provider, uint block, uint credit);

    /// @notice Remove credit for a job
    event RemoveJob(address indexed job, address indexed liquidity, address indexed provider, uint block, uint credit);

    /// @notice Unbond credit for a job
    event UnbondJob(address indexed job, address indexed liquidity, address indexed provider, uint block, uint credit);

    /// @notice Added a Job
    event JobAdded(address indexed job, uint block, address governance);

    /// @notice Removed a job
    event JobRemoved(address indexed job, uint block, address governance);

    /// @notice Worked a job
    event KeeperWorked(address indexed credit, address indexed job, address indexed keeper, uint block, uint amount);

    /// @notice Keeper bonding
    event KeeperBonding(address indexed keeper, uint block, uint active, uint bond);

    /// @notice Keeper bonded
    event KeeperBonded(address indexed keeper, uint block, uint activated, uint bond);

    /// @notice Keeper unbonding
    event KeeperUnbonding(address indexed keeper, uint block, uint deactive, uint bond);

    /// @notice Keeper unbound
    event KeeperUnbound(address indexed keeper, uint block, uint deactivated, uint bond);

    /// @notice Keeper slashed
    event KeeperSlashed(address indexed keeper, address indexed slasher, uint block, uint slash);

    /// @notice Keeper disputed
    event KeeperDispute(address indexed keeper, uint block);

    /// @notice Keeper resolved
    event KeeperResolved(address indexed keeper, uint block);

    event AddCredit(address indexed credit, address indexed job, address indexed creditor, uint block, uint amount);

    /// @notice 1 day to bond to become a keeper
    uint constant public BOND = 1 days;
    /// @notice 14 days to unbond to remove funds from being a keeper
    uint constant public UNBOND = 14 days;
    /// @notice 3 days till liquidity can be bound
    uint constant public LIQUIDITYBOND = 3 days;

    /// @notice direct liquidity fee 0.5%
    uint constant public FEE = 50;
    uint constant public BASE = 10000;

    /// @notice address used for ETH transfers
    address constant public ETH = address(0xE);

    /// @notice tracks all current bondings (time)
    mapping(address => mapping(address => uint)) public bondings;
    /// @notice tracks all current unbondings (time)
    mapping(address => mapping(address => uint)) public unbondings;
    /// @notice allows for partial unbonding
    mapping(address => mapping(address => uint)) public partialUnbonding;
    /// @notice tracks all current pending bonds (amount)
    mapping(address => mapping(address => uint)) public pendingbonds;
    /// @notice tracks how much a keeper has bonded
    mapping(address => mapping(address => uint)) public bonds;
    /// @notice tracks underlying votes (that don't have bond)
    mapping(address => uint) public votes;

    /// @notice total bonded (totalSupply for bonds)
    uint public totalBonded = 0;
    /// @notice tracks when a keeper was first registered
    mapping(address => uint) public firstSeen;

    /// @notice tracks if a keeper has a pending dispute
    mapping(address => bool) public disputes;

    /// @notice tracks last job performed for a keeper
    mapping(address => uint) public lastJob;
    /// @notice tracks the total job executions for a keeper
    mapping(address => uint) public workCompleted;
    /// @notice list of all jobs registered for the keeper system
    mapping(address => bool) public jobs;
    /// @notice the current credit available for a job
    mapping(address => mapping(address => uint)) public credits;
    /// @notice the balances for the liquidity providers
    mapping(address => mapping(address => mapping(address => uint))) public liquidityProvided;
    /// @notice liquidity unbonding days
    mapping(address => mapping(address => mapping(address => uint))) public liquidityUnbonding;
    /// @notice liquidity unbonding amounts
    mapping(address => mapping(address => mapping(address => uint))) public liquidityAmountsUnbonding;
    /// @notice job proposal delay
    mapping(address => uint) public jobProposalDelay;
    /// @notice liquidity apply date
    mapping(address => mapping(address => mapping(address => uint))) public liquidityApplied;
    /// @notice liquidity amount to apply
    mapping(address => mapping(address => mapping(address => uint))) public liquidityAmount;

    /// @notice list of all current keepers
    mapping(address => bool) public keepers;
    /// @notice blacklist of keepers not allowed to participate
    mapping(address => bool) public blacklist;

    /// @notice traversable array of keepers to make external management easier
    address[] public keeperList;
    /// @notice traversable array of jobs to make external management easier
    address[] public jobList;

    /// @notice governance address for the governance contract
    address public governance;
    address public pendingGovernance;

    /// @notice the liquidity token supplied by users paying for jobs
    mapping(address => bool) public liquidityAccepted;

    address[] public liquidityPairs;

    uint internal _gasUsed;

    constructor(address _kph) public {
        // Set governance for this token
        governance = msg.sender;
        DOMAINSEPARATOR = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), _getChainId(), address(this)));
        KPRH = IKeep3rbHelper(_kph);
    }

    /**
     * @notice Add ETH credit to a job to be paid out for work
     * @param job the job being credited
     */
    function addCreditETH(address job) external payable {
        require(jobs[job], "addCreditETH: !job");
        uint _fee = msg.value.mul(FEE).div(BASE);
        credits[job][ETH] = credits[job][ETH].add(msg.value.sub(_fee));
        payable(governance).transfer(_fee);

        emit AddCredit(ETH, job, msg.sender, block.number, msg.value);
    }

    function addCredit(address credit, address job, uint amount) external nonReentrant {
        require(jobs[job], "addCreditETH: !job");
        uint _before = IERC20(credit).balanceOf(address(this));
        IERC20(credit).safeTransferFrom(msg.sender, address(this), amount);
        uint _received = IERC20(credit).balanceOf(address(this)).sub(_before);
        uint _fee = _received.mul(FEE).div(BASE);
        credits[job][credit] = credits[job][credit].add(_received.sub(_fee));
        IERC20(credit).safeTransfer(governance, _fee);

        emit AddCredit(credit, job, msg.sender, block.number, _received);
    }

    function addVotes(address voter, uint amount) external {
        require(msg.sender == governance, "addVotes: !gov");
        _activate(voter, address(this));
        votes[voter] = votes[voter].add(amount);
        totalBonded = totalBonded.add(amount);
        _moveDelegates(address(0), delegates[voter], amount);
    }

 
    function removeVotes(address voter, uint amount) external {
        require(msg.sender == governance, "addVotes: !gov");
        votes[voter] = votes[voter].sub(amount);
        totalBonded = totalBonded.sub(amount);
        _moveDelegates(delegates[voter], address(0), amount);
    }

    function addKPRCredit(address job, uint amount) external {
        require(msg.sender == governance, "addKPRCredit: !gov");
        require(jobs[job], "addKPRCredit: !job");
        credits[job][address(this)] = credits[job][address(this)].add(amount);
        _mint(address(this), amount);
        emit AddCredit(address(this), job, msg.sender, block.number, amount);
    }

 
    function approveLiquidity(address liquidity) external {
        require(msg.sender == governance, "approveLiquidity: !gov");
        require(!liquidityAccepted[liquidity], "approveLiquidity: !pair");
        liquidityAccepted[liquidity] = true;
        liquidityPairs.push(liquidity);
    }

    function revokeLiquidity(address liquidity) external {
        require(msg.sender == governance, "revokeLiquidity: !gov");
        liquidityAccepted[liquidity] = false;
    }

    function pairs() external view returns (address[] memory) {
        return liquidityPairs;
    }

  
    function addLiquidityToJob(address liquidity, address job, uint amount) external nonReentrant {
        require(liquidityAccepted[liquidity], "addLiquidityToJob: !pair");
        IERC20(liquidity).safeTransferFrom(msg.sender, address(this), amount);
        liquidityProvided[msg.sender][liquidity][job] = liquidityProvided[msg.sender][liquidity][job].add(amount);

        liquidityApplied[msg.sender][liquidity][job] = now.add(LIQUIDITYBOND);
        liquidityAmount[msg.sender][liquidity][job] = liquidityAmount[msg.sender][liquidity][job].add(amount);

        if (!jobs[job] && jobProposalDelay[job] < now) {
            IGovernance(governance).proposeJob(job);
            jobProposalDelay[job] = now.add(UNBOND);
        }
        emit SubmitJob(job, liquidity, msg.sender, block.number, amount);
    }

    function applyCreditToJob(address provider, address liquidity, address job) external {
        require(liquidityAccepted[liquidity], "addLiquidityToJob: !pair");
        require(liquidityApplied[provider][liquidity][job] != 0, "credit: no bond");
        require(liquidityApplied[provider][liquidity][job] < now, "credit: bonding");
        uint _liquidity = Keep3rbLibrary.getReserve(liquidity, address(this));
        uint _credit = _liquidity.mul(liquidityAmount[provider][liquidity][job]).div(IERC20(liquidity).totalSupply());
        _mint(address(this), _credit);
        credits[job][address(this)] = credits[job][address(this)].add(_credit);
        liquidityAmount[provider][liquidity][job] = 0;

        emit ApplyCredit(job, liquidity, provider, block.number, _credit);
    }

    function unbondLiquidityFromJob(address liquidity, address job, uint amount) external {
        require(liquidityAmount[msg.sender][liquidity][job] == 0, "credit: pending credit");
        liquidityUnbonding[msg.sender][liquidity][job] = now.add(UNBOND);
        liquidityAmountsUnbonding[msg.sender][liquidity][job] = liquidityAmountsUnbonding[msg.sender][liquidity][job].add(amount);
        require(liquidityAmountsUnbonding[msg.sender][liquidity][job] <= liquidityProvided[msg.sender][liquidity][job], "unbondLiquidityFromJob: insufficient funds");

        uint _liquidity = Keep3rbLibrary.getReserve(liquidity, address(this));
        uint _credit = _liquidity.mul(amount).div(IERC20(liquidity).totalSupply());
        if (_credit > credits[job][address(this)]) {
            _burn(address(this), credits[job][address(this)]);
            credits[job][address(this)] = 0;
        } else {
            _burn(address(this), _credit);
            credits[job][address(this)] = credits[job][address(this)].sub(_credit);
        }

        emit UnbondJob(job, liquidity, msg.sender, block.number, amount);
    }

    function removeLiquidityFromJob(address liquidity, address job) external {
        require(liquidityUnbonding[msg.sender][liquidity][job] != 0, "removeJob: unbond");
        require(liquidityUnbonding[msg.sender][liquidity][job] < now, "removeJob: unbonding");
        uint _amount = liquidityAmountsUnbonding[msg.sender][liquidity][job];
        liquidityProvided[msg.sender][liquidity][job] = liquidityProvided[msg.sender][liquidity][job].sub(_amount);
        liquidityAmountsUnbonding[msg.sender][liquidity][job] = 0;
        IERC20(liquidity).safeTransfer(msg.sender, _amount);

        emit RemoveJob(job, liquidity, msg.sender, block.number, _amount);
    }

    function mint(uint amount) external {
        require(msg.sender == governance, "mint: !gov");
        _mint(governance, amount);
    }

  
    function burn(uint amount) external {
        _burn(msg.sender, amount);
    }

    function _mint(address dst, uint amount) internal {
        totalSupply = totalSupply.add(amount);
        balances[dst] = balances[dst].add(amount);
        emit Transfer(address(0), dst, amount);
    }

    function _burn(address dst, uint amount) internal {
        require(dst != address(0), "_burn: zero address");
        balances[dst] = balances[dst].sub(amount, "_burn: exceeds balance");
        totalSupply = totalSupply.sub(amount);
        emit Transfer(dst, address(0), amount);
    }

    function worked(address keeper) external {
        workReceipt(keeper, KPRH.getQuoteLimit(_gasUsed.sub(gasleft())));
    }

    function workReceipt(address keeper, uint amount) public {
        require(jobs[msg.sender], "workReceipt: !job");
        require(amount <= KPRH.getQuoteLimit(_gasUsed.sub(gasleft())), "workReceipt: max limit");
        credits[msg.sender][address(this)] = credits[msg.sender][address(this)].sub(amount, "workReceipt: insuffient funds");
        lastJob[keeper] = now;
        _reward(keeper, amount);
        workCompleted[keeper] = workCompleted[keeper].add(amount);
        emit KeeperWorked(address(this), msg.sender, keeper, block.number, amount);
    }

  
    function receipt(address credit, address keeper, uint amount) external {
        require(jobs[msg.sender], "receipt: !job");
        credits[msg.sender][credit] = credits[msg.sender][credit].sub(amount, "workReceipt: insuffient funds");
        lastJob[keeper] = now;
        IERC20(credit).safeTransfer(keeper, amount);
        emit KeeperWorked(credit, msg.sender, keeper, block.number, amount);
    }

  
    function receiptETH(address keeper, uint amount) external {
        require(jobs[msg.sender], "receipt: !job");
        credits[msg.sender][ETH] = credits[msg.sender][ETH].sub(amount, "workReceipt: insuffient funds");
        lastJob[keeper] = now;
        payable(keeper).transfer(amount);
        emit KeeperWorked(ETH, msg.sender, keeper, block.number, amount);
    }

    function _reward(address _from, uint _amount) internal {
        bonds[_from][address(this)] = bonds[_from][address(this)].add(_amount);
        totalBonded = totalBonded.add(_amount);
        _moveDelegates(address(0), delegates[_from], _amount);
        emit Transfer(msg.sender, _from, _amount);
    }

    function _bond(address bonding, address _from, uint _amount) internal {
        bonds[_from][bonding] = bonds[_from][bonding].add(_amount);
        if (bonding == address(this)) {
            totalBonded = totalBonded.add(_amount);
            _moveDelegates(address(0), delegates[_from], _amount);
        }
    }

    function _unbond(address bonding, address _from, uint _amount) internal {
        bonds[_from][bonding] = bonds[_from][bonding].sub(_amount);
        if (bonding == address(this)) {
            totalBonded = totalBonded.sub(_amount);
            _moveDelegates(delegates[_from], address(0), _amount);
        }

    }

    function addJob(address job) external {
        require(msg.sender == governance, "addJob: !gov");
        require(!jobs[job], "addJob: job known");
        jobs[job] = true;
        jobList.push(job);
        emit JobAdded(job, block.number, msg.sender);
    }

  
    function getJobs() external view returns (address[] memory) {
        return jobList;
    }

 
    function removeJob(address job) external {
        require(msg.sender == governance, "removeJob: !gov");
        jobs[job] = false;
        emit JobRemoved(job, block.number, msg.sender);
    }

    function setKeep3rHelper(IKeep3rbHelper _kprh) external {
        require(msg.sender == governance, "setKeep3rHelper: !gov");
        KPRH = _kprh;
    }

  
    function setGovernance(address _governance) external {
        require(msg.sender == governance, "setGovernance: !gov");
        pendingGovernance = _governance;
    }

    /**
     * @notice Allows pendingGovernance to accept their role as governance (protection pattern)
     */
    function acceptGovernance() external {
        require(msg.sender == pendingGovernance, "acceptGovernance: !pendingGov");
        governance = pendingGovernance;
    }

    function isKeeper(address keeper) external returns (bool) {
        _gasUsed = gasleft();
        return keepers[keeper];
    }

    function isMinKeeper(address keeper, uint minBond, uint earned, uint age) external returns (bool) {
        _gasUsed = gasleft();
        return keepers[keeper]
                && bonds[keeper][address(this)].add(votes[keeper]) >= minBond
                && workCompleted[keeper] >= earned
                && now.sub(firstSeen[keeper]) >= age;
    }

  
    function isBondedKeeper(address keeper, address bond, uint minBond, uint earned, uint age) external returns (bool) {
        _gasUsed = gasleft();
        return keepers[keeper]
                && bonds[keeper][bond] >= minBond
                && workCompleted[keeper] >= earned
                && now.sub(firstSeen[keeper]) >= age;
    }

 
    function bond(address bonding, uint amount) external nonReentrant {
        require(!blacklist[msg.sender], "bond: blacklisted");
        bondings[msg.sender][bonding] = now.add(BOND);
        if (bonding == address(this)) {
            _transferTokens(msg.sender, address(this), amount);
        } else {
            uint _before = IERC20(bonding).balanceOf(address(this));
            IERC20(bonding).safeTransferFrom(msg.sender, address(this), amount);
            amount = IERC20(bonding).balanceOf(address(this)).sub(_before);
        }
        pendingbonds[msg.sender][bonding] = pendingbonds[msg.sender][bonding].add(amount);
        emit KeeperBonding(msg.sender, block.number, bondings[msg.sender][bonding], amount);
    }

   
    function getKeepers() external view returns (address[] memory) {
        return keeperList;
    }

  
    function activate(address bonding) external {
        require(!blacklist[msg.sender], "activate: blacklisted");
        require(bondings[msg.sender][bonding] != 0 && bondings[msg.sender][bonding] < now, "activate: bonding");
        _activate(msg.sender, bonding);
    }
    
    function _activate(address keeper, address bonding) internal {
        if (firstSeen[keeper] == 0) {
          firstSeen[keeper] = now;
          keeperList.push(keeper);
          lastJob[keeper] = now;
        }
        keepers[keeper] = true;
        _bond(bonding, keeper, pendingbonds[keeper][bonding]);
        pendingbonds[keeper][bonding] = 0;
        emit KeeperBonded(keeper, block.number, block.timestamp, bonds[keeper][bonding]);
    }

  
    function unbond(address bonding, uint amount) external {
        unbondings[msg.sender][bonding] = now.add(UNBOND);
        _unbond(bonding, msg.sender, amount);
        partialUnbonding[msg.sender][bonding] = partialUnbonding[msg.sender][bonding].add(amount);
        emit KeeperUnbonding(msg.sender, block.number, unbondings[msg.sender][bonding], amount);
    }

  
    function withdraw(address bonding) external nonReentrant {
        require(unbondings[msg.sender][bonding] != 0 && unbondings[msg.sender][bonding] < now, "withdraw: unbonding");
        require(!disputes[msg.sender], "withdraw: disputes");

        if (bonding == address(this)) {
            _transferTokens(address(this), msg.sender, partialUnbonding[msg.sender][bonding]);
        } else {
            IERC20(bonding).safeTransfer(msg.sender, partialUnbonding[msg.sender][bonding]);
        }
        emit KeeperUnbound(msg.sender, block.number, block.timestamp, partialUnbonding[msg.sender][bonding]);
        partialUnbonding[msg.sender][bonding] = 0;
    }

   
    function dispute(address keeper) external {
        require(msg.sender == governance, "dispute: !gov");
        disputes[keeper] = true;
        emit KeeperDispute(keeper, block.number);
    }

  
    function slash(address bonded, address keeper, uint amount) public nonReentrant {
        require(msg.sender == governance, "slash: !gov");
        if (bonded == address(this)) {
            _transferTokens(address(this), governance, amount);
        } else {
            IERC20(bonded).safeTransfer(governance, amount);
        }
        _unbond(bonded, keeper, amount);
        disputes[keeper] = false;
        emit KeeperSlashed(keeper, msg.sender, block.number, amount);
    }

    function revoke(address keeper) external {
        require(msg.sender == governance, "slash: !gov");
        keepers[keeper] = false;
        blacklist[keeper] = true;
        slash(address(this), keeper, bonds[keeper][address(this)]);
    }

  
    function resolve(address keeper) external {
        require(msg.sender == governance, "resolve: !gov");
        disputes[keeper] = false;
        emit KeeperResolved(keeper, block.number);
    }

   
    function allowance(address account, address spender) external view returns (uint) {
        return allowances[account][spender];
    }

  
    function approve(address spender, uint amount) public returns (bool) {
        allowances[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);
        return true;
    }

   
    function permit(address owner, address spender, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", DOMAINSEPARATOR, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "permit: signature");
        require(signatory == owner, "permit: unauthorized");
        require(now <= deadline, "permit: expired");

        allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

    function balanceOf(address account) external view returns (uint) {
        return balances[account];
    }

    
    function transfer(address dst, uint amount) public returns (bool) {
        _transferTokens(msg.sender, dst, amount);
        return true;
    }

  
    function transferFrom(address src, address dst, uint amount) external returns (bool) {
        address spender = msg.sender;
        uint spenderAllowance = allowances[src][spender];

        if (spender != src && spenderAllowance != uint(-1)) {
            uint newAllowance = spenderAllowance.sub(amount, "transferFrom: exceeds spender allowance");
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

        _transferTokens(src, dst, amount);
        return true;
    }

    function _transferTokens(address src, address dst, uint amount) internal {
        require(src != address(0), "_transferTokens: zero address");
        require(dst != address(0), "_transferTokens: zero address");

        balances[src] = balances[src].sub(amount, "_transferTokens: exceeds balance");
        balances[dst] = balances[dst].add(amount, "_transferTokens: overflows");
        emit Transfer(src, dst, amount);
    }

    function _getChainId() internal pure returns (uint) {
        uint chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_kph","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"credit","type":"address"},{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"creditor","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AddCredit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"credit","type":"uint256"}],"name":"ApplyCredit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"address","name":"governance","type":"address"}],"name":"JobAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"address","name":"governance","type":"address"}],"name":"JobRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"activated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"KeeperBonded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"active","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"KeeperBonding","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"KeeperDispute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"KeeperResolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":true,"internalType":"address","name":"slasher","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"slash","type":"uint256"}],"name":"KeeperSlashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deactive","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"KeeperUnbonding","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deactivated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bond","type":"uint256"}],"name":"KeeperUnbound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"credit","type":"address"},{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"keeper","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"KeeperWorked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"credit","type":"uint256"}],"name":"RemoveJob","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"credit","type":"uint256"}],"name":"SubmitJob","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"job","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"credit","type":"uint256"}],"name":"UnbondJob","type":"event"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BOND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAINSEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KPRH","outputs":[{"internalType":"contract IKeep3rbHelper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITYBOND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNBOND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bonding","type":"address"}],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"credit","type":"address"},{"internalType":"address","name":"job","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"job","type":"address"}],"name":"addCreditETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"job","type":"address"}],"name":"addJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"job","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addKPRCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"job","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addLiquidityToJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"voter","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"job","type":"address"}],"name":"applyCreditToJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"}],"name":"approveLiquidity","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":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bonding","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"bondings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"bonds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"credits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"dispute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"disputes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"firstSeen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getJobs","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getKeepers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"},{"internalType":"address","name":"bond","type":"address"},{"internalType":"uint256","name":"minBond","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"age","type":"uint256"}],"name":"isBondedKeeper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"isKeeper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"minBond","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"age","type":"uint256"}],"name":"isMinKeeper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"jobList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"jobProposalDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"jobs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"keeperList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"keepers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastJob","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liquidityAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityAmountsUnbonding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityApplied","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityProvided","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityUnbonding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairs","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"partialUnbonding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGovernance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"pendingbonds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"credit","type":"address"},{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"receipt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"receiptETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"job","type":"address"}],"name":"removeJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"job","type":"address"}],"name":"removeLiquidityFromJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"voter","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"resolve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"revoke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"}],"name":"revokeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IKeep3rbHelper","name":"_kprh","type":"address"}],"name":"setKeep3rHelper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bonded","type":"address"},{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"slash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBonded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bonding","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unbond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidity","type":"address"},{"internalType":"address","name":"job","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unbondLiquidityFromJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"unbondings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"votes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bonding","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"workCompleted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"workReceipt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeper","type":"address"}],"name":"worked","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405260006002556000600f553480156200001b57600080fd5b506040516200615338038062006153833981810160405260208110156200004157600080fd5b50516001600055602080546001600160a01b031916331781556040805180820190915260128152714b656570337220425343204e6574776f726b60701b9101527f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f357f78c16a89c47192c864faba091fac8a0ef455312cc27e7c97824c2cf9bdd1298a620000cd62000133565b604080516020808201959095528082019390935260608301919091523060808084019190915281518084038201815260a0909301909152815191909201209052600180546001600160a01b0319166001600160a01b039290921691909117905562000137565b4690565b608051615ff76200015c60003980611c4a528061427752806147115250615ff76000f3fe6080604052600436106104f75760003560e01c8063782d6fe11161028c578063c57981b51161015a578063e74f8239116100cc578063f39c38a011610085578063f39c38a014611684578063f75f9f7b14611699578063f9d46cf2146116cc578063f9f92be41461171b578063fede70081461174e578063ffb0a4a014611793576104f7565b8063e74f82391461155b578063e7a324dc1461159e578063eb421f3b146115b3578063ec342ad0146115e6578063ec4515dd146115fb578063f1127ed814611625576104f7565b8063d8bff5a51161011e578063d8bff5a514611401578063dd62ed3e14611434578063de63298d1461146f578063deac3541146114a8578063def70844146114e3578063e326ac4314611528576104f7565b8063c57981b5146112e9578063ce6a0880146112fe578063d454019d14611337578063d505accf1461136a578063d8ae6faf146113c8576104f7565b8063a515366a116101fe578063b4b5ea57116101b7578063b4b5ea57146111a2578063b600702a146111d5578063bb49096d14611208578063c1c1d2181461124d578063c3cda52014611262578063c5198abc146112b6576104f7565b8063a515366a1461107c578063a5d059ca146110b5578063a9059cbb146110ee578063ab033ea914611127578063b0103b1a1461115a578063b105e39f1461118d576104f7565b806388b4ac831161025057806388b4ac8314610f415780638d9acd2e14610f8457806395d89b4114610fc75780639af7728414610fdc578063a0712d6814611017578063a39744b514611041576104f7565b8063782d6fe114610e485780637ecebe0014610e815780638071198914610eb45780638322fff214610ee757806383baa69314610efc576104f7565b80634395d8ba116103c9578063603c68601161033b5780636dab5dcf116102f45780636dab5dcf14610d0a5780636fcfff4514610d3057806370a0823114610d7c57806372da828a14610daf57806374a8f10314610de25780637724ff6814610e15576104f7565b8063603c686014610b8e578063637cd7f014610bc957806364bb43ee14610c0457806367da318414610c3757806368581ebd14610c725780636ba42aaa14610cd7576104f7565b806355ea6c471161038d57806355ea6c4714610a98578063587cde1e14610acb5780635aa6e67514610afe5780635c19a95c14610b135780635feeb79414610b46578063603b4d1414610b79576104f7565b80634395d8ba1461098f57806344d96e95146109d45780634b3fde21146109e957806351cff8d914610a2257806352a4de2914610a55576104f7565b80631df0de131161046d57806330adf81f1161042657806330adf81f14610884578063313ce5671461089957806337feca84146108c45780633bbd64bc146108ff5780633d1f0bb91461093257806342966c6814610965576104f7565b80631df0de13146107845780631ff5f3da1461079957806320606b70146107de5780632119a62a146107f3578063238efcbc1461082c57806323b872dd14610841576104f7565b80631778e29c116104bf5780631778e29c1461067357806318160ddd1461069a5780631992d206146106af5780631b44555e146106f45780631b7a1fb2146107275780631c5a9d9c14610751576104f7565b806306fdde03146104fc578063095ea7b31461058657806309aff02b146105d35780630c33c522146106045780631101eb411461062e575b600080fd5b34801561050857600080fd5b506105116117a8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561054b578181015183820152602001610533565b50505050905090810190601f1680156105785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561059257600080fd5b506105bf600480360360408110156105a957600080fd5b506001600160a01b0381351690602001356117d6565b604080519115158252519081900360200190f35b3480156105df57600080fd5b506105e861183d565b604080516001600160a01b039092168252519081900360200190f35b34801561061057600080fd5b506105e86004803603602081101561062757600080fd5b503561184c565b34801561063a57600080fd5b506106716004803603606081101561065157600080fd5b506001600160a01b03813581169160208101359091169060400135611873565b005b34801561067f57600080fd5b50610688611c48565b60408051918252519081900360200190f35b3480156106a657600080fd5b50610688611c6c565b3480156106bb57600080fd5b50610688600480360360608110156106d257600080fd5b506001600160a01b038135811691602081013582169160409091013516611c72565b34801561070057600080fd5b506106886004803603602081101561071757600080fd5b50356001600160a01b0316611c95565b34801561073357600080fd5b506105e86004803603602081101561074a57600080fd5b5035611ca7565b34801561075d57600080fd5b506106716004803603602081101561077457600080fd5b50356001600160a01b0316611cb4565b34801561079057600080fd5b50610688611db7565b3480156107a557600080fd5b506105bf600480360360808110156107bc57600080fd5b506001600160a01b038135169060208101359060408101359060600135611dbe565b3480156107ea57600080fd5b50610688611e80565b3480156107ff57600080fd5b506106716004803603604081101561081657600080fd5b506001600160a01b038135169060200135611ea4565b34801561083857600080fd5b50610671612003565b34801561084d57600080fd5b506105bf6004803603606081101561086457600080fd5b506001600160a01b03813581169160208101359091169060400135612086565b34801561089057600080fd5b50610688612168565b3480156108a557600080fd5b506108ae61218c565b6040805160ff9092168252519081900360200190f35b3480156108d057600080fd5b50610688600480360360408110156108e757600080fd5b506001600160a01b0381358116916020013516612191565b34801561090b57600080fd5b506105bf6004803603602081101561092257600080fd5b50356001600160a01b03166121ae565b34801561093e57600080fd5b506105bf6004803603602081101561095557600080fd5b50356001600160a01b03166121c3565b34801561097157600080fd5b506106716004803603602081101561098857600080fd5b50356121d8565b34801561099b57600080fd5b50610671600480360360608110156109b257600080fd5b506001600160a01b0381358116916020810135821691604090910135166121e2565b3480156109e057600080fd5b5061068861253a565b3480156109f557600080fd5b5061067160048036036040811015610a0c57600080fd5b506001600160a01b038135169060200135612540565b348015610a2e57600080fd5b5061067160048036036020811015610a4557600080fd5b50356001600160a01b031661277b565b348015610a6157600080fd5b5061067160048036036060811015610a7857600080fd5b506001600160a01b038135811691602081013590911690604001356129bf565b348015610aa457600080fd5b5061067160048036036020811015610abb57600080fd5b50356001600160a01b0316612cbc565b348015610ad757600080fd5b506105e860048036036020811015610aee57600080fd5b50356001600160a01b0316612d63565b348015610b0a57600080fd5b506105e8612d7e565b348015610b1f57600080fd5b5061067160048036036020811015610b3657600080fd5b50356001600160a01b0316612d8d565b348015610b5257600080fd5b5061067160048036036020811015610b6957600080fd5b50356001600160a01b0316612d97565b348015610b8557600080fd5b50610688612e20565b348015610b9a57600080fd5b5061067160048036036040811015610bb157600080fd5b506001600160a01b0381358116916020013516612e27565b348015610bd557600080fd5b5061068860048036036040811015610bec57600080fd5b506001600160a01b038135811691602001351661302e565b348015610c1057600080fd5b5061067160048036036020811015610c2757600080fd5b50356001600160a01b031661304b565b348015610c4357600080fd5b5061068860048036036040811015610c5a57600080fd5b506001600160a01b03813581169160200135166130c3565b348015610c7e57600080fd5b50610c876130e0565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610cc3578181015183820152602001610cab565b505050509050019250505060405180910390f35b348015610ce357600080fd5b506105bf60048036036020811015610cfa57600080fd5b50356001600160a01b0316613142565b61067160048036036020811015610d2057600080fd5b50356001600160a01b0316613167565b348015610d3c57600080fd5b50610d6360048036036020811015610d5357600080fd5b50356001600160a01b03166132bd565b6040805163ffffffff9092168252519081900360200190f35b348015610d8857600080fd5b5061068860048036036020811015610d9f57600080fd5b50356001600160a01b03166132d5565b348015610dbb57600080fd5b5061067160048036036020811015610dd257600080fd5b50356001600160a01b03166132f0565b348015610dee57600080fd5b5061067160048036036020811015610e0557600080fd5b50356001600160a01b0316613369565b348015610e2157600080fd5b5061068860048036036020811015610e3857600080fd5b50356001600160a01b031661340a565b348015610e5457600080fd5b5061068860048036036040811015610e6b57600080fd5b506001600160a01b03813516906020013561341c565b348015610e8d57600080fd5b5061068860048036036020811015610ea457600080fd5b50356001600160a01b031661362b565b348015610ec057600080fd5b5061067160048036036020811015610ed757600080fd5b50356001600160a01b031661363d565b348015610ef357600080fd5b506105e86136ef565b348015610f0857600080fd5b5061068860048036036060811015610f1f57600080fd5b506001600160a01b0381358116916020810135821691604090910135166136f4565b348015610f4d57600080fd5b5061067160048036036060811015610f6457600080fd5b506001600160a01b03813581169160208101359091169060400135613717565b348015610f9057600080fd5b5061067160048036036060811015610fa757600080fd5b506001600160a01b038135811691602081013590911690604001356139cd565b348015610fd357600080fd5b50610511613b19565b348015610fe857600080fd5b5061068860048036036040811015610fff57600080fd5b506001600160a01b0381358116916020013516613b3a565b34801561102357600080fd5b506106716004803603602081101561103a57600080fd5b5035613b57565b34801561104d57600080fd5b506106886004803603604081101561106457600080fd5b506001600160a01b0381358116916020013516613bb9565b34801561108857600080fd5b506106716004803603604081101561109f57600080fd5b506001600160a01b038135169060200135613bd6565b3480156110c157600080fd5b50610671600480360360408110156110d857600080fd5b506001600160a01b038135169060200135613e5f565b3480156110fa57600080fd5b506105bf6004803603604081101561111157600080fd5b506001600160a01b038135169060200135613f4d565b34801561113357600080fd5b506106716004803603602081101561114a57600080fd5b50356001600160a01b0316613f63565b34801561116657600080fd5b506105bf6004803603602081101561117d57600080fd5b50356001600160a01b0316613fda565b34801561119957600080fd5b50610c87613fef565b3480156111ae57600080fd5b50610688600480360360208110156111c557600080fd5b50356001600160a01b031661404f565b3480156111e157600080fd5b50610671600480360360208110156111f857600080fd5b50356001600160a01b03166140b3565b34801561121457600080fd5b506106886004803603606081101561122b57600080fd5b506001600160a01b0381358116916020810135821691604090910135166141df565b34801561125957600080fd5b50610688614202565b34801561126e57600080fd5b50610671600480360360c081101561128557600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a00135614209565b3480156112c257600080fd5b50610671600480360360208110156112d957600080fd5b50356001600160a01b0316614447565b3480156112f557600080fd5b5061068861459d565b34801561130a57600080fd5b506106716004803603604081101561132157600080fd5b506001600160a01b0381351690602001356145a2565b34801561134357600080fd5b506106886004803603602081101561135a57600080fd5b50356001600160a01b0316614668565b34801561137657600080fd5b50610671600480360360e081101561138d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561467a565b3480156113d457600080fd5b50610671600480360360408110156113eb57600080fd5b506001600160a01b03813516906020013561491e565b34801561140d57600080fd5b506106886004803603602081101561142457600080fd5b50356001600160a01b0316614a82565b34801561144057600080fd5b506106886004803603604081101561145757600080fd5b506001600160a01b0381358116916020013516614a94565b34801561147b57600080fd5b506106716004803603604081101561149257600080fd5b506001600160a01b038135169060200135614abf565b3480156114b457600080fd5b50610688600480360360408110156114cb57600080fd5b506001600160a01b0381358116916020013516614b8a565b3480156114ef57600080fd5b506106886004803603606081101561150657600080fd5b506001600160a01b038135811691602081013582169160409091013516614ba7565b34801561153457600080fd5b506106886004803603602081101561154b57600080fd5b50356001600160a01b0316614bca565b34801561156757600080fd5b506106716004803603606081101561157e57600080fd5b506001600160a01b03813581169160208101359091169060400135614bdc565b3480156115aa57600080fd5b50610688614d2d565b3480156115bf57600080fd5b506105bf600480360360208110156115d657600080fd5b50356001600160a01b0316614d51565b3480156115f257600080fd5b50610688614d66565b34801561160757600080fd5b506105e86004803603602081101561161e57600080fd5b5035614d6c565b34801561163157600080fd5b506116646004803603604081101561164857600080fd5b5080356001600160a01b0316906020013563ffffffff16614d79565b6040805163ffffffff909316835260208301919091528051918290030190f35b34801561169057600080fd5b506105e8614da6565b3480156116a557600080fd5b50610671600480360360208110156116bc57600080fd5b50356001600160a01b0316614db5565b3480156116d857600080fd5b506105bf600480360360a08110156116ef57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135614e5f565b34801561172757600080fd5b506105bf6004803603602081101561173e57600080fd5b50356001600160a01b0316614f10565b34801561175a57600080fd5b506106886004803603606081101561177157600080fd5b506001600160a01b038135811691602081013582169160409091013516614f25565b34801561179f57600080fd5b50610c87614f48565b604051806040016040528060128152602001714b656570337220425343204e6574776f726b60701b81525081565b3360008181526006602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6001546001600160a01b031681565b601f818154811061185957fe5b6000918252602090912001546001600160a01b0316905081565b336000908152601b602090815260408083206001600160a01b0387811685529083528184209086168452909152902054156118ee576040805162461bcd60e51b815260206004820152601660248201527518dc99591a5d0e881c195b991a5b99c818dc99591a5d60521b604482015290519081900360640190fd5b6118fb4262127500614fa8565b3360008181526017602090815260408083206001600160a01b038981168086529184528285209089168086529084528285209690965593835260188252808320938352928152828220938252929092529020546119589082614fa8565b3360008181526018602090815260408083206001600160a01b03898116808652918452828520908916808652818552838620889055958552601684528285209185529083528184209484529382529091205491905210156119ea5760405162461bcd60e51b815260040180806020018281038252602a815260200180615f51602a913960400191505060405180910390fd5b6040805163cbc3ab5360e01b81526001600160a01b03851660048201523060248201529051600091733ef349d4cfff5d4e802a1f64e8e61311699132c29163cbc3ab5391604480820192602092909190829003018186803b158015611a4e57600080fd5b505af4158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b5051604080516318160ddd60e01b81529051919250600091611b01916001600160a01b038816916318160ddd91600480820192602092909190829003018186803b158015611ac557600080fd5b505afa158015611ad9573d6000803e3d6000fd5b505050506040513d6020811015611aef57600080fd5b5051611afb8486614feb565b90615043565b6001600160a01b0385166000908152601560209081526040808320308452909152902054909150811115611b87576001600160a01b038416600090815260156020908152604080832030808552925290912054611b5e919061506e565b6001600160a01b0384166000908152601560209081526040808320308452909152812055611be4565b611b91308261506e565b6001600160a01b0384166000908152601560209081526040808320308452909152902054611bbf908261516f565b6001600160a01b03851660009081526015602090815260408083203084529091529020555b336001600160a01b0316856001600160a01b0316856001600160a01b03167f6d962fe34dd0cf9a9df3e12a7b8ddfe5f790b3f11668553455d7b52db70a07be4387604051808381526020018281526020019250505060405180910390a45050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025481565b601b60209081526000938452604080852082529284528284209052825290205481565b60136020526000908152604090205481565b6023818154811061185957fe5b336000908152601d602052604090205460ff1615611d11576040805162461bcd60e51b81526020600482015260156024820152741858dd1a5d985d194e88189b1858dadb1a5cdd1959605a1b604482015290519081900360640190fd5b3360009081526009602090815260408083206001600160a01b038516845290915290205415801590611d6557503360009081526009602090815260408083206001600160a01b038516845290915290205442115b611daa576040805162461bcd60e51b815260206004820152601160248201527061637469766174653a20626f6e64696e6760781b604482015290519081900360640190fd5b611db4338261519a565b50565b6203f48081565b60005a6024556001600160a01b0385166000908152601c602052604090205460ff168015611e2357506001600160a01b0385166000908152600e6020908152604080832054600d8352818420308552909252909120548591611e209190614fa8565b10155b8015611e4757506001600160a01b0385166000908152601360205260409020548311155b8015611e7757506001600160a01b0385166000908152601060205260409020548290611e7490429061516f565b10155b95945050505050565b7f797cfab58fcb15f590eb8e4252d5c228ff88f94f907e119e80c4393a946e8f3581565b3360009081526014602052604090205460ff16611ef8576040805162461bcd60e51b815260206004820152600d60248201526c3932b1b2b4b83a1d1010b537b160991b604482015290519081900360640190fd5b604080518082018252601d81527f776f726b526563656970743a20696e7375666669656e742066756e647300000060208083019190915233600090815260158252838120600e82529091529190912054611f539183906152e8565b336000908152601560209081526040808320600e84528252808320939093556001600160a01b0385168083526012909152828220429055915183156108fc0291849190818181858888f19350505050158015611fb3573d6000803e3d6000fd5b50604080514381526020810183905281516001600160a01b038516923392600e927f3cda93551ad083704be19fabbd7c3eb94d88f6e72ff221bdea9017e52e4144e8929181900390910190a45050565b6021546001600160a01b03163314612062576040805162461bcd60e51b815260206004820152601d60248201527f616363657074476f7665726e616e63653a202170656e64696e67476f76000000604482015290519081900360640190fd5b602154602080546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0383166000818152600660209081526040808320338085529252822054919290919082148015906120c057506000198114155b156121515760006120ec85604051806060016040528060278152602001615f9b602791398491906152e8565b6001600160a01b0380891660008181526006602090815260408083209489168084529482529182902085905581518581529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a3505b61215c86868661537f565b50600195945050505050565b7f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e981565b601281565b600960209081526000928352604080842090915290825290205481565b601c6020526000908152604090205460ff1681565b60146020526000908152604090205460ff1681565b611db4338261506e565b6001600160a01b03821660009081526022602052604090205460ff1661224a576040805162461bcd60e51b815260206004820152601860248201527730b2322634b8bab4b234ba3caa37a537b11d1010b830b4b960411b604482015290519081900360640190fd5b6001600160a01b038084166000908152601a6020908152604080832086851684528252808320938516835292905220546122bd576040805162461bcd60e51b815260206004820152600f60248201526e18dc99591a5d0e881b9bc8189bdb99608a1b604482015290519081900360640190fd5b6001600160a01b038084166000908152601a6020908152604080832086851684528252808320938516835292905220544211612332576040805162461bcd60e51b815260206004820152600f60248201526e6372656469743a20626f6e64696e6760881b604482015290519081900360640190fd5b6040805163cbc3ab5360e01b81526001600160a01b03841660048201523060248201529051600091733ef349d4cfff5d4e802a1f64e8e61311699132c29163cbc3ab5391604480820192602092909190829003018186803b15801561239657600080fd5b505af41580156123aa573d6000803e3d6000fd5b505050506040513d60208110156123c057600080fd5b5051604080516318160ddd60e01b81529051919250600091612474916001600160a01b038716916318160ddd91600480820192602092909190829003018186803b15801561240d57600080fd5b505afa158015612421573d6000803e3d6000fd5b505050506040513d602081101561243757600080fd5b50516001600160a01b038088166000908152601b602090815260408083208a85168452825280832093891683529290522054611afb908590614feb565b9050612480308261553c565b6001600160a01b03831660009081526015602090815260408083203084529091529020546124ae9082614fa8565b6001600160a01b038085166000818152601560209081526040808320308452825280832095909555898416808352601b8252858320948a168084529482528583208484528252858320929092558451438152908101869052845191947fa90666688fb32254f45a367c38fbcd5f2664432b061a4354d9d3c9a7abcbec5b92918290030190a45050505050565b600f5481565b3360009081526014602052604090205460ff16612598576040805162461bcd60e51b81526020600482015260116024820152703bb7b935a932b1b2b4b83a1d1010b537b160791b604482015290519081900360640190fd5b6001546001600160a01b031663525ea6316125b65a6024549061516f565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156125ea57600080fd5b505afa1580156125fe573d6000803e3d6000fd5b505050506040513d602081101561261457600080fd5b5051811115612663576040805162461bcd60e51b81526020600482015260166024820152751ddbdc9ad49958d95a5c1d0e881b585e081b1a5b5a5d60521b604482015290519081900360640190fd5b604080518082018252601d81527f776f726b526563656970743a20696e7375666669656e742066756e64730000006020808301919091523360009081526015825283812030825290915291909120546126bd9183906152e8565b3360009081526015602090815260408083203084528252808320939093556001600160a01b038516825260129052204290556126f982826155b5565b6001600160a01b03821660009081526013602052604090205461271c9082614fa8565b6001600160a01b03831660008181526013602090815260409182902093909355805143815292830184905280519192339230927f3cda93551ad083704be19fabbd7c3eb94d88f6e72ff221bdea9017e52e4144e8928290030190a45050565b600260005414156127c1576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b60026000908155338152600a602090815260408083206001600160a01b0385168452909152902054158015906128195750336000908152600a602090815260408083206001600160a01b038516845290915290205442115b612860576040805162461bcd60e51b815260206004820152601360248201527277697468647261773a20756e626f6e64696e6760681b604482015290519081900360640190fd5b3360009081526011602052604090205460ff16156128ba576040805162461bcd60e51b815260206004820152601260248201527177697468647261773a20646973707574657360701b604482015290519081900360640190fd5b6001600160a01b0381163014156128ff57336000818152600b602090815260408083206001600160a01b03861684529091529020546128fa91309161537f565b61292e565b336000818152600b602090815260408083206001600160a01b03861680855292529091205461292e929061566e565b336000818152600b602090815260408083206001600160a01b038616845282529182902054825143815242928101929092528183015290517f095ae150bb74a0755c30809eb8d4aa810b63b66b9ca96a1945bbb03d809df2e99181900360600190a2336000908152600b602090815260408083206001600160a01b0394909416835292905290812081905560019055565b60026000541415612a05576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b600260009081556001600160a01b03841681526022602052604090205460ff16612a71576040805162461bcd60e51b815260206004820152601860248201527730b2322634b8bab4b234ba3caa37a537b11d1010b830b4b960411b604482015290519081900360640190fd5b612a866001600160a01b0384163330846156c5565b3360009081526016602090815260408083206001600160a01b0387811685529083528184209086168452909152902054612ac09082614fa8565b3360009081526016602090815260408083206001600160a01b0388811685529083528184209087168452909152902055612afd426203f480614fa8565b336000818152601a602090815260408083206001600160a01b0389811680865291845282852090891680865290845282852096909655938352601b825280832093835292815282822093825292909252902054612b5a9082614fa8565b336000908152601b602090815260408083206001600160a01b038881168552908352818420908716845282528083209390935560149052205460ff16158015612bba57506001600160a01b03821660009081526019602052604090205442115b15612c55576020546040805163dc380cbb60e01b81526001600160a01b0385811660048301529151919092169163dc380cbb91602480830192600092919082900301818387803b158015612c0d57600080fd5b505af1158015612c21573d6000803e3d6000fd5b50505050612c3b6212750042614fa890919063ffffffff16565b6001600160a01b0383166000908152601960205260409020555b336001600160a01b0316836001600160a01b0316836001600160a01b03167fe1cb44a16adbd63a44f65c279b23b8f447b2c6e120a2bc7f004758b446e05ed14385604051808381526020018281526020019250505060405180910390a45050600160005550565b6020546001600160a01b03163314612d0b576040805162461bcd60e51b815260206004820152600d60248201526c3932b9b7b63b329d1010b3b7bb60991b604482015290519081900360640190fd5b6001600160a01b038116600081815260116020908152604091829020805460ff19169055815143815291517f7574a4a2c81b3099d59aaf15526ea966e1e2886afd21bf4a350af7af22db3a709281900390910190a250565b6003602052600090815260409020546001600160a01b031681565b6020546001600160a01b031681565b611db43382615725565b600154611db49082906001600160a01b031663525ea631612dbb5a6024549061516f565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612def57600080fd5b505afa158015612e03573d6000803e3d6000fd5b505050506040513d6020811015612e1957600080fd5b5051612540565b6212750081565b3360009081526017602090815260408083206001600160a01b0386811685529083528184209085168452909152902054612e9c576040805162461bcd60e51b81526020600482015260116024820152701c995b5bdd99529bd88e881d5b989bdb99607a1b604482015290519081900360640190fd5b3360009081526017602090815260408083206001600160a01b03868116855290835281842090851684529091529020544211612f16576040805162461bcd60e51b815260206004820152601460248201527372656d6f76654a6f623a20756e626f6e64696e6760601b604482015290519081900360640190fd5b3360008181526018602090815260408083206001600160a01b038781168086529184528285209087168086529084528285205495855260168452828520918552908352818420908452909152902054612f6f908261516f565b3360008181526016602090815260408083206001600160a01b038981168086529184528285209089168086529084528285209690965584845260188352818420818552835281842095845294909152812055612fcc91908361566e565b336001600160a01b0316836001600160a01b0316836001600160a01b03167fb69fc9f6d19ed402461251491f86c736bfcbe966e9584d3fb8a0057b313b69204385604051808381526020018281526020019250505060405180910390a4505050565b601560209081526000928352604080842090915290825290205481565b6020546001600160a01b031633146130a2576040805162461bcd60e51b81526020600482015260156024820152743932bb37b5b2a634b8bab4b234ba3c9d1010b3b7bb60591b604482015290519081900360640190fd5b6001600160a01b03166000908152602260205260409020805460ff19169055565b600b60209081526000928352604080842090915290825290205481565b6060601f80548060200260200160405190810160405280929190818152602001828054801561313857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161311a575b5050505050905090565b60005a602455506001600160a01b03166000908152601c602052604090205460ff1690565b6001600160a01b03811660009081526014602052604090205460ff166131c9576040805162461bcd60e51b815260206004820152601260248201527130b23221b932b234ba22aa241d1010b537b160711b604482015290519081900360640190fd5b60006131dc612710611afb346032614feb565b90506132166131eb348361516f565b6001600160a01b0384166000908152601560209081526040808320600e845290915290205490614fa8565b6001600160a01b038084166000908152601560209081526040808320600e8452825280832094909455549251929091169183156108fc0291849190818181858888f1935050505015801561326e573d6000803e3d6000fd5b5060408051438152346020820152815133926001600160a01b03861692600e927fb97975ea9bf5ae2173b9ea765214622396032aba11cd5cc1450c760ac80d059a929181900390910190a45050565b60056020526000908152604090205463ffffffff1681565b6001600160a01b031660009081526007602052604090205490565b6020546001600160a01b03163314613347576040805162461bcd60e51b815260206004820152601560248201527439b2ba25b2b2b819b92432b63832b91d1010b3b7bb60591b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6020546001600160a01b031633146133b6576040805162461bcd60e51b815260206004820152600b60248201526a39b630b9b41d1010b3b7bb60a91b604482015290519081900360640190fd5b6001600160a01b0381166000908152601c60209081526040808320805460ff19908116909155601d835281842080549091166001179055600d825280832030808552925290912054611db491908390614bdc565b60196020526000908152604090205481565b6000438210613463576040805162461bcd60e51b815260206004820152600e60248201526d33b2ba283934b7b92b37ba32b99d60911b604482015290519081900360640190fd5b6001600160a01b03831660009081526005602052604090205463ffffffff1680613491576000915050611837565b6001600160a01b038416600090815260046020908152604080832063ffffffff600019860181168552925290912054168310613500576001600160a01b03841660009081526004602090815260408083206000199490940163ffffffff16835292905220600101549050611837565b6001600160a01b038416600090815260046020908152604080832083805290915290205463ffffffff1683101561353b576000915050611837565b600060001982015b8163ffffffff168163ffffffff1611156135f457600282820363ffffffff1604810361356d615f19565b506001600160a01b038716600090815260046020908152604080832063ffffffff8086168552908352928190208151808301909252805490931680825260019093015491810191909152908714156135cf576020015194506118379350505050565b805163ffffffff168711156135e6578193506135ed565b6001820392505b5050613543565b506001600160a01b038516600090815260046020908152604080832063ffffffff9094168352929052206001015491505092915050565b60086020526000908152604090205481565b6020546001600160a01b0316331461368e576040805162461bcd60e51b815260206004820152600f60248201526e3932b6b7bb32a537b11d1010b3b7bb60891b604482015290519081900360640190fd5b6001600160a01b038116600081815260146020908152604091829020805460ff191690558151438152339181019190915281517f2ca18fdfae50f1042480d285d21f6706aa6abbd567d60a044b5bec07ccfee648929181900390910190a250565b600e81565b601860209081526000938452604080852082529284528284209052825290205481565b6002600054141561375d576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b600260009081556001600160a01b03831681526014602052604090205460ff166137c3576040805162461bcd60e51b815260206004820152601260248201527130b23221b932b234ba22aa241d1010b537b160711b604482015290519081900360640190fd5b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561381257600080fd5b505afa158015613826573d6000803e3d6000fd5b505050506040513d602081101561383c57600080fd5b505190506138556001600160a01b0385163330856156c5565b60006138da82866001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156138a857600080fd5b505afa1580156138bc573d6000803e3d6000fd5b505050506040513d60208110156138d257600080fd5b50519061516f565b905060006138ef612710611afb846032614feb565b905061392a6138fe838361516f565b6001600160a01b038088166000908152601560209081526040808320938c168352929052205490614fa8565b6001600160a01b0380871660009081526015602090815260408083208b851680855290835292209390935591546139639291168361566e565b336001600160a01b0316856001600160a01b0316876001600160a01b03167fb97975ea9bf5ae2173b9ea765214622396032aba11cd5cc1450c760ac80d059a4386604051808381526020018281526020019250505060405180910390a45050600160005550505050565b3360009081526014602052604090205460ff16613a21576040805162461bcd60e51b815260206004820152600d60248201526c3932b1b2b4b83a1d1010b537b160991b604482015290519081900360640190fd5b604080518082018252601d81527f776f726b526563656970743a20696e7375666669656e742066756e6473000000602080830191909152336000908152601582528381206001600160a01b03881682529091529190912054613a849183906152e8565b3360009081526015602090815260408083206001600160a01b0388811680865291845282852095909555938616835260129091529020429055613ac890838361566e565b604080514381526020810183905281516001600160a01b03808616933393918816927f3cda93551ad083704be19fabbd7c3eb94d88f6e72ff221bdea9017e52e4144e89281900390910190a4505050565b6040518060400160405280600581526020016425a819a92160d91b81525081565b600a60209081526000928352604080842090915290825290205481565b6020546001600160a01b03163314613ba3576040805162461bcd60e51b815260206004820152600a60248201526936b4b73a1d1010b3b7bb60b11b604482015290519081900360640190fd5b602054611db4906001600160a01b03168261553c565b600d60209081526000928352604080842090915290825290205481565b60026000541415613c1c576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b60026000908155338152601d602052604090205460ff1615613c79576040805162461bcd60e51b8152602060048201526011602482015270189bdb990e88189b1858dadb1a5cdd1959607a1b604482015290519081900360640190fd5b613c864262015180614fa8565b3360009081526009602090815260408083206001600160a01b038716808552925290912091909155301415613cc557613cc033308361537f565b613dac565b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015613d1457600080fd5b505afa158015613d28573d6000803e3d6000fd5b505050506040513d6020811015613d3e57600080fd5b50519050613d576001600160a01b0384163330856156c5565b613da881846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156138a857600080fd5b9150505b336000908152600c602090815260408083206001600160a01b0386168452909152902054613dda9082614fa8565b336000818152600c602090815260408083206001600160a01b03881680855290835281842095909555838352600982528083209483529381529083902054835143815291820152808301849052915190917fa150b7ad789014c0171a2873708daadbdbf87457d90d3896eaf0907e5b225ae4919081900360600190a250506001600055565b613e6c4262127500614fa8565b336000818152600a602090815260408083206001600160a01b0388168452909152902091909155613e9f908390836157d4565b336000908152600b602090815260408083206001600160a01b0386168452909152902054613ecd9082614fa8565b336000818152600b602090815260408083206001600160a01b03881680855290835281842095909555838352600a82528083209483529381529083902054835143815291820152808301849052915190917f50eca01e7e4362bc0279a45c4fbe68f263771dd3418b0a29c93008759f433b2e919081900360600190a25050565b6000613f5a33848461537f565b50600192915050565b6020546001600160a01b03163314613fb8576040805162461bcd60e51b815260206004820152601360248201527239b2ba23b7bb32b93730b731b29d1010b3b7bb60691b604482015290519081900360640190fd5b602180546001600160a01b0319166001600160a01b0392909216919091179055565b60116020526000908152604090205460ff1681565b6060601e805480602002602001604051908101604052809291908181526020018280548015613138576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161311a575050505050905090565b6001600160a01b03811660009081526005602052604081205463ffffffff168061407a5760006140ac565b6001600160a01b038316600090815260046020908152604080832063ffffffff60001986011684529091529020600101545b9392505050565b6020546001600160a01b0316331461410b576040805162461bcd60e51b815260206004820152601660248201527530b8383937bb32a634b8bab4b234ba3c9d1010b3b7bb60511b604482015290519081900360640190fd5b6001600160a01b03811660009081526022602052604090205460ff1615614179576040805162461bcd60e51b815260206004820152601760248201527f617070726f76654c69717569646974793a202170616972000000000000000000604482015290519081900360640190fd5b6001600160a01b03166000818152602260205260408120805460ff191660019081179091556023805491820181559091527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300180546001600160a01b0319169091179055565b601760209081526000938452604080852082529284528284209052825290205481565b6201518081565b604080517f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc6020808301919091526001600160a01b038916828401526060820188905260808083018890528351808403909101815260a08301845280519082012061190160f01b60c08401527f000000000000000000000000000000000000000000000000000000000000000060c284015260e2808401829052845180850390910181526101028401808652815191840191909120600091829052610122850180875281905260ff891661014286015261016285018890526101828501879052945191949390926001926101a280840193601f198301929081900390910190855afa15801561431c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614379576040805162461bcd60e51b815260206004820152601260248201527164656c656761746542795369673a2073696760701b604482015290519081900360640190fd5b6001600160a01b038116600090815260086020526040902080546001810190915588146143e4576040805162461bcd60e51b815260206004820152601460248201527364656c656761746542795369673a206e6f6e636560601b604482015290519081900360640190fd5b86421115614432576040805162461bcd60e51b815260206004820152601660248201527519195b1959d85d19509e54da59ce88195e1c1a5c995960521b604482015290519081900360640190fd5b61443c818a615725565b505050505050505050565b6020546001600160a01b03163314614495576040805162461bcd60e51b815260206004820152600c60248201526b30b2322537b11d1010b3b7bb60a11b604482015290519081900360640190fd5b6001600160a01b03811660009081526014602052604090205460ff16156144f7576040805162461bcd60e51b815260206004820152601160248201527030b2322537b11d103537b11035b737bbb760791b604482015290519081900360640190fd5b6001600160a01b0381166000818152601460209081526040808320805460ff19166001908117909155601f805491820181559093527fa03837a25210ee280c2113ff4b77ca23440b19d4866cca721c801278fd08d80790920180546001600160a01b031916841790558151438152339181019190915281517f3d9884fbd11fce9188657c4bcfda7491d3316ce97bd234d981b7be1f012a852f929181900390910190a250565b603281565b6020546001600160a01b031633146145f2576040805162461bcd60e51b815260206004820152600e60248201526d30b2322b37ba32b99d1010b3b7bb60911b604482015290519081900360640190fd5b6001600160a01b0382166000908152600e6020526040902054614615908261516f565b6001600160a01b0383166000908152600e6020526040902055600f5461463b908261516f565b600f556001600160a01b0380831660009081526003602052604081205461466492169083615869565b5050565b60126020526000908152604090205481565b6001600160a01b0380881660008181526008602090815260408083208054600180820190925582517f5fae9ec55a1e547936e0e74d606b44cd5f912f9adcd0bba561fea62d570259e98186015280840196909652958c166060860152608085018b905260a085019590955260c08085018a90528151808603909101815260e08501825280519083012061190160f01b6101008601527f000000000000000000000000000000000000000000000000000000000000000061010286015261012280860182905282518087039091018152610142860180845281519185019190912090859052610162860180845281905260ff8a166101828701526101a286018990526101c2860188905291519095919491926101e2808401939192601f1981019281900390910190855afa1580156147b5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614811576040805162461bcd60e51b81526020600482015260116024820152707065726d69743a207369676e617475726560781b604482015290519081900360640190fd5b896001600160a01b0316816001600160a01b03161461486e576040805162461bcd60e51b81526020600482015260146024820152731c195c9b5a5d0e881d5b985d5d1a1bdc9a5e995960621b604482015290519081900360640190fd5b864211156148b5576040805162461bcd60e51b815260206004820152600f60248201526e1c195c9b5a5d0e88195e1c1a5c9959608a1b604482015290519081900360640190fd5b6001600160a01b03808b166000818152600660209081526040808320948e16808452948252918290208c905581518c815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a350505050505050505050565b6020546001600160a01b03163314614972576040805162461bcd60e51b815260206004820152601260248201527130b23225a82921b932b234ba1d1010b3b7bb60711b604482015290519081900360640190fd5b6001600160a01b03821660009081526014602052604090205460ff166149d4576040805162461bcd60e51b815260206004820152601260248201527130b23225a82921b932b234ba1d1010b537b160711b604482015290519081900360640190fd5b6001600160a01b0382166000908152601560209081526040808320308452909152902054614a029082614fa8565b6001600160a01b038316600090815260156020908152604080832030808552925290912091909155614a34908261553c565b6040805143815260208101839052815133926001600160a01b0386169230927fb97975ea9bf5ae2173b9ea765214622396032aba11cd5cc1450c760ac80d059a929181900390910190a45050565b600e6020526000908152604090205481565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6020546001600160a01b03163314614b0f576040805162461bcd60e51b815260206004820152600e60248201526d30b2322b37ba32b99d1010b3b7bb60911b604482015290519081900360640190fd5b614b19823061519a565b6001600160a01b0382166000908152600e6020526040902054614b3c9082614fa8565b6001600160a01b0383166000908152600e6020526040902055600f54614b629082614fa8565b600f556001600160a01b03808316600090815260036020526040812054614664921683615869565b600c60209081526000928352604080842090915290825290205481565b601660209081526000938452604080852082529284528284209052825290205481565b60106020526000908152604090205481565b60026000541415614c22576040805162461bcd60e51b815260206004820152601f6024820152600080516020615f31833981519152604482015290519081900360640190fd5b60026000556020546001600160a01b03163314614c74576040805162461bcd60e51b815260206004820152600b60248201526a39b630b9b41d1010b3b7bb60a91b604482015290519081900360640190fd5b6001600160a01b038316301415614ca257602054614c9d9030906001600160a01b03168361537f565b614cbc565b602054614cbc906001600160a01b0385811691168361566e565b614cc78383836157d4565b6001600160a01b038216600081815260116020908152604091829020805460ff19169055815143815290810184905281513393927ff7e41ea76f0e7b22ba17dc4cc01fa75cff34ea24f5efe2874f5e175296259050928290030190a35050600160005550565b7f1ac861a6a8532f3704e1768564a53a32774f00d6cf20ccbbdf60ab61378302bc81565b60226020526000908152604090205460ff1681565b61271081565b601e818154811061185957fe5b60046020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6021546001600160a01b031681565b6020546001600160a01b03163314614e04576040805162461bcd60e51b815260206004820152600d60248201526c3234b9b83aba329d1010b3b7bb60991b604482015290519081900360640190fd5b6001600160a01b038116600081815260116020908152604091829020805460ff19166001179055815143815291517ffb2bdfce35c242f34d4f9633225d3c34a5892d5eae9ce102de6aac188dd25ba09281900390910190a250565b60005a6024556001600160a01b0386166000908152601c602052604090205460ff168015614eb257506001600160a01b038087166000908152600d60209081526040808320938916835292905220548411155b8015614ed657506001600160a01b0386166000908152601360205260409020548311155b8015614f0657506001600160a01b0386166000908152601060205260409020548290614f0390429061516f565b10155b9695505050505050565b601d6020526000908152604090205460ff1681565b601a60209081526000938452604080852082529284528284209052825290205481565b60606023805480602002602001604051908101604052809291908181526020018280548015613138576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161311a575050505050905090565b6000828201838110156140ac576040805162461bcd60e51b81526020600482015260066024820152656164643a202b60d01b604482015290519081900360640190fd5b600082614ffa57506000611837565b8282028284828161500757fe5b04146140ac576040805162461bcd60e51b815260206004820152600660248201526536bab61d101560d11b604482015290519081900360640190fd5b60006140ac8383604051806040016040528060068152602001656469763a202f60d01b8152506159e7565b6001600160a01b0382166150bf576040805162461bcd60e51b81526020600482015260136024820152725f6275726e3a207a65726f206164647265737360681b604482015290519081900360640190fd5b60408051808201825260168152755f6275726e3a20657863656564732062616c616e636560501b6020808301919091526001600160a01b0385166000908152600790915291909120546151139183906152e8565b6001600160a01b038316600090815260076020526040902055600254615139908261516f565b6002556040805182815290516000916001600160a01b03851691600080516020615f7b8339815191529181900360200190a35050565b60006140ac8383604051806040016040528060068152602001657375623a202d60d01b8152506152e8565b6001600160a01b03821660009081526010602052604090205461521f576001600160a01b03821660008181526010602090815260408083204290819055601e8054600181019091557f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b03191690951790945560129091529020555b6001600160a01b038083166000908152601c60209081526040808320805460ff19166001179055600c8252808320938516835292905220546152649082908490615a4c565b6001600160a01b038083166000818152600c60209081526040808320948616808452948252808320839055838352600d825280832094835293815290839020548351438152429281019290925281840152915190917f3d80dd4660c08288217e88c2d45230220fcd3debf16898013243026e6a2aad05919081900360600190a25050565b600081848411156153775760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561533c578181015183820152602001615324565b50505050905090810190601f1680156153695780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0383166153da576040805162461bcd60e51b815260206004820152601d60248201527f5f7472616e73666572546f6b656e733a207a65726f2061646472657373000000604482015290519081900360640190fd5b6001600160a01b038216615435576040805162461bcd60e51b815260206004820152601d60248201527f5f7472616e73666572546f6b656e733a207a65726f2061646472657373000000604482015290519081900360640190fd5b60408051808201825260208082527f5f7472616e73666572546f6b656e733a20657863656564732062616c616e6365818301526001600160a01b03861660009081526007909152919091205461548c9183906152e8565b6001600160a01b0380851660009081526007602081815260408084209590955584518086018652601a81527f5f7472616e73666572546f6b656e733a206f766572666c6f77730000000000008183015293871683525291909120546154f2918390615ae4565b6001600160a01b038084166000818152600760209081526040918290209490945580518581529051919392871692600080516020615f7b83398151915292918290030190a3505050565b6002546155499082614fa8565b6002556001600160a01b03821660009081526007602052604090205461556f9082614fa8565b6001600160a01b0383166000818152600760209081526040808320949094558351858152935192939192600080516020615f7b8339815191529281900390910190a35050565b6001600160a01b0382166000908152600d602090815260408083203084529091529020546155e39082614fa8565b6001600160a01b0383166000908152600d60209081526040808320308452909152902055600f546156149082614fa8565b600f556001600160a01b0380831660009081526003602052604081205461563c921683615869565b6040805182815290516001600160a01b038416913391600080516020615f7b8339815191529181900360200190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526156c0908490615b42565b505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261571f908590615b42565b50505050565b6001600160a01b03808316600081815260036020908152604080832054600d8352818420308552835281842054948452600e909252822054931692909161576c9190614fa8565b6001600160a01b0385811660008181526003602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461571f828483615869565b6001600160a01b038083166000908152600d6020908152604080832093871683529290522054615804908261516f565b6001600160a01b038084166000908152600d60209081526040808320938816808452939091529020919091553014156156c057600f54615844908261516f565b600f556001600160a01b038083166000908152600360205260408120546156c0921690835b816001600160a01b0316836001600160a01b03161415801561588b5750600081115b156156c0576001600160a01b03831615615956576001600160a01b03831660009081526005602052604081205463ffffffff1690816158cb5760006158fd565b6001600160a01b038516600090815260046020908152604080832063ffffffff60001987011684529091529020600101545b9050600061594484604051806040016040528060168152602001755f6d6f7665566f7465733a20756e646572666c6f777360501b815250846152e89092919063ffffffff16565b905061595286848484615cfd565b5050505b6001600160a01b038216156156c0576001600160a01b03821660009081526005602052604081205463ffffffff1690816159915760006159c3565b6001600160a01b038416600090815260046020908152604080832063ffffffff60001987011684529091529020600101545b905060006159d18285614fa8565b90506159df85848484615cfd565b505050505050565b60008183615a365760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561533c578181015183820152602001615324565b506000838581615a4257fe5b0495945050505050565b6001600160a01b038083166000908152600d6020908152604080832093871683529290522054615a7c9082614fa8565b6001600160a01b038084166000908152600d60209081526040808320938816808452939091529020919091553014156156c057600f54615abc9082614fa8565b600f556001600160a01b038083166000908152600360205260408120546156c0921683615869565b60008383018285821015615b395760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561533c578181015183820152602001615324565b50949350505050565b615b54826001600160a01b0316615e7f565b615b9c576040805162461bcd60e51b815260206004820152601460248201527314d85999515490cc8c0e880858dbdb9d1c9858dd60621b604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310615bda5780518252601f199092019160209182019101615bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615c3c576040519150601f19603f3d011682016040523d82523d6000602084013e615c41565b606091505b509150915081615c98576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561571f57808060200190516020811015615cb457600080fd5b505161571f576040805162461bcd60e51b815260206004820152601360248201527214d85999515490cc8c0e88085cdd58d8d95959606a1b604482015290519081900360640190fd5b6000615d3e436040518060400160405280601981526020017f5f7772697465436865636b706f696e743a203332206269747300000000000000815250615ebb565b905060008463ffffffff16118015615d8757506001600160a01b038516600090815260046020908152604080832063ffffffff6000198901811685529252909120548282169116145b15615dc4576001600160a01b038516600090815260046020908152604080832063ffffffff60001989011684529091529020600101829055615e35565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152600484528681208b8616825284528681209551865490861663ffffffff19918216178755925160019687015590815260059092529390208054928801909116919092161790555b604080518481526020810184905281516001600160a01b038816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590615eb357508115155b949350505050565b6000816401000000008410615f115760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561533c578181015183820152602001615324565b509192915050565b60408051808201909152600080825260208201529056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00756e626f6e644c697175696469747946726f6d4a6f623a20696e73756666696369656e742066756e6473ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef7472616e7366657246726f6d3a2065786365656473207370656e64657220616c6c6f77616e6365a2646970667358221220ccf99a096fb94a211e54a616aae056d15fe9255d96d45d31c2779c77ca9ab26164736f6c634300060c0033000000000000000000000000550f3313b771e2d35dad568be2f6948d5db7c5f6

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

000000000000000000000000550f3313b771e2d35dad568be2f6948d5db7c5f6

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000550f3313b771e2d35dad568be2f6948d5db7c5f6


Library Used

Keep3rbLibrary : 0x3ef349d4cfff5d4e802a1f64e8e61311699132c2

Deployed ByteCode Sourcemap

8871:30613:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9131:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37143:205;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37143:205:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;9046:26;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;9046:26:0;;;;;;;;;;;;;;20944:24;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20944:24:0;;:::i;25979:1129::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25979:1129:0;;;;;;;;;;;;;;;;;:::i;:::-;;10184:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9443:27;;;;;;;;;;;;;:::i;20449:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20449:87:0;;;;;;;;;;;;;;;;;;;:::i;19456:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19456:45:0;-1:-1:-1;;;;;19456:45:0;;:::i;21243:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21243:31:0;;:::i;33998:274::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33998:274:0;-1:-1:-1;;;;;33998:274:0;;:::i;17996:43::-;;;;;;;;;;;;;:::i;32409:355::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32409:355:0;;;;;;;;;;;;;;;;;;:::i;10058:119::-;;;;;;;;;;;;;:::i;29683:376::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29683:376:0;;;;;;;;:::i;32093:170::-;;;;;;;;;;;;;:::i;38326:553::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38326:553:0;;;;;;;;;;;;;;;;;:::i;10519:128::-;;;;;;;;;;;;;:::i;9344:35::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18320:60;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18320:60:0;;;;;;;;;;:::i;20590:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20590:39:0;-1:-1:-1;;;;;20590:39:0;;:::i;19575:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19575:36:0;-1:-1:-1;;;;;19575:36:0;;:::i;27947:80::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27947:80:0;;:::i;25174:797::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25174:797:0;;;;;;;;;;;;;;;;;;;:::i;19042:27::-;;;;;;;;;;;;;:::i;28683:567::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28683:567:0;;;;;;;;:::i;35133:673::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35133:673:0;-1:-1:-1;;;;;35133:673:0;;:::i;24344:822::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24344:822:0;;;;;;;;;;;;;;;;;:::i;36784:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36784:198:0;-1:-1:-1;;;;;36784:198:0;;:::i;9544:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9544:45:0;-1:-1:-1;;;;;9544:45:0;;:::i;21041:25::-;;;;;;;;;;;;;:::i;11316:95::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11316:95:0;-1:-1:-1;;;;;11316:95:0;;:::i;28551:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28551:124:0;-1:-1:-1;;;;;28551:124:0;;:::i;17900:37::-;;;;;;;;;;;;;:::i;27116:673::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27116:673:0;;;;;;;;;;:::i;19674:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19674:59:0;;;;;;;;;;:::i;24049:177::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24049:177:0;-1:-1:-1;;;;;24049:177:0;;:::i;18556:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18556:68:0;;;;;;;;;;:::i;31323:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32271:130;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32271:130:0;-1:-1:-1;;;;;32271:130:0;;:::i;21722:354::-;;;;;;;;;;;;;;;;-1:-1:-1;21722:354:0;-1:-1:-1;;;;;21722:354:0;;:::i;9811:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9811:49:0;-1:-1:-1;;;;;9811:49:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;38045:108;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38045:108:0;-1:-1:-1;;;;;38045:108:0;;:::i;31632:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31632:156:0;-1:-1:-1;;;;;31632:156:0;;:::i;36526:246::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36526:246:0;-1:-1:-1;;;;;36526:246:0;;:::i;20218:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20218:48:0;-1:-1:-1;;;;;20218:48:0;;:::i;12263:1191::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12263:1191:0;;;;;;;;:::i;10730:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10730:39:0;-1:-1:-1;;;;;10730:39:0;;:::i;31427:197::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31427:197:0;-1:-1:-1;;;;;31427:197:0;;:::i;18217:42::-;;;;;;;;;;;;;:::i;20078:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20078:97:0;;;;;;;;;;;;;;;;;;;:::i;22084:627::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22084:627:0;;;;;;;;;;;;;;;;;:::i;29262:409::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29262:409:0;;;;;;;;;;;;;;;;;:::i;9242:39::-;;;;;;;;;;;;;:::i;18441:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18441:62:0;;;;;;;;;;:::i;27797:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27797:138:0;;:::i;18814:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18814:57:0;;;;;;;;;;:::i;33131:743::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33131:743:0;;;;;;;;:::i;34753:368::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34753:368:0;;;;;;;;:::i;38167:147::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38167:147:0;;;;;;;;:::i;31800:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31800:170:0;-1:-1:-1;;;;;31800:170:0;;:::i;19243:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19243:40:0;-1:-1:-1;;;;;19243:40:0;;:::i;33887:99::-;;;;;;;;;;;;;:::i;12035:220::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12035:220:0;-1:-1:-1;;;;;12035:220:0;;:::i;23746:295::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23746:295:0;-1:-1:-1;;;;;23746:295:0;;:::i;19936:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19936:90:0;;;;;;;;;;;;;;;;;;;:::i;17788:34::-;;;;;;;;;;;;;:::i;11419:604::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11419:604:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31044:267::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31044:267:0;-1:-1:-1;;;;;31044:267:0;;:::i;18091:29::-;;;;;;;;;;;;;:::i;23058:289::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23058:289:0;;;;;;;;:::i;19348:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19348:39:0;-1:-1:-1;;;;;19348:39:0;;:::i;37361:676::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37361:676:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23355:380::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23355:380:0;;;;;;;;:::i;18942:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18942:37:0;-1:-1:-1;;;;;18942:37:0;;:::i;36995:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36995:136:0;;;;;;;;;;:::i;22719:328::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22719:328:0;;;;;;;;:::i;18690:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18690:64:0;;;;;;;;;;:::i;19798:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19798:89:0;;;;;;;;;;;;;;;;;;;:::i;19135:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19135:41:0;-1:-1:-1;;;;;19135:41:0;;:::i;36027:491::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36027:491:0;;;;;;;;;;;;;;;;;:::i;10318:111::-;;;;;;;;;;;;;:::i;21185:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21185:49:0;-1:-1:-1;;;;;21185:49:0;;:::i;18127:33::-;;;;;;;;;;;;;:::i;20832:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20832:27:0;;:::i;9672:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9672:70:0;;-1:-1:-1;;;;;9672:70:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;21073:32;;;;;;;;;;;;;:::i;35819:196::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35819:196:0;-1:-1:-1;;;;;35819:196:0;;:::i;32776:344::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32776:344:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20701:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20701:41:0;-1:-1:-1;;;;;20701:41:0;;:::i;20311:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20311:88:0;;;;;;;;;;;;;;;;;;;:::i;24234:98::-;;;;;;;;;;;;;:::i;9131:50::-;;;;;;;;;;;;;;-1:-1:-1;;;9131:50:0;;;;:::o;37143:205::-;37234:10;37206:4;37223:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;37223:31:0;;;;;;;;;;;:40;;;37281:37;;;;;;;37206:4;;37223:31;;37234:10;;37281:37;;;;;;;;-1:-1:-1;37336:4:0;37143:205;;;;;:::o;9046:26::-;;;-1:-1:-1;;;;;9046:26:0;;:::o;20944:24::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20944:24:0;;-1:-1:-1;20944:24:0;:::o;25979:1129::-;26100:10;26084:27;;;;:15;:27;;;;;;;;-1:-1:-1;;;;;26084:38:0;;;;;;;;;;;:43;;;;;;;;;;;:48;26076:83;;;;;-1:-1:-1;;;26076:83:0;;;;;;;;;;;;-1:-1:-1;;;26076:83:0;;;;;;;;;;;;;;;26219:15;:3;17930:7;26219;:15::i;:::-;26189:10;26170:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;26170:41:0;;;;;;;;;;;;:46;;;;;;;;;;;;:64;;;;26301:37;;;:25;:37;;;;;:48;;;;;;;;;:53;;;;;;;;;;:65;;26359:6;26301:57;:65::i;:::-;26271:10;26245:37;;;;:25;:37;;;;;;;;-1:-1:-1;;;;;26245:48:0;;;;;;;;;;;;:53;;;;;;;;;;;;:121;;;26442:29;;;:17;:29;;;;;:40;;;;;;;;;:45;;;;;;;;;;26385:53;;;-1:-1:-1;26385:102:0;26377:157;;;;-1:-1:-1;;;26377:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26565:51;;;-1:-1:-1;;;26565:51:0;;-1:-1:-1;;;;;26565:51:0;;;;;;26610:4;26565:51;;;;;;26547:15;;26565:14;;:25;;:51;;;;;;;;;;;;;;;:14;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26565:51:0;26669:31;;;-1:-1:-1;;;26669:31:0;;;;26565:51;;-1:-1:-1;26627:12:0;;26642:59;;-1:-1:-1;;;;;26669:29:0;;;;;:31;;;;;26565:51;;26669:31;;;;;;;;:29;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26669:31:0;26642:22;:10;26657:6;26642:14;:22::i;:::-;:26;;:59::i;:::-;-1:-1:-1;;;;;26726:12:0;;;;;;:7;:12;;;;;;;;26747:4;26726:27;;;;;;;;26627:74;;-1:-1:-1;26716:37:0;;26712:312;;;-1:-1:-1;;;;;26791:12:0;;;;;;:7;:12;;;;;;;;26784:4;26791:27;;;;;;;;;26770:49;;26784:4;26770:5;:49::i;:::-;-1:-1:-1;;;;;26834:12:0;;26864:1;26834:12;;;:7;:12;;;;;;;;26855:4;26834:27;;;;;;;:31;26712:312;;;26898:29;26912:4;26919:7;26898:5;:29::i;:::-;-1:-1:-1;;;;;26972:12:0;;;;;;:7;:12;;;;;;;;26993:4;26972:27;;;;;;;;:40;;27004:7;26972:31;:40::i;:::-;-1:-1:-1;;;;;26942:12:0;;;;;;:7;:12;;;;;;;;26963:4;26942:27;;;;;;;:70;26712:312;27067:10;-1:-1:-1;;;;;27041:59:0;27056:9;-1:-1:-1;;;;;27041:59:0;27051:3;-1:-1:-1;;;;;27041:59:0;;27079:12;27093:6;27041:59;;;;;;;;;;;;;;;;;;;;;;;;25979:1129;;;;;:::o;10184:40::-;;;:::o;9443:27::-;;;;:::o;20449:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19456:45::-;;;;;;;;;;;;;:::o;21243:31::-;;;;;;;;;;33998:274;34072:10;34062:21;;;;:9;:21;;;;;;;;34061:22;34053:56;;;;;-1:-1:-1;;;34053:56:0;;;;;;;;;;;;-1:-1:-1;;;34053:56:0;;;;;;;;;;;;;;;34137:10;34128:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;34128:29:0;;;;;;;;;;:34;;;;:73;;-1:-1:-1;34175:10:0;34166:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;34166:29:0;;;;;;;;;;34198:3;-1:-1:-1;34128:73:0;34120:103;;;;;-1:-1:-1;;;34120:103:0;;;;;;;;;;;;-1:-1:-1;;;34120:103:0;;;;;;;;;;;;;;;34234:30;34244:10;34256:7;34234:9;:30::i;:::-;33998:274;:::o;17996:43::-;18033:6;17996:43;:::o;32409:355::-;32501:4;32529:9;32518:8;:20;-1:-1:-1;;;;;32556:15:0;;;;;;:7;:15;;;;;;;;:94;;;;-1:-1:-1;;;;;;32625:13:0;;;;;;:5;:13;;;;;;;;;32592:5;:13;;;;;32614:4;32592:28;;;;;;;;;32643:7;;32592:47;;:28;:32;:47::i;:::-;:58;;32556:94;:146;;;;-1:-1:-1;;;;;;32671:21:0;;;;;;:13;:21;;;;;;:31;-1:-1:-1;32671:31:0;32556:146;:200;;;;-1:-1:-1;;;;;;32731:17:0;;;;;;:9;:17;;;;;;32753:3;;32723:26;;:3;;:7;:26::i;:::-;:33;;32556:200;32549:207;32409:355;-1:-1:-1;;;;;32409:355:0:o;10058:119::-;10100:77;10058:119;:::o;29683:376::-;29765:10;29760:16;;;;:4;:16;;;;;;;;29752:42;;;;;-1:-1:-1;;;29752:42:0;;;;;;;;;;;;-1:-1:-1;;;29752:42:0;;;;;;;;;;;;;;;29832:69;;;;;;;;;;;;;;;;;;;;29840:10;-1:-1:-1;29832:19:0;;;:7;:19;;;;;18255:3;29832:24;;;;;;;;;;:69;;29861:6;;29832:28;:69::i;:::-;29813:10;29805:19;;;;:7;:19;;;;;;;;18255:3;29805:24;;;;;;;:96;;;;-1:-1:-1;;;;;29912:15:0;;;;;:7;:15;;;;;;29930:3;29912:21;;29944:32;;;;;;;29969:6;;29944:32;;29805:19;29944:32;29969:6;29912:15;29944:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29992:59:0;;;30030:12;29992:59;;;;;;;;;;-1:-1:-1;;;;;29992:59:0;;;30010:10;;18255:3;;29992:59;;;;;;;;;;;29683:376;;:::o;32093:170::-;32163:17;;-1:-1:-1;;;;;32163:17:0;32149:10;:31;32141:73;;;;;-1:-1:-1;;;32141:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32238:17;;32225:10;:30;;-1:-1:-1;;;;;;32225:30:0;-1:-1:-1;;;;;32238:17:0;;;32225:30;;;;;;32093:170::o;38326:553::-;-1:-1:-1;;;;;38485:15:0;;38405:4;38485:15;;;:10;:15;;;;;;;;38440:10;38485:24;;;;;;;;38405:4;;38440:10;;38485:24;38526:14;;;;;:46;;;-1:-1:-1;;38544:16:0;:28;;38526:46;38522:282;;;38589:17;38609:71;38630:6;38609:71;;;;;;;;;;;;;;;;;:16;;:71;:20;:71::i;:::-;-1:-1:-1;;;;;38695:15:0;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;:39;;;38756:36;;;;;;;38589:91;;-1:-1:-1;38695:24:0;;:15;;38756:36;;;;;;;;;38522:282;;38816:33;38832:3;38837;38842:6;38816:15;:33::i;:::-;-1:-1:-1;38867:4:0;;38326:553;-1:-1:-1;;;;;38326:553:0:o;10519:128::-;10561:86;10519:128;:::o;9344:35::-;9377:2;9344:35;:::o;18320:60::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20590:39::-;;;;;;;;;;;;;;;:::o;19575:36::-;;;;;;;;;;;;;;;:::o;27947:80::-;27994:25;28000:10;28012:6;27994:5;:25::i;25174:797::-;-1:-1:-1;;;;;25278:28:0;;;;;;:17;:28;;;;;;;;25270:65;;;;;-1:-1:-1;;;25270:65:0;;;;;;;;;;;;-1:-1:-1;;;25270:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25354:26:0;;;;;;;:16;:26;;;;;;;;:37;;;;;;;;;;:42;;;;;;;;;;25346:75;;;;;-1:-1:-1;;;25346:75:0;;;;;;;;;;;;-1:-1:-1;;;25346:75:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25440:26:0;;;;;;;:16;:26;;;;;;;;:37;;;;;;;;;;:42;;;;;;;;;;25485:3;-1:-1:-1;25432:76:0;;;;;-1:-1:-1;;;25432:76:0;;;;;;;;;;;;-1:-1:-1;;;25432:76:0;;;;;;;;;;;;;;;25537:51;;;-1:-1:-1;;;25537:51:0;;-1:-1:-1;;;;;25537:51:0;;;;;;25582:4;25537:51;;;;;;25519:15;;25537:14;;:25;;:51;;;;;;;;;;;;;;;:14;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25537:51:0;25676:31;;;-1:-1:-1;;;25676:31:0;;;;25537:51;;-1:-1:-1;25599:12:0;;25614:94;;-1:-1:-1;;;;;25676:29:0;;;;;:31;;;;;25537:51;;25676:31;;;;;;;;:29;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25676:31:0;-1:-1:-1;;;;;25629:25:0;;;;;;;:15;25676:31;25629:25;;;;;;;:36;;;;;;;;;;:41;;;;;;;;;;25614:57;;:10;;:14;:57::i;:94::-;25599:109;;25719:29;25733:4;25740:7;25719:5;:29::i;:::-;-1:-1:-1;;;;;25789:12:0;;;;;;:7;:12;;;;;;;;25810:4;25789:27;;;;;;;;:40;;25821:7;25789:31;:40::i;:::-;-1:-1:-1;;;;;25759:12:0;;;;;;;:7;:12;;;;;;;;25780:4;25759:27;;;;;;;:70;;;;25840:25;;;;;;:15;:25;;;;;:36;;;;;;;;;;;;:41;;;;;;;;:45;;;;25903:60;;25941:12;25903:60;;;;;;;;;;25840:25;;25903:60;;;;;;;;;25174:797;;;;;:::o;19042:27::-;;;;:::o;28683:567::-;28764:10;28759:16;;;;:4;:16;;;;;;;;28751:46;;;;;-1:-1:-1;;;28751:46:0;;;;;;;;;;;;-1:-1:-1;;;28751:46:0;;;;;;;;;;;;;;;28826:4;;-1:-1:-1;;;;;28826:4:0;:18;28845:23;28858:9;28845:8;;;:12;:23::i;:::-;28826:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28826:43:0;28816:53;;;28808:88;;;;;-1:-1:-1;;;28808:88:0;;;;;;;;;;;;-1:-1:-1;;;28808:88:0;;;;;;;;;;;;;;;28944:79;;;;;;;;;;;;;;;;;;;;28952:10;-1:-1:-1;28944:19:0;;;:7;:19;;;;;28972:4;28944:34;;;;;;;;;;:79;;28983:6;;28944:38;:79::i;:::-;28915:10;28907:19;;;;:7;:19;;;;;;;;28935:4;28907:34;;;;;;;:116;;;;-1:-1:-1;;;;;29034:15:0;;;;:7;:15;;;29052:3;29034:21;;29066:23;29042:6;29082;29066:7;:23::i;:::-;-1:-1:-1;;;;;29124:21:0;;;;;;:13;:21;;;;;;:33;;29150:6;29124:25;:33::i;:::-;-1:-1:-1;;;;;29100:21:0;;;;;;:13;:21;;;;;;;;;:57;;;;29173:69;;29221:12;29173:69;;;;;;;;;;29100:21;;29201:10;;29194:4;;29173:69;;;;;;;;28683:567;;:::o;35133:673::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;;;35220:10:::1;35209:22:::0;;:10:::1;:22;::::0;;;;;;;-1:-1:-1;;;;;35209:31:0;::::1;::::0;;;;;;;;:36;;::::1;::::0;:77:::1;;-1:-1:-1::0;35260:10:0::1;35249:22;::::0;;;:10:::1;:22;::::0;;;;;;;-1:-1:-1;;;;;35249:31:0;::::1;::::0;;;;;;;;35283:3:::1;-1:-1:-1::0;35209:77:0::1;35201:109;;;::::0;;-1:-1:-1;;;35201:109:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35201:109:0;;;;;;;;;;;;;::::1;;35339:10;35330:20;::::0;;;:8:::1;:20;::::0;;;;;::::1;;35329:21;35321:52;;;::::0;;-1:-1:-1;;;35321:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35321:52:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;35390:24:0;::::1;35409:4;35390:24;35386:250;;;35462:10;35474:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;35474:37:0;::::1;::::0;;;;;;;;35431:81:::1;::::0;35455:4:::1;::::0;35431:15:::1;:81::i;:::-;35386:250;;;35574:10;35586:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;35586:37:0;::::1;::::0;;;;;;;;;35545:79:::1;::::0;35574:10;35545:28:::1;:79::i;:::-;35665:10;35708:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;35708:37:0;::::1;::::0;;;;;;;;;35651:95;;35677:12:::1;35651:95:::0;;35691:15:::1;35651:95:::0;;::::1;::::0;;;;;;;;;;::::1;::::0;;;;;;;::::1;35774:10;35797:1;35757:28:::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;35757:37:0;;;::::1;::::0;;;;;;;;:41;;;1808:1;2113:22;;35133:673::o;24344:822::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;;;-1:-1:-1;;;;;24457:28:0;::::1;::::0;;:17:::1;:28;::::0;;;;;::::1;;24449:65;;;::::0;;-1:-1:-1;;;24449:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24449:65:0;;;;;;;;;;;;;::::1;;24525:69;-1:-1:-1::0;;;;;24525:34:0;::::1;24560:10;24580:4;24587:6:::0;24525:34:::1;:69::i;:::-;24671:10;24653:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;24653:40:0;;::::1;::::0;;;;;;;;:45;;::::1;::::0;;;;;;;;:57:::1;::::0;24703:6;24653:49:::1;:57::i;:::-;24623:10;24605:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;24605:40:0;;::::1;::::0;;;;;;;;:45;;::::1;::::0;;;;;;;:105;24770:22:::1;:3;18033:6;24770:7;:22::i;:::-;24740:10;24723:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;24723:39:0;;::::1;::::0;;;;;;;;;:44;;::::1;::::0;;;;;;;;;:69;;;;24849:27;;;:15:::1;:27:::0;;;;;:38;;;;;;;;;:43;;;;;;;;;;:55:::1;::::0;24897:6;24849:47:::1;:55::i;:::-;24819:10;24803:27;::::0;;;:15:::1;:27;::::0;;;;;;;-1:-1:-1;;;;;24803:38:0;;::::1;::::0;;;;;;;;:43;;::::1;::::0;;;;;;;:101;;;;24922:4:::1;:9:::0;;;;::::1;;24921:10;:41:::0;::::1;;;-1:-1:-1::0;;;;;;24935:21:0;::::1;;::::0;;;:16:::1;:21;::::0;;;;;24959:3:::1;-1:-1:-1::0;24921:41:0::1;24917:167;;;24991:10;::::0;24979:39:::1;::::0;;-1:-1:-1;;;24979:39:0;;-1:-1:-1;;;;;24979:39:0;;::::1;;::::0;::::1;::::0;;;24991:10;;;::::1;::::0;24979:34:::1;::::0;:39;;;;;24991:10:::1;::::0;24979:39;;;;;;;24991:10;;24979:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25057:15;17930:7;25057:3;:7;;:15;;;;:::i;:::-;-1:-1:-1::0;;;;;25033:21:0;::::1;;::::0;;;:16:::1;:21;::::0;;;;:39;24917:167:::1;25125:10;-1:-1:-1::0;;;;;25099:59:0::1;25114:9;-1:-1:-1::0;;;;;25099:59:0::1;25109:3;-1:-1:-1::0;;;;;25099:59:0::1;;25137:12;25151:6;25099:59;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;1808:1:0;2113:7;:22;-1:-1:-1;24344:822:0:o;36784:198::-;36859:10;;-1:-1:-1;;;;;36859:10:0;36845;:24;36837:50;;;;;-1:-1:-1;;;36837:50:0;;;;;;;;;;;;-1:-1:-1;;;36837:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36898:16:0;;36917:5;36898:16;;;:8;:16;;;;;;;;;:24;;-1:-1:-1;;36898:24:0;;;36938:36;;36961:12;36938:36;;;;;;;;;;;;;;36784:198;:::o;9544:45::-;;;;;;;;;;;;-1:-1:-1;;;;;9544:45:0;;:::o;21041:25::-;;;-1:-1:-1;;;;;21041:25:0;;:::o;11316:95::-;11371:32;11381:10;11393:9;11371;:32::i;28551:124::-;28623:4;;28603:64;;28615:6;;-1:-1:-1;;;;;28623:4:0;:18;28642:23;28655:9;28642:8;;;:12;:23::i;:::-;28623:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28623:43:0;28603:11;:64::i;17900:37::-;17930:7;17900:37;:::o;27116:673::-;27227:10;27208:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;27208:41:0;;;;;;;;;;;:46;;;;;;;;;;;27200:81;;;;;-1:-1:-1;;;27200:81:0;;;;;;;;;;;;-1:-1:-1;;;27200:81:0;;;;;;;;;;;;;;;27319:10;27300:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;27300:41:0;;;;;;;;;;;:46;;;;;;;;;;;27349:3;-1:-1:-1;27292:85:0;;;;;-1:-1:-1;;;27292:85:0;;;;;;;;;;;;-1:-1:-1;;;27292:85:0;;;;;;;;;;;;;;;27429:10;27388:12;27403:37;;;:25;:37;;;;;;;;-1:-1:-1;;;;;27403:48:0;;;;;;;;;;;;:53;;;;;;;;;;;;;27515:29;;;:17;:29;;;;;:40;;;;;;;;;:45;;;;;;;;;:58;;27403:53;27515:49;:58::i;:::-;27485:10;27467:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;27467:40:0;;;;;;;;;;;;:45;;;;;;;;;;;;:106;;;;27584:37;;;:25;:37;;;;;:48;;;;;;;;:53;;;;;;;;;:57;27652:51;;27467:40;27695:7;27652:30;:51::i;:::-;27747:10;-1:-1:-1;;;;;27721:60:0;27736:9;-1:-1:-1;;;;;27721:60:0;27731:3;-1:-1:-1;;;;;27721:60:0;;27759:12;27773:7;27721:60;;;;;;;;;;;;;;;;;;;;;;;;27116:673;;;:::o;19674:59::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;24049:177::-;24135:10;;-1:-1:-1;;;;;24135:10:0;24121;:24;24113:58;;;;;-1:-1:-1;;;24113:58:0;;;;;;;;;;;;-1:-1:-1;;;24113:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24182:28:0;24213:5;24182:28;;;:17;:28;;;;;:36;;-1:-1:-1;;24182:36:0;;;24049:177::o;18556:68::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;31323:93::-;31365:16;31401:7;31394:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31394:14:0;;;;;;;;;;;;;;;;;;;;;;;31323:93;:::o;32271:130::-;32323:4;32351:9;32340:8;:20;-1:-1:-1;;;;;;32378:15:0;;;;;:7;:15;;;;;;;;;32271:130::o;21722:354::-;-1:-1:-1;;;;;21793:9:0;;;;;;:4;:9;;;;;;;;21785:40;;;;;-1:-1:-1;;;21785:40:0;;;;;;;;;;;;-1:-1:-1;;;21785:40:0;;;;;;;;;;;;;;;21836:9;21848:28;18155:5;21848:18;:9;18118:2;21848:13;:18::i;:28::-;21836:40;-1:-1:-1;21907:42:0;21929:19;:9;21836:40;21929:13;:19::i;:::-;-1:-1:-1;;;;;21907:12:0;;;;;;:7;:12;;;;;;;;18255:3;21907:17;;;;;;;;;:21;:42::i;:::-;-1:-1:-1;;;;;21887:12:0;;;;;;;:7;:12;;;;;;;;18255:3;21887:17;;;;;;;:62;;;;21968:10;21960:34;;21968:10;;;;;21960:34;;;;;21989:4;;21960:34;;21887:12;21960:34;21989:4;21968:10;21960:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22012:56:0;;;22044:12;22012:56;;22058:9;22012:56;;;;;;22032:10;;-1:-1:-1;;;;;22012:56:0;;;18255:3;;22012:56;;;;;;;;;;;21722:354;;:::o;9811:49::-;;;;;;;;;;;;;;;:::o;38045:108::-;-1:-1:-1;;;;;38128:17:0;38104:4;38128:17;;;:8;:17;;;;;;;38045:108::o;31632:156::-;31721:10;;-1:-1:-1;;;;;31721:10:0;31707;:24;31699:58;;;;;-1:-1:-1;;;31699:58:0;;;;;;;;;;;;-1:-1:-1;;;31699:58:0;;;;;;;;;;;;;;;31768:4;:12;;-1:-1:-1;;;;;;31768:12:0;-1:-1:-1;;;;;31768:12:0;;;;;;;;;;31632:156::o;36526:246::-;36600:10;;-1:-1:-1;;;;;36600:10:0;36586;:24;36578:48;;;;;-1:-1:-1;;;36578:48:0;;;;;;;;;;;;-1:-1:-1;;;36578:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36637:15:0;;36655:5;36637:15;;;:7;:15;;;;;;;;:23;;-1:-1:-1;;36637:23:0;;;;;;36671:9;:17;;;;;:24;;;;;36637:23;36671:24;;;36735:5;:13;;;;;36720:4;36735:28;;;;;;;;;36706:58;;36720:4;36645:6;;36706:5;:58::i;20218:48::-;;;;;;;;;;;;;:::o;12263:1191::-;12342:4;12381:12;12367:11;:26;12359:53;;;;;-1:-1:-1;;;12359:53:0;;;;;;;;;;;;-1:-1:-1;;;12359:53:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;12447:23:0;;12425:19;12447:23;;;:14;:23;;;;;;;;12485:17;12481:58;;12526:1;12519:8;;;;;12481:58;-1:-1:-1;;;;;12599:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;12620:16:0;;12599:38;;;;;;;;;:48;;:63;-1:-1:-1;12595:147:0;;-1:-1:-1;;;;;12686:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;12707:16:0;;;;12686:38;;;;;;;;12722:1;12686:44;;;-1:-1:-1;12679:51:0;;12595:147;-1:-1:-1;;;;;12803:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;12799:88:0;;;12874:1;12867:8;;;;;12799:88;12899:12;-1:-1:-1;;12941:16:0;;12968:428;12983:5;12975:13;;:5;:13;;;12968:428;;;13047:1;13030:13;;;13029:19;;;13021:27;;13090:20;;:::i;:::-;-1:-1:-1;;;;;;13113:20:0;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;13090:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:27;;13156:229;;;13215:8;;;;-1:-1:-1;13208:15:0;;-1:-1:-1;;;;13208:15:0;13156:229;13249:12;;:26;;;-1:-1:-1;13245:140:0;;;13304:6;13296:14;;13245:140;;;13368:1;13359:6;:10;13351:18;;13245:140;12968:428;;;;;-1:-1:-1;;;;;;13413:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;-1:-1:-1;;12263:1191:0;;;;:::o;10730:39::-;;;;;;;;;;;;;:::o;31427:197::-;31501:10;;-1:-1:-1;;;;;31501:10:0;31487;:24;31479:52;;;;;-1:-1:-1;;;31479:52:0;;;;;;;;;;;;-1:-1:-1;;;31479:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31542:9:0;;31554:5;31542:9;;;:4;:9;;;;;;;;;:17;;-1:-1:-1;;31542:17:0;;;31575:41;;31591:12;31575:41;;31605:10;31575:41;;;;;;;;;;;;;;;;;;;;31427:197;:::o;18217:42::-;18255:3;18217:42;:::o;20078:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22084:627::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;;;-1:-1:-1;;;;;22186:9:0;::::1;::::0;;:4:::1;:9;::::0;;;;;::::1;;22178:40;;;::::0;;-1:-1:-1;;;22178:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22178:40:0;;;;;;;;;;;;;::::1;;22229:12;22251:6;-1:-1:-1::0;;;;;22244:24:0::1;;22277:4;22244:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;22244:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22244:39:0;;-1:-1:-1;22294:66:0::1;-1:-1:-1::0;;;;;22294:31:0;::::1;22326:10;22346:4;22353:6:::0;22294:31:::1;:66::i;:::-;22371:14;22388:52;22432:7;22395:6;-1:-1:-1::0;;;;;22388:24:0::1;;22421:4;22388:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;22388:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22388:39:0;;:43:::1;:52::i;:::-;22371:69:::0;-1:-1:-1;22451:9:0::1;22463:28;18155:5;22463:18;22371:69:::0;18118:2:::1;22463:13;:18::i;:28::-;22451:40:::0;-1:-1:-1;22525:45:0::1;22550:19;:9:::0;22451:40;22550:13:::1;:19::i;:::-;-1:-1:-1::0;;;;;22525:12:0;;::::1;;::::0;;;:7:::1;:12;::::0;;;;;;;:20;;::::1;::::0;;;;;;;;:24:::1;:45::i;:::-;-1:-1:-1::0;;;;;22502:12:0;;::::1;;::::0;;;:7:::1;:12;::::0;;;;;;;:20;;::::1;::::0;;;;;;;;:68;;;;22609:10;;22581:45:::1;::::0;22502:20;22609:10:::1;22621:4:::0;22581:27:::1;:45::i;:::-;22667:10;-1:-1:-1::0;;;;;22644:59:0::1;22662:3;-1:-1:-1::0;;;;;22644:59:0::1;22654:6;-1:-1:-1::0;;;;;22644:59:0::1;;22679:12;22693:9;22644:59;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;1808:1:0;2113:7;:22;-1:-1:-1;;;;22084:627:0:o;29262:409::-;29357:10;29352:16;;;;:4;:16;;;;;;;;29344:42;;;;;-1:-1:-1;;;29344:42:0;;;;;;;;;;;;-1:-1:-1;;;29344:42:0;;;;;;;;;;;;;;;29427:72;;;;;;;;;;;;;;;;;;;;29435:10;-1:-1:-1;29427:19:0;;;:7;:19;;;;;-1:-1:-1;;;;;29427:27:0;;;;;;;;;;;;:72;;29459:6;;29427:31;:72::i;:::-;29405:10;29397:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;29397:27:0;;;;;;;;;;;;:102;;;;29510:15;;;;;:7;:15;;;;;29528:3;29510:21;;29542:43;;29518:6;29578;29542:27;:43::i;:::-;29601:62;;;29642:12;29601:62;;;;;;;;;;-1:-1:-1;;;;;29601:62:0;;;;29622:10;;29601:62;;;;;;;;;;;;;;29262:409;;;:::o;9242:39::-;;;;;;;;;;;;;;-1:-1:-1;;;9242:39:0;;;;:::o;18441:62::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;27797:138::-;27866:10;;-1:-1:-1;;;;;27866:10:0;27852;:24;27844:47;;;;;-1:-1:-1;;;27844:47:0;;;;;;;;;;;;-1:-1:-1;;;27844:47:0;;;;;;;;;;;;;;;27908:10;;27902:25;;-1:-1:-1;;;;;27908:10:0;27920:6;27902:5;:25::i;18814:57::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;33131:743::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;;;33227:10:::1;33217:21:::0;;:9:::1;:21;::::0;;;;;::::1;;33216:22;33208:52;;;::::0;;-1:-1:-1;;;33208:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33208:52:0;;;;;;;;;;;;;::::1;;33303:13;:3;17816:6;33303:7;:13::i;:::-;33280:10;33271:20;::::0;;;:8:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;33271:29:0;::::1;::::0;;;;;;;;:45;;;;33350:4:::1;33331:24;33327:354;;;33372:50;33388:10;33408:4;33415:6;33372:15;:50::i;:::-;33327:354;;;33455:12;33477:7;-1:-1:-1::0;;;;;33470:25:0::1;;33504:4;33470:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;33470:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33470:40:0;;-1:-1:-1;33525:67:0::1;-1:-1:-1::0;;;;;33525:32:0;::::1;33558:10;33578:4;33585:6:::0;33525:32:::1;:67::i;:::-;33616:53;33661:7;33623;-1:-1:-1::0;;;;;33616:25:0::1;;33650:4;33616:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;33616:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;:53;33607:62;;33327:354;;33740:10;33727:24;::::0;;;:12:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;33727:33:0;::::1;::::0;;;;;;;;:45:::1;::::0;33765:6;33727:37:::1;:45::i;:::-;33704:10;33691:24;::::0;;;:12:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;33691:33:0;::::1;::::0;;;;;;;;;:81;;;;33828:20;;;:8:::1;:20:::0;;;;;:29;;;;;;;;;;;33788:78;;33814:12:::1;33788:78:::0;;;;::::1;::::0;;;;;;;;;33704:10;;33788:78:::1;::::0;;;;;;;;::::1;-1:-1:-1::0;;1808:1:0;2113:7;:22;33131:743::o;34753:368::-;34853:15;:3;17930:7;34853;:15::i;:::-;34830:10;34819:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;34819:31:0;;;;;;;;;:49;;;;34879:36;;34842:7;;34908:6;34879:7;:36::i;:::-;34983:10;34966:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;34966:37:0;;;;;;;;;;:49;;35008:6;34966:41;:49::i;:::-;34943:10;34926:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;34926:37:0;;;;;;;;;;;:89;;;;35073:22;;;:10;:22;;;;;:31;;;;;;;;;;;35031:82;;35059:12;35031:82;;;;;;;;;;;;;;34943:10;;35031:82;;;;;;;;;;34753:368;;:::o;38167:147::-;38227:4;38244:40;38260:10;38272:3;38277:6;38244:15;:40::i;:::-;-1:-1:-1;38302:4:0;38167:147;;;;:::o;31800:170::-;31886:10;;-1:-1:-1;;;;;31886:10:0;31872;:24;31864:56;;;;;-1:-1:-1;;;31864:56:0;;;;;;;;;;;;-1:-1:-1;;;31864:56:0;;;;;;;;;;;;;;;31931:17;:31;;-1:-1:-1;;;;;;31931:31:0;-1:-1:-1;;;;;31931:31:0;;;;;;;;;;31800:170::o;19243:40::-;;;;;;;;;;;;;;;:::o;33887:99::-;33932:16;33968:10;33961:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33961:17:0;;;;;;;;;;;;;;;;;;;;;;33887:99;:::o;12035:220::-;-1:-1:-1;;;;;12139:23:0;;12100:4;12139:23;;;:14;:23;;;;;;;;12180:16;:67;;12246:1;12180:67;;;-1:-1:-1;;;;;12199:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;12220:16:0;;12199:38;;;;;;;;12235:1;12199:44;;12180:67;12173:74;12035:220;-1:-1:-1;;;12035:220:0:o;23746:295::-;23833:10;;-1:-1:-1;;;;;23833:10:0;23819;:24;23811:59;;;;;-1:-1:-1;;;23811:59:0;;;;;;;;;;;;-1:-1:-1;;;23811:59:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23890:28:0;;;;;;:17;:28;;;;;;;;23889:29;23881:65;;;;;-1:-1:-1;;;23881:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23957:28:0;;;;;:17;:28;;;;;:35;;-1:-1:-1;;23957:35:0;23988:4;23957:35;;;;;;24003:14;:30;;;;;;;;;;;;;;-1:-1:-1;;;;;;24003:30:0;;;;;;23746:295::o;19936:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17788:34::-;17816:6;17788:34;:::o;11419:604::-;11566:57;;;10364:65;11566:57;;;;;;;;-1:-1:-1;;;;;11566:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11556:68;;;;;;-1:-1:-1;;;11662:57:0;;;;11691:15;11662:57;;;;;;;;;;;;;;;;;;;;;;;;;;;11652:68;;;;;;;;;11535:18;11751:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11556:68;;11652;11535:18;;11751:26;;;;;;;-1:-1:-1;;11751:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11751:26:0;;-1:-1:-1;;11751:26:0;;;-1:-1:-1;;;;;;;11796:23:0;;11788:54;;;;;-1:-1:-1;;;11788:54:0;;;;;;;;;;;;-1:-1:-1;;;11788:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11870:17:0;;;;;;:6;:17;;;;;:19;;;;;;;;11861:28;;11853:61;;;;;-1:-1:-1;;;11853:61:0;;;;;;;;;;;;-1:-1:-1;;;11853:61:0;;;;;;;;;;;;;;;11940:6;11933:3;:13;;11925:48;;;;;-1:-1:-1;;;11925:48:0;;;;;;;;;;;;-1:-1:-1;;;11925:48:0;;;;;;;;;;;;;;;11984:31;11994:9;12005;11984;:31::i;:::-;11419:604;;;;;;;;;:::o;31044:267::-;31115:10;;-1:-1:-1;;;;;31115:10:0;31101;:24;31093:49;;;;;-1:-1:-1;;;31093:49:0;;;;;;;;;;;;-1:-1:-1;;;31093:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31162:9:0;;;;;;:4;:9;;;;;;;;31161:10;31153:40;;;;;-1:-1:-1;;;31153:40:0;;;;;;;;;;;;-1:-1:-1;;;31153:40:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31204:9:0;;;;;;:4;:9;;;;;;;;:16;;-1:-1:-1;;31204:16:0;31216:4;31204:16;;;;;;31231:7;:17;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31231:17:0;;;;;31264:39;;31278:12;31264:39;;31292:10;31264:39;;;;;;;;;;;;;;;;;;;;31044:267;:::o;18091:29::-;18118:2;18091:29;:::o;23058:289::-;23149:10;;-1:-1:-1;;;;;23149:10:0;23135;:24;23127:51;;;;;-1:-1:-1;;;23127:51:0;;;;;;;;;;;;-1:-1:-1;;;23127:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23204:12:0;;;;;;:5;:12;;;;;;:24;;23221:6;23204:16;:24::i;:::-;-1:-1:-1;;;;;23189:12:0;;;;;;:5;:12;;;;;:39;23253:11;;:23;;23269:6;23253:15;:23::i;:::-;23239:11;:37;-1:-1:-1;;;;;23302:16:0;;;;;;;:9;:16;;;;;;23287:52;;23302:16;;23332:6;23287:14;:52::i;:::-;23058:289;;:::o;19348:39::-;;;;;;;;;;;;;:::o;37361:676::-;-1:-1:-1;;;;;37571:13:0;;;37488:18;37571:13;;;:6;:13;;;;;;;;:15;;;;;;;;;37519:78;;10561:86;37519:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37509:89;;;;;;-1:-1:-1;;;37636:57:0;;;;37665:15;37636:57;;;;;;;;;;;;;;;;;;;;;;;;;;;37626:68;;;;;;;;;37725:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37509:89;;37626:68;;37571:15;;37725:26;;;;;37571:13;;-1:-1:-1;;37725:26:0;;;;;;;;;;37571:15;37725:26;;;;;;;;;;;;;;;-1:-1:-1;;37725:26:0;;-1:-1:-1;;37725:26:0;;;-1:-1:-1;;;;;;;37770:23:0;;37762:53;;;;;-1:-1:-1;;;37762:53:0;;;;;;;;;;;;-1:-1:-1;;;37762:53:0;;;;;;;;;;;;;;;37847:5;-1:-1:-1;;;;;37834:18:0;:9;-1:-1:-1;;;;;37834:18:0;;37826:51;;;;;-1:-1:-1;;;37826:51:0;;;;;;;;;;;;-1:-1:-1;;;37826:51:0;;;;;;;;;;;;;;;37903:8;37896:3;:15;;37888:43;;;;;-1:-1:-1;;;37888:43:0;;;;;;;;;;;;-1:-1:-1;;;37888:43:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37944:17:0;;;;;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;:35;;;37997:32;;;;;;;;;;;;;;;;;37361:676;;;;;;;;;;:::o;23355:380::-;23445:10;;-1:-1:-1;;;;;23445:10:0;23431;:24;23423:55;;;;;-1:-1:-1;;;23423:55:0;;;;;;;;;;;;-1:-1:-1;;;23423:55:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23497:9:0;;;;;;:4;:9;;;;;;;;23489:40;;;;;-1:-1:-1;;;23489:40:0;;;;;;;;;;;;-1:-1:-1;;;23489:40:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23570:12:0;;;;;;:7;:12;;;;;;;;23591:4;23570:27;;;;;;;;:39;;23602:6;23570:31;:39::i;:::-;-1:-1:-1;;;;;23540:12:0;;;;;;:7;:12;;;;;;;;23561:4;23540:27;;;;;;;;:69;;;;23620:28;;23641:6;23620:5;:28::i;:::-;23664:63;;;23706:12;23664:63;;;;;;;;;;23694:10;;-1:-1:-1;;;;;23664:63:0;;;23682:4;;23664:63;;;;;;;;;;;23355:380;;:::o;18942:37::-;;;;;;;;;;;;;:::o;36995:136::-;-1:-1:-1;;;;;37095:19:0;;;37071:4;37095:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;36995:136::o;22719:328::-;22807:10;;-1:-1:-1;;;;;22807:10:0;22793;:24;22785:51;;;;;-1:-1:-1;;;22785:51:0;;;;;;;;;;;;-1:-1:-1;;;22785:51:0;;;;;;;;;;;;;;;22847:31;22857:5;22872:4;22847:9;:31::i;:::-;-1:-1:-1;;;;;22904:12:0;;;;;;:5;:12;;;;;;:24;;22921:6;22904:16;:24::i;:::-;-1:-1:-1;;;;;22889:12:0;;;;;;:5;:12;;;;;:39;22953:11;;:23;;22969:6;22953:15;:23::i;:::-;22939:11;:37;-1:-1:-1;;;;;23014:16:0;;;23010:1;23014:16;;;:9;:16;;;;;;22987:52;;23014:16;23032:6;22987:14;:52::i;18690:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19798:89::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19135:41::-;;;;;;;;;;;;;:::o;36027:491::-;1852:1;2009:7;;:19;;2001:63;;;;;-1:-1:-1;;;2001:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2001:63:0;;;;;;;;;;;;;;;1852:1;2074:7;:18;36140:10:::1;::::0;-1:-1:-1;;;;;36140:10:0::1;36126;:24;36118:48;;;::::0;;-1:-1:-1;;;36118:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36118:48:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;36181:23:0;::::1;36199:4;36181:23;36177:186;;;36252:10;::::0;36221:50:::1;::::0;36245:4:::1;::::0;-1:-1:-1;;;;;36252:10:0::1;36264:6:::0;36221:15:::1;:50::i;:::-;36177:186;;;36332:10;::::0;36304:47:::1;::::0;-1:-1:-1;;;;;36304:27:0;;::::1;::::0;36332:10:::1;36344:6:::0;36304:27:::1;:47::i;:::-;36373:31;36381:6;36389;36397;36373:7;:31::i;:::-;-1:-1:-1::0;;;;;36415:16:0;::::1;36434:5;36415:16:::0;;;:8:::1;:16;::::0;;;;;;;;:24;;-1:-1:-1;;36415:24:0::1;::::0;;36455:55;;36489:12:::1;36455:55:::0;;;;::::1;::::0;;;;;36477:10:::1;::::0;36415:16;36455:55:::1;::::0;;;;;;::::1;-1:-1:-1::0;;1808:1:0;2113:7;:22;-1:-1:-1;36027:491:0:o;10318:111::-;10364:65;10318:111;:::o;21185:49::-;;;;;;;;;;;;;;;:::o;18127:33::-;18155:5;18127:33;:::o;20832:27::-;;;;;;;;;;9672:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21073:32::-;;;-1:-1:-1;;;;;21073:32:0;;:::o;35819:196::-;35894:10;;-1:-1:-1;;;;;35894:10:0;35880;:24;35872:50;;;;;-1:-1:-1;;;35872:50:0;;;;;;;;;;;;-1:-1:-1;;;35872:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35933:16:0;;;;;;:8;:16;;;;;;;;;:23;;-1:-1:-1;;35933:23:0;35952:4;35933:23;;;35972:35;;35994:12;35972:35;;;;;;;;;;;;;;35819:196;:::o;32776:344::-;32885:4;32913:9;32902:8;:20;-1:-1:-1;;;;;32940:15:0;;;;;;:7;:15;;;;;;;;:66;;;;-1:-1:-1;;;;;;32976:13:0;;;;;;;:5;:13;;;;;;;;:19;;;;;;;;;;:30;-1:-1:-1;32976:30:0;32940:66;:118;;;;-1:-1:-1;;;;;;33027:21:0;;;;;;:13;:21;;;;;;:31;-1:-1:-1;33027:31:0;32940:118;:172;;;;-1:-1:-1;;;;;;33087:17:0;;;;;;:9;:17;;;;;;33109:3;;33079:26;;:3;;:7;:26::i;:::-;:33;;32940:172;32933:179;32776:344;-1:-1:-1;;;;;;32776:344:0:o;20701:41::-;;;;;;;;;;;;;;;:::o;20311:88::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24234:98::-;24274:16;24310:14;24303:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24303:21:0;;;;;;;;;;;;;;;;;;;;;;24234:98;:::o;91:148::-;143:4;169:5;;;193:6;;;;185:25;;;;;-1:-1:-1;;;185:25:0;;;;;;;;;;;;-1:-1:-1;;;185:25:0;;;;;;;;;;;;;;721:208;773:4;793:6;789:47;;-1:-1:-1;823:1:0;816:8;;789:47;855:5;;;859:1;855;:5;:1;879:5;;;;;:10;871:29;;;;;-1:-1:-1;;;871:29:0;;;;;;;;;;;;-1:-1:-1;;;871:29:0;;;;;;;;;;;;;;1175:103;1227:4;1251:19;1255:1;1258;1251:19;;;;;;;;;;;;;-1:-1:-1;;;1251:19:0;;;:3;:19::i;28250:293::-;-1:-1:-1;;;;;28319:17:0;;28311:49;;;;;-1:-1:-1;;;28311:49:0;;;;;;;;;;;;-1:-1:-1;;;28311:49:0;;;;;;;;;;;;;;;28387:51;;;;;;;;;;;-1:-1:-1;;;28387:51:0;;;;;;;;-1:-1:-1;;;;;28387:13:0;;-1:-1:-1;28387:13:0;;;:8;:13;;;;;;;;:51;;28405:6;;28387:17;:51::i;:::-;-1:-1:-1;;;;;28371:13:0;;;;;;:8;:13;;;;;:67;28463:11;;:23;;28479:6;28463:15;:23::i;:::-;28449:11;:37;28502:33;;;;;;;;28524:1;;-1:-1:-1;;;;;28502:33:0;;;-1:-1:-1;;;;;;;;;;;28502:33:0;;;;;;;;28250:293;;:::o;429:103::-;481:4;505:19;509:1;512;505:19;;;;;;;;;;;;;-1:-1:-1;;;505:19:0;;;:3;:19::i;34284:457::-;-1:-1:-1;;;;;34360:17:0;;;;;;:9;:17;;;;;;34356:146;;-1:-1:-1;;;;;34397:17:0;;;;;;:9;:17;;;;;;;;34417:3;34397:23;;;;34433:10;:23;;;;;;;;;;;;-1:-1:-1;;;;;;34433:23:0;;;;;;;34469:7;:15;;;;;:21;34356:146;-1:-1:-1;;;;;34512:15:0;;;;;;;:7;:15;;;;;;;;:22;;-1:-1:-1;;34512:22:0;34530:4;34512:22;;;34568:12;:20;;;;;:29;;;;;;;;;;34545:53;;34551:7;;34520:6;;34545:5;:53::i;:::-;-1:-1:-1;;;;;34609:20:0;;;34641:1;34609:20;;;:12;:20;;;;;;;;:29;;;;;;;;;;;;:33;;;34710:13;;;:5;:13;;;;;:22;;;;;;;;;;;34658:75;;34679:12;34658:75;;34693:15;34658:75;;;;;;;;;;;;;34609:20;;34658:75;;;;;;;;;;34284:457;;:::o;537:180::-;617:4;650:12;642:6;;;;634:29;;;;-1:-1:-1;;;634:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;683:5:0;;;537:180::o;38887:435::-;-1:-1:-1;;;;;38979:17:0;;38971:59;;;;;-1:-1:-1;;;38971:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39049:17:0;;39041:59;;;;;-1:-1:-1;;;39041:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39129:61;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39129:13:0;;-1:-1:-1;39129:13:0;;;:8;:13;;;;;;;;:61;;39147:6;;39129:17;:61::i;:::-;-1:-1:-1;;;;;39113:13:0;;;;;;;:8;:13;;;;;;;;:77;;;;39217:55;;;;;;;;;;;;;;;:13;;;;;;;;;;;:55;;39235:6;;39217:17;:55::i;:::-;-1:-1:-1;;;;;39201:13:0;;;;;;;:8;:13;;;;;;;;;:71;;;;39288:26;;;;;;;39201:13;;39288:26;;;;-1:-1:-1;;;;;;;;;;;39288:26:0;;;;;;;;38887:435;;;:::o;28035:207::-;28110:11;;:23;;28126:6;28110:15;:23::i;:::-;28096:11;:37;-1:-1:-1;;;;;28160:13:0;;;;;;:8;:13;;;;;;:25;;28178:6;28160:17;:25::i;:::-;-1:-1:-1;;;;;28144:13:0;;;;;;:8;:13;;;;;;;;:41;;;;28201:33;;;;;;;28144:13;;;;-1:-1:-1;;;;;;;;;;;28201:33:0;;;;;;;;;28035:207;;:::o;30067:309::-;-1:-1:-1;;;;;30163:12:0;;;;;;:5;:12;;;;;;;;30184:4;30163:27;;;;;;;;:40;;30195:7;30163:31;:40::i;:::-;-1:-1:-1;;;;;30133:12:0;;;;;;:5;:12;;;;;;;;30154:4;30133:27;;;;;;;:70;30228:11;;:24;;30244:7;30228:15;:24::i;:::-;30214:11;:38;-1:-1:-1;;;;;30290:16:0;;;30286:1;30290:16;;;:9;:16;;;;;;30263:53;;30290:16;30308:7;30263:14;:53::i;:::-;30332:36;;;;;;;;-1:-1:-1;;;;;30332:36:0;;;30341:10;;-1:-1:-1;;;;;;;;;;;30332:36:0;;;;;;;;30067:309;;:::o;3787:176::-;3896:58;;;-1:-1:-1;;;;;3896:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3896:58:0;-1:-1:-1;;;3896:58:0;;;3870:85;;3889:5;;3870:18;:85::i;:::-;3787:176;;;:::o;3971:204::-;4098:68;;;-1:-1:-1;;;;;4098:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4098:68:0;-1:-1:-1;;;4098:68:0;;;4072:95;;4091:5;;4072:18;:95::i;:::-;3971:204;;;;:::o;13462:407::-;-1:-1:-1;;;;;13565:20:0;;;13539:23;13565:20;;;:9;:20;;;;;;;;;13641:5;:16;;;;;13666:4;13641:31;;;;;;;;13620:16;;;:5;:16;;;;;;13565:20;;;13539:23;;13620:53;;:16;:20;:53::i;:::-;-1:-1:-1;;;;;13684:20:0;;;;;;;:9;:20;;;;;;:32;;-1:-1:-1;;;;;;13684:32:0;;;;;;;;;;13734:54;;13596:77;;-1:-1:-1;13684:32:0;13734:54;;;;;;13684:20;13734:54;13801:60;13816:15;13833:9;13844:16;13801:14;:60::i;30712:324::-;-1:-1:-1;;;;;30819:12:0;;;;;;;:5;:12;;;;;;;;:21;;;;;;;;;;:34;;30845:7;30819:25;:34::i;:::-;-1:-1:-1;;;;;30795:12:0;;;;;;;:5;:12;;;;;;;;:21;;;;;;;;;;;;:58;;;;30887:4;30868:24;30864:163;;;30923:11;;:24;;30939:7;30923:15;:24::i;:::-;30909:11;:38;-1:-1:-1;;;;;30977:16:0;;;;;;;:9;:16;;;;;;30962:53;;30977:16;;31007:7;13877:862;13980:6;-1:-1:-1;;;;;13970:16:0;:6;-1:-1:-1;;;;;13970:16:0;;;:30;;;;;13999:1;13990:6;:10;13970:30;13966:766;;;-1:-1:-1;;;;;14021:20:0;;;14017:357;;-1:-1:-1;;;;;14081:22:0;;14062:16;14081:22;;;:14;:22;;;;;;;;;14139:13;:60;;14198:1;14139:60;;;-1:-1:-1;;;;;14155:19:0;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;14175:13:0;;14155:34;;;;;;;;14187:1;14155:40;;14139:60;14122:77;;14218:14;14235:47;14249:6;14235:47;;;;;;;;;;;;;-1:-1:-1;;;14235:47:0;;;:9;:13;;:47;;;;;:::i;:::-;14218:64;;14301:57;14318:6;14326:9;14337;14348;14301:16;:57::i;:::-;14017:357;;;;-1:-1:-1;;;;;14394:20:0;;;14390:331;;-1:-1:-1;;;;;14454:22:0;;14435:16;14454:22;;;:14;:22;;;;;;;;;14512:13;:60;;14571:1;14512:60;;;-1:-1:-1;;;;;14528:19:0;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;14548:13:0;;14528:34;;;;;;;;14560:1;14528:40;;14512:60;14495:77;-1:-1:-1;14591:14:0;14608:21;14495:77;14622:6;14608:13;:21::i;:::-;14591:38;;14648:57;14665:6;14673:9;14684;14695;14648:16;:57::i;:::-;14390:331;;;13877:862;;;:::o;1282:177::-;1362:4;1394:12;1387:5;1379:28;;;;-1:-1:-1;;;1379:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1418:6;1431:1;1427;:5;;;;;;;1282:177;-1:-1:-1;;;;;1282:177:0:o;30384:320::-;-1:-1:-1;;;;;30489:12:0;;;;;;;:5;:12;;;;;;;;:21;;;;;;;;;;:34;;30515:7;30489:25;:34::i;:::-;-1:-1:-1;;;;;30465:12:0;;;;;;;:5;:12;;;;;;;;:21;;;;;;;;;;;;:58;;;;30557:4;30538:24;30534:163;;;30593:11;;:24;;30609:7;30593:15;:24::i;:::-;30579:11;:38;-1:-1:-1;;;;;30659:16:0;;;30655:1;30659:16;;;:9;:16;;;;;;30632:53;;30659:16;30677:7;30632:14;:53::i;244:180::-;324:4;350:5;;;382:12;374:6;;;;366:29;;;;-1:-1:-1;;;366:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;415:1:0;244:180;-1:-1:-1;;;;244:180:0:o;5196:614::-;5341:27;5349:5;-1:-1:-1;;;;;5341:25:0;;:27::i;:::-;5333:60;;;;;-1:-1:-1;;;5333:60:0;;;;;;;;;;;;-1:-1:-1;;;5333:60:0;;;;;;;;;;;;;;;5465:12;5479:23;5514:5;-1:-1:-1;;;;;5506:19:0;5526:4;5506:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5506:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5464:67;;;;5550:7;5542:52;;;;;-1:-1:-1;;;5542:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5606:17;;:21;5602:201;;5748:10;5737:30;;;;;;;;;;;;;;;-1:-1:-1;5737:30:0;5729:62;;;;;-1:-1:-1;;;5729:62:0;;;;;;;;;;;;-1:-1:-1;;;5729:62:0;;;;;;;;;;;;;;14747:598;14861:18;14882:49;14889:12;14882:49;;;;;;;;;;;;;;;;;:6;:49::i;:::-;14861:70;;14961:1;14946:12;:16;;;:85;;;;-1:-1:-1;;;;;;14966:22:0;;;;;;:11;:22;;;;;;;;:65;-1:-1:-1;;14989:16:0;;14966:40;;;;;;;;;:50;:65;;;:50;;:65;14946:85;14942:329;;;-1:-1:-1;;;;;15046:22:0;;;;;;:11;:22;;;;;;;;:40;-1:-1:-1;;15069:16:0;;15046:40;;;;;;;;15084:1;15046:46;:57;;;14942:329;;;15171:33;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15132:22:0;;-1:-1:-1;15132:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;-1:-1:-1;;15132:72:0;;;;;;;;;;;;;15217:25;;;:14;:25;;;;;;:44;;15245:16;;;15217:44;;;;;;;;;;14942:329;15286:51;;;;;;;;;;;;;;-1:-1:-1;;;;;15286:51:0;;;;;;;;;;;14747:598;;;;;:::o;2856:374::-;2916:4;3139:20;;2982:66;3179:23;;;;;;:42;;-1:-1:-1;3206:15:0;;;3179:42;3171:51;2856:374;-1:-1:-1;;;;2856:374:0:o;15353:161::-;15428:6;15466:12;15459:5;15455:9;;15447:32;;;;-1:-1:-1;;;15447:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15504:1:0;;15353:161;-1:-1:-1;;15353:161:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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