ETH Price: $3,116.81 (+0.25%)
Gas: 3 Gwei

Contract

0x6DC59c69110922dEb64062AF7ad7B845F2B727c9
 

Overview

ETH Balance

0.157 ETH

Eth Value

$489.34 (@ $3,116.81/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Safe Transfer Fr...162148572022-12-18 23:27:23517 days ago1671406043IN
0x6DC59c69...5F2B727c9
0 ETH0.0007496712.16671825
Bake154620312022-09-02 23:30:47624 days ago1662161447IN
0x6DC59c69...5F2B727c9
0.0314 ETH0.001413146.51023286
Bake154619932022-09-02 23:23:07624 days ago1662160987IN
0x6DC59c69...5F2B727c9
0.0314 ETH0.001667137.68105782
Bake154614322022-09-02 21:13:14624 days ago1662153194IN
0x6DC59c69...5F2B727c9
0.0314 ETH0.0040972518.88006244
Bake154614172022-09-02 21:09:18624 days ago1662152958IN
0x6DC59c69...5F2B727c9
0.0314 ETH0.0046025921.21257634
Bake154613962022-09-02 21:06:25624 days ago1662152785IN
0x6DC59c69...5F2B727c9
0.0314 ETH0.0041975417.93170671
Toggle Sale Stat...154613662022-09-02 20:58:38624 days ago1662152318IN
0x6DC59c69...5F2B727c9
0 ETH0.0002834110.5760876
0x60806040154613112022-09-02 20:46:23624 days ago1662151583IN
 Create: PiSpace
0 ETH0.0781687415.59900701

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PiSpace

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-02
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

interface IERC165 {
	function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
	event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
	event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
	event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
	function balanceOf(address owner) external view returns (uint256 balance);
	function ownerOf(uint256 tokenId) external view returns (address owner);
	function safeTransferFrom(address from, address to, uint256 tokenId) external;
	function transferFrom(address from, address to, uint256 tokenId) external;
	function approve(address to, uint256 tokenId) external;
	function getApproved(uint256 tokenId) external view returns (address operator);
	function setApprovalForAll(address operator, bool _approved) external;
	function isApprovedForAll(address owner, address operator) external view returns (bool);
	function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

interface IERC721Receiver {
	function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

interface IERC721Metadata is IERC721 {
	function name() external view returns (string memory);
	function symbol() external view returns (string memory);
	function tokenURI(uint256 tokenId) external view returns (string memory);
}

abstract contract Context {
	function _msgSender() internal view virtual returns (address) {
		return msg.sender;
	}
	function _msgData() internal view virtual returns (bytes calldata) {
		this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
		return msg.data;
	}
}

abstract contract ERC165 is IERC165 {
	function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
		return interfaceId == type(IERC165).interfaceId;
	}
}

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
	using Address for address;
	using Strings for uint256;
	string private _name;
	string private _symbol;
	mapping (uint256 => address) private _owners;
	mapping (address => uint256) private _balances;
	mapping (uint256 => address) private _tokenApprovals;
	mapping (address => mapping (address => bool)) private _operatorApprovals;
	constructor (string memory name_, string memory symbol_) {
		_name = name_;
		_symbol = symbol_;
	}
	function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
		return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId);
	}
	function balanceOf(address owner) public view virtual override returns (uint256) {
		require(owner != address(0), "ERC721: balance query for the zero address");
		return _balances[owner];
	}
	function ownerOf(uint256 tokenId) public view virtual override returns (address) {
		address owner = _owners[tokenId];
		require(owner != address(0), "ERC721: owner query for nonexistent token");
		return owner;
	}
	function name() public view virtual override returns (string memory) {
		return _name;
	}
	function symbol() public view virtual override returns (string memory) {
		return _symbol;
	}
	function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
		require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
		string memory baseURI = _baseURI();
		return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';
	}
	function _baseURI() internal view virtual returns (string memory) {
		return "";
	}
	function approve(address to, uint256 tokenId) public virtual override {
		address owner = ERC721.ownerOf(tokenId);
		require(to != owner, "ERC721: approval to current owner");
		require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all");
		_approve(to, tokenId);
	}
	function getApproved(uint256 tokenId) public view virtual override returns (address) {
		require(_exists(tokenId), "ERC721: approved query for nonexistent token");
		return _tokenApprovals[tokenId];
	}
	function setApprovalForAll(address operator, bool approved) public virtual override {
		require(operator != _msgSender(), "ERC721: approve to caller");
		_operatorApprovals[_msgSender()][operator] = approved;
		emit ApprovalForAll(_msgSender(), operator, approved);
	}
	function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
		return _operatorApprovals[owner][operator];
	}
	function transferFrom(address from, address to, uint256 tokenId) public virtual override {
		require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
		_transfer(from, to, tokenId);
	}
	function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
		safeTransferFrom(from, to, tokenId, "");
	}
	function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
		require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
		_safeTransfer(from, to, tokenId, _data);
	}
	function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
		_transfer(from, to, tokenId);
		require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
	}
	function _exists(uint256 tokenId) internal view virtual returns (bool) {
		return _owners[tokenId] != address(0);
	}
	function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
		require(_exists(tokenId), "ERC721: operator query for nonexistent token");
		address owner = ERC721.ownerOf(tokenId);
		return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
	}
	function _safeMint(address to, uint256 tokenId) internal virtual {
		_safeMint(to, tokenId, "");
	}
	function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {
		_mint(to, tokenId);
		require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
	}
	function _mint(address to, uint256 tokenId) internal virtual {
		require(to != address(0), "ERC721: mint to the zero address");
		require(!_exists(tokenId), "ERC721: token already minted");
		_beforeTokenTransfer(address(0), to, tokenId);
		_balances[to] += 1;
		_owners[tokenId] = to;
		emit Transfer(address(0), to, tokenId);
	}
	function _burn(uint256 tokenId) internal virtual {
		address owner = ERC721.ownerOf(tokenId);
		_beforeTokenTransfer(owner, address(0), tokenId);
		_approve(address(0), tokenId);
		_balances[owner] -= 1;
		delete _owners[tokenId];
		emit Transfer(owner, address(0), tokenId);
	}
	function _transfer(address from, address to, uint256 tokenId) internal virtual {
		require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
		require(to != address(0), "ERC721: transfer to the zero address");
		_beforeTokenTransfer(from, to, tokenId);
		_approve(address(0), tokenId);
		_balances[from] -= 1;
		_balances[to] += 1;
		_owners[tokenId] = to;
		emit Transfer(from, to, tokenId);
	}
	function _approve(address to, uint256 tokenId) internal virtual {
		_tokenApprovals[tokenId] = to;
		emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
	}
	function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool)
	{
		if (to.isContract()) {
			try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
				return retval == IERC721Receiver(to).onERC721Received.selector;
			} catch (bytes memory reason) {
				if (reason.length == 0) {
					revert("ERC721: transfer to non ERC721Receiver implementer");
				} else {
					// solhint-disable-next-line no-inline-assembly
					assembly {
						revert(add(32, reason), mload(reason))
					}
				}
			}
		} else {
			return true;
		}
	}
	function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }
}

abstract contract Ownable is Context {
	address private _owner;
	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
	constructor () {
		address msgSender = _msgSender();
		_owner = msgSender;
		emit OwnershipTransferred(address(0), msgSender);
	}
	function owner() public view virtual returns (address) {
		return _owner;
	}
	modifier onlyOwner() {
		require(owner() == _msgSender(), "Ownable: caller is not the owner");
		_;
	}
	function renounceOwnership() public virtual onlyOwner {
		emit OwnershipTransferred(_owner, address(0));
		_owner = address(0);
	}
	function transferOwnership(address newOwner) public virtual onlyOwner {
		require(newOwner != address(0), "Ownable: new owner is the zero address");
		emit OwnershipTransferred(_owner, newOwner);
		_owner = newOwner;
	}
}

abstract contract ReentrancyGuard {
	uint256 private constant _NOT_ENTERED = 1;
	uint256 private constant _ENTERED = 2;
	uint256 private _status;
	constructor() {
		_status = _NOT_ENTERED;
	}
	modifier nonReentrant() {
		require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
		_status = _ENTERED;
		_;
		_status = _NOT_ENTERED;
	}
}

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 toAsciiString(address x) internal pure returns (string memory) {
		bytes memory s = new bytes(40);
		for (uint i = 0; i < 20; i++) {
			bytes1 b = bytes1(uint8(uint(uint160(x)) / (2**(8*(19 - i)))));
			bytes1 hi = bytes1(uint8(b) / 16);
			bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));
			s[2*i] = char(hi);
			s[2*i+1] = char(lo);
		}
		return string(s);
	}
	function char(bytes1 b) internal pure returns (bytes1 c) {
		if (uint8(b) < 10) return bytes1(uint8(b) + 0x30);
		else return bytes1(uint8(b) + 0x57);
	}
}

library Base64 {
	bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	function encode(bytes memory data) internal pure returns (string memory) {
		uint256 len = data.length;
		if (len == 0) return "";
		uint256 encodedLen = 4 * ((len + 2) / 3);
		bytes memory result = new bytes(encodedLen + 32);
		bytes memory table = TABLE;
		assembly {
			let tablePtr := add(table, 1)
			let resultPtr := add(result, 32)

			for {
				let i := 0
			} lt(i, len) {
			} {
				i := add(i, 3)
				let input := and(mload(add(data, i)), 0xffffff)
				let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
				out := shl(8, out)
				out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
				out := shl(8, out)
				out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
				out := shl(8, out)
				out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
				out := shl(224, out)
				mstore(resultPtr, out)
				resultPtr := add(resultPtr, 4)
			}
			switch mod(len, 3)
			case 1 {
				mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
			}
			case 2 {
				mstore(sub(resultPtr, 1), shl(248, 0x3d))
			}
			mstore(result, encodedLen)
		}
		return string(result);
	}
}

library DynamicBuffer {
	function allocate(uint256 capacity) internal pure returns (bytes memory buffer) {
		assembly {
			let container := mload(0x40)
			{
				let size := add(capacity, 0x60)
				let newNextFree := add(container, size)
				mstore(0x40, newNextFree)
			}
			{
				let length := add(capacity, 0x40)
				mstore(container, length)
			}
			buffer := add(container, 0x20)
			mstore(buffer, 0)
		}
		return buffer;
	}
	function appendUnchecked(bytes memory buffer, bytes memory data) internal pure {
		assembly {
			let length := mload(data)
			for {
				data := add(data, 0x20)
				let dataEnd := add(data, length)
				let copyTo := add(buffer, add(mload(buffer), 0x20))
			} lt(data, dataEnd) {
				data := add(data, 0x20)
				copyTo := add(copyTo, 0x20)
			} {
				mstore(copyTo, mload(data))
			}
			mstore(buffer, add(mload(buffer), length))
		}
	}
	function appendSafe(bytes memory buffer, bytes memory data) internal pure {
		uint256 capacity;
		uint256 length;
		assembly {
			capacity := sub(mload(sub(buffer, 0x20)), 0x40)
			length := mload(buffer)
		}
		require(length + data.length <= capacity, "DynamicBuffer: Appending out of bounds.");
		appendUnchecked(buffer, data);
	}
}

library Address {
	function isContract(address account) internal view returns (bool) {
		uint256 size;
		// solhint-disable-next-line no-inline-assembly
		assembly { size := extcodesize(account) }
		return size > 0;
	}
	function sendValue(address payable recipient, uint256 amount) internal {
		require(address(this).balance >= amount, "Address: insufficient balance");
		// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
		(bool success, ) = recipient.call{ value: amount }("");
		require(success, "Address: unable to send value, recipient may have reverted");
	}
	function functionCall(address target, bytes memory data) internal returns (bytes memory) {
	  return functionCall(target, data, "Address: low-level call failed");
	}
	function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
		return functionCallWithValue(target, data, 0, errorMessage);
	}
	function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
		return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
	}
	function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
		require(address(this).balance >= value, "Address: insufficient balance for call");
		require(isContract(target), "Address: call to non-contract");
		// solhint-disable-next-line avoid-low-level-calls
		(bool success, bytes memory returndata) = target.call{ value: value }(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}
	function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
		return functionStaticCall(target, data, "Address: low-level static call failed");
	}
	function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
		require(isContract(target), "Address: static call to non-contract");
		// solhint-disable-next-line avoid-low-level-calls
		(bool success, bytes memory returndata) = target.staticcall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}
	function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
		return functionDelegateCall(target, data, "Address: low-level delegate call failed");
	}
	function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
		require(isContract(target), "Address: delegate call to non-contract");
		// solhint-disable-next-line avoid-low-level-calls
		(bool success, bytes memory returndata) = target.delegatecall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}
	function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
		if (success) {
			return returndata;
		} else {
			if (returndata.length > 0) {
				// solhint-disable-next-line no-inline-assembly
				assembly {
					let returndata_size := mload(returndata)
					revert(add(32, returndata), returndata_size)
				}
			} else {
				revert(errorMessage);
			}
		}
	}
}

