ERC-20
DeFi
Overview
Max Total Supply
41,071,724 DNT
Holders
71 (0.00%)
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DynamicNetworkToken
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; import "./DNTfixedPointMath.sol"; // Interface for IERC20. interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // Interface for IERC20Metadata. interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } // Interface for IAccessControl. interface IAccessControl { event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); 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; } // Interface for IERC165 interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } // Contract for Context. abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // Contract for ERC165 abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // Contract for ERC20. 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } 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"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } 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"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } 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); _afterTokenTransfer(address(0), account, amount); } 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"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } 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); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // Contract for AccessControl. 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; modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } 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) ) ) ); } } function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, 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()); } } } // Library for SafeCast. library SafeCast { function toUint224(uint256 value) internal pure returns (uint224) { require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); return uint224(value); } function toUint128(uint256 value) internal pure returns (uint128) { require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); return uint128(value); } function toUint96(uint256 value) internal pure returns (uint96) { require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); return uint96(value); } function toUint64(uint256 value) internal pure returns (uint64) { require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); return uint64(value); } function toUint32(uint256 value) internal pure returns (uint32) { require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); return uint32(value); } function toUint16(uint256 value) internal pure returns (uint16) { require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); return uint16(value); } function toUint8(uint256 value) internal pure returns (uint8) { require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); return uint8(value); } function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } function toInt128(int256 value) internal pure returns (int128) { require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits"); return int128(value); } function toInt64(int256 value) internal pure returns (int64) { require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits"); return int64(value); } function toInt32(int256 value) internal pure returns (int32) { require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits"); return int32(value); } function toInt16(int256 value) internal pure returns (int16) { require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits"); return int16(value); } function toInt8(int256 value) internal pure returns (int8) { require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits"); return int8(value); } function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); return int256(value); } } // Library for SafeMath library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // Library for Strings. library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; function toString(uint256 value) internal pure returns (string memory) { 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); } 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); } 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] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // Smart contract for the Dynamic Network Token. contract DynamicNetworkToken is ERC20, AccessControl { // Declaration of roles in the network. bytes32 public constant ADMIN = keccak256("ADMIN"); bytes32 public constant LIQ_PROVIDER = keccak256("LIQ_PROVIDER"); // Govern the amount of tokens with a min and a max. uint256 private minimumSupply = 21000000 ether; uint256 private maximumSupply = 52500000 ether; // Keep track of total amount of burned and minted tokens. uint256 private totalBurned = 0; uint256 private totalMinted = 0; // Keep track of previous burn and mint transaction. uint256 private prevAmountMint = 0; uint256 private prevAmountBurn = 0; // Keep track of wallets in the network with balance > 0. uint256 private totalWallets = 0; // Network Based Burn. uint256 private networkBasedBurn = 1000000 ether; uint256 private nextBurn = 100; // The reserve address. address private reserveAddress; // The minimum balance for the reserveAddress. uint256 private minimumReserve = 4200000 ether; // The initial supply of the token. uint256 private _initialSupply = 42000000 ether; // The current supply of the token. uint256 private currentSupply = _initialSupply; // Number of decimals for DNT. uint256 private _decimals = 18; // Booleans for exp burning and minting. bool private isExpBurn = false; bool private isExpMint = false; using SafeMath for uint256; constructor() ERC20("Dynamic Network Token", "DNT"){ _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(LIQ_PROVIDER, _msgSender()); _setupRole(ADMIN, _msgSender()); _mint(_msgSender(), _initialSupply); reserveAddress = _msgSender(); } // Getter for nextBurn. function getNextBurn() public view returns(uint256){ return(nextBurn); } // Getter for networkBasedBurn. function getNetworkBasedBurn() public view returns(uint256){ return(networkBasedBurn/(10**18)); } // Getter for currentSupply. Returns currentSupply with two decimals. function getCurrentSupply() public view returns(uint256){ return(currentSupply/(10**16)); } // Getter for totalBurned. function getTotalBurned() public view returns(uint256){ return(totalBurned/(10**18)); } // Getter for totalMinted. function getTotalMinted() public view returns(uint256){ return(totalMinted/(10**18)); } // Getter for totalWallets. function getTotalWallets() public view returns(uint256){ return(totalWallets); } // Function for calculating mint. function calculateMint(uint256 amount) public returns(uint256){ uint256 toBeMinted = SafeMath.add(prevAmountMint,amount); prevAmountMint = amount; uint256 uLog = DNTfixedPointMath.ln(toBeMinted); // Check if log < 1, if so calculate exp for minting. if(uLog<1) { isExpMint = true; int256 iExp = DNTfixedPointMath.exp(SafeCast.toInt256(toBeMinted)); iExp = iExp * 8; iExp = DNTfixedPointMath.div(SafeCast.toInt256(toBeMinted),iExp); uint256 uExp = SafeCast.toUint256(iExp); uExp = uExp * 10**4; return uExp; } uint256 log = SafeMath.mul(uLog,8); uint256 logMint = SafeMath.div(toBeMinted,log); logMint = logMint * 10 ** _decimals; return logMint; } // Function for calculating burn. function calculateBurn(uint256 amount) public returns(uint256){ uint256 toBeBurned = SafeMath.add(prevAmountBurn,amount); prevAmountBurn = amount; uint256 uLog = DNTfixedPointMath.ln(toBeBurned); // Check if log < 1, if so calculate exp for burning. if(uLog<1) { isExpBurn = true; int256 iExp = DNTfixedPointMath.exp(SafeCast.toInt256(toBeBurned)); iExp = iExp * 4; iExp = DNTfixedPointMath.div(SafeCast.toInt256(toBeBurned),iExp); uint256 uExp = SafeCast.toUint256(iExp); uExp = uExp * 10**4; return uExp; } uint256 log = SafeMath.mul(uLog,4); uint256 logBurn = SafeMath.div(toBeBurned,log); logBurn = logBurn * 10 ** _decimals; return logBurn; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { // Calculate burn and mint. uint256 toBeBurned = calculateBurn(amount); uint256 toBeMinted = calculateMint(amount); uint256 currentSupplyAfterBurn = SafeMath.sub(currentSupply,toBeBurned); uint256 currentSupplyAfterMint = SafeMath.add(currentSupply,toBeMinted); // Add to totalWalelts if balance is 0. if(balanceOf(recipient)==0) { totalWallets += 1; } // Check if Network Based Burn. if(totalWallets>=nextBurn && SafeMath.sub(currentSupply,amount)>=minimumSupply && SafeMath.sub(balanceOf(reserveAddress),networkBasedBurn)>=minimumReserve) { _burn(reserveAddress,networkBasedBurn); currentSupply = SafeMath.sub(currentSupply,networkBasedBurn); totalBurned = SafeMath.add(totalBurned,networkBasedBurn); nextBurn = nextBurn*2; networkBasedBurn = networkBasedBurn/2; } if(hasRole(LIQ_PROVIDER, _msgSender())) { if(currentSupplyAfterMint<=maximumSupply && isExpMint) { _mint(reserveAddress,SafeMath.div(toBeMinted,10**4)); isExpMint = false; currentSupply = SafeMath.add(currentSupply,SafeMath.div(toBeMinted,10**4)); totalMinted = SafeMath.add(totalMinted,SafeMath.div(toBeMinted,10**4)); } else if(currentSupplyAfterMint<=maximumSupply && toBeMinted > 0) { _mint(reserveAddress,toBeMinted); currentSupply = SafeMath.add(currentSupply,toBeMinted); totalMinted = SafeMath.add(totalMinted,toBeMinted); } } if(hasRole(LIQ_PROVIDER, recipient)) { if(isExpBurn && currentSupplyAfterBurn>=minimumSupply) { if(SafeMath.sub(balanceOf(reserveAddress),SafeMath.div(toBeBurned,10**4))>= minimumReserve) { _burn(reserveAddress,SafeMath.div(toBeBurned,10**4)); isExpBurn= false; currentSupply = SafeMath.sub(currentSupply,SafeMath.div(toBeBurned,10**4)); totalBurned = SafeMath.add(totalBurned,SafeMath.div(toBeBurned,10**4)); } } else if(currentSupplyAfterBurn>=minimumSupply && toBeBurned > 0) { if(SafeMath.sub(balanceOf(reserveAddress),toBeBurned)>= minimumReserve) { _burn(reserveAddress,toBeBurned); currentSupply = SafeMath.sub(currentSupply,toBeBurned); totalBurned = SafeMath.add(totalBurned,toBeBurned); } } } _transfer(_msgSender(), recipient, amount); return true; } function transferFrom(address sender,address recipient, uint256 amount) public virtual override returns (bool) { uint256 toBeBurned = calculateBurn(amount); uint256 currentSupplyAfterBurn = SafeMath.sub(currentSupply,toBeBurned); if(hasRole(LIQ_PROVIDER, recipient)) { if(isExpBurn && currentSupplyAfterBurn>=minimumSupply) { if(SafeMath.sub(balanceOf(reserveAddress),SafeMath.div(toBeBurned,10**4))>= minimumReserve) { _burn(reserveAddress,SafeMath.div(toBeBurned,10**4)); isExpBurn= false; currentSupply = SafeMath.sub(currentSupply,SafeMath.div(toBeBurned,10**4)); totalBurned = SafeMath.add(totalBurned,SafeMath.div(toBeBurned,10**4)); } } else if(currentSupplyAfterBurn>=minimumSupply && toBeBurned > 0) { if(SafeMath.sub(balanceOf(reserveAddress), amount) >= minimumReserve) { _burn(reserveAddress,toBeBurned); currentSupply = SafeMath.sub(currentSupply,toBeBurned); totalBurned = SafeMath.add(totalBurned,toBeBurned); } } } _transfer(sender, recipient, amount); uint256 currentAllowance = allowance(sender,_msgSender()); require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.4; /// @notice Emitted when the input is greater than 133.084258667509499441. error _ExpInputTooBig(int256 x); /// @notice Emitted when the input is greater than 192. error _Exp2InputTooBig(int256 x); /// @notice Emitted when one of the inputs is MIN_SD59x18. error _DivInputTooSmall(); /// @notice Emitted when one of the intermediary unsigned results overflows SD59x18. error _DivOverflow(uint256 rAbs); /// @notice Emitted when the result overflows uint256. error _MulDivOverflow(uint256 prod1, uint256 denominator); /// @notice Emitted when the input is less than or equal to zero. error _LogInputTooSmall(uint256 x); // Lib for fixed-point math in the Dynamic Network Token. // Thanks to PRBMath. library DNTfixedPointMath{ // int256s for fixed-point math. int256 internal constant MAX_SD59x18 = 57896044618658097711785492504343953926634992332820282019728792003956564819967; int256 internal constant MIN_SD59x18 = - 57896044618658097711785492504343953926634992332820282019728792003956564819968; int256 internal constant LOG2_E = 1442695040888963407; int256 internal constant SCALE = 1e18; int256 internal constant HALF_SCALE = 5e17; // uint256s for fixed-point math. uint256 internal constant uSCALE = 1e18; uint256 internal constant uLOG2_E = 1442695040888963407; uint256 internal constant uHALF_SCALE = 5e17; function ln(uint256 x) internal pure returns (uint256 result) { // Do the fixed-point multiplication inline to save gas. This is overflow-safe because the maximum value that log2(x) // can return is 195205294292027477728. unchecked { result = (log2(x) * uSCALE) / uLOG2_E; } } function log2(uint256 x) internal pure returns (uint256 result) { if (x <= 0) { revert _LogInputTooSmall(x); } unchecked { // This works because log2(x) = -log2(1/x). uint256 sign; if (x >= uSCALE) { sign = 1; } else { // Do the fixed-point inversion inline to save gas. The numerator is SCALE * SCALE. assembly { x := div(1000000000000000000000000000000000000, x) } } // Calculate the integer part of the logarithm and add it to the result and finally calculate y = x * 2^(-n). uint256 n = mostSignificantBit(uint256(x / uSCALE)); // The integer part of the logarithm as a signed 59.18-decimal fixed-point number. The operation can't overflow // because n is maximum 255, SCALE is 1e18 and sign is either 1 or -1. result = uint256(n) * uSCALE; // This is y = x * 2^(-n). uint256 y = x >> n; // If y = 1, the fractional part is zero. if (y == uSCALE) { return result * sign; } // Calculate the fractional part via the iterative approximation. // The "delta >>= 1" part is equivalent to "delta /= 2", but shifting bits is faster. for (uint256 delta = uint256(HALF_SCALE); delta > 0; delta >>= 1) { y = (y * y) / uSCALE; // Is y^2 > 2 and so in the range [2,4)? if (y >= 2 * uSCALE) { // Add the 2^(-m) factor to the logarithm. result += delta; // Corresponds to z/2 on Wikipedia. y >>= 1; } } result *= sign; } } /// @notice Finds the zero-based index of the first one in the binary representation of x. /// @dev See the note on msb in the "Find First Set" Wikipedia article https://en.wikipedia.org/wiki/Find_first_set /// @param x The uint256 number for which to find the index of the most significant bit. /// @return msb The index of the most significant bit as an uint256. function mostSignificantBit(uint256 x) internal pure returns (uint256 msb) { if (x >= 2 ** 128) { x >>= 128; msb += 128; } if (x >= 2 ** 64) { x >>= 64; msb += 64; } if (x >= 2 ** 32) { x >>= 32; msb += 32; } if (x >= 2 ** 16) { x >>= 16; msb += 16; } if (x >= 2 ** 8) { x >>= 8; msb += 8; } if (x >= 2 ** 4) { x >>= 4; msb += 4; } if (x >= 2 ** 2) { x >>= 2; msb += 2; } if (x >= 2 ** 1) { // No need to shift x any more. msb += 1; } } /// @param x The exponent as a signed 59.18-decimal fixed-point number. /// @return result The result as a signed 59.18-decimal fixed-point number. function exp(int256 x) internal pure returns (int256 result) { // Without this check, the value passed to "exp2" would be less than -59.794705707972522261. if (x < - 41446531673892822322) { return 0; } // Without this check, the value passed to "exp2" would be greater than 192. if (x >= 133084258667509499441) { revert _ExpInputTooBig(x); } // Do the fixed-point multiplication inline to save gas. unchecked { int256 doubleScaleProduct = x * LOG2_E; result = exp2((doubleScaleProduct + HALF_SCALE) / SCALE); } } /// @param x The exponent as a signed 59.18-decimal fixed-point number. /// @return result The result as a signed 59.18-decimal fixed-point number. function exp2(int256 x) internal pure returns (int256 result) { // This works because 2^(-x) = 1/2^x. if (x < 0) { // 2^59.794705707972522262 is the maximum number whose inverse does not truncate down to zero. if (x < - 59794705707972522261) { return 0; } // Do the fixed-point inversion inline to save gas. The numerator is SCALE * SCALE. unchecked { result = 1e36 / exp2(- x); } } else { // 2^192 doesn't fit within the 192.64-bit format used internally in this function. if (x >= 192e18) { revert _Exp2InputTooBig(x); } unchecked { // Convert x to the 192.64-bit fixed-point format. uint256 x192x64 = (uint256(x) << 64) / uint256(SCALE); // Safe to convert the result to int256 directly because the maximum input allowed is 192. result = int256(uExp2(x192x64)); } } } /// @notice Calculates the binary exponent of x using the binary fraction method. /// @dev Has to use 192.64-bit fixed-point numbers. /// See https://ethereum.stackexchange.com/a/96594/24693. /// @param x The exponent as an unsigned 192.64-bit fixed-point number. /// @return result The result as an unsigned 60.18-decimal fixed-point number. function uExp2(uint256 x) internal pure returns (uint256 result) { unchecked { // Start from 0.5 in the 192.64-bit fixed-point format. result = 0x800000000000000000000000000000000000000000000000; // Multiply the result by root(2, 2^-i) when the bit at position i is 1. None of the intermediary results overflows // because the initial result is 2^191 and all magic factors are less than 2^65. if (x & 0x8000000000000000 > 0) { result = (result * 0x16A09E667F3BCC909) >> 64; } if (x & 0x4000000000000000 > 0) { result = (result * 0x1306FE0A31B7152DF) >> 64; } if (x & 0x2000000000000000 > 0) { result = (result * 0x1172B83C7D517ADCE) >> 64; } if (x & 0x1000000000000000 > 0) { result = (result * 0x10B5586CF9890F62A) >> 64; } if (x & 0x800000000000000 > 0) { result = (result * 0x1059B0D31585743AE) >> 64; } if (x & 0x400000000000000 > 0) { result = (result * 0x102C9A3E778060EE7) >> 64; } if (x & 0x200000000000000 > 0) { result = (result * 0x10163DA9FB33356D8) >> 64; } if (x & 0x100000000000000 > 0) { result = (result * 0x100B1AFA5ABCBED61) >> 64; } if (x & 0x80000000000000 > 0) { result = (result * 0x10058C86DA1C09EA2) >> 64; } if (x & 0x40000000000000 > 0) { result = (result * 0x1002C605E2E8CEC50) >> 64; } if (x & 0x20000000000000 > 0) { result = (result * 0x100162F3904051FA1) >> 64; } if (x & 0x10000000000000 > 0) { result = (result * 0x1000B175EFFDC76BA) >> 64; } if (x & 0x8000000000000 > 0) { result = (result * 0x100058BA01FB9F96D) >> 64; } if (x & 0x4000000000000 > 0) { result = (result * 0x10002C5CC37DA9492) >> 64; } if (x & 0x2000000000000 > 0) { result = (result * 0x1000162E525EE0547) >> 64; } if (x & 0x1000000000000 > 0) { result = (result * 0x10000B17255775C04) >> 64; } if (x & 0x800000000000 > 0) { result = (result * 0x1000058B91B5BC9AE) >> 64; } if (x & 0x400000000000 > 0) { result = (result * 0x100002C5C89D5EC6D) >> 64; } if (x & 0x200000000000 > 0) { result = (result * 0x10000162E43F4F831) >> 64; } if (x & 0x100000000000 > 0) { result = (result * 0x100000B1721BCFC9A) >> 64; } if (x & 0x80000000000 > 0) { result = (result * 0x10000058B90CF1E6E) >> 64; } if (x & 0x40000000000 > 0) { result = (result * 0x1000002C5C863B73F) >> 64; } if (x & 0x20000000000 > 0) { result = (result * 0x100000162E430E5A2) >> 64; } if (x & 0x10000000000 > 0) { result = (result * 0x1000000B172183551) >> 64; } if (x & 0x8000000000 > 0) { result = (result * 0x100000058B90C0B49) >> 64; } if (x & 0x4000000000 > 0) { result = (result * 0x10000002C5C8601CC) >> 64; } if (x & 0x2000000000 > 0) { result = (result * 0x1000000162E42FFF0) >> 64; } if (x & 0x1000000000 > 0) { result = (result * 0x10000000B17217FBB) >> 64; } if (x & 0x800000000 > 0) { result = (result * 0x1000000058B90BFCE) >> 64; } if (x & 0x400000000 > 0) { result = (result * 0x100000002C5C85FE3) >> 64; } if (x & 0x200000000 > 0) { result = (result * 0x10000000162E42FF1) >> 64; } if (x & 0x100000000 > 0) { result = (result * 0x100000000B17217F8) >> 64; } if (x & 0x80000000 > 0) { result = (result * 0x10000000058B90BFC) >> 64; } if (x & 0x40000000 > 0) { result = (result * 0x1000000002C5C85FE) >> 64; } if (x & 0x20000000 > 0) { result = (result * 0x100000000162E42FF) >> 64; } if (x & 0x10000000 > 0) { result = (result * 0x1000000000B17217F) >> 64; } if (x & 0x8000000 > 0) { result = (result * 0x100000000058B90C0) >> 64; } if (x & 0x4000000 > 0) { result = (result * 0x10000000002C5C860) >> 64; } if (x & 0x2000000 > 0) { result = (result * 0x1000000000162E430) >> 64; } if (x & 0x1000000 > 0) { result = (result * 0x10000000000B17218) >> 64; } if (x & 0x800000 > 0) { result = (result * 0x1000000000058B90C) >> 64; } if (x & 0x400000 > 0) { result = (result * 0x100000000002C5C86) >> 64; } if (x & 0x200000 > 0) { result = (result * 0x10000000000162E43) >> 64; } if (x & 0x100000 > 0) { result = (result * 0x100000000000B1721) >> 64; } if (x & 0x80000 > 0) { result = (result * 0x10000000000058B91) >> 64; } if (x & 0x40000 > 0) { result = (result * 0x1000000000002C5C8) >> 64; } if (x & 0x20000 > 0) { result = (result * 0x100000000000162E4) >> 64; } if (x & 0x10000 > 0) { result = (result * 0x1000000000000B172) >> 64; } if (x & 0x8000 > 0) { result = (result * 0x100000000000058B9) >> 64; } if (x & 0x4000 > 0) { result = (result * 0x10000000000002C5D) >> 64; } if (x & 0x2000 > 0) { result = (result * 0x1000000000000162E) >> 64; } if (x & 0x1000 > 0) { result = (result * 0x10000000000000B17) >> 64; } if (x & 0x800 > 0) { result = (result * 0x1000000000000058C) >> 64; } if (x & 0x400 > 0) { result = (result * 0x100000000000002C6) >> 64; } if (x & 0x200 > 0) { result = (result * 0x10000000000000163) >> 64; } if (x & 0x100 > 0) { result = (result * 0x100000000000000B1) >> 64; } if (x & 0x80 > 0) { result = (result * 0x10000000000000059) >> 64; } if (x & 0x40 > 0) { result = (result * 0x1000000000000002C) >> 64; } if (x & 0x20 > 0) { result = (result * 0x10000000000000016) >> 64; } if (x & 0x10 > 0) { result = (result * 0x1000000000000000B) >> 64; } if (x & 0x8 > 0) { result = (result * 0x10000000000000006) >> 64; } if (x & 0x4 > 0) { result = (result * 0x10000000000000003) >> 64; } if (x & 0x2 > 0) { result = (result * 0x10000000000000001) >> 64; } if (x & 0x1 > 0) { result = (result * 0x10000000000000001) >> 64; } // We're doing two things at the same time: // // 1. Multiply the result by 2^n + 1, where "2^n" is the integer part and the one is added to account for // the fact that we initially set the result to 0.5. This is accomplished by subtracting from 191 // rather than 192. // 2. Convert the result to the unsigned 60.18-decimal fixed-point format. // // This works because 2^(191-ip) = 2^ip / 2^191, where "ip" is the integer part "2^n". result *= uSCALE; result >>= (191 - (x >> 64)); } } function div(int256 x, int256 y) internal pure returns (int256 result) { if (x == MIN_SD59x18 || y == MIN_SD59x18) { revert _DivInputTooSmall(); } // Get hold of the absolute values of x and y. uint256 ax; uint256 ay; unchecked { ax = x < 0 ? uint256(- x) : uint256(x); ay = y < 0 ? uint256(- y) : uint256(y); } // Compute the absolute value of (x*SCALE)÷y. The result must fit within int256. uint256 rAbs = mulDiv(ax, uint256(SCALE), ay); if (rAbs > uint256(MAX_SD59x18)) { revert _DivOverflow(rAbs); } // Get the signs of x and y. uint256 sx; uint256 sy; assembly { sx := sgt(x, sub(0, 1)) sy := sgt(y, sub(0, 1)) } // XOR over sx and sy. This is basically checking whether the inputs have the same sign. If yes, the result // should be positive. Otherwise, it should be negative. result = sx ^ sy == 1 ? - int256(rAbs) : int256(rAbs); } /// @param x The multiplicand as an uint256. /// @param y The multiplier as an uint256. /// @param denominator The divisor as an uint256. /// @return result The result as an uint256. function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { unchecked { result = prod0 / denominator; } return result; } // Make sure the result is less than 2^256. Also prevents denominator == 0. if (prod1 >= denominator) { revert _MulDivOverflow(prod1, denominator); } /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. unchecked { // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 lpotdod = denominator & (~denominator + 1); assembly { // Divide denominator by lpotdod. denominator := div(denominator, lpotdod) // Divide [prod1 prod0] by lpotdod. prod0 := div(prod0, lpotdod) // Flip lpotdod such that it is 2^256 / lpotdod. If lpotdod is zero, then it becomes one. lpotdod := add(div(sub(0, lpotdod), lpotdod), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * lpotdod; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Now use Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"_DivInputTooSmall","type":"error"},{"inputs":[{"internalType":"uint256","name":"rAbs","type":"uint256"}],"name":"_DivOverflow","type":"error"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"_Exp2InputTooBig","type":"error"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"_ExpInputTooBig","type":"error"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"_LogInputTooSmall","type":"error"},{"inputs":[{"internalType":"uint256","name":"prod1","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"_MulDivOverflow","type":"error"},{"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":"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"},{"inputs":[],"name":"ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQ_PROVIDER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","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":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"getCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNetworkBasedBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalWallets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","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":"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526a115eec47f6cf7e350000006006556a2b6d4eb3e906bb84800000600755600060085560006009556000600a556000600b556000600c5569d3c21bcecceda1000000600d556064600e556a03796274caf64c710000006010556a22bdd88fed9efc6a00000060115560115460125560126013556000601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff021916908315150217905550348015620000ba57600080fd5b506040518060400160405280601581526020017f44796e616d6963204e6574776f726b20546f6b656e00000000000000000000008152506040518060400160405280600381526020017f444e54000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200013f92919062000578565b5080600490805190602001906200015892919062000578565b5050506200017f6000801b620001736200027a60201b60201c565b6200028260201b60201c565b620001c07f22cd237eb62f1146e3c1b1904c85e317fa2bd7aaa97c3165cb61bf6e6ee9e261620001b46200027a60201b60201c565b6200028260201b60201c565b620002017fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42620001f56200027a60201b60201c565b6200028260201b60201c565b62000224620002156200027a60201b60201c565b6011546200029860201b60201c565b620002346200027a60201b60201c565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620007d4565b600033905090565b6200029482826200041160201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200030b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003029062000660565b60405180910390fd5b6200031f600083836200050360201b60201c565b8060026000828254620003339190620006b0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200038a9190620006b0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003f1919062000682565b60405180910390a36200040d600083836200050860201b60201c565b5050565b6200042382826200050d60201b60201c565b620004ff5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004a46200027a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b505050565b505050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054620005869062000717565b90600052602060002090601f016020900481019282620005aa5760008555620005f6565b82601f10620005c557805160ff1916838001178555620005f6565b82800160010185558215620005f6579182015b82811115620005f5578251825591602001919060010190620005d8565b5b50905062000605919062000609565b5090565b5b80821115620006245760008160009055506001016200060a565b5090565b600062000637601f836200069f565b91506200064482620007ab565b602082019050919050565b6200065a816200070d565b82525050565b600060208201905081810360008301526200067b8162000628565b9050919050565b60006020820190506200069960008301846200064f565b92915050565b600082825260208201905092915050565b6000620006bd826200070d565b9150620006ca836200070d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200070257620007016200074d565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200073057607f821691505b602082108114156200074757620007466200077c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61482480620007e46000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063c81b70c411610097578063dcc09b8211610071578063dcc09b8214610559578063dd62ed3e14610577578063f5f50eb1146105a7578063f90a518c146105c5576101c4565b8063c81b70c4146104dd578063d547741f1461050d578063dc287c7e14610529576101c4565b8063a217fddf116100d3578063a217fddf14610441578063a457c2d71461045f578063a9059cbb1461048f578063b55cd04b146104bf576101c4565b806370a08231146103c357806391d14854146103f357806395d89b4114610423576101c4565b8063248a9ca311610166578063313ce56711610140578063313ce5671461033b57806336568abe1461035957806339509351146103755780634f3e1efc146103a5576101c4565b8063248a9ca3146102d15780632a0acc6a146103015780632f2ff15d1461031f576101c4565b8063095ea7b3116101a2578063095ea7b3146102355780630ca1c5c91461026557806318160ddd1461028357806323b872dd146102a1576101c4565b806301ffc9a7146101c95780630570ae27146101f957806306fdde0314610217575b600080fd5b6101e360048036038101906101de9190613618565b6105e3565b6040516101f091906139d7565b60405180910390f35b61020161065d565b60405161020e91906139f2565b60405180910390f35b61021f610681565b60405161022c9190613a28565b60405180910390f35b61024f600480360381019061024a919061356b565b610713565b60405161025c91906139d7565b60405180910390f35b61026d610731565b60405161027a9190613c4a565b60405180910390f35b61028b61074e565b6040516102989190613c4a565b60405180910390f35b6102bb60048036038101906102b69190613518565b610758565b6040516102c891906139d7565b60405180910390f35b6102eb60048036038101906102e691906135ab565b6109cd565b6040516102f891906139f2565b60405180910390f35b6103096109ed565b60405161031691906139f2565b60405180910390f35b610339600480360381019061033491906135d8565b610a11565b005b610343610a3a565b6040516103509190613c8e565b60405180910390f35b610373600480360381019061036e91906135d8565b610a43565b005b61038f600480360381019061038a919061356b565b610ac6565b60405161039c91906139d7565b60405180910390f35b6103ad610b72565b6040516103ba9190613c4a565b60405180910390f35b6103dd60048036038101906103d891906134ab565b610b8e565b6040516103ea9190613c4a565b60405180910390f35b61040d600480360381019061040891906135d8565b610bd6565b60405161041a91906139d7565b60405180910390f35b61042b610c41565b6040516104389190613a28565b60405180910390f35b610449610cd3565b60405161045691906139f2565b60405180910390f35b6104796004803603810190610474919061356b565b610cda565b60405161048691906139d7565b60405180910390f35b6104a960048036038101906104a4919061356b565b610dc5565b6040516104b691906139d7565b60405180910390f35b6104c761125c565b6040516104d49190613c4a565b60405180910390f35b6104f760048036038101906104f29190613645565b611279565b6040516105049190613c4a565b60405180910390f35b610527600480360381019061052291906135d8565b611369565b005b610543600480360381019061053e9190613645565b611392565b6040516105509190613c4a565b60405180910390f35b610561611482565b60405161056e9190613c4a565b60405180910390f35b610591600480360381019061058c91906134d8565b61148c565b60405161059e9190613c4a565b60405180910390f35b6105af611513565b6040516105bc9190613c4a565b60405180910390f35b6105cd61151d565b6040516105da9190613c4a565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065657506106558261153a565b5b9050919050565b7f22cd237eb62f1146e3c1b1904c85e317fa2bd7aaa97c3165cb61bf6e6ee9e26181565b6060600380546106909061415f565b80601f01602080910402602001604051908101604052809291908181526020018280546106bc9061415f565b80156107095780601f106106de57610100808354040283529160200191610709565b820191906000526020600020905b8154815290600101906020018083116106ec57829003601f168201915b5050505050905090565b60006107276107206115a4565b84846115ac565b6001905092915050565b6000670de0b6b3a76400006009546107499190613d26565b905090565b6000600254905090565b60008061076483611392565b9050600061077460125483611777565b90506107a07f22cd237eb62f1146e3c1b1904c85e317fa2bd7aaa97c3165cb61bf6e6ee9e26186610bd6565b1561094857601460009054906101000a900460ff1680156107c357506006548110155b156108a15760105461080a6107f9600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b8e565b610805856127106117c1565b611777565b1061089c57610846600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610841846127106117c1565b61180b565b6000601460006101000a81548160ff021916908315150217905550610878601254610873846127106117c1565b611777565b601281905550610895600854610890846127106117c1565b6119e2565b6008819055505b610947565b60065481101580156108b35750600082115b15610946576010546108ef6108e9600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b8e565b86611777565b1061094557610920600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361180b565b61092c60125483611777565b60128190555061093e600854836119e2565b6008819055505b5b5b5b610953868686611a40565b6000610966876109616115a4565b61148c565b9050848110156109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a290613b4a565b60405180910390fd5b6109bf876109b76115a4565b8784036115ac565b600193505050509392505050565b600060056000838152602001908152602001600020600101549050919050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b610a1a826109cd565b610a2b81610a266115a4565b611cc1565b610a358383611d5e565b505050565b60006012905090565b610a4b6115a4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90613c0a565b60405180910390fd5b610ac28282611e3f565b5050565b6000610b68610ad36115a4565b848460016000610ae16115a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b639190613cd0565b6115ac565b6001905092915050565b6000662386f26fc10000601254610b899190613d26565b905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610c509061415f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7c9061415f565b8015610cc95780601f10610c9e57610100808354040283529160200191610cc9565b820191906000526020600020905b815481529060010190602001808311610cac57829003601f168201915b5050505050905090565b6000801b81565b60008060016000610ce96115a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d90613bea565b60405180910390fd5b610dba610db16115a4565b858584036115ac565b600191505092915050565b600080610dd183611392565b90506000610dde84611279565b90506000610dee60125484611777565b90506000610dfe601254846119e2565b90506000610e0b88610b8e565b1415610e2c576001600c6000828254610e249190613cd0565b925050819055505b600e54600c5410158015610e4d5750600654610e4a60125488611777565b10155b8015610e905750601054610e8d610e85600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b8e565b600d54611777565b10155b15610f1657610ec3600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d5461180b565b610ed1601254600d54611777565b601281905550610ee5600854600d546119e2565b6008819055506002600e54610efa9190613fdf565b600e819055506002600d54610f0f9190613d26565b600d819055505b610f477f22cd237eb62f1146e3c1b1904c85e317fa2bd7aaa97c3165cb61bf6e6ee9e261610f426115a4565b610bd6565b1561106a576007548111158015610f6a5750601460019054906101000a900460ff165b1561100057610fa6600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610fa1856127106117c1565b611f21565b6000601460016101000a81548160ff021916908315150217905550610fd8601254610fd3856127106117c1565b6119e2565b601281905550610ff5600954610ff0856127106117c1565b6119e2565b600981905550611069565b60075481111580156110125750600083115b1561106857611043600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f21565b61104f601254846119e2565b601281905550611061600954846119e2565b6009819055505b5b5b6110947f22cd237eb62f1146e3c1b1904c85e317fa2bd7aaa97c3165cb61bf6e6ee9e26188610bd6565b1561123c57601460009054906101000a900460ff1680156110b757506006548210155b15611195576010546110fe6110ed600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b8e565b6110f9876127106117c1565b611777565b106111905761113a600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611135866127106117c1565b61180b565b6000601460006101000a81548160ff02191690831515021790555061116c601254611167866127106117c1565b611777565b601281905550611189600854611184866127106117c1565b6119e2565b6008819055505b61123b565b60065482101580156111a75750600084115b1561123a576010546111e36111dd600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b8e565b86611777565b1061123957611214600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561180b565b61122060125485611777565b601281905550611232600854856119e2565b6008819055505b5b5b5b61124e6112476115a4565b8888611a40565b600194505050505092915050565b6000670de0b6b3a76400006008546112749190613d26565b905090565b600080611288600a54846119e2565b905082600a81905550600061129c82612081565b90506001811015611323576001601460016101000a81548160ff02191690831515021790555060006112d56112d0846120b5565b612122565b90506008816112e49190613ec8565b90506112f86112f2846120b5565b826121e5565b9050600061130582612351565b9050612710816113159190613fdf565b905080945050505050611364565b600061133082600861239e565b9050600061133e84836117c1565b9050601354600a61134f9190613daa565b8161135a9190613fdf565b9050809450505050505b919050565b611372826109cd565b6113838161137e6115a4565b611cc1565b61138d8383611e3f565b505050565b6000806113a1600b54846119e2565b905082600b8190555060006113b582612081565b9050600181101561143c576001601460006101000a81548160ff02191690831515021790555060006113ee6113e9846120b5565b612122565b90506004816113fd9190613ec8565b905061141161140b846120b5565b826121e5565b9050600061141e82612351565b90506127108161142e9190613fdf565b90508094505050505061147d565b600061144982600461239e565b9050600061145784836117c1565b9050601354600a6114689190613daa565b816114739190613fdf565b9050809450505050505b919050565b6000600e54905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600c54905090565b6000670de0b6b3a7640000600d546115359190613d26565b905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390613baa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561168c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168390613aaa565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161176a9190613c4a565b60405180910390a3505050565b60006117b983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612419565b905092915050565b600061180383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061247d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187290613b6a565b60405180910390fd5b611887826000836124e0565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190490613a8a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546119649190614039565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119c99190613c4a565b60405180910390a36119dd836000846124e5565b505050565b60008082846119f19190613cd0565b905083811015611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90613aca565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa790613b8a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1790613a6a565b60405180910390fd5b611b2b8383836124e0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890613aea565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c449190613cd0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ca89190613c4a565b60405180910390a3611cbb8484846124e5565b50505050565b611ccb8282610bd6565b611d5a57611cf08173ffffffffffffffffffffffffffffffffffffffff1660146124ea565b611cfe8360001c60206124ea565b604051602001611d0f92919061399d565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d519190613a28565b60405180910390fd5b5050565b611d688282610bd6565b611e3b5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611de06115a4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611e498282610bd6565b15611f1d5760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ec26115a4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890613c2a565b60405180910390fd5b611f9d600083836124e0565b8060026000828254611faf9190613cd0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120049190613cd0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120699190613c4a565b60405180910390a361207d600083836124e5565b5050565b60006714057b7ef767814f670de0b6b3a764000061209e84612726565b02816120ad576120ac614209565b5b049050919050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82111561211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211190613bca565b60405180910390fd5b819050919050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462ce82121561215557600090506121e0565b680736ea4425c11ac63182126121a257816040517f925dbb1f0000000000000000000000000000000000000000000000000000000081526004016121999190613a0d565b60405180910390fd5b60006714057b7ef767814f830290506121dc670de0b6b3a76400006706f05b59d3b200008301816121d6576121d5614209565b5b05612860565b9150505b919050565b60007f800000000000000000000000000000000000000000000000000000000000000083148061223457507f800000000000000000000000000000000000000000000000000000000000000082145b1561226b576040517fb727d89300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000851261227c5784612281565b846000035b9150600084126122915783612296565b836000035b905060006122ad83670de0b6b3a76400008461294e565b90507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81111561231457806040517f71a646c900000000000000000000000000000000000000000000000000000000815260040161230b9190613c4a565b60405180910390fd5b6000806001600003881391506001600003871390506001818318146123395782612344565b8261234390614191565b5b9550505050505092915050565b600080821215612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90613b0a565b60405180910390fd5b819050919050565b6000808314156123b15760009050612413565b600082846123bf9190613fdf565b90508284826123ce9190613d26565b1461240e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240590613b2a565b60405180910390fd5b809150505b92915050565b6000838311158290612461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124589190613a28565b60405180910390fd5b50600083856124709190614039565b9050809150509392505050565b600080831182906124c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bb9190613a28565b60405180910390fd5b50600083856124d39190613d26565b9050809150509392505050565b505050565b505050565b6060600060028360026124fd9190613fdf565b6125079190613cd0565b67ffffffffffffffff8111156125205761251f614296565b5b6040519080825280601f01601f1916602001820160405280156125525781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061258a57612589614267565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106125ee576125ed614267565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261262e9190613fdf565b6126389190613cd0565b90505b60018111156126d8577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061267a57612679614267565b5b1a60f81b82828151811061269157612690614267565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806126d190614135565b905061263b565b506000841461271c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271390613a4a565b60405180910390fd5b8091505092915050565b600080821161276c57816040517f626086840000000000000000000000000000000000000000000000000000000081526004016127639190613c4a565b60405180910390fd5b6000670de0b6b3a76400008310612786576001905061279b565b826ec097ce7bc90715b34b9f10000000000492505b60006127be670de0b6b3a764000085816127b8576127b7614209565b5b04612a64565b9050670de0b6b3a76400008102925060008185901c9050670de0b6b3a76400008114156127f257828402935050505061285b565b60006706f05b59d3b2000090505b600081111561285157670de0b6b3a76400008283028161282357612822614209565b5b049150670de0b6b3a76400006002028210612845578085019450600182901c91505b600181901c9050612800565b5082840293505050505b919050565b6000808212156128cd577ffffffffffffffffffffffffffffffffffffffffffffffffcc22e87f6eb468eeb82121561289b5760009050612949565b6128a782600003612860565b6ec097ce7bc90715b34b9f1000000000816128c5576128c4614209565b5b059050612948565b680a688906bd8b000000821261291a57816040517f15d7ffa10000000000000000000000000000000000000000000000000000000081526004016129119190613a0d565b60405180910390fd5b6000670de0b6b3a7640000604084901b8161293857612937614209565b5b04905061294481612b7b565b9150505b5b919050565b60008060008019858709858702925082811083820303915050600081141561298a578382816129805761297f614209565b5b0492505050612a5d565b8381106129d05780846040517f2b3c9c070000000000000000000000000000000000000000000000000000000081526004016129c7929190613c65565b60405180910390fd5b60008486880990508281118203915080830392506000600186190186169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b60007001000000000000000000000000000000008210612a9557608082901c9150608081612a929190613cd0565b90505b680100000000000000008210612abc57604082901c9150604081612ab99190613cd0565b90505b6401000000008210612adf57602082901c9150602081612adc9190613cd0565b90505b620100008210612b0057601082901c9150601081612afd9190613cd0565b90505b6101008210612b2057600882901c9150600881612b1d9190613cd0565b90505b60108210612b3f57600482901c9150600481612b3c9190613cd0565b90505b60048210612b5e57600282901c9150600281612b5b9190613cd0565b90505b60028210612b7657600181612b739190613cd0565b90505b919050565b6000778000000000000000000000000000000000000000000000009050600067800000000000000083161115612bbe57604068016a09e667f3bcc9098202901c90505b600067400000000000000083161115612be45760406801306fe0a31b7152df8202901c90505b600067200000000000000083161115612c0a5760406801172b83c7d517adce8202901c90505b600067100000000000000083161115612c3057604068010b5586cf9890f62a8202901c90505b600067080000000000000083161115612c565760406801059b0d31585743ae8202901c90505b600067040000000000000083161115612c7c576040680102c9a3e778060ee78202901c90505b600067020000000000000083161115612ca257604068010163da9fb33356d88202901c90505b600067010000000000000083161115612cc8576040680100b1afa5abcbed618202901c90505b6000668000000000000083161115612ced57604068010058c86da1c09ea28202901c90505b6000664000000000000083161115612d125760406801002c605e2e8cec508202901c90505b6000662000000000000083161115612d37576040680100162f3904051fa18202901c90505b6000661000000000000083161115612d5c5760406801000b175effdc76ba8202901c90505b6000660800000000000083161115612d81576040680100058ba01fb9f96d8202901c90505b6000660400000000000083161115612da657604068010002c5cc37da94928202901c90505b6000660200000000000083161115612dcb5760406801000162e525ee05478202901c90505b6000660100000000000083161115612df057604068010000b17255775c048202901c90505b60006580000000000083161115612e145760406801000058b91b5bc9ae8202901c90505b60006540000000000083161115612e38576040680100002c5c89d5ec6d8202901c90505b60006520000000000083161115612e5c57604068010000162e43f4f8318202901c90505b60006510000000000083161115612e80576040680100000b1721bcfc9a8202901c90505b60006508000000000083161115612ea457604068010000058b90cf1e6e8202901c90505b60006504000000000083161115612ec85760406801000002c5c863b73f8202901c90505b60006502000000000083161115612eec576040680100000162e430e5a28202901c90505b60006501000000000083161115612f105760406801000000b1721835518202901c90505b600064800000000083161115612f33576040680100000058b90c0b498202901c90505b600064400000000083161115612f5657604068010000002c5c8601cc8202901c90505b600064200000000083161115612f795760406801000000162e42fff08202901c90505b600064100000000083161115612f9c57604068010000000b17217fbb8202901c90505b600064080000000083161115612fbf5760406801000000058b90bfce8202901c90505b600064040000000083161115612fe2576040680100000002c5c85fe38202901c90505b60006402000000008316111561300557604068010000000162e42ff18202901c90505b600064010000000083161115613028576040680100000000b17217f88202901c90505b600063800000008316111561304a57604068010000000058b90bfc8202901c90505b600063400000008316111561306c5760406801000000002c5c85fe8202901c90505b600063200000008316111561308e576040680100000000162e42ff8202901c90505b60006310000000831611156130b05760406801000000000b17217f8202901c90505b60006308000000831611156130d2576040680100000000058b90c08202901c90505b60006304000000831611156130f457604068010000000002c5c8608202901c90505b60006302000000831611156131165760406801000000000162e4308202901c90505b600063010000008316111561313857604068010000000000b172188202901c90505b600062800000831611156131595760406801000000000058b90c8202901c90505b6000624000008316111561317a576040680100000000002c5c868202901c90505b6000622000008316111561319b57604068010000000000162e438202901c90505b600062100000831611156131bc576040680100000000000b17218202901c90505b600062080000831611156131dd57604068010000000000058b918202901c90505b600062040000831611156131fe5760406801000000000002c5c88202901c90505b6000620200008316111561321f576040680100000000000162e48202901c90505b600062010000831611156132405760406801000000000000b1728202901c90505b600061800083161115613260576040680100000000000058b98202901c90505b60006140008316111561328057604068010000000000002c5d8202901c90505b6000612000831611156132a05760406801000000000000162e8202901c90505b6000611000831611156132c057604068010000000000000b178202901c90505b6000610800831611156132e05760406801000000000000058c8202901c90505b600061040083161115613300576040680100000000000002c68202901c90505b600061020083161115613320576040680100000000000001638202901c90505b600061010083161115613340576040680100000000000000b18202901c90505b600060808316111561335f576040680100000000000000598202901c90505b600060408316111561337e5760406801000000000000002c8202901c90505b600060208316111561339d576040680100000000000000168202901c90505b60006010831611156133bc5760406801000000000000000b8202901c90505b60006008831611156133db576040680100000000000000068202901c90505b60006004831611156133fa576040680100000000000000038202901c90505b6000600283161115613419576040680100000000000000018202901c90505b6000600183161115613438576040680100000000000000018202901c90505b670de0b6b3a764000081029050604082901c60bf0381901c9050919050565b60008135905061346681614792565b92915050565b60008135905061347b816147a9565b92915050565b600081359050613490816147c0565b92915050565b6000813590506134a5816147d7565b92915050565b6000602082840312156134c1576134c06142c5565b5b60006134cf84828501613457565b91505092915050565b600080604083850312156134ef576134ee6142c5565b5b60006134fd85828601613457565b925050602061350e85828601613457565b9150509250929050565b600080600060608486031215613531576135306142c5565b5b600061353f86828701613457565b935050602061355086828701613457565b925050604061356186828701613496565b9150509250925092565b60008060408385031215613582576135816142c5565b5b600061359085828601613457565b92505060206135a185828601613496565b9150509250929050565b6000602082840312156135c1576135c06142c5565b5b60006135cf8482850161346c565b91505092915050565b600080604083850312156135ef576135ee6142c5565b5b60006135fd8582860161346c565b925050602061360e85828601613457565b9150509250929050565b60006020828403121561362e5761362d6142c5565b5b600061363c84828501613481565b91505092915050565b60006020828403121561365b5761365a6142c5565b5b600061366984828501613496565b91505092915050565b61367b8161407f565b82525050565b61368a8161408b565b82525050565b613699816140c1565b82525050565b60006136aa82613ca9565b6136b48185613cb4565b93506136c4818560208601614102565b6136cd816142ca565b840191505092915050565b60006136e382613ca9565b6136ed8185613cc5565b93506136fd818560208601614102565b80840191505092915050565b6000613716602083613cb4565b9150613721826142e8565b602082019050919050565b6000613739602383613cb4565b915061374482614311565b604082019050919050565b600061375c602283613cb4565b915061376782614360565b604082019050919050565b600061377f602283613cb4565b915061378a826143af565b604082019050919050565b60006137a2601b83613cb4565b91506137ad826143fe565b602082019050919050565b60006137c5602683613cb4565b91506137d082614427565b604082019050919050565b60006137e8602083613cb4565b91506137f382614476565b602082019050919050565b600061380b602183613cb4565b91506138168261449f565b604082019050919050565b600061382e602883613cb4565b9150613839826144ee565b604082019050919050565b6000613851602183613cb4565b915061385c8261453d565b604082019050919050565b6000613874602583613cb4565b915061387f8261458c565b604082019050919050565b6000613897602483613cb4565b91506138a2826145db565b604082019050919050565b60006138ba602883613cb4565b91506138c58261462a565b604082019050919050565b60006138dd601783613cc5565b91506138e882614679565b601782019050919050565b6000613900602583613cb4565b915061390b826146a2565b604082019050919050565b6000613923601183613cc5565b915061392e826146f1565b601182019050919050565b6000613946602f83613cb4565b91506139518261471a565b604082019050919050565b6000613969601f83613cb4565b915061397482614769565b602082019050919050565b613988816140eb565b82525050565b613997816140f5565b82525050565b60006139a8826138d0565b91506139b482856136d8565b91506139bf82613916565b91506139cb82846136d8565b91508190509392505050565b60006020820190506139ec6000830184613672565b92915050565b6000602082019050613a076000830184613681565b92915050565b6000602082019050613a226000830184613690565b92915050565b60006020820190508181036000830152613a42818461369f565b905092915050565b60006020820190508181036000830152613a6381613709565b9050919050565b60006020820190508181036000830152613a838161372c565b9050919050565b60006020820190508181036000830152613aa38161374f565b9050919050565b60006020820190508181036000830152613ac381613772565b9050919050565b60006020820190508181036000830152613ae381613795565b9050919050565b60006020820190508181036000830152613b03816137b8565b9050919050565b60006020820190508181036000830152613b23816137db565b9050919050565b60006020820190508181036000830152613b43816137fe565b9050919050565b60006020820190508181036000830152613b6381613821565b9050919050565b60006020820190508181036000830152613b8381613844565b9050919050565b60006020820190508181036000830152613ba381613867565b9050919050565b60006020820190508181036000830152613bc38161388a565b9050919050565b60006020820190508181036000830152613be3816138ad565b9050919050565b60006020820190508181036000830152613c03816138f3565b9050919050565b60006020820190508181036000830152613c2381613939565b9050919050565b60006020820190508181036000830152613c438161395c565b9050919050565b6000602082019050613c5f600083018461397f565b92915050565b6000604082019050613c7a600083018561397f565b613c87602083018461397f565b9392505050565b6000602082019050613ca3600083018461398e565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000613cdb826140eb565b9150613ce6836140eb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d1b57613d1a6141da565b5b828201905092915050565b6000613d31826140eb565b9150613d3c836140eb565b925082613d4c57613d4b614209565b5b828204905092915050565b6000808291508390505b6001851115613da157808604811115613d7d57613d7c6141da565b5b6001851615613d8c5780820291505b8081029050613d9a856142db565b9450613d61565b94509492505050565b6000613db5826140eb565b9150613dc0836140eb565b9250613ded7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613df5565b905092915050565b600082613e055760019050613ec1565b81613e135760009050613ec1565b8160018114613e295760028114613e3357613e62565b6001915050613ec1565b60ff841115613e4557613e446141da565b5b8360020a915084821115613e5c57613e5b6141da565b5b50613ec1565b5060208310610133831016604e8410600b8410161715613e975782820a905083811115613e9257613e916141da565b5b613ec1565b613ea48484846001613d57565b92509050818404811115613ebb57613eba6141da565b5b81810290505b9392505050565b6000613ed3826140c1565b9150613ede836140c1565b9250827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482116000841360008413161615613f1d57613f1c6141da565b5b817f80000000000000000000000000000000000000000000000000000000000000000583126000841260008413161615613f5a57613f596141da565b5b827f80000000000000000000000000000000000000000000000000000000000000000582126000841360008412161615613f9757613f966141da565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0582126000841260008412161615613fd457613fd36141da565b5b828202905092915050565b6000613fea826140eb565b9150613ff5836140eb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561402e5761402d6141da565b5b828202905092915050565b6000614044826140eb565b915061404f836140eb565b925082821015614062576140616141da565b5b828203905092915050565b6000614078826140cb565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015614120578082015181840152602081019050614105565b8381111561412f576000848401525b50505050565b6000614140826140eb565b91506000821415614154576141536141da565b5b600182039050919050565b6000600282049050600182168061417757607f821691505b6020821081141561418b5761418a614238565b5b50919050565b600061419c826140c1565b91507f80000000000000000000000000000000000000000000000000000000000000008214156141cf576141ce6141da565b5b816000039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53616665436173743a2076616c7565206d75737420626520706f736974697665600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f53616665436173743a2076616c756520646f65736e27742066697420696e206160008201527f6e20696e74323536000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61479b8161406d565b81146147a657600080fd5b50565b6147b28161408b565b81146147bd57600080fd5b50565b6147c981614095565b81146147d457600080fd5b50565b6147e0816140eb565b81146147eb57600080fd5b5056fea2646970667358221220208cb6b7bb6d89ff07cc39cfaa20f455331bbfa5660cf2d50abb8d36f3bca11964736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063c81b70c411610097578063dcc09b8211610071578063dcc09b8214610559578063dd62ed3e14610577578063f5f50eb1146105a7578063f90a518c146105c5576101c4565b8063c81b70c4146104dd578063d547741f1461050d578063dc287c7e14610529576101c4565b8063a217fddf116100d3578063a217fddf14610441578063a457c2d71461045f578063a9059cbb1461048f578063b55cd04b146104bf576101c4565b806370a08231146103c357806391d14854146103f357806395d89b4114610423576101c4565b8063248a9ca311610166578063313ce56711610140578063313ce5671461033b57806336568abe1461035957806339509351146103755780634f3e1efc146103a5576101c4565b8063248a9ca3146102d15780632a0acc6a146103015780632f2ff15d1461031f576101c4565b8063095ea7b3116101a2578063095ea7b3146102355780630ca1c5c91461026557806318160ddd1461028357806323b872dd146102a1576101c4565b806301ffc9a7146101c95780630570ae27146101f957806306fdde0314610217575b600080fd5b6101e360048036038101906101de9190613618565b6105e3565b6040516101f091906139d7565b60405180910390f35b61020161065d565b60405161020e91906139f2565b60405180910390f35b61021f610681565b60405161022c9190613a28565b60405180910390f35b61024f600480360381019061024a919061356b565b610713565b60405161025c91906139d7565b60405180910390f35b61026d610731565b60405161027a9190613c4a565b60405180910390f35b61028b61074e565b6040516102989190613c4a565b60405180910390f35b6102bb60048036038101906102b69190613518565b610758565b6040516102c891906139d7565b60405180910390f35b6102eb60048036038101906102e691906135ab565b6109cd565b6040516102f891906139f2565b60405180910390f35b6103096109ed565b60405161031691906139f2565b60405180910390f35b610339600480360381019061033491906135d8565b610a11565b005b610343610a3a565b6040516103509190613c8e565b60405180910390f35b610373600480360381019061036e91906135d8565b610a43565b005b61038f600480360381019061038a919061356b565b610ac6565b60405161039c91906139d7565b60405180910390f35b6103ad610b72565b6040516103ba9190613c4a565b60405180910390f35b6103dd60048036038101906103d891906134ab565b610b8e565b6040516103ea9190613c4a565b60405180910390f35b61040d600480360381019061040891906135d8565b610bd6565b60405161041a91906139d7565b60405180910390f35b61042b610c41565b6040516104389190613a28565b60405180910390f35b610449610cd3565b60405161045691906139f2565b60405180910390f35b6104796004803603810190610474919061356b565b610cda565b60405161048691906139d7565b60405180910390f35b6104a960048036038101906104a4919061356b565b610dc5565b6040516104b691906139d7565b60405180910390f35b6104c761125c565b6040516104d49190613c4a565b60405180910390f35b6104f760048036038101906104f29190613645565b611279565b6040516105049190613c4a565b60405180910390f35b610527600480360381019061052291906135d8565b611369565b005b610543600480360381019061053e9190613645565b611392565b6040516105509190613c4a565b60405180910390f35b610561611482565b60405161056e9190613c4a565b60405180910390f35b610591600480360381019061058c91906134d8565b61148c565b60405161059e9190613c4a565b60405180910390f35b6105af611513565b6040516105bc9190613c4a565b60405180910390f35b6105cd61151d565b6040516105da9190613c4a565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065657506106558261153a565b5b9050919050565b7f22cd237eb62f1146e3c1b1904c85e317fa2bd7aaa97c3165cb61bf6e6ee9e26181565b6060600380546106909061415f565b80601f01602080910402602001604051908101604052809291908181526020018280546106bc9061415f565b80156107095780601f106106de57610100808354040283529160200191610709565b820191906000526020600020905b8154815290600101906020018083116106ec57829003601f168201915b5050505050905090565b60006107276107206115a4565b84846115ac565b6001905092915050565b6000670de0b6b3a76400006009546107499190613d26565b905090565b6000600254905090565b60008061076483611392565b9050600061077460125483611777565b90506107a07f22cd237eb62f1146e3c1b1904c85e317fa2bd7aaa97c3165cb61bf6e6ee9e26186610bd6565b1561094857601460009054906101000a900460ff1680156107c357506006548110155b156108a15760105461080a6107f9600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b8e565b610805856127106117c1565b611777565b1061089c57610846600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610841846127106117c1565b61180b565b6000601460006101000a81548160ff021916908315150217905550610878601254610873846127106117c1565b611777565b601281905550610895600854610890846127106117c1565b6119e2565b6008819055505b610947565b60065481101580156108b35750600082115b15610946576010546108ef6108e9600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b8e565b86611777565b1061094557610920600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361180b565b61092c60125483611777565b60128190555061093e600854836119e2565b6008819055505b5b5b5b610953868686611a40565b6000610966876109616115a4565b61148c565b9050848110156109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a290613b4a565b60405180910390fd5b6109bf876109b76115a4565b8784036115ac565b600193505050509392505050565b600060056000838152602001908152602001600020600101549050919050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b610a1a826109cd565b610a2b81610a266115a4565b611cc1565b610a358383611d5e565b505050565b60006012905090565b610a4b6115a4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90613c0a565b60405180910390fd5b610ac28282611e3f565b5050565b6000610b68610ad36115a4565b848460016000610ae16115a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b639190613cd0565b6115ac565b6001905092915050565b6000662386f26fc10000601254610b899190613d26565b905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610c509061415f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7c9061415f565b8015610cc95780601f10610c9e57610100808354040283529160200191610cc9565b820191906000526020600020905b815481529060010190602001808311610cac57829003601f168201915b5050505050905090565b6000801b81565b60008060016000610ce96115a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d90613bea565b60405180910390fd5b610dba610db16115a4565b858584036115ac565b600191505092915050565b600080610dd183611392565b90506000610dde84611279565b90506000610dee60125484611777565b90506000610dfe601254846119e2565b90506000610e0b88610b8e565b1415610e2c576001600c6000828254610e249190613cd0565b925050819055505b600e54600c5410158015610e4d5750600654610e4a60125488611777565b10155b8015610e905750601054610e8d610e85600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b8e565b600d54611777565b10155b15610f1657610ec3600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d5461180b565b610ed1601254600d54611777565b601281905550610ee5600854600d546119e2565b6008819055506002600e54610efa9190613fdf565b600e819055506002600d54610f0f9190613d26565b600d819055505b610f477f22cd237eb62f1146e3c1b1904c85e317fa2bd7aaa97c3165cb61bf6e6ee9e261610f426115a4565b610bd6565b1561106a576007548111158015610f6a5750601460019054906101000a900460ff165b1561100057610fa6600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610fa1856127106117c1565b611f21565b6000601460016101000a81548160ff021916908315150217905550610fd8601254610fd3856127106117c1565b6119e2565b601281905550610ff5600954610ff0856127106117c1565b6119e2565b600981905550611069565b60075481111580156110125750600083115b1561106857611043600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f21565b61104f601254846119e2565b601281905550611061600954846119e2565b6009819055505b5b5b6110947f22cd237eb62f1146e3c1b1904c85e317fa2bd7aaa97c3165cb61bf6e6ee9e26188610bd6565b1561123c57601460009054906101000a900460ff1680156110b757506006548210155b15611195576010546110fe6110ed600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b8e565b6110f9876127106117c1565b611777565b106111905761113a600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611135866127106117c1565b61180b565b6000601460006101000a81548160ff02191690831515021790555061116c601254611167866127106117c1565b611777565b601281905550611189600854611184866127106117c1565b6119e2565b6008819055505b61123b565b60065482101580156111a75750600084115b1561123a576010546111e36111dd600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b8e565b86611777565b1061123957611214600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561180b565b61122060125485611777565b601281905550611232600854856119e2565b6008819055505b5b5b5b61124e6112476115a4565b8888611a40565b600194505050505092915050565b6000670de0b6b3a76400006008546112749190613d26565b905090565b600080611288600a54846119e2565b905082600a81905550600061129c82612081565b90506001811015611323576001601460016101000a81548160ff02191690831515021790555060006112d56112d0846120b5565b612122565b90506008816112e49190613ec8565b90506112f86112f2846120b5565b826121e5565b9050600061130582612351565b9050612710816113159190613fdf565b905080945050505050611364565b600061133082600861239e565b9050600061133e84836117c1565b9050601354600a61134f9190613daa565b8161135a9190613fdf565b9050809450505050505b919050565b611372826109cd565b6113838161137e6115a4565b611cc1565b61138d8383611e3f565b505050565b6000806113a1600b54846119e2565b905082600b8190555060006113b582612081565b9050600181101561143c576001601460006101000a81548160ff02191690831515021790555060006113ee6113e9846120b5565b612122565b90506004816113fd9190613ec8565b905061141161140b846120b5565b826121e5565b9050600061141e82612351565b90506127108161142e9190613fdf565b90508094505050505061147d565b600061144982600461239e565b9050600061145784836117c1565b9050601354600a6114689190613daa565b816114739190613fdf565b9050809450505050505b919050565b6000600e54905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600c54905090565b6000670de0b6b3a7640000600d546115359190613d26565b905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390613baa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561168c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168390613aaa565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161176a9190613c4a565b60405180910390a3505050565b60006117b983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612419565b905092915050565b600061180383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061247d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187290613b6a565b60405180910390fd5b611887826000836124e0565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190490613a8a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546119649190614039565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119c99190613c4a565b60405180910390a36119dd836000846124e5565b505050565b60008082846119f19190613cd0565b905083811015611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90613aca565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa790613b8a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1790613a6a565b60405180910390fd5b611b2b8383836124e0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890613aea565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c449190613cd0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ca89190613c4a565b60405180910390a3611cbb8484846124e5565b50505050565b611ccb8282610bd6565b611d5a57611cf08173ffffffffffffffffffffffffffffffffffffffff1660146124ea565b611cfe8360001c60206124ea565b604051602001611d0f92919061399d565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d519190613a28565b60405180910390fd5b5050565b611d688282610bd6565b611e3b5760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611de06115a4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611e498282610bd6565b15611f1d5760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ec26115a4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890613c2a565b60405180910390fd5b611f9d600083836124e0565b8060026000828254611faf9190613cd0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120049190613cd0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120699190613c4a565b60405180910390a361207d600083836124e5565b5050565b60006714057b7ef767814f670de0b6b3a764000061209e84612726565b02816120ad576120ac614209565b5b049050919050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82111561211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211190613bca565b60405180910390fd5b819050919050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462ce82121561215557600090506121e0565b680736ea4425c11ac63182126121a257816040517f925dbb1f0000000000000000000000000000000000000000000000000000000081526004016121999190613a0d565b60405180910390fd5b60006714057b7ef767814f830290506121dc670de0b6b3a76400006706f05b59d3b200008301816121d6576121d5614209565b5b05612860565b9150505b919050565b60007f800000000000000000000000000000000000000000000000000000000000000083148061223457507f800000000000000000000000000000000000000000000000000000000000000082145b1561226b576040517fb727d89300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000851261227c5784612281565b846000035b9150600084126122915783612296565b836000035b905060006122ad83670de0b6b3a76400008461294e565b90507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81111561231457806040517f71a646c900000000000000000000000000000000000000000000000000000000815260040161230b9190613c4a565b60405180910390fd5b6000806001600003881391506001600003871390506001818318146123395782612344565b8261234390614191565b5b9550505050505092915050565b600080821215612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90613b0a565b60405180910390fd5b819050919050565b6000808314156123b15760009050612413565b600082846123bf9190613fdf565b90508284826123ce9190613d26565b1461240e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240590613b2a565b60405180910390fd5b809150505b92915050565b6000838311158290612461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124589190613a28565b60405180910390fd5b50600083856124709190614039565b9050809150509392505050565b600080831182906124c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bb9190613a28565b60405180910390fd5b50600083856124d39190613d26565b9050809150509392505050565b505050565b505050565b6060600060028360026124fd9190613fdf565b6125079190613cd0565b67ffffffffffffffff8111156125205761251f614296565b5b6040519080825280601f01601f1916602001820160405280156125525781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061258a57612589614267565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106125ee576125ed614267565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261262e9190613fdf565b6126389190613cd0565b90505b60018111156126d8577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061267a57612679614267565b5b1a60f81b82828151811061269157612690614267565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806126d190614135565b905061263b565b506000841461271c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271390613a4a565b60405180910390fd5b8091505092915050565b600080821161276c57816040517f626086840000000000000000000000000000000000000000000000000000000081526004016127639190613c4a565b60405180910390fd5b6000670de0b6b3a76400008310612786576001905061279b565b826ec097ce7bc90715b34b9f10000000000492505b60006127be670de0b6b3a764000085816127b8576127b7614209565b5b04612a64565b9050670de0b6b3a76400008102925060008185901c9050670de0b6b3a76400008114156127f257828402935050505061285b565b60006706f05b59d3b2000090505b600081111561285157670de0b6b3a76400008283028161282357612822614209565b5b049150670de0b6b3a76400006002028210612845578085019450600182901c91505b600181901c9050612800565b5082840293505050505b919050565b6000808212156128cd577ffffffffffffffffffffffffffffffffffffffffffffffffcc22e87f6eb468eeb82121561289b5760009050612949565b6128a782600003612860565b6ec097ce7bc90715b34b9f1000000000816128c5576128c4614209565b5b059050612948565b680a688906bd8b000000821261291a57816040517f15d7ffa10000000000000000000000000000000000000000000000000000000081526004016129119190613a0d565b60405180910390fd5b6000670de0b6b3a7640000604084901b8161293857612937614209565b5b04905061294481612b7b565b9150505b5b919050565b60008060008019858709858702925082811083820303915050600081141561298a578382816129805761297f614209565b5b0492505050612a5d565b8381106129d05780846040517f2b3c9c070000000000000000000000000000000000000000000000000000000081526004016129c7929190613c65565b60405180910390fd5b60008486880990508281118203915080830392506000600186190186169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b60007001000000000000000000000000000000008210612a9557608082901c9150608081612a929190613cd0565b90505b680100000000000000008210612abc57604082901c9150604081612ab99190613cd0565b90505b6401000000008210612adf57602082901c9150602081612adc9190613cd0565b90505b620100008210612b0057601082901c9150601081612afd9190613cd0565b90505b6101008210612b2057600882901c9150600881612b1d9190613cd0565b90505b60108210612b3f57600482901c9150600481612b3c9190613cd0565b90505b60048210612b5e57600282901c9150600281612b5b9190613cd0565b90505b60028210612b7657600181612b739190613cd0565b90505b919050565b6000778000000000000000000000000000000000000000000000009050600067800000000000000083161115612bbe57604068016a09e667f3bcc9098202901c90505b600067400000000000000083161115612be45760406801306fe0a31b7152df8202901c90505b600067200000000000000083161115612c0a5760406801172b83c7d517adce8202901c90505b600067100000000000000083161115612c3057604068010b5586cf9890f62a8202901c90505b600067080000000000000083161115612c565760406801059b0d31585743ae8202901c90505b600067040000000000000083161115612c7c576040680102c9a3e778060ee78202901c90505b600067020000000000000083161115612ca257604068010163da9fb33356d88202901c90505b600067010000000000000083161115612cc8576040680100b1afa5abcbed618202901c90505b6000668000000000000083161115612ced57604068010058c86da1c09ea28202901c90505b6000664000000000000083161115612d125760406801002c605e2e8cec508202901c90505b6000662000000000000083161115612d37576040680100162f3904051fa18202901c90505b6000661000000000000083161115612d5c5760406801000b175effdc76ba8202901c90505b6000660800000000000083161115612d81576040680100058ba01fb9f96d8202901c90505b6000660400000000000083161115612da657604068010002c5cc37da94928202901c90505b6000660200000000000083161115612dcb5760406801000162e525ee05478202901c90505b6000660100000000000083161115612df057604068010000b17255775c048202901c90505b60006580000000000083161115612e145760406801000058b91b5bc9ae8202901c90505b60006540000000000083161115612e38576040680100002c5c89d5ec6d8202901c90505b60006520000000000083161115612e5c57604068010000162e43f4f8318202901c90505b60006510000000000083161115612e80576040680100000b1721bcfc9a8202901c90505b60006508000000000083161115612ea457604068010000058b90cf1e6e8202901c90505b60006504000000000083161115612ec85760406801000002c5c863b73f8202901c90505b60006502000000000083161115612eec576040680100000162e430e5a28202901c90505b60006501000000000083161115612f105760406801000000b1721835518202901c90505b600064800000000083161115612f33576040680100000058b90c0b498202901c90505b600064400000000083161115612f5657604068010000002c5c8601cc8202901c90505b600064200000000083161115612f795760406801000000162e42fff08202901c90505b600064100000000083161115612f9c57604068010000000b17217fbb8202901c90505b600064080000000083161115612fbf5760406801000000058b90bfce8202901c90505b600064040000000083161115612fe2576040680100000002c5c85fe38202901c90505b60006402000000008316111561300557604068010000000162e42ff18202901c90505b600064010000000083161115613028576040680100000000b17217f88202901c90505b600063800000008316111561304a57604068010000000058b90bfc8202901c90505b600063400000008316111561306c5760406801000000002c5c85fe8202901c90505b600063200000008316111561308e576040680100000000162e42ff8202901c90505b60006310000000831611156130b05760406801000000000b17217f8202901c90505b60006308000000831611156130d2576040680100000000058b90c08202901c90505b60006304000000831611156130f457604068010000000002c5c8608202901c90505b60006302000000831611156131165760406801000000000162e4308202901c90505b600063010000008316111561313857604068010000000000b172188202901c90505b600062800000831611156131595760406801000000000058b90c8202901c90505b6000624000008316111561317a576040680100000000002c5c868202901c90505b6000622000008316111561319b57604068010000000000162e438202901c90505b600062100000831611156131bc576040680100000000000b17218202901c90505b600062080000831611156131dd57604068010000000000058b918202901c90505b600062040000831611156131fe5760406801000000000002c5c88202901c90505b6000620200008316111561321f576040680100000000000162e48202901c90505b600062010000831611156132405760406801000000000000b1728202901c90505b600061800083161115613260576040680100000000000058b98202901c90505b60006140008316111561328057604068010000000000002c5d8202901c90505b6000612000831611156132a05760406801000000000000162e8202901c90505b6000611000831611156132c057604068010000000000000b178202901c90505b6000610800831611156132e05760406801000000000000058c8202901c90505b600061040083161115613300576040680100000000000002c68202901c90505b600061020083161115613320576040680100000000000001638202901c90505b600061010083161115613340576040680100000000000000b18202901c90505b600060808316111561335f576040680100000000000000598202901c90505b600060408316111561337e5760406801000000000000002c8202901c90505b600060208316111561339d576040680100000000000000168202901c90505b60006010831611156133bc5760406801000000000000000b8202901c90505b60006008831611156133db576040680100000000000000068202901c90505b60006004831611156133fa576040680100000000000000038202901c90505b6000600283161115613419576040680100000000000000018202901c90505b6000600183161115613438576040680100000000000000018202901c90505b670de0b6b3a764000081029050604082901c60bf0381901c9050919050565b60008135905061346681614792565b92915050565b60008135905061347b816147a9565b92915050565b600081359050613490816147c0565b92915050565b6000813590506134a5816147d7565b92915050565b6000602082840312156134c1576134c06142c5565b5b60006134cf84828501613457565b91505092915050565b600080604083850312156134ef576134ee6142c5565b5b60006134fd85828601613457565b925050602061350e85828601613457565b9150509250929050565b600080600060608486031215613531576135306142c5565b5b600061353f86828701613457565b935050602061355086828701613457565b925050604061356186828701613496565b9150509250925092565b60008060408385031215613582576135816142c5565b5b600061359085828601613457565b92505060206135a185828601613496565b9150509250929050565b6000602082840312156135c1576135c06142c5565b5b60006135cf8482850161346c565b91505092915050565b600080604083850312156135ef576135ee6142c5565b5b60006135fd8582860161346c565b925050602061360e85828601613457565b9150509250929050565b60006020828403121561362e5761362d6142c5565b5b600061363c84828501613481565b91505092915050565b60006020828403121561365b5761365a6142c5565b5b600061366984828501613496565b91505092915050565b61367b8161407f565b82525050565b61368a8161408b565b82525050565b613699816140c1565b82525050565b60006136aa82613ca9565b6136b48185613cb4565b93506136c4818560208601614102565b6136cd816142ca565b840191505092915050565b60006136e382613ca9565b6136ed8185613cc5565b93506136fd818560208601614102565b80840191505092915050565b6000613716602083613cb4565b9150613721826142e8565b602082019050919050565b6000613739602383613cb4565b915061374482614311565b604082019050919050565b600061375c602283613cb4565b915061376782614360565b604082019050919050565b600061377f602283613cb4565b915061378a826143af565b604082019050919050565b60006137a2601b83613cb4565b91506137ad826143fe565b602082019050919050565b60006137c5602683613cb4565b91506137d082614427565b604082019050919050565b60006137e8602083613cb4565b91506137f382614476565b602082019050919050565b600061380b602183613cb4565b91506138168261449f565b604082019050919050565b600061382e602883613cb4565b9150613839826144ee565b604082019050919050565b6000613851602183613cb4565b915061385c8261453d565b604082019050919050565b6000613874602583613cb4565b915061387f8261458c565b604082019050919050565b6000613897602483613cb4565b91506138a2826145db565b604082019050919050565b60006138ba602883613cb4565b91506138c58261462a565b604082019050919050565b60006138dd601783613cc5565b91506138e882614679565b601782019050919050565b6000613900602583613cb4565b915061390b826146a2565b604082019050919050565b6000613923601183613cc5565b915061392e826146f1565b601182019050919050565b6000613946602f83613cb4565b91506139518261471a565b604082019050919050565b6000613969601f83613cb4565b915061397482614769565b602082019050919050565b613988816140eb565b82525050565b613997816140f5565b82525050565b60006139a8826138d0565b91506139b482856136d8565b91506139bf82613916565b91506139cb82846136d8565b91508190509392505050565b60006020820190506139ec6000830184613672565b92915050565b6000602082019050613a076000830184613681565b92915050565b6000602082019050613a226000830184613690565b92915050565b60006020820190508181036000830152613a42818461369f565b905092915050565b60006020820190508181036000830152613a6381613709565b9050919050565b60006020820190508181036000830152613a838161372c565b9050919050565b60006020820190508181036000830152613aa38161374f565b9050919050565b60006020820190508181036000830152613ac381613772565b9050919050565b60006020820190508181036000830152613ae381613795565b9050919050565b60006020820190508181036000830152613b03816137b8565b9050919050565b60006020820190508181036000830152613b23816137db565b9050919050565b60006020820190508181036000830152613b43816137fe565b9050919050565b60006020820190508181036000830152613b6381613821565b9050919050565b60006020820190508181036000830152613b8381613844565b9050919050565b60006020820190508181036000830152613ba381613867565b9050919050565b60006020820190508181036000830152613bc38161388a565b9050919050565b60006020820190508181036000830152613be3816138ad565b9050919050565b60006020820190508181036000830152613c03816138f3565b9050919050565b60006020820190508181036000830152613c2381613939565b9050919050565b60006020820190508181036000830152613c438161395c565b9050919050565b6000602082019050613c5f600083018461397f565b92915050565b6000604082019050613c7a600083018561397f565b613c87602083018461397f565b9392505050565b6000602082019050613ca3600083018461398e565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000613cdb826140eb565b9150613ce6836140eb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d1b57613d1a6141da565b5b828201905092915050565b6000613d31826140eb565b9150613d3c836140eb565b925082613d4c57613d4b614209565b5b828204905092915050565b6000808291508390505b6001851115613da157808604811115613d7d57613d7c6141da565b5b6001851615613d8c5780820291505b8081029050613d9a856142db565b9450613d61565b94509492505050565b6000613db5826140eb565b9150613dc0836140eb565b9250613ded7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613df5565b905092915050565b600082613e055760019050613ec1565b81613e135760009050613ec1565b8160018114613e295760028114613e3357613e62565b6001915050613ec1565b60ff841115613e4557613e446141da565b5b8360020a915084821115613e5c57613e5b6141da565b5b50613ec1565b5060208310610133831016604e8410600b8410161715613e975782820a905083811115613e9257613e916141da565b5b613ec1565b613ea48484846001613d57565b92509050818404811115613ebb57613eba6141da565b5b81810290505b9392505050565b6000613ed3826140c1565b9150613ede836140c1565b9250827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482116000841360008413161615613f1d57613f1c6141da565b5b817f80000000000000000000000000000000000000000000000000000000000000000583126000841260008413161615613f5a57613f596141da565b5b827f80000000000000000000000000000000000000000000000000000000000000000582126000841360008412161615613f9757613f966141da565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0582126000841260008412161615613fd457613fd36141da565b5b828202905092915050565b6000613fea826140eb565b9150613ff5836140eb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561402e5761402d6141da565b5b828202905092915050565b6000614044826140eb565b915061404f836140eb565b925082821015614062576140616141da565b5b828203905092915050565b6000614078826140cb565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015614120578082015181840152602081019050614105565b8381111561412f576000848401525b50505050565b6000614140826140eb565b91506000821415614154576141536141da565b5b600182039050919050565b6000600282049050600182168061417757607f821691505b6020821081141561418b5761418a614238565b5b50919050565b600061419c826140c1565b91507f80000000000000000000000000000000000000000000000000000000000000008214156141cf576141ce6141da565b5b816000039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53616665436173743a2076616c7565206d75737420626520706f736974697665600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f53616665436173743a2076616c756520646f65736e27742066697420696e206160008201527f6e20696e74323536000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61479b8161406d565b81146147a657600080fd5b50565b6147b28161408b565b81146147bd57600080fd5b50565b6147c981614095565b81146147d457600080fd5b50565b6147e0816140eb565b81146147eb57600080fd5b5056fea2646970667358221220208cb6b7bb6d89ff07cc39cfaa20f455331bbfa5660cf2d50abb8d36f3bca11964736f6c63430008070033
Deployed Bytecode Sourcemap
16307:9077:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7893:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16470:64;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2887:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3801:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18762:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3208:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23753:1628;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8757:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16413:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8888:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3107:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9200:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4466:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18476:105;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3324:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8105:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2995:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7734:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4689:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20792:2953;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18621:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19045:846;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9043:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19938:846;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18151:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3642:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18904:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18282:111;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7893:204;7978:4;8017:32;8002:47;;;:11;:47;;;;:87;;;;8053:36;8077:11;8053:23;:36::i;:::-;8002:87;7995:94;;7893:204;;;:::o;16470:64::-;16509:25;16470:64;:::o;2887:100::-;2941:13;2974:5;2967:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2887:100;:::o;3801:169::-;3884:4;3901:39;3910:12;:10;:12::i;:::-;3924:7;3933:6;3901:8;:39::i;:::-;3958:4;3951:11;;3801:169;;;;:::o;18762:101::-;18808:7;18847:6;18834:11;;:20;;;;:::i;:::-;18827:28;;18762:101;:::o;3208:108::-;3269:7;3296:12;;3289:19;;3208:108;:::o;23753:1628::-;23858:4;23875:18;23896:21;23910:6;23896:13;:21::i;:::-;23875:42;;23928:30;23961:38;23974:13;;23988:10;23961:12;:38::i;:::-;23928:71;;24013:32;16509:25;24035:9;24013:7;:32::i;:::-;24010:1045;;;24074:9;;;;;;;;;;;:50;;;;;24111:13;;24087:22;:37;;24074:50;24071:973;;;24234:14;;24161:70;24174:25;24184:14;;;;;;;;;;;24174:9;:25::i;:::-;24200:30;24213:10;24224:5;24200:12;:30::i;:::-;24161:12;:70::i;:::-;:87;24158:433;;24290:52;24296:14;;;;;;;;;;;24311:30;24324:10;24335:5;24311:12;:30::i;:::-;24290:5;:52::i;:::-;24376:5;24365:9;;:16;;;;;;;;;;;;;;;;;;24420:58;24433:13;;24447:30;24460:10;24471:5;24447:12;:30::i;:::-;24420:12;:58::i;:::-;24404:13;:74;;;;24515:56;24528:11;;24540:30;24553:10;24564:5;24540:12;:30::i;:::-;24515:12;:56::i;:::-;24501:11;:70;;;;24158:433;24071:973;;;24652:13;;24628:22;:37;;:55;;;;;24682:1;24669:10;:14;24628:55;24625:419;;;24771:14;;24720:47;24733:25;24743:14;;;;;;;;;;;24733:9;:25::i;:::-;24760:6;24720:12;:47::i;:::-;:65;24717:312;;24827:32;24833:14;;;;;;;;;;;24848:10;24827:5;:32::i;:::-;24898:38;24911:13;;24925:10;24898:12;:38::i;:::-;24882:13;:54;;;;24973:36;24986:11;;24998:10;24973:12;:36::i;:::-;24959:11;:50;;;;24717:312;24625:419;24071:973;24010:1045;25065:36;25075:6;25083:9;25094:6;25065:9;:36::i;:::-;25112:24;25139:30;25149:6;25156:12;:10;:12::i;:::-;25139:9;:30::i;:::-;25112:57;;25208:6;25188:16;:26;;25180:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;25287:57;25296:6;25304:12;:10;:12::i;:::-;25337:6;25318:16;:25;25287:8;:57::i;:::-;25369:4;25362:11;;;;;23753:1628;;;;;:::o;8757:123::-;8823:7;8850:6;:12;8857:4;8850:12;;;;;;;;;;;:22;;;8843:29;;8757:123;;;:::o;16413:50::-;16445:18;16413:50;:::o;8888:147::-;8971:18;8984:4;8971:12;:18::i;:::-;7835:30;7846:4;7852:12;:10;:12::i;:::-;7835:10;:30::i;:::-;9002:25:::1;9013:4;9019:7;9002:10;:25::i;:::-;8888:147:::0;;;:::o;3107:93::-;3165:5;3190:2;3183:9;;3107:93;:::o;9200:218::-;9307:12;:10;:12::i;:::-;9296:23;;:7;:23;;;9288:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;9384:26;9396:4;9402:7;9384:11;:26::i;:::-;9200:218;;:::o;4466:215::-;4554:4;4571:80;4580:12;:10;:12::i;:::-;4594:7;4640:10;4603:11;:25;4615:12;:10;:12::i;:::-;4603:25;;;;;;;;;;;;;;;:34;4629:7;4603:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4571:8;:80::i;:::-;4669:4;4662:11;;4466:215;;;;:::o;18476:105::-;18524:7;18565:6;18550:13;;:22;;;;:::i;:::-;18543:30;;18476:105;:::o;3324:127::-;3398:7;3425:9;:18;3435:7;3425:18;;;;;;;;;;;;;;;;3418:25;;3324:127;;;:::o;8105:139::-;8183:4;8207:6;:12;8214:4;8207:12;;;;;;;;;;;:20;;:29;8228:7;8207:29;;;;;;;;;;;;;;;;;;;;;;;;;8200:36;;8105:139;;;;:::o;2995:104::-;3051:13;3084:7;3077:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2995:104;:::o;7734:49::-;7779:4;7734:49;;;:::o;4689:401::-;4782:4;4799:24;4826:11;:25;4838:12;:10;:12::i;:::-;4826:25;;;;;;;;;;;;;;;:34;4852:7;4826:34;;;;;;;;;;;;;;;;4799:61;;4899:15;4879:16;:35;;4871:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4984:67;4993:12;:10;:12::i;:::-;5007:7;5035:15;5016:16;:34;4984:8;:67::i;:::-;5078:4;5071:11;;;4689:401;;;;:::o;20792:2953::-;20878:4;20932:18;20953:21;20967:6;20953:13;:21::i;:::-;20932:42;;20985:18;21006:21;21020:6;21006:13;:21::i;:::-;20985:42;;21038:30;21071:38;21084:13;;21098:10;21071:12;:38::i;:::-;21038:71;;21120:30;21153:38;21166:13;;21180:10;21153:12;:38::i;:::-;21120:71;;21276:1;21254:20;21264:9;21254;:20::i;:::-;:23;21251:81;;;21319:1;21303:12;;:17;;;;;;;:::i;:::-;;;;;;;;21251:81;21400:8;;21386:12;;:22;;:75;;;;;21448:13;;21412:34;21425:13;;21439:6;21412:12;:34::i;:::-;:49;;21386:75;:151;;;;;21523:14;;21465:56;21478:25;21488:14;;;;;;;;;;;21478:9;:25::i;:::-;21504:16;;21465:12;:56::i;:::-;:72;;21386:151;21383:464;;;21563:38;21569:14;;;;;;;;;;;21584:16;;21563:5;:38::i;:::-;21632:44;21645:13;;21659:16;;21632:12;:44::i;:::-;21616:13;:60;;;;21705:42;21718:11;;21730:16;;21705:12;:42::i;:::-;21691:11;:56;;;;21782:1;21773:8;;:10;;;;:::i;:::-;21762:8;:21;;;;21834:1;21817:16;;:18;;;;:::i;:::-;21798:16;:37;;;;21383:464;21860:35;16509:25;21882:12;:10;:12::i;:::-;21860:7;:35::i;:::-;21857:749;;;21948:13;;21924:22;:37;;:50;;;;;21965:9;;;;;;;;;;;21924:50;21921:674;;;22008:52;22014:14;;;;;;;;;;;22029:30;22042:10;22053:5;22029:12;:30::i;:::-;22008:5;:52::i;:::-;22091:5;22079:9;;:17;;;;;;;;;;;;;;;;;;22131:58;22144:13;;22158:30;22171:10;22182:5;22158:12;:30::i;:::-;22131:12;:58::i;:::-;22115:13;:74;;;;22222:56;22235:11;;22247:30;22260:10;22271:5;22247:12;:30::i;:::-;22222:12;:56::i;:::-;22208:11;:70;;;;21921:674;;;22340:13;;22316:22;:37;;:55;;;;;22370:1;22357:10;:14;22316:55;22313:282;;;22405:32;22411:14;;;;;;;;;;;22426:10;22405:5;:32::i;:::-;22472:38;22485:13;;22499:10;22472:12;:38::i;:::-;22456:13;:54;;;;22543:36;22556:11;;22568:10;22543:12;:36::i;:::-;22529:11;:50;;;;22313:282;21921:674;21857:749;22619:32;16509:25;22641:9;22619:7;:32::i;:::-;22616:1047;;;22680:9;;;;;;;;;;;:50;;;;;22717:13;;22693:22;:37;;22680:50;22677:975;;;22840:14;;22767:70;22780:25;22790:14;;;;;;;;;;;22780:9;:25::i;:::-;22806:30;22819:10;22830:5;22806:12;:30::i;:::-;22767:12;:70::i;:::-;:87;22764:433;;22896:52;22902:14;;;;;;;;;;;22917:30;22930:10;22941:5;22917:12;:30::i;:::-;22896:5;:52::i;:::-;22982:5;22971:9;;:16;;;;;;;;;;;;;;;;;;23026:58;23039:13;;23053:30;23066:10;23077:5;23053:12;:30::i;:::-;23026:12;:58::i;:::-;23010:13;:74;;;;23121:56;23134:11;;23146:30;23159:10;23170:5;23146:12;:30::i;:::-;23121:12;:56::i;:::-;23107:11;:70;;;;22764:433;22677:975;;;23258:13;;23234:22;:37;;:55;;;;;23288:1;23275:10;:14;23234:55;23231:421;;;23379:14;;23326:50;23339:25;23349:14;;;;;;;;;;;23339:9;:25::i;:::-;23365:10;23326:12;:50::i;:::-;:67;23323:314;;23435:32;23441:14;;;;;;;;;;;23456:10;23435:5;:32::i;:::-;23506:38;23519:13;;23533:10;23506:12;:38::i;:::-;23490:13;:54;;;;23581:36;23594:11;;23606:10;23581:12;:36::i;:::-;23567:11;:50;;;;23323:314;23231:421;22677:975;22616:1047;23673:42;23683:12;:10;:12::i;:::-;23697:9;23708:6;23673:9;:42::i;:::-;23733:4;23726:11;;;;;;20792:2953;;;;:::o;18621:101::-;18667:7;18706:6;18693:11;;:20;;;;:::i;:::-;18686:28;;18621:101;:::o;19045:846::-;19099:7;19118:18;19139:35;19152:14;;19167:6;19139:12;:35::i;:::-;19118:56;;19202:6;19185:14;:23;;;;19219:12;19234:32;19255:10;19234:20;:32::i;:::-;19219:47;;19350:1;19345:4;:6;19342:369;;;19389:4;19377:9;;:16;;;;;;;;;;;;;;;;;;19408:11;19422:52;19444:29;19462:10;19444:17;:29::i;:::-;19422:21;:52::i;:::-;19408:66;;19503:1;19496:4;:8;;;;:::i;:::-;19489:15;;19527:57;19549:29;19567:10;19549:17;:29::i;:::-;19579:4;19527:21;:57::i;:::-;19519:65;;19599:12;19614:24;19633:4;19614:18;:24::i;:::-;19599:39;;19667:5;19660:4;:12;;;;:::i;:::-;19653:19;;19695:4;19687:12;;;;;;;;19342:369;19721:11;19735:20;19748:4;19753:1;19735:12;:20::i;:::-;19721:34;;19766:15;19784:28;19797:10;19808:3;19784:12;:28::i;:::-;19766:46;;19849:9;;19843:2;:15;;;;:::i;:::-;19833:7;:25;;;;:::i;:::-;19823:35;;19876:7;19869:14;;;;;;19045:846;;;;:::o;9043:149::-;9127:18;9140:4;9127:12;:18::i;:::-;7835:30;7846:4;7852:12;:10;:12::i;:::-;7835:10;:30::i;:::-;9158:26:::1;9170:4;9176:7;9158:11;:26::i;:::-;9043:149:::0;;;:::o;19938:846::-;19992:7;20011:18;20032:35;20045:14;;20060:6;20032:12;:35::i;:::-;20011:56;;20095:6;20078:14;:23;;;;20112:12;20127:32;20148:10;20127:20;:32::i;:::-;20112:47;;20243:1;20238:4;:6;20235:369;;;20282:4;20270:9;;:16;;;;;;;;;;;;;;;;;;20301:11;20315:52;20337:29;20355:10;20337:17;:29::i;:::-;20315:21;:52::i;:::-;20301:66;;20396:1;20389:4;:8;;;;:::i;:::-;20382:15;;20420:57;20442:29;20460:10;20442:17;:29::i;:::-;20472:4;20420:21;:57::i;:::-;20412:65;;20492:12;20507:24;20526:4;20507:18;:24::i;:::-;20492:39;;20560:5;20553:4;:12;;;;:::i;:::-;20546:19;;20588:4;20580:12;;;;;;;;20235:369;20614:11;20628:20;20641:4;20646:1;20628:12;:20::i;:::-;20614:34;;20659:15;20677:28;20690:10;20701:3;20677:12;:28::i;:::-;20659:46;;20742:9;;20736:2;:15;;;;:::i;:::-;20726:7;:25;;;;:::i;:::-;20716:35;;20769:7;20762:14;;;;;;19938:846;;;;:::o;18151:86::-;18194:7;18220:8;;18213:16;;18151:86;:::o;3642:151::-;3731:7;3758:11;:18;3770:5;3758:18;;;;;;;;;;;;;;;:27;3777:7;3758:27;;;;;;;;;;;;;;;;3751:34;;3642:151;;;;:::o;18904:94::-;18951:7;18977:12;;18970:20;;18904:94;:::o;18282:111::-;18333:7;18377:6;18359:16;;:25;;;;:::i;:::-;18352:33;;18282:111;:::o;2293:157::-;2378:4;2417:25;2402:40;;;:11;:40;;;;2395:47;;2293:157;;;:::o;2010:98::-;2063:7;2090:10;2083:17;;2010:98;:::o;6821:380::-;6974:1;6957:19;;:5;:19;;;;6949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7055:1;7036:21;;:7;:21;;;;7028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7139:6;7109:11;:18;7121:5;7109:18;;;;;;;;;;;;;;;:27;7128:7;7109:27;;;;;;;;;;;;;;;:36;;;;7177:7;7161:32;;7170:5;7161:32;;;7186:6;7161:32;;;;;;:::i;:::-;;;;;;;;6821:380;;;:::o;13554:136::-;13612:7;13639:43;13643:1;13646;13639:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;13632:50;;13554:136;;;;:::o;14150:132::-;14208:7;14235:39;14239:1;14242;14235:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;14228:46;;14150:132;;;;:::o;6234:579::-;6337:1;6318:21;;:7;:21;;;;6310:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6390:49;6411:7;6428:1;6432:6;6390:20;:49::i;:::-;6452:22;6477:9;:18;6487:7;6477:18;;;;;;;;;;;;;;;;6452:43;;6532:6;6514:14;:24;;6506:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6643:6;6626:14;:23;6605:9;:18;6615:7;6605:18;;;;;;;;;;;;;;;:44;;;;6683:6;6667:12;;:22;;;;;;;:::i;:::-;;;;;;;;6733:1;6707:37;;6716:7;6707:37;;;6737:6;6707:37;;;;;;:::i;:::-;;;;;;;;6757:48;6777:7;6794:1;6798:6;6757:19;:48::i;:::-;6299:514;6234:579;;:::o;13367:181::-;13425:7;13445:9;13461:1;13457;:5;;;;:::i;:::-;13445:17;;13486:1;13481;:6;;13473:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;13539:1;13532:8;;;13367:181;;;;:::o;5098:721::-;5256:1;5238:20;;:6;:20;;;;5230:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5340:1;5319:23;;:9;:23;;;;5311:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5395:47;5416:6;5424:9;5435:6;5395:20;:47::i;:::-;5455:21;5479:9;:17;5489:6;5479:17;;;;;;;;;;;;;;;;5455:41;;5532:6;5515:13;:23;;5507:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5645:6;5629:13;:22;5609:9;:17;5619:6;5609:17;;;;;;;;;;;;;;;:42;;;;5693:6;5669:9;:20;5679:9;5669:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5734:9;5717:35;;5726:6;5717:35;;;5745:6;5717:35;;;;;;:::i;:::-;;;;;;;;5765:46;5785:6;5793:9;5804:6;5765:19;:46::i;:::-;5219:600;5098:721;;;:::o;8252:497::-;8333:22;8341:4;8347:7;8333;:22::i;:::-;8328:414;;8521:41;8549:7;8521:41;;8559:2;8521:19;:41::i;:::-;8635:38;8663:4;8655:13;;8670:2;8635:19;:38::i;:::-;8426:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8372:358;;;;;;;;;;;:::i;:::-;;;;;;;;8328:414;8252:497;;:::o;9805:229::-;9880:22;9888:4;9894:7;9880;:22::i;:::-;9875:152;;9951:4;9919:6;:12;9926:4;9919:12;;;;;;;;;;;:20;;:29;9940:7;9919:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;10002:12;:10;:12::i;:::-;9975:40;;9993:7;9975:40;;9987:4;9975:40;;;;;;;;;;9875:152;9805:229;;:::o;10042:230::-;10117:22;10125:4;10131:7;10117;:22::i;:::-;10113:152;;;10188:5;10156:6;:12;10163:4;10156:12;;;;;;;;;;;:20;;:29;10177:7;10156:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;10240:12;:10;:12::i;:::-;10213:40;;10231:7;10213:40;;10225:4;10213:40;;;;;;;;;;10113:152;10042:230;;:::o;5827:399::-;5930:1;5911:21;;:7;:21;;;;5903:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;5981:49;6010:1;6014:7;6023:6;5981:20;:49::i;:::-;6059:6;6043:12;;:22;;;;;;;:::i;:::-;;;;;;;;6098:6;6076:9;:18;6086:7;6076:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;6141:7;6120:37;;6137:1;6120:37;;;6150:6;6120:37;;;;;;:::i;:::-;;;;;;;;6170:48;6198:1;6202:7;6211:6;6170:19;:48::i;:::-;5827:399;;:::o;1423:300:0:-;1469:14;1352:19;1309:4;1685:7;1690:1;1685:4;:7::i;:::-;:16;1684:28;;;;;:::i;:::-;;;1675:37;;1423:300;;;:::o;13008:301:1:-;13064:6;13208:16;13191:5;:34;;13183:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;13295:5;13281:20;;13008:301;;;:::o;4543:601:0:-;4589:13;4719:22;4715:1;:26;4711:60;;;4762:1;4755:8;;;;4711:60;4870:21;4865:1;:26;4861:76;;4927:1;4911:18;;;;;;;;;;;:::i;:::-;;;;;;;;4861:76;5028:25;1128:19;5056:1;:10;5028:38;;5086:47;1183:4;1228;5092:18;:31;5091:41;;;;;:::i;:::-;;;5086:4;:47::i;:::-;5077:56;;5007:134;4543:601;;;;:::o;14431:1026::-;14487:13;1012:79;14515:1;:16;:36;;;;1012:79;14535:1;:16;14515:36;14511:87;;;14571:19;;;;;;;;;;;;;;14511:87;14658:10;14675;14724:1;14720;:5;:33;;14751:1;14720:33;;;14738:1;14736:3;;14720:33;14715:38;;14773:1;14769;:5;:33;;14800:1;14769:33;;;14787:1;14785:3;;14769:33;14764:38;;14911:12;14926:30;14933:2;1183:4;14953:2;14926:6;:30::i;:::-;14911:45;;893:77;14967:4;:27;14963:77;;;15027:4;15014:18;;;;;;;;;;;:::i;:::-;;;;;;;;14963:77;15082:10;15099;15158:1;15155;15151:9;15148:1;15144:17;15138:23;;15191:1;15188;15184:9;15181:1;15177:17;15171:23;;15416:1;15410:2;15405;:7;:12;:44;;15444:4;15405:44;;;15429:4;15420:14;;;:::i;:::-;15405:44;15396:53;;14502:955;;;;;14431:1026;;;;:::o;11724:171:1:-;11780:7;11817:1;11808:5;:10;;11800:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11881:5;11866:21;;11724:171;;;:::o;13894:250::-;13952:7;13981:1;13976;:6;13972:47;;;14006:1;13999:8;;;;13972:47;14031:9;14047:1;14043;:5;;;;:::i;:::-;14031:17;;14076:1;14071;14067;:5;;;;:::i;:::-;:10;14059:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;14135:1;14128:8;;;13894:250;;;;;:::o;13696:192::-;13782:7;13815:1;13810;:6;;13818:12;13802:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13842:9;13858:1;13854;:5;;;;:::i;:::-;13842:17;;13879:1;13872:8;;;13696:192;;;;;:::o;14288:189::-;14374:7;14406:1;14402;:5;14409:12;14394:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14433:9;14449:1;14445;:5;;;;:::i;:::-;14433:17;;14468:1;14461:8;;;14288:189;;;;;:::o;7209:125::-;;;;:::o;7342:124::-;;;;:::o;15799:451::-;15874:13;15900:19;15945:1;15936:6;15932:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;15922:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15900:47;;15958:15;:6;15965:1;15958:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;15984;:6;15991:1;15984:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;16015:9;16040:1;16031:6;16027:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;16015:26;;16010:135;16047:1;16043;:5;16010:135;;;16082:12;16103:3;16095:5;:11;16082:25;;;;;;;:::i;:::-;;;;;16070:6;16077:1;16070:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;16132:1;16122:11;;;;;16050:3;;;;:::i;:::-;;;16010:135;;;;16172:1;16163:5;:10;16155:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;16235:6;16221:21;;;15799:451;;;;:::o;1727:1626:0:-;1775:14;1809:1;1804;:6;1800:58;;1848:1;1830:20;;;;;;;;;;;:::i;:::-;;;;;;;;1800:58;1942:12;1309:4;1969:1;:11;1965:269;;2004:1;1997:8;;1965:269;;;2214:1;2175:37;2171:45;2166:50;;1965:269;2357:9;2369:39;1309:4;2396:1;:10;;;;;:::i;:::-;;;2369:18;:39::i;:::-;2357:51;;1309:4;2627:1;2619:19;2610:28;;2679:9;2696:1;2691;:6;;2679:18;;1309:4;2757:1;:11;2753:56;;;2797:4;2788:6;:13;2781:20;;;;;;;2753:56;2984:13;1228:4;2984:35;;2979:339;3029:1;3021:5;:9;2979:339;;;1309:4;3065:1;3061;:5;3060:16;;;;;:::i;:::-;;;3056:20;;1309:4;3144:1;:10;3139:1;:15;3135:176;;3229:5;3219:15;;;;3298:1;3292:7;;;;;3135:176;3042:1;3032:11;;;;;2979:339;;;;3338:4;3328:14;;;;1868:1482;;;1727:1626;;;;:::o;5300:966::-;5347:13;5420:1;5416;:5;5412:851;;;5542:22;5538:1;:26;5534:67;;;5588:1;5581:8;;;;5534:67;5743:9;5750:1;5748:3;;5743:4;:9::i;:::-;5736:4;:16;;;;;:::i;:::-;;;5727:25;;5412:851;;;5887:6;5882:1;:11;5878:62;;5930:1;5913:19;;;;;;;;;;;:::i;:::-;;;;;;;;5878:62;6041:15;1183:4;6074:2;6068:1;6060:16;;6059:35;;;;;:::i;:::-;;;6041:53;;6229:14;6235:7;6229:5;:14::i;:::-;6213:31;;5952:304;5412:851;5300:966;;;;:::o;15652:3839::-;15734:14;16035:13;16100;16211:1;16207:6;16204:1;16201;16194:20;16240:1;16237;16233:9;16224:18;;16288:5;16284:2;16281:13;16273:5;16269:2;16265:14;16261:34;16252:43;;16173:129;16379:1;16370:5;:10;16366:115;;;16431:11;16423:5;:19;;;;;:::i;:::-;;;16414:28;;16460:13;;;;16366:115;16583:11;16574:5;:20;16570:87;;16630:5;16637:11;16614:35;;;;;;;;;;;;:::i;:::-;;;;;;;;16570:87;16879:17;16995:11;16992:1;16989;16982:25;16969:38;;17110:5;17099:9;17096:20;17089:5;17085:32;17076:41;;17147:9;17140:5;17136:21;17127:30;;17468:15;17516:1;17502:11;17501:12;:16;17486:11;:32;17468:50;;17630:7;17617:11;17613:25;17598:40;;17723:7;17716:5;17712:19;17703:28;;17896:1;17886:7;17876;17873:1;17869:15;17865:29;17861:37;17850:48;;17999:7;17991:5;:15;17982:24;;;;18329:15;18367:1;18352:11;18348:1;:15;18347:21;18329:39;;18618:7;18604:11;:21;18600:1;:25;18589:36;;;;18688:7;18674:11;:21;18670:1;:25;18659:36;;;;18759:7;18745:11;:21;18741:1;:25;18730:36;;;;18830:7;18816:11;:21;18812:1;:25;18801:36;;;;18901:7;18887:11;:21;18883:1;:25;18872:36;;;;18973:7;18959:11;:21;18955:1;:25;18944:36;;;;19437:7;19429:5;:15;19420:24;;19459:13;;;;;15652:3839;;;;;;:::o;3728:659::-;3790:11;3821:8;3816:1;:13;3812:68;;3848:3;3842:9;;;;;3869:3;3862:10;;;;;:::i;:::-;;;3812:68;3895:7;3890:1;:12;3886:65;;3921:2;3915:8;;;;;3941:2;3934:9;;;;;:::i;:::-;;;3886:65;3966:7;3961:1;:12;3957:65;;3992:2;3986:8;;;;;4012:2;4005:9;;;;;:::i;:::-;;;3957:65;4037:7;4032:1;:12;4028:65;;4063:2;4057:8;;;;;4083:2;4076:9;;;;;:::i;:::-;;;4028:65;4108:6;4103:1;:11;4099:62;;4133:1;4127:7;;;;;4152:1;4145:8;;;;;:::i;:::-;;;4099:62;4176:6;4171:1;:11;4167:62;;4201:1;4195:7;;;;;4220:1;4213:8;;;;;:::i;:::-;;;4167:62;4244:6;4239:1;:11;4235:62;;4269:1;4263:7;;;;;4288:1;4281:8;;;;;:::i;:::-;;;4235:62;4312:6;4307:1;:11;4303:81;;4375:1;4368:8;;;;;:::i;:::-;;;4303:81;3728:659;;;:::o;6620:7805::-;6669:14;6789:50;6780:59;;7096:1;7075:18;7071:1;:22;:26;7067:104;;;7157:2;7133:19;7124:6;:28;7123:36;;7114:45;;7067:104;7210:1;7189:18;7185:1;:22;:26;7181:104;;;7271:2;7247:19;7238:6;:28;7237:36;;7228:45;;7181:104;7324:1;7303:18;7299:1;:22;:26;7295:104;;;7385:2;7361:19;7352:6;:28;7351:36;;7342:45;;7295:104;7438:1;7417:18;7413:1;:22;:26;7409:104;;;7499:2;7475:19;7466:6;:28;7465:36;;7456:45;;7409:104;7551:1;7531:17;7527:1;:21;:25;7523:103;;;7612:2;7588:19;7579:6;:28;7578:36;;7569:45;;7523:103;7664:1;7644:17;7640:1;:21;:25;7636:103;;;7725:2;7701:19;7692:6;:28;7691:36;;7682:45;;7636:103;7777:1;7757:17;7753:1;:21;:25;7749:103;;;7838:2;7814:19;7805:6;:28;7804:36;;7795:45;;7749:103;7890:1;7870:17;7866:1;:21;:25;7862:103;;;7951:2;7927:19;7918:6;:28;7917:36;;7908:45;;7862:103;8002:1;7983:16;7979:1;:20;:24;7975:102;;;8063:2;8039:19;8030:6;:28;8029:36;;8020:45;;7975:102;8114:1;8095:16;8091:1;:20;:24;8087:102;;;8175:2;8151:19;8142:6;:28;8141:36;;8132:45;;8087:102;8226:1;8207:16;8203:1;:20;:24;8199:102;;;8287:2;8263:19;8254:6;:28;8253:36;;8244:45;;8199:102;8338:1;8319:16;8315:1;:20;:24;8311:102;;;8399:2;8375:19;8366:6;:28;8365:36;;8356:45;;8311:102;8449:1;8431:15;8427:1;:19;:23;8423:101;;;8510:2;8486:19;8477:6;:28;8476:36;;8467:45;;8423:101;8560:1;8542:15;8538:1;:19;:23;8534:101;;;8621:2;8597:19;8588:6;:28;8587:36;;8578:45;;8534:101;8671:1;8653:15;8649:1;:19;:23;8645:101;;;8732:2;8708:19;8699:6;:28;8698:36;;8689:45;;8645:101;8782:1;8764:15;8760:1;:19;:23;8756:101;;;8843:2;8819:19;8810:6;:28;8809:36;;8800:45;;8756:101;8892:1;8875:14;8871:1;:18;:22;8867:100;;;8953:2;8929:19;8920:6;:28;8919:36;;8910:45;;8867:100;9002:1;8985:14;8981:1;:18;:22;8977:100;;;9063:2;9039:19;9030:6;:28;9029:36;;9020:45;;8977:100;9112:1;9095:14;9091:1;:18;:22;9087:100;;;9173:2;9149:19;9140:6;:28;9139:36;;9130:45;;9087:100;9222:1;9205:14;9201:1;:18;:22;9197:100;;;9283:2;9259:19;9250:6;:28;9249:36;;9240:45;;9197:100;9331:1;9315:13;9311:1;:17;:21;9307:99;;;9392:2;9368:19;9359:6;:28;9358:36;;9349:45;;9307:99;9440:1;9424:13;9420:1;:17;:21;9416:99;;;9501:2;9477:19;9468:6;:28;9467:36;;9458:45;;9416:99;9549:1;9533:13;9529:1;:17;:21;9525:99;;;9610:2;9586:19;9577:6;:28;9576:36;;9567:45;;9525:99;9658:1;9642:13;9638:1;:17;:21;9634:99;;;9719:2;9695:19;9686:6;:28;9685:36;;9676:45;;9634:99;9766:1;9751:12;9747:1;:16;:20;9743:98;;;9827:2;9803:19;9794:6;:28;9793:36;;9784:45;;9743:98;9874:1;9859:12;9855:1;:16;:20;9851:98;;;9935:2;9911:19;9902:6;:28;9901:36;;9892:45;;9851:98;9982:1;9967:12;9963:1;:16;:20;9959:98;;;10043:2;10019:19;10010:6;:28;10009:36;;10000:45;;9959:98;10090:1;10075:12;10071:1;:16;:20;10067:98;;;10151:2;10127:19;10118:6;:28;10117:36;;10108:45;;10067:98;10197:1;10183:11;10179:1;:15;:19;10175:97;;;10258:2;10234:19;10225:6;:28;10224:36;;10215:45;;10175:97;10304:1;10290:11;10286:1;:15;:19;10282:97;;;10365:2;10341:19;10332:6;:28;10331:36;;10322:45;;10282:97;10411:1;10397:11;10393:1;:15;:19;10389:97;;;10472:2;10448:19;10439:6;:28;10438:36;;10429:45;;10389:97;10518:1;10504:11;10500:1;:15;:19;10496:97;;;10579:2;10555:19;10546:6;:28;10545:36;;10536:45;;10496:97;10624:1;10611:10;10607:1;:14;:18;10603:96;;;10685:2;10661:19;10652:6;:28;10651:36;;10642:45;;10603:96;10730:1;10717:10;10713:1;:14;:18;10709:96;;;10791:2;10767:19;10758:6;:28;10757:36;;10748:45;;10709:96;10836:1;10823:10;10819:1;:14;:18;10815:96;;;10897:2;10873:19;10864:6;:28;10863:36;;10854:45;;10815:96;10942:1;10929:10;10925:1;:14;:18;10921:96;;;11003:2;10979:19;10970:6;:28;10969:36;;10960:45;;10921:96;11047:1;11035:9;11031:1;:13;:17;11027:95;;;11108:2;11084:19;11075:6;:28;11074:36;;11065:45;;11027:95;11152:1;11140:9;11136:1;:13;:17;11132:95;;;11213:2;11189:19;11180:6;:28;11179:36;;11170:45;;11132:95;11257:1;11245:9;11241:1;:13;:17;11237:95;;;11318:2;11294:19;11285:6;:28;11284:36;;11275:45;;11237:95;11362:1;11350:9;11346:1;:13;:17;11342:95;;;11423:2;11399:19;11390:6;:28;11389:36;;11380:45;;11342:95;11466:1;11455:8;11451:1;:12;:16;11447:94;;;11527:2;11503:19;11494:6;:28;11493:36;;11484:45;;11447:94;11570:1;11559:8;11555:1;:12;:16;11551:94;;;11631:2;11607:19;11598:6;:28;11597:36;;11588:45;;11551:94;11674:1;11663:8;11659:1;:12;:16;11655:94;;;11735:2;11711:19;11702:6;:28;11701:36;;11692:45;;11655:94;11778:1;11767:8;11763:1;:12;:16;11759:94;;;11839:2;11815:19;11806:6;:28;11805:36;;11796:45;;11759:94;11881:1;11871:7;11867:1;:11;:15;11863:93;;;11942:2;11918:19;11909:6;:28;11908:36;;11899:45;;11863:93;11984:1;11974:7;11970:1;:11;:15;11966:93;;;12045:2;12021:19;12012:6;:28;12011:36;;12002:45;;11966:93;12087:1;12077:7;12073:1;:11;:15;12069:93;;;12148:2;12124:19;12115:6;:28;12114:36;;12105:45;;12069:93;12190:1;12180:7;12176:1;:11;:15;12172:93;;;12251:2;12227:19;12218:6;:28;12217:36;;12208:45;;12172:93;12292:1;12283:6;12279:1;:10;:14;12275:92;;;12353:2;12329:19;12320:6;:28;12319:36;;12310:45;;12275:92;12394:1;12385:6;12381:1;:10;:14;12377:92;;;12455:2;12431:19;12422:6;:28;12421:36;;12412:45;;12377:92;12496:1;12487:6;12483:1;:10;:14;12479:92;;;12557:2;12533:19;12524:6;:28;12523:36;;12514:45;;12479:92;12598:1;12589:6;12585:1;:10;:14;12581:92;;;12659:2;12635:19;12626:6;:28;12625:36;;12616:45;;12581:92;12699:1;12691:5;12687:1;:9;:13;12683:91;;;12760:2;12736:19;12727:6;:28;12726:36;;12717:45;;12683:91;12800:1;12792:5;12788:1;:9;:13;12784:91;;;12861:2;12837:19;12828:6;:28;12827:36;;12818:45;;12784:91;12901:1;12893:5;12889:1;:9;:13;12885:91;;;12962:2;12938:19;12929:6;:28;12928:36;;12919:45;;12885:91;13002:1;12994:5;12990:1;:9;:13;12986:91;;;13063:2;13039:19;13030:6;:28;13029:36;;13020:45;;12986:91;13102:1;13095:4;13091:1;:8;:12;13087:90;;;13163:2;13139:19;13130:6;:28;13129:36;;13120:45;;13087:90;13202:1;13195:4;13191:1;:8;:12;13187:90;;;13263:2;13239:19;13230:6;:28;13229:36;;13220:45;;13187:90;13302:1;13295:4;13291:1;:8;:12;13287:90;;;13363:2;13339:19;13330:6;:28;13329:36;;13320:45;;13287:90;13402:1;13395:4;13391:1;:8;:12;13387:90;;;13463:2;13439:19;13430:6;:28;13429:36;;13420:45;;13387:90;13501:1;13495:3;13491:1;:7;:11;13487:89;;;13562:2;13538:19;13529:6;:28;13528:36;;13519:45;;13487:89;13600:1;13594:3;13590:1;:7;:11;13586:89;;;13661:2;13637:19;13628:6;:28;13627:36;;13618:45;;13586:89;13699:1;13693:3;13689:1;:7;:11;13685:89;;;13760:2;13736:19;13727:6;:28;13726:36;;13717:45;;13685:89;13798:1;13792:3;13788:1;:7;:11;13784:89;;;13859:2;13835:19;13826:6;:28;13825:36;;13816:45;;13784:89;1309:4;14347:16;;;;14402:2;14397:1;:7;;14390:3;:15;14378:28;;;;;6620:7805;;;:::o;7:139:2:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;152:139;;;;:::o;297:137::-;342:5;380:6;367:20;358:29;;396:32;422:5;396:32;:::i;:::-;297:137;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:329::-;644:6;693:2;681:9;672:7;668:23;664:32;661:119;;;699:79;;:::i;:::-;661:119;819:1;844:53;889:7;880:6;869:9;865:22;844:53;:::i;:::-;834:63;;790:117;585:329;;;;:::o;920:474::-;988:6;996;1045:2;1033:9;1024:7;1020:23;1016:32;1013:119;;;1051:79;;:::i;:::-;1013:119;1171:1;1196:53;1241:7;1232:6;1221:9;1217:22;1196:53;:::i;:::-;1186:63;;1142:117;1298:2;1324:53;1369:7;1360:6;1349:9;1345:22;1324:53;:::i;:::-;1314:63;;1269:118;920:474;;;;;:::o;1400:619::-;1477:6;1485;1493;1542:2;1530:9;1521:7;1517:23;1513:32;1510:119;;;1548:79;;:::i;:::-;1510:119;1668:1;1693:53;1738:7;1729:6;1718:9;1714:22;1693:53;:::i;:::-;1683:63;;1639:117;1795:2;1821:53;1866:7;1857:6;1846:9;1842:22;1821:53;:::i;:::-;1811:63;;1766:118;1923:2;1949:53;1994:7;1985:6;1974:9;1970:22;1949:53;:::i;:::-;1939:63;;1894:118;1400:619;;;;;:::o;2025:474::-;2093:6;2101;2150:2;2138:9;2129:7;2125:23;2121:32;2118:119;;;2156:79;;:::i;:::-;2118:119;2276:1;2301:53;2346:7;2337:6;2326:9;2322:22;2301:53;:::i;:::-;2291:63;;2247:117;2403:2;2429:53;2474:7;2465:6;2454:9;2450:22;2429:53;:::i;:::-;2419:63;;2374:118;2025:474;;;;;:::o;2505:329::-;2564:6;2613:2;2601:9;2592:7;2588:23;2584:32;2581:119;;;2619:79;;:::i;:::-;2581:119;2739:1;2764:53;2809:7;2800:6;2789:9;2785:22;2764:53;:::i;:::-;2754:63;;2710:117;2505:329;;;;:::o;2840:474::-;2908:6;2916;2965:2;2953:9;2944:7;2940:23;2936:32;2933:119;;;2971:79;;:::i;:::-;2933:119;3091:1;3116:53;3161:7;3152:6;3141:9;3137:22;3116:53;:::i;:::-;3106:63;;3062:117;3218:2;3244:53;3289:7;3280:6;3269:9;3265:22;3244:53;:::i;:::-;3234:63;;3189:118;2840:474;;;;;:::o;3320:327::-;3378:6;3427:2;3415:9;3406:7;3402:23;3398:32;3395:119;;;3433:79;;:::i;:::-;3395:119;3553:1;3578:52;3622:7;3613:6;3602:9;3598:22;3578:52;:::i;:::-;3568:62;;3524:116;3320:327;;;;:::o;3653:329::-;3712:6;3761:2;3749:9;3740:7;3736:23;3732:32;3729:119;;;3767:79;;:::i;:::-;3729:119;3887:1;3912:53;3957:7;3948:6;3937:9;3933:22;3912:53;:::i;:::-;3902:63;;3858:117;3653:329;;;;:::o;3988:109::-;4069:21;4084:5;4069:21;:::i;:::-;4064:3;4057:34;3988:109;;:::o;4103:118::-;4190:24;4208:5;4190:24;:::i;:::-;4185:3;4178:37;4103:118;;:::o;4227:115::-;4312:23;4329:5;4312:23;:::i;:::-;4307:3;4300:36;4227:115;;:::o;4348:364::-;4436:3;4464:39;4497:5;4464:39;:::i;:::-;4519:71;4583:6;4578:3;4519:71;:::i;:::-;4512:78;;4599:52;4644:6;4639:3;4632:4;4625:5;4621:16;4599:52;:::i;:::-;4676:29;4698:6;4676:29;:::i;:::-;4671:3;4667:39;4660:46;;4440:272;4348:364;;;;:::o;4718:377::-;4824:3;4852:39;4885:5;4852:39;:::i;:::-;4907:89;4989:6;4984:3;4907:89;:::i;:::-;4900:96;;5005:52;5050:6;5045:3;5038:4;5031:5;5027:16;5005:52;:::i;:::-;5082:6;5077:3;5073:16;5066:23;;4828:267;4718:377;;;;:::o;5101:366::-;5243:3;5264:67;5328:2;5323:3;5264:67;:::i;:::-;5257:74;;5340:93;5429:3;5340:93;:::i;:::-;5458:2;5453:3;5449:12;5442:19;;5101:366;;;:::o;5473:::-;5615:3;5636:67;5700:2;5695:3;5636:67;:::i;:::-;5629:74;;5712:93;5801:3;5712:93;:::i;:::-;5830:2;5825:3;5821:12;5814:19;;5473:366;;;:::o;5845:::-;5987:3;6008:67;6072:2;6067:3;6008:67;:::i;:::-;6001:74;;6084:93;6173:3;6084:93;:::i;:::-;6202:2;6197:3;6193:12;6186:19;;5845:366;;;:::o;6217:::-;6359:3;6380:67;6444:2;6439:3;6380:67;:::i;:::-;6373:74;;6456:93;6545:3;6456:93;:::i;:::-;6574:2;6569:3;6565:12;6558:19;;6217:366;;;:::o;6589:::-;6731:3;6752:67;6816:2;6811:3;6752:67;:::i;:::-;6745:74;;6828:93;6917:3;6828:93;:::i;:::-;6946:2;6941:3;6937:12;6930:19;;6589:366;;;:::o;6961:::-;7103:3;7124:67;7188:2;7183:3;7124:67;:::i;:::-;7117:74;;7200:93;7289:3;7200:93;:::i;:::-;7318:2;7313:3;7309:12;7302:19;;6961:366;;;:::o;7333:::-;7475:3;7496:67;7560:2;7555:3;7496:67;:::i;:::-;7489:74;;7572:93;7661:3;7572:93;:::i;:::-;7690:2;7685:3;7681:12;7674:19;;7333:366;;;:::o;7705:::-;7847:3;7868:67;7932:2;7927:3;7868:67;:::i;:::-;7861:74;;7944:93;8033:3;7944:93;:::i;:::-;8062:2;8057:3;8053:12;8046:19;;7705:366;;;:::o;8077:::-;8219:3;8240:67;8304:2;8299:3;8240:67;:::i;:::-;8233:74;;8316:93;8405:3;8316:93;:::i;:::-;8434:2;8429:3;8425:12;8418:19;;8077:366;;;:::o;8449:::-;8591:3;8612:67;8676:2;8671:3;8612:67;:::i;:::-;8605:74;;8688:93;8777:3;8688:93;:::i;:::-;8806:2;8801:3;8797:12;8790:19;;8449:366;;;:::o;8821:::-;8963:3;8984:67;9048:2;9043:3;8984:67;:::i;:::-;8977:74;;9060:93;9149:3;9060:93;:::i;:::-;9178:2;9173:3;9169:12;9162:19;;8821:366;;;:::o;9193:::-;9335:3;9356:67;9420:2;9415:3;9356:67;:::i;:::-;9349:74;;9432:93;9521:3;9432:93;:::i;:::-;9550:2;9545:3;9541:12;9534:19;;9193:366;;;:::o;9565:::-;9707:3;9728:67;9792:2;9787:3;9728:67;:::i;:::-;9721:74;;9804:93;9893:3;9804:93;:::i;:::-;9922:2;9917:3;9913:12;9906:19;;9565:366;;;:::o;9937:402::-;10097:3;10118:85;10200:2;10195:3;10118:85;:::i;:::-;10111:92;;10212:93;10301:3;10212:93;:::i;:::-;10330:2;10325:3;10321:12;10314:19;;9937:402;;;:::o;10345:366::-;10487:3;10508:67;10572:2;10567:3;10508:67;:::i;:::-;10501:74;;10584:93;10673:3;10584:93;:::i;:::-;10702:2;10697:3;10693:12;10686:19;;10345:366;;;:::o;10717:402::-;10877:3;10898:85;10980:2;10975:3;10898:85;:::i;:::-;10891:92;;10992:93;11081:3;10992:93;:::i;:::-;11110:2;11105:3;11101:12;11094:19;;10717:402;;;:::o;11125:366::-;11267:3;11288:67;11352:2;11347:3;11288:67;:::i;:::-;11281:74;;11364:93;11453:3;11364:93;:::i;:::-;11482:2;11477:3;11473:12;11466:19;;11125:366;;;:::o;11497:::-;11639:3;11660:67;11724:2;11719:3;11660:67;:::i;:::-;11653:74;;11736:93;11825:3;11736:93;:::i;:::-;11854:2;11849:3;11845:12;11838:19;;11497:366;;;:::o;11869:118::-;11956:24;11974:5;11956:24;:::i;:::-;11951:3;11944:37;11869:118;;:::o;11993:112::-;12076:22;12092:5;12076:22;:::i;:::-;12071:3;12064:35;11993:112;;:::o;12111:967::-;12493:3;12515:148;12659:3;12515:148;:::i;:::-;12508:155;;12680:95;12771:3;12762:6;12680:95;:::i;:::-;12673:102;;12792:148;12936:3;12792:148;:::i;:::-;12785:155;;12957:95;13048:3;13039:6;12957:95;:::i;:::-;12950:102;;13069:3;13062:10;;12111:967;;;;;:::o;13084:210::-;13171:4;13209:2;13198:9;13194:18;13186:26;;13222:65;13284:1;13273:9;13269:17;13260:6;13222:65;:::i;:::-;13084:210;;;;:::o;13300:222::-;13393:4;13431:2;13420:9;13416:18;13408:26;;13444:71;13512:1;13501:9;13497:17;13488:6;13444:71;:::i;:::-;13300:222;;;;:::o;13528:218::-;13619:4;13657:2;13646:9;13642:18;13634:26;;13670:69;13736:1;13725:9;13721:17;13712:6;13670:69;:::i;:::-;13528:218;;;;:::o;13752:313::-;13865:4;13903:2;13892:9;13888:18;13880:26;;13952:9;13946:4;13942:20;13938:1;13927:9;13923:17;13916:47;13980:78;14053:4;14044:6;13980:78;:::i;:::-;13972:86;;13752:313;;;;:::o;14071:419::-;14237:4;14275:2;14264:9;14260:18;14252:26;;14324:9;14318:4;14314:20;14310:1;14299:9;14295:17;14288:47;14352:131;14478:4;14352:131;:::i;:::-;14344:139;;14071:419;;;:::o;14496:::-;14662:4;14700:2;14689:9;14685:18;14677:26;;14749:9;14743:4;14739:20;14735:1;14724:9;14720:17;14713:47;14777:131;14903:4;14777:131;:::i;:::-;14769:139;;14496:419;;;:::o;14921:::-;15087:4;15125:2;15114:9;15110:18;15102:26;;15174:9;15168:4;15164:20;15160:1;15149:9;15145:17;15138:47;15202:131;15328:4;15202:131;:::i;:::-;15194:139;;14921:419;;;:::o;15346:::-;15512:4;15550:2;15539:9;15535:18;15527:26;;15599:9;15593:4;15589:20;15585:1;15574:9;15570:17;15563:47;15627:131;15753:4;15627:131;:::i;:::-;15619:139;;15346:419;;;:::o;15771:::-;15937:4;15975:2;15964:9;15960:18;15952:26;;16024:9;16018:4;16014:20;16010:1;15999:9;15995:17;15988:47;16052:131;16178:4;16052:131;:::i;:::-;16044:139;;15771:419;;;:::o;16196:::-;16362:4;16400:2;16389:9;16385:18;16377:26;;16449:9;16443:4;16439:20;16435:1;16424:9;16420:17;16413:47;16477:131;16603:4;16477:131;:::i;:::-;16469:139;;16196:419;;;:::o;16621:::-;16787:4;16825:2;16814:9;16810:18;16802:26;;16874:9;16868:4;16864:20;16860:1;16849:9;16845:17;16838:47;16902:131;17028:4;16902:131;:::i;:::-;16894:139;;16621:419;;;:::o;17046:::-;17212:4;17250:2;17239:9;17235:18;17227:26;;17299:9;17293:4;17289:20;17285:1;17274:9;17270:17;17263:47;17327:131;17453:4;17327:131;:::i;:::-;17319:139;;17046:419;;;:::o;17471:::-;17637:4;17675:2;17664:9;17660:18;17652:26;;17724:9;17718:4;17714:20;17710:1;17699:9;17695:17;17688:47;17752:131;17878:4;17752:131;:::i;:::-;17744:139;;17471:419;;;:::o;17896:::-;18062:4;18100:2;18089:9;18085:18;18077:26;;18149:9;18143:4;18139:20;18135:1;18124:9;18120:17;18113:47;18177:131;18303:4;18177:131;:::i;:::-;18169:139;;17896:419;;;:::o;18321:::-;18487:4;18525:2;18514:9;18510:18;18502:26;;18574:9;18568:4;18564:20;18560:1;18549:9;18545:17;18538:47;18602:131;18728:4;18602:131;:::i;:::-;18594:139;;18321:419;;;:::o;18746:::-;18912:4;18950:2;18939:9;18935:18;18927:26;;18999:9;18993:4;18989:20;18985:1;18974:9;18970:17;18963:47;19027:131;19153:4;19027:131;:::i;:::-;19019:139;;18746:419;;;:::o;19171:::-;19337:4;19375:2;19364:9;19360:18;19352:26;;19424:9;19418:4;19414:20;19410:1;19399:9;19395:17;19388:47;19452:131;19578:4;19452:131;:::i;:::-;19444:139;;19171:419;;;:::o;19596:::-;19762:4;19800:2;19789:9;19785:18;19777:26;;19849:9;19843:4;19839:20;19835:1;19824:9;19820:17;19813:47;19877:131;20003:4;19877:131;:::i;:::-;19869:139;;19596:419;;;:::o;20021:::-;20187:4;20225:2;20214:9;20210:18;20202:26;;20274:9;20268:4;20264:20;20260:1;20249:9;20245:17;20238:47;20302:131;20428:4;20302:131;:::i;:::-;20294:139;;20021:419;;;:::o;20446:::-;20612:4;20650:2;20639:9;20635:18;20627:26;;20699:9;20693:4;20689:20;20685:1;20674:9;20670:17;20663:47;20727:131;20853:4;20727:131;:::i;:::-;20719:139;;20446:419;;;:::o;20871:222::-;20964:4;21002:2;20991:9;20987:18;20979:26;;21015:71;21083:1;21072:9;21068:17;21059:6;21015:71;:::i;:::-;20871:222;;;;:::o;21099:332::-;21220:4;21258:2;21247:9;21243:18;21235:26;;21271:71;21339:1;21328:9;21324:17;21315:6;21271:71;:::i;:::-;21352:72;21420:2;21409:9;21405:18;21396:6;21352:72;:::i;:::-;21099:332;;;;;:::o;21437:214::-;21526:4;21564:2;21553:9;21549:18;21541:26;;21577:67;21641:1;21630:9;21626:17;21617:6;21577:67;:::i;:::-;21437:214;;;;:::o;21738:99::-;21790:6;21824:5;21818:12;21808:22;;21738:99;;;:::o;21843:169::-;21927:11;21961:6;21956:3;21949:19;22001:4;21996:3;21992:14;21977:29;;21843:169;;;;:::o;22018:148::-;22120:11;22157:3;22142:18;;22018:148;;;;:::o;22172:305::-;22212:3;22231:20;22249:1;22231:20;:::i;:::-;22226:25;;22265:20;22283:1;22265:20;:::i;:::-;22260:25;;22419:1;22351:66;22347:74;22344:1;22341:81;22338:107;;;22425:18;;:::i;:::-;22338:107;22469:1;22466;22462:9;22455:16;;22172:305;;;;:::o;22483:185::-;22523:1;22540:20;22558:1;22540:20;:::i;:::-;22535:25;;22574:20;22592:1;22574:20;:::i;:::-;22569:25;;22613:1;22603:35;;22618:18;;:::i;:::-;22603:35;22660:1;22657;22653:9;22648:14;;22483:185;;;;:::o;22674:848::-;22735:5;22742:4;22766:6;22757:15;;22790:5;22781:14;;22804:712;22825:1;22815:8;22812:15;22804:712;;;22920:4;22915:3;22911:14;22905:4;22902:24;22899:50;;;22929:18;;:::i;:::-;22899:50;22979:1;22969:8;22965:16;22962:451;;;23394:4;23387:5;23383:16;23374:25;;22962:451;23444:4;23438;23434:15;23426:23;;23474:32;23497:8;23474:32;:::i;:::-;23462:44;;22804:712;;;22674:848;;;;;;;:::o;23528:285::-;23588:5;23612:23;23630:4;23612:23;:::i;:::-;23604:31;;23656:27;23674:8;23656:27;:::i;:::-;23644:39;;23702:104;23739:66;23729:8;23723:4;23702:104;:::i;:::-;23693:113;;23528:285;;;;:::o;23819:1073::-;23873:5;24064:8;24054:40;;24085:1;24076:10;;24087:5;;24054:40;24113:4;24103:36;;24130:1;24121:10;;24132:5;;24103:36;24199:4;24247:1;24242:27;;;;24283:1;24278:191;;;;24192:277;;24242:27;24260:1;24251:10;;24262:5;;;24278:191;24323:3;24313:8;24310:17;24307:43;;;24330:18;;:::i;:::-;24307:43;24379:8;24376:1;24372:16;24363:25;;24414:3;24407:5;24404:14;24401:40;;;24421:18;;:::i;:::-;24401:40;24454:5;;;24192:277;;24578:2;24568:8;24565:16;24559:3;24553:4;24550:13;24546:36;24528:2;24518:8;24515:16;24510:2;24504:4;24501:12;24497:35;24481:111;24478:246;;;24634:8;24628:4;24624:19;24615:28;;24669:3;24662:5;24659:14;24656:40;;;24676:18;;:::i;:::-;24656:40;24709:5;;24478:246;24749:42;24787:3;24777:8;24771:4;24768:1;24749:42;:::i;:::-;24734:57;;;;24823:4;24818:3;24814:14;24807:5;24804:25;24801:51;;;24832:18;;:::i;:::-;24801:51;24881:4;24874:5;24870:16;24861:25;;23819:1073;;;;;;:::o;24898:991::-;24937:7;24960:19;24977:1;24960:19;:::i;:::-;24955:24;;24993:19;25010:1;24993:19;:::i;:::-;24988:24;;25194:1;25126:66;25122:74;25119:1;25116:81;25111:1;25108;25104:9;25100:1;25097;25093:9;25089:25;25085:113;25082:139;;;25201:18;;:::i;:::-;25082:139;25405:1;25337:66;25332:75;25329:1;25325:83;25320:1;25317;25313:9;25309:1;25306;25302:9;25298:25;25294:115;25291:141;;;25412:18;;:::i;:::-;25291:141;25616:1;25548:66;25543:75;25540:1;25536:83;25531:1;25528;25524:9;25520:1;25517;25513:9;25509:25;25505:115;25502:141;;;25623:18;;:::i;:::-;25502:141;25826:1;25758:66;25753:75;25750:1;25746:83;25741:1;25738;25734:9;25730:1;25727;25723:9;25719:25;25715:115;25712:141;;;25833:18;;:::i;:::-;25712:141;25881:1;25878;25874:9;25863:20;;24898:991;;;;:::o;25895:348::-;25935:7;25958:20;25976:1;25958:20;:::i;:::-;25953:25;;25992:20;26010:1;25992:20;:::i;:::-;25987:25;;26180:1;26112:66;26108:74;26105:1;26102:81;26097:1;26090:9;26083:17;26079:105;26076:131;;;26187:18;;:::i;:::-;26076:131;26235:1;26232;26228:9;26217:20;;25895:348;;;;:::o;26249:191::-;26289:4;26309:20;26327:1;26309:20;:::i;:::-;26304:25;;26343:20;26361:1;26343:20;:::i;:::-;26338:25;;26382:1;26379;26376:8;26373:34;;;26387:18;;:::i;:::-;26373:34;26432:1;26429;26425:9;26417:17;;26249:191;;;;:::o;26446:96::-;26483:7;26512:24;26530:5;26512:24;:::i;:::-;26501:35;;26446:96;;;:::o;26548:90::-;26582:7;26625:5;26618:13;26611:21;26600:32;;26548:90;;;:::o;26644:77::-;26681:7;26710:5;26699:16;;26644:77;;;:::o;26727:149::-;26763:7;26803:66;26796:5;26792:78;26781:89;;26727:149;;;:::o;26882:76::-;26918:7;26947:5;26936:16;;26882:76;;;:::o;26964:126::-;27001:7;27041:42;27034:5;27030:54;27019:65;;26964:126;;;:::o;27096:77::-;27133:7;27162:5;27151:16;;27096:77;;;:::o;27179:86::-;27214:7;27254:4;27247:5;27243:16;27232:27;;27179:86;;;:::o;27271:307::-;27339:1;27349:113;27363:6;27360:1;27357:13;27349:113;;;27448:1;27443:3;27439:11;27433:18;27429:1;27424:3;27420:11;27413:39;27385:2;27382:1;27378:10;27373:15;;27349:113;;;27480:6;27477:1;27474:13;27471:101;;;27560:1;27551:6;27546:3;27542:16;27535:27;27471:101;27320:258;27271:307;;;:::o;27584:171::-;27623:3;27646:24;27664:5;27646:24;:::i;:::-;27637:33;;27692:4;27685:5;27682:15;27679:41;;;27700:18;;:::i;:::-;27679:41;27747:1;27740:5;27736:13;27729:20;;27584:171;;;:::o;27761:320::-;27805:6;27842:1;27836:4;27832:12;27822:22;;27889:1;27883:4;27879:12;27910:18;27900:81;;27966:4;27958:6;27954:17;27944:27;;27900:81;28028:2;28020:6;28017:14;27997:18;27994:38;27991:84;;;28047:18;;:::i;:::-;27991:84;27812:269;27761:320;;;:::o;28087:228::-;28122:3;28145:23;28162:5;28145:23;:::i;:::-;28136:32;;28190:66;28183:5;28180:77;28177:103;;;28260:18;;:::i;:::-;28177:103;28303:5;28300:1;28296:13;28289:20;;28087:228;;;:::o;28321:180::-;28369:77;28366:1;28359:88;28466:4;28463:1;28456:15;28490:4;28487:1;28480:15;28507:180;28555:77;28552:1;28545:88;28652:4;28649:1;28642:15;28676:4;28673:1;28666:15;28693:180;28741:77;28738:1;28731:88;28838:4;28835:1;28828:15;28862:4;28859:1;28852:15;28879:180;28927:77;28924:1;28917:88;29024:4;29021:1;29014:15;29048:4;29045:1;29038:15;29065:180;29113:77;29110:1;29103:88;29210:4;29207:1;29200:15;29234:4;29231:1;29224:15;29374:117;29483:1;29480;29473:12;29497:102;29538:6;29589:2;29585:7;29580:2;29573:5;29569:14;29565:28;29555:38;;29497:102;;;:::o;29605:::-;29647:8;29694:5;29691:1;29687:13;29666:34;;29605:102;;;:::o;29713:182::-;29853:34;29849:1;29841:6;29837:14;29830:58;29713:182;:::o;29901:222::-;30041:34;30037:1;30029:6;30025:14;30018:58;30110:5;30105:2;30097:6;30093:15;30086:30;29901:222;:::o;30129:221::-;30269:34;30265:1;30257:6;30253:14;30246:58;30338:4;30333:2;30325:6;30321:15;30314:29;30129:221;:::o;30356:::-;30496:34;30492:1;30484:6;30480:14;30473:58;30565:4;30560:2;30552:6;30548:15;30541:29;30356:221;:::o;30583:177::-;30723:29;30719:1;30711:6;30707:14;30700:53;30583:177;:::o;30766:225::-;30906:34;30902:1;30894:6;30890:14;30883:58;30975:8;30970:2;30962:6;30958:15;30951:33;30766:225;:::o;30997:182::-;31137:34;31133:1;31125:6;31121:14;31114:58;30997:182;:::o;31185:220::-;31325:34;31321:1;31313:6;31309:14;31302:58;31394:3;31389:2;31381:6;31377:15;31370:28;31185:220;:::o;31411:227::-;31551:34;31547:1;31539:6;31535:14;31528:58;31620:10;31615:2;31607:6;31603:15;31596:35;31411:227;:::o;31644:220::-;31784:34;31780:1;31772:6;31768:14;31761:58;31853:3;31848:2;31840:6;31836:15;31829:28;31644:220;:::o;31870:224::-;32010:34;32006:1;31998:6;31994:14;31987:58;32079:7;32074:2;32066:6;32062:15;32055:32;31870:224;:::o;32100:223::-;32240:34;32236:1;32228:6;32224:14;32217:58;32309:6;32304:2;32296:6;32292:15;32285:31;32100:223;:::o;32329:227::-;32469:34;32465:1;32457:6;32453:14;32446:58;32538:10;32533:2;32525:6;32521:15;32514:35;32329:227;:::o;32562:173::-;32702:25;32698:1;32690:6;32686:14;32679:49;32562:173;:::o;32741:224::-;32881:34;32877:1;32869:6;32865:14;32858:58;32950:7;32945:2;32937:6;32933:15;32926:32;32741:224;:::o;32971:167::-;33111:19;33107:1;33099:6;33095:14;33088:43;32971:167;:::o;33144:234::-;33284:34;33280:1;33272:6;33268:14;33261:58;33353:17;33348:2;33340:6;33336:15;33329:42;33144:234;:::o;33384:181::-;33524:33;33520:1;33512:6;33508:14;33501:57;33384:181;:::o;33571:122::-;33644:24;33662:5;33644:24;:::i;:::-;33637:5;33634:35;33624:63;;33683:1;33680;33673:12;33624:63;33571:122;:::o;33699:::-;33772:24;33790:5;33772:24;:::i;:::-;33765:5;33762:35;33752:63;;33811:1;33808;33801:12;33752:63;33699:122;:::o;33827:120::-;33899:23;33916:5;33899:23;:::i;:::-;33892:5;33889:34;33879:62;;33937:1;33934;33927:12;33879:62;33827:120;:::o;33953:122::-;34026:24;34044:5;34026:24;:::i;:::-;34019:5;34016:35;34006:63;;34065:1;34062;34055:12;34006:63;33953:122;:::o
Swarm Source
ipfs://208cb6b7bb6d89ff07cc39cfaa20f455331bbfa5660cf2d50abb8d36f3bca119
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.