Overview
Max Total Supply
955,549,971.332142258789652967 SPWN
Holders
2,192 (0.00%)
Market
Price
$0.00 @ 0.000000 ETH (+15.87%)
Onchain Market Cap
$83,229.96
Circulating Supply Market Cap
$44,780.60
Other Info
Token Contract (WITH 18 Decimals)
Balance
31,680.9 SPWNValue
$2.76 ( ~0.000778511114421118 Eth) [0.0033%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Bitspawn
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-14 */ /** *Submitted for verification at Etherscan.io on 2021-05-24 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The defaut value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/security/Pausable.sol pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/access/AccessControl.sol pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping (address => bool) members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ */ function _checkRole(bytes32 role, address account) internal view { if(!hasRole(role, account)) { revert(string(abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ))); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, getRoleAdmin(role), adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File: contracts/SPWN.sol contract BlackList is Ownable { mapping(address => bool) public isBlackListed; event AddedBlackList(address _user); event RemovedBlackList(address _user); function addBlackList(address _evilUser) public onlyOwner { require(owner() != _evilUser, "Can not add owner to blackList"); isBlackListed[_evilUser] = true; emit AddedBlackList(_evilUser); } function removeBlackList(address _clearedUser) public onlyOwner { isBlackListed[_clearedUser] = false; RemovedBlackList(_clearedUser); } function getBlackListStatus(address _maker) public view returns (bool) { return isBlackListed[_maker]; } } pragma solidity 0.8.3; contract DSAuth is AccessControl, BlackList { bytes32 public constant MINT_BURN_ROLE = keccak256("MINT_BURN_ROLE"); address private _pendingOwner; address private _owner; event TransferOwnerShip(address indexed _newOwner); event AcceptOwnerShip(address indexed _oldOwner, address indexed _newOwner); constructor () { _owner = msg.sender; _pendingOwner = address(0); emit TransferOwnerShip(msg.sender); } // transferOwnership add a pending owner function transferOwnership(address newOwner) public override onlyOwner { require(!isBlackListed[newOwner], "Pending owner can not be in blackList"); require(newOwner != owner(), "Pending owner and current owner need to be different"); require(newOwner != address(0), "Pending owner can not be zero address"); _pendingOwner = newOwner; emit TransferOwnerShip(newOwner); } function getPendingOwner() public view onlyOwner returns (address) { return _pendingOwner; } function owner() public override view returns (address) { return _owner; } // acceptOwnership allows the pending owner to accept the ownership of the SPWN token contract // along with grant new owner MINT_BURN_ROLE role and remove MINT_BURN_ROLE from old owner function acceptOwnership() public { require(_pendingOwner != address(0), "Please set pending owner first"); require(_pendingOwner == msg.sender, "Only pending owner is able to accept the ownership"); require(!isBlackListed[msg.sender], "Pending owner can not be in blackList"); address oldOwner = owner(); _owner = _pendingOwner; _setupRole(DEFAULT_ADMIN_ROLE, _pendingOwner); _grantAccess(MINT_BURN_ROLE, _pendingOwner); _revokeAccess(MINT_BURN_ROLE, oldOwner); _revokeAccess(DEFAULT_ADMIN_ROLE, oldOwner); emit AcceptOwnerShip(oldOwner, _pendingOwner); _pendingOwner = address(0); } // setAuthority performs the same action as grantMintBurnRole // we need setAuthority() only because the backward compatibility with previous version contract function setAuthority(address authorityAddress) public onlyOwner { require(!isBlackListed[authorityAddress], "AuthorityAddress is in blackList"); grantMintBurnRole(authorityAddress); } // grantMintBurnRole grants the MINT_BURN_ROLE role to an address function grantMintBurnRole(address account) public onlyOwner { require(!isBlackListed[account], "account is in blackList"); _grantAccess(MINT_BURN_ROLE, account); } // revokeMintBurnRole revokes the MINT_BURN_ROLE role from an address function revokeMintBurnRole(address account) public onlyOwner { _revokeAccess(MINT_BURN_ROLE, account); } // internal function _grantAccess grants account with given role function _grantAccess(bytes32 role, address account) internal { grantRole(role, account); emit RoleGranted(role, account, owner()); } // internal function _revokeAccess revokes account with given role function _revokeAccess(bytes32 role, address account) internal { if (DEFAULT_ADMIN_ROLE == role) { require(account != owner(), "owner can not revoke himself from admin role"); } revokeRole(role, account); emit RoleRevoked(role, account, owner()); } } contract DSStop is Pausable, DSAuth { // we need stopped() only because the backward compatibility with previous version contract // stopped = paused function stopped() public view returns (bool) { return paused(); } function stop() public onlyOwner { _pause(); emit Paused(owner()); } function start() public onlyOwner { _unpause(); emit Unpaused(owner()); } } abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), currentAllowance - amount); _burn(account, amount); } } contract Bitspawn is ERC20("BitSpawn Token", "SPWN"), ERC20Burnable, DSAuth, DSStop { event Mint(address indexed guy, uint wad); event Burn(address indexed guy, uint wad); event BurnFrom(address indexed allowanceOwner, address spender, uint wad); event DestroyedBlackFunds(address _blackListedUser, uint _balance); uint256 MAX_SUPPLY = 2 * 10 ** 9 * 10 ** 18; // 2,000,000,000 SPWN Token Max Supply // deployer address is the default admin(owner) // deployer address is the first address with MINT_BURN_ROLE role constructor () { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); _grantAccess(MINT_BURN_ROLE, msg.sender); } function approve(address guy, uint wad) public override whenNotPaused returns (bool) { require(!isBlackListed[msg.sender], "Caller is in blackList"); require(!isBlackListed[guy], "Spender is in blackList"); return super.approve(guy, wad); } function transferFrom(address src, address dst, uint wad) public override whenNotPaused returns (bool) { require(!isBlackListed[msg.sender], "Caller is in blackList"); require(!isBlackListed[src], "From address is in blackList"); return super.transferFrom(src, dst, wad); } function transfer(address dst, uint wad) public override whenNotPaused returns (bool) { require(!isBlackListed[msg.sender], "Caller is in blackList"); require(!isBlackListed[dst], "To address is in blackList"); return super.transfer(dst, wad); } function mint(address guy, uint wad) public whenNotPaused { require(!isBlackListed[msg.sender], "Caller is in blackList"); require(!isBlackListed[guy], "To address is in blackList"); require(hasRole(MINT_BURN_ROLE, msg.sender), "Caller is not allowed to mint"); require(totalSupply() + wad <= MAX_SUPPLY, "Exceeds SPWN token max totalSupply"); _mint(guy, wad); emit Mint(guy, wad); } function burn(uint wad) public override whenNotPaused { require(!isBlackListed[msg.sender], "Caller is in blackList"); require(hasRole(MINT_BURN_ROLE, msg.sender), "Caller is not allowed to burn"); super.burn(wad); emit Burn(msg.sender, wad); } function burnFrom(address allowanceOwner, uint wad) public override whenNotPaused { require(!isBlackListed[msg.sender], "Caller is in blackList"); require(hasRole(MINT_BURN_ROLE, msg.sender), "Caller is not allowed to burn"); super.burnFrom(allowanceOwner, wad); emit BurnFrom(allowanceOwner, msg.sender, wad); } function destroyBlackFunds(address _blackListedUser) public onlyOwner { require(isBlackListed[_blackListedUser], "Address is not in the blackList"); uint dirtyFunds = balanceOf(_blackListedUser); _burn(_blackListedUser, dirtyFunds); emit DestroyedBlackFunds(_blackListedUser, dirtyFunds); } function redeem(uint amount) public onlyOwner { require(balanceOf(address(this)) >= amount, "redeem can not exceed the balance"); _transfer(address(this), owner(), amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"_newOwner","type":"address"}],"name":"AcceptOwnerShip","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"}],"name":"AddedBlackList","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":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"allowanceOwner","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"BurnFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_blackListedUser","type":"address"},{"indexed":false,"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"DestroyedBlackFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"}],"name":"RemovedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newOwner","type":"address"}],"name":"TransferOwnerShip","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_BURN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_evilUser","type":"address"}],"name":"addBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"wad","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"allowanceOwner","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_blackListedUser","type":"address"}],"name":"destroyBlackFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_maker","type":"address"}],"name":"getBlackListStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"grantMintBurnRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_clearedUser","type":"address"}],"name":"removeBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeMintBurnRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"authorityAddress","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"wad","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":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526b06765c793fa10079d0000000600b553480156200002157600080fd5b506040518060400160405280600e81526020017f426974537061776e20546f6b656e0000000000000000000000000000000000008152506040518060400160405280600481526020017f5350574e000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000a692919062000902565b508060049080519060200190620000bf92919062000902565b5050506000600560006101000a81548160ff0219169083151502179055506000620000ef620002a160201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fb1eb34684306bcea7f9ed508931dc13b5993c8fdd00fe65c2e4680ae2610a70160405160405180910390a2620002696000801b33620002a960201b60201c565b6200029b7fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a633620002bf60201b60201c565b62000d9b565b600033905090565b620002bb82826200033f60201b60201c565b5050565b620002d182826200043160201b60201c565b620002e16200047a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b620003518282620004a460201b60201c565b6200042d5760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003d2620002a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b62000442826200050f60201b60201c565b620004638162000457620002a160201b60201c565b6200052f60201b60201c565b6200047583836200033f60201b60201c565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600060066000838152602001908152602001600020600101549050919050565b620005418282620004a460201b60201c565b620005ef57620005748173ffffffffffffffffffffffffffffffffffffffff166014620005f360201b620029201760201c565b6200058f8360001c6020620005f360201b620029201760201c565b604051602001620005a292919062000a9f565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005e6919062000ae1565b60405180910390fd5b5050565b60606000600283600262000608919062000bab565b62000614919062000b4e565b67ffffffffffffffff81111562000654577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015620006875781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110620006e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811062000771577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002620007b3919062000bab565b620007bf919062000b4e565b90505b6001811115620008b1577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811062000829577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b82828151811062000867577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080620008a99062000c4c565b9050620007c2565b5060008414620008f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ef9062000b05565b60405180910390fd5b8091505092915050565b828054620009109062000c7b565b90600052602060002090601f01602090048101928262000934576000855562000980565b82601f106200094f57805160ff191683800117855562000980565b8280016001018555821562000980579182015b828111156200097f57825182559160200191906001019062000962565b5b5090506200098f919062000993565b5090565b5b80821115620009ae57600081600090555060010162000994565b5090565b6000620009bf8262000b27565b620009cb818562000b32565b9350620009dd81856020860162000c16565b620009e88162000d0f565b840191505092915050565b600062000a008262000b27565b62000a0c818562000b43565b935062000a1e81856020860162000c16565b80840191505092915050565b600062000a3960208362000b32565b915062000a468262000d20565b602082019050919050565b600062000a6060178362000b43565b915062000a6d8262000d49565b601782019050919050565b600062000a8760118362000b43565b915062000a948262000d72565b601182019050919050565b600062000aac8262000a51565b915062000aba8285620009f3565b915062000ac78262000a78565b915062000ad58284620009f3565b91508190509392505050565b6000602082019050818103600083015262000afd8184620009b2565b905092915050565b6000602082019050818103600083015262000b208162000a2a565b9050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600062000b5b8262000c0c565b915062000b688362000c0c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ba05762000b9f62000cb1565b5b828201905092915050565b600062000bb88262000c0c565b915062000bc58362000c0c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c015762000c0062000cb1565b5b828202905092915050565b6000819050919050565b60005b8381101562000c3657808201518184015260208101905062000c19565b8381111562000c46576000848401525b50505050565b600062000c598262000c0c565b9150600082141562000c705762000c6f62000cb1565b5b600182039050919050565b6000600282049050600182168062000c9457607f821691505b6020821081141562000cab5762000caa62000ce0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b61536b8062000dab6000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806379cc67901161013b578063be9a6555116100b8578063dd62ed3e1161007c578063dd62ed3e146106b5578063e47d6060146106e5578063e4997dc514610715578063f2fde38b14610731578063f3bdc2281461074d57610248565b8063be9a655514610639578063d03563ca14610643578063d547741f14610661578063d96086691461067d578063db006a751461069957610248565b806395d89b41116100ff57806395d89b4114610581578063a217fddf1461059f578063a457c2d7146105bd578063a9059cbb146105ed578063be38c0d51461061d57610248565b806379cc6790146104dd5780637a9e5e4b146104f95780638da5cb5b1461051557806391d148541461053357806393596c7b1461056357610248565b806336568abe116101c95780635c975abb1161018d5780635c975abb1461045d57806370a082311461047b578063715018a6146104ab57806375f12b21146104b557806379ba5097146104d357610248565b806336568abe146103a957806339509351146103c557806340c10f19146103f557806342966c681461041157806359bf1abe1461042d57610248565b806318160ddd1161021057806318160ddd146102f157806323b872dd1461030f578063248a9ca31461033f5780632f2ff15d1461036f578063313ce5671461038b57610248565b806301ffc9a71461024d57806306fdde031461027d57806307da68f51461029b578063095ea7b3146102a55780630ecb93c0146102d5575b600080fd5b61026760048036038101906102629190613c96565b610769565b6040516102749190614307565b60405180910390f35b6102856107e3565b604051610292919061433d565b60405180910390f35b6102a3610875565b005b6102bf60048036038101906102ba9190613bf5565b610939565b6040516102cc9190614307565b60405180910390f35b6102ef60048036038101906102ea9190613b41565b610aaf565b005b6102f9610c33565b604051610306919061479f565b60405180910390f35b61032960048036038101906103249190613ba6565b610c3d565b6040516103369190614307565b60405180910390f35b61035960048036038101906103549190613c31565b610db5565b6040516103669190614322565b60405180910390f35b61038960048036038101906103849190613c5a565b610dd5565b005b610393610dfe565b6040516103a091906147ba565b60405180910390f35b6103c360048036038101906103be9190613c5a565b610e07565b005b6103df60048036038101906103da9190613bf5565b610e8a565b6040516103ec9190614307565b60405180910390f35b61040f600480360381019061040a9190613bf5565b610f36565b005b61042b60048036038101906104269190613cbf565b6111b4565b005b61044760048036038101906104429190613b41565b61134c565b6040516104549190614307565b60405180910390f35b6104656113a2565b6040516104729190614307565b60405180910390f35b61049560048036038101906104909190613b41565b6113b9565b6040516104a2919061479f565b60405180910390f35b6104b3611401565b005b6104bd61153e565b6040516104ca9190614307565b60405180910390f35b6104db61154d565b005b6104f760048036038101906104f29190613bf5565b6118de565b005b610513600480360381019061050e9190613b41565b611a7a565b005b61051d611b8f565b60405161052a91906142c3565b60405180910390f35b61054d60048036038101906105489190613c5a565b611bb9565b60405161055a9190614307565b60405180910390f35b61056b611c24565b60405161057891906142c3565b60405180910390f35b610589611cca565b604051610596919061433d565b60405180910390f35b6105a7611d5c565b6040516105b49190614322565b60405180910390f35b6105d760048036038101906105d29190613bf5565b611d63565b6040516105e49190614307565b60405180910390f35b61060760048036038101906106029190613bf5565b611e57565b6040516106149190614307565b60405180910390f35b61063760048036038101906106329190613b41565b611fcd565b005b610641612103565b005b61064b6121c7565b6040516106589190614322565b60405180910390f35b61067b60048036038101906106769190613c5a565b6121eb565b005b61069760048036038101906106929190613b41565b612214565b005b6106b360048036038101906106ae9190613cbf565b6122bd565b005b6106cf60048036038101906106ca9190613b6a565b612399565b6040516106dc919061479f565b60405180910390f35b6106ff60048036038101906106fa9190613b41565b612420565b60405161070c9190614307565b60405180910390f35b61072f600480360381019061072a9190613b41565b612440565b005b61074b60048036038101906107469190613b41565b61254e565b005b61076760048036038101906107629190613b41565b6127c4565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107dc57506107db82612c1a565b5b9050919050565b6060600380546107f2906149c8565b80601f016020809104026020016040519081016040528092919081815260200182805461081e906149c8565b801561086b5780601f106108405761010080835404028352916020019161086b565b820191906000526020600020905b81548152906001019060200180831161084e57829003601f168201915b5050505050905090565b61087d612c84565b73ffffffffffffffffffffffffffffffffffffffff1661089b611b8f565b73ffffffffffffffffffffffffffffffffffffffff16146108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e89061461f565b60405180910390fd5b6108f9612c8c565b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610922611b8f565b60405161092f91906142c3565b60405180910390a1565b60006109436113a2565b15610983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097a9061455f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a07906145bf565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a949061445f565b60405180910390fd5b610aa78383612d2f565b905092915050565b610ab7612c84565b73ffffffffffffffffffffffffffffffffffffffff16610ad5611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b229061461f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4a611b8f565b73ffffffffffffffffffffffffffffffffffffffff161415610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b98906143df565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc81604051610c2891906142c3565b60405180910390a150565b6000600254905090565b6000610c476113a2565b15610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e9061455f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b906145bf565b60405180910390fd5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d98906145df565b60405180910390fd5b610dac848484612d4d565b90509392505050565b600060066000838152602001908152602001600020600101549050919050565b610dde82610db5565b610def81610dea612c84565b612e4e565b610df98383612eeb565b505050565b60006012905090565b610e0f612c84565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e739061475f565b60405180910390fd5b610e868282612fcc565b5050565b6000610f2c610e97612c84565b848460016000610ea5612c84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2791906147fc565b6130ae565b6001905092915050565b610f3e6113a2565b15610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f759061455f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561100b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611002906145bf565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f906146ff565b60405180910390fd5b6110c27fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a633611bb9565b611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f8906143ff565b60405180910390fd5b600b548161110d610c33565b61111791906147fc565b1115611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f9061451f565b60405180910390fd5b6111628282613279565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516111a8919061479f565b60405180910390a25050565b6111bc6113a2565b156111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f39061455f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611289576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611280906145bf565b60405180910390fd5b6112b37fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a633611bb9565b6112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e9906146bf565b60405180910390fd5b6112fb816133cd565b3373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051611341919061479f565b60405180910390a250565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611409612c84565b73ffffffffffffffffffffffffffffffffffffffff16611427611b8f565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114749061461f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115486113a2565b905090565b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d6906144ff565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461166f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116669061457f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f39061453f565b60405180910390fd5b6000611706611b8f565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061179a6000801b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133e1565b6117e67fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a6600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133ef565b6118107fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a68261345f565b61181d6000801b8261345f565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff9137583280385c95e9f0f7e018aa7c2f9a8970ac8f2175f9d05735eb62ae37a60405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118e66113a2565b15611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d9061455f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906145bf565b60405180910390fd5b6119dd7fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a633611bb9565b611a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a13906146bf565b60405180910390fd5b611a268282613551565b8173ffffffffffffffffffffffffffffffffffffffff167f3c7611a5be35512cb20a6f2f039b47efb0d70f9c538e3886fa3f3e9c32af924f3383604051611a6e9291906142de565b60405180910390a25050565b611a82612c84565b73ffffffffffffffffffffffffffffffffffffffff16611aa0611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed9061461f565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a9061471f565b60405180910390fd5b611b8c81611fcd565b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000611c2e612c84565b73ffffffffffffffffffffffffffffffffffffffff16611c4c611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c999061461f565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611cd9906149c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611d05906149c8565b8015611d525780601f10611d2757610100808354040283529160200191611d52565b820191906000526020600020905b815481529060010190602001808311611d3557829003601f168201915b5050505050905090565b6000801b81565b60008060016000611d72612c84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e269061473f565b60405180910390fd5b611e4c611e3a612c84565b858584611e4791906148ac565b6130ae565b600191505092915050565b6000611e616113a2565b15611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e989061455f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f25906145bf565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb2906146ff565b60405180910390fd5b611fc583836135d5565b905092915050565b611fd5612c84565b73ffffffffffffffffffffffffffffffffffffffff16611ff3611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614612049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120409061461f565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd9061449f565b60405180910390fd5b6121007fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a6826133ef565b50565b61210b612c84565b73ffffffffffffffffffffffffffffffffffffffff16612129611b8f565b73ffffffffffffffffffffffffffffffffffffffff161461217f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121769061461f565b60405180910390fd5b6121876135f3565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6121b0611b8f565b6040516121bd91906142c3565b60405180910390a1565b7fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a681565b6121f482610db5565b61220581612200612c84565b612e4e565b61220f8383612fcc565b505050565b61221c612c84565b73ffffffffffffffffffffffffffffffffffffffff1661223a611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614612290576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122879061461f565b60405180910390fd5b6122ba7fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a68261345f565b50565b6122c5612c84565b73ffffffffffffffffffffffffffffffffffffffff166122e3611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614612339576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123309061461f565b60405180910390fd5b80612343306113b9565b1015612384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237b9061463f565b60405180910390fd5b61239630612390611b8f565b83613695565b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b612448612c84565b73ffffffffffffffffffffffffffffffffffffffff16612466611b8f565b73ffffffffffffffffffffffffffffffffffffffff16146124bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b39061461f565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c8160405161254391906142c3565b60405180910390a150565b612556612c84565b73ffffffffffffffffffffffffffffffffffffffff16612574611b8f565b73ffffffffffffffffffffffffffffffffffffffff16146125ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c19061461f565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e9061453f565b60405180910390fd5b61265f611b8f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c4906144bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561273d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127349061459f565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fb1eb34684306bcea7f9ed508931dc13b5993c8fdd00fe65c2e4680ae2610a70160405160405180910390a250565b6127cc612c84565b73ffffffffffffffffffffffffffffffffffffffff166127ea611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614612840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128379061461f565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c3906144df565b60405180910390fd5b60006128d7826113b9565b90506128e38282613914565b7f61e6e66b0d6339b2980aecc6ccc0039736791f0ccde9ed512e789a7fbdd698c682826040516129149291906142de565b60405180910390a15050565b6060600060028360026129339190614852565b61293d91906147fc565b67ffffffffffffffff81111561297c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129ae5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612a0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612a96577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612ad69190614852565b612ae091906147fc565b90505b6001811115612bcc577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612b48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612b85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612bc59061499e565b9050612ae3565b5060008414612c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c079061435f565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b612c946113a2565b15612cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccb9061455f565b60405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d18612c84565b604051612d2591906142c3565b60405180910390a1565b6000612d43612d3c612c84565b84846130ae565b6001905092915050565b6000612d5a848484613695565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000612da5612c84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c906145ff565b60405180910390fd5b612e4285612e31612c84565b8584612e3d91906148ac565b6130ae565b60019150509392505050565b612e588282611bb9565b612ee757612e7d8173ffffffffffffffffffffffffffffffffffffffff166014612920565b612e8b8360001c6020612920565b604051602001612e9c929190614289565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ede919061433d565b60405180910390fd5b5050565b612ef58282611bb9565b612fc85760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612f6d612c84565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b612fd68282611bb9565b156130aa5760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061304f612c84565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561311e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613115906146df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561318e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131859061441f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161326c919061479f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e09061477f565b60405180910390fd5b6132f560008383613ae8565b806002600082825461330791906147fc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461335c91906147fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133c1919061479f565b60405180910390a35050565b6133de6133d8612c84565b82613914565b50565b6133eb8282612eeb565b5050565b6133f98282610dd5565b613401611b8f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b816000801b14156134e157613472611b8f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156134e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d79061443f565b60405180910390fd5b5b6134eb82826121eb565b6134f3611b8f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60006135648361355f612c84565b612399565b9050818110156135a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a09061465f565b60405180910390fd5b6135c6836135b5612c84565b84846135c191906148ac565b6130ae565b6135d08383613914565b505050565b60006135e96135e2612c84565b8484613695565b6001905092915050565b6135fb6113a2565b61363a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136319061439f565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61367e612c84565b60405161368b91906142c3565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136fc9061469f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376c9061437f565b60405180910390fd5b613780838383613ae8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137fd9061447f565b60405180910390fd5b818161381291906148ac565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138a291906147fc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613906919061479f565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397b9061467f565b60405180910390fd5b61399082600083613ae8565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0d906143bf565b60405180910390fd5b8181613a2291906148ac565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254613a7691906148ac565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613adb919061479f565b60405180910390a3505050565b505050565b600081359050613afc816152d9565b92915050565b600081359050613b11816152f0565b92915050565b600081359050613b2681615307565b92915050565b600081359050613b3b8161531e565b92915050565b600060208284031215613b5357600080fd5b6000613b6184828501613aed565b91505092915050565b60008060408385031215613b7d57600080fd5b6000613b8b85828601613aed565b9250506020613b9c85828601613aed565b9150509250929050565b600080600060608486031215613bbb57600080fd5b6000613bc986828701613aed565b9350506020613bda86828701613aed565b9250506040613beb86828701613b2c565b9150509250925092565b60008060408385031215613c0857600080fd5b6000613c1685828601613aed565b9250506020613c2785828601613b2c565b9150509250929050565b600060208284031215613c4357600080fd5b6000613c5184828501613b02565b91505092915050565b60008060408385031215613c6d57600080fd5b6000613c7b85828601613b02565b9250506020613c8c85828601613aed565b9150509250929050565b600060208284031215613ca857600080fd5b6000613cb684828501613b17565b91505092915050565b600060208284031215613cd157600080fd5b6000613cdf84828501613b2c565b91505092915050565b613cf1816148e0565b82525050565b613d00816148f2565b82525050565b613d0f816148fe565b82525050565b6000613d20826147d5565b613d2a81856147e0565b9350613d3a81856020860161496b565b613d4381614a58565b840191505092915050565b6000613d59826147d5565b613d6381856147f1565b9350613d7381856020860161496b565b80840191505092915050565b6000613d8c6020836147e0565b9150613d9782614a69565b602082019050919050565b6000613daf6023836147e0565b9150613dba82614a92565b604082019050919050565b6000613dd26014836147e0565b9150613ddd82614ae1565b602082019050919050565b6000613df56022836147e0565b9150613e0082614b0a565b604082019050919050565b6000613e18601e836147e0565b9150613e2382614b59565b602082019050919050565b6000613e3b601d836147e0565b9150613e4682614b82565b602082019050919050565b6000613e5e6022836147e0565b9150613e6982614bab565b604082019050919050565b6000613e81602c836147e0565b9150613e8c82614bfa565b604082019050919050565b6000613ea46017836147e0565b9150613eaf82614c49565b602082019050919050565b6000613ec76026836147e0565b9150613ed282614c72565b604082019050919050565b6000613eea6017836147e0565b9150613ef582614cc1565b602082019050919050565b6000613f0d6034836147e0565b9150613f1882614cea565b604082019050919050565b6000613f30601f836147e0565b9150613f3b82614d39565b602082019050919050565b6000613f53601e836147e0565b9150613f5e82614d62565b602082019050919050565b6000613f766022836147e0565b9150613f8182614d8b565b604082019050919050565b6000613f996025836147e0565b9150613fa482614dda565b604082019050919050565b6000613fbc6010836147e0565b9150613fc782614e29565b602082019050919050565b6000613fdf6032836147e0565b9150613fea82614e52565b604082019050919050565b60006140026025836147e0565b915061400d82614ea1565b604082019050919050565b60006140256016836147e0565b915061403082614ef0565b602082019050919050565b6000614048601c836147e0565b915061405382614f19565b602082019050919050565b600061406b6028836147e0565b915061407682614f42565b604082019050919050565b600061408e6020836147e0565b915061409982614f91565b602082019050919050565b60006140b16021836147e0565b91506140bc82614fba565b604082019050919050565b60006140d46024836147e0565b91506140df82615009565b604082019050919050565b60006140f76021836147e0565b915061410282615058565b604082019050919050565b600061411a6025836147e0565b9150614125826150a7565b604082019050919050565b600061413d601d836147e0565b9150614148826150f6565b602082019050919050565b60006141606024836147e0565b915061416b8261511f565b604082019050919050565b6000614183601a836147e0565b915061418e8261516e565b602082019050919050565b60006141a66020836147e0565b91506141b182615197565b602082019050919050565b60006141c96017836147f1565b91506141d4826151c0565b601782019050919050565b60006141ec6025836147e0565b91506141f7826151e9565b604082019050919050565b600061420f6011836147f1565b915061421a82615238565b601182019050919050565b6000614232602f836147e0565b915061423d82615261565b604082019050919050565b6000614255601f836147e0565b9150614260826152b0565b602082019050919050565b61427481614954565b82525050565b6142838161495e565b82525050565b6000614294826141bc565b91506142a08285613d4e565b91506142ab82614202565b91506142b78284613d4e565b91508190509392505050565b60006020820190506142d86000830184613ce8565b92915050565b60006040820190506142f36000830185613ce8565b614300602083018461426b565b9392505050565b600060208201905061431c6000830184613cf7565b92915050565b60006020820190506143376000830184613d06565b92915050565b600060208201905081810360008301526143578184613d15565b905092915050565b6000602082019050818103600083015261437881613d7f565b9050919050565b6000602082019050818103600083015261439881613da2565b9050919050565b600060208201905081810360008301526143b881613dc5565b9050919050565b600060208201905081810360008301526143d881613de8565b9050919050565b600060208201905081810360008301526143f881613e0b565b9050919050565b6000602082019050818103600083015261441881613e2e565b9050919050565b6000602082019050818103600083015261443881613e51565b9050919050565b6000602082019050818103600083015261445881613e74565b9050919050565b6000602082019050818103600083015261447881613e97565b9050919050565b6000602082019050818103600083015261449881613eba565b9050919050565b600060208201905081810360008301526144b881613edd565b9050919050565b600060208201905081810360008301526144d881613f00565b9050919050565b600060208201905081810360008301526144f881613f23565b9050919050565b6000602082019050818103600083015261451881613f46565b9050919050565b6000602082019050818103600083015261453881613f69565b9050919050565b6000602082019050818103600083015261455881613f8c565b9050919050565b6000602082019050818103600083015261457881613faf565b9050919050565b6000602082019050818103600083015261459881613fd2565b9050919050565b600060208201905081810360008301526145b881613ff5565b9050919050565b600060208201905081810360008301526145d881614018565b9050919050565b600060208201905081810360008301526145f88161403b565b9050919050565b600060208201905081810360008301526146188161405e565b9050919050565b6000602082019050818103600083015261463881614081565b9050919050565b60006020820190508181036000830152614658816140a4565b9050919050565b60006020820190508181036000830152614678816140c7565b9050919050565b60006020820190508181036000830152614698816140ea565b9050919050565b600060208201905081810360008301526146b88161410d565b9050919050565b600060208201905081810360008301526146d881614130565b9050919050565b600060208201905081810360008301526146f881614153565b9050919050565b6000602082019050818103600083015261471881614176565b9050919050565b6000602082019050818103600083015261473881614199565b9050919050565b60006020820190508181036000830152614758816141df565b9050919050565b6000602082019050818103600083015261477881614225565b9050919050565b6000602082019050818103600083015261479881614248565b9050919050565b60006020820190506147b4600083018461426b565b92915050565b60006020820190506147cf600083018461427a565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061480782614954565b915061481283614954565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614847576148466149fa565b5b828201905092915050565b600061485d82614954565b915061486883614954565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148a1576148a06149fa565b5b828202905092915050565b60006148b782614954565b91506148c283614954565b9250828210156148d5576148d46149fa565b5b828203905092915050565b60006148eb82614934565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561498957808201518184015260208101905061496e565b83811115614998576000848401525b50505050565b60006149a982614954565b915060008214156149bd576149bc6149fa565b5b600182039050919050565b600060028204905060018216806149e057607f821691505b602082108114156149f4576149f3614a29565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e206e6f7420616464206f776e657220746f20626c61636b4c6973740000600082015250565b7f43616c6c6572206973206e6f7420616c6c6f77656420746f206d696e74000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f6f776e65722063616e206e6f74207265766f6b652068696d73656c662066726f60008201527f6d2061646d696e20726f6c650000000000000000000000000000000000000000602082015250565b7f5370656e64657220697320696e20626c61636b4c697374000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f6163636f756e7420697320696e20626c61636b4c697374000000000000000000600082015250565b7f50656e64696e67206f776e657220616e642063757272656e74206f776e65722060008201527f6e65656420746f20626520646966666572656e74000000000000000000000000602082015250565b7f41646472657373206973206e6f7420696e2074686520626c61636b4c69737400600082015250565b7f506c65617365207365742070656e64696e67206f776e65722066697273740000600082015250565b7f45786365656473205350574e20746f6b656e206d617820746f74616c5375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b7f50656e64696e67206f776e65722063616e206e6f7420626520696e20626c616360008201527f6b4c697374000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4f6e6c792070656e64696e67206f776e65722069732061626c6520746f20616360008201527f6365707420746865206f776e6572736869700000000000000000000000000000602082015250565b7f50656e64696e67206f776e65722063616e206e6f74206265207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f43616c6c657220697320696e20626c61636b4c69737400000000000000000000600082015250565b7f46726f6d206164647265737320697320696e20626c61636b4c69737400000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f72656465656d2063616e206e6f7420657863656564207468652062616c616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f7420616c6c6f77656420746f206275726e000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f546f206164647265737320697320696e20626c61636b4c697374000000000000600082015250565b7f417574686f726974794164647265737320697320696e20626c61636b4c697374600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6152e2816148e0565b81146152ed57600080fd5b50565b6152f9816148fe565b811461530457600080fd5b50565b61531081614908565b811461531b57600080fd5b50565b61532781614954565b811461533257600080fd5b5056fea26469706673582212207287bc27161d569544c7f9ac147f4d0107e1186dc6a1740786b0da9b637251cb64736f6c63430008030033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102485760003560e01c806379cc67901161013b578063be9a6555116100b8578063dd62ed3e1161007c578063dd62ed3e146106b5578063e47d6060146106e5578063e4997dc514610715578063f2fde38b14610731578063f3bdc2281461074d57610248565b8063be9a655514610639578063d03563ca14610643578063d547741f14610661578063d96086691461067d578063db006a751461069957610248565b806395d89b41116100ff57806395d89b4114610581578063a217fddf1461059f578063a457c2d7146105bd578063a9059cbb146105ed578063be38c0d51461061d57610248565b806379cc6790146104dd5780637a9e5e4b146104f95780638da5cb5b1461051557806391d148541461053357806393596c7b1461056357610248565b806336568abe116101c95780635c975abb1161018d5780635c975abb1461045d57806370a082311461047b578063715018a6146104ab57806375f12b21146104b557806379ba5097146104d357610248565b806336568abe146103a957806339509351146103c557806340c10f19146103f557806342966c681461041157806359bf1abe1461042d57610248565b806318160ddd1161021057806318160ddd146102f157806323b872dd1461030f578063248a9ca31461033f5780632f2ff15d1461036f578063313ce5671461038b57610248565b806301ffc9a71461024d57806306fdde031461027d57806307da68f51461029b578063095ea7b3146102a55780630ecb93c0146102d5575b600080fd5b61026760048036038101906102629190613c96565b610769565b6040516102749190614307565b60405180910390f35b6102856107e3565b604051610292919061433d565b60405180910390f35b6102a3610875565b005b6102bf60048036038101906102ba9190613bf5565b610939565b6040516102cc9190614307565b60405180910390f35b6102ef60048036038101906102ea9190613b41565b610aaf565b005b6102f9610c33565b604051610306919061479f565b60405180910390f35b61032960048036038101906103249190613ba6565b610c3d565b6040516103369190614307565b60405180910390f35b61035960048036038101906103549190613c31565b610db5565b6040516103669190614322565b60405180910390f35b61038960048036038101906103849190613c5a565b610dd5565b005b610393610dfe565b6040516103a091906147ba565b60405180910390f35b6103c360048036038101906103be9190613c5a565b610e07565b005b6103df60048036038101906103da9190613bf5565b610e8a565b6040516103ec9190614307565b60405180910390f35b61040f600480360381019061040a9190613bf5565b610f36565b005b61042b60048036038101906104269190613cbf565b6111b4565b005b61044760048036038101906104429190613b41565b61134c565b6040516104549190614307565b60405180910390f35b6104656113a2565b6040516104729190614307565b60405180910390f35b61049560048036038101906104909190613b41565b6113b9565b6040516104a2919061479f565b60405180910390f35b6104b3611401565b005b6104bd61153e565b6040516104ca9190614307565b60405180910390f35b6104db61154d565b005b6104f760048036038101906104f29190613bf5565b6118de565b005b610513600480360381019061050e9190613b41565b611a7a565b005b61051d611b8f565b60405161052a91906142c3565b60405180910390f35b61054d60048036038101906105489190613c5a565b611bb9565b60405161055a9190614307565b60405180910390f35b61056b611c24565b60405161057891906142c3565b60405180910390f35b610589611cca565b604051610596919061433d565b60405180910390f35b6105a7611d5c565b6040516105b49190614322565b60405180910390f35b6105d760048036038101906105d29190613bf5565b611d63565b6040516105e49190614307565b60405180910390f35b61060760048036038101906106029190613bf5565b611e57565b6040516106149190614307565b60405180910390f35b61063760048036038101906106329190613b41565b611fcd565b005b610641612103565b005b61064b6121c7565b6040516106589190614322565b60405180910390f35b61067b60048036038101906106769190613c5a565b6121eb565b005b61069760048036038101906106929190613b41565b612214565b005b6106b360048036038101906106ae9190613cbf565b6122bd565b005b6106cf60048036038101906106ca9190613b6a565b612399565b6040516106dc919061479f565b60405180910390f35b6106ff60048036038101906106fa9190613b41565b612420565b60405161070c9190614307565b60405180910390f35b61072f600480360381019061072a9190613b41565b612440565b005b61074b60048036038101906107469190613b41565b61254e565b005b61076760048036038101906107629190613b41565b6127c4565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107dc57506107db82612c1a565b5b9050919050565b6060600380546107f2906149c8565b80601f016020809104026020016040519081016040528092919081815260200182805461081e906149c8565b801561086b5780601f106108405761010080835404028352916020019161086b565b820191906000526020600020905b81548152906001019060200180831161084e57829003601f168201915b5050505050905090565b61087d612c84565b73ffffffffffffffffffffffffffffffffffffffff1661089b611b8f565b73ffffffffffffffffffffffffffffffffffffffff16146108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e89061461f565b60405180910390fd5b6108f9612c8c565b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610922611b8f565b60405161092f91906142c3565b60405180910390a1565b60006109436113a2565b15610983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097a9061455f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a07906145bf565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a949061445f565b60405180910390fd5b610aa78383612d2f565b905092915050565b610ab7612c84565b73ffffffffffffffffffffffffffffffffffffffff16610ad5611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b229061461f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4a611b8f565b73ffffffffffffffffffffffffffffffffffffffff161415610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b98906143df565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc81604051610c2891906142c3565b60405180910390a150565b6000600254905090565b6000610c476113a2565b15610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e9061455f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b906145bf565b60405180910390fd5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d98906145df565b60405180910390fd5b610dac848484612d4d565b90509392505050565b600060066000838152602001908152602001600020600101549050919050565b610dde82610db5565b610def81610dea612c84565b612e4e565b610df98383612eeb565b505050565b60006012905090565b610e0f612c84565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e739061475f565b60405180910390fd5b610e868282612fcc565b5050565b6000610f2c610e97612c84565b848460016000610ea5612c84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2791906147fc565b6130ae565b6001905092915050565b610f3e6113a2565b15610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f759061455f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561100b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611002906145bf565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f906146ff565b60405180910390fd5b6110c27fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a633611bb9565b611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f8906143ff565b60405180910390fd5b600b548161110d610c33565b61111791906147fc565b1115611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f9061451f565b60405180910390fd5b6111628282613279565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516111a8919061479f565b60405180910390a25050565b6111bc6113a2565b156111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f39061455f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611289576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611280906145bf565b60405180910390fd5b6112b37fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a633611bb9565b6112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e9906146bf565b60405180910390fd5b6112fb816133cd565b3373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051611341919061479f565b60405180910390a250565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611409612c84565b73ffffffffffffffffffffffffffffffffffffffff16611427611b8f565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114749061461f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115486113a2565b905090565b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d6906144ff565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461166f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116669061457f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f39061453f565b60405180910390fd5b6000611706611b8f565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061179a6000801b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133e1565b6117e67fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a6600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133ef565b6118107fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a68261345f565b61181d6000801b8261345f565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff9137583280385c95e9f0f7e018aa7c2f9a8970ac8f2175f9d05735eb62ae37a60405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118e66113a2565b15611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d9061455f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906145bf565b60405180910390fd5b6119dd7fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a633611bb9565b611a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a13906146bf565b60405180910390fd5b611a268282613551565b8173ffffffffffffffffffffffffffffffffffffffff167f3c7611a5be35512cb20a6f2f039b47efb0d70f9c538e3886fa3f3e9c32af924f3383604051611a6e9291906142de565b60405180910390a25050565b611a82612c84565b73ffffffffffffffffffffffffffffffffffffffff16611aa0611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed9061461f565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a9061471f565b60405180910390fd5b611b8c81611fcd565b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000611c2e612c84565b73ffffffffffffffffffffffffffffffffffffffff16611c4c611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c999061461f565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611cd9906149c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611d05906149c8565b8015611d525780601f10611d2757610100808354040283529160200191611d52565b820191906000526020600020905b815481529060010190602001808311611d3557829003601f168201915b5050505050905090565b6000801b81565b60008060016000611d72612c84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e269061473f565b60405180910390fd5b611e4c611e3a612c84565b858584611e4791906148ac565b6130ae565b600191505092915050565b6000611e616113a2565b15611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e989061455f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f25906145bf565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb2906146ff565b60405180910390fd5b611fc583836135d5565b905092915050565b611fd5612c84565b73ffffffffffffffffffffffffffffffffffffffff16611ff3611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614612049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120409061461f565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd9061449f565b60405180910390fd5b6121007fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a6826133ef565b50565b61210b612c84565b73ffffffffffffffffffffffffffffffffffffffff16612129611b8f565b73ffffffffffffffffffffffffffffffffffffffff161461217f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121769061461f565b60405180910390fd5b6121876135f3565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6121b0611b8f565b6040516121bd91906142c3565b60405180910390a1565b7fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a681565b6121f482610db5565b61220581612200612c84565b612e4e565b61220f8383612fcc565b505050565b61221c612c84565b73ffffffffffffffffffffffffffffffffffffffff1661223a611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614612290576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122879061461f565b60405180910390fd5b6122ba7fa60cb0df7bc178038b993aa2e0df2e2cfb6627f4695e4261227d47422ae7e2a68261345f565b50565b6122c5612c84565b73ffffffffffffffffffffffffffffffffffffffff166122e3611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614612339576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123309061461f565b60405180910390fd5b80612343306113b9565b1015612384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237b9061463f565b60405180910390fd5b61239630612390611b8f565b83613695565b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b612448612c84565b73ffffffffffffffffffffffffffffffffffffffff16612466611b8f565b73ffffffffffffffffffffffffffffffffffffffff16146124bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b39061461f565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c8160405161254391906142c3565b60405180910390a150565b612556612c84565b73ffffffffffffffffffffffffffffffffffffffff16612574611b8f565b73ffffffffffffffffffffffffffffffffffffffff16146125ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c19061461f565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e9061453f565b60405180910390fd5b61265f611b8f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c4906144bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561273d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127349061459f565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fb1eb34684306bcea7f9ed508931dc13b5993c8fdd00fe65c2e4680ae2610a70160405160405180910390a250565b6127cc612c84565b73ffffffffffffffffffffffffffffffffffffffff166127ea611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614612840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128379061461f565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c3906144df565b60405180910390fd5b60006128d7826113b9565b90506128e38282613914565b7f61e6e66b0d6339b2980aecc6ccc0039736791f0ccde9ed512e789a7fbdd698c682826040516129149291906142de565b60405180910390a15050565b6060600060028360026129339190614852565b61293d91906147fc565b67ffffffffffffffff81111561297c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129ae5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612a0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612a96577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612ad69190614852565b612ae091906147fc565b90505b6001811115612bcc577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612b48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612b85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612bc59061499e565b9050612ae3565b5060008414612c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c079061435f565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b612c946113a2565b15612cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccb9061455f565b60405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d18612c84565b604051612d2591906142c3565b60405180910390a1565b6000612d43612d3c612c84565b84846130ae565b6001905092915050565b6000612d5a848484613695565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000612da5612c84565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c906145ff565b60405180910390fd5b612e4285612e31612c84565b8584612e3d91906148ac565b6130ae565b60019150509392505050565b612e588282611bb9565b612ee757612e7d8173ffffffffffffffffffffffffffffffffffffffff166014612920565b612e8b8360001c6020612920565b604051602001612e9c929190614289565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ede919061433d565b60405180910390fd5b5050565b612ef58282611bb9565b612fc85760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612f6d612c84565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b612fd68282611bb9565b156130aa5760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061304f612c84565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561311e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613115906146df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561318e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131859061441f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161326c919061479f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e09061477f565b60405180910390fd5b6132f560008383613ae8565b806002600082825461330791906147fc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461335c91906147fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133c1919061479f565b60405180910390a35050565b6133de6133d8612c84565b82613914565b50565b6133eb8282612eeb565b5050565b6133f98282610dd5565b613401611b8f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b816000801b14156134e157613472611b8f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156134e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d79061443f565b60405180910390fd5b5b6134eb82826121eb565b6134f3611b8f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60006135648361355f612c84565b612399565b9050818110156135a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a09061465f565b60405180910390fd5b6135c6836135b5612c84565b84846135c191906148ac565b6130ae565b6135d08383613914565b505050565b60006135e96135e2612c84565b8484613695565b6001905092915050565b6135fb6113a2565b61363a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136319061439f565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61367e612c84565b60405161368b91906142c3565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136fc9061469f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376c9061437f565b60405180910390fd5b613780838383613ae8565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137fd9061447f565b60405180910390fd5b818161381291906148ac565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138a291906147fc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613906919061479f565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397b9061467f565b60405180910390fd5b61399082600083613ae8565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0d906143bf565b60405180910390fd5b8181613a2291906148ac565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254613a7691906148ac565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613adb919061479f565b60405180910390a3505050565b505050565b600081359050613afc816152d9565b92915050565b600081359050613b11816152f0565b92915050565b600081359050613b2681615307565b92915050565b600081359050613b3b8161531e565b92915050565b600060208284031215613b5357600080fd5b6000613b6184828501613aed565b91505092915050565b60008060408385031215613b7d57600080fd5b6000613b8b85828601613aed565b9250506020613b9c85828601613aed565b9150509250929050565b600080600060608486031215613bbb57600080fd5b6000613bc986828701613aed565b9350506020613bda86828701613aed565b9250506040613beb86828701613b2c565b9150509250925092565b60008060408385031215613c0857600080fd5b6000613c1685828601613aed565b9250506020613c2785828601613b2c565b9150509250929050565b600060208284031215613c4357600080fd5b6000613c5184828501613b02565b91505092915050565b60008060408385031215613c6d57600080fd5b6000613c7b85828601613b02565b9250506020613c8c85828601613aed565b9150509250929050565b600060208284031215613ca857600080fd5b6000613cb684828501613b17565b91505092915050565b600060208284031215613cd157600080fd5b6000613cdf84828501613b2c565b91505092915050565b613cf1816148e0565b82525050565b613d00816148f2565b82525050565b613d0f816148fe565b82525050565b6000613d20826147d5565b613d2a81856147e0565b9350613d3a81856020860161496b565b613d4381614a58565b840191505092915050565b6000613d59826147d5565b613d6381856147f1565b9350613d7381856020860161496b565b80840191505092915050565b6000613d8c6020836147e0565b9150613d9782614a69565b602082019050919050565b6000613daf6023836147e0565b9150613dba82614a92565b604082019050919050565b6000613dd26014836147e0565b9150613ddd82614ae1565b602082019050919050565b6000613df56022836147e0565b9150613e0082614b0a565b604082019050919050565b6000613e18601e836147e0565b9150613e2382614b59565b602082019050919050565b6000613e3b601d836147e0565b9150613e4682614b82565b602082019050919050565b6000613e5e6022836147e0565b9150613e6982614bab565b604082019050919050565b6000613e81602c836147e0565b9150613e8c82614bfa565b604082019050919050565b6000613ea46017836147e0565b9150613eaf82614c49565b602082019050919050565b6000613ec76026836147e0565b9150613ed282614c72565b604082019050919050565b6000613eea6017836147e0565b9150613ef582614cc1565b602082019050919050565b6000613f0d6034836147e0565b9150613f1882614cea565b604082019050919050565b6000613f30601f836147e0565b9150613f3b82614d39565b602082019050919050565b6000613f53601e836147e0565b9150613f5e82614d62565b602082019050919050565b6000613f766022836147e0565b9150613f8182614d8b565b604082019050919050565b6000613f996025836147e0565b9150613fa482614dda565b604082019050919050565b6000613fbc6010836147e0565b9150613fc782614e29565b602082019050919050565b6000613fdf6032836147e0565b9150613fea82614e52565b604082019050919050565b60006140026025836147e0565b915061400d82614ea1565b604082019050919050565b60006140256016836147e0565b915061403082614ef0565b602082019050919050565b6000614048601c836147e0565b915061405382614f19565b602082019050919050565b600061406b6028836147e0565b915061407682614f42565b604082019050919050565b600061408e6020836147e0565b915061409982614f91565b602082019050919050565b60006140b16021836147e0565b91506140bc82614fba565b604082019050919050565b60006140d46024836147e0565b91506140df82615009565b604082019050919050565b60006140f76021836147e0565b915061410282615058565b604082019050919050565b600061411a6025836147e0565b9150614125826150a7565b604082019050919050565b600061413d601d836147e0565b9150614148826150f6565b602082019050919050565b60006141606024836147e0565b915061416b8261511f565b604082019050919050565b6000614183601a836147e0565b915061418e8261516e565b602082019050919050565b60006141a66020836147e0565b91506141b182615197565b602082019050919050565b60006141c96017836147f1565b91506141d4826151c0565b601782019050919050565b60006141ec6025836147e0565b91506141f7826151e9565b604082019050919050565b600061420f6011836147f1565b915061421a82615238565b601182019050919050565b6000614232602f836147e0565b915061423d82615261565b604082019050919050565b6000614255601f836147e0565b9150614260826152b0565b602082019050919050565b61427481614954565b82525050565b6142838161495e565b82525050565b6000614294826141bc565b91506142a08285613d4e565b91506142ab82614202565b91506142b78284613d4e565b91508190509392505050565b60006020820190506142d86000830184613ce8565b92915050565b60006040820190506142f36000830185613ce8565b614300602083018461426b565b9392505050565b600060208201905061431c6000830184613cf7565b92915050565b60006020820190506143376000830184613d06565b92915050565b600060208201905081810360008301526143578184613d15565b905092915050565b6000602082019050818103600083015261437881613d7f565b9050919050565b6000602082019050818103600083015261439881613da2565b9050919050565b600060208201905081810360008301526143b881613dc5565b9050919050565b600060208201905081810360008301526143d881613de8565b9050919050565b600060208201905081810360008301526143f881613e0b565b9050919050565b6000602082019050818103600083015261441881613e2e565b9050919050565b6000602082019050818103600083015261443881613e51565b9050919050565b6000602082019050818103600083015261445881613e74565b9050919050565b6000602082019050818103600083015261447881613e97565b9050919050565b6000602082019050818103600083015261449881613eba565b9050919050565b600060208201905081810360008301526144b881613edd565b9050919050565b600060208201905081810360008301526144d881613f00565b9050919050565b600060208201905081810360008301526144f881613f23565b9050919050565b6000602082019050818103600083015261451881613f46565b9050919050565b6000602082019050818103600083015261453881613f69565b9050919050565b6000602082019050818103600083015261455881613f8c565b9050919050565b6000602082019050818103600083015261457881613faf565b9050919050565b6000602082019050818103600083015261459881613fd2565b9050919050565b600060208201905081810360008301526145b881613ff5565b9050919050565b600060208201905081810360008301526145d881614018565b9050919050565b600060208201905081810360008301526145f88161403b565b9050919050565b600060208201905081810360008301526146188161405e565b9050919050565b6000602082019050818103600083015261463881614081565b9050919050565b60006020820190508181036000830152614658816140a4565b9050919050565b60006020820190508181036000830152614678816140c7565b9050919050565b60006020820190508181036000830152614698816140ea565b9050919050565b600060208201905081810360008301526146b88161410d565b9050919050565b600060208201905081810360008301526146d881614130565b9050919050565b600060208201905081810360008301526146f881614153565b9050919050565b6000602082019050818103600083015261471881614176565b9050919050565b6000602082019050818103600083015261473881614199565b9050919050565b60006020820190508181036000830152614758816141df565b9050919050565b6000602082019050818103600083015261477881614225565b9050919050565b6000602082019050818103600083015261479881614248565b9050919050565b60006020820190506147b4600083018461426b565b92915050565b60006020820190506147cf600083018461427a565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061480782614954565b915061481283614954565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614847576148466149fa565b5b828201905092915050565b600061485d82614954565b915061486883614954565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148a1576148a06149fa565b5b828202905092915050565b60006148b782614954565b91506148c283614954565b9250828210156148d5576148d46149fa565b5b828203905092915050565b60006148eb82614934565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561498957808201518184015260208101905061496e565b83811115614998576000848401525b50505050565b60006149a982614954565b915060008214156149bd576149bc6149fa565b5b600182039050919050565b600060028204905060018216806149e057607f821691505b602082108114156149f4576149f3614a29565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e206e6f7420616464206f776e657220746f20626c61636b4c6973740000600082015250565b7f43616c6c6572206973206e6f7420616c6c6f77656420746f206d696e74000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f6f776e65722063616e206e6f74207265766f6b652068696d73656c662066726f60008201527f6d2061646d696e20726f6c650000000000000000000000000000000000000000602082015250565b7f5370656e64657220697320696e20626c61636b4c697374000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f6163636f756e7420697320696e20626c61636b4c697374000000000000000000600082015250565b7f50656e64696e67206f776e657220616e642063757272656e74206f776e65722060008201527f6e65656420746f20626520646966666572656e74000000000000000000000000602082015250565b7f41646472657373206973206e6f7420696e2074686520626c61636b4c69737400600082015250565b7f506c65617365207365742070656e64696e67206f776e65722066697273740000600082015250565b7f45786365656473205350574e20746f6b656e206d617820746f74616c5375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b7f50656e64696e67206f776e65722063616e206e6f7420626520696e20626c616360008201527f6b4c697374000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4f6e6c792070656e64696e67206f776e65722069732061626c6520746f20616360008201527f6365707420746865206f776e6572736869700000000000000000000000000000602082015250565b7f50656e64696e67206f776e65722063616e206e6f74206265207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f43616c6c657220697320696e20626c61636b4c69737400000000000000000000600082015250565b7f46726f6d206164647265737320697320696e20626c61636b4c69737400000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f72656465656d2063616e206e6f7420657863656564207468652062616c616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f7420616c6c6f77656420746f206275726e000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f546f206164647265737320697320696e20626c61636b4c697374000000000000600082015250565b7f417574686f726974794164647265737320697320696e20626c61636b4c697374600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6152e2816148e0565b81146152ed57600080fd5b50565b6152f9816148fe565b811461530457600080fd5b50565b61531081614908565b811461531b57600080fd5b50565b61532781614954565b811461533257600080fd5b5056fea26469706673582212207287bc27161d569544c7f9ac147f4d0107e1186dc6a1740786b0da9b637251cb64736f6c63430008030033
Deployed Bytecode Sourcemap
38032:3239:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27864:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6560:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36912:93;;;:::i;:::-;;38726:274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32554:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7680:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39008:307;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29191:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29576:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7522:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30624:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10209:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39610:446;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40064:289;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32958:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18701:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7851:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17074:148;;;:::i;:::-;;36824:80;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34474:700;;;:::i;:::-;;40361:357;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35351:209;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34182:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28169:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34068:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6779:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26138:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10927:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39323:279;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35639:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37013:98;;;:::i;:::-;;33160:68;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29968:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35911:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41069:199;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8429:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32412:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32789:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33636:424;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40726:335;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27864:213;27949:4;27988:32;27973:47;;;:11;:47;;;;:96;;;;28033:36;28057:11;28033:23;:36::i;:::-;27973:96;27966:103;;27864:213;;;:::o;6560:100::-;6614:13;6647:5;6640:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6560:100;:::o;36912:93::-;16654:12;:10;:12::i;:::-;16643:23;;:7;:5;:7::i;:::-;:23;;;16635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36956:8:::1;:6;:8::i;:::-;36982:15;36989:7;:5;:7::i;:::-;36982:15;;;;;;:::i;:::-;;;;;;;;36912:93::o:0;38726:274::-;38805:4;19027:8;:6;:8::i;:::-;19026:9;19018:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;38831:13:::1;:25;38845:10;38831:25;;;;;;;;;;;;;;;;;;;;;;;;;38830:26;38822:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38903:13;:18;38917:3;38903:18;;;;;;;;;;;;;;;;;;;;;;;;;38902:19;38894:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38969:23;38983:3;38988;38969:13;:23::i;:::-;38962:30;;38726:274:::0;;;;:::o;32554:227::-;16654:12;:10;:12::i;:::-;16643:23;;:7;:5;:7::i;:::-;:23;;;16635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32642:9:::1;32631:20;;:7;:5;:7::i;:::-;:20;;;;32623:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32726:4;32699:13;:24;32713:9;32699:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32748:25;32763:9;32748:25;;;;;;:::i;:::-;;;;;;;;32554:227:::0;:::o;7680:108::-;7741:7;7768:12;;7761:19;;7680:108;:::o;39008:307::-;39105:4;19027:8;:6;:8::i;:::-;19026:9;19018:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39131:13:::1;:25;39145:10;39131:25;;;;;;;;;;;;;;;;;;;;;;;;;39130:26;39122:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39203:13;:18;39217:3;39203:18;;;;;;;;;;;;;;;;;;;;;;;;;39202:19;39194:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39274:33;39293:3;39298;39303;39274:18;:33::i;:::-;39267:40;;39008:307:::0;;;;;:::o;29191:123::-;29257:7;29284:6;:12;29291:4;29284:12;;;;;;;;;;;:22;;;29277:29;;29191:123;;;:::o;29576:147::-;29659:18;29672:4;29659:12;:18::i;:::-;27742:30;27753:4;27759:12;:10;:12::i;:::-;27742:10;:30::i;:::-;29690:25:::1;29701:4;29707:7;29690:10;:25::i;:::-;29576:147:::0;;;:::o;7522:93::-;7580:5;7605:2;7598:9;;7522:93;:::o;30624:218::-;30731:12;:10;:12::i;:::-;30720:23;;:7;:23;;;30712:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;30808:26;30820:4;30826:7;30808:11;:26::i;:::-;30624:218;;:::o;10209:215::-;10297:4;10314:80;10323:12;:10;:12::i;:::-;10337:7;10383:10;10346:11;:25;10358:12;:10;:12::i;:::-;10346:25;;;;;;;;;;;;;;;:34;10372:7;10346:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10314:8;:80::i;:::-;10412:4;10405:11;;10209:215;;;;:::o;39610:446::-;19027:8;:6;:8::i;:::-;19026:9;19018:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39688:13:::1;:25;39702:10;39688:25;;;;;;;;;;;;;;;;;;;;;;;;;39687:26;39679:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39760:13;:18;39774:3;39760:18;;;;;;;;;;;;;;;;;;;;;;;;;39759:19;39751:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39828:35;33201:27;39852:10;39828:7;:35::i;:::-;39820:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;39939:10;;39932:3;39916:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:33;;39908:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;40001:15;40007:3;40012;40001:5;:15::i;:::-;40039:3;40034:14;;;40044:3;40034:14;;;;;;:::i;:::-;;;;;;;;39610:446:::0;;:::o;40064:289::-;19027:8;:6;:8::i;:::-;19026:9;19018:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;40138:13:::1;:25;40152:10;40138:25;;;;;;;;;;;;;;;;;;;;;;;;;40137:26;40129:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40209:35;33201:27;40233:10;40209:7;:35::i;:::-;40201:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40291:15;40302:3;40291:10;:15::i;:::-;40329:10;40324:21;;;40341:3;40324:21;;;;;;:::i;:::-;;;;;;;;40064:289:::0;:::o;32958:118::-;33023:4;33047:13;:21;33061:6;33047:21;;;;;;;;;;;;;;;;;;;;;;;;;33040:28;;32958:118;;;:::o;18701:86::-;18748:4;18772:7;;;;;;;;;;;18765:14;;18701:86;:::o;7851:127::-;7925:7;7952:9;:18;7962:7;7952:18;;;;;;;;;;;;;;;;7945:25;;7851:127;;;:::o;17074:148::-;16654:12;:10;:12::i;:::-;16643:23;;:7;:5;:7::i;:::-;:23;;;16635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17181:1:::1;17144:40;;17165:6;;;;;;;;;;;17144:40;;;;;;;;;;;;17212:1;17195:6;;:19;;;;;;;;;;;;;;;;;;17074:148::o:0;36824:80::-;36864:4;36888:8;:6;:8::i;:::-;36881:15;;36824:80;:::o;34474:700::-;34552:1;34527:27;;:13;;;;;;;;;;;:27;;;;34519:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34625:10;34608:27;;:13;;;;;;;;;;;:27;;;34600:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34710:13;:25;34724:10;34710:25;;;;;;;;;;;;;;;;;;;;;;;;;34709:26;34701:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;34790:16;34809:7;:5;:7::i;:::-;34790:26;;34838:13;;;;;;;;;;;34829:6;;:22;;;;;;;;;;;;;;;;;;34864:45;26183:4;34875:18;;34895:13;;;;;;;;;;;34864:10;:45::i;:::-;34920:43;33201:27;34949:13;;;;;;;;;;;34920:12;:43::i;:::-;34976:39;33201:27;35006:8;34976:13;:39::i;:::-;35026:43;26183:4;35040:18;;35060:8;35026:13;:43::i;:::-;35113:13;;;;;;;;;;;35087:40;;35103:8;35087:40;;;;;;;;;;;;35164:1;35140:13;;:26;;;;;;;;;;;;;;;;;;34474:700;:::o;40361:357::-;19027:8;:6;:8::i;:::-;19026:9;19018:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;40463:13:::1;:25;40477:10;40463:25;;;;;;;;;;;;;;;;;;;;;;;;;40462:26;40454:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40534:35;33201:27;40558:10;40534:7;:35::i;:::-;40526:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40616:35;40631:14;40647:3;40616:14;:35::i;:::-;40678:14;40669:41;;;40694:10;40706:3;40669:41;;;;;;;:::i;:::-;;;;;;;;40361:357:::0;;:::o;35351:209::-;16654:12;:10;:12::i;:::-;16643:23;;:7;:5;:7::i;:::-;:23;;;16635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35436:13:::1;:31;35450:16;35436:31;;;;;;;;;;;;;;;;;;;;;;;;;35435:32;35427:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;35517:35;35535:16;35517:17;:35::i;:::-;35351:209:::0;:::o;34182:88::-;34229:7;34256:6;;;;;;;;;;;34249:13;;34182:88;:::o;28169:139::-;28247:4;28271:6;:12;28278:4;28271:12;;;;;;;;;;;:20;;:29;28292:7;28271:29;;;;;;;;;;;;;;;;;;;;;;;;;28264:36;;28169:139;;;;:::o;34068:106::-;34126:7;16654:12;:10;:12::i;:::-;16643:23;;:7;:5;:7::i;:::-;:23;;;16635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34153:13:::1;;;;;;;;;;;34146:20;;34068:106:::0;:::o;6779:104::-;6835:13;6868:7;6861:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6779:104;:::o;26138:49::-;26183:4;26138:49;;;:::o;10927:377::-;11020:4;11037:24;11064:11;:25;11076:12;:10;:12::i;:::-;11064:25;;;;;;;;;;;;;;;:34;11090:7;11064:34;;;;;;;;;;;;;;;;11037:61;;11137:15;11117:16;:35;;11109:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11205:67;11214:12;:10;:12::i;:::-;11228:7;11256:15;11237:16;:34;;;;:::i;:::-;11205:8;:67::i;:::-;11292:4;11285:11;;;10927:377;;;;:::o;39323:279::-;39403:4;19027:8;:6;:8::i;:::-;19026:9;19018:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39429:13:::1;:25;39443:10;39429:25;;;;;;;;;;;;;;;;;;;;;;;;;39428:26;39420:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39501:13;:18;39515:3;39501:18;;;;;;;;;;;;;;;;;;;;;;;;;39500:19;39492:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39570:24;39585:3;39590;39570:14;:24::i;:::-;39563:31;;39323:279:::0;;;;:::o;35639:189::-;16654:12;:10;:12::i;:::-;16643:23;;:7;:5;:7::i;:::-;:23;;;16635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35720:13:::1;:22;35734:7;35720:22;;;;;;;;;;;;;;;;;;;;;;;;;35719:23;35711:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;35783:37;33201:27;35812:7;35783:12;:37::i;:::-;35639:189:::0;:::o;37013:98::-;16654:12;:10;:12::i;:::-;16643:23;;:7;:5;:7::i;:::-;:23;;;16635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37058:10:::1;:8;:10::i;:::-;37086:17;37095:7;:5;:7::i;:::-;37086:17;;;;;;:::i;:::-;;;;;;;;37013:98::o:0;33160:68::-;33201:27;33160:68;:::o;29968:149::-;30052:18;30065:4;30052:12;:18::i;:::-;27742:30;27753:4;27759:12;:10;:12::i;:::-;27742:10;:30::i;:::-;30083:26:::1;30095:4;30101:7;30083:11;:26::i;:::-;29968:149:::0;;;:::o;35911:119::-;16654:12;:10;:12::i;:::-;16643:23;;:7;:5;:7::i;:::-;:23;;;16635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35984:38:::1;33201:27;36014:7;35984:13;:38::i;:::-;35911:119:::0;:::o;41069:199::-;16654:12;:10;:12::i;:::-;16643:23;;:7;:5;:7::i;:::-;:23;;;16635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41162:6:::1;41134:24;41152:4;41134:9;:24::i;:::-;:34;;41126:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;41219:41;41237:4;41244:7;:5;:7::i;:::-;41253:6;41219:9;:41::i;:::-;41069:199:::0;:::o;8429:151::-;8518:7;8545:11;:18;8557:5;8545:18;;;;;;;;;;;;;;;:27;8564:7;8545:27;;;;;;;;;;;;;;;;8538:34;;8429:151;;;;:::o;32412:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;32789:161::-;16654:12;:10;:12::i;:::-;16643:23;;:7;:5;:7::i;:::-;:23;;;16635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32894:5:::1;32864:13;:27;32878:12;32864:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32912:30;32929:12;32912:30;;;;;;:::i;:::-;;;;;;;;32789:161:::0;:::o;33636:424::-;16654:12;:10;:12::i;:::-;16643:23;;:7;:5;:7::i;:::-;:23;;;16635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33727:13:::1;:23;33741:8;33727:23;;;;;;;;;;;;;;;;;;;;;;;;;33726:24;33718:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;33823:7;:5;:7::i;:::-;33811:19;;:8;:19;;;;33803:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;33926:1;33906:22;;:8;:22;;;;33898:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;33999:8;33983:13;;:24;;;;;;;;;;;;;;;;;;34043:8;34025:27;;;;;;;;;;;;33636:424:::0;:::o;40726:335::-;16654:12;:10;:12::i;:::-;16643:23;;:7;:5;:7::i;:::-;:23;;;16635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40815:13:::1;:31;40829:16;40815:31;;;;;;;;;;;;;;;;;;;;;;;;;40807:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40895:15;40913:27;40923:16;40913:9;:27::i;:::-;40895:45;;40951:35;40957:16;40975:10;40951:5;:35::i;:::-;41004:49;41024:16;41042:10;41004:49;;;;;;;:::i;:::-;;;;;;;;16714:1;40726:335:::0;:::o;21493:447::-;21568:13;21594:19;21639:1;21630:6;21626:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;21616:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21594:47;;21652:15;:6;21659:1;21652:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;21678;:6;21685:1;21678:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;21709:9;21734:1;21725:6;21721:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;21709:26;;21704:131;21741:1;21737;:5;21704:131;;;21776:8;21793:3;21785:5;:11;21776:21;;;;;;;;;;;;;;;;;;21764:6;21771:1;21764:9;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;21822:1;21812:11;;;;;21744:3;;;;:::i;:::-;;;21704:131;;;;21862:1;21853:5;:10;21845:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21925:6;21911:21;;;21493:447;;;;:::o;23592:157::-;23677:4;23716:25;23701:40;;;:11;:40;;;;23694:47;;23592:157;;;:::o;4149:98::-;4202:7;4229:10;4222:17;;4149:98;:::o;19501:118::-;19027:8;:6;:8::i;:::-;19026:9;19018:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;19571:4:::1;19561:7;;:14;;;;;;;;;;;;;;;;;;19591:20;19598:12;:10;:12::i;:::-;19591:20;;;;;;:::i;:::-;;;;;;;;19501:118::o:0;8727:169::-;8810:4;8827:39;8836:12;:10;:12::i;:::-;8850:7;8859:6;8827:8;:39::i;:::-;8884:4;8877:11;;8727:169;;;;:::o;9378:422::-;9484:4;9501:36;9511:6;9519:9;9530:6;9501:9;:36::i;:::-;9550:24;9577:11;:19;9589:6;9577:19;;;;;;;;;;;;;;;:33;9597:12;:10;:12::i;:::-;9577:33;;;;;;;;;;;;;;;;9550:60;;9649:6;9629:16;:26;;9621:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9711:57;9720:6;9728:12;:10;:12::i;:::-;9761:6;9742:16;:25;;;;:::i;:::-;9711:8;:57::i;:::-;9788:4;9781:11;;;9378:422;;;;;:::o;28598:404::-;28678:22;28686:4;28692:7;28678;:22::i;:::-;28674:321;;28818:41;28846:7;28818:41;;28856:2;28818:19;:41::i;:::-;28924:38;28952:4;28944:13;;28959:2;28924:19;:38::i;:::-;28731:250;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28717:266;;;;;;;;;;;:::i;:::-;;;;;;;;28674:321;28598:404;;:::o;31872:229::-;31947:22;31955:4;31961:7;31947;:22::i;:::-;31942:152;;32018:4;31986:6;:12;31993:4;31986:12;;;;;;;;;;;:20;;:29;32007:7;31986:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;32069:12;:10;:12::i;:::-;32042:40;;32060:7;32042:40;;32054:4;32042:40;;;;;;;;;;31942:152;31872:229;;:::o;32109:230::-;32184:22;32192:4;32198:7;32184;:22::i;:::-;32180:152;;;32255:5;32223:6;:12;32230:4;32223:12;;;;;;;;;;;:20;;:29;32244:7;32223:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;32307:12;:10;:12::i;:::-;32280:40;;32298:7;32280:40;;32292:4;32280:40;;;;;;;;;;32180:152;32109:230;;:::o;14283:346::-;14402:1;14385:19;;:5;:19;;;;14377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14483:1;14464:21;;:7;:21;;;;14456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14567:6;14537:11;:18;14549:5;14537:18;;;;;;;;;;;;;;;:27;14556:7;14537:27;;;;;;;;;;;;;;;:36;;;;14605:7;14589:32;;14598:5;14589:32;;;14614:6;14589:32;;;;;;:::i;:::-;;;;;;;;14283:346;;;:::o;12680:338::-;12783:1;12764:21;;:7;:21;;;;12756:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12834:49;12863:1;12867:7;12876:6;12834:20;:49::i;:::-;12912:6;12896:12;;:22;;;;;;;:::i;:::-;;;;;;;;12951:6;12929:9;:18;12939:7;12929:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12994:7;12973:37;;12990:1;12973:37;;;13003:6;12973:37;;;;;;:::i;:::-;;;;;;;;12680:338;;:::o;37283:91::-;37339:27;37345:12;:10;:12::i;:::-;37359:6;37339:5;:27::i;:::-;37283:91;:::o;31425:112::-;31504:25;31515:4;31521:7;31504:10;:25::i;:::-;31425:112;;:::o;36108:158::-;36181:24;36191:4;36197:7;36181:9;:24::i;:::-;36250:7;:5;:7::i;:::-;36223:35;;36241:7;36223:35;;36235:4;36223:35;;;;;;;;;;36108:158;;:::o;36346:306::-;36446:4;26183;36424:18;;:26;36420:134;;;36486:7;:5;:7::i;:::-;36475:18;;:7;:18;;;;36467:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;36420:134;36566:25;36577:4;36583:7;36566:10;:25::i;:::-;36636:7;:5;:7::i;:::-;36609:35;;36627:7;36609:35;;36621:4;36609:35;;;;;;;;;;36346:306;;:::o;37693:332::-;37770:24;37797:32;37807:7;37816:12;:10;:12::i;:::-;37797:9;:32::i;:::-;37770:59;;37868:6;37848:16;:26;;37840:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;37926:58;37935:7;37944:12;:10;:12::i;:::-;37977:6;37958:16;:25;;;;:::i;:::-;37926:8;:58::i;:::-;37995:22;38001:7;38010:6;37995:5;:22::i;:::-;37693:332;;;:::o;8191:175::-;8277:4;8294:42;8304:12;:10;:12::i;:::-;8318:9;8329:6;8294:9;:42::i;:::-;8354:4;8347:11;;8191:175;;;;:::o;19760:120::-;19304:8;:6;:8::i;:::-;19296:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;19829:5:::1;19819:7;;:15;;;;;;;;;;;;;;;;;;19850:22;19859:12;:10;:12::i;:::-;19850:22;;;;;;:::i;:::-;;;;;;;;19760:120::o:0;11794:604::-;11918:1;11900:20;;:6;:20;;;;11892:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12002:1;11981:23;;:9;:23;;;;11973:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12057:47;12078:6;12086:9;12097:6;12057:20;:47::i;:::-;12117:21;12141:9;:17;12151:6;12141:17;;;;;;;;;;;;;;;;12117:41;;12194:6;12177:13;:23;;12169:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12290:6;12274:13;:22;;;;:::i;:::-;12254:9;:17;12264:6;12254:17;;;;;;;;;;;;;;;:42;;;;12331:6;12307:9;:20;12317:9;12307:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12372:9;12355:35;;12364:6;12355:35;;;12383:6;12355:35;;;;;;:::i;:::-;;;;;;;;11794:604;;;;:::o;13351:494::-;13454:1;13435:21;;:7;:21;;;;13427:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13507:49;13528:7;13545:1;13549:6;13507:20;:49::i;:::-;13569:22;13594:9;:18;13604:7;13594:18;;;;;;;;;;;;;;;;13569:43;;13649:6;13631:14;:24;;13623:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13743:6;13726:14;:23;;;;:::i;:::-;13705:9;:18;13715:7;13705:18;;;;;;;;;;;;;;;:44;;;;13776:6;13760:12;;:22;;;;;;;:::i;:::-;;;;;;;;13826:1;13800:37;;13809:7;13800:37;;;13830:6;13800:37;;;;;;:::i;:::-;;;;;;;;13351:494;;;:::o;15232:92::-;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:137::-;;380:6;367:20;358:29;;396:32;422:5;396:32;:::i;:::-;348:86;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:407::-;;;978:2;966:9;957:7;953:23;949:32;946:2;;;994:1;991;984:12;946:2;1037:1;1062:53;1107:7;1098:6;1087:9;1083:22;1062:53;:::i;:::-;1052:63;;1008:117;1164:2;1190:53;1235:7;1226:6;1215:9;1211:22;1190:53;:::i;:::-;1180:63;;1135:118;936:324;;;;;:::o;1266:552::-;;;;1408:2;1396:9;1387:7;1383:23;1379:32;1376:2;;;1424:1;1421;1414:12;1376:2;1467:1;1492:53;1537:7;1528:6;1517:9;1513:22;1492:53;:::i;:::-;1482:63;;1438:117;1594:2;1620:53;1665:7;1656:6;1645:9;1641:22;1620:53;:::i;:::-;1610:63;;1565:118;1722:2;1748:53;1793:7;1784:6;1773:9;1769:22;1748:53;:::i;:::-;1738:63;;1693:118;1366:452;;;;;:::o;1824:407::-;;;1949:2;1937:9;1928:7;1924:23;1920:32;1917:2;;;1965:1;1962;1955:12;1917:2;2008:1;2033:53;2078:7;2069:6;2058:9;2054:22;2033:53;:::i;:::-;2023:63;;1979:117;2135:2;2161:53;2206:7;2197:6;2186:9;2182:22;2161:53;:::i;:::-;2151:63;;2106:118;1907:324;;;;;:::o;2237:262::-;;2345:2;2333:9;2324:7;2320:23;2316:32;2313:2;;;2361:1;2358;2351:12;2313:2;2404:1;2429:53;2474:7;2465:6;2454:9;2450:22;2429:53;:::i;:::-;2419:63;;2375:117;2303:196;;;;:::o;2505:407::-;;;2630:2;2618:9;2609:7;2605:23;2601:32;2598:2;;;2646:1;2643;2636:12;2598:2;2689:1;2714:53;2759:7;2750:6;2739:9;2735:22;2714:53;:::i;:::-;2704:63;;2660:117;2816:2;2842:53;2887:7;2878:6;2867:9;2863:22;2842:53;:::i;:::-;2832:63;;2787:118;2588:324;;;;;:::o;2918:260::-;;3025:2;3013:9;3004:7;3000:23;2996:32;2993:2;;;3041:1;3038;3031:12;2993:2;3084:1;3109:52;3153:7;3144:6;3133:9;3129:22;3109:52;:::i;:::-;3099:62;;3055:116;2983:195;;;;:::o;3184:262::-;;3292:2;3280:9;3271:7;3267:23;3263:32;3260:2;;;3308:1;3305;3298:12;3260:2;3351:1;3376:53;3421:7;3412:6;3401:9;3397:22;3376:53;:::i;:::-;3366:63;;3322:117;3250:196;;;;:::o;3452:118::-;3539:24;3557:5;3539:24;:::i;:::-;3534:3;3527:37;3517:53;;:::o;3576:109::-;3657:21;3672:5;3657:21;:::i;:::-;3652:3;3645:34;3635:50;;:::o;3691:118::-;3778:24;3796:5;3778:24;:::i;:::-;3773:3;3766:37;3756:53;;:::o;3815:364::-;;3931:39;3964:5;3931:39;:::i;:::-;3986:71;4050:6;4045:3;3986:71;:::i;:::-;3979:78;;4066:52;4111:6;4106:3;4099:4;4092:5;4088:16;4066:52;:::i;:::-;4143:29;4165:6;4143:29;:::i;:::-;4138:3;4134:39;4127:46;;3907:272;;;;;:::o;4185:377::-;;4319:39;4352:5;4319:39;:::i;:::-;4374:89;4456:6;4451:3;4374:89;:::i;:::-;4367:96;;4472:52;4517:6;4512:3;4505:4;4498:5;4494:16;4472:52;:::i;:::-;4549:6;4544:3;4540:16;4533:23;;4295:267;;;;;:::o;4568:366::-;;4731:67;4795:2;4790:3;4731:67;:::i;:::-;4724:74;;4807:93;4896:3;4807:93;:::i;:::-;4925:2;4920:3;4916:12;4909:19;;4714:220;;;:::o;4940:366::-;;5103:67;5167:2;5162:3;5103:67;:::i;:::-;5096:74;;5179:93;5268:3;5179:93;:::i;:::-;5297:2;5292:3;5288:12;5281:19;;5086:220;;;:::o;5312:366::-;;5475:67;5539:2;5534:3;5475:67;:::i;:::-;5468:74;;5551:93;5640:3;5551:93;:::i;:::-;5669:2;5664:3;5660:12;5653:19;;5458:220;;;:::o;5684:366::-;;5847:67;5911:2;5906:3;5847:67;:::i;:::-;5840:74;;5923:93;6012:3;5923:93;:::i;:::-;6041:2;6036:3;6032:12;6025:19;;5830:220;;;:::o;6056:366::-;;6219:67;6283:2;6278:3;6219:67;:::i;:::-;6212:74;;6295:93;6384:3;6295:93;:::i;:::-;6413:2;6408:3;6404:12;6397:19;;6202:220;;;:::o;6428:366::-;;6591:67;6655:2;6650:3;6591:67;:::i;:::-;6584:74;;6667:93;6756:3;6667:93;:::i;:::-;6785:2;6780:3;6776:12;6769:19;;6574:220;;;:::o;6800:366::-;;6963:67;7027:2;7022:3;6963:67;:::i;:::-;6956:74;;7039:93;7128:3;7039:93;:::i;:::-;7157:2;7152:3;7148:12;7141:19;;6946:220;;;:::o;7172:366::-;;7335:67;7399:2;7394:3;7335:67;:::i;:::-;7328:74;;7411:93;7500:3;7411:93;:::i;:::-;7529:2;7524:3;7520:12;7513:19;;7318:220;;;:::o;7544:366::-;;7707:67;7771:2;7766:3;7707:67;:::i;:::-;7700:74;;7783:93;7872:3;7783:93;:::i;:::-;7901:2;7896:3;7892:12;7885:19;;7690:220;;;:::o;7916:366::-;;8079:67;8143:2;8138:3;8079:67;:::i;:::-;8072:74;;8155:93;8244:3;8155:93;:::i;:::-;8273:2;8268:3;8264:12;8257:19;;8062:220;;;:::o;8288:366::-;;8451:67;8515:2;8510:3;8451:67;:::i;:::-;8444:74;;8527:93;8616:3;8527:93;:::i;:::-;8645:2;8640:3;8636:12;8629:19;;8434:220;;;:::o;8660:366::-;;8823:67;8887:2;8882:3;8823:67;:::i;:::-;8816:74;;8899:93;8988:3;8899:93;:::i;:::-;9017:2;9012:3;9008:12;9001:19;;8806:220;;;:::o;9032:366::-;;9195:67;9259:2;9254:3;9195:67;:::i;:::-;9188:74;;9271:93;9360:3;9271:93;:::i;:::-;9389:2;9384:3;9380:12;9373:19;;9178:220;;;:::o;9404:366::-;;9567:67;9631:2;9626:3;9567:67;:::i;:::-;9560:74;;9643:93;9732:3;9643:93;:::i;:::-;9761:2;9756:3;9752:12;9745:19;;9550:220;;;:::o;9776:366::-;;9939:67;10003:2;9998:3;9939:67;:::i;:::-;9932:74;;10015:93;10104:3;10015:93;:::i;:::-;10133:2;10128:3;10124:12;10117:19;;9922:220;;;:::o;10148:366::-;;10311:67;10375:2;10370:3;10311:67;:::i;:::-;10304:74;;10387:93;10476:3;10387:93;:::i;:::-;10505:2;10500:3;10496:12;10489:19;;10294:220;;;:::o;10520:366::-;;10683:67;10747:2;10742:3;10683:67;:::i;:::-;10676:74;;10759:93;10848:3;10759:93;:::i;:::-;10877:2;10872:3;10868:12;10861:19;;10666:220;;;:::o;10892:366::-;;11055:67;11119:2;11114:3;11055:67;:::i;:::-;11048:74;;11131:93;11220:3;11131:93;:::i;:::-;11249:2;11244:3;11240:12;11233:19;;11038:220;;;:::o;11264:366::-;;11427:67;11491:2;11486:3;11427:67;:::i;:::-;11420:74;;11503:93;11592:3;11503:93;:::i;:::-;11621:2;11616:3;11612:12;11605:19;;11410:220;;;:::o;11636:366::-;;11799:67;11863:2;11858:3;11799:67;:::i;:::-;11792:74;;11875:93;11964:3;11875:93;:::i;:::-;11993:2;11988:3;11984:12;11977:19;;11782:220;;;:::o;12008:366::-;;12171:67;12235:2;12230:3;12171:67;:::i;:::-;12164:74;;12247:93;12336:3;12247:93;:::i;:::-;12365:2;12360:3;12356:12;12349:19;;12154:220;;;:::o;12380:366::-;;12543:67;12607:2;12602:3;12543:67;:::i;:::-;12536:74;;12619:93;12708:3;12619:93;:::i;:::-;12737:2;12732:3;12728:12;12721:19;;12526:220;;;:::o;12752:366::-;;12915:67;12979:2;12974:3;12915:67;:::i;:::-;12908:74;;12991:93;13080:3;12991:93;:::i;:::-;13109:2;13104:3;13100:12;13093:19;;12898:220;;;:::o;13124:366::-;;13287:67;13351:2;13346:3;13287:67;:::i;:::-;13280:74;;13363:93;13452:3;13363:93;:::i;:::-;13481:2;13476:3;13472:12;13465:19;;13270:220;;;:::o;13496:366::-;;13659:67;13723:2;13718:3;13659:67;:::i;:::-;13652:74;;13735:93;13824:3;13735:93;:::i;:::-;13853:2;13848:3;13844:12;13837:19;;13642:220;;;:::o;13868:366::-;;14031:67;14095:2;14090:3;14031:67;:::i;:::-;14024:74;;14107:93;14196:3;14107:93;:::i;:::-;14225:2;14220:3;14216:12;14209:19;;14014:220;;;:::o;14240:366::-;;14403:67;14467:2;14462:3;14403:67;:::i;:::-;14396:74;;14479:93;14568:3;14479:93;:::i;:::-;14597:2;14592:3;14588:12;14581:19;;14386:220;;;:::o;14612:366::-;;14775:67;14839:2;14834:3;14775:67;:::i;:::-;14768:74;;14851:93;14940:3;14851:93;:::i;:::-;14969:2;14964:3;14960:12;14953:19;;14758:220;;;:::o;14984:366::-;;15147:67;15211:2;15206:3;15147:67;:::i;:::-;15140:74;;15223:93;15312:3;15223:93;:::i;:::-;15341:2;15336:3;15332:12;15325:19;;15130:220;;;:::o;15356:366::-;;15519:67;15583:2;15578:3;15519:67;:::i;:::-;15512:74;;15595:93;15684:3;15595:93;:::i;:::-;15713:2;15708:3;15704:12;15697:19;;15502:220;;;:::o;15728:366::-;;15891:67;15955:2;15950:3;15891:67;:::i;:::-;15884:74;;15967:93;16056:3;15967:93;:::i;:::-;16085:2;16080:3;16076:12;16069:19;;15874:220;;;:::o;16100:402::-;;16281:85;16363:2;16358:3;16281:85;:::i;:::-;16274:92;;16375:93;16464:3;16375:93;:::i;:::-;16493:2;16488:3;16484:12;16477:19;;16264:238;;;:::o;16508:366::-;;16671:67;16735:2;16730:3;16671:67;:::i;:::-;16664:74;;16747:93;16836:3;16747:93;:::i;:::-;16865:2;16860:3;16856:12;16849:19;;16654:220;;;:::o;16880:402::-;;17061:85;17143:2;17138:3;17061:85;:::i;:::-;17054:92;;17155:93;17244:3;17155:93;:::i;:::-;17273:2;17268:3;17264:12;17257:19;;17044:238;;;:::o;17288:366::-;;17451:67;17515:2;17510:3;17451:67;:::i;:::-;17444:74;;17527:93;17616:3;17527:93;:::i;:::-;17645:2;17640:3;17636:12;17629:19;;17434:220;;;:::o;17660:366::-;;17823:67;17887:2;17882:3;17823:67;:::i;:::-;17816:74;;17899:93;17988:3;17899:93;:::i;:::-;18017:2;18012:3;18008:12;18001:19;;17806:220;;;:::o;18032:118::-;18119:24;18137:5;18119:24;:::i;:::-;18114:3;18107:37;18097:53;;:::o;18156:112::-;18239:22;18255:5;18239:22;:::i;:::-;18234:3;18227:35;18217:51;;:::o;18274:967::-;;18678:148;18822:3;18678:148;:::i;:::-;18671:155;;18843:95;18934:3;18925:6;18843:95;:::i;:::-;18836:102;;18955:148;19099:3;18955:148;:::i;:::-;18948:155;;19120:95;19211:3;19202:6;19120:95;:::i;:::-;19113:102;;19232:3;19225:10;;18660:581;;;;;:::o;19247:222::-;;19378:2;19367:9;19363:18;19355:26;;19391:71;19459:1;19448:9;19444:17;19435:6;19391:71;:::i;:::-;19345:124;;;;:::o;19475:332::-;;19634:2;19623:9;19619:18;19611:26;;19647:71;19715:1;19704:9;19700:17;19691:6;19647:71;:::i;:::-;19728:72;19796:2;19785:9;19781:18;19772:6;19728:72;:::i;:::-;19601:206;;;;;:::o;19813:210::-;;19938:2;19927:9;19923:18;19915:26;;19951:65;20013:1;20002:9;19998:17;19989:6;19951:65;:::i;:::-;19905:118;;;;:::o;20029:222::-;;20160:2;20149:9;20145:18;20137:26;;20173:71;20241:1;20230:9;20226:17;20217:6;20173:71;:::i;:::-;20127:124;;;;:::o;20257:313::-;;20408:2;20397:9;20393:18;20385:26;;20457:9;20451:4;20447:20;20443:1;20432:9;20428:17;20421:47;20485:78;20558:4;20549:6;20485:78;:::i;:::-;20477:86;;20375:195;;;;:::o;20576:419::-;;20780:2;20769:9;20765:18;20757:26;;20829:9;20823:4;20819:20;20815:1;20804:9;20800:17;20793:47;20857:131;20983:4;20857:131;:::i;:::-;20849:139;;20747:248;;;:::o;21001:419::-;;21205:2;21194:9;21190:18;21182:26;;21254:9;21248:4;21244:20;21240:1;21229:9;21225:17;21218:47;21282:131;21408:4;21282:131;:::i;:::-;21274:139;;21172:248;;;:::o;21426:419::-;;21630:2;21619:9;21615:18;21607:26;;21679:9;21673:4;21669:20;21665:1;21654:9;21650:17;21643:47;21707:131;21833:4;21707:131;:::i;:::-;21699:139;;21597:248;;;:::o;21851:419::-;;22055:2;22044:9;22040:18;22032:26;;22104:9;22098:4;22094:20;22090:1;22079:9;22075:17;22068:47;22132:131;22258:4;22132:131;:::i;:::-;22124:139;;22022:248;;;:::o;22276:419::-;;22480:2;22469:9;22465:18;22457:26;;22529:9;22523:4;22519:20;22515:1;22504:9;22500:17;22493:47;22557:131;22683:4;22557:131;:::i;:::-;22549:139;;22447:248;;;:::o;22701:419::-;;22905:2;22894:9;22890:18;22882:26;;22954:9;22948:4;22944:20;22940:1;22929:9;22925:17;22918:47;22982:131;23108:4;22982:131;:::i;:::-;22974:139;;22872:248;;;:::o;23126:419::-;;23330:2;23319:9;23315:18;23307:26;;23379:9;23373:4;23369:20;23365:1;23354:9;23350:17;23343:47;23407:131;23533:4;23407:131;:::i;:::-;23399:139;;23297:248;;;:::o;23551:419::-;;23755:2;23744:9;23740:18;23732:26;;23804:9;23798:4;23794:20;23790:1;23779:9;23775:17;23768:47;23832:131;23958:4;23832:131;:::i;:::-;23824:139;;23722:248;;;:::o;23976:419::-;;24180:2;24169:9;24165:18;24157:26;;24229:9;24223:4;24219:20;24215:1;24204:9;24200:17;24193:47;24257:131;24383:4;24257:131;:::i;:::-;24249:139;;24147:248;;;:::o;24401:419::-;;24605:2;24594:9;24590:18;24582:26;;24654:9;24648:4;24644:20;24640:1;24629:9;24625:17;24618:47;24682:131;24808:4;24682:131;:::i;:::-;24674:139;;24572:248;;;:::o;24826:419::-;;25030:2;25019:9;25015:18;25007:26;;25079:9;25073:4;25069:20;25065:1;25054:9;25050:17;25043:47;25107:131;25233:4;25107:131;:::i;:::-;25099:139;;24997:248;;;:::o;25251:419::-;;25455:2;25444:9;25440:18;25432:26;;25504:9;25498:4;25494:20;25490:1;25479:9;25475:17;25468:47;25532:131;25658:4;25532:131;:::i;:::-;25524:139;;25422:248;;;:::o;25676:419::-;;25880:2;25869:9;25865:18;25857:26;;25929:9;25923:4;25919:20;25915:1;25904:9;25900:17;25893:47;25957:131;26083:4;25957:131;:::i;:::-;25949:139;;25847:248;;;:::o;26101:419::-;;26305:2;26294:9;26290:18;26282:26;;26354:9;26348:4;26344:20;26340:1;26329:9;26325:17;26318:47;26382:131;26508:4;26382:131;:::i;:::-;26374:139;;26272:248;;;:::o;26526:419::-;;26730:2;26719:9;26715:18;26707:26;;26779:9;26773:4;26769:20;26765:1;26754:9;26750:17;26743:47;26807:131;26933:4;26807:131;:::i;:::-;26799:139;;26697:248;;;:::o;26951:419::-;;27155:2;27144:9;27140:18;27132:26;;27204:9;27198:4;27194:20;27190:1;27179:9;27175:17;27168:47;27232:131;27358:4;27232:131;:::i;:::-;27224:139;;27122:248;;;:::o;27376:419::-;;27580:2;27569:9;27565:18;27557:26;;27629:9;27623:4;27619:20;27615:1;27604:9;27600:17;27593:47;27657:131;27783:4;27657:131;:::i;:::-;27649:139;;27547:248;;;:::o;27801:419::-;;28005:2;27994:9;27990:18;27982:26;;28054:9;28048:4;28044:20;28040:1;28029:9;28025:17;28018:47;28082:131;28208:4;28082:131;:::i;:::-;28074:139;;27972:248;;;:::o;28226:419::-;;28430:2;28419:9;28415:18;28407:26;;28479:9;28473:4;28469:20;28465:1;28454:9;28450:17;28443:47;28507:131;28633:4;28507:131;:::i;:::-;28499:139;;28397:248;;;:::o;28651:419::-;;28855:2;28844:9;28840:18;28832:26;;28904:9;28898:4;28894:20;28890:1;28879:9;28875:17;28868:47;28932:131;29058:4;28932:131;:::i;:::-;28924:139;;28822:248;;;:::o;29076:419::-;;29280:2;29269:9;29265:18;29257:26;;29329:9;29323:4;29319:20;29315:1;29304:9;29300:17;29293:47;29357:131;29483:4;29357:131;:::i;:::-;29349:139;;29247:248;;;:::o;29501:419::-;;29705:2;29694:9;29690:18;29682:26;;29754:9;29748:4;29744:20;29740:1;29729:9;29725:17;29718:47;29782:131;29908:4;29782:131;:::i;:::-;29774:139;;29672:248;;;:::o;29926:419::-;;30130:2;30119:9;30115:18;30107:26;;30179:9;30173:4;30169:20;30165:1;30154:9;30150:17;30143:47;30207:131;30333:4;30207:131;:::i;:::-;30199:139;;30097:248;;;:::o;30351:419::-;;30555:2;30544:9;30540:18;30532:26;;30604:9;30598:4;30594:20;30590:1;30579:9;30575:17;30568:47;30632:131;30758:4;30632:131;:::i;:::-;30624:139;;30522:248;;;:::o;30776:419::-;;30980:2;30969:9;30965:18;30957:26;;31029:9;31023:4;31019:20;31015:1;31004:9;31000:17;30993:47;31057:131;31183:4;31057:131;:::i;:::-;31049:139;;30947:248;;;:::o;31201:419::-;;31405:2;31394:9;31390:18;31382:26;;31454:9;31448:4;31444:20;31440:1;31429:9;31425:17;31418:47;31482:131;31608:4;31482:131;:::i;:::-;31474:139;;31372:248;;;:::o;31626:419::-;;31830:2;31819:9;31815:18;31807:26;;31879:9;31873:4;31869:20;31865:1;31854:9;31850:17;31843:47;31907:131;32033:4;31907:131;:::i;:::-;31899:139;;31797:248;;;:::o;32051:419::-;;32255:2;32244:9;32240:18;32232:26;;32304:9;32298:4;32294:20;32290:1;32279:9;32275:17;32268:47;32332:131;32458:4;32332:131;:::i;:::-;32324:139;;32222:248;;;:::o;32476:419::-;;32680:2;32669:9;32665:18;32657:26;;32729:9;32723:4;32719:20;32715:1;32704:9;32700:17;32693:47;32757:131;32883:4;32757:131;:::i;:::-;32749:139;;32647:248;;;:::o;32901:419::-;;33105:2;33094:9;33090:18;33082:26;;33154:9;33148:4;33144:20;33140:1;33129:9;33125:17;33118:47;33182:131;33308:4;33182:131;:::i;:::-;33174:139;;33072:248;;;:::o;33326:419::-;;33530:2;33519:9;33515:18;33507:26;;33579:9;33573:4;33569:20;33565:1;33554:9;33550:17;33543:47;33607:131;33733:4;33607:131;:::i;:::-;33599:139;;33497:248;;;:::o;33751:419::-;;33955:2;33944:9;33940:18;33932:26;;34004:9;33998:4;33994:20;33990:1;33979:9;33975:17;33968:47;34032:131;34158:4;34032:131;:::i;:::-;34024:139;;33922:248;;;:::o;34176:419::-;;34380:2;34369:9;34365:18;34357:26;;34429:9;34423:4;34419:20;34415:1;34404:9;34400:17;34393:47;34457:131;34583:4;34457:131;:::i;:::-;34449:139;;34347:248;;;:::o;34601:419::-;;34805:2;34794:9;34790:18;34782:26;;34854:9;34848:4;34844:20;34840:1;34829:9;34825:17;34818:47;34882:131;35008:4;34882:131;:::i;:::-;34874:139;;34772:248;;;:::o;35026:222::-;;35157:2;35146:9;35142:18;35134:26;;35170:71;35238:1;35227:9;35223:17;35214:6;35170:71;:::i;:::-;35124:124;;;;:::o;35254:214::-;;35381:2;35370:9;35366:18;35358:26;;35394:67;35458:1;35447:9;35443:17;35434:6;35394:67;:::i;:::-;35348:120;;;;:::o;35474:99::-;;35560:5;35554:12;35544:22;;35533:40;;;:::o;35579:169::-;;35697:6;35692:3;35685:19;35737:4;35732:3;35728:14;35713:29;;35675:73;;;;:::o;35754:148::-;;35893:3;35878:18;;35868:34;;;;:::o;35908:305::-;;35967:20;35985:1;35967:20;:::i;:::-;35962:25;;36001:20;36019:1;36001:20;:::i;:::-;35996:25;;36155:1;36087:66;36083:74;36080:1;36077:81;36074:2;;;36161:18;;:::i;:::-;36074:2;36205:1;36202;36198:9;36191:16;;35952:261;;;;:::o;36219:348::-;;36282:20;36300:1;36282:20;:::i;:::-;36277:25;;36316:20;36334:1;36316:20;:::i;:::-;36311:25;;36504:1;36436:66;36432:74;36429:1;36426:81;36421:1;36414:9;36407:17;36403:105;36400:2;;;36511:18;;:::i;:::-;36400:2;36559:1;36556;36552:9;36541:20;;36267:300;;;;:::o;36573:191::-;;36633:20;36651:1;36633:20;:::i;:::-;36628:25;;36667:20;36685:1;36667:20;:::i;:::-;36662:25;;36706:1;36703;36700:8;36697:2;;;36711:18;;:::i;:::-;36697:2;36756:1;36753;36749:9;36741:17;;36618:146;;;;:::o;36770:96::-;;36836:24;36854:5;36836:24;:::i;:::-;36825:35;;36815:51;;;:::o;36872:90::-;;36949:5;36942:13;36935:21;36924:32;;36914:48;;;:::o;36968:77::-;;37034:5;37023:16;;37013:32;;;:::o;37051:149::-;;37127:66;37120:5;37116:78;37105:89;;37095:105;;;:::o;37206:126::-;;37283:42;37276:5;37272:54;37261:65;;37251:81;;;:::o;37338:77::-;;37404:5;37393:16;;37383:32;;;:::o;37421:86::-;;37496:4;37489:5;37485:16;37474:27;;37464:43;;;:::o;37513:307::-;37581:1;37591:113;37605:6;37602:1;37599:13;37591:113;;;37690:1;37685:3;37681:11;37675:18;37671:1;37666:3;37662:11;37655:39;37627:2;37624:1;37620:10;37615:15;;37591:113;;;37722:6;37719:1;37716:13;37713:2;;;37802:1;37793:6;37788:3;37784:16;37777:27;37713:2;37562:258;;;;:::o;37826:171::-;;37888:24;37906:5;37888:24;:::i;:::-;37879:33;;37934:4;37927:5;37924:15;37921:2;;;37942:18;;:::i;:::-;37921:2;37989:1;37982:5;37978:13;37971:20;;37869:128;;;:::o;38003:320::-;;38084:1;38078:4;38074:12;38064:22;;38131:1;38125:4;38121:12;38152:18;38142:2;;38208:4;38200:6;38196:17;38186:27;;38142:2;38270;38262:6;38259:14;38239:18;38236:38;38233:2;;;38289:18;;:::i;:::-;38233:2;38054:269;;;;:::o;38329:180::-;38377:77;38374:1;38367:88;38474:4;38471:1;38464:15;38498:4;38495:1;38488:15;38515:180;38563:77;38560:1;38553:88;38660:4;38657:1;38650:15;38684:4;38681:1;38674:15;38701:102;;38793:2;38789:7;38784:2;38777:5;38773:14;38769:28;38759:38;;38749:54;;;:::o;38809:182::-;38949:34;38945:1;38937:6;38933:14;38926:58;38915:76;:::o;38997:222::-;39137:34;39133:1;39125:6;39121:14;39114:58;39206:5;39201:2;39193:6;39189:15;39182:30;39103:116;:::o;39225:170::-;39365:22;39361:1;39353:6;39349:14;39342:46;39331:64;:::o;39401:221::-;39541:34;39537:1;39529:6;39525:14;39518:58;39610:4;39605:2;39597:6;39593:15;39586:29;39507:115;:::o;39628:180::-;39768:32;39764:1;39756:6;39752:14;39745:56;39734:74;:::o;39814:179::-;39954:31;39950:1;39942:6;39938:14;39931:55;39920:73;:::o;39999:221::-;40139:34;40135:1;40127:6;40123:14;40116:58;40208:4;40203:2;40195:6;40191:15;40184:29;40105:115;:::o;40226:231::-;40366:34;40362:1;40354:6;40350:14;40343:58;40435:14;40430:2;40422:6;40418:15;40411:39;40332:125;:::o;40463:173::-;40603:25;40599:1;40591:6;40587:14;40580:49;40569:67;:::o;40642:225::-;40782:34;40778:1;40770:6;40766:14;40759:58;40851:8;40846:2;40838:6;40834:15;40827:33;40748:119;:::o;40873:173::-;41013:25;41009:1;41001:6;40997:14;40990:49;40979:67;:::o;41052:239::-;41192:34;41188:1;41180:6;41176:14;41169:58;41261:22;41256:2;41248:6;41244:15;41237:47;41158:133;:::o;41297:181::-;41437:33;41433:1;41425:6;41421:14;41414:57;41403:75;:::o;41484:180::-;41624:32;41620:1;41612:6;41608:14;41601:56;41590:74;:::o;41670:221::-;41810:34;41806:1;41798:6;41794:14;41787:58;41879:4;41874:2;41866:6;41862:15;41855:29;41776:115;:::o;41897:224::-;42037:34;42033:1;42025:6;42021:14;42014:58;42106:7;42101:2;42093:6;42089:15;42082:32;42003:118;:::o;42127:166::-;42267:18;42263:1;42255:6;42251:14;42244:42;42233:60;:::o;42299:237::-;42439:34;42435:1;42427:6;42423:14;42416:58;42508:20;42503:2;42495:6;42491:15;42484:45;42405:131;:::o;42542:224::-;42682:34;42678:1;42670:6;42666:14;42659:58;42751:7;42746:2;42738:6;42734:15;42727:32;42648:118;:::o;42772:172::-;42912:24;42908:1;42900:6;42896:14;42889:48;42878:66;:::o;42950:178::-;43090:30;43086:1;43078:6;43074:14;43067:54;43056:72;:::o;43134:227::-;43274:34;43270:1;43262:6;43258:14;43251:58;43343:10;43338:2;43330:6;43326:15;43319:35;43240:121;:::o;43367:182::-;43507:34;43503:1;43495:6;43491:14;43484:58;43473:76;:::o;43555:220::-;43695:34;43691:1;43683:6;43679:14;43672:58;43764:3;43759:2;43751:6;43747:15;43740:28;43661:114;:::o;43781:223::-;43921:34;43917:1;43909:6;43905:14;43898:58;43990:6;43985:2;43977:6;43973:15;43966:31;43887:117;:::o;44010:220::-;44150:34;44146:1;44138:6;44134:14;44127:58;44219:3;44214:2;44206:6;44202:15;44195:28;44116:114;:::o;44236:224::-;44376:34;44372:1;44364:6;44360:14;44353:58;44445:7;44440:2;44432:6;44428:15;44421:32;44342:118;:::o;44466:179::-;44606:31;44602:1;44594:6;44590:14;44583:55;44572:73;:::o;44651:223::-;44791:34;44787:1;44779:6;44775:14;44768:58;44860:6;44855:2;44847:6;44843:15;44836:31;44757:117;:::o;44880:176::-;45020:28;45016:1;45008:6;45004:14;44997:52;44986:70;:::o;45062:182::-;45202:34;45198:1;45190:6;45186:14;45179:58;45168:76;:::o;45250:173::-;45390:25;45386:1;45378:6;45374:14;45367:49;45356:67;:::o;45429:224::-;45569:34;45565:1;45557:6;45553:14;45546:58;45638:7;45633:2;45625:6;45621:15;45614:32;45535:118;:::o;45659:167::-;45799:19;45795:1;45787:6;45783:14;45776:43;45765:61;:::o;45832:234::-;45972:34;45968:1;45960:6;45956:14;45949:58;46041:17;46036:2;46028:6;46024:15;46017:42;45938:128;:::o;46072:181::-;46212:33;46208:1;46200:6;46196:14;46189:57;46178:75;:::o;46259:122::-;46332:24;46350:5;46332:24;:::i;:::-;46325:5;46322:35;46312:2;;46371:1;46368;46361:12;46312:2;46302:79;:::o;46387:122::-;46460:24;46478:5;46460:24;:::i;:::-;46453:5;46450:35;46440:2;;46499:1;46496;46489:12;46440:2;46430:79;:::o;46515:120::-;46587:23;46604:5;46587:23;:::i;:::-;46580:5;46577:34;46567:2;;46625:1;46622;46615:12;46567:2;46557:78;:::o;46641:122::-;46714:24;46732:5;46714:24;:::i;:::-;46707:5;46704:35;46694:2;;46753:1;46750;46743:12;46694:2;46684:79;:::o
Swarm Source
ipfs://7287bc27161d569544c7f9ac147f4d0107e1186dc6a1740786b0da9b637251cb
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.