contract PiSpace is ERC721, ReentrancyGuard, Ownable
{
	using Strings for int;
	using Strings for uint;
	using Strings for bytes32;
	using DynamicBuffer for bytes;

	bool public sale_active = false;
	uint public sale_price = 0.0314 ether;
	uint public max_supply = 314;
	uint public pies_baked = 0;

	string[] blend_modes = ["overlay", "lighten", "multiply"];

	mapping(uint => string) public pie_ingredients;


	/**
	 * @dev Setup all the variables for the Traits and the Collection.
	 */
	constructor() ERC721("Pi-Space", "PIES") {}


	/**
	* @dev Calculate the total amount minted so far.
	*/
	function totalSupply() public view returns (uint)
	{
		return pies_baked;
	}


	/**
	 * @dev Bake a Pi-Space and add the ingredients to the mapping.
	 */
	function bake() public payable nonReentrant
	{
		require(totalSupply() < max_supply, "All the Pies have already been baked.");
		require(sale_active, "The Pies are not on sale at the moment.");
		require(msg.value >= sale_price, "Insufficient funds to bake a Pie.");

		uint pie = totalSupply() + 1;

		string memory ingredients = prepareIngredients(msg.sender);

		_safeMint(msg.sender, pie);

		pie_ingredients[pie] = ingredients;
		pies_baked++;
	}


	/**
	 * @dev Generate the random seed for the `_pie`.
	 */
	function prepareIngredients(address _sender) internal view returns (string memory)
	{
		uint balance = this.balanceOf(_sender);
		address address_string;

		if (balance > 0)
		{
			address_string = address(uint160(uint(keccak256(abi.encodePacked(_sender, balance.toString())))));
		}
		else
		{
			address_string = _sender;
		}

		return Strings.toAsciiString(address_string);
	}


	/**
	 * @dev Get the Ingredients for the `_pie`.
	 */
	function getIngredients(uint _pie) public view returns (string memory)
	{
		return pie_ingredients[_pie];
	}


	/**
	 * @dev Output the svg in the json array for the lols.
	 */
	function tokenURI(uint _pie) public view override returns (string memory)
	{
		require(_exists(_pie), "This Pie doesn't exist.");

		string memory ingredients = getIngredients(_pie);
		string[] memory colours = new string[](6);

		uint num_circles = rand(ingredients, 0, 13) + 10;

		colours[0] = "ffffff";
		colours[1] = getSliceFromBytesString(ingredients, 0, 6);
		colours[2] = getSliceFromBytesString(ingredients, 2, 6);
		colours[3] = getSliceFromBytesString(ingredients, 20, 6);
		colours[4] = getSliceFromBytesString(ingredients, 22, 6);
		colours[5] = getSliceFromBytesString(ingredients, 32, 6);

		bytes memory svg = generateSVG(_pie, ingredients, num_circles, colours);

		string memory json = string(abi.encodePacked(
			'data:application/json,{"name":"Pi-Space #',
			bytes(_pie.toString()),
			'","description":"Pi-Space is the second blockchain generative art project from Rant&Code. Each piece is generated using unique data from the wallet used to mint it.\\n\\n[Website](https://rantandcode.co.uk/pi-space) | [Twitter](https://twitter.com/rantandcode_)","image":"data:image/svg+xml;base64,',
			bytes(Base64.encode(svg)),
			'","attributes":[{"trait_type": "Circles", "value": "',
			bytes(num_circles.toString()),
			'"},{"trait_type": "Colour 1", "value": "#',
			colours[1],
			'"},{"trait_type": "Colour 2", "value": "#',
			colours[2],
			'"},{"trait_type": "Colour 3", "value": "#',
			colours[3],
			'"},{"trait_type": "Colour 4", "value": "#',
			colours[4],
			'"},{"trait_type": "Background", "value": "#',
			colours[5],
			'"}], "background_color": "#',
			colours[5],
			'"}'
		));

		return json;
	}


	/**
	 * @dev Build the entire SVG using the randomly generated attributes/traits.
	 */
	function generateSVG(uint _pie, string memory _ingredients, uint _num_circles, string[] memory _colours) internal view returns (bytes memory)
	{
		bytes memory svg = abi.encodePacked(
			'<svg id="ps',
			bytes(_pie.toString()),
			'" xmlns="http://www.w3.org/2000/svg" width="1200" height="1200" viewBox="0 0 1200 1200" style="background-color:#',
			_colours[5],
			';" class="max-w-full">',
			generateSVGStyles(_pie, _ingredients),
			generateSVGCircles(_ingredients, _num_circles, _colours, 3),
			'</svg>'
		);

		return svg;
	}


	/**
	 * @dev Build the animations for the Pie using random variables from the `_ingredients`.
	 */
	function generateSVGStyles(uint _pie, string memory _ingredients) internal pure returns (bytes memory)
	{
		bytes memory svg = abi.encodePacked(
			'<style>#ps',
			bytes(_pie.toString()),
			' circle{transform-origin: center;}#ps',
			bytes(_pie.toString()),
			' circle:nth-child(3n){animation:aS ',
			(17 + rand(_ingredients, 1, 5)).toString(), // duration
			's ease-in-out ',
			rand(_ingredients, 2, 5).toString(), // delay
			's infinite alternate both;}#ps',
			bytes(_pie.toString()),
			' circle:nth-child(5n){animation:aX ',
			(23 + rand(_ingredients, 3, 5)).toString(), // duration
			's ease-in-out ',
			rand(_ingredients, 4, 3).toString(), // delay
			's infinite alternate both;}#ps',
			bytes(_pie.toString()),
			' circle:nth-child(7n){animation:aY ',
			(29 + rand(_ingredients, 5, 5)).toString(), // duration
			's linear ',
			(8 + rand(_ingredients, 6, 4)).toString(), // delay
			's infinite alternate both;}@keyframes aS{0%{transform:scale(1);}100%{transform:scale(1.314);}}@keyframes aX{0%{transform:translateX(0) scale(1);}100%{transform:translateX(131px) scale(3.14);}}@keyframes aY{0%{transform:translateY(0);}100%{transform:translateY(-31px);}}</style>'
		);

		return svg;
	}


	/**
	 * @dev Loop through and add `_num_circles` circles to the SVG using random variables from the `_ingredients`.
	 */
	function generateSVGCircles(string memory _ingredients, uint _num_circles, string[] memory _colours, uint _nonce) internal view returns (bytes memory)
	{
		uint i;
		bytes memory svg;

		for (i = 0; i < _num_circles;)
		{
			svg = abi.encodePacked(
				svg,
				'<circle cx="',
				bytes(rand(_ingredients, (++_nonce), 1200).toString()),
				'" cy="',
				bytes(rand(_ingredients, (++_nonce), 1200).toString()),
				'" r="',
				bytes(rand(_ingredients, (++_nonce), 800).toString()),
				'" fill="#',
				_colours[rand(_ingredients, (++_nonce), _colours.length)],
				'" style="mix-blend-mode: ',
				blend_modes[rand(_ingredients, (++_nonce), blend_modes.length)],
				'; opacity: 0.',
				bytes((rand(_ingredients, (++_nonce), 65) + 10).toString()),
				';"></circle>'
			);

			unchecked { i++; }
		}

		return svg;
	}


	/**
	 * @dev Get a random number from the `_seed` using `_mod` to limit it.
	 */
	function rand(string memory _seed, uint _nonce, uint _mod) internal pure returns (uint256)
	{
		return uint256(keccak256(abi.encode(_seed, _nonce))) % _mod;
	}


	/**
	 * @dev Return a slice of `_length` characters from the given `_string`.
	 */
	function getSliceFromBytesString(string memory _string, uint _offset, uint _length) internal pure returns (string memory)
	{
		bytes memory characters = bytes(_string);

		bytes memory slice = new bytes(_length);

		for (uint i=0; i<_length;)
		{
			slice[i] = characters[_offset + i];

			unchecked { i++; }
		}

		return string(slice);
	}


	/**
	* @dev Toggle the Sale state.
	*/
	function toggleSaleState() public onlyOwner
	{
		sale_active = !sale_active;
	}


	/**
	 * @dev Allow withdrawal of funds to the Owner's wallet.
	 */
	function withdrawFunds() public payable onlyOwner
	{
		(bool success, ) = payable(msg.sender).call{value: address(this).balance}("");
		require(success);
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pie","type":"uint256"}],"name":"getIngredients","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pie_ingredients","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pies_baked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sale_active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sale_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","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":"toggleSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pie","type":"uint256"}],"name":"tokenURI","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526000600760146101000a81548160ff021916908315150217905550666f8e2235f2800060085561013a6009556000600a5560405180606001604052806040518060400160405280600781526020017f6f7665726c61790000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f6c69676874656e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f6d756c7469706c79000000000000000000000000000000000000000000000000815250815250600b9060036200010192919062000277565b503480156200010f57600080fd5b506040518060400160405280600881526020017f50692d53706163650000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5049455300000000000000000000000000000000000000000000000000000000815250816000908051906020019062000194929190620002de565b508060019080519060200190620001ad929190620002de565b50505060016006819055506000620001ca6200026f60201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000461565b600033905090565b828054828255906000526020600020908101928215620002cb579160200282015b82811115620002ca578251829080519060200190620002b9929190620002de565b509160200191906001019062000298565b5b509050620002da91906200036f565b5090565b828054620002ec906200042b565b90600052602060002090601f0160209004810192826200031057600085556200035c565b82601f106200032b57805160ff19168380011785556200035c565b828001600101855582156200035c579182015b828111156200035b5782518255916020019190600101906200033e565b5b5090506200036b919062000397565b5090565b5b80821115620003935760008181620003899190620003b6565b5060010162000370565b5090565b5b80821115620003b257600081600090555060010162000398565b5090565b508054620003c4906200042b565b6000825580601f10620003d85750620003f9565b601f016020900490600052602060002090810190620003f8919062000397565b5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200044457607f821691505b602082108114156200045b576200045a620003fc565b5b50919050565b6155b480620004716000396000f3fe6080604052600436106101815760003560e01c80638da5cb5b116100d1578063b0de262e1161008a578063daaeec8611610064578063daaeec8614610556578063e0df72161461056d578063e985e9c514610598578063f2fde38b146105d557610181565b8063b0de262e146104e6578063b88d4fde146104f0578063c87b56dd1461051957610181565b80638da5cb5b146103c257806395d89b41146103ed57806395ec54db14610418578063a22cb46514610443578063a67f582d1461046c578063ade80b6c146104a957610181565b806324600fc31161013e5780636352211e116101185780636352211e1461030657806370a0823114610343578063715018a6146103805780638a333b501461039757610181565b806324600fc3146102a857806342842e0e146102b257806356463eaf146102db57610181565b806301ffc9a71461018657806306fdde03146101c3578063081812fc146101ee578063095ea7b31461022b57806318160ddd1461025457806323b872dd1461027f575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190612ce1565b6105fe565b6040516101ba9190612d29565b60405180910390f35b3480156101cf57600080fd5b506101d86106e0565b6040516101e59190612ddd565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190612e35565b610772565b6040516102229190612ea3565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d9190612eea565b6107f7565b005b34801561026057600080fd5b5061026961090f565b6040516102769190612f39565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a19190612f54565b610919565b005b6102b0610979565b005b3480156102be57600080fd5b506102d960048036038101906102d49190612f54565b610a6e565b005b3480156102e757600080fd5b506102f0610a8e565b6040516102fd9190612f39565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190612e35565b610a94565b60405161033a9190612ea3565b60405180910390f35b34801561034f57600080fd5b5061036a60048036038101906103659190612fa7565b610b46565b6040516103779190612f39565b60405180910390f35b34801561038c57600080fd5b50610395610bfe565b005b3480156103a357600080fd5b506103ac610d3b565b6040516103b99190612f39565b60405180910390f35b3480156103ce57600080fd5b506103d7610d41565b6040516103e49190612ea3565b60405180910390f35b3480156103f957600080fd5b50610402610d6b565b60405161040f9190612ddd565b60405180910390f35b34801561042457600080fd5b5061042d610dfd565b60405161043a9190612f39565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190613000565b610e03565b005b34801561047857600080fd5b50610493600480360381019061048e9190612e35565b610f84565b6040516104a09190612ddd565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612e35565b611029565b6040516104dd9190612ddd565b60405180910390f35b6104ee6110c9565b005b3480156104fc57600080fd5b5061051760048036038101906105129190613175565b611271565b005b34801561052557600080fd5b50610540600480360381019061053b9190612e35565b6112d3565b60405161054d9190612ddd565b60405180910390f35b34801561056257600080fd5b5061056b6115d6565b005b34801561057957600080fd5b5061058261167e565b60405161058f9190612d29565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba91906131f8565b611691565b6040516105cc9190612d29565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190612fa7565b611725565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106c957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106d957506106d8826118d1565b5b9050919050565b6060600080546106ef90613267565b80601f016020809104026020016040519081016040528092919081815260200182805461071b90613267565b80156107685780601f1061073d57610100808354040283529160200191610768565b820191906000526020600020905b81548152906001019060200180831161074b57829003601f168201915b5050505050905090565b600061077d8261193b565b6107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b39061330b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080282610a94565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a9061339d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108926119a7565b73ffffffffffffffffffffffffffffffffffffffff1614806108c157506108c0816108bb6119a7565b611691565b5b610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f79061342f565b60405180910390fd5b61090a83836119af565b505050565b6000600a54905090565b61092a6109246119a7565b82611a68565b610969576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610960906134c1565b60405180910390fd5b610974838383611b46565b505050565b6109816119a7565b73ffffffffffffffffffffffffffffffffffffffff1661099f610d41565b73ffffffffffffffffffffffffffffffffffffffff16146109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ec9061352d565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610a1b9061357e565b60006040518083038185875af1925050503d8060008114610a58576040519150601f19603f3d011682016040523d82523d6000602084013e610a5d565b606091505b5050905080610a6b57600080fd5b50565b610a8983838360405180602001604052806000815250611271565b505050565b600a5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3490613605565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90613697565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c066119a7565b73ffffffffffffffffffffffffffffffffffffffff16610c24610d41565b73ffffffffffffffffffffffffffffffffffffffff1614610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c719061352d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60095481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d7a90613267565b80601f0160208091040260200160405190810160405280929190818152602001828054610da690613267565b8015610df35780601f10610dc857610100808354040283529160200191610df3565b820191906000526020600020905b815481529060010190602001808311610dd657829003601f168201915b5050505050905090565b60085481565b610e0b6119a7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090613703565b60405180910390fd5b8060056000610e866119a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f336119a7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f789190612d29565b60405180910390a35050565b6060600c60008381526020019081526020016000208054610fa490613267565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd090613267565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b50505050509050919050565b600c602052806000526040600020600091509050805461104890613267565b80601f016020809104026020016040519081016040528092919081815260200182805461107490613267565b80156110c15780601f10611096576101008083540402835291602001916110c1565b820191906000526020600020905b8154815290600101906020018083116110a457829003601f168201915b505050505081565b6002600654141561110f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111069061376f565b60405180910390fd5b600260068190555060095461112261090f565b10611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990613801565b60405180910390fd5b600760149054906101000a900460ff166111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890613893565b60405180910390fd5b6008543410156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90613925565b60405180910390fd5b6000600161120261090f565b61120c9190613974565b9050600061121933611da2565b90506112253383611e8c565b80600c6000848152602001908152602001600020908051906020019061124c929190612bd2565b50600a6000815480929190611260906139ca565b919050555050506001600681905550565b61128261127c6119a7565b83611a68565b6112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b8906134c1565b60405180910390fd5b6112cd84848484611eaa565b50505050565b60606112de8261193b565b61131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613a5f565b60405180910390fd5b600061132883610f84565b90506000600667ffffffffffffffff8111156113475761134661304a565b5b60405190808252806020026020018201604052801561137a57816020015b60608152602001906001900390816113655790505b5090506000600a61138e846000600d611f06565b6113989190613974565b90506040518060400160405280600681526020017f6666666666660000000000000000000000000000000000000000000000000000815250826000815181106113e4576113e3613a7f565b5b60200260200101819052506113fc8360006006611f48565b826001815181106114105761140f613a7f565b5b60200260200101819052506114288360026006611f48565b8260028151811061143c5761143b613a7f565b5b60200260200101819052506114548360146006611f48565b8260038151811061146857611467613a7f565b5b60200260200101819052506114808360166006611f48565b8260048151811061149457611493613a7f565b5b60200260200101819052506114ac8360206006611f48565b826005815181106114c0576114bf613a7f565b5b602002602001018190525060006114d986858486612030565b905060006114e6876120a0565b6114ef83612201565b6114f8856120a0565b8660018151811061150c5761150b613a7f565b5b60200260200101518760028151811061152857611527613a7f565b5b60200260200101518860038151811061154457611543613a7f565b5b6020026020010151896004815181106115605761155f613a7f565b5b60200260200101518a60058151811061157c5761157b613a7f565b5b60200260200101518b60058151811061159857611597613a7f565b5b60200260200101516040516020016115b899989796959493929190614082565b60405160208183030381529060405290508095505050505050919050565b6115de6119a7565b73ffffffffffffffffffffffffffffffffffffffff166115fc610d41565b73ffffffffffffffffffffffffffffffffffffffff1614611652576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116499061352d565b60405180910390fd5b600760149054906101000a900460ff1615600760146101000a81548160ff021916908315150217905550565b600760149054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61172d6119a7565b73ffffffffffffffffffffffffffffffffffffffff1661174b610d41565b73ffffffffffffffffffffffffffffffffffffffff16146117a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117989061352d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611808906141e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a2283610a94565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a738261193b565b611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa990614273565b60405180910390fd5b6000611abd83610a94565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b2c57508373ffffffffffffffffffffffffffffffffffffffff16611b1484610772565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b3d5750611b3c8185611691565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b6682610a94565b73ffffffffffffffffffffffffffffffffffffffff1614611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614305565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390614397565b60405180910390fd5b611c37838383612399565b611c426000826119af565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c9291906143b7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce99190613974565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060003073ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401611ddf9190612ea3565b60206040518083038186803b158015611df757600080fd5b505afa158015611e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2f9190614400565b9050600080821115611e765783611e45836120a0565b604051602001611e56929190614475565b6040516020818303038152906040528051906020012060001c9050611e7a565b8390505b611e838161239e565b92505050919050565b611ea6828260405180602001604052806000815250612561565b5050565b611eb5848484611b46565b611ec1848484846125bc565b611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef79061450f565b60405180910390fd5b50505050565b6000818484604051602001611f1c92919061452f565b6040516020818303038152906040528051906020012060001c611f3f919061458e565b90509392505050565b6060600084905060008367ffffffffffffffff811115611f6b57611f6a61304a565b5b6040519080825280601f01601f191660200182016040528015611f9d5781602001600182028036833780820191505090505b50905060005b8481101561202357828187611fb89190613974565b81518110611fc957611fc8613a7f565b5b602001015160f81c60f81b828281518110611fe757611fe6613a7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611fa3565b5080925050509392505050565b6060600061203d866120a0565b8360058151811061205157612050613a7f565b5b60200260200101516120638888612753565b612070888888600361285c565b6040516020016120839493929190614761565b604051602081830303815290604052905080915050949350505050565b606060008214156120e8576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121fc565b600082905060005b6000821461211a578080612103906139ca565b915050600a8261211391906147cb565b91506120f0565b60008167ffffffffffffffff8111156121365761213561304a565b5b6040519080825280601f01601f1916602001820160405280156121685781602001600182028036833780820191505090505b5090505b600085146121f55760018261218191906143b7565b9150600a85612190919061458e565b603061219c9190613974565b60f81b8183815181106121b2576121b1613a7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121ee91906147cb565b945061216c565b8093505050505b919050565b6060600082519050600081141561222a5760405180602001604052806000815250915050612394565b6000600360028361223b9190613974565b61224591906147cb565b600461225191906147fc565b905060006020826122629190613974565b67ffffffffffffffff81111561227b5761227a61304a565b5b6040519080825280601f01601f1916602001820160405280156122ad5781602001600182028036833780820191505090505b509050600060405180606001604052806040815260200161553f604091399050600181016020830160005b868110156123515760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b905080845260048401935050506122d8565b50600386066001811461236b576002811461237b57612386565b613d3d60f01b6002830352612386565b603d60f81b60018303525b508484525050819450505050505b919050565b505050565b60606000602867ffffffffffffffff8111156123bd576123bc61304a565b5b6040519080825280601f01601f1916602001820160405280156123ef5781602001600182028036833780820191505090505b50905060005b601481101561255757600081601361240d91906143b7565b600861241991906147fc565b60026124259190614989565b8573ffffffffffffffffffffffffffffffffffffffff1661244691906147cb565b60f81b9050600060108260f81c61245d91906149e1565b60f81b905060008160f81c60106124749190614a12565b8360f81c6124829190614a4d565b60f81b9050612490826129ab565b8585600261249e91906147fc565b815181106124af576124ae613a7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506124e7816129ab565b8560018660026124f791906147fc565b6125019190613974565b8151811061251257612511613a7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350505050808061254f906139ca565b9150506123f5565b5080915050919050565b61256b83836129f1565b61257860008484846125bc565b6125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae9061450f565b60405180910390fd5b505050565b60006125dd8473ffffffffffffffffffffffffffffffffffffffff16612bbf565b15612746578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126066119a7565b8786866040518563ffffffff1660e01b81526004016126289493929190614acb565b602060405180830381600087803b15801561264257600080fd5b505af192505050801561267357506040513d601f19601f820116820180604052508101906126709190614b2c565b60015b6126f6573d80600081146126a3576040519150601f19603f3d011682016040523d82523d6000602084013e6126a8565b606091505b506000815114156126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e59061450f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061274b565b600190505b949350505050565b60606000612760846120a0565b612769856120a0565b61278a6127798660016005611f06565b60116127859190613974565b6120a0565b61279f61279a8760026005611f06565b6120a0565b6127a8886120a0565b6127c96127b88960036005611f06565b60176127c49190613974565b6120a0565b6127de6127d98a60046003611f06565b6120a0565b6127e78b6120a0565b6128076127f68c600580611f06565b601d6128029190613974565b6120a0565b6128286128178d60066004611f06565b60086128239190613974565b6120a0565b6040516020016128419a99989796959493929190614fd0565b60405160208183030381529060405290508091505092915050565b606060006060600091505b8582101561299e578061289161288c8987612881906139ca565b9750876104b0611f06565b6120a0565b6128b26128ad8a886128a2906139ca565b9850886104b0611f06565b6120a0565b6128d36128ce8b896128c3906139ca565b995089610320611f06565b6120a0565b886128ec8c8a6128e2906139ca565b9a508a8c51611f06565b815181106128fd576128fc613a7f565b5b6020026020010151600b6129238d8b612915906139ca565b9b508b600b80549050611f06565b8154811061293457612933613a7f565b5b9060005260206000200161296a600a61295b8f8d612951906139ca565b9d508d6041611f06565b6129659190613974565b6120a0565b604051602001612980979695949392919061537d565b60405160208183030381529060405290508180600101925050612867565b8092505050949350505050565b6000600a8260f81c60ff1610156129d65760308260f81c6129cc919061542f565b60f81b90506129ec565b60578260f81c6129e6919061542f565b60f81b90505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a58906154b2565b60405180910390fd5b612a6a8161193b565b15612aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa19061551e565b60405180910390fd5b612ab660008383612399565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b069190613974565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612bde90613267565b90600052602060002090601f016020900481019282612c005760008555612c47565b82601f10612c1957805160ff1916838001178555612c47565b82800160010185558215612c47579182015b82811115612c46578251825591602001919060010190612c2b565b5b509050612c549190612c58565b5090565b5b80821115612c71576000816000905550600101612c59565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cbe81612c89565b8114612cc957600080fd5b50565b600081359050612cdb81612cb5565b92915050565b600060208284031215612cf757612cf6612c7f565b5b6000612d0584828501612ccc565b91505092915050565b60008115159050919050565b612d2381612d0e565b82525050565b6000602082019050612d3e6000830184612d1a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d7e578082015181840152602081019050612d63565b83811115612d8d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612daf82612d44565b612db98185612d4f565b9350612dc9818560208601612d60565b612dd281612d93565b840191505092915050565b60006020820190508181036000830152612df78184612da4565b905092915050565b6000819050919050565b612e1281612dff565b8114612e1d57600080fd5b50565b600081359050612e2f81612e09565b92915050565b600060208284031215612e4b57612e4a612c7f565b5b6000612e5984828501612e20565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8d82612e62565b9050919050565b612e9d81612e82565b82525050565b6000602082019050612eb86000830184612e94565b92915050565b612ec781612e82565b8114612ed257600080fd5b50565b600081359050612ee481612ebe565b92915050565b60008060408385031215612f0157612f00612c7f565b5b6000612f0f85828601612ed5565b9250506020612f2085828601612e20565b9150509250929050565b612f3381612dff565b82525050565b6000602082019050612f4e6000830184612f2a565b92915050565b600080600060608486031215612f6d57612f6c612c7f565b5b6000612f7b86828701612ed5565b9350506020612f8c86828701612ed5565b9250506040612f9d86828701612e20565b9150509250925092565b600060208284031215612fbd57612fbc612c7f565b5b6000612fcb84828501612ed5565b91505092915050565b612fdd81612d0e565b8114612fe857600080fd5b50565b600081359050612ffa81612fd4565b92915050565b6000806040838503121561301757613016612c7f565b5b600061302585828601612ed5565b925050602061303685828601612feb565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61308282612d93565b810181811067ffffffffffffffff821117156130a1576130a061304a565b5b80604052505050565b60006130b4612c75565b90506130c08282613079565b919050565b600067ffffffffffffffff8211156130e0576130df61304a565b5b6130e982612d93565b9050602081019050919050565b82818337600083830152505050565b6000613118613113846130c5565b6130aa565b90508281526020810184848401111561313457613133613045565b5b61313f8482856130f6565b509392505050565b600082601f83011261315c5761315b613040565b5b813561316c848260208601613105565b91505092915050565b6000806000806080858703121561318f5761318e612c7f565b5b600061319d87828801612ed5565b94505060206131ae87828801612ed5565b93505060406131bf87828801612e20565b925050606085013567ffffffffffffffff8111156131e0576131df612c84565b5b6131ec87828801613147565b91505092959194509250565b6000806040838503121561320f5761320e612c7f565b5b600061321d85828601612ed5565b925050602061322e85828601612ed5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061327f57607f821691505b6020821081141561329357613292613238565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006132f5602c83612d4f565b915061330082613299565b604082019050919050565b60006020820190508181036000830152613324816132e8565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613387602183612d4f565b91506133928261332b565b604082019050919050565b600060208201905081810360008301526133b68161337a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613419603883612d4f565b9150613424826133bd565b604082019050919050565b600060208201905081810360008301526134488161340c565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006134ab603183612d4f565b91506134b68261344f565b604082019050919050565b600060208201905081810360008301526134da8161349e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613517602083612d4f565b9150613522826134e1565b602082019050919050565b600060208201905081810360008301526135468161350a565b9050919050565b600081905092915050565b50565b600061356860008361354d565b915061357382613558565b600082019050919050565b60006135898261355b565b9150819050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006135ef602983612d4f565b91506135fa82613593565b604082019050919050565b6000602082019050818103600083015261361e816135e2565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613681602a83612d4f565b915061368c82613625565b604082019050919050565b600060208201905081810360008301526136b081613674565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006136ed601983612d4f565b91506136f8826136b7565b602082019050919050565b6000602082019050818103600083015261371c816136e0565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613759601f83612d4f565b915061376482613723565b602082019050919050565b600060208201905081810360008301526137888161374c565b9050919050565b7f416c6c207468652050696573206861766520616c7265616479206265656e206260008201527f616b65642e000000000000000000000000000000000000000000000000000000602082015250565b60006137eb602583612d4f565b91506137f68261378f565b604082019050919050565b6000602082019050818103600083015261381a816137de565b9050919050565b7f546865205069657320617265206e6f74206f6e2073616c65206174207468652060008201527f6d6f6d656e742e00000000000000000000000000000000000000000000000000602082015250565b600061387d602783612d4f565b915061388882613821565b604082019050919050565b600060208201905081810360008301526138ac81613870565b9050919050565b7f496e73756666696369656e742066756e647320746f2062616b6520612050696560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b600061390f602183612d4f565b915061391a826138b3565b604082019050919050565b6000602082019050818103600083015261393e81613902565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061397f82612dff565b915061398a83612dff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139bf576139be613945565b5b828201905092915050565b60006139d582612dff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a0857613a07613945565b5b600182019050919050565b7f546869732050696520646f65736e27742065786973742e000000000000000000600082015250565b6000613a49601783612d4f565b9150613a5482613a13565b602082019050919050565b60006020820190508181036000830152613a7881613a3c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e2c7b226e616d65223a225060008201527f692d537061636520230000000000000000000000000000000000000000000000602082015250565b6000613b15602983613aae565b9150613b2082613ab9565b602982019050919050565b600081519050919050565b6000613b4182613b2b565b613b4b818561354d565b9350613b5b818560208601612d60565b80840191505092915050565b7f222c226465736372697074696f6e223a2250692d53706163652069732074686560008201527f207365636f6e6420626c6f636b636861696e2067656e6572617469766520617260208201527f742070726f6a6563742066726f6d2052616e7426436f64652e2045616368207060408201527f696563652069732067656e657261746564207573696e6720756e69717565206460608201527f6174612066726f6d207468652077616c6c6574207573656420746f206d696e7460808201527f2069742e5c6e5c6e5b576562736974655d2868747470733a2f2f72616e74616e60a08201527f64636f64652e636f2e756b2f70692d737061636529207c205b5477697474657260c08201527f5d2868747470733a2f2f747769747465722e636f6d2f72616e74616e64636f6460e08201527f655f29222c22696d616765223a22646174613a696d6167652f7376672b786d6c6101008201527f3b6261736536342c00000000000000000000000000000000000000000000000061012082015250565b6000613cf661012883613aae565b9150613d0182613b67565b61012882019050919050565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a202260008201527f436972636c6573222c202276616c7565223a2022000000000000000000000000602082015250565b6000613d69603483613aae565b9150613d7482613d0d565b603482019050919050565b7f227d2c7b2274726169745f74797065223a2022436f6c6f75722031222c20227660008201527f616c7565223a2022230000000000000000000000000000000000000000000000602082015250565b6000613ddb602983613aae565b9150613de682613d7f565b602982019050919050565b6000613dfc82612d44565b613e068185613aae565b9350613e16818560208601612d60565b80840191505092915050565b7f227d2c7b2274726169745f74797065223a2022436f6c6f75722032222c20227660008201527f616c7565223a2022230000000000000000000000000000000000000000000000602082015250565b6000613e7e602983613aae565b9150613e8982613e22565b602982019050919050565b7f227d2c7b2274726169745f74797065223a2022436f6c6f75722033222c20227660008201527f616c7565223a2022230000000000000000000000000000000000000000000000602082015250565b6000613ef0602983613aae565b9150613efb82613e94565b602982019050919050565b7f227d2c7b2274726169745f74797065223a2022436f6c6f75722034222c20227660008201527f616c7565223a2022230000000000000000000000000000000000000000000000602082015250565b6000613f62602983613aae565b9150613f6d82613f06565b602982019050919050565b7f227d2c7b2274726169745f74797065223a20224261636b67726f756e64222c2060008201527f2276616c7565223a202223000000000000000000000000000000000000000000602082015250565b6000613fd4602b83613aae565b9150613fdf82613f78565b602b82019050919050565b7f227d5d2c20226261636b67726f756e645f636f6c6f72223a2022230000000000600082015250565b6000614020601b83613aae565b915061402b82613fea565b601b82019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061406c600283613aae565b915061407782614036565b600282019050919050565b600061408d82613b08565b9150614099828c613b36565b91506140a482613ce8565b91506140b0828b613b36565b91506140bb82613d5c565b91506140c7828a613b36565b91506140d282613dce565b91506140de8289613df1565b91506140e982613e71565b91506140f58288613df1565b915061410082613ee3565b915061410c8287613df1565b915061411782613f55565b91506141238286613df1565b915061412e82613fc7565b915061413a8285613df1565b915061414582614013565b91506141518284613df1565b915061415c8261405f565b91508190509a9950505050505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141cb602683612d4f565b91506141d68261416f565b604082019050919050565b600060208201905081810360008301526141fa816141be565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061425d602c83612d4f565b915061426882614201565b604082019050919050565b6000602082019050818103600083015261428c81614250565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006142ef602983612d4f565b91506142fa82614293565b604082019050919050565b6000602082019050818103600083015261431e816142e2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614381602483612d4f565b915061438c82614325565b604082019050919050565b600060208201905081810360008301526143b081614374565b9050919050565b60006143c282612dff565b91506143cd83612dff565b9250828210156143e0576143df613945565b5b828203905092915050565b6000815190506143fa81612e09565b92915050565b60006020828403121561441657614415612c7f565b5b6000614424848285016143eb565b91505092915050565b60008160601b9050919050565b60006144458261442d565b9050919050565b60006144578261443a565b9050919050565b61446f61446a82612e82565b61444c565b82525050565b6000614481828561445e565b6014820191506144918284613df1565b91508190509392505050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006144f9603283612d4f565b91506145048261449d565b604082019050919050565b60006020820190508181036000830152614528816144ec565b9050919050565b600060408201905081810360008301526145498185612da4565b90506145586020830184612f2a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061459982612dff565b91506145a483612dff565b9250826145b4576145b361455f565b5b828206905092915050565b7f3c7376672069643d227073000000000000000000000000000000000000000000600082015250565b60006145f5600b83613aae565b9150614600826145bf565b600b82019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667222077696474683d223132303022206865696768743d2231323030222060208201527f76696577426f783d223020302031323030203132303022207374796c653d226260408201527f61636b67726f756e642d636f6c6f723a23000000000000000000000000000000606082015250565b60006146b3607183613aae565b91506146be8261460b565b607182019050919050565b7f3b2220636c6173733d226d61782d772d66756c6c223e00000000000000000000600082015250565b60006146ff601683613aae565b915061470a826146c9565b601682019050919050565b7f3c2f7376673e0000000000000000000000000000000000000000000000000000600082015250565b600061474b600683613aae565b915061475682614715565b600682019050919050565b600061476c826145e8565b91506147788287613b36565b9150614783826146a6565b915061478f8286613df1565b915061479a826146f2565b91506147a68285613b36565b91506147b28284613b36565b91506147bd8261473e565b915081905095945050505050565b60006147d682612dff565b91506147e183612dff565b9250826147f1576147f061455f565b5b828204905092915050565b600061480782612dff565b915061481283612dff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561484b5761484a613945565b5b828202905092915050565b60008160011c9050919050565b6000808291508390505b60018511156148ad5780860481111561488957614888613945565b5b60018516156148985780820291505b80810290506148a685614856565b945061486d565b94509492505050565b6000826148c65760019050614982565b816148d45760009050614982565b81600181146148ea57600281146148f457614923565b6001915050614982565b60ff84111561490657614905613945565b5b8360020a91508482111561491d5761491c613945565b5b50614982565b5060208310610133831016604e8410600b84101617156149585782820a90508381111561495357614952613945565b5b614982565b6149658484846001614863565b9250905081840481111561497c5761497b613945565b5b81810290505b9392505050565b600061499482612dff565b915061499f83612dff565b92506149cc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846148b6565b905092915050565b600060ff82169050919050565b60006149ec826149d4565b91506149f7836149d4565b925082614a0757614a0661455f565b5b828204905092915050565b6000614a1d826149d4565b9150614a28836149d4565b92508160ff0483118215151615614a4257614a41613945565b5b828202905092915050565b6000614a58826149d4565b9150614a63836149d4565b925082821015614a7657614a75613945565b5b828203905092915050565b600082825260208201905092915050565b6000614a9d82613b2b565b614aa78185614a81565b9350614ab7818560208601612d60565b614ac081612d93565b840191505092915050565b6000608082019050614ae06000830187612e94565b614aed6020830186612e94565b614afa6040830185612f2a565b8181036060830152614b0c8184614a92565b905095945050505050565b600081519050614b2681612cb5565b92915050565b600060208284031215614b4257614b41612c7f565b5b6000614b5084828501614b17565b91505092915050565b7f3c7374796c653e23707300000000000000000000000000000000000000000000600082015250565b6000614b8f600a83613aae565b9150614b9a82614b59565b600a82019050919050565b7f20636972636c657b7472616e73666f726d2d6f726967696e3a2063656e74657260008201527f3b7d237073000000000000000000000000000000000000000000000000000000602082015250565b6000614c01602583613aae565b9150614c0c82614ba5565b602582019050919050565b7f20636972636c653a6e74682d6368696c6428336e297b616e696d6174696f6e3a60008201527f6153200000000000000000000000000000000000000000000000000000000000602082015250565b6000614c73602383613aae565b9150614c7e82614c17565b602382019050919050565b7f7320656173652d696e2d6f757420000000000000000000000000000000000000600082015250565b6000614cbf600e83613aae565b9150614cca82614c89565b600e82019050919050565b7f7320696e66696e69746520616c7465726e61746520626f74683b7d2370730000600082015250565b6000614d0b601e83613aae565b9150614d1682614cd5565b601e82019050919050565b7f20636972636c653a6e74682d6368696c6428356e297b616e696d6174696f6e3a60008201527f6158200000000000000000000000000000000000000000000000000000000000602082015250565b6000614d7d602383613aae565b9150614d8882614d21565b602382019050919050565b7f20636972636c653a6e74682d6368696c6428376e297b616e696d6174696f6e3a60008201527f6159200000000000000000000000000000000000000000000000000000000000602082015250565b6000614def602383613aae565b9150614dfa82614d93565b602382019050919050565b7f73206c696e656172200000000000000000000000000000000000000000000000600082015250565b6000614e3b600983613aae565b9150614e4682614e05565b600982019050919050565b7f7320696e66696e69746520616c7465726e61746520626f74683b7d406b65796660008201527f72616d65732061537b30257b7472616e73666f726d3a7363616c652831293b7d60208201527f313030257b7472616e73666f726d3a7363616c6528312e333134293b7d7d406b60408201527f65796672616d65732061587b30257b7472616e73666f726d3a7472616e736c6160608201527f746558283029207363616c652831293b7d313030257b7472616e73666f726d3a60808201527f7472616e736c6174655828313331707829207363616c6528332e3134293b7d7d60a08201527f406b65796672616d65732061597b30257b7472616e73666f726d3a7472616e7360c08201527f6c617465592830293b7d313030257b7472616e73666f726d3a7472616e736c6160e08201527f746559282d33317078293b7d7d3c2f7374796c653e000000000000000000000061010082015250565b6000614fb961011583613aae565b9150614fc482614e51565b61011582019050919050565b6000614fdb82614b82565b9150614fe7828d613b36565b9150614ff282614bf4565b9150614ffe828c613b36565b915061500982614c66565b9150615015828b613df1565b915061502082614cb2565b915061502c828a613df1565b915061503782614cfe565b91506150438289613b36565b915061504e82614d70565b915061505a8288613df1565b915061506582614cb2565b91506150718287613df1565b915061507c82614cfe565b91506150888286613b36565b915061509382614de2565b915061509f8285613df1565b91506150aa82614e2e565b91506150b68284613df1565b91506150c182614fab565b91508190509b9a5050505050505050505050565b7f3c636972636c652063783d220000000000000000000000000000000000000000600082015250565b600061510b600c83613aae565b9150615116826150d5565b600c82019050919050565b7f222063793d220000000000000000000000000000000000000000000000000000600082015250565b6000615157600683613aae565b915061516282615121565b600682019050919050565b7f2220723d22000000000000000000000000000000000000000000000000000000600082015250565b60006151a3600583613aae565b91506151ae8261516d565b600582019050919050565b7f222066696c6c3d22230000000000000000000000000000000000000000000000600082015250565b60006151ef600983613aae565b91506151fa826151b9565b600982019050919050565b7f22207374796c653d226d69782d626c656e642d6d6f64653a2000000000000000600082015250565b600061523b601983613aae565b915061524682615205565b601982019050919050565b60008190508160005260206000209050919050565b6000815461527381613267565b61527d8186613aae565b9450600182166000811461529857600181146152a9576152dc565b60ff198316865281860193506152dc565b6152b285615251565b60005b838110156152d4578154818901526001820191506020810190506152b5565b838801955050505b50505092915050565b7f3b206f7061636974793a20302e00000000000000000000000000000000000000600082015250565b600061531b600d83613aae565b9150615326826152e5565b600d82019050919050565b7f3b223e3c2f636972636c653e0000000000000000000000000000000000000000600082015250565b6000615367600c83613aae565b915061537282615331565b600c82019050919050565b6000615389828a613b36565b9150615394826150fe565b91506153a08289613b36565b91506153ab8261514a565b91506153b78288613b36565b91506153c282615196565b91506153ce8287613b36565b91506153d9826151e2565b91506153e58286613df1565b91506153f08261522e565b91506153fc8285615266565b91506154078261530e565b91506154138284613b36565b915061541e8261535a565b915081905098975050505050505050565b600061543a826149d4565b9150615445836149d4565b92508260ff0382111561545b5761545a613945565b5b828201905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061549c602083612d4f565b91506154a782615466565b602082019050919050565b600060208201905081810360008301526154cb8161548f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615508601c83612d4f565b9150615513826154d2565b602082019050919050565b60006020820190508181036000830152615537816154fb565b905091905056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212208b0b276d7d9be18d38114c2f8ca8c5711713a18dcc8320a4cd03d5e5e21ac69364736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101815760003560e01c80638da5cb5b116100d1578063b0de262e1161008a578063daaeec8611610064578063daaeec8614610556578063e0df72161461056d578063e985e9c514610598578063f2fde38b146105d557610181565b8063b0de262e146104e6578063b88d4fde146104f0578063c87b56dd1461051957610181565b80638da5cb5b146103c257806395d89b41146103ed57806395ec54db14610418578063a22cb46514610443578063a67f582d1461046c578063ade80b6c146104a957610181565b806324600fc31161013e5780636352211e116101185780636352211e1461030657806370a0823114610343578063715018a6146103805780638a333b501461039757610181565b806324600fc3146102a857806342842e0e146102b257806356463eaf146102db57610181565b806301ffc9a71461018657806306fdde03146101c3578063081812fc146101ee578063095ea7b31461022b57806318160ddd1461025457806323b872dd1461027f575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190612ce1565b6105fe565b6040516101ba9190612d29565b60405180910390f35b3480156101cf57600080fd5b506101d86106e0565b6040516101e59190612ddd565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190612e35565b610772565b6040516102229190612ea3565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d9190612eea565b6107f7565b005b34801561026057600080fd5b5061026961090f565b6040516102769190612f39565b60405180910390f35b34801561028b57600080fd5b506102a660048036038101906102a19190612f54565b610919565b005b6102b0610979565b005b3480156102be57600080fd5b506102d960048036038101906102d49190612f54565b610a6e565b005b3480156102e757600080fd5b506102f0610a8e565b6040516102fd9190612f39565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190612e35565b610a94565b60405161033a9190612ea3565b60405180910390f35b34801561034f57600080fd5b5061036a60048036038101906103659190612fa7565b610b46565b6040516103779190612f39565b60405180910390f35b34801561038c57600080fd5b50610395610bfe565b005b3480156103a357600080fd5b506103ac610d3b565b6040516103b99190612f39565b60405180910390f35b3480156103ce57600080fd5b506103d7610d41565b6040516103e49190612ea3565b60405180910390f35b3480156103f957600080fd5b50610402610d6b565b60405161040f9190612ddd565b60405180910390f35b34801561042457600080fd5b5061042d610dfd565b60405161043a9190612f39565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190613000565b610e03565b005b34801561047857600080fd5b50610493600480360381019061048e9190612e35565b610f84565b6040516104a09190612ddd565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612e35565b611029565b6040516104dd9190612ddd565b60405180910390f35b6104ee6110c9565b005b3480156104fc57600080fd5b5061051760048036038101906105129190613175565b611271565b005b34801561052557600080fd5b50610540600480360381019061053b9190612e35565b6112d3565b60405161054d9190612ddd565b60405180910390f35b34801561056257600080fd5b5061056b6115d6565b005b34801561057957600080fd5b5061058261167e565b60405161058f9190612d29565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba91906131f8565b611691565b6040516105cc9190612d29565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190612fa7565b611725565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106c957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106d957506106d8826118d1565b5b9050919050565b6060600080546106ef90613267565b80601f016020809104026020016040519081016040528092919081815260200182805461071b90613267565b80156107685780601f1061073d57610100808354040283529160200191610768565b820191906000526020600020905b81548152906001019060200180831161074b57829003601f168201915b5050505050905090565b600061077d8261193b565b6107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b39061330b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080282610a94565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a9061339d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108926119a7565b73ffffffffffffffffffffffffffffffffffffffff1614806108c157506108c0816108bb6119a7565b611691565b5b610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f79061342f565b60405180910390fd5b61090a83836119af565b505050565b6000600a54905090565b61092a6109246119a7565b82611a68565b610969576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610960906134c1565b60405180910390fd5b610974838383611b46565b505050565b6109816119a7565b73ffffffffffffffffffffffffffffffffffffffff1661099f610d41565b73ffffffffffffffffffffffffffffffffffffffff16146109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ec9061352d565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610a1b9061357e565b60006040518083038185875af1925050503d8060008114610a58576040519150601f19603f3d011682016040523d82523d6000602084013e610a5d565b606091505b5050905080610a6b57600080fd5b50565b610a8983838360405180602001604052806000815250611271565b505050565b600a5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3490613605565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90613697565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c066119a7565b73ffffffffffffffffffffffffffffffffffffffff16610c24610d41565b73ffffffffffffffffffffffffffffffffffffffff1614610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c719061352d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60095481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d7a90613267565b80601f0160208091040260200160405190810160405280929190818152602001828054610da690613267565b8015610df35780601f10610dc857610100808354040283529160200191610df3565b820191906000526020600020905b815481529060010190602001808311610dd657829003601f168201915b5050505050905090565b60085481565b610e0b6119a7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090613703565b60405180910390fd5b8060056000610e866119a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f336119a7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f789190612d29565b60405180910390a35050565b6060600c60008381526020019081526020016000208054610fa490613267565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd090613267565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b50505050509050919050565b600c602052806000526040600020600091509050805461104890613267565b80601f016020809104026020016040519081016040528092919081815260200182805461107490613267565b80156110c15780601f10611096576101008083540402835291602001916110c1565b820191906000526020600020905b8154815290600101906020018083116110a457829003601f168201915b505050505081565b6002600654141561110f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111069061376f565b60405180910390fd5b600260068190555060095461112261090f565b10611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990613801565b60405180910390fd5b600760149054906101000a900460ff166111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890613893565b60405180910390fd5b6008543410156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90613925565b60405180910390fd5b6000600161120261090f565b61120c9190613974565b9050600061121933611da2565b90506112253383611e8c565b80600c6000848152602001908152602001600020908051906020019061124c929190612bd2565b50600a6000815480929190611260906139ca565b919050555050506001600681905550565b61128261127c6119a7565b83611a68565b6112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b8906134c1565b60405180910390fd5b6112cd84848484611eaa565b50505050565b60606112de8261193b565b61131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613a5f565b60405180910390fd5b600061132883610f84565b90506000600667ffffffffffffffff8111156113475761134661304a565b5b60405190808252806020026020018201604052801561137a57816020015b60608152602001906001900390816113655790505b5090506000600a61138e846000600d611f06565b6113989190613974565b90506040518060400160405280600681526020017f6666666666660000000000000000000000000000000000000000000000000000815250826000815181106113e4576113e3613a7f565b5b60200260200101819052506113fc8360006006611f48565b826001815181106114105761140f613a7f565b5b60200260200101819052506114288360026006611f48565b8260028151811061143c5761143b613a7f565b5b60200260200101819052506114548360146006611f48565b8260038151811061146857611467613a7f565b5b60200260200101819052506114808360166006611f48565b8260048151811061149457611493613a7f565b5b60200260200101819052506114ac8360206006611f48565b826005815181106114c0576114bf613a7f565b5b602002602001018190525060006114d986858486612030565b905060006114e6876120a0565b6114ef83612201565b6114f8856120a0565b8660018151811061150c5761150b613a7f565b5b60200260200101518760028151811061152857611527613a7f565b5b60200260200101518860038151811061154457611543613a7f565b5b6020026020010151896004815181106115605761155f613a7f565b5b60200260200101518a60058151811061157c5761157b613a7f565b5b60200260200101518b60058151811061159857611597613a7f565b5b60200260200101516040516020016115b899989796959493929190614082565b60405160208183030381529060405290508095505050505050919050565b6115de6119a7565b73ffffffffffffffffffffffffffffffffffffffff166115fc610d41565b73ffffffffffffffffffffffffffffffffffffffff1614611652576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116499061352d565b60405180910390fd5b600760149054906101000a900460ff1615600760146101000a81548160ff021916908315150217905550565b600760149054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61172d6119a7565b73ffffffffffffffffffffffffffffffffffffffff1661174b610d41565b73ffffffffffffffffffffffffffffffffffffffff16146117a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117989061352d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611808906141e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a2283610a94565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a738261193b565b611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa990614273565b60405180910390fd5b6000611abd83610a94565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b2c57508373ffffffffffffffffffffffffffffffffffffffff16611b1484610772565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b3d5750611b3c8185611691565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b6682610a94565b73ffffffffffffffffffffffffffffffffffffffff1614611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614305565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390614397565b60405180910390fd5b611c37838383612399565b611c426000826119af565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c9291906143b7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce99190613974565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060003073ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401611ddf9190612ea3565b60206040518083038186803b158015611df757600080fd5b505afa158015611e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2f9190614400565b9050600080821115611e765783611e45836120a0565b604051602001611e56929190614475565b6040516020818303038152906040528051906020012060001c9050611e7a565b8390505b611e838161239e565b92505050919050565b611ea6828260405180602001604052806000815250612561565b5050565b611eb5848484611b46565b611ec1848484846125bc565b611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef79061450f565b60405180910390fd5b50505050565b6000818484604051602001611f1c92919061452f565b6040516020818303038152906040528051906020012060001c611f3f919061458e565b90509392505050565b6060600084905060008367ffffffffffffffff811115611f6b57611f6a61304a565b5b6040519080825280601f01601f191660200182016040528015611f9d5781602001600182028036833780820191505090505b50905060005b8481101561202357828187611fb89190613974565b81518110611fc957611fc8613a7f565b5b602001015160f81c60f81b828281518110611fe757611fe6613a7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611fa3565b5080925050509392505050565b6060600061203d866120a0565b8360058151811061205157612050613a7f565b5b60200260200101516120638888612753565b612070888888600361285c565b6040516020016120839493929190614761565b604051602081830303815290604052905080915050949350505050565b606060008214156120e8576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121fc565b600082905060005b6000821461211a578080612103906139ca565b915050600a8261211391906147cb565b91506120f0565b60008167ffffffffffffffff8111156121365761213561304a565b5b6040519080825280601f01601f1916602001820160405280156121685781602001600182028036833780820191505090505b5090505b600085146121f55760018261218191906143b7565b9150600a85612190919061458e565b603061219c9190613974565b60f81b8183815181106121b2576121b1613a7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121ee91906147cb565b945061216c565b8093505050505b919050565b6060600082519050600081141561222a5760405180602001604052806000815250915050612394565b6000600360028361223b9190613974565b61224591906147cb565b600461225191906147fc565b905060006020826122629190613974565b67ffffffffffffffff81111561227b5761227a61304a565b5b6040519080825280601f01601f1916602001820160405280156122ad5781602001600182028036833780820191505090505b509050600060405180606001604052806040815260200161553f604091399050600181016020830160005b868110156123515760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b905080845260048401935050506122d8565b50600386066001811461236b576002811461237b57612386565b613d3d60f01b6002830352612386565b603d60f81b60018303525b508484525050819450505050505b919050565b505050565b60606000602867ffffffffffffffff8111156123bd576123bc61304a565b5b6040519080825280601f01601f1916602001820160405280156123ef5781602001600182028036833780820191505090505b50905060005b601481101561255757600081601361240d91906143b7565b600861241991906147fc565b60026124259190614989565b8573ffffffffffffffffffffffffffffffffffffffff1661244691906147cb565b60f81b9050600060108260f81c61245d91906149e1565b60f81b905060008160f81c60106124749190614a12565b8360f81c6124829190614a4d565b60f81b9050612490826129ab565b8585600261249e91906147fc565b815181106124af576124ae613a7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506124e7816129ab565b8560018660026124f791906147fc565b6125019190613974565b8151811061251257612511613a7f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350505050808061254f906139ca565b9150506123f5565b5080915050919050565b61256b83836129f1565b61257860008484846125bc565b6125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae9061450f565b60405180910390fd5b505050565b60006125dd8473ffffffffffffffffffffffffffffffffffffffff16612bbf565b15612746578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126066119a7565b8786866040518563ffffffff1660e01b81526004016126289493929190614acb565b602060405180830381600087803b15801561264257600080fd5b505af192505050801561267357506040513d601f19601f820116820180604052508101906126709190614b2c565b60015b6126f6573d80600081146126a3576040519150601f19603f3d011682016040523d82523d6000602084013e6126a8565b606091505b506000815114156126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e59061450f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061274b565b600190505b949350505050565b60606000612760846120a0565b612769856120a0565b61278a6127798660016005611f06565b60116127859190613974565b6120a0565b61279f61279a8760026005611f06565b6120a0565b6127a8886120a0565b6127c96127b88960036005611f06565b60176127c49190613974565b6120a0565b6127de6127d98a60046003611f06565b6120a0565b6127e78b6120a0565b6128076127f68c600580611f06565b601d6128029190613974565b6120a0565b6128286128178d60066004611f06565b60086128239190613974565b6120a0565b6040516020016128419a99989796959493929190614fd0565b60405160208183030381529060405290508091505092915050565b606060006060600091505b8582101561299e578061289161288c8987612881906139ca565b9750876104b0611f06565b6120a0565b6128b26128ad8a886128a2906139ca565b9850886104b0611f06565b6120a0565b6128d36128ce8b896128c3906139ca565b995089610320611f06565b6120a0565b886128ec8c8a6128e2906139ca565b9a508a8c51611f06565b815181106128fd576128fc613a7f565b5b6020026020010151600b6129238d8b612915906139ca565b9b508b600b80549050611f06565b8154811061293457612933613a7f565b5b9060005260206000200161296a600a61295b8f8d612951906139ca565b9d508d6041611f06565b6129659190613974565b6120a0565b604051602001612980979695949392919061537d565b60405160208183030381529060405290508180600101925050612867565b8092505050949350505050565b6000600a8260f81c60ff1610156129d65760308260f81c6129cc919061542f565b60f81b90506129ec565b60578260f81c6129e6919061542f565b60f81b90505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a58906154b2565b60405180910390fd5b612a6a8161193b565b15612aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa19061551e565b60405180910390fd5b612ab660008383612399565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b069190613974565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612bde90613267565b90600052602060002090601f016020900481019282612c005760008555612c47565b82601f10612c1957805160ff1916838001178555612c47565b82800160010185558215612c47579182015b82811115612c46578251825591602001919060010190612c2b565b5b509050612c549190612c58565b5090565b5b80821115612c71576000816000905550600101612c59565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cbe81612c89565b8114612cc957600080fd5b50565b600081359050612cdb81612cb5565b92915050565b600060208284031215612cf757612cf6612c7f565b5b6000612d0584828501612ccc565b91505092915050565b60008115159050919050565b612d2381612d0e565b82525050565b6000602082019050612d3e6000830184612d1a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d7e578082015181840152602081019050612d63565b83811115612d8d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612daf82612d44565b612db98185612d4f565b9350612dc9818560208601612d60565b612dd281612d93565b840191505092915050565b60006020820190508181036000830152612df78184612da4565b905092915050565b6000819050919050565b612e1281612dff565b8114612e1d57600080fd5b50565b600081359050612e2f81612e09565b92915050565b600060208284031215612e4b57612e4a612c7f565b5b6000612e5984828501612e20565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8d82612e62565b9050919050565b612e9d81612e82565b82525050565b6000602082019050612eb86000830184612e94565b92915050565b612ec781612e82565b8114612ed257600080fd5b50565b600081359050612ee481612ebe565b92915050565b60008060408385031215612f0157612f00612c7f565b5b6000612f0f85828601612ed5565b9250506020612f2085828601612e20565b9150509250929050565b612f3381612dff565b82525050565b6000602082019050612f4e6000830184612f2a565b92915050565b600080600060608486031215612f6d57612f6c612c7f565b5b6000612f7b86828701612ed5565b9350506020612f8c86828701612ed5565b9250506040612f9d86828701612e20565b9150509250925092565b600060208284031215612fbd57612fbc612c7f565b5b6000612fcb84828501612ed5565b91505092915050565b612fdd81612d0e565b8114612fe857600080fd5b50565b600081359050612ffa81612fd4565b92915050565b6000806040838503121561301757613016612c7f565b5b600061302585828601612ed5565b925050602061303685828601612feb565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61308282612d93565b810181811067ffffffffffffffff821117156130a1576130a061304a565b5b80604052505050565b60006130b4612c75565b90506130c08282613079565b919050565b600067ffffffffffffffff8211156130e0576130df61304a565b5b6130e982612d93565b9050602081019050919050565b82818337600083830152505050565b6000613118613113846130c5565b6130aa565b90508281526020810184848401111561313457613133613045565b5b61313f8482856130f6565b509392505050565b600082601f83011261315c5761315b613040565b5b813561316c848260208601613105565b91505092915050565b6000806000806080858703121561318f5761318e612c7f565b5b600061319d87828801612ed5565b94505060206131ae87828801612ed5565b93505060406131bf87828801612e20565b925050606085013567ffffffffffffffff8111156131e0576131df612c84565b5b6131ec87828801613147565b91505092959194509250565b6000806040838503121561320f5761320e612c7f565b5b600061321d85828601612ed5565b925050602061322e85828601612ed5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061327f57607f821691505b6020821081141561329357613292613238565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006132f5602c83612d4f565b915061330082613299565b604082019050919050565b60006020820190508181036000830152613324816132e8565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613387602183612d4f565b91506133928261332b565b604082019050919050565b600060208201905081810360008301526133b68161337a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613419603883612d4f565b9150613424826133bd565b604082019050919050565b600060208201905081810360008301526134488161340c565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006134ab603183612d4f565b91506134b68261344f565b604082019050919050565b600060208201905081810360008301526134da8161349e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613517602083612d4f565b9150613522826134e1565b602082019050919050565b600060208201905081810360008301526135468161350a565b9050919050565b600081905092915050565b50565b600061356860008361354d565b915061357382613558565b600082019050919050565b60006135898261355b565b9150819050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006135ef602983612d4f565b91506135fa82613593565b604082019050919050565b6000602082019050818103600083015261361e816135e2565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613681602a83612d4f565b915061368c82613625565b604082019050919050565b600060208201905081810360008301526136b081613674565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006136ed601983612d4f565b91506136f8826136b7565b602082019050919050565b6000602082019050818103600083015261371c816136e0565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613759601f83612d4f565b915061376482613723565b602082019050919050565b600060208201905081810360008301526137888161374c565b9050919050565b7f416c6c207468652050696573206861766520616c7265616479206265656e206260008201527f616b65642e000000000000000000000000000000000000000000000000000000602082015250565b60006137eb602583612d4f565b91506137f68261378f565b604082019050919050565b6000602082019050818103600083015261381a816137de565b9050919050565b7f546865205069657320617265206e6f74206f6e2073616c65206174207468652060008201527f6d6f6d656e742e00000000000000000000000000000000000000000000000000602082015250565b600061387d602783612d4f565b915061388882613821565b604082019050919050565b600060208201905081810360008301526138ac81613870565b9050919050565b7f496e73756666696369656e742066756e647320746f2062616b6520612050696560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b600061390f602183612d4f565b915061391a826138b3565b604082019050919050565b6000602082019050818103600083015261393e81613902565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061397f82612dff565b915061398a83612dff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139bf576139be613945565b5b828201905092915050565b60006139d582612dff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a0857613a07613945565b5b600182019050919050565b7f546869732050696520646f65736e27742065786973742e000000000000000000600082015250565b6000613a49601783612d4f565b9150613a5482613a13565b602082019050919050565b60006020820190508181036000830152613a7881613a3c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e2c7b226e616d65223a225060008201527f692d537061636520230000000000000000000000000000000000000000000000602082015250565b6000613b15602983613aae565b9150613b2082613ab9565b602982019050919050565b600081519050919050565b6000613b4182613b2b565b613b4b818561354d565b9350613b5b818560208601612d60565b80840191505092915050565b7f222c226465736372697074696f6e223a2250692d53706163652069732074686560008201527f207365636f6e6420626c6f636b636861696e2067656e6572617469766520617260208201527f742070726f6a6563742066726f6d2052616e7426436f64652e2045616368207060408201527f696563652069732067656e657261746564207573696e6720756e69717565206460608201527f6174612066726f6d207468652077616c6c6574207573656420746f206d696e7460808201527f2069742e5c6e5c6e5b576562736974655d2868747470733a2f2f72616e74616e60a08201527f64636f64652e636f2e756b2f70692d737061636529207c205b5477697474657260c08201527f5d2868747470733a2f2f747769747465722e636f6d2f72616e74616e64636f6460e08201527f655f29222c22696d616765223a22646174613a696d6167652f7376672b786d6c6101008201527f3b6261736536342c00000000000000000000000000000000000000000000000061012082015250565b6000613cf661012883613aae565b9150613d0182613b67565b61012882019050919050565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a202260008201527f436972636c6573222c202276616c7565223a2022000000000000000000000000602082015250565b6000613d69603483613aae565b9150613d7482613d0d565b603482019050919050565b7f227d2c7b2274726169745f74797065223a2022436f6c6f75722031222c20227660008201527f616c7565223a2022230000000000000000000000000000000000000000000000602082015250565b6000613ddb602983613aae565b9150613de682613d7f565b602982019050919050565b6000613dfc82612d44565b613e068185613aae565b9350613e16818560208601612d60565b80840191505092915050565b7f227d2c7b2274726169745f74797065223a2022436f6c6f75722032222c20227660008201527f616c7565223a2022230000000000000000000000000000000000000000000000602082015250565b6000613e7e602983613aae565b9150613e8982613e22565b602982019050919050565b7f227d2c7b2274726169745f74797065223a2022436f6c6f75722033222c20227660008201527f616c7565223a2022230000000000000000000000000000000000000000000000602082015250565b6000613ef0602983613aae565b9150613efb82613e94565b602982019050919050565b7f227d2c7b2274726169745f74797065223a2022436f6c6f75722034222c20227660008201527f616c7565223a2022230000000000000000000000000000000000000000000000602082015250565b6000613f62602983613aae565b9150613f6d82613f06565b602982019050919050565b7f227d2c7b2274726169745f74797065223a20224261636b67726f756e64222c2060008201527f2276616c7565223a202223000000000000000000000000000000000000000000602082015250565b6000613fd4602b83613aae565b9150613fdf82613f78565b602b82019050919050565b7f227d5d2c20226261636b67726f756e645f636f6c6f72223a2022230000000000600082015250565b6000614020601b83613aae565b915061402b82613fea565b601b82019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061406c600283613aae565b915061407782614036565b600282019050919050565b600061408d82613b08565b9150614099828c613b36565b91506140a482613ce8565b91506140b0828b613b36565b91506140bb82613d5c565b91506140c7828a613b36565b91506140d282613dce565b91506140de8289613df1565b91506140e982613e71565b91506140f58288613df1565b915061410082613ee3565b915061410c8287613df1565b915061411782613f55565b91506141238286613df1565b915061412e82613fc7565b915061413a8285613df1565b915061414582614013565b91506141518284613df1565b915061415c8261405f565b91508190509a9950505050505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141cb602683612d4f565b91506141d68261416f565b604082019050919050565b600060208201905081810360008301526141fa816141be565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061425d602c83612d4f565b915061426882614201565b604082019050919050565b6000602082019050818103600083015261428c81614250565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006142ef602983612d4f565b91506142fa82614293565b604082019050919050565b6000602082019050818103600083015261431e816142e2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614381602483612d4f565b915061438c82614325565b604082019050919050565b600060208201905081810360008301526143b081614374565b9050919050565b60006143c282612dff565b91506143cd83612dff565b9250828210156143e0576143df613945565b5b828203905092915050565b6000815190506143fa81612e09565b92915050565b60006020828403121561441657614415612c7f565b5b6000614424848285016143eb565b91505092915050565b60008160601b9050919050565b60006144458261442d565b9050919050565b60006144578261443a565b9050919050565b61446f61446a82612e82565b61444c565b82525050565b6000614481828561445e565b6014820191506144918284613df1565b91508190509392505050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006144f9603283612d4f565b91506145048261449d565b604082019050919050565b60006020820190508181036000830152614528816144ec565b9050919050565b600060408201905081810360008301526145498185612da4565b90506145586020830184612f2a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061459982612dff565b91506145a483612dff565b9250826145b4576145b361455f565b5b828206905092915050565b7f3c7376672069643d227073000000000000000000000000000000000000000000600082015250565b60006145f5600b83613aae565b9150614600826145bf565b600b82019050919050565b7f2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f60008201527f737667222077696474683d223132303022206865696768743d2231323030222060208201527f76696577426f783d223020302031323030203132303022207374796c653d226260408201527f61636b67726f756e642d636f6c6f723a23000000000000000000000000000000606082015250565b60006146b3607183613aae565b91506146be8261460b565b607182019050919050565b7f3b2220636c6173733d226d61782d772d66756c6c223e00000000000000000000600082015250565b60006146ff601683613aae565b915061470a826146c9565b601682019050919050565b7f3c2f7376673e0000000000000000000000000000000000000000000000000000600082015250565b600061474b600683613aae565b915061475682614715565b600682019050919050565b600061476c826145e8565b91506147788287613b36565b9150614783826146a6565b915061478f8286613df1565b915061479a826146f2565b91506147a68285613b36565b91506147b28284613b36565b91506147bd8261473e565b915081905095945050505050565b60006147d682612dff565b91506147e183612dff565b9250826147f1576147f061455f565b5b828204905092915050565b600061480782612dff565b915061481283612dff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561484b5761484a613945565b5b828202905092915050565b60008160011c9050919050565b6000808291508390505b60018511156148ad5780860481111561488957614888613945565b5b60018516156148985780820291505b80810290506148a685614856565b945061486d565b94509492505050565b6000826148c65760019050614982565b816148d45760009050614982565b81600181146148ea57600281146148f457614923565b6001915050614982565b60ff84111561490657614905613945565b5b8360020a91508482111561491d5761491c613945565b5b50614982565b5060208310610133831016604e8410600b84101617156149585782820a90508381111561495357614952613945565b5b614982565b6149658484846001614863565b9250905081840481111561497c5761497b613945565b5b81810290505b9392505050565b600061499482612dff565b915061499f83612dff565b92506149cc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846148b6565b905092915050565b600060ff82169050919050565b60006149ec826149d4565b91506149f7836149d4565b925082614a0757614a0661455f565b5b828204905092915050565b6000614a1d826149d4565b9150614a28836149d4565b92508160ff0483118215151615614a4257614a41613945565b5b828202905092915050565b6000614a58826149d4565b9150614a63836149d4565b925082821015614a7657614a75613945565b5b828203905092915050565b600082825260208201905092915050565b6000614a9d82613b2b565b614aa78185614a81565b9350614ab7818560208601612d60565b614ac081612d93565b840191505092915050565b6000608082019050614ae06000830187612e94565b614aed6020830186612e94565b614afa6040830185612f2a565b8181036060830152614b0c8184614a92565b905095945050505050565b600081519050614b2681612cb5565b92915050565b600060208284031215614b4257614b41612c7f565b5b6000614b5084828501614b17565b91505092915050565b7f3c7374796c653e23707300000000000000000000000000000000000000000000600082015250565b6000614b8f600a83613aae565b9150614b9a82614b59565b600a82019050919050565b7f20636972636c657b7472616e73666f726d2d6f726967696e3a2063656e74657260008201527f3b7d237073000000000000000000000000000000000000000000000000000000602082015250565b6000614c01602583613aae565b9150614c0c82614ba5565b602582019050919050565b7f20636972636c653a6e74682d6368696c6428336e297b616e696d6174696f6e3a60008201527f6153200000000000000000000000000000000000000000000000000000000000602082015250565b6000614c73602383613aae565b9150614c7e82614c17565b602382019050919050565b7f7320656173652d696e2d6f757420000000000000000000000000000000000000600082015250565b6000614cbf600e83613aae565b9150614cca82614c89565b600e82019050919050565b7f7320696e66696e69746520616c7465726e61746520626f74683b7d2370730000600082015250565b6000614d0b601e83613aae565b9150614d1682614cd5565b601e82019050919050565b7f20636972636c653a6e74682d6368696c6428356e297b616e696d6174696f6e3a60008201527f6158200000000000000000000000000000000000000000000000000000000000602082015250565b6000614d7d602383613aae565b9150614d8882614d21565b602382019050919050565b7f20636972636c653a6e74682d6368696c6428376e297b616e696d6174696f6e3a60008201527f6159200000000000000000000000000000000000000000000000000000000000602082015250565b6000614def602383613aae565b9150614dfa82614d93565b602382019050919050565b7f73206c696e656172200000000000000000000000000000000000000000000000600082015250565b6000614e3b600983613aae565b9150614e4682614e05565b600982019050919050565b7f7320696e66696e69746520616c7465726e61746520626f74683b7d406b65796660008201527f72616d65732061537b30257b7472616e73666f726d3a7363616c652831293b7d60208201527f313030257b7472616e73666f726d3a7363616c6528312e333134293b7d7d406b60408201527f65796672616d65732061587b30257b7472616e73666f726d3a7472616e736c6160608201527f746558283029207363616c652831293b7d313030257b7472616e73666f726d3a60808201527f7472616e736c6174655828313331707829207363616c6528332e3134293b7d7d60a08201527f406b65796672616d65732061597b30257b7472616e73666f726d3a7472616e7360c08201527f6c617465592830293b7d313030257b7472616e73666f726d3a7472616e736c6160e08201527f746559282d33317078293b7d7d3c2f7374796c653e000000000000000000000061010082015250565b6000614fb961011583613aae565b9150614fc482614e51565b61011582019050919050565b6000614fdb82614b82565b9150614fe7828d613b36565b9150614ff282614bf4565b9150614ffe828c613b36565b915061500982614c66565b9150615015828b613df1565b915061502082614cb2565b915061502c828a613df1565b915061503782614cfe565b91506150438289613b36565b915061504e82614d70565b915061505a8288613df1565b915061506582614cb2565b91506150718287613df1565b915061507c82614cfe565b91506150888286613b36565b915061509382614de2565b915061509f8285613df1565b91506150aa82614e2e565b91506150b68284613df1565b91506150c182614fab565b91508190509b9a5050505050505050505050565b7f3c636972636c652063783d220000000000000000000000000000000000000000600082015250565b600061510b600c83613aae565b9150615116826150d5565b600c82019050919050565b7f222063793d220000000000000000000000000000000000000000000000000000600082015250565b6000615157600683613aae565b915061516282615121565b600682019050919050565b7f2220723d22000000000000000000000000000000000000000000000000000000600082015250565b60006151a3600583613aae565b91506151ae8261516d565b600582019050919050565b7f222066696c6c3d22230000000000000000000000000000000000000000000000600082015250565b60006151ef600983613aae565b91506151fa826151b9565b600982019050919050565b7f22207374796c653d226d69782d626c656e642d6d6f64653a2000000000000000600082015250565b600061523b601983613aae565b915061524682615205565b601982019050919050565b60008190508160005260206000209050919050565b6000815461527381613267565b61527d8186613aae565b9450600182166000811461529857600181146152a9576152dc565b60ff198316865281860193506152dc565b6152b285615251565b60005b838110156152d4578154818901526001820191506020810190506152b5565b838801955050505b50505092915050565b7f3b206f7061636974793a20302e00000000000000000000000000000000000000600082015250565b600061531b600d83613aae565b9150615326826152e5565b600d82019050919050565b7f3b223e3c2f636972636c653e0000000000000000000000000000000000000000600082015250565b6000615367600c83613aae565b915061537282615331565b600c82019050919050565b6000615389828a613b36565b9150615394826150fe565b91506153a08289613b36565b91506153ab8261514a565b91506153b78288613b36565b91506153c282615196565b91506153ce8287613b36565b91506153d9826151e2565b91506153e58286613df1565b91506153f08261522e565b91506153fc8285615266565b91506154078261530e565b91506154138284613b36565b915061541e8261535a565b915081905098975050505050505050565b600061543a826149d4565b9150615445836149d4565b92508260ff0382111561545b5761545a613945565b5b828201905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061549c602083612d4f565b91506154a782615466565b602082019050919050565b600060208201905081810360008301526154cb8161548f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615508601c83612d4f565b9150615513826154d2565b602082019050919050565b60006020820190508181036000830152615537816154fb565b905091905056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212208b0b276d7d9be18d38114c2f8ca8c5711713a18dcc8320a4cd03d5e5e21ac69364736f6c63430008090033

Deployed Bytecode Sourcemap

16658:7686:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3308:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4248:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3902:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17281:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4888:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24181:160;;;:::i;:::-;;5126:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16939:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3087:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2891:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9053:133;;;;;;;;;;;;;:::i;:::-;;16907:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8864:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3402:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16866:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4455:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18439:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17034:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17445:465;;;:::i;:::-;;5271:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18626:1672;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24021:82;;;;;;;;;;;;;:::i;:::-;;16831:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9189:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2631:257;2733:4;2766:25;2751:40;;;:11;:40;;;;:92;;;;2810:33;2795:48;;;:11;:48;;;;2751:92;:132;;;;2847:36;2871:11;2847:23;:36::i;:::-;2751:132;2744:139;;2631:257;;;:::o;3308:91::-;3362:13;3389:5;3382:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3308:91;:::o;4248:204::-;4324:7;4346:16;4354:7;4346;:16::i;:::-;4338:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4423:15;:24;4439:7;4423:24;;;;;;;;;;;;;;;;;;;;;4416:31;;4248:204;;;:::o;3902:343::-;3977:13;3993:23;4008:7;3993:14;:23::i;:::-;3977:39;;4035:5;4029:11;;:2;:11;;;;4021:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4107:5;4091:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;4116:37;4133:5;4140:12;:10;:12::i;:::-;4116:16;:37::i;:::-;4091:62;4083:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;4219:21;4228:2;4232:7;4219:8;:21::i;:::-;3972:273;3902:343;;:::o;17281:79::-;17325:4;17345:10;;17338:17;;17281:79;:::o;4888:235::-;4990:41;5009:12;:10;:12::i;:::-;5023:7;4990:18;:41::i;:::-;4982:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5090:28;5100:4;5106:2;5110:7;5090:9;:28::i;:::-;4888:235;;;:::o;24181:160::-;8990:12;:10;:12::i;:::-;8979:23;;:7;:5;:7::i;:::-;:23;;;8971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24239:12:::1;24265:10;24257:24;;24289:21;24257:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24238:77;;;24328:7;24320:16;;;::::0;::::1;;24233:108;24181:160::o:0;5126:142::-;5224:39;5241:4;5247:2;5251:7;5224:39;;;;;;;;;;;;:16;:39::i;:::-;5126:142;;;:::o;16939:26::-;;;;:::o;3087:218::-;3159:7;3173:13;3189:7;:16;3197:7;3189:16;;;;;;;;;;;;;;;;;;;;;3173:32;;3235:1;3218:19;;:5;:19;;;;3210:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3295:5;3288:12;;;3087:218;;;:::o;2891:193::-;2963:7;3002:1;2985:19;;:5;:19;;;;2977:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;3063:9;:16;3073:5;3063:16;;;;;;;;;;;;;;;;3056:23;;2891:193;;;:::o;9053:133::-;8990:12;:10;:12::i;:::-;8979:23;;:7;:5;:7::i;:::-;:23;;;8971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9154:1:::1;9117:40;;9138:6;;;;;;;;;;;9117:40;;;;;;;;;;;;9179:1;9162:6;;:19;;;;;;;;;;;;;;;;;;9053:133::o:0;16907:28::-;;;;:::o;8864:78::-;8910:7;8931:6;;;;;;;;;;;8924:13;;8864:78;:::o;3402:95::-;3458:13;3485:7;3478:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3402:95;:::o;16866:37::-;;;;:::o;4455:272::-;4564:12;:10;:12::i;:::-;4552:24;;:8;:24;;;;4544:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4656:8;4611:18;:32;4630:12;:10;:12::i;:::-;4611:32;;;;;;;;;;;;;;;:42;4644:8;4611:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4703:8;4674:48;;4689:12;:10;:12::i;:::-;4674:48;;;4713:8;4674:48;;;;;;:::i;:::-;;;;;;;;4455:272;;:::o;18439:111::-;18495:13;18524:15;:21;18540:4;18524:21;;;;;;;;;;;18517:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18439:111;;;:::o;17034:46::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17445:465::-;9538:1;9656:7;;:19;;9648:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9538:1;9716:7;:18;;;;17520:10:::1;;17504:13;:11;:13::i;:::-;:26;17496:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;17585:11;;;;;;;;;;;17577:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;17666:10;;17653:9;:23;;17645:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;17721:8;17748:1;17732:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17721:28;;17756:25;17784:30;17803:10;17784:18;:30::i;:::-;17756:58;;17821:26;17831:10;17843:3;17821:9;:26::i;:::-;17877:11;17854:15;:20;17870:3;17854:20;;;;;;;;;;;:34;;;;;;;;;;;;:::i;:::-;;17893:10;;:12;;;;;;;;;:::i;:::-;;;;;;17491:419;;9497:1:::0;9745:7;:22;;;;17445:465::o;5271:270::-;5397:41;5416:12;:10;:12::i;:::-;5430:7;5397:18;:41::i;:::-;5389:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5497:39;5511:4;5517:2;5521:7;5530:5;5497:13;:39::i;:::-;5271:270;;;;:::o;18626:1672::-;18685:13;18715;18723:4;18715:7;:13::i;:::-;18707:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18763:25;18791:20;18806:4;18791:14;:20::i;:::-;18763:48;;18816:23;18855:1;18842:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18816:41;;18864:16;18910:2;18883:24;18888:11;18901:1;18904:2;18883:4;:24::i;:::-;:29;;;;:::i;:::-;18864:48;;18919:21;;;;;;;;;;;;;;;;;:7;18927:1;18919:10;;;;;;;;:::i;:::-;;;;;;;:21;;;;18958:42;18982:11;18995:1;18998;18958:23;:42::i;:::-;18945:7;18953:1;18945:10;;;;;;;;:::i;:::-;;;;;;;:55;;;;19018:42;19042:11;19055:1;19058;19018:23;:42::i;:::-;19005:7;19013:1;19005:10;;;;;;;;:::i;:::-;;;;;;;:55;;;;19078:43;19102:11;19115:2;19119:1;19078:23;:43::i;:::-;19065:7;19073:1;19065:10;;;;;;;;:::i;:::-;;;;;;;:56;;;;19139:43;19163:11;19176:2;19180:1;19139:23;:43::i;:::-;19126:7;19134:1;19126:10;;;;;;;;:::i;:::-;;;;;;;:56;;;;19200:43;19224:11;19237:2;19241:1;19200:23;:43::i;:::-;19187:7;19195:1;19187:10;;;;;;;;:::i;:::-;;;;;;;:56;;;;19250:16;19269:52;19281:4;19287:11;19300;19313:7;19269:11;:52::i;:::-;19250:71;;19328:18;19433:15;:4;:13;:15::i;:::-;19767:18;19781:3;19767:13;:18::i;:::-;19858:22;:11;:20;:22::i;:::-;19936:7;19944:1;19936:10;;;;;;;;:::i;:::-;;;;;;;;20001:7;20009:1;20001:10;;;;;;;;:::i;:::-;;;;;;;;20066:7;20074:1;20066:10;;;;;;;;:::i;:::-;;;;;;;;20131:7;20139:1;20131:10;;;;;;;;:::i;:::-;;;;;;;;20198:7;20206:1;20198:10;;;;;;;;:::i;:::-;;;;;;;;20249:7;20257:1;20249:10;;;;;;;;:::i;:::-;;;;;;;;19356:918;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19328:947;;20289:4;20282:11;;;;;;;18626:1672;;;:::o;24021:82::-;8990:12;:10;:12::i;:::-;8979:23;;:7;:5;:7::i;:::-;:23;;;8971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24087:11:::1;;;;;;;;;;;24086:12;24072:11;;:26;;;;;;;;;;;;;;;;;;24021:82::o:0;16831:31::-;;;;;;;;;;;;;:::o;4730:155::-;4827:4;4845:18;:25;4864:5;4845:25;;;;;;;;;;;;;;;:35;4871:8;4845:35;;;;;;;;;;;;;;;;;;;;;;;;;4838:42;;4730:155;;;;:::o;9189:223::-;8990:12;:10;:12::i;:::-;8979:23;;:7;:5;:7::i;:::-;:23;;;8971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9292:1:::1;9272:22;;:8;:22;;;;9264:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9376:8;9347:38;;9368:6;;;;;;;;;;;9347:38;;;;;;;;;;;;9399:8;9390:6;;:17;;;;;;;;;;;;;;;;;;9189:223:::0;:::o;1967:148::-;2052:4;2085:25;2070:40;;;:11;:40;;;;2063:47;;1967:148;;;:::o;5804:118::-;5869:4;5915:1;5887:30;;:7;:16;5895:7;5887:16;;;;;;;;;;;;;;;;;;;;;:30;;;;5880:37;;5804:118;;;:::o;1608:89::-;1661:7;1682:10;1675:17;;1608:89;:::o;7661:159::-;7757:2;7730:15;:24;7746:7;7730:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;7807:7;7803:2;7769:46;;7778:23;7793:7;7778:14;:23::i;:::-;7769:46;;;;;;;;;;;;7661:159;;:::o;5925:327::-;6018:4;6037:16;6045:7;6037;:16::i;:::-;6029:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6107:13;6123:23;6138:7;6123:14;:23::i;:::-;6107:39;;6170:5;6159:16;;:7;:16;;;:51;;;;6203:7;6179:31;;:20;6191:7;6179:11;:20::i;:::-;:31;;;6159:51;:87;;;;6214:32;6231:5;6238:7;6214:16;:32::i;:::-;6159:87;6151:96;;;5925:327;;;;:::o;7225:433::-;7344:4;7317:31;;:23;7332:7;7317:14;:23::i;:::-;:31;;;7309:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7421:1;7407:16;;:2;:16;;;;7399:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7469:39;7490:4;7496:2;7500:7;7469:20;:39::i;:::-;7513:29;7530:1;7534:7;7513:8;:29::i;:::-;7566:1;7547:9;:15;7557:4;7547:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;7589:1;7572:9;:13;7582:2;7572:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;7614:2;7595:7;:16;7603:7;7595:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;7645:7;7641:2;7626:27;;7635:4;7626:27;;;;;;;;;;;;7225:433;;;:::o;17980:394::-;18048:13;18070:12;18085:4;:14;;;18100:7;18085:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18070:38;;18113:22;18156:1;18146:7;:11;18142:177;;;18233:7;18242:18;:7;:16;:18::i;:::-;18216:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18206:56;;;;;;18201:62;;18168:97;;18142:177;;;18306:7;18289:24;;18142:177;18332:37;18354:14;18332:21;:37::i;:::-;18325:44;;;;17980:394;;;:::o;6255:101::-;6325:26;6335:2;6339:7;6325:26;;;;;;;;;;;;:9;:26::i;:::-;6255:101;;:::o;5544:257::-;5652:28;5662:4;5668:2;5672:7;5652:9;:28::i;:::-;5693:48;5716:4;5722:2;5726:7;5735:5;5693:22;:48::i;:::-;5685:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;5544:257;;;;:::o;23361:162::-;23443:7;23514:4;23495:5;23502:6;23484:25;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23474:36;;;;;;23466:45;;:52;;;;:::i;:::-;23459:59;;23361:162;;;;;:::o;23617:354::-;23724:13;23746:23;23778:7;23746:40;;23793:18;23824:7;23814:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23793:39;;23844:6;23839:101;23856:7;23854:1;:9;23839:101;;;23886:10;23907:1;23897:7;:11;;;;:::i;:::-;23886:23;;;;;;;;:::i;:::-;;;;;;;;;;23875:5;23881:1;23875:8;;;;;;;;:::i;:::-;;;;;:34;;;;;;;;;;;23929:3;;;;;;;23839:101;;;;23960:5;23946:20;;;;23617:354;;;;;:::o;20396:548::-;20524:12;20545:16;20611:15;:4;:13;:15::i;:::-;20754:8;20763:1;20754:11;;;;;;;;:::i;:::-;;;;;;;;20801:37;20819:4;20825:12;20801:17;:37::i;:::-;20844:59;20863:12;20877;20891:8;20901:1;20844:18;:59::i;:::-;20564:358;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20545:377;;20936:3;20929:10;;;20396:548;;;;;;:::o;9861:404::-;9917:13;9950:1;9941:5;:10;9937:26;;;9953:10;;;;;;;;;;;;;;;;;;;;;9937:26;9968:12;9983:5;9968:20;;9993:14;10012:54;10027:1;10019:4;:9;10012:54;;10036:8;;;;;:::i;:::-;;;;10058:2;10050:10;;;;;:::i;:::-;;;10012:54;;;10070:19;10102:6;10092:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10070:39;;10114:121;10130:1;10121:5;:10;10114:121;;10149:1;10139:11;;;;;:::i;:::-;;;10207:2;10199:5;:10;;;;:::i;:::-;10186:2;:24;;;;:::i;:::-;10173:39;;10156:6;10163;10156:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;10227:2;10218:11;;;;;:::i;:::-;;;10114:121;;;10253:6;10239:21;;;;;9861:404;;;;:::o;10934:1162::-;10992:13;11012:11;11026:4;:11;11012:25;;11053:1;11046:3;:8;11042:23;;;11056:9;;;;;;;;;;;;;;;;;11042:23;11070:18;11108:1;11103;11097:3;:7;;;;:::i;:::-;11096:13;;;;:::i;:::-;11091:1;:19;;;;:::i;:::-;11070:40;;11115:19;11160:2;11147:10;:15;;;;:::i;:::-;11137:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11115:48;;11168:18;11189:5;;;;;;;;;;;;;;;;;11168:26;;11241:1;11234:5;11230:13;11277:2;11269:6;11265:15;11307:1;11287:586;11321:3;11318:1;11315:10;11287:586;;;11353:1;11350;11346:9;11341:14;;11399:8;11394:1;11388:4;11384:12;11378:19;11374:34;11465:4;11457:5;11453:2;11449:14;11445:25;11435:8;11431:40;11425:47;11492:3;11489:1;11485:11;11478:18;;11571:4;11562;11554:5;11550:2;11546:14;11542:25;11532:8;11528:40;11522:47;11518:58;11513:3;11509:68;11502:75;;11597:3;11594:1;11590:11;11583:18;;11675:4;11666;11658:5;11655:1;11651:13;11647:24;11637:8;11633:39;11627:46;11623:57;11618:3;11614:67;11607:74;;11701:3;11698:1;11694:11;11687:18;;11771:4;11762;11755:5;11751:16;11741:8;11737:31;11731:38;11727:49;11722:3;11718:59;11711:66;;11799:3;11794;11790:13;11783:20;;11827:3;11816:9;11809:22;11865:1;11854:9;11850:17;11837:30;;11334:539;;11287:586;;;11291:23;11894:1;11889:3;11885:11;11906:1;11901:63;;;;11974:1;11969:61;;;;11878:152;;11901:63;11950:6;11945:3;11941:16;11937:1;11926:9;11922:17;11915:43;11901:63;;11969:61;12018:4;12013:3;12009:14;12005:1;11994:9;11990:17;11983:41;11878:152;;12050:10;12042:6;12035:26;11208:858;;12084:6;12070:21;;;;;;10934:1162;;;;:::o;8474:93::-;;;;:::o;10268:379::-;10325:13;10345:14;10372:2;10362:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10345:30;;10385:6;10380:242;10401:2;10397:1;:6;10380:242;;;10416:8;10472:1;10467:2;:6;;;;:::i;:::-;10464:1;:10;;;;:::i;:::-;10460:1;:15;;;;:::i;:::-;10453:1;10440:16;;:36;;;;:::i;:::-;10427:51;;10416:62;;10484:9;10514:2;10509:1;10503:8;;:13;;;;:::i;:::-;10496:21;;10484:33;;10523:9;10564:2;10558:9;;10553:2;:14;;;;:::i;:::-;10548:1;10542:8;;:25;;;;:::i;:::-;10535:33;;10523:45;;10583:8;10588:2;10583:4;:8::i;:::-;10574:1;10578;10576;:3;;;;:::i;:::-;10574:6;;;;;;;;:::i;:::-;;;;;:17;;;;;;;;;;;10608:8;10613:2;10608:4;:8::i;:::-;10597:1;10603;10601;10599;:3;;;;:::i;:::-;:5;;;;:::i;:::-;10597:8;;;;;;;;:::i;:::-;;;;;:19;;;;;;;;;;;10410:212;;;10405:3;;;;;:::i;:::-;;;;10380:242;;;;10640:1;10626:16;;;10268:379;;;:::o;6359:235::-;6449:18;6455:2;6459:7;6449:5;:18::i;:::-;6480:54;6511:1;6515:2;6519:7;6528:5;6480:22;:54::i;:::-;6472:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;6359:235;;;:::o;7823:648::-;7935:4;7952:15;:2;:13;;;:15::i;:::-;7948:519;;;7995:2;7979:36;;;8016:12;:10;:12::i;:::-;8030:4;8036:7;8045:5;7979:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;7975:458;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8209:1;8192:6;:13;:18;8188:239;;;8220:60;;;;;;;;;;:::i;:::-;;;;;;;;8188:239;8404:6;8398:13;8389:6;8385:2;8381:15;8374:38;7975:458;8100:45;;;8090:55;;;:6;:55;;;;8083:62;;;;;7948:519;8457:4;8450:11;;7823:648;;;;;;;:::o;21054:1234::-;21143:12;21164:16;21229:15;:4;:13;:15::i;:::-;21302;:4;:13;:15::i;:::-;21367:42;21373:24;21378:12;21392:1;21395;21373:4;:24::i;:::-;21368:2;:29;;;;:::i;:::-;21367:40;:42::i;:::-;21449:35;:24;21454:12;21468:1;21471;21449:4;:24::i;:::-;:33;:35::i;:::-;21543:15;:4;:13;:15::i;:::-;21608:42;21614:24;21619:12;21633:1;21636;21614:4;:24::i;:::-;21609:2;:29;;;;:::i;:::-;21608:40;:42::i;:::-;21690:35;:24;21695:12;21709:1;21712;21690:4;:24::i;:::-;:33;:35::i;:::-;21784:15;:4;:13;:15::i;:::-;21849:42;21855:24;21860:12;21874:1;21877;21855:4;:24::i;:::-;21850:2;:29;;;;:::i;:::-;21849:40;:42::i;:::-;21926:41;21931:24;21936:12;21950:1;21953;21931:4;:24::i;:::-;21927:1;:28;;;;:::i;:::-;21926:39;:41::i;:::-;21183:1083;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21164:1102;;22280:3;22273:10;;;21054:1234;;;;:::o;22420:849::-;22557:12;22578:6;22589:16;22621:1;22617:5;;22612:636;22628:12;22624:1;:16;22612:636;;;22681:3;22718:47;:36;22723:12;22738:8;;;;:::i;:::-;;;;22749:4;22718;:36::i;:::-;:45;:47::i;:::-;22794;:36;22799:12;22814:8;;;;:::i;:::-;;;;22825:4;22794;:36::i;:::-;:45;:47::i;:::-;22869:46;:35;22874:12;22889:8;;;;:::i;:::-;;;;22900:3;22869:4;:35::i;:::-;:44;:46::i;:::-;22941:8;22950:47;22955:12;22970:8;;;;:::i;:::-;;;;22981;:15;22950:4;:47::i;:::-;22941:57;;;;;;;;:::i;:::-;;;;;;;;23039:11;23051:50;23056:12;23071:8;;;;:::i;:::-;;;;23082:11;:18;;;;23051:4;:50::i;:::-;23039:63;;;;;;;;:::i;:::-;;;;;;;;;23137:52;23175:2;23138:34;23143:12;23158:8;;;;:::i;:::-;;;;23169:2;23138:4;:34::i;:::-;:39;;;;:::i;:::-;23137:50;:52::i;:::-;22658:559;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22652:565;;23237:3;;;;;;;22612:636;;;23261:3;23254:10;;;;22420:849;;;;;;:::o;10650:156::-;10697:8;10727:2;10722:1;10716:8;;:13;;;10712:89;;;10756:4;10751:1;10745:8;;:15;;;;:::i;:::-;10738:23;;10731:30;;;;10712:89;10796:4;10791:1;10785:8;;:15;;;;:::i;:::-;10778:23;;10771:30;;10650:156;;;;:::o;6597:337::-;6685:1;6671:16;;:2;:16;;;;6663:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;6738:16;6746:7;6738;:16::i;:::-;6737:17;6729:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;6792:45;6821:1;6825:2;6829:7;6792:20;:45::i;:::-;6859:1;6842:9;:13;6852:2;6842:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;6884:2;6865:7;:16;6873:7;6865:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;6921:7;6917:2;6896:33;;6913:1;6896:33;;;;;;;;;;;;6597:337;;:::o;13371:204::-;13431:4;13442:12;13541:7;13529:20;13521:28;;13569:1;13562:4;:8;13555:15;;;13371:204;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:116::-;6320:21;6335:5;6320:21;:::i;:::-;6313:5;6310:32;6300:60;;6356:1;6353;6346:12;6300:60;6250:116;:::o;6372:133::-;6415:5;6453:6;6440:20;6431:29;;6469:30;6493:5;6469:30;:::i;:::-;6372:133;;;;:::o;6511:468::-;6576:6;6584;6633:2;6621:9;6612:7;6608:23;6604:32;6601:119;;;6639:79;;:::i;:::-;6601:119;6759:1;6784:53;6829:7;6820:6;6809:9;6805:22;6784:53;:::i;:::-;6774:63;;6730:117;6886:2;6912:50;6954:7;6945:6;6934:9;6930:22;6912:50;:::i;:::-;6902:60;;6857:115;6511:468;;;;;:::o;6985:117::-;7094:1;7091;7084:12;7108:117;7217:1;7214;7207:12;7231:180;7279:77;7276:1;7269:88;7376:4;7373:1;7366:15;7400:4;7397:1;7390:15;7417:281;7500:27;7522:4;7500:27;:::i;:::-;7492:6;7488:40;7630:6;7618:10;7615:22;7594:18;7582:10;7579:34;7576:62;7573:88;;;7641:18;;:::i;:::-;7573:88;7681:10;7677:2;7670:22;7460:238;7417:281;;:::o;7704:129::-;7738:6;7765:20;;:::i;:::-;7755:30;;7794:33;7822:4;7814:6;7794:33;:::i;:::-;7704:129;;;:::o;7839:307::-;7900:4;7990:18;7982:6;7979:30;7976:56;;;8012:18;;:::i;:::-;7976:56;8050:29;8072:6;8050:29;:::i;:::-;8042:37;;8134:4;8128;8124:15;8116:23;;7839:307;;;:::o;8152:154::-;8236:6;8231:3;8226;8213:30;8298:1;8289:6;8284:3;8280:16;8273:27;8152:154;;;:::o;8312:410::-;8389:5;8414:65;8430:48;8471:6;8430:48;:::i;:::-;8414:65;:::i;:::-;8405:74;;8502:6;8495:5;8488:21;8540:4;8533:5;8529:16;8578:3;8569:6;8564:3;8560:16;8557:25;8554:112;;;8585:79;;:::i;:::-;8554:112;8675:41;8709:6;8704:3;8699;8675:41;:::i;:::-;8395:327;8312:410;;;;;:::o;8741:338::-;8796:5;8845:3;8838:4;8830:6;8826:17;8822:27;8812:122;;8853:79;;:::i;:::-;8812:122;8970:6;8957:20;8995:78;9069:3;9061:6;9054:4;9046:6;9042:17;8995:78;:::i;:::-;8986:87;;8802:277;8741:338;;;;:::o;9085:943::-;9180:6;9188;9196;9204;9253:3;9241:9;9232:7;9228:23;9224:33;9221:120;;;9260:79;;:::i;:::-;9221:120;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:53;9578:7;9569:6;9558:9;9554:22;9533:53;:::i;:::-;9523:63;;9478:118;9635:2;9661:53;9706:7;9697:6;9686:9;9682:22;9661:53;:::i;:::-;9651:63;;9606:118;9791:2;9780:9;9776:18;9763:32;9822:18;9814:6;9811:30;9808:117;;;9844:79;;:::i;:::-;9808:117;9949:62;10003:7;9994:6;9983:9;9979:22;9949:62;:::i;:::-;9939:72;;9734:287;9085:943;;;;;;;:::o;10034:474::-;10102:6;10110;10159:2;10147:9;10138:7;10134:23;10130:32;10127:119;;;10165:79;;:::i;:::-;10127:119;10285:1;10310:53;10355:7;10346:6;10335:9;10331:22;10310:53;:::i;:::-;10300:63;;10256:117;10412:2;10438:53;10483:7;10474:6;10463:9;10459:22;10438:53;:::i;:::-;10428:63;;10383:118;10034:474;;;;;:::o;10514:180::-;10562:77;10559:1;10552:88;10659:4;10656:1;10649:15;10683:4;10680:1;10673:15;10700:320;10744:6;10781:1;10775:4;10771:12;10761:22;;10828:1;10822:4;10818:12;10849:18;10839:81;;10905:4;10897:6;10893:17;10883:27;;10839:81;10967:2;10959:6;10956:14;10936:18;10933:38;10930:84;;;10986:18;;:::i;:::-;10930:84;10751:269;10700:320;;;:::o;11026:231::-;11166:34;11162:1;11154:6;11150:14;11143:58;11235:14;11230:2;11222:6;11218:15;11211:39;11026:231;:::o;11263:366::-;11405:3;11426:67;11490:2;11485:3;11426:67;:::i;:::-;11419:74;;11502:93;11591:3;11502:93;:::i;:::-;11620:2;11615:3;11611:12;11604:19;;11263:366;;;:::o;11635:419::-;11801:4;11839:2;11828:9;11824:18;11816:26;;11888:9;11882:4;11878:20;11874:1;11863:9;11859:17;11852:47;11916:131;12042:4;11916:131;:::i;:::-;11908:139;;11635:419;;;:::o;12060:220::-;12200:34;12196:1;12188:6;12184:14;12177:58;12269:3;12264:2;12256:6;12252:15;12245:28;12060:220;:::o;12286:366::-;12428:3;12449:67;12513:2;12508:3;12449:67;:::i;:::-;12442:74;;12525:93;12614:3;12525:93;:::i;:::-;12643:2;12638:3;12634:12;12627:19;;12286:366;;;:::o;12658:419::-;12824:4;12862:2;12851:9;12847:18;12839:26;;12911:9;12905:4;12901:20;12897:1;12886:9;12882:17;12875:47;12939:131;13065:4;12939:131;:::i;:::-;12931:139;;12658:419;;;:::o;13083:243::-;13223:34;13219:1;13211:6;13207:14;13200:58;13292:26;13287:2;13279:6;13275:15;13268:51;13083:243;:::o;13332:366::-;13474:3;13495:67;13559:2;13554:3;13495:67;:::i;:::-;13488:74;;13571:93;13660:3;13571:93;:::i;:::-;13689:2;13684:3;13680:12;13673:19;;13332:366;;;:::o;13704:419::-;13870:4;13908:2;13897:9;13893:18;13885:26;;13957:9;13951:4;13947:20;13943:1;13932:9;13928:17;13921:47;13985:131;14111:4;13985:131;:::i;:::-;13977:139;;13704:419;;;:::o;14129:236::-;14269:34;14265:1;14257:6;14253:14;14246:58;14338:19;14333:2;14325:6;14321:15;14314:44;14129:236;:::o;14371:366::-;14513:3;14534:67;14598:2;14593:3;14534:67;:::i;:::-;14527:74;;14610:93;14699:3;14610:93;:::i;:::-;14728:2;14723:3;14719:12;14712:19;;14371:366;;;:::o;14743:419::-;14909:4;14947:2;14936:9;14932:18;14924:26;;14996:9;14990:4;14986:20;14982:1;14971:9;14967:17;14960:47;15024:131;15150:4;15024:131;:::i;:::-;15016:139;;14743:419;;;:::o;15168:182::-;15308:34;15304:1;15296:6;15292:14;15285:58;15168:182;:::o;15356:366::-;15498:3;15519:67;15583:2;15578:3;15519:67;:::i;:::-;15512:74;;15595:93;15684:3;15595:93;:::i;:::-;15713:2;15708:3;15704:12;15697:19;;15356:366;;;:::o;15728:419::-;15894:4;15932:2;15921:9;15917:18;15909:26;;15981:9;15975:4;15971:20;15967:1;15956:9;15952:17;15945:47;16009:131;16135:4;16009:131;:::i;:::-;16001:139;;15728:419;;;:::o;16153:147::-;16254:11;16291:3;16276:18;;16153:147;;;;:::o;16306:114::-;;:::o;16426:398::-;16585:3;16606:83;16687:1;16682:3;16606:83;:::i;:::-;16599:90;;16698:93;16787:3;16698:93;:::i;:::-;16816:1;16811:3;16807:11;16800:18;;16426:398;;;:::o;16830:379::-;17014:3;17036:147;17179:3;17036:147;:::i;:::-;17029:154;;17200:3;17193:10;;16830:379;;;:::o;17215:228::-;17355:34;17351:1;17343:6;17339:14;17332:58;17424:11;17419:2;17411:6;17407:15;17400:36;17215:228;:::o;17449:366::-;17591:3;17612:67;17676:2;17671:3;17612:67;:::i;:::-;17605:74;;17688:93;17777:3;17688:93;:::i;:::-;17806:2;17801:3;17797:12;17790:19;;17449:366;;;:::o;17821:419::-;17987:4;18025:2;18014:9;18010:18;18002:26;;18074:9;18068:4;18064:20;18060:1;18049:9;18045:17;18038:47;18102:131;18228:4;18102:131;:::i;:::-;18094:139;;17821:419;;;:::o;18246:229::-;18386:34;18382:1;18374:6;18370:14;18363:58;18455:12;18450:2;18442:6;18438:15;18431:37;18246:229;:::o;18481:366::-;18623:3;18644:67;18708:2;18703:3;18644:67;:::i;:::-;18637:74;;18720:93;18809:3;18720:93;:::i;:::-;18838:2;18833:3;18829:12;18822:19;;18481:366;;;:::o;18853:419::-;19019:4;19057:2;19046:9;19042:18;19034:26;;19106:9;19100:4;19096:20;19092:1;19081:9;19077:17;19070:47;19134:131;19260:4;19134:131;:::i;:::-;19126:139;;18853:419;;;:::o;19278:175::-;19418:27;19414:1;19406:6;19402:14;19395:51;19278:175;:::o;19459:366::-;19601:3;19622:67;19686:2;19681:3;19622:67;:::i;:::-;19615:74;;19698:93;19787:3;19698:93;:::i;:::-;19816:2;19811:3;19807:12;19800:19;;19459:366;;;:::o;19831:419::-;19997:4;20035:2;20024:9;20020:18;20012:26;;20084:9;20078:4;20074:20;20070:1;20059:9;20055:17;20048:47;20112:131;20238:4;20112:131;:::i;:::-;20104:139;;19831:419;;;:::o;20256:181::-;20396:33;20392:1;20384:6;20380:14;20373:57;20256:181;:::o;20443:366::-;20585:3;20606:67;20670:2;20665:3;20606:67;:::i;:::-;20599:74;;20682:93;20771:3;20682:93;:::i;:::-;20800:2;20795:3;20791:12;20784:19;;20443:366;;;:::o;20815:419::-;20981:4;21019:2;21008:9;21004:18;20996:26;;21068:9;21062:4;21058:20;21054:1;21043:9;21039:17;21032:47;21096:131;21222:4;21096:131;:::i;:::-;21088:139;;20815:419;;;:::o;21240:224::-;21380:34;21376:1;21368:6;21364:14;21357:58;21449:7;21444:2;21436:6;21432:15;21425:32;21240:224;:::o;21470:366::-;21612:3;21633:67;21697:2;21692:3;21633:67;:::i;:::-;21626:74;;21709:93;21798:3;21709:93;:::i;:::-;21827:2;21822:3;21818:12;21811:19;;21470:366;;;:::o;21842:419::-;22008:4;22046:2;22035:9;22031:18;22023:26;;22095:9;22089:4;22085:20;22081:1;22070:9;22066:17;22059:47;22123:131;22249:4;22123:131;:::i;:::-;22115:139;;21842:419;;;:::o;22267:226::-;22407:34;22403:1;22395:6;22391:14;22384:58;22476:9;22471:2;22463:6;22459:15;22452:34;22267:226;:::o;22499:366::-;22641:3;22662:67;22726:2;22721:3;22662:67;:::i;:::-;22655:74;;22738:93;22827:3;22738:93;:::i;:::-;22856:2;22851:3;22847:12;22840:19;;22499:366;;;:::o;22871:419::-;23037:4;23075:2;23064:9;23060:18;23052:26;;23124:9;23118:4;23114:20;23110:1;23099:9;23095:17;23088:47;23152:131;23278:4;23152:131;:::i;:::-;23144:139;;22871:419;;;:::o;23296:220::-;23436:34;23432:1;23424:6;23420:14;23413:58;23505:3;23500:2;23492:6;23488:15;23481:28;23296:220;:::o;23522:366::-;23664:3;23685:67;23749:2;23744:3;23685:67;:::i;:::-;23678:74;;23761:93;23850:3;23761:93;:::i;:::-;23879:2;23874:3;23870:12;23863:19;;23522:366;;;:::o;23894:419::-;24060:4;24098:2;24087:9;24083:18;24075:26;;24147:9;24141:4;24137:20;24133:1;24122:9;24118:17;24111:47;24175:131;24301:4;24175:131;:::i;:::-;24167:139;;23894:419;;;:::o;24319:180::-;24367:77;24364:1;24357:88;24464:4;24461:1;24454:15;24488:4;24485:1;24478:15;24505:305;24545:3;24564:20;24582:1;24564:20;:::i;:::-;24559:25;;24598:20;24616:1;24598:20;:::i;:::-;24593:25;;24752:1;24684:66;24680:74;24677:1;24674:81;24671:107;;;24758:18;;:::i;:::-;24671:107;24802:1;24799;24795:9;24788:16;;24505:305;;;;:::o;24816:233::-;24855:3;24878:24;24896:5;24878:24;:::i;:::-;24869:33;;24924:66;24917:5;24914:77;24911:103;;;24994:18;;:::i;:::-;24911:103;25041:1;25034:5;25030:13;25023:20;;24816:233;;;:::o;25055:173::-;25195:25;25191:1;25183:6;25179:14;25172:49;25055:173;:::o;25234:366::-;25376:3;25397:67;25461:2;25456:3;25397:67;:::i;:::-;25390:74;;25473:93;25562:3;25473:93;:::i;:::-;25591:2;25586:3;25582:12;25575:19;;25234:366;;;:::o;25606:419::-;25772:4;25810:2;25799:9;25795:18;25787:26;;25859:9;25853:4;25849:20;25845:1;25834:9;25830:17;25823:47;25887:131;26013:4;25887:131;:::i;:::-;25879:139;;25606:419;;;:::o;26031:180::-;26079:77;26076:1;26069:88;26176:4;26173:1;26166:15;26200:4;26197:1;26190:15;26217:148;26319:11;26356:3;26341:18;;26217:148;;;;:::o;26371:260::-;26511:66;26507:1;26499:6;26495:14;26488:90;26612:11;26607:2;26599:6;26595:15;26588:36;26371:260;:::o;26637:402::-;26797:3;26818:85;26900:2;26895:3;26818:85;:::i;:::-;26811:92;;26912:93;27001:3;26912:93;:::i;:::-;27030:2;27025:3;27021:12;27014:19;;26637:402;;;:::o;27045:98::-;27096:6;27130:5;27124:12;27114:22;;27045:98;;;:::o;27149:373::-;27253:3;27281:38;27313:5;27281:38;:::i;:::-;27335:88;27416:6;27411:3;27335:88;:::i;:::-;27328:95;;27432:52;27477:6;27472:3;27465:4;27458:5;27454:16;27432:52;:::i;:::-;27509:6;27504:3;27500:16;27493:23;;27257:265;27149:373;;;;:::o;27528:895::-;27668:66;27664:1;27656:6;27652:14;27645:90;27769:34;27764:2;27756:6;27752:15;27745:59;27838:34;27833:2;27825:6;27821:15;27814:59;27907:34;27902:2;27894:6;27890:15;27883:59;27977:34;27971:3;27963:6;27959:16;27952:60;28047:36;28041:3;28033:6;28029:16;28022:62;28123:34;28117:3;28109:6;28105:16;28098:60;28197:34;28191:3;28183:6;28179:16;28172:60;28279:66;28273:3;28265:6;28261:16;28254:92;28393:10;28387:3;28379:6;28375:16;28368:36;27528:895;:::o;28441:452::-;28601:3;28634:86;28716:3;28711;28634:86;:::i;:::-;28627:93;;28741;28830:3;28741:93;:::i;:::-;28871:3;28866;28862:13;28855:20;;28441:452;;;:::o;28911:351::-;29063:66;29059:1;29051:6;29047:14;29040:90;29176:66;29171:2;29163:6;29159:15;29152:91;28911:351;:::o;29280:450::-;29440:3;29473:85;29555:2;29550:3;29473:85;:::i;:::-;29466:92;;29579:93;29668:3;29579:93;:::i;:::-;29709:2;29704:3;29700:12;29693:19;;29280:450;;;:::o;29748:351::-;29900:66;29896:1;29888:6;29884:14;29877:90;30013:66;30008:2;30000:6;29996:15;29989:91;29748:351;:::o;30117:450::-;30277:3;30310:85;30392:2;30387:3;30310:85;:::i;:::-;30303:92;;30416:93;30505:3;30416:93;:::i;:::-;30546:2;30541:3;30537:12;30530:19;;30117:450;;;:::o;30585:437::-;30691:3;30731:39;30764:5;30731:39;:::i;:::-;30798:89;30880:6;30875:3;30798:89;:::i;:::-;30791:96;;30908:52;30953:6;30948:3;30941:4;30934:5;30930:16;30908:52;:::i;:::-;30997:6;30992:3;30988:16;30981:23;;30695:327;30585:437;;;;:::o;31040:351::-;31192:66;31188:1;31180:6;31176:14;31169:90;31305:66;31300:2;31292:6;31288:15;31281:91;31040:351;:::o;31409:450::-;31569:3;31602:85;31684:2;31679:3;31602:85;:::i;:::-;31595:92;;31708:93;31797:3;31708:93;:::i;:::-;31838:2;31833:3;31829:12;31822:19;;31409:450;;;:::o;31877:351::-;32029:66;32025:1;32017:6;32013:14;32006:90;32142:66;32137:2;32129:6;32125:15;32118:91;31877:351;:::o;32246:450::-;32406:3;32439:85;32521:2;32516:3;32439:85;:::i;:::-;32432:92;;32545:93;32634:3;32545:93;:::i;:::-;32675:2;32670:3;32666:12;32659:19;;32246:450;;;:::o;32714:351::-;32866:66;32862:1;32854:6;32850:14;32843:90;32979:66;32974:2;32966:6;32962:15;32955:91;32714:351;:::o;33083:450::-;33243:3;33276:85;33358:2;33353:3;33276:85;:::i;:::-;33269:92;;33382:93;33471:3;33382:93;:::i;:::-;33512:2;33507:3;33503:12;33496:19;;33083:450;;;:::o;33551:351::-;33703:66;33699:1;33691:6;33687:14;33680:90;33816:66;33811:2;33803:6;33799:15;33792:91;33551:351;:::o;33920:450::-;34080:3;34113:85;34195:2;34190:3;34113:85;:::i;:::-;34106:92;;34219:93;34308:3;34219:93;:::i;:::-;34349:2;34344:3;34340:12;34333:19;;33920:450;;;:::o;34388:238::-;34540:66;34536:1;34528:6;34524:14;34517:90;34388:238;:::o;34644:450::-;34804:3;34837:85;34919:2;34914:3;34837:85;:::i;:::-;34830:92;;34943:93;35032:3;34943:93;:::i;:::-;35073:2;35068:3;35064:12;35057:19;;34644:450;;;:::o;35112:238::-;35264:66;35260:1;35252:6;35248:14;35241:90;35112:238;:::o;35368:448::-;35528:3;35561:84;35643:1;35638:3;35561:84;:::i;:::-;35554:91;;35666:93;35755:3;35666:93;:::i;:::-;35796:1;35791:3;35787:11;35780:18;;35368:448;;;:::o;35834:4455::-;37354:3;37388:148;37532:3;37388:148;:::i;:::-;37381:155;;37565:93;37654:3;37645:6;37565:93;:::i;:::-;37558:100;;37687:148;37831:3;37687:148;:::i;:::-;37680:155;;37864:93;37953:3;37944:6;37864:93;:::i;:::-;37857:100;;37986:148;38130:3;37986:148;:::i;:::-;37979:155;;38163:93;38252:3;38243:6;38163:93;:::i;:::-;38156:100;;38285:148;38429:3;38285:148;:::i;:::-;38278:155;;38462:95;38553:3;38544:6;38462:95;:::i;:::-;38455:102;;38586:148;38730:3;38586:148;:::i;:::-;38579:155;;38763:95;38854:3;38845:6;38763:95;:::i;:::-;38756:102;;38887:148;39031:3;38887:148;:::i;:::-;38880:155;;39064:95;39155:3;39146:6;39064:95;:::i;:::-;39057:102;;39188:148;39332:3;39188:148;:::i;:::-;39181:155;;39365:95;39456:3;39447:6;39365:95;:::i;:::-;39358:102;;39489:148;39633:3;39489:148;:::i;:::-;39482:155;;39666:95;39757:3;39748:6;39666:95;:::i;:::-;39659:102;;39790:148;39934:3;39790:148;:::i;:::-;39783:155;;39967:95;40058:3;40049:6;39967:95;:::i;:::-;39960:102;;40091:148;40235:3;40091:148;:::i;:::-;40084:155;;40268:3;40261:10;;35834:4455;;;;;;;;;;;;:::o;40307:261::-;40459:34;40455:1;40447:6;40443:14;40436:58;40540:8;40535:2;40527:6;40523:15;40516:33;40307:261;:::o;40586:414::-;40728:3;40761:67;40825:2;40820:3;40761:67;:::i;:::-;40754:74;;40849:93;40938:3;40849:93;:::i;:::-;40979:2;40974:3;40970:12;40963:19;;40586:414;;;:::o;41018:467::-;41184:4;41234:2;41223:9;41219:18;41211:26;;41295:9;41289:4;41285:20;41281:1;41270:9;41266:17;41259:47;41335:131;41461:4;41335:131;:::i;:::-;41327:139;;41018:467;;;:::o;41503:267::-;41655:34;41651:1;41643:6;41639:14;41632:58;41736:14;41731:2;41723:6;41719:15;41712:39;41503:267;:::o;41788:414::-;41930:3;41963:67;42027:2;42022:3;41963:67;:::i;:::-;41956:74;;42051:93;42140:3;42051:93;:::i;:::-;42181:2;42176:3;42172:12;42165:19;;41788:414;;;:::o;42220:467::-;42386:4;42436:2;42425:9;42421:18;42413:26;;42497:9;42491:4;42487:20;42483:1;42472:9;42468:17;42461:47;42537:131;42663:4;42537:131;:::i;:::-;42529:139;;42220:467;;;:::o;42705:264::-;42857:34;42853:1;42845:6;42841:14;42834:58;42938:11;42933:2;42925:6;42921:15;42914:36;42705:264;:::o;42987:414::-;43129:3;43162:67;43226:2;43221:3;43162:67;:::i;:::-;43155:74;;43250:93;43339:3;43250:93;:::i;:::-;43380:2;43375:3;43371:12;43364:19;;42987:414;;;:::o;43419:467::-;43585:4;43635:2;43624:9;43620:18;43612:26;;43696:9;43690:4;43686:20;43682:1;43671:9;43667:17;43660:47;43736:131;43862:4;43736:131;:::i;:::-;43728:139;;43419:467;;;:::o;43904:259::-;44056:34;44052:1;44044:6;44040:14;44033:58;44137:6;44132:2;44124:6;44120:15;44113:31;43904:259;:::o;44181:414::-;44323:3;44356:67;44420:2;44415:3;44356:67;:::i;:::-;44349:74;;44444:93;44533:3;44444:93;:::i;:::-;44574:2;44569:3;44565:12;44558:19;;44181:414;;;:::o;44613:467::-;44779:4;44829:2;44818:9;44814:18;44806:26;;44890:9;44884:4;44880:20;44876:1;44865:9;44861:17;44854:47;44930:131;45056:4;44930:131;:::i;:::-;44922:139;;44613:467;;;:::o;45098:251::-;45138:4;45170:20;45188:1;45170:20;:::i;:::-;45165:25;;45216:20;45234:1;45216:20;:::i;:::-;45211:25;;45267:1;45264;45261:8;45258:34;;;45272:18;;:::i;:::-;45258:34;45329:1;45326;45322:9;45314:17;;45098:251;;;;:::o;45367:179::-;45424:5;45467:6;45461:13;45452:22;;45495:33;45522:5;45495:33;:::i;:::-;45367:179;;;;:::o;45564:423::-;45634:6;45695:2;45683:9;45674:7;45670:23;45666:32;45663:119;;;45701:79;;:::i;:::-;45663:119;45845:1;45882:64;45938:7;45929:6;45918:9;45914:22;45882:64;:::i;:::-;45872:74;;45804:164;45564:423;;;;:::o;46005:130::-;46038:8;46110:5;46106:2;46102:14;46069:47;;46005:130;;;:::o;46153:118::-;46192:7;46233:20;46247:5;46233:20;:::i;:::-;46222:31;;46153:118;;;:::o;46289:124::-;46328:7;46369:26;46389:5;46369:26;:::i;:::-;46358:37;;46289:124;;;:::o;46431:181::-;46548:45;46568:24;46586:5;46568:24;:::i;:::-;46548:45;:::i;:::-;46543:3;46536:58;46431:181;;:::o;46630:476::-;46790:3;46817:75;46888:3;46879:6;46817:75;:::i;:::-;46929:2;46924:3;46920:12;46913:19;;46961:95;47052:3;47043:6;46961:95;:::i;:::-;46954:102;;47085:3;47078:10;;46630:476;;;;;:::o;47124:273::-;47276:34;47272:1;47264:6;47260:14;47253:58;47357:20;47352:2;47344:6;47340:15;47333:45;47124:273;:::o;47415:414::-;47557:3;47590:67;47654:2;47649:3;47590:67;:::i;:::-;47583:74;;47678:93;47767:3;47678:93;:::i;:::-;47808:2;47803:3;47799:12;47792:19;;47415:414;;;:::o;47847:467::-;48013:4;48063:2;48052:9;48048:18;48040:26;;48124:9;48118:4;48114:20;48110:1;48099:9;48095:17;48088:47;48164:131;48290:4;48164:131;:::i;:::-;48156:139;;47847:467;;;:::o;48332:483::-;48473:4;48523:2;48512:9;48508:18;48500:26;;48584:9;48578:4;48574:20;48570:1;48559:9;48555:17;48548:47;48624:78;48697:4;48688:6;48624:78;:::i;:::-;48616:86;;48724:72;48792:2;48781:9;48777:18;48768:6;48724:72;:::i;:::-;48332:483;;;;;:::o;48833:228::-;48893:77;48890:1;48883:88;49002:4;48999:1;48992:15;49038:4;49035:1;49028:15;49079:236;49111:1;49140:20;49158:1;49140:20;:::i;:::-;49135:25;;49186:20;49204:1;49186:20;:::i;:::-;49181:25;;49237:1;49227:35;;49242:18;;:::i;:::-;49227:35;49295:1;49292;49288:9;49283:14;;49079:236;;;;:::o;49333:238::-;49485:66;49481:1;49473:6;49469:14;49462:90;49333:238;:::o;49589:450::-;49749:3;49782:85;49864:2;49859:3;49782:85;:::i;:::-;49775:92;;49888:93;49977:3;49888:93;:::i;:::-;50018:2;50013:3;50009:12;50002:19;;49589:450;;;:::o;50057:530::-;50209:66;50205:1;50197:6;50193:14;50186:90;50322:66;50317:2;50309:6;50305:15;50298:91;50435:66;50430:2;50422:6;50418:15;50411:91;50548:19;50543:2;50535:6;50531:15;50524:44;50057:530;:::o;50605:452::-;50765:3;50798:86;50880:3;50875;50798:86;:::i;:::-;50791:93;;50905;50994:3;50905:93;:::i;:::-;51035:3;51030;51026:13;51019:20;;50605:452;;;:::o;51075:238::-;51227:66;51223:1;51215:6;51211:14;51204:90;51075:238;:::o;51331:450::-;51491:3;51524:85;51606:2;51601:3;51524:85;:::i;:::-;51517:92;;51630:93;51719:3;51630:93;:::i;:::-;51760:2;51755:3;51751:12;51744:19;;51331:450;;;:::o;51799:180::-;51951:8;51947:1;51939:6;51935:14;51928:32;51799:180;:::o;51997:448::-;52157:3;52190:84;52272:1;52267:3;52190:84;:::i;:::-;52183:91;;52295:93;52384:3;52295:93;:::i;:::-;52425:1;52420:3;52416:11;52409:18;;51997:448;;;:::o;52463:1927::-;53137:3;53171:148;53315:3;53171:148;:::i;:::-;53164:155;;53348:93;53437:3;53428:6;53348:93;:::i;:::-;53341:100;;53470:148;53614:3;53470:148;:::i;:::-;53463:155;;53647:95;53738:3;53729:6;53647:95;:::i;:::-;53640:102;;53771:148;53915:3;53771:148;:::i;:::-;53764:155;;53948:93;54037:3;54028:6;53948:93;:::i;:::-;53941:100;;54070:93;54159:3;54150:6;54070:93;:::i;:::-;54063:100;;54192:148;54336:3;54192:148;:::i;:::-;54185:155;;54369:3;54362:10;;52463:1927;;;;;;;:::o;54408:245::-;54448:1;54477:20;54495:1;54477:20;:::i;:::-;54472:25;;54523:20;54541:1;54523:20;:::i;:::-;54518:25;;54574:1;54564:35;;54579:18;;:::i;:::-;54564:35;54633:1;54630;54626:9;54621:14;;54408:245;;;;:::o;54671:420::-;54711:7;54746:20;54764:1;54746:20;:::i;:::-;54741:25;;54792:20;54810:1;54792:20;:::i;:::-;54787:25;;55004:1;54936:66;54932:74;54929:1;54926:81;54921:1;54914:9;54907:17;54903:105;54900:131;;;55011:18;;:::i;:::-;54900:131;55071:1;55068;55064:9;55053:20;;54671:420;;;;:::o;55109:138::-;55151:8;55222:5;55219:1;55215:13;55182:46;;55109:138;;;:::o;55265:1076::-;55326:5;55333:4;55369:6;55360:15;;55405:5;55396:14;;55431:892;55452:1;55442:8;55439:15;55431:892;;;55583:4;55578:3;55574:14;55568:4;55565:24;55562:50;;;55592:18;;:::i;:::-;55562:50;55654:1;55644:8;55640:16;55637:547;;;56153:4;56146:5;56142:16;56133:25;;55637:547;56227:4;56221;56217:15;56209:23;;56269:32;56292:8;56269:32;:::i;:::-;56257:44;;55431:892;;;55265:1076;;;;;;;:::o;56359:1421::-;56413:5;56652:8;56642:40;;56673:1;56664:10;;56675:5;;56642:40;56713:4;56703:36;;56730:1;56721:10;;56732:5;;56703:36;56823:4;56895:1;56890:27;;;;56943:1;56938:263;;;;56816:385;;56890:27;56908:1;56899:10;;56910:5;;;56938:263;57007:3;56997:8;56994:17;56991:43;;;57014:18;;:::i;:::-;56991:43;57075:8;57072:1;57068:16;57059:25;;57122:3;57115:5;57112:14;57109:40;;;57129:18;;:::i;:::-;57109:40;57174:5;;;56816:385;;57346:2;57336:8;57333:16;57327:3;57321:4;57318:13;57314:36;57284:2;57274:8;57271:16;57266:2;57260:4;57257:12;57253:35;57225:147;57222:342;;;57438:8;57432:4;57428:19;57419:28;;57485:3;57478:5;57475:14;57472:40;;;57492:18;;:::i;:::-;57472:40;57537:5;;57222:342;57601:42;57639:3;57629:8;57623:4;57620:1;57601:42;:::i;:::-;57586:57;;;;57687:4;57682:3;57678:14;57671:5;57668:25;57665:51;;;57696:18;;:::i;:::-;57665:51;57757:4;57750:5;57746:16;57737:25;;56359:1421;;;;;;:::o;57798:333::-;57858:5;57894:23;57912:4;57894:23;:::i;:::-;57886:31;;57950:27;57968:8;57950:27;:::i;:::-;57938:39;;58008:104;58045:66;58035:8;58029:4;58008:104;:::i;:::-;57999:113;;57798:333;;;;:::o;58149:110::-;58184:7;58236:4;58229:5;58225:16;58214:27;;58149:110;;;:::o;58277:239::-;58315:1;58344:18;58360:1;58344:18;:::i;:::-;58339:23;;58388:18;58404:1;58388:18;:::i;:::-;58383:23;;58437:1;58427:35;;58442:18;;:::i;:::-;58427:35;58496:1;58493;58489:9;58484:14;;58277:239;;;;:::o;58534:352::-;58572:7;58607:18;58623:1;58607:18;:::i;:::-;58602:23;;58651:18;58667:1;58651:18;:::i;:::-;58646:23;;58799:1;58793:4;58789:12;58786:1;58783:19;58778:1;58771:9;58764:17;58760:43;58757:69;;;58806:18;;:::i;:::-;58757:69;58866:1;58863;58859:9;58848:20;;58534:352;;;;:::o;58904:245::-;58942:4;58974:18;58990:1;58974:18;:::i;:::-;58969:23;;59018:18;59034:1;59018:18;:::i;:::-;59013:23;;59067:1;59064;59061:8;59058:34;;;59072:18;;:::i;:::-;59058:34;59129:1;59126;59122:9;59114:17;;58904:245;;;;:::o;59167:204::-;59250:11;59296:6;59291:3;59284:19;59348:4;59343:3;59339:14;59324:29;;59167:204;;;;:::o;59389:420::-;59475:3;59515:38;59547:5;59515:38;:::i;:::-;59581:70;59644:6;59639:3;59581:70;:::i;:::-;59574:77;;59672:52;59717:6;59712:3;59705:4;59698:5;59694:16;59672:52;:::i;:::-;59761:29;59783:6;59761:29;:::i;:::-;59756:3;59752:39;59745:46;;59479:330;59389:420;;;;:::o;59827:724::-;60022:4;60072:3;60061:9;60057:19;60049:27;;60098:71;60166:1;60155:9;60151:17;60142:6;60098:71;:::i;:::-;60191:72;60259:2;60248:9;60244:18;60235:6;60191:72;:::i;:::-;60285;60353:2;60342:9;60338:18;60329:6;60285:72;:::i;:::-;60416:9;60410:4;60406:20;60401:2;60390:9;60386:18;60379:48;60456:76;60527:4;60518:6;60456:76;:::i;:::-;60448:84;;59827:724;;;;;;;:::o;60569:177::-;60625:5;60668:6;60662:13;60653:22;;60696:32;60722:5;60696:32;:::i;:::-;60569:177;;;;:::o;60764:421::-;60833:6;60894:2;60882:9;60873:7;60869:23;60865:32;60862:119;;;60900:79;;:::i;:::-;60862:119;61044:1;61081:63;61136:7;61127:6;61116:9;61112:22;61081:63;:::i;:::-;61071:73;;61003:163;60764:421;;;;:::o;61203:184::-;61355:12;61351:1;61343:6;61339:14;61332:36;61203:184;:::o;61405:450::-;61565:3;61598:85;61680:2;61675:3;61598:85;:::i;:::-;61591:92;;61704:93;61793:3;61704:93;:::i;:::-;61834:2;61829:3;61825:12;61818:19;;61405:450;;;:::o;61873:260::-;62025:34;62021:1;62013:6;62009:14;62002:58;62106:7;62101:2;62093:6;62089:15;62082:32;61873:260;:::o;62151:450::-;62311:3;62344:85;62426:2;62421:3;62344:85;:::i;:::-;62337:92;;62450:93;62539:3;62450:93;:::i;:::-;62580:2;62575:3;62571:12;62564:19;;62151:450;;;:::o;62619:266::-;62771:34;62767:1;62759:6;62755:14;62748:58;62856:5;62851:2;62843:6;62839:15;62832:30;62619:266;:::o;62907:466::-;63067:3;63104:85;63186:2;63181:3;63104:85;:::i;:::-;63097:92;;63214:93;63303:3;63214:93;:::i;:::-;63348:2;63343:3;63339:12;63332:19;;62907:466;;;:::o;63395:196::-;63551:16;63547:1;63539:6;63535:14;63528:40;63395:196;:::o;63613:466::-;63773:3;63810:85;63892:2;63887:3;63810:85;:::i;:::-;63803:92;;63920:93;64009:3;63920:93;:::i;:::-;64054:2;64049:3;64045:12;64038:19;;63613:466;;;:::o;64101:204::-;64253:32;64249:1;64241:6;64237:14;64230:56;64101:204;:::o;64323:450::-;64483:3;64516:85;64598:2;64593:3;64516:85;:::i;:::-;64509:92;;64622:93;64711:3;64622:93;:::i;:::-;64752:2;64747:3;64743:12;64736:19;;64323:450;;;:::o;64791:266::-;64943:34;64939:1;64931:6;64927:14;64920:58;65028:5;65023:2;65015:6;65011:15;65004:30;64791:266;:::o;65079:466::-;65239:3;65276:85;65358:2;65353:3;65276:85;:::i;:::-;65269:92;;65386:93;65475:3;65386:93;:::i;:::-;65520:2;65515:3;65511:12;65504:19;;65079:466;;;:::o;65567:278::-;65723:34;65719:1;65711:6;65707:14;65700:58;65812:5;65807:2;65799:6;65795:15;65788:30;65567:278;:::o;65871:482::-;66031:3;66072:85;66154:2;66149:3;66072:85;:::i;:::-;66065:92;;66186:93;66275:3;66186:93;:::i;:::-;66324:2;66319:3;66315:12;66308:19;;65871:482;;;:::o;66379:199::-;66539:11;66535:1;66527:6;66523:14;66516:35;66379:199;:::o;66604:480::-;66764:3;66805:84;66887:1;66882:3;66805:84;:::i;:::-;66798:91;;66918:93;67007:3;66918:93;:::i;:::-;67056:1;67051:3;67047:11;67040:18;;66604:480;;;:::o;67110:904::-;67266:34;67262:1;67254:6;67250:14;67243:58;67351:34;67346:2;67338:6;67334:15;67327:59;67436:34;67431:2;67423:6;67419:15;67412:59;67521:34;67516:2;67508:6;67504:15;67497:59;67615:34;67609:3;67601:6;67597:16;67590:60;67701:34;67695:3;67687:6;67683:16;67676:60;67787:34;67781:3;67773:6;67769:16;67762:60;67881:34;67875:3;67867:6;67863:16;67856:60;67967:23;67961:3;67953:6;67949:16;67942:49;67110:904;:::o;68036:468::-;68196:3;68233:86;68315:3;68310;68233:86;:::i;:::-;68226:93;;68344;68433:3;68344:93;:::i;:::-;68478:3;68473;68469:13;68462:20;;68036:468;;;:::o;68526:4993::-;70193:3;70231:148;70375:3;70231:148;:::i;:::-;70224:155;;70412:93;70501:3;70492:6;70412:93;:::i;:::-;70405:100;;70538:148;70682:3;70538:148;:::i;:::-;70531:155;;70719:93;70808:3;70799:6;70719:93;:::i;:::-;70712:100;;70845:148;70989:3;70845:148;:::i;:::-;70838:155;;71026:95;71117:3;71108:6;71026:95;:::i;:::-;71019:102;;71154:148;71298:3;71154:148;:::i;:::-;71147:155;;71335:95;71426:3;71417:6;71335:95;:::i;:::-;71328:102;;71463:148;71607:3;71463:148;:::i;:::-;71456:155;;71644:93;71733:3;71724:6;71644:93;:::i;:::-;71637:100;;71770:148;71914:3;71770:148;:::i;:::-;71763:155;;71951:95;72042:3;72033:6;71951:95;:::i;:::-;71944:102;;72079:148;72223:3;72079:148;:::i;:::-;72072:155;;72260:95;72351:3;72342:6;72260:95;:::i;:::-;72253:102;;72388:148;72532:3;72388:148;:::i;:::-;72381:155;;72569:93;72658:3;72649:6;72569:93;:::i;:::-;72562:100;;72695:148;72839:3;72695:148;:::i;:::-;72688:155;;72876:95;72967:3;72958:6;72876:95;:::i;:::-;72869:102;;73004:148;73148:3;73004:148;:::i;:::-;72997:155;;73185:95;73276:3;73267:6;73185:95;:::i;:::-;73178:102;;73313:148;73457:3;73313:148;:::i;:::-;73306:155;;73494:3;73487:10;;68526:4993;;;;;;;;;;;;;:::o;73541:246::-;73697:66;73693:1;73685:6;73681:14;73674:90;73541:246;:::o;73809:466::-;73969:3;74006:85;74088:2;74083:3;74006:85;:::i;:::-;73999:92;;74116:93;74205:3;74116:93;:::i;:::-;74250:2;74245:3;74241:12;74234:19;;73809:466;;;:::o;74297:246::-;74453:66;74449:1;74441:6;74437:14;74430:90;74297:246;:::o;74565:464::-;74725:3;74762:84;74844:1;74839:3;74762:84;:::i;:::-;74755:91;;74871:93;74960:3;74871:93;:::i;:::-;75005:1;75000:3;74996:11;74989:18;;74565:464;;;:::o;75051:246::-;75207:66;75203:1;75195:6;75191:14;75184:90;75051:246;:::o;75319:464::-;75479:3;75516:84;75598:1;75593:3;75516:84;:::i;:::-;75509:91;;75625:93;75714:3;75625:93;:::i;:::-;75759:1;75754:3;75750:11;75743:18;;75319:464;;;:::o;75805:246::-;75961:66;75957:1;75949:6;75945:14;75938:90;75805:246;:::o;76073:464::-;76233:3;76270:84;76352:1;76347:3;76270:84;:::i;:::-;76263:91;;76379:93;76468:3;76379:93;:::i;:::-;76513:1;76508:3;76504:11;76497:18;;76073:464;;;:::o;76559:246::-;76715:66;76711:1;76703:6;76699:14;76692:90;76559:246;:::o;76827:466::-;76987:3;77024:85;77106:2;77101:3;77024:85;:::i;:::-;77017:92;;77134:93;77223:3;77134:93;:::i;:::-;77268:2;77263:3;77259:12;77252:19;;76827:466;;;:::o;77315:205::-;77364:4;77403:3;77395:11;;77442:3;77439:1;77432:14;77492:4;77489:1;77479:18;77471:26;;77315:205;;;:::o;77582:1165::-;77685:3;77738:5;77732:12;77783:36;77809:9;77783:36;:::i;:::-;77851:89;77933:6;77928:3;77851:89;:::i;:::-;77844:96;;77987:1;77976:9;77972:17;78019:1;78014:201;;;;78245:1;78240:485;;;;77965:760;;78014:201;78130:4;78126:9;78115;78111:25;78106:3;78099:38;78182:6;78177:3;78173:16;78166:23;;78014:201;;78240:485;78339:38;78371:5;78339:38;:::i;:::-;78415:1;78445:202;78459:6;78456:1;78453:13;78445:202;;;78549:7;78543:14;78539:1;78534:3;78530:11;78523:35;78615:1;78606:7;78602:15;78591:26;;78481:4;78478:1;78474:12;78469:17;;78445:202;;;78692:6;78687:3;78683:16;78676:23;;78247:478;;77965:760;;77689:1058;;77582:1165;;;;:::o;78769:195::-;78925:15;78921:1;78913:6;78909:14;78902:39;78769:195;:::o;78986:466::-;79146:3;79183:85;79265:2;79260:3;79183:85;:::i;:::-;79176:92;;79293:93;79382:3;79293:93;:::i;:::-;79427:2;79422:3;79418:12;79411:19;;78986:466;;;:::o;79474:246::-;79630:66;79626:1;79618:6;79614:14;79607:90;79474:246;:::o;79742:466::-;79902:3;79939:85;80021:2;80016:3;79939:85;:::i;:::-;79932:92;;80049:93;80138:3;80049:93;:::i;:::-;80183:2;80178:3;80174:12;80167:19;;79742:466;;;:::o;80230:3327::-;81344:3;81382:93;81471:3;81462:6;81382:93;:::i;:::-;81375:100;;81508:148;81652:3;81508:148;:::i;:::-;81501:155;;81689:93;81778:3;81769:6;81689:93;:::i;:::-;81682:100;;81815:148;81959:3;81815:148;:::i;:::-;81808:155;;81996:93;82085:3;82076:6;81996:93;:::i;:::-;81989:100;;82122:148;82266:3;82122:148;:::i;:::-;82115:155;;82303:93;82392:3;82383:6;82303:93;:::i;:::-;82296:100;;82429:148;82573:3;82429:148;:::i;:::-;82422:155;;82610:95;82701:3;82692:6;82610:95;:::i;:::-;82603:102;;82738:148;82882:3;82738:148;:::i;:::-;82731:155;;82919:92;83007:3;82998:6;82919:92;:::i;:::-;82912:99;;83044:148;83188:3;83044:148;:::i;:::-;83037:155;;83225:93;83314:3;83305:6;83225:93;:::i;:::-;83218:100;;83351:148;83495:3;83351:148;:::i;:::-;83344:155;;83532:3;83525:10;;80230:3327;;;;;;;;;;:::o;83579:333::-;83617:3;83652:18;83668:1;83652:18;:::i;:::-;83647:23;;83700:18;83716:1;83700:18;:::i;:::-;83695:23;;83822:1;83816:4;83812:12;83809:1;83806:19;83803:45;;;83828:18;;:::i;:::-;83803:45;83888:1;83885;83881:9;83874:16;;83579:333;;;;:::o;83934:214::-;84090:34;84086:1;84078:6;84074:14;84067:58;83934:214;:::o;84170:430::-;84312:3;84349:67;84413:2;84408:3;84349:67;:::i;:::-;84342:74;;84441:93;84530:3;84441:93;:::i;:::-;84575:2;84570:3;84566:12;84559:19;;84170:430;;;:::o;84622:483::-;84788:4;84842:2;84831:9;84827:18;84819:26;;84907:9;84901:4;84897:20;84893:1;84882:9;84878:17;84871:47;84951:131;85077:4;84951:131;:::i;:::-;84943:139;;84622:483;;;:::o;85127:210::-;85283:30;85279:1;85271:6;85267:14;85260:54;85127:210;:::o;85359:430::-;85501:3;85538:67;85602:2;85597:3;85538:67;:::i;:::-;85531:74;;85630:93;85719:3;85630:93;:::i;:::-;85764:2;85759:3;85755:12;85748:19;;85359:430;;;:::o;85811:483::-;85977:4;86031:2;86020:9;86016:18;86008:26;;86096:9;86090:4;86086:20;86082:1;86071:9;86067:17;86060:47;86140:131;86266:4;86140:131;:::i;:::-;86132:139;;85811:483;;;:::o

Swarm Source

ipfs://8b0b276d7d9be18d38114c2f8ca8c5711713a18dcc8320a4cd03d5e5e21ac693

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.