From f79ee1cda1f5f7142db977b5407d7115f80bfc8e Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 12 May 2023 15:30:40 +0900 Subject: [PATCH 01/14] duplicate from sushi-Nouns --- contract/contracts/LocalNounsToken.sol | 85 +++++ .../localNouns/LocalNounsDescriptor.sol | 361 ++++++++++++++++++ .../localNouns/LocalNounsProvider.sol | 111 ++++++ .../contracts/localNouns/LocalNounsSeeder.sol | 47 +++ contract/contracts/localNouns/README.md | 22 ++ .../interfaces/IAssetProviderExMint.sol | 9 + .../interfaces/INounsDescriptor.sol | 99 +++++ .../interfaces/INounsDescriptorMinimal.sol | 44 +++ .../localNouns/interfaces/INounsSeeder.sol | 32 ++ 9 files changed, 810 insertions(+) create mode 100644 contract/contracts/LocalNounsToken.sol create mode 100644 contract/contracts/localNouns/LocalNounsDescriptor.sol create mode 100644 contract/contracts/localNouns/LocalNounsProvider.sol create mode 100644 contract/contracts/localNouns/LocalNounsSeeder.sol create mode 100644 contract/contracts/localNouns/README.md create mode 100644 contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol create mode 100644 contract/contracts/localNouns/interfaces/INounsDescriptor.sol create mode 100644 contract/contracts/localNouns/interfaces/INounsDescriptorMinimal.sol create mode 100644 contract/contracts/localNouns/interfaces/INounsSeeder.sol diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol new file mode 100644 index 00000000..1148b673 --- /dev/null +++ b/contract/contracts/LocalNounsToken.sol @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MIT + +/* + * Created by Isamu Arimoto (@isamua) + */ + +pragma solidity ^0.8.6; + +import '@openzeppelin/contracts/utils/Strings.sol'; +import './libs/ProviderTokenA1.sol'; +import { INounsSeeder } from './sushi/interfaces/INounsSeeder.sol'; +import './sushi/interfaces/IAssetProviderExMint.sol'; + +contract SushiNounsToken is ProviderTokenA1 { + using Strings for uint256; + + // fes committee + address public committee; + address public designer; + address public developper; + + IAssetProviderExMint public assetProvider2; + + constructor( + IAssetProviderExMint _assetProvider, + address _committee, + address _designer, + address _developper + ) ProviderTokenA1(_assetProvider, 'Sushi Nouns', 'Sushi Nouns') { + description = 'Sushi Nouns Token.'; + assetProvider2 = _assetProvider; + mintPrice = 1e15; // 0.1 + mintLimit = 5000; + committee = _committee; + designer = _designer; + developper = _developper; + } + + function tokenName(uint256 _tokenId) internal pure override returns (string memory) { + return string(abi.encodePacked('Sushi Nouns ', _tokenId.toString())); + } + function tokenURI(uint256 _tokenId) public view override returns (string memory) { + require(_tokenId < _nextTokenId(), 'SushiNounsToken.tokenURI: nonexistent token'); + + (string memory svgPart, string memory tag) = assetProvider2.generateSVGPart(_tokenId); + bytes memory image = bytes(svgPart); + + return + string( + abi.encodePacked( + 'data:application/json;base64,', + Base64.encode( + bytes( + abi.encodePacked( + '{"name":"', + tokenName(_tokenId), + '","description":"', + description, + '","attributes":[', + generateTraits(_tokenId), + '],"image":"data:image/svg+xml;base64,', + Base64.encode(image), + '"}' + ) + ) + ) + ) + ); + } + function mint() public payable virtual override returns (uint256 tokenId) { + require(msg.value >= mintPrice, 'Must send the mint price'); + assetProvider2.mint(_nextTokenId()); + super.mint(); + address payable payableTo = payable(committee); + payableTo.transfer(address(this).balance); + + if ((_nextTokenId() % 10) == 8) { + assetProvider2.mint(_nextTokenId()); + _safeMint(designer, 1); + assetProvider2.mint(_nextTokenId()); + _safeMint(developper, 1); + } + return _nextTokenId() - 1; + } +} diff --git a/contract/contracts/localNouns/LocalNounsDescriptor.sol b/contract/contracts/localNouns/LocalNounsDescriptor.sol new file mode 100644 index 00000000..412066b0 --- /dev/null +++ b/contract/contracts/localNouns/LocalNounsDescriptor.sol @@ -0,0 +1,361 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title The Nouns NFT descriptor + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; +import { Strings } from '@openzeppelin/contracts/utils/Strings.sol'; +import { INounsDescriptor } from './interfaces/INounsDescriptor.sol'; +import { INounsSeeder } from './interfaces/INounsSeeder.sol'; +import { MultiPartRLEToSVG } from '../external/nouns/libs/MultiPartRLEToSVG.sol'; +import { NFTDescriptor } from '../external/nouns/libs/NFTDescriptor.sol'; + +contract SushiNounsDescriptor is INounsDescriptor, Ownable { + using Strings for uint256; + + // original + INounsDescriptor public immutable descriptor; + + // prettier-ignore + // https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt + bytes32 constant COPYRIGHT_CC0_1_0_UNIVERSAL_LICENSE = 0xa2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499; + + // Whether or not new Noun parts can be added + bool public override arePartsLocked; + + // Whether or not `tokenURI` should be returned as a data URI (Default: true) + bool public override isDataURIEnabled = true; + + // Base URI + string public override baseURI; + + // Noun Color Palettes (Index => Hex Colors) + mapping(uint8 => string[]) public override palettes; + + // Noun Backgrounds (Hex Colors) + string[] public override backgrounds; + + // Noun Bodies (Custom RLE) + bytes[] public override bodies; + + // Noun Accessories (Custom RLE) + bytes[] public override accessories; + + // Noun Heads (Custom RLE) + bytes[] public override heads; + + // Noun Glasses (Custom RLE) + bytes[] public override glasses; + + constructor(INounsDescriptor _descriptor) { + descriptor = _descriptor; + } + /** + * @notice Require that the parts have not been locked. + */ + modifier whenPartsNotLocked() { + require(!arePartsLocked, 'Parts are locked'); + _; + } + + /** + * @notice Get the number of available Noun `backgrounds`. + */ + function backgroundCount() external view override returns (uint256) { + return backgrounds.length; + } + + /** + * @notice Get the number of available Noun `bodies`. + */ + function bodyCount() external view override returns (uint256) { + return descriptor.bodyCount(); + // return bodies.length; + } + + /** + * @notice Get the number of available Noun `accessories`. + */ + function accessoryCount() external view override returns (uint256) { + return accessories.length; + } + + /** + * @notice Get the number of available Noun `heads`. + */ + function headCount() external view override returns (uint256) { + return heads.length; + } + + /** + * @notice Get the number of available Noun `glasses`. + */ + function glassesCount() external view override returns (uint256) { + return descriptor.glassesCount(); + // return glasses.length; + } + + /** + * @notice Add colors to a color palette. + * @dev This function can only be called by the owner. + */ + function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external override onlyOwner { + require(palettes[paletteIndex].length + newColors.length <= 256, 'Palettes can only hold 256 colors'); + for (uint256 i = 0; i < newColors.length; i++) { + _addColorToPalette(paletteIndex, newColors[i]); + } + } + + /** + * @notice Batch add Noun backgrounds. + * @dev This function can only be called by the owner when not locked. + */ + function addManyBackgrounds(string[] calldata _backgrounds) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _backgrounds.length; i++) { + _addBackground(_backgrounds[i]); + } + } + + /** + * @notice Batch add Noun bodies. + * @dev This function can only be called by the owner when not locked. + */ + function addManyBodies(bytes[] calldata _bodies) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _bodies.length; i++) { + _addBody(_bodies[i]); + } + } + + /** + * @notice Batch add Noun accessories. + * @dev This function can only be called by the owner when not locked. + */ + function addManyAccessories(bytes[] calldata _accessories) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _accessories.length; i++) { + _addAccessory(_accessories[i]); + } + } + + /** + * @notice Batch add Noun heads. + * @dev This function can only be called by the owner when not locked. + */ + function addManyHeads(bytes[] calldata _heads) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _heads.length; i++) { + _addHead(_heads[i]); + } + } + + /** + * @notice Batch add Noun glasses. + * @dev This function can only be called by the owner when not locked. + */ + function addManyGlasses(bytes[] calldata _glasses) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _glasses.length; i++) { + _addGlasses(_glasses[i]); + } + } + + /** + * @notice Add a single color to a color palette. + * @dev This function can only be called by the owner. + */ + function addColorToPalette(uint8 _paletteIndex, string calldata _color) external override onlyOwner { + require(palettes[_paletteIndex].length <= 255, 'Palettes can only hold 256 colors'); + _addColorToPalette(_paletteIndex, _color); + } + + /** + * @notice Add a Noun background. + * @dev This function can only be called by the owner when not locked. + */ + function addBackground(string calldata _background) external override onlyOwner whenPartsNotLocked { + _addBackground(_background); + } + + /** + * @notice Add a Noun body. + * @dev This function can only be called by the owner when not locked. + */ + function addBody(bytes calldata _body) external override onlyOwner whenPartsNotLocked { + _addBody(_body); + } + + /** + * @notice Add a Noun accessory. + * @dev This function can only be called by the owner when not locked. + */ + function addAccessory(bytes calldata _accessory) external override onlyOwner whenPartsNotLocked { + _addAccessory(_accessory); + } + + /** + * @notice Add a Noun head. + * @dev This function can only be called by the owner when not locked. + */ + function addHead(bytes calldata _head) external override onlyOwner whenPartsNotLocked { + _addHead(_head); + } + + /** + * @notice Add Noun glasses. + * @dev This function can only be called by the owner when not locked. + */ + function addGlasses(bytes calldata _glasses) external override onlyOwner whenPartsNotLocked { + _addGlasses(_glasses); + } + + /** + * @notice Lock all Noun parts. + * @dev This cannot be reversed and can only be called by the owner when not locked. + */ + function lockParts() external override onlyOwner whenPartsNotLocked { + arePartsLocked = true; + + emit PartsLocked(); + } + + /** + * @notice Toggle a boolean value which determines if `tokenURI` returns a data URI + * or an HTTP URL. + * @dev This can only be called by the owner. + */ + function toggleDataURIEnabled() external override onlyOwner { + bool enabled = !isDataURIEnabled; + + isDataURIEnabled = enabled; + emit DataURIToggled(enabled); + } + + /** + * @notice Set the base URI for all token IDs. It is automatically + * added as a prefix to the value returned in {tokenURI}, or to the + * token ID if {tokenURI} is empty. + * @dev This can only be called by the owner. + */ + function setBaseURI(string calldata _baseURI) external override onlyOwner { + baseURI = _baseURI; + + emit BaseURIUpdated(_baseURI); + } + + /** + * @notice Given a token ID and seed, construct a token URI for an official Nouns DAO noun. + * @dev The returned value may be a base64 encoded data URI or an API URL. + */ + function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory) { + if (isDataURIEnabled) { + return dataURI(tokenId, seed); + } + return string(abi.encodePacked(baseURI, tokenId.toString())); + } + + /** + * @notice Given a token ID and seed, construct a base64 encoded data URI for an official Nouns DAO noun. + */ + function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) public view override returns (string memory) { + string memory nounId = tokenId.toString(); + string memory name = string(abi.encodePacked('Noun ', nounId)); + string memory description = string(abi.encodePacked('Noun ', nounId, ' is a member of the Nouns DAO')); + + return genericDataURI(name, description, seed); + } + + /** + * @notice Given a name, description, and seed, construct a base64 encoded data URI. + */ + function genericDataURI( + string memory name, + string memory description, + INounsSeeder.Seed memory seed + ) public view override returns (string memory) { + NFTDescriptor.TokenURIParams memory params = NFTDescriptor.TokenURIParams({ + name: name, + description: description, + parts: _getPartsForSeed(seed), + background: descriptor.backgrounds(seed.background) + }); + return NFTDescriptor.constructTokenURI(params, palettes); + } + + /** + * @notice Given a seed, construct a base64 encoded SVG image. + */ + function generateSVGImage(INounsSeeder.Seed memory seed) external view override returns (string memory) { + MultiPartRLEToSVG.SVGParams memory params = MultiPartRLEToSVG.SVGParams({ + parts: _getPartsForSeed(seed), + background: descriptor.backgrounds(seed.background) + }); + return NFTDescriptor.generateSVGImage(params, palettes); + } + + /** + * @notice Add a single color to a color palette. + */ + function _addColorToPalette(uint8 _paletteIndex, string calldata _color) internal { + palettes[_paletteIndex].push(_color); + } + + /** + * @notice Add a Noun background. + */ + function _addBackground(string calldata _background) internal { + backgrounds.push(_background); + } + + /** + * @notice Add a Noun body. + */ + + function _addBody(bytes calldata _body) internal { + // nothing + // bodies.push(_body); + } + + /** + * @notice Add a Noun accessory. + */ + function _addAccessory(bytes calldata _accessory) internal { + accessories.push(_accessory); + } + + /** + * @notice Add a Noun head. + */ + function _addHead(bytes calldata _head) internal { + heads.push(_head); + } + + /** + * @notice Add Noun glasses. + */ + function _addGlasses(bytes calldata _glasses) internal { + // glasses.push(_glasses); + } + + /** + * @notice Get all Noun parts for the passed `seed`. + */ + function _getPartsForSeed(INounsSeeder.Seed memory seed) internal view returns (bytes[] memory) { + bytes[] memory _parts = new bytes[](4); + _parts[0] = descriptor.bodies(seed.body); + _parts[1] = accessories[seed.accessory]; + _parts[2] = heads[seed.head]; + _parts[3] = descriptor.glasses(seed.glasses); + return _parts; + } +} diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol new file mode 100644 index 00000000..c0f3586e --- /dev/null +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: MIT + +/* + * Created by Isamu Arimoto (@isamua) + */ + +pragma solidity ^0.8.6; + +import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; +import './interfaces/IAssetProviderExMint.sol'; +import '@openzeppelin/contracts/utils/Strings.sol'; +import '@openzeppelin/contracts/interfaces/IERC165.sol'; + +import { INounsDescriptor } from './interfaces/INounsDescriptor.sol'; +import { INounsSeeder } from './interfaces/INounsSeeder.sol'; +import { NFTDescriptor } from '../external/nouns/libs/NFTDescriptor.sol'; + +contract SushiNounsProvider is IAssetProviderExMint, IERC165, Ownable { + using Strings for uint256; + + string constant providerKey = 'SushiNouns'; + address public receiver; + + uint256 public nextTokenId; + + INounsDescriptor public immutable descriptor; + INounsDescriptor public immutable sushidescriptor; + INounsSeeder public immutable seeder; + INounsSeeder public immutable sushiseeder; + + mapping(uint256 => INounsSeeder.Seed) public seeds; + + constructor( + INounsDescriptor _descriptor, + INounsDescriptor _sushidescriptor, + INounsSeeder _seeder, + INounsSeeder _sushiseeder + ) { + receiver = owner(); + + descriptor = _descriptor; + sushidescriptor = _sushidescriptor; + seeder = _seeder; + sushiseeder = _sushiseeder; + } + + function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { + return interfaceId == type(IAssetProvider).interfaceId || interfaceId == type(IERC165).interfaceId; + } + + function getOwner() external view override returns (address) { + return owner(); + } + + function getProviderInfo() external view override returns (ProviderInfo memory) { + return ProviderInfo(providerKey, 'Logo', this); + } + + function totalSupply() external pure override returns (uint256) { + return 0; // indicating "dynamically (but deterministically) generated from the given assetId) + } + + function processPayout(uint256 _assetId) external payable override { + address payable payableTo = payable(receiver); + payableTo.transfer(msg.value); + emit Payout(providerKey, _assetId, payableTo, msg.value); + } + + function setReceiver(address _receiver) external onlyOwner { + receiver = _receiver; + } + + function generateSeed(uint256 _assetId) internal view returns (INounsSeeder.Seed memory mixedSeed) { + INounsSeeder.Seed memory seed1 = seeder.generateSeed(_assetId, descriptor); + INounsSeeder.Seed memory seed2 = sushiseeder.generateSeed(_assetId, sushidescriptor); + + mixedSeed = INounsSeeder.Seed({ + background: seed1.background, + body: seed1.body, + accessory: seed2.accessory, + head: seed2.head, + glasses: seed1.glasses + }); + + } + function generateSVGPart(uint256 _assetId) public view override returns (string memory svgPart, string memory tag) { + // INounsSeeder.Seed memory seed = generateSeed(_assetId); + INounsSeeder.Seed memory seed = seeds[_assetId]; + svgPart = sushidescriptor.generateSVGImage(seed); + + // generateSVGImage + tag = string(""); + // svgPart = string(""); + } + + function generateTraits(uint256 _assetId) external pure override returns (string memory traits) { + // nothing to return + } + + function mint(uint256 _assetId) external returns (uint256) { + if (nextTokenId == _assetId) { + seeds[_assetId] = generateSeed(_assetId); + nextTokenId ++; + } + + return _assetId; + } + + + +} diff --git a/contract/contracts/localNouns/LocalNounsSeeder.sol b/contract/contracts/localNouns/LocalNounsSeeder.sol new file mode 100644 index 00000000..942d8f0b --- /dev/null +++ b/contract/contracts/localNouns/LocalNounsSeeder.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title The NounsToken pseudo-random seed generator + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsSeeder } from './interfaces/INounsSeeder.sol'; +import { INounsDescriptorMinimal } from './interfaces/INounsDescriptorMinimal.sol'; + +contract SushiNounsSeeder is INounsSeeder { + /** + * @notice Generate a pseudo-random Noun seed using the previous blockhash and noun ID. + */ + function generateSeed(uint256 nounId, INounsDescriptorMinimal descriptor) external view returns (Seed memory) { + uint256 pseudorandomness = uint256( + keccak256(abi.encodePacked(blockhash(block.number - 1), nounId)) + ); + + uint256 accessoryCount = descriptor.accessoryCount(); + uint256 headCount = descriptor.headCount(); + + return Seed({ + background: 0, + body: 0, + accessory: uint48( + uint48(pseudorandomness >> 96) % accessoryCount + ), + head: uint48( + uint48(pseudorandomness >> 144) % headCount + ), + glasses: 0 + }); + } +} diff --git a/contract/contracts/localNouns/README.md b/contract/contracts/localNouns/README.md new file mode 100644 index 00000000..025c91dd --- /dev/null +++ b/contract/contracts/localNouns/README.md @@ -0,0 +1,22 @@ +# Local nouns + +- [localNouns](https://github.com/Cryptocoders-wtf/local-nouns-assets/)にあるご当地nounsのheadとaccessoryを使ってNounish NFTを構成する + +- bodyとglassはNounsTokenのデータを参照してそのまま使う +- headとaccessoryはstorageへ書き込む + +## Contractの構成 +- SushiNounsToken -> SushiNounsProvider -> SushiNounsDescriptor(NounsDescriptorを中で参照) +- MixedSeeder(NounsSeeder, SushiNounsSeederをmixしたseeder) + +- データ等を重複しない構成をしている + - paletteが型問題で参照できないのでSushiNounsDescriptorにデータとして入れる +- backgroundsの画像化は試したがデータ量が多いのでgas代問題でng + - SushiNounsDescriptorのpartsを5個にし、NFTDescriptorを改良すればできる +- mint時にseedはproviderで管理する + - seederの受け渡しに問題でtokenで管理していない + +## deploy & test + - test/sushi.ts にテストがある + - これを参照すればdeployもつくれる。 + - nouns daoのcontracのデータを参照するので、mainnet forkingで動かす必要がある diff --git a/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol b/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol new file mode 100644 index 00000000..88369dbb --- /dev/null +++ b/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.6; + +import 'assetprovider.sol/IAssetProvider.sol'; + +interface IAssetProviderExMint is IAssetProvider { + function mint(uint256 _assetId) external returns (uint256); +} diff --git a/contract/contracts/localNouns/interfaces/INounsDescriptor.sol b/contract/contracts/localNouns/interfaces/INounsDescriptor.sol new file mode 100644 index 00000000..6c676f6a --- /dev/null +++ b/contract/contracts/localNouns/interfaces/INounsDescriptor.sol @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsDescriptor + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsSeeder } from './INounsSeeder.sol'; +import { INounsDescriptorMinimal } from './INounsDescriptorMinimal.sol'; + +interface INounsDescriptor is INounsDescriptorMinimal { + event PartsLocked(); + + event DataURIToggled(bool enabled); + + event BaseURIUpdated(string baseURI); + + function arePartsLocked() external returns (bool); + + function isDataURIEnabled() external returns (bool); + + function baseURI() external returns (string memory); + + function palettes(uint8 paletteIndex, uint256 colorIndex) external view returns (string memory); + + function backgrounds(uint256 index) external view returns (string memory); + + function bodies(uint256 index) external view returns (bytes memory); + + function accessories(uint256 index) external view returns (bytes memory); + + function heads(uint256 index) external view returns (bytes memory); + + function glasses(uint256 index) external view returns (bytes memory); + + function backgroundCount() external view override returns (uint256); + + function bodyCount() external view override returns (uint256); + + function accessoryCount() external view override returns (uint256); + + function headCount() external view override returns (uint256); + + function glassesCount() external view override returns (uint256); + + function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external; + + function addManyBackgrounds(string[] calldata backgrounds) external; + + function addManyBodies(bytes[] calldata bodies) external; + + function addManyAccessories(bytes[] calldata accessories) external; + + function addManyHeads(bytes[] calldata heads) external; + + function addManyGlasses(bytes[] calldata glasses) external; + + function addColorToPalette(uint8 paletteIndex, string calldata color) external; + + function addBackground(string calldata background) external; + + function addBody(bytes calldata body) external; + + function addAccessory(bytes calldata accessory) external; + + function addHead(bytes calldata head) external; + + function addGlasses(bytes calldata glasses) external; + + function lockParts() external; + + function toggleDataURIEnabled() external; + + function setBaseURI(string calldata baseURI) external; + + function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory); + + function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory); + + function genericDataURI( + string calldata name, + string calldata description, + INounsSeeder.Seed memory seed + ) external view returns (string memory); + + function generateSVGImage(INounsSeeder.Seed memory seed) external view returns (string memory); +} diff --git a/contract/contracts/localNouns/interfaces/INounsDescriptorMinimal.sol b/contract/contracts/localNouns/interfaces/INounsDescriptorMinimal.sol new file mode 100644 index 00000000..c49d4c86 --- /dev/null +++ b/contract/contracts/localNouns/interfaces/INounsDescriptorMinimal.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Common interface for NounsDescriptor versions, as used by NounsToken and NounsSeeder. + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsSeeder } from './INounsSeeder.sol'; + +interface INounsDescriptorMinimal { + /// + /// USED BY TOKEN + /// + + function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view returns (string memory); + + function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view returns (string memory); + + /// + /// USED BY SEEDER + /// + + function backgroundCount() external view returns (uint256); + + function bodyCount() external view returns (uint256); + + function accessoryCount() external view returns (uint256); + + function headCount() external view returns (uint256); + + function glassesCount() external view returns (uint256); +} diff --git a/contract/contracts/localNouns/interfaces/INounsSeeder.sol b/contract/contracts/localNouns/interfaces/INounsSeeder.sol new file mode 100644 index 00000000..8b1b3f62 --- /dev/null +++ b/contract/contracts/localNouns/interfaces/INounsSeeder.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsSeeder + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsDescriptorMinimal } from './INounsDescriptorMinimal.sol'; + +interface INounsSeeder { + struct Seed { + uint48 background; + uint48 body; + uint48 accessory; + uint48 head; + uint48 glasses; + } + + function generateSeed(uint256 nounId, INounsDescriptorMinimal descriptor) external view returns (Seed memory); +} From 06e6a0eae16c55ff39698a3b8cd33ef2eb4496dd Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 12 May 2023 16:17:26 +0900 Subject: [PATCH 02/14] correct Contract name --- contract/contracts/LocalNounsToken.sol | 2 +- contract/contracts/localNouns/LocalNounsDescriptor.sol | 2 +- contract/contracts/localNouns/LocalNounsSeeder.sol | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index 1148b673..a0f9dbf2 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -11,7 +11,7 @@ import './libs/ProviderTokenA1.sol'; import { INounsSeeder } from './sushi/interfaces/INounsSeeder.sol'; import './sushi/interfaces/IAssetProviderExMint.sol'; -contract SushiNounsToken is ProviderTokenA1 { +contract LocalNounsToken is ProviderTokenA1 { using Strings for uint256; // fes committee diff --git a/contract/contracts/localNouns/LocalNounsDescriptor.sol b/contract/contracts/localNouns/LocalNounsDescriptor.sol index 412066b0..78cad917 100644 --- a/contract/contracts/localNouns/LocalNounsDescriptor.sol +++ b/contract/contracts/localNouns/LocalNounsDescriptor.sol @@ -24,7 +24,7 @@ import { INounsSeeder } from './interfaces/INounsSeeder.sol'; import { MultiPartRLEToSVG } from '../external/nouns/libs/MultiPartRLEToSVG.sol'; import { NFTDescriptor } from '../external/nouns/libs/NFTDescriptor.sol'; -contract SushiNounsDescriptor is INounsDescriptor, Ownable { +contract LocalNounsDescriptor is INounsDescriptor, Ownable { using Strings for uint256; // original diff --git a/contract/contracts/localNouns/LocalNounsSeeder.sol b/contract/contracts/localNouns/LocalNounsSeeder.sol index 942d8f0b..4735210a 100644 --- a/contract/contracts/localNouns/LocalNounsSeeder.sol +++ b/contract/contracts/localNouns/LocalNounsSeeder.sol @@ -20,7 +20,7 @@ pragma solidity ^0.8.6; import { INounsSeeder } from './interfaces/INounsSeeder.sol'; import { INounsDescriptorMinimal } from './interfaces/INounsDescriptorMinimal.sol'; -contract SushiNounsSeeder is INounsSeeder { +contract LocalNounsSeeder is INounsSeeder { /** * @notice Generate a pseudo-random Noun seed using the previous blockhash and noun ID. */ From 57b58d1d6a028ffd615bb17b9e8f72470d2e622d Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Fri, 12 May 2023 16:17:55 +0900 Subject: [PATCH 03/14] correct Contrant name --- contract/contracts/localNouns/LocalNounsProvider.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index c0f3586e..abff3c7f 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -15,7 +15,7 @@ import { INounsDescriptor } from './interfaces/INounsDescriptor.sol'; import { INounsSeeder } from './interfaces/INounsSeeder.sol'; import { NFTDescriptor } from '../external/nouns/libs/NFTDescriptor.sol'; -contract SushiNounsProvider is IAssetProviderExMint, IERC165, Ownable { +contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { using Strings for uint256; string constant providerKey = 'SushiNouns'; From 38f9beb4aaaef52cf4d23d6afa6757dfba30ae57 Mon Sep 17 00:00:00 2001 From: Takuya Mizutani Date: Sat, 13 May 2023 07:54:50 +0900 Subject: [PATCH 04/14] deploy NotoSans font --- contract/contracts/fonts/NotoSans.sol | 382 +++++++++--------- contract/contracts/fonts/fontData.ts | 4 +- .../font_lower_case_letters/a.svg | 2 +- .../font_lower_case_letters/b.svg | 2 +- .../font_lower_case_letters/c.svg | 2 +- .../font_lower_case_letters/d.svg | 2 +- .../font_lower_case_letters/e.svg | 2 +- .../font_lower_case_letters/f.svg | 2 +- .../font_lower_case_letters/g.svg | 2 +- .../font_lower_case_letters/h.svg | 2 +- .../font_lower_case_letters/i.svg | 2 +- .../font_lower_case_letters/j.svg | 2 +- .../font_lower_case_letters/k.svg | 2 +- .../font_lower_case_letters/l.svg | 2 +- .../font_lower_case_letters/m.svg | 2 +- .../font_lower_case_letters/n.svg | 2 +- .../font_lower_case_letters/o.svg | 2 +- .../font_lower_case_letters/p.svg | 2 +- .../font_lower_case_letters/q.svg | 2 +- .../font_lower_case_letters/r.svg | 2 +- .../font_lower_case_letters/s.svg | 2 +- .../font_lower_case_letters/t.svg | 2 +- .../font_lower_case_letters/u.svg | 2 +- .../font_lower_case_letters/v.svg | 2 +- .../font_lower_case_letters/w.svg | 2 +- .../font_lower_case_letters/x.svg | 2 +- .../font_lower_case_letters/y.svg | 2 +- .../font_lower_case_letters/z.svg | 2 +- .../fonts/font_NotoSans/font_numbers/0.svg | 2 +- .../fonts/font_NotoSans/font_numbers/1.svg | 2 +- .../fonts/font_NotoSans/font_numbers/2.svg | 2 +- .../fonts/font_NotoSans/font_numbers/3.svg | 2 +- .../fonts/font_NotoSans/font_numbers/4.svg | 2 +- .../fonts/font_NotoSans/font_numbers/5.svg | 2 +- .../fonts/font_NotoSans/font_numbers/6.svg | 2 +- .../fonts/font_NotoSans/font_numbers/7.svg | 2 +- .../fonts/font_NotoSans/font_numbers/8.svg | 2 +- .../fonts/font_NotoSans/font_numbers/9.svg | 2 +- .../fonts/font_NotoSans/font_symbols/LT.svg | 2 +- .../fonts/font_NotoSans/font_symbols/and.svg | 2 +- .../font_NotoSans/font_symbols/apostrophe.svg | 2 +- .../font_NotoSans/font_symbols/asterisk.svg | 2 +- .../fonts/font_NotoSans/font_symbols/at.svg | 2 +- .../font_NotoSans/font_symbols/back_slash.svg | 2 +- .../fonts/font_NotoSans/font_symbols/big.svg | 2 +- .../font_symbols/brackets_left.svg | 2 +- .../font_symbols/brackets_right.svg | 2 +- .../font_NotoSans/font_symbols/caret.svg | 2 +- .../font_NotoSans/font_symbols/colon.svg | 2 +- .../font_NotoSans/font_symbols/comma.svg | 2 +- .../font_NotoSans/font_symbols/dallar.svg | 2 +- .../font_symbols/double_quote.svg | 2 +- .../font_symbols/double_quote_2.svg | 2 +- .../font_NotoSans/font_symbols/equal.svg | 2 +- .../fonts/font_NotoSans/font_symbols/ex.svg | 2 +- .../font_NotoSans/font_symbols/grave.svg | 2 +- .../font_NotoSans/font_symbols/hyphen.svg | 2 +- .../font_symbols/left_bracket.svg | 2 +- .../font_symbols/left_middle_bracket.svg | 2 +- .../font_NotoSans/font_symbols/percent.svg | 2 +- .../font_NotoSans/font_symbols/period.svg | 2 +- .../fonts/font_NotoSans/font_symbols/plus.svg | 2 +- .../font_NotoSans/font_symbols/question.svg | 2 +- .../font_symbols/right_bracket.svg | 2 +- .../font_symbols/right_middle_bracket.svg | 2 +- .../font_NotoSans/font_symbols/semi_colon.svg | 2 +- .../font_NotoSans/font_symbols/sharp.svg | 2 +- .../font_NotoSans/font_symbols/slash.svg | 2 +- .../font_NotoSans/font_symbols/tilde.svg | 2 +- .../font_NotoSans/font_symbols/underline.svg | 2 +- .../font_NotoSans/font_symbols/vertical.svg | 2 +- .../fonts/font_NotoSans/font_symbols/yen.svg | 2 +- .../font_upper_case_letters/A.svg | 2 +- .../font_upper_case_letters/B.svg | 2 +- .../font_upper_case_letters/C.svg | 2 +- .../font_upper_case_letters/D.svg | 2 +- .../font_upper_case_letters/E.svg | 2 +- .../font_upper_case_letters/F.svg | 2 +- .../font_upper_case_letters/G.svg | 2 +- .../font_upper_case_letters/H.svg | 2 +- .../font_upper_case_letters/I.svg | 2 +- .../font_upper_case_letters/J.svg | 2 +- .../font_upper_case_letters/K.svg | 2 +- .../font_upper_case_letters/L.svg | 2 +- .../font_upper_case_letters/M.svg | 2 +- .../font_upper_case_letters/N.svg | 2 +- .../font_upper_case_letters/O.svg | 2 +- .../font_upper_case_letters/P.svg | 2 +- .../font_upper_case_letters/Q.svg | 2 +- .../font_upper_case_letters/R.svg | 2 +- .../font_upper_case_letters/S.svg | 2 +- .../font_upper_case_letters/T.svg | 2 +- .../font_upper_case_letters/U.svg | 2 +- .../font_upper_case_letters/V.svg | 2 +- .../font_upper_case_letters/W.svg | 2 +- .../font_upper_case_letters/X.svg | 2 +- .../font_upper_case_letters/Y.svg | 2 +- .../font_upper_case_letters/Z.svg | 2 +- src/utils/addresses.ts | 11 + src/utils/addresses/noto_sans_goerli.ts | 2 +- src/utils/addresses/noto_sans_localhost.ts | 3 + src/utils/addresses/noto_sans_mainnet.ts | 3 + src/utils/addresses/noto_sans_mumbai.ts | 3 + 103 files changed, 310 insertions(+), 290 deletions(-) create mode 100644 src/utils/addresses/noto_sans_localhost.ts create mode 100644 src/utils/addresses/noto_sans_mainnet.ts create mode 100644 src/utils/addresses/noto_sans_mumbai.ts diff --git a/contract/contracts/fonts/NotoSans.sol b/contract/contracts/fonts/NotoSans.sol index 1a4fafc2..8083ffe4 100644 --- a/contract/contracts/fonts/NotoSans.sol +++ b/contract/contracts/fonts/NotoSans.sol @@ -21,286 +21,286 @@ contract NotoSans is IFontProvider, Ownable { address public immutable designer; function font_ex() internal pure returns(bytes memory) { - return "\x4d\x50\xa7\x32\x08\x48\x6d\x05\x4c\x53\x65\x25\x48\x50\xc1\x5a\x00\x4d\x4a\x85\xc9\x51\x50\x4a\xa3\x58\x5c\x93\x08\x51\x6f\x85\x84\x89\x85\x84\x51\x50\xa3\x84\x58\xb6\x93\x08\x51\xc9\x85\xa3\xc9\x85\xc9\x51\x50\xc9\xee\x58\xb6\xfe\x08\x51\xa3\x95\x0e\x89\x95\x0e\x51\x50\x6f\x0e\x59\x5c\xfe\x08\x51\x4a\x85\xee\x4a\x85\xc9\x5a\x00"; + return "\x4d\x50\x7b\xb0\x06\x48\x50\x05\x4c\x3d\x55\x2f\x48\x50\x8d\x5a\x00\x4d\x36\x75\x1f\x51\x50\x36\x03\x57\x44\xf8\x06\x51\x51\x65\xec\x65\x65\xec\x51\x50\x78\xec\x56\x85\xf8\x06\x51\x93\x75\x03\x93\x75\x1f\x51\x50\x93\x3a\x57\x85\x46\x07\x51\x78\x75\x52\x65\x75\x52\x51\x50\x51\x52\x57\x44\x46\x07\x51\x36\x75\x3a\x36\x75\x1f\x5a\x00"; } function font_double_quote() internal pure returns(bytes memory) { - return "\x4d\x50\xa4\x25\x56\x8f\x2d\x07\x48\x57\x05\x4c\x43\x65\x25\x5a\x00\x4d\x5f\x66\x25\x4b\x76\x2d\x48\x60\x12\x4c\x50\xfe\x25\x06\x5a"; + return "\x4d\x50\x78\x2f\x55\x69\xf1\x05\x48\x40\x05\x4c\x31\x55\x2f\x5a\x00\x4d\x02\x56\x2f\xf3\x55\xf1\x48\x50\xc9\x4c\x50\xba\x2f\x05\x5a"; } function font_sharp() internal pure returns(bytes memory) { - return "\x4d\x60\xec\x42\x67\xcc\xe5\x07\x48\x58\x07\x56\x2a\x08\x48\xbe\x06\x4c\x94\x96\x00\x48\x60\x4c\x4c\x60\x76\x2a\x08\x48\xe3\x05\x4c\xbb\x95\x00\x48\x50\x74\x4c\x50\x9b\x2a\x08\x48\x1a\x05\x56\xe5\x07\x48\xa8\x05\x4c\xc9\x75\x42\x48\x50\x3f\x56\x60\xfe\x48\x50\xd5\x4c\x50\xfe\x25\x06\x48\x48\x06\x4c\x1f\x66\xfe\x48\x60\xb2\x4c\x60\xdb\x25\x06\x48\x22\x07\x4c\xf9\x66\xfe\x48\x70\x7b\x56\x70\x42\x5a\x00\x4d\xf1\x75\xe5\x48\x60\x83\x4c\x60\xa3\x42\x07\x48\x10\x06\x5a"; + return "\x4d\x60\x69\x00\x66\x52\x78\x06\x48\xb9\x06\x56\xaa\x06\x48\x48\x06\x4c\x29\x76\x47\x48\x50\xf4\x4c\x60\x12\xaa\x06\x48\xa7\x05\x4c\x8a\x75\x47\x48\x50\x55\x4c\x50\x72\xaa\x06\x48\x13\x05\x56\x78\x06\x48\x7b\x05\x4c\x93\x65\x00\x48\x50\x2f\x56\x50\xce\x48\x50\x9c\x4c\x50\xba\x2f\x05\x48\xf1\x05\x4c\xd3\x55\xce\x48\x60\x3f\x4c\x60\x5d\x2f\x05\x48\x91\x06\x4c\x73\x56\xce\x48\x60\xd2\x56\x60\x00\x5a\x00\x4d\xb1\x65\x78\x48\x60\x1c\x4c\x60\x34\x00\x06\x48\xc8\x05\x5a"; } function font_dallar() internal pure returns(bytes memory) { - return "\x4d\x60\x03\xce\x08\x51\xcb\x85\xcd\x96\x85\xc4\x51\x50\x60\xbb\x58\x3f\xac\x08\x56\x55\x08\x51\x62\x85\x65\x99\x85\x72\x51\x50\xcf\x7e\x68\x03\x7f\x08\x56\xb0\x07\x51\x9e\x75\x94\x6f\x75\x6a\x51\x50\x3f\x41\x57\x3f\xf8\x06\x51\x3f\x65\xac\x74\x65\x81\x51\x50\xa9\x56\x66\x03\x51\x06\x56\xf7\x05\x48\x45\x06\x56\x50\x06\x51\x7b\x66\x51\xa7\x66\x5c\x51\x60\xd4\x66\x66\xf9\x76\x06\x4c\xdd\x66\xc2\x51\x60\xbc\xb4\x66\x95\xaa\x06\x51\x6e\x66\xa1\x45\x66\x9e\x56\x70\x6c\x51\x60\x88\x7f\x67\xb5\x95\x07\x51\xe2\x76\xab\xf9\x76\xcb\x51\x70\x10\xec\x77\x10\x1f\x08\x51\x10\x87\x66\xdb\x86\x93\x51\x60\xa6\xbf\x68\x45\xca\x08\x56\x3b\x09\x48\x03\x06\x5a\x4d\x60\x03\xa0\x06\x51\xcc\x65\xa4\xb2\x65\xb9\x51\x50\x98\xcf\x56\x98\xf1\x06\x51\x98\x75\x1a\xaf\x75\x30\x51\x50\xc6\x46\x67\x03\x55\x07\x5a\x4d\x60\x45\x7a\x08\x51\x81\x86\x74\x9d\x86\x5e\x51\x60\xb8\x48\x68\xb8\x25\x08\x51\xb8\x76\xfe\xa0\x76\xea\x51\x60\x87\xd6\x67\x45\xc6\x07\x5a"; + return "\x4d\x50\xbe\x23\x07\x51\x95\x75\x22\x6e\x75\x1b\x51\x50\x47\x15\x57\x2f\x0a\x07\x56\xca\x06\x51\x48\x65\xd6\x70\x65\xdf\x51\x50\x98\xe8\x56\xbe\xe9\x06\x56\x51\x06\x51\x74\x65\x3d\x51\x65\x1e\x51\x50\x2f\xff\x55\x2f\xc9\x05\x51\x2f\x55\x92\x55\x55\x72\x51\x50\x7c\x53\x55\xbe\x4f\x05\x56\x0d\x05\x48\xee\x05\x56\x4e\x05\x51\x16\x56\x4f\x37\x56\x57\x51\x60\x58\x5f\x65\x73\x6a\x05\x4c\x5e\x56\xa2\x51\x60\x46\x98\x65\x29\x91\x05\x51\x0c\x56\x8a\xee\x55\x87\x56\x60\x1e\x51\x60\x20\x2d\x66\x41\x3d\x06\x51\x62\x66\x4d\x73\x66\x65\x51\x60\x84\x7c\x66\x84\xa2\x06\x51\x84\x66\xd7\x5d\x66\xf7\x51\x60\x36\x18\x57\xee\x20\x07\x56\x73\x07\x48\xbe\x05\x5a\x4d\x50\xbe\x89\x05\x51\x96\x55\x8c\x82\x55\x9c\x51\x50\x6f\xab\x55\x6f\xc4\x05\x51\x6f\x55\xe2\x80\x55\xf2\x51\x50\x91\x03\x56\xbe\x0e\x06\x5a\x4d\x50\xee\xe5\x06\x51\x1b\x66\xe0\x2f\x66\xd0\x51\x60\x43\xc0\x66\x43\xa7\x06\x51\x43\x66\x8a\x31\x66\x7b\x51\x60\x1f\x6d\x56\xee\x61\x06\x5a"; } function font_percent() internal pure returns(bytes memory) { - return "\x4d\x50\xc8\x1b\x06\x51\x13\x66\x1b\x3a\x66\x57\x51\x60\x61\x92\x66\x61\xff\x06\x51\x61\x76\x6c\x3c\x76\xa8\x51\x60\x17\xe5\x57\xc8\xe5\x07\x51\x7f\x75\xe5\x59\x75\xa8\x51\x50\x32\x6c\x57\x32\xff\x06\x51\x32\x65\x92\x56\x65\x57\x51\x50\x7a\x1b\x56\xc8\x1b\x06\x5a\x4d\x70\x9c\x25\x66\x06\x00\x09\x48\xb7\x05\x4c\x4d\x67\x25\x5a\x00\x4d\xc8\x65\x5a\x51\x50\xa1\x5a\x56\x8f\x84\x06\x51\x7d\x65\xad\x7d\x65\xff\x51\x50\x7d\x51\x57\x8f\x7b\x07\x51\xa1\x75\xa5\xc8\x75\xa5\x51\x60\x17\xa5\x67\x17\xff\x06\x51\x17\x66\x5a\xc8\x65\x5a\x5a\x00\x4d\x87\x77\x3f\x51\x70\xd2\x3f\x77\xf9\x7b\x07\x51\x21\x78\xb7\x21\x88\x24\x51\x80\x21\x90\x78\xfb\xcd\x08\x51\xd6\x97\x0a\x87\x97\x0a\x51\x70\x3e\x0a\x79\x18\xcd\x08\x51\xf2\x86\x90\xf2\x86\x24\x51\x60\xf2\xb7\x77\x16\x7b\x07\x51\x39\x77\x3f\x87\x77\x3f\x5a\x00\x4d\x87\x77\x80\x51\x70\x60\x80\x77\x4e\xa9\x07\x51\x3c\x77\xd2\x3c\x87\x24\x51\x70\x3c\x77\x78\x4e\xa0\x08\x51\x60\x87\xca\x87\x87\xca\x51\x70\xd6\xca\x78\xd6\x24\x08\x51\xd6\x77\x80\x87\x77\x80\x5a\x00"; + return "\x4d\x50\x93\x27\x05\x51\xca\x55\x27\xe7\x55\x53\x51\x60\x03\x7f\x65\x03\xcf\x05\x51\x03\x66\x1e\xe8\x65\x4b\x51\x50\xcc\x78\x56\x93\x78\x06\x51\x5d\x65\x78\x41\x65\x4b\x51\x50\x25\x1e\x56\x25\xcf\x05\x51\x25\x55\x7f\x3f\x55\x53\x51\x50\x59\x27\x55\x93\x27\x05\x5a\x4d\x60\xea\x2f\x55\xc0\x47\x07\x48\x87\x05\x4c\xb0\x56\x2f\x5a\x00\x4d\x93\x55\x56\x51\x50\x76\x56\x55\x69\x74\x05\x51\x5c\x55\x93\x5c\x55\xcf\x51\x50\x5c\x0b\x56\x69\x2a\x06\x51\x76\x65\x49\x93\x65\x49\x51\x50\xcc\x49\x56\xcc\xcf\x05\x51\xcc\x55\x56\x93\x55\x56\x5a\x00\x4d\xdb\x56\xfe\x51\x70\x12\xfe\x75\x2f\x2a\x06\x51\x4c\x67\x56\x4c\x67\xa6\x51\x70\x4c\xf5\x76\x30\x22\x07\x51\x15\x77\x4f\xdb\x76\x4f\x51\x60\xa6\x4f\x67\x8a\x22\x07\x51\x6d\x66\xf5\x6d\x66\xa6\x51\x60\x6d\x56\x66\x88\x2a\x06\x51\xa2\x56\xfe\xdb\x56\xfe\x5a\x00\x4d\xdb\x66\x2d\x51\x60\xbf\x2d\x66\xb1\x4c\x06\x51\xa4\x66\x6a\xa4\x66\xa6\x51\x60\xa4\xe3\x66\xb1\x01\x07\x51\xbf\x76\x20\xdb\x76\x20\x51\x70\x15\x20\x77\x15\xa6\x06\x51\x15\x67\x2d\xdb\x66\x2d\x5a\x00"; } function font_and() internal pure returns(bytes memory) { - return "\x4d\x60\x37\x1a\x06\x51\x89\x66\x1a\xb9\x66\x43\x51\x60\xe8\x6d\x66\xe8\xb7\x06\x51\xe8\x66\xf8\xbf\x76\x25\x51\x60\x96\x52\x67\x56\x77\x07\x4c\x1c\x87\x35\x51\x70\x36\x16\x78\x47\xec\x07\x51\x58\x77\xc3\x63\x77\x92\x48\x70\xbe\x51\x70\xae\xd4\x77\x96\x0c\x08\x51\x7d\x87\x45\x56\x87\x6f\x4c\x70\xec\x00\x09\x48\x72\x07\x4c\x19\x87\xaa\x51\x60\xe8\xd5\x68\xad\xf0\x08\x51\x72\x96\x0a\x1d\x96\x0a\x51\x50\xb3\x0a\x59\x75\xd6\x08\x51\x36\x85\xa2\x36\x85\x42\x51\x50\x36\xf3\x57\x61\xc3\x07\x51\x8b\x75\x93\xd4\x75\x6a\x51\x50\xb3\x46\x57\x97\x1c\x07\x51\x7b\x65\xf2\x7b\x65\xb9\x51\x50\x7b\x6e\x56\xae\x44\x06\x51\xe0\x65\x1a\x37\x66\x1a\x5a\x00\x4d\x34\x66\x63\x51\x60\x09\x63\x56\xee\x7a\x06\x51\xd3\x65\x90\xd3\x65\xb8\x51\x50\xd3\xdd\x56\xe6\xfc\x06\x51\xfa\x75\x1c\x1f\x76\x42\x51\x60\x5b\x1f\x67\x75\xff\x06\x51\x8f\x66\xe0\x8f\x66\xb7\x51\x60\x8f\x92\x66\x77\x7b\x06\x51\x5e\x66\x63\x34\x66\x63\x5a\x00\x4d\x0a\x76\xa3\x51\x50\xd3\xc4\x57\xb4\xe5\x07\x51\x94\x85\x07\x94\x85\x3e\x51\x50\x94\x77\x58\xba\x99\x08\x51\xe0\x85\xba\x20\x86\xba\x51\x60\x61\xba\x68\x90\xa5\x08\x51\xbf\x86\x8f\xdf\x86\x72\x5a\x00"; + return "\x4d\x50\xe5\x26\x05\x51\x21\x56\x26\x44\x56\x45\x51\x60\x67\x63\x65\x67\x9a\x05\x51\x67\x56\xc9\x48\x56\xeb\x51\x60\x2a\x0c\x56\xfb\x27\x06\x4c\x8c\x66\xb3\x51\x60\xa0\x9b\x66\xac\x7d\x06\x51\xb9\x66\x5e\xc1\x66\x3b\x48\x70\x04\x51\x60\xf8\x6b\x66\xe6\x94\x06\x51\xd4\x66\xbe\xb7\x66\xdd\x4c\x70\x25\x47\x07\x48\xcb\x06\x4c\x8a\x76\x08\x51\x60\x67\x28\x67\x3b\x3b\x07\x51\x0f\x76\x4f\xd1\x75\x4f\x51\x50\x84\x4f\x57\x56\x29\x07\x51\x28\x75\x02\x28\x65\xbc\x51\x50\x28\x82\x56\x47\x5f\x06\x51\x66\x65\x3c\x9c\x65\x1e\x51\x50\x84\x03\x56\x6f\xe4\x05\x51\x5a\x55\xc5\x5a\x55\x9c\x51\x50\x5a\x64\x55\x7f\x45\x05\x51\xa5\x55\x26\xe5\x55\x26\x5a\x00\x4d\xe2\x55\x5c\x51\x50\xc3\x5c\x55\xaf\x6d\x05\x51\x9b\x55\x7e\x9b\x55\x9b\x51\x50\x9b\xb6\x55\xa9\xcd\x05\x51\xb7\x55\xe4\xd3\x65\x00\x51\x50\xff\xe6\x65\x12\xcf\x05\x51\x25\x56\xb8\x25\x56\x9a\x51\x60\x25\x7f\x65\x13\x6e\x05\x51\x01\x56\x5c\xe2\x55\x5c\x5a\x00\x4d\xc3\x65\x47\x51\x50\x9b\x5f\x56\x84\x78\x06\x51\x6d\x65\x91\x6d\x65\xb9\x51\x50\x6d\xe3\x56\x89\xfb\x06\x51\xa5\x75\x14\xd3\x75\x14\x51\x60\x03\x14\x67\x26\x05\x07\x51\x49\x66\xf5\x60\x66\xdf\x5a\x00"; } function font_apostrophe() internal pure returns(bytes memory) { - return "\x4d\x50\xa4\x25\x56\x8f\x2d\x07\x48\x57\x05\x4c\x43\x65\x25\x5a\x00"; + return "\x4d\x50\x78\x2f\x55\x69\xf1\x05\x48\x40\x05\x4c\x31\x55\x2f\x5a\x00"; } function font_brackets_left() internal pure returns(bytes memory) { - return "\x4d\x50\x29\xe7\x07\x51\x29\x75\x6a\x4d\x65\xf6\x51\x50\x72\x82\x56\xbf\x25\x06\x48\x14\x06\x51\xcd\x65\x85\xa8\x65\xf9\x51\x50\x84\x6d\x57\x84\xe6\x07\x51\x84\x85\x5d\xa8\x85\xcf\x51\x50\xcd\x42\x69\x13\xa2\x09\x48\xbf\x05\x51\x72\x95\x48\x4d\x85\xd6\x51\x50\x29\x63\x58\x29\xe7\x07\x5a"; + return "\x4d\x50\x1e\x79\x06\x51\x1e\x65\x1e\x39\x55\xc8\x51\x50\x53\x73\x55\x8d\x2f\x05\x48\xcb\x05\x51\x96\x55\x75\x7c\x55\xca\x51\x50\x61\x1f\x56\x61\x79\x06\x51\x61\x65\xd0\x7c\x75\x24\x51\x50\x96\x78\x57\xca\xbe\x07\x48\x8d\x05\x51\x53\x75\x7c\x39\x75\x28\x51\x50\x1e\xd4\x56\x1e\x79\x06\x5a"; } function font_brackets_right() internal pure returns(bytes memory) { - return "\x4d\x60\x0a\xe7\x07\x51\x0a\x86\x63\xe6\x85\xd6\x51\x50\xc2\x48\x59\x74\xa2\x09\x48\x20\x05\x51\x66\x95\x42\x8b\x85\xcf\x51\x50\xaf\x5d\x58\xaf\xe6\x07\x51\xaf\x75\x6d\x8b\x65\xf9\x51\x50\x66\x85\x56\x1f\x25\x06\x48\x74\x05\x51\xc2\x65\x82\xe6\x65\xf6\x51\x60\x0a\x6a\x67\x0a\xe7\x07\x5a"; + return "\x4d\x50\xc3\x79\x06\x51\xc3\x65\xd4\xa9\x75\x28\x51\x50\x8e\x7c\x57\x55\xbe\x07\x48\x17\x05\x51\x4b\x75\x78\x66\x75\x24\x51\x50\x81\xd0\x56\x81\x79\x06\x51\x81\x65\x1f\x66\x55\xca\x51\x50\x4b\x75\x55\x17\x2f\x05\x48\x55\x05\x51\x8e\x55\x73\xa9\x55\xc8\x51\x50\xc3\x1e\x56\xc3\x79\x06\x5a"; } function font_asterisk() internal pure returns(bytes memory) { - return "\x4d\x60\x4a\xf6\x65\x35\xba\x66\xfa\x83\x76\x08\xe1\x66\x4c\xf1\x66\xc6\x92\x67\x6e\xc3\x67\x17\x0f\x57\xc8\xc3\x57\x6d\x92\x57\xe4\xf1\x56\x2a\xe1\x56\x38\x83\x56\xfb\xba\x56\xe5\xf6\x05\x5a"; + return "\x4d\x50\xf2\x0c\x55\xe3\x9c\x65\x73\x74\x65\x7e\xb9\x55\xf4\xc4\x65\x4d\x3b\x66\x0c\x5e\x56\xcc\xdb\x55\x93\x5e\x56\x50\x3b\x56\xa8\xc4\x55\x1f\xb9\x55\x29\x74\x55\xb8\x9c\x55\xa8\x0c\x05\x5a"; } function font_plus() internal pure returns(bytes memory) { - return "\x4d\x60\x49\x73\x07\x48\x14\x07\x56\xbb\x07\x48\x49\x06\x56\x8e\x08\x48\xff\x05\x56\xbb\x07\x48\x33\x05\x56\x73\x07\x48\xff\x05\x56\x9f\x06\x48\x49\x06\x5a"; + return "\x4d\x50\xf1\x24\x06\x48\x87\x06\x56\x59\x06\x48\xf1\x05\x56\xf4\x06\x48\xbb\x05\x56\x59\x06\x48\x26\x05\x56\x24\x06\x48\xbb\x05\x56\x88\x05\x48\xf1\x05\x5a"; } function font_comma() internal pure returns(bytes memory) { - return "\x4d\x50\xc5\x94\x08\x51\xb7\x85\xcb\x9e\x95\x0c\x51\x50\x85\x4d\x59\x6d\x84\x09\x48\x2a\x05\x51\x38\x95\x4a\x47\x95\x04\x51\x50\x56\xbe\x58\x5d\x89\x08\x48\xbd\x05\x5a"; + return "\x4d\x50\x90\xf8\x06\x51\x87\x75\x20\x74\x75\x50\x51\x50\x62\x80\x57\x50\xa8\x07\x48\x1f\x05\x51\x29\x75\x7e\x34\x75\x4a\x51\x50\x3f\x17\x57\x44\xf0\x06\x48\x8b\x05\x5a"; } function font_hyphen() internal pure returns(bytes memory) { - return "\x4d\x50\x29\x16\x08\x56\xc6\x07\x48\x21\x06\x56\x16\x08\x5a"; + return "\x4d\x50\x1e\x9b\x06\x56\x61\x06\x48\xd4\x05\x56\x9b\x06\x5a"; } function font_period() internal pure returns(bytes memory) { - return "\x4d\x50\x4a\xc9\x08\x51\x4a\x85\xa3\x5c\x85\x93\x51\x50\x6f\x84\x58\x88\x84\x08\x51\xa3\x85\x84\xb6\x85\x93\x51\x50\xc9\xa3\x58\xc9\xc9\x08\x51\xc9\x85\xee\xb6\x85\xfe\x51\x50\xa3\x0e\x59\x88\x0e\x09\x51\x6f\x95\x0e\x5c\x85\xfe\x51\x50\x4a\xee\x58\x4a\xc9\x08\x5a"; + return "\x4d\x50\x36\x1f\x07\x51\x36\x75\x03\x44\x65\xf8\x51\x50\x51\xec\x56\x64\xec\x06\x51\x78\x65\xec\x85\x65\xf8\x51\x50\x93\x03\x57\x93\x1f\x07\x51\x93\x75\x3a\x85\x75\x46\x51\x50\x78\x52\x57\x64\x52\x07\x51\x51\x75\x52\x44\x75\x46\x51\x50\x36\x3a\x57\x36\x1f\x07\x5a"; } function font_slash() internal pure returns(bytes memory) { - return "\x4d\x60\x73\x25\x56\x62\x00\x09\x48\x0a\x05\x4c\x1b\x66\x25\x5a\x00"; + return "\x4d\x60\x10\x2f\x55\x48\x47\x07\x48\x08\x05\x4c\xd0\x55\x2f\x5a\x00"; } function font_0() internal pure returns(bytes memory) { - return "\x4d\x70\x18\x91\x07\x51\x18\x87\x07\xff\x86\x5c\x51\x60\xe6\xb0\x68\xb1\xdd\x08\x51\x7c\x96\x0a\x24\x96\x0a\x51\x50\xa8\x0a\x59\x6d\xa6\x08\x51\x32\x85\x43\x32\x75\x91\x51\x50\x32\x1b\x57\x4a\xc7\x06\x51\x62\x65\x73\x98\x65\x46\x51\x50\xcd\x1a\x66\x24\x1a\x06\x51\x9f\x66\x1a\xdb\x66\x7c\x51\x70\x18\xdf\x76\x18\x91\x07\x5a\x4d\x50\x8c\x91\x07\x51\x8c\x85\x28\xaf\x85\x73\x51\x50\xd1\xbd\x68\x24\xbd\x08\x51\x76\x86\xbd\x99\x86\x73\x51\x60\xbc\x29\x68\xbc\x91\x07\x51\xbc\x66\xfc\x99\x66\xb1\x51\x60\x76\x66\x66\x24\x66\x06\x51\xd1\x65\x66\xaf\x65\xb1\x51\x50\x8c\xfc\x56\x8c\x91\x07\x5a"; + return "\x4d\x60\x89\x3a\x06\x51\x89\x66\x91\x77\x66\xcf\x51\x60\x65\x0d\x67\x3e\x2e\x07\x51\x17\x76\x4f\xd6\x75\x4f\x51\x50\x7b\x4f\x57\x50\x06\x07\x51\x25\x65\xbc\x25\x65\x3a\x51\x50\x25\xe3\x55\x37\xa5\x05\x51\x48\x55\x68\x6f\x55\x47\x51\x50\x96\x26\x55\xd6\x26\x05\x51\x30\x56\x26\x5d\x56\x6f\x51\x60\x89\xb7\x65\x89\x3a\x06\x5a\x4d\x50\x67\x3a\x06\x51\x67\x65\xa9\x80\x65\xe0\x51\x50\x99\x17\x57\xd6\x17\x07\x51\x12\x76\x17\x2c\x66\xe0\x51\x60\x46\xaa\x66\x46\x3a\x06\x51\x46\x56\xcc\x2c\x56\x96\x51\x60\x12\x5f\x55\xd6\x5f\x05\x51\x99\x55\x5f\x80\x55\x96\x51\x50\x67\xcc\x55\x67\x3a\x06\x5a"; } function font_1() internal pure returns(bytes memory) { - return "\x4d\x60\x6c\x00\x09\x48\x13\x06\x56\x01\x07\x51\x13\x66\xd5\x14\x66\xba\x51\x60\x16\xa0\x66\x18\x83\x06\x51\x07\x66\x93\xfa\x65\x9f\x51\x50\xed\xaa\x56\xd8\xbb\x06\x4c\x8a\x65\xfb\x4c\x50\x5b\xbe\x06\x4c\x21\x66\x25\x48\x60\x6c\x5a\x00"; + return "\x4d\x60\x0b\x47\x07\x48\xca\x05\x56\xd0\x05\x51\xca\x55\xb0\xcb\x55\x9c\x51\x50\xcc\x89\x55\xcd\x74\x05\x51\xc1\x55\x80\xb7\x55\x88\x51\x50\xae\x90\x55\x9f\x9d\x05\x4c\x65\x55\xcc\x4c\x50\x43\x9f\x05\x4c\xd4\x55\x2f\x48\x60\x0b\x5a\x00"; } function font_2() internal pure returns(bytes memory) { - return "\x4d\x70\x14\x00\x09\x48\x31\x05\x56\xb5\x08\x4c\xf1\x75\xf4\x51\x60\x28\xbc\x67\x4e\x91\x07\x51\x74\x76\x66\x87\x76\x3d\x51\x60\x9b\x13\x67\x9b\xe2\x06\x51\x9b\x66\xa6\x77\x66\x87\x51\x60\x53\x67\x66\x1a\x67\x06\x51\xe4\x65\x67\xbc\x65\x7a\x51\x50\x93\x8c\x56\x69\xad\x06\x4c\x39\x65\x71\x51\x50\x64\x4d\x56\x9c\x34\x06\x51\xd4\x65\x1b\x1a\x66\x1b\x51\x60\x80\x1b\x66\xbb\x4e\x06\x51\xf7\x66\x82\xf7\x66\xdd\x51\x60\xf7\x17\x67\xdf\x49\x07\x51\xc8\x76\x7b\x9e\x76\xac\x51\x60\x74\xdc\x67\x3b\x13\x08\x4c\xa3\x85\xaa\x56\x80\xae\x48\x70\x14\x5a\x00"; + return "\x4d\x60\x87\x47\x07\x48\x24\x05\x56\x11\x07\x4c\xb1\x65\x82\x51\x50\xd9\x5a\x56\xf5\x3a\x06\x51\x11\x66\x1b\x1f\x56\xfc\x51\x60\x2d\xde\x65\x2d\xba\x05\x51\x2d\x56\x8d\x13\x56\x76\x51\x50\xf9\x5f\x55\xcf\x5f\x05\x51\xa8\x55\x5f\x8a\x55\x6d\x51\x50\x6c\x7b\x55\x4d\x93\x05\x4c\x2a\x55\x66\x51\x50\x4a\x4c\x55\x73\x3a\x05\x51\x9c\x55\x27\xcf\x55\x27\x51\x60\x1a\x27\x65\x46\x4d\x05\x51\x71\x56\x73\x71\x56\xb6\x51\x60\x71\xe0\x65\x60\x05\x06\x51\x4f\x66\x2a\x30\x66\x4d\x51\x60\x11\x71\x56\xe8\x9a\x06\x4c\x78\x75\x08\x56\x70\x0b\x48\x60\x87\x5a\x00"; } function font_3() internal pure returns(bytes memory) { - return "\x4d\x60\xf9\xd0\x06\x51\xf9\x76\x1a\xd0\x76\x45\x51\x60\xa7\x71\x67\x61\x7f\x07\x56\x83\x07\x51\xb9\x76\x8d\xe4\x76\xba\x51\x70\x0f\xe7\x77\x0f\x30\x08\x51\x0f\x87\x70\xf2\x86\xa1\x51\x60\xd4\xd3\x68\x96\xef\x08\x51\x58\x96\x0a\xf7\x95\x0a\x51\x50\xbd\x0a\x59\x8c\x02\x09\x51\x5b\x85\xf9\x2e\x85\xe2\x56\x80\x8e\x51\x50\x5c\xa5\x58\x91\xb2\x08\x51\xc7\x85\xbe\xf8\x85\xbe\x51\x60\x5a\xbe\x68\x86\x98\x08\x51\xb1\x86\x72\xb1\x86\x2e\x51\x60\xb1\xe9\x67\x7b\xcb\x07\x51\x46\x76\xad\xe4\x75\xad\x48\x50\x9e\x56\x70\x60\x48\x50\xe5\x51\x60\x3f\x60\x67\x6e\x3a\x07\x51\x9d\x76\x14\x9d\x66\xd6\x51\x60\x9d\xa1\x66\x79\x84\x06\x51\x55\x66\x66\x18\x66\x66\x51\x50\xdc\x66\x56\xb2\x78\x06\x51\x88\x65\x89\x5f\x65\xa4\x4c\x50\x32\x66\x06\x51\x59\x65\x48\x93\x65\x31\x51\x50\xcd\x1b\x66\x17\x1b\x06\x51\x89\x66\x1b\xc1\x66\x4e\x51\x60\xf9\x81\x66\xf9\xd0\x06\x5a"; + return "\x4d\x60\x73\xac\x05\x51\x73\x56\xe2\x55\x66\x02\x51\x60\x37\x22\x66\x03\x2d\x06\x56\x30\x06\x51\x44\x66\x37\x64\x66\x58\x51\x60\x83\x79\x66\x83\xaf\x06\x51\x83\x66\xdd\x6d\x76\x02\x51\x60\x58\x26\x67\x2a\x3b\x07\x51\xfd\x75\x4f\xb5\x75\x4f\x51\x50\x8b\x4f\x57\x67\x49\x07\x51\x43\x75\x42\x22\x75\x32\x56\x60\xf4\x51\x50\x44\x05\x57\x6b\x0e\x07\x51\x92\x75\x17\xb6\x75\x17\x51\x50\xfe\x17\x67\x1e\xfb\x06\x51\x3e\x66\xdf\x3e\x66\xad\x51\x60\x3e\x7b\x66\x17\x65\x06\x51\xef\x65\x4f\xa8\x65\x4f\x48\x50\x74\x56\x60\x16\x48\x50\xa8\x51\x50\xeb\x16\x66\x0d\xfa\x05\x51\x2f\x56\xdf\x2f\x56\xb1\x51\x60\x2f\x8a\x65\x15\x74\x05\x51\xfa\x55\x5f\xcd\x55\x5f\x51\x50\xa2\x5f\x55\x83\x6c\x05\x51\x64\x55\x78\x46\x55\x8c\x4c\x50\x25\x5f\x05\x51\x41\x55\x48\x6c\x55\x38\x51\x50\x96\x27\x55\xcc\x27\x05\x51\x21\x56\x27\x4a\x56\x4d\x51\x60\x73\x72\x65\x73\xac\x05\x5a"; } function font_4() internal pure returns(bytes memory) { - return "\x4d\x70\x35\x5a\x08\x48\xcb\x06\x56\x00\x09\x48\x74\x06\x56\x5a\x08\x48\x16\x05\x56\x0d\x08\x4c\x6e\x66\x21\x48\x60\xcb\x56\x80\x09\x48\x70\x35\x5a\x00\x4d\x74\x76\x23\x51\x60\x74\xee\x66\x76\xc8\x06\x51\x78\x66\xa3\x79\x66\x81\x48\x60\x75\x51\x60\x6d\x94\x66\x60\xab\x06\x51\x54\x66\xc2\x49\x66\xd1\x4c\x50\x6e\x09\x08\x48\x74\x06\x5a"; + return "\x4d\x60\x9f\xce\x06\x48\x51\x06\x56\x47\x07\x48\x11\x06\x56\xce\x06\x48\x10\x05\x56\x95\x06\x4c\x0c\x56\x2c\x48\x60\x51\x56\x60\x92\x48\x60\x9f\x5a\x00\x4d\x11\x56\xe9\x51\x60\x11\xc2\x65\x12\xa7\x05\x51\x14\x56\x8b\x15\x56\x72\x48\x60\x12\x51\x60\x0c\x81\x65\x03\x91\x05\x51\xfa\x55\xa2\xf1\x55\xad\x4c\x50\x50\x92\x06\x48\x11\x06\x5a"; } function font_5() internal pure returns(bytes memory) { - return "\x4d\x60\x1a\x3f\x07\x51\x8a\x76\x3f\xcd\x76\x78\x51\x70\x0f\xb0\x77\x0f\x17\x08\x51\x0f\x87\x88\xc7\x86\xc9\x51\x60\x7f\x0a\x59\xfe\x0a\x09\x51\xc6\x95\x0a\x94\x95\x00\x51\x50\x62\xf6\x58\x41\xe2\x08\x56\x8d\x08\x51\x65\x85\xa4\x9a\x85\xb1\x51\x50\xcf\xbd\x58\xff\xbd\x08\x51\x50\x86\xbd\x82\x86\x97\x51\x60\xb3\x71\x68\xb3\x20\x08\x51\xb3\x76\xd8\x87\x76\xb2\x51\x60\x5b\x8b\x57\xfc\x8b\x07\x51\xdf\x75\x8b\xba\x75\x90\x51\x50\x96\x96\x57\x7f\x9b\x07\x4c\x52\x75\x7e\x4c\x50\x6e\x25\x06\x48\xdc\x06\x56\x77\x06\x48\xba\x05\x4c\xa9\x75\x4b\x51\x50\xba\x48\x57\xd8\x44\x07\x51\xf6\x75\x3f\x1a\x76\x3f\x5a\x00"; + return "\x4d\x50\xcf\xfe\x05\x51\x21\x56\xfe\x52\x66\x27\x51\x60\x83\x51\x66\x83\x9c\x06\x51\x83\x66\xef\x4e\x76\x1f\x51\x60\x19\x4f\x57\xba\x4f\x07\x51\x91\x75\x4f\x6d\x75\x47\x51\x50\x48\x40\x57\x2f\x32\x07\x56\xf3\x06\x51\x4a\x75\x04\x71\x75\x0d\x51\x50\x98\x17\x57\xbb\x17\x07\x51\xf7\x75\x17\x1b\x66\xfa\x51\x60\x40\xde\x66\x40\xa3\x06\x51\x40\x66\x6e\x1f\x66\x52\x51\x50\xff\x36\x56\xb9\x36\x06\x51\xa4\x65\x36\x89\x65\x3a\x51\x50\x6e\x3d\x56\x5d\x41\x06\x4c\x3c\x65\x2c\x4c\x50\x50\x2f\x05\x48\x5e\x06\x56\x6b\x05\x48\x89\x05\x4c\x7c\x65\x06\x51\x50\x89\x04\x56\x9f\x01\x06\x51\xb4\x55\xfe\xcf\x55\xfe\x5a\x00"; } function font_6() internal pure returns(bytes memory) { - return "\x4d\x50\x38\xc8\x07\x51\x38\x75\x79\x46\x75\x2d\x51\x50\x54\xe0\x56\x78\xa2\x06\x51\x9d\x65\x64\xde\x65\x3f\x51\x60\x20\x1b\x66\x87\x1b\x06\x51\x9d\x66\x1b\xb7\x66\x1d\x51\x60\xd1\x1f\x66\xe1\x24\x06\x56\x71\x06\x51\xcf\x66\x6a\xb8\x66\x67\x51\x60\xa1\x64\x66\x89\x64\x06\x51\x43\x66\x64\x13\x66\x7c\x51\x50\xe4\x93\x56\xc9\xbc\x06\x51\xae\x65\xe5\xa2\x75\x1b\x51\x50\x96\x50\x57\x92\x8c\x07\x48\x99\x05\x51\xb0\x75\x68\xda\x75\x4f\x51\x60\x04\x36\x67\x46\x36\x07\x51\xa5\x76\x36\xdf\x76\x70\x51\x70\x1a\xaa\x77\x1a\x14\x08\x51\x1a\x87\x87\xdb\x86\xc9\x51\x60\x9c\x0a\x69\x31\x0a\x09\x51\xec\x95\x0a\xb3\x85\xe7\x51\x50\x7b\xc5\x58\x5a\x7d\x08\x51\x38\x85\x35\x38\x75\xc8\x5a\x00\x4d\x30\x86\xbe\x51\x60\x71\xbe\x68\x99\x95\x08\x51\xc1\x86\x6c\xc1\x86\x14\x51\x60\xc1\xcf\x67\x9d\xa6\x07\x51\x7a\x76\x7d\x33\x76\x7d\x51\x60\x03\x7d\x57\xdf\x91\x07\x51\xbb\x75\xa5\xa7\x75\xc4\x51\x50\x93\xe2\x57\x93\x03\x08\x51\x93\x85\x2f\xa5\x85\x5b\x51\x50\xb6\x86\x58\xd9\xa2\x08\x51\xfc\x85\xbe\x30\x86\xbe\x5a\x00"; + return "\x4d\x50\x29\x62\x06\x51\x29\x65\x28\x34\x55\xf0\x51\x50\x3e\xb8\x55\x58\x8b\x05\x51\x73\x55\x5d\xa3\x55\x42\x51\x50\xd3\x27\x65\x1f\x27\x05\x51\x2f\x56\x27\x42\x56\x29\x51\x60\x55\x2a\x65\x61\x2e\x05\x56\x66\x05\x51\x54\x56\x62\x43\x56\x5f\x51\x60\x32\x5d\x65\x21\x5d\x05\x51\xed\x55\x5d\xca\x55\x6f\x51\x50\xa8\x80\x55\x94\x9e\x05\x51\x80\x55\xbc\x77\x55\xe3\x51\x50\x6e\x0a\x56\x6c\x37\x06\x48\x70\x05\x51\x81\x65\x1c\xa0\x65\x0a\x51\x50\xbf\xf7\x55\xef\xf7\x05\x51\x35\x56\xf7\x60\x66\x22\x51\x60\x8b\x4c\x66\x8b\x9b\x06\x51\x8b\x66\xef\x5c\x76\x1f\x51\x60\x2e\x4f\x57\xe0\x4f\x07\x51\xad\x75\x4f\x84\x75\x35\x51\x50\x5a\x1c\x57\x42\xe7\x06\x51\x29\x65\xb3\x29\x65\x62\x5a\x00\x4d\xdf\x75\x17\x51\x60\x0f\x17\x67\x2c\xf9\x06\x51\x49\x66\xda\x49\x66\x9b\x51\x60\x49\x67\x66\x2f\x49\x06\x51\x15\x66\x2b\xe2\x65\x2b\x51\x50\xbe\x2b\x56\xa4\x3a\x06\x51\x8a\x65\x49\x7b\x65\x5f\x51\x50\x6c\x76\x56\x6c\x8e\x06\x51\x6c\x65\xae\x79\x65\xce\x51\x50\x86\xee\x56\x9f\x03\x07\x51\xb9\x75\x17\xdf\x75\x17\x5a\x00"; } function font_7() internal pure returns(bytes memory) { - return "\x4d\x50\x8b\x00\x69\xb7\x77\x06\x48\x2d\x05\x56\x25\x06\x48\x18\x07\x56\x6a\x06\x4c\xef\x95\x00\x5a\x00"; + return "\x4d\x50\x66\x47\x67\x43\x6b\x05\x48\x21\x05\x56\x2f\x05\x48\x89\x06\x56\x62\x05\x4c\xaf\x75\x47\x5a\x00"; } function font_8() internal pure returns(bytes memory) { - return "\x4d\x60\x24\x1b\x06\x51\x84\x66\x1b\xc2\x66\x48\x51\x60\xff\x75\x66\xff\xca\x06\x51\xff\x66\xf6\xec\x76\x17\x51\x60\xd9\x37\x67\xb9\x50\x07\x51\x9a\x76\x69\x74\x76\x7d\x51\x60\xa1\x92\x67\xc6\xae\x07\x51\xea\x76\xc9\x01\x77\xed\x51\x70\x17\x10\x78\x17\x43\x08\x51\x17\x87\x9f\xd6\x86\xd4\x51\x60\x94\x0a\x69\x27\x0a\x09\x51\xb1\x95\x0a\x72\x85\xd7\x51\x50\x32\xa3\x58\x32\x46\x08\x51\x32\x85\x13\x47\x75\xef\x51\x50\x5c\xca\x57\x7f\xaf\x07\x51\xa2\x75\x94\xca\x75\x82\x51\x50\x94\x63\x57\x6f\x38\x07\x51\x4a\x75\x0c\x4a\x65\xc9\x51\x50\x4a\x90\x56\x66\x6a\x06\x51\x83\x65\x44\xb4\x65\x2f\x51\x50\xe5\x1b\x66\x24\x1b\x06\x5a\x4d\x60\x23\x63\x06\x51\xea\x65\x63\xc6\x65\x7e\x51\x50\xa2\x9a\x56\xa2\xcd\x06\x51\xa2\x65\xf3\xb4\x75\x0c\x51\x50\xc6\x26\x57\xe4\x38\x07\x51\x03\x76\x4a\x28\x76\x5a\x51\x60\x5d\x44\x67\x82\x24\x07\x51\xa6\x76\x04\xa6\x66\xcd\x51\x60\xa6\x9a\x66\x82\x7e\x06\x51\x5e\x66\x63\x23\x66\x63\x5a\x00\x4d\x8a\x85\x47\x51\x50\x8a\x7c\x58\xb0\x9f\x08\x51\xd6\x85\xc3\x25\x86\xc3\x51\x60\x70\xc3\x68\x97\x9f\x08\x51\xbe\x86\x7c\xbe\x86\x44\x51\x60\xbe\x0e\x68\x94\xeb\x07\x51\x6a\x76\xc8\x25\x76\xad\x4c\x60\x14\xa7\x07\x51\xd1\x75\xc4\xae\x75\xe9\x51\x50\x8a\x0e\x58\x8a\x47\x08\x5a"; + return "\x4d\x50\xd6\x27\x05\x51\x1d\x56\x27\x4a\x56\x48\x51\x60\x77\x69\x65\x77\xa8\x05\x51\x77\x56\xc8\x69\x56\xe0\x51\x60\x5b\xf8\x65\x44\x0b\x06\x51\x2d\x66\x1d\x11\x66\x2b\x51\x60\x32\x3b\x66\x4d\x4f\x06\x51\x68\x66\x63\x78\x66\x7d\x51\x60\x88\x97\x66\x88\xbc\x06\x51\x88\x76\x00\x59\x76\x27\x51\x60\x29\x4f\x57\xd9\x4f\x07\x51\x82\x75\x4f\x53\x75\x29\x51\x50\x25\x03\x57\x25\xbf\x06\x51\x25\x65\x9a\x34\x65\x7f\x51\x50\x44\x64\x56\x5d\x50\x06\x51\x77\x65\x3d\x94\x65\x2f\x51\x50\x6d\x18\x56\x52\xf8\x05\x51\x36\x55\xd9\x36\x55\xa7\x51\x50\x36\x7e\x55\x4b\x61\x05\x51\x60\x55\x45\x84\x55\x36\x51\x50\xa8\x27\x55\xd6\x27\x05\x5a\x4d\x50\xd6\x5c\x05\x51\xac\x55\x5c\x91\x55\x70\x51\x50\x77\x84\x55\x77\xaa\x05\x51\x77\x55\xc6\x84\x55\xd9\x51\x50\x91\xeb\x55\xa8\xf8\x05\x51\xbe\x65\x06\xd9\x65\x12\x51\x60\x00\x01\x66\x1b\xea\x05\x51\x36\x56\xd3\x36\x56\xaa\x51\x60\x36\x84\x65\x1b\x70\x05\x51\x01\x56\x5c\xd6\x55\x5c\x5a\x00\x4d\x65\x65\xbf\x51\x50\x65\xe6\x56\x81\x00\x07\x51\x9d\x75\x1a\xd7\x75\x1a\x51\x60\x0e\x1a\x67\x2b\x00\x07\x51\x48\x66\xe6\x48\x66\xbd\x51\x60\x48\x96\x66\x29\x7c\x06\x51\x0a\x66\x62\xd7\x65\x4f\x4c\x50\xcb\x4a\x06\x51\x99\x65\x5f\x7f\x65\x7b\x51\x50\x65\x96\x56\x65\xbf\x06\x5a"; } function font_9() internal pure returns(bytes memory) { - return "\x4d\x70\x14\x5d\x07\x51\x14\x77\xac\x07\x77\xf8\x51\x60\xf9\x45\x68\xd4\x83\x08\x51\xb0\x86\xc1\x6e\x86\xe5\x51\x60\x2c\x0a\x59\xc5\x0a\x09\x51\xb0\x95\x0a\x95\x95\x08\x51\x50\x7a\x05\x59\x68\x00\x09\x56\xb3\x08\x51\x90\x85\xc1\xc3\x85\xc1\x51\x60\x0a\xc1\x68\x39\xa9\x08\x51\x67\x86\x91\x83\x86\x69\x51\x60\x9f\x41\x68\xab\x0b\x08\x51\xb7\x76\xd5\xb9\x76\x9a\x48\x60\xb3\x51\x60\x9d\xbc\x67\x72\xd6\x07\x51\x48\x76\xef\x05\x76\xef\x51\x50\xa7\xef\x57\x6d\xb5\x07\x51\x33\x75\x7b\x33\x75\x11\x51\x50\x33\xc5\x56\x50\x8d\x06\x51\x6e\x65\x56\xa2\x65\x38\x51\x50\xd6\x1b\x66\x1d\x1b\x06\x51\x62\x66\x1b\x9b\x66\x3e\x51\x60\xd3\x61\x66\xf4\xa8\x06\x51\x14\x67\xf0\x14\x77\x5d\x5a\x00\x4d\x1d\x66\x66\x51\x50\xdd\x66\x56\xb5\x90\x06\x51\x8c\x65\xba\x8c\x75\x10\x51\x50\x8c\x57\x57\xaf\x7f\x07\x51\xd1\x75\xa8\x19\x76\xa8\x51\x60\x4a\xa8\x67\x6e\x94\x07\x51\x91\x76\x80\xa5\x76\x61\x51\x60\xb9\x43\x67\xb9\x22\x07\x51\xb9\x66\xf6\xa8\x66\xcb\x51\x60\x97\xa0\x66\x74\x83\x06\x51\x51\x66\x66\x1d\x66\x66\x5a\x00"; + return "\x4d\x60\x87\x14\x06\x51\x87\x66\x4e\x7d\x66\x86\x51\x60\x73\xbe\x66\x58\xeb\x06\x51\x3d\x76\x19\x0d\x76\x34\x51\x50\xdc\x4f\x57\x90\x4f\x07\x51\x81\x75\x4f\x6d\x75\x4d\x51\x50\x59\x4b\x57\x4d\x47\x07\x56\x0f\x07\x51\x6a\x75\x19\x8f\x75\x19\x51\x50\xc3\x19\x57\xe6\x08\x07\x51\x08\x66\xf6\x1c\x66\xd9\x51\x60\x30\xbb\x66\x3a\x93\x06\x51\x43\x66\x6c\x44\x66\x40\x48\x60\x40\x51\x60\x2f\x5a\x66\x10\x6c\x06\x51\xf1\x65\x7f\xc0\x65\x7f\x51\x50\x7b\x7f\x56\x50\x54\x06\x51\x26\x65\x2a\x26\x55\xdc\x51\x50\x26\xa4\x55\x3b\x7b\x05\x51\x50\x55\x53\x77\x55\x3d\x51\x50\x9d\x27\x55\xd1\x27\x05\x51\x04\x56\x27\x2d\x56\x41\x51\x60\x57\x5b\x65\x6f\x8f\x05\x51\x87\x56\xc3\x87\x66\x14\x5a\x00\x4d\xd1\x55\x5f\x51\x50\xa2\x5f\x55\x85\x7e\x05\x51\x67\x55\x9c\x67\x55\xdc\x51\x50\x67\x0f\x56\x80\x2d\x06\x51\x99\x65\x4b\xce\x65\x4b\x51\x50\xf2\x4b\x66\x0c\x3c\x06\x51\x27\x66\x2d\x35\x66\x17\x51\x60\x44\x00\x66\x44\xe8\x05\x51\x44\x56\xc8\x37\x56\xa8\x51\x60\x2a\x89\x65\x11\x74\x05\x51\xf7\x55\x5f\xd1\x55\x5f\x5a\x00"; } function font_colon() internal pure returns(bytes memory) { - return "\x4d\x50\x4a\x12\x07\x51\x4a\x65\xec\x5c\x65\xdc\x51\x50\x6f\xcd\x56\x88\xcd\x06\x51\xa3\x65\xcd\xb6\x65\xdc\x51\x50\xc9\xec\x56\xc9\x12\x07\x51\xc9\x75\x37\xb6\x75\x48\x51\x50\xa3\x58\x57\x88\x58\x07\x51\x6f\x75\x58\x5c\x75\x48\x51\x50\x4a\x37\x57\x4a\x12\x07\x5a\x4d\x50\x4a\xc9\x08\x51\x4a\x85\xa3\x5c\x85\x93\x51\x50\x6f\x84\x58\x88\x84\x08\x51\xa3\x85\x84\xb6\x85\x93\x51\x50\xc9\xa3\x58\xc9\xc9\x08\x51\xc9\x85\xee\xb6\x85\xfe\x51\x50\xa3\x0e\x59\x88\x0e\x09\x51\x6f\x95\x0e\x5c\x85\xfe\x51\x50\x4a\xee\x58\x4a\xc9\x08\x5a"; + return "\x4d\x50\x36\xdd\x05\x51\x36\x55\xc0\x44\x55\xb5\x51\x50\x51\xaa\x55\x64\xaa\x05\x51\x78\x55\xaa\x85\x55\xb5\x51\x50\x93\xc0\x55\x93\xdd\x05\x51\x93\x55\xf8\x85\x65\x04\x51\x50\x78\x10\x56\x64\x10\x06\x51\x51\x65\x10\x44\x65\x04\x51\x50\x36\xf8\x55\x36\xdd\x05\x5a\x4d\x50\x36\x1f\x07\x51\x36\x75\x03\x44\x65\xf8\x51\x50\x51\xec\x56\x64\xec\x06\x51\x78\x65\xec\x85\x65\xf8\x51\x50\x93\x03\x57\x93\x1f\x07\x51\x93\x75\x3a\x85\x75\x46\x51\x50\x78\x52\x57\x64\x52\x07\x51\x51\x75\x52\x44\x75\x46\x51\x50\x36\x3a\x57\x36\x1f\x07\x5a"; } function font_semi_colon() internal pure returns(bytes memory) { - return "\x4d\x50\x48\x12\x07\x51\x48\x65\xec\x5a\x65\xdc\x51\x50\x6d\xcd\x56\x86\xcd\x06\x51\xa1\x65\xcd\xb4\x65\xdc\x51\x50\xc7\xec\x56\xc7\x12\x07\x51\xc7\x75\x37\xb4\x75\x48\x51\x50\xa1\x58\x57\x86\x58\x07\x51\x6d\x75\x58\x5a\x75\x48\x51\x50\x48\x37\x57\x48\x12\x07\x5a\x4d\x50\xbb\x94\x08\x51\xae\x85\xca\x95\x95\x0c\x51\x50\x7c\x4e\x59\x63\x84\x09\x48\x20\x05\x51\x2a\x95\x5d\x34\x95\x31\x51\x50\x3d\x04\x59\x46\xd9\x08\x51\x4f\x85\xad\x54\x85\x89\x48\x50\xb4\x5a\x00"; + return "\x4d\x50\x35\xdd\x05\x51\x35\x55\xc0\x42\x55\xb5\x51\x50\x50\xaa\x55\x62\xaa\x05\x51\x76\x55\xaa\x84\x55\xb5\x51\x50\x92\xc0\x55\x92\xdd\x05\x51\x92\x55\xf8\x84\x65\x04\x51\x50\x76\x10\x56\x62\x10\x06\x51\x50\x65\x10\x42\x65\x04\x51\x50\x35\xf8\x55\x35\xdd\x05\x5a\x4d\x50\x8a\xf8\x06\x51\x80\x75\x20\x6d\x75\x50\x51\x50\x5b\x81\x57\x49\xa8\x07\x48\x17\x05\x51\x1f\x75\x8c\x26\x75\x6b\x51\x50\x2d\x4a\x57\x34\x2a\x07\x51\x3a\x75\x0b\x3e\x65\xf0\x48\x50\x84\x5a\x00"; } function font_LT() internal pure returns(bytes memory) { - return "\x4d\x50\x29\xec\x57\xd5\x1e\x67\x16\x43\x57\x86\xf2\x67\x16\xa1\x58\xd5\xc7\x58\x29\xf9\x07\x5a"; + return "\x4d\x60\x88\xf0\x56\x26\x55\x06\x56\x2f\x06\x4c\x88\x56\x7e\x56\x50\xb9\x4c\x50\x6c\x3f\x06\x4c\x88\x66\xb6\x5a\x00"; } function font_equal() internal pure returns(bytes memory) { - return "\x4d\x50\x39\x56\x07\x56\x0d\x07\x48\x0e\x07\x56\x56\x07\x5a\x4d\x50\x39\x22\x08\x56\xd9\x07\x48\x0e\x07\x56\x22\x08\x5a"; - } - function font_question() internal pure returns(bytes memory) { - return "\x4d\x50\x8f\x17\x08\x51\x8f\x75\xf0\x97\x75\xd3\x51\x50\x9f\xb7\x57\xb2\x9e\x07\x51\xc5\x75\x84\xe5\x75\x68\x51\x60\x0d\x47\x67\x23\x30\x07\x51\x39\x76\x1a\x43\x76\x04\x51\x60\x4c\xef\x66\x4c\xd0\x06\x51\x4c\x66\x9f\x2c\x66\x84\x51\x60\x0c\x69\x56\xd0\x69\x06\x51\x9e\x65\x69\x77\x65\x76\x51\x50\x50\x83\x56\x2c\x94\x06\x4c\x0c\x65\x4d\x51\x50\x35\x37\x56\x67\x29\x06\x51\x99\x65\x1b\xd6\x65\x1b\x51\x60\x37\x1b\x66\x6d\x4b\x06\x51\xa2\x66\x7b\xa2\x66\xce\x51\x60\xa2\xfc\x66\x93\x1c\x07\x51\x84\x76\x3c\x69\x76\x58\x51\x60\x4e\x73\x67\x29\x91\x07\x51\x07\x76\xae\xf5\x75\xc4\x51\x50\xe3\xd9\x57\xdd\xee\x07\x51\xd7\x85\x03\xd7\x85\x21\x56\x80\x32\x48\x50\x8f\x5a\x00\x4d\x78\x85\xc9\x51\x50\x78\xa3\x58\x8a\x93\x08\x51\x9c\x85\x84\xb7\x85\x84\x51\x50\xd1\x84\x58\xe3\x93\x08\x51\xf6\x85\xa3\xf6\x85\xc9\x51\x50\xf6\xee\x58\xe3\xfe\x08\x51\xd1\x95\x0e\xb7\x95\x0e\x51\x50\x9c\x0e\x59\x8a\xfe\x08\x51\x78\x85\xee\x78\x85\xc9\x5a\x00"; + return "\x4d\x50\x2a\x0f\x06\x56\xd9\x05\x48\x82\x06\x56\x0f\x06\x5a\x4d\x50\x2a\xa4\x06\x56\x6f\x06\x48\x82\x06\x56\xa4\x06\x5a"; } function font_big() internal pure returns(bytes memory) { - return "\x4d\x50\x67\x1e\x67\x14\xec\x07\x56\xf9\x07\x4c\x67\x85\xc7\x4c\x50\x28\xa1\x08\x4c\xb7\x75\xf2\x4c\x50\x28\x43\x07\x5a"; + return "\x4d\x50\x26\xb6\x66\x41\x40\x56\x26\xb9\x05\x56\x7e\x05\x4c\x88\x66\x2f\x56\x60\x55\x4c\x50\x26\xf0\x06\x5a"; + } + function font_question() internal pure returns(bytes memory) { + return "\x4d\x50\x69\x9c\x06\x51\x69\x65\x7f\x6f\x65\x6b\x51\x50\x75\x56\x56\x82\x43\x06\x51\x90\x65\x30\xa8\x65\x1c\x51\x50\xc6\x03\x56\xd6\xf3\x05\x51\xe6\x55\xe2\xed\x55\xd3\x51\x50\xf4\xc3\x55\xf4\xac\x05\x51\xf4\x55\x88\xdc\x55\x75\x51\x50\xc5\x61\x55\x99\x61\x05\x51\x74\x55\x61\x57\x55\x6a\x51\x50\x3b\x74\x55\x20\x81\x05\x4c\x09\x55\x4c\x51\x50\x27\x3c\x55\x4c\x32\x05\x51\x70\x55\x27\x9d\x55\x27\x51\x50\xe5\x27\x65\x0c\x4a\x05\x51\x33\x56\x6e\x33\x56\xab\x51\x60\x33\xcc\x65\x28\xe4\x05\x51\x1d\x56\xfc\x09\x66\x10\x51\x50\xf5\x24\x56\xda\x3a\x06\x51\xc1\x65\x4f\xb4\x65\x5f\x51\x50\xa7\x6f\x56\xa2\x7e\x06\x51\x9e\x65\x8e\x9e\x65\xa4\x56\x60\xb0\x48\x50\x69\x5a\x00\x4d\x58\x75\x1f\x51\x50\x58\x03\x57\x65\xf8\x06\x51\x72\x65\xec\x87\x65\xec\x51\x50\x99\xec\x56\xa7\xf8\x06\x51\xb4\x75\x03\xb4\x75\x1f\x51\x50\xb4\x3a\x57\xa7\x46\x07\x51\x99\x75\x52\x87\x75\x52\x51\x50\x72\x52\x57\x65\x46\x07\x51\x58\x75\x3a\x58\x75\x1f\x5a\x00"; } function font_at() internal pure returns(bytes memory) { - return "\x4d\x80\x5d\x92\x07\x51\x5d\x78\xc2\x52\x78\xef\x51\x80\x48\x1c\x88\x31\x40\x08\x51\x1b\x88\x64\xfa\x87\x7a\x51\x70\xd9\x90\x78\xac\x90\x08\x51\x7d\x87\x90\x62\x87\x75\x51\x70\x47\x5a\x78\x41\x37\x08\x48\x3b\x07\x51\x29\x87\x5d\x05\x87\x77\x51\x60\xe1\x90\x68\xab\x90\x08\x51\x5d\x86\x90\x33\x86\x5c\x51\x60\x08\x28\x68\x08\xd2\x07\x51\x08\x76\x8e\x23\x76\x5b\x51\x60\x3d\x27\x67\x6e\x09\x07\x51\x9f\x66\xec\xe1\x66\xec\x51\x70\x0e\xec\x76\x3a\xf3\x06\x51\x65\x67\xfb\x7e\x77\x04\x4c\x70\x74\xd4\x07\x51\x73\x77\xe6\x73\x77\xee\x51\x70\x73\xf6\x77\x73\xf9\x07\x51\x73\x87\x2e\x86\x87\x3f\x51\x70\x99\x51\x78\xb2\x51\x08\x51\xd2\x87\x51\xe8\x87\x37\x51\x70\xfe\x1d\x88\x0a\xf1\x07\x51\x16\x78\xc6\x16\x78\x91\x51\x80\x16\x32\x77\xef\xf0\x06\x51\xc9\x67\xae\x86\x67\x8b\x51\x70\x43\x68\x66\xee\x68\x06\x51\x79\x66\x68\x28\x66\x99\x51\x50\xd8\xc9\x56\xaf\x1d\x07\x51\x85\x75\x72\x85\x75\xde\x51\x50\x85\x76\x58\xd5\xc7\x08\x51\x25\x96\x18\xbb\x96\x18\x51\x60\xfa\x18\x79\x33\x0a\x09\x51\x6c\x87\xfc\x98\x87\xec\x56\x90\x31\x51\x70\x6c\x44\x79\x35\x4f\x09\x51\xfe\x96\x5b\xbb\x96\x5b\x51\x60\x43\x5b\x59\xed\x2e\x09\x51\x97\x95\x01\x69\x85\xad\x51\x50\x3b\x58\x58\x3b\xe1\x07\x51\x3b\x75\x82\x59\x75\x31\x51\x50\x77\xdf\x56\xaf\xa3\x06\x51\xe7\x65\x67\x38\x66\x46\x51\x60\x88\x25\x66\xee\x25\x06\x51\x58\x67\x25\xab\x67\x51\x51\x70\xfe\x7d\x86\x2e\xcf\x06\x51\x5d\x78\x21\x5d\x78\x92\x5a\x00\x4d\x58\x76\xd4\x51\x60\x58\x16\x68\x72\x33\x08\x51\x8c\x86\x51\xb8\x86\x51\x51\x60\xf2\x51\x78\x0b\x26\x08\x51\x24\x77\xfb\x28\x77\xb6\x4c\x70\x2e\x36\x07\x51\x21\x77\x32\x0c\x77\x2f\x51\x60\xf8\x2c\x67\xe2\x2c\x07\x51\xb0\x76\x2c\x91\x76\x45\x51\x60\x73\x5d\x67\x65\x84\x07\x51\x58\x76\xaa\x58\x76\xd4\x5a\x00"; + return "\x4d\x70\x78\x3b\x06\x51\x78\x67\x5e\x70\x67\x7f\x51\x70\x69\xa0\x76\x58\xba\x06\x51\x47\x67\xd5\x2f\x67\xe5\x51\x70\x17\xf5\x66\xf6\xf5\x06\x51\xd4\x66\xf5\xc0\x66\xe2\x51\x60\xac\xce\x66\xa7\xb4\x06\x48\xa4\x06\x51\x96\x66\xd0\x7c\x66\xe3\x51\x60\x61\xf5\x66\x3a\xf5\x06\x51\x00\x66\xf5\xe1\x65\xcf\x51\x50\xc2\xa9\x56\xc2\x6a\x06\x51\xc2\x65\x38\xd6\x65\x12\x51\x50\xe9\xec\x65\x0d\xd6\x05\x51\x30\x56\xc0\x61\x56\xc0\x51\x60\x82\xc0\x65\xa2\xc6\x05\x51\xc2\x56\xcc\xd4\x56\xd3\x4c\x60\xcd\x6b\x06\x51\xcc\x66\x79\xcc\x66\x7e\x51\x60\xcc\x84\x66\xcc\x86\x06\x51\xcc\x66\xad\xda\x66\xba\x51\x60\xe8\xc7\x66\xfb\xc7\x06\x51\x12\x67\xc7\x22\x67\xb4\x51\x70\x32\xa1\x76\x3b\x81\x06\x51\x44\x67\x61\x44\x67\x3a\x51\x70\x44\xf4\x75\x27\xc4\x05\x51\x0b\x57\x93\xda\x56\x7a\x51\x60\xa9\x60\x65\x6a\x60\x05\x51\x15\x56\x60\xda\x55\x84\x51\x50\x9f\xa7\x55\x80\xe5\x05\x51\x62\x65\x23\x62\x65\x73\x51\x50\x62\xe2\x56\x9c\x1d\x07\x51\xd7\x75\x59\x46\x76\x59\x51\x60\x73\x59\x67\x9d\x4f\x07\x51\xc7\x76\x44\xe7\x76\x38\x56\x70\x6c\x51\x60\xc7\x79\x67\x9f\x82\x07\x51\x76\x76\x8a\x46\x76\x8a\x51\x50\xed\x8a\x57\xae\x69\x07\x51\x6f\x75\x48\x4d\x75\x0a\x51\x50\x2c\xcc\x56\x2c\x75\x06\x51\x2c\x65\x2f\x41\x55\xf3\x51\x50\x57\xb7\x55\x81\x8b\x05\x51\xaa\x55\x5f\xe5\x55\x47\x51\x60\x20\x2f\x65\x6a\x2f\x05\x51\xb9\x56\x2f\xf5\x56\x4f\x51\x70\x32\x6f\x75\x55\xab\x05\x51\x78\x57\xe8\x78\x67\x3b\x5a\x00\x4d\xfd\x65\x6b\x51\x50\xfd\x9b\x66\x10\xb1\x06\x51\x23\x66\xc7\x43\x66\xc7\x51\x60\x6d\xc7\x66\x80\xa7\x06\x51\x92\x66\x88\x95\x66\x55\x4c\x60\x9a\xf7\x05\x51\x90\x56\xf4\x81\x56\xf2\x51\x60\x72\xf0\x65\x62\xf0\x05\x51\x3d\x56\xf0\x27\x66\x02\x51\x60\x10\x14\x66\x06\x30\x06\x51\xfd\x65\x4c\xfd\x65\x6b\x5a\x00"; } function font_A() internal pure returns(bytes memory) { - return "\x4d\x50\x00\x00\x59\xdd\xb4\x06\x48\x43\x06\x4c\x1d\x97\x00\x48\x60\xba\x4c\x60\x80\x59\x08\x48\xa0\x05\x4c\x62\x95\x00\x5a\x00\x4d\x2d\x76\x6a\x51\x60\x26\x55\x67\x1d\x3c\x07\x51\x14\x76\x24\x0f\x76\x0b\x51\x60\x09\x24\x67\x02\x3b\x07\x51\xfa\x75\x53\xf2\x75\x6c\x4c\x50\xb8\x0e\x08\x48\x65\x06\x5a"; + return "\x4d\x60\x9a\x47\x67\x59\xa1\x06\x48\x84\x05\x4c\x44\x75\x47\x48\x50\x00\x4c\x50\xd2\x2c\x05\x48\x0f\x06\x4c\xe0\x76\x47\x5a\x00\x4d\x09\x56\xc3\x51\x60\x06\xbd\x65\x01\xad\x05\x51\xfc\x55\x9d\xf7\x55\x8c\x51\x50\xf2\x7b\x55\xef\x72\x05\x51\xea\x55\x8a\xe3\x55\xa0\x51\x50\xdc\xb6\x55\xd8\xc3\x05\x4c\x9b\x65\x65\x48\x60\x45\x5a\x00"; } function font_B() internal pure returns(bytes memory) { - return "\x4d\x60\x00\xb6\x06\x51\x76\x66\xb6\xab\x66\xdc\x51\x60\xe0\x02\x67\xe0\x4b\x07\x51\xe0\x76\x80\xc2\x76\xa1\x51\x60\xa3\xc2\x67\x71\xcb\x07\x56\xce\x07\x51\xaa\x76\xd8\xcb\x76\xf7\x51\x60\xed\x17\x68\xed\x57\x08\x51\xed\x86\xab\xb2\x86\xd6\x51\x60\x77\x00\x69\x16\x00\x09\x48\x4c\x05\x56\xb6\x06\x5a\x4d\x60\x08\xb0\x07\x51\x4b\x76\xb0\x67\x76\x99\x51\x60\x84\x82\x67\x84\x55\x07\x51\x84\x66\xfd\x00\x66\xfd\x48\x50\xa5\x56\x70\xb0\x5a\x00\x4d\x11\x86\xb9\x51\x60\x91\xb9\x68\x91\x52\x08\x51\x91\x86\x25\x71\x86\x0b\x51\x60\x50\xf2\x67\x0a\xf2\x07\x48\xa5\x05\x56\xb9\x08\x5a"; + return "\x4d\x50\xe2\x2f\x05\x51\x47\x56\x2f\x7b\x56\x4c\x51\x60\xae\x6a\x65\xae\xb4\x05\x51\xae\x56\xe3\x94\x66\x02\x51\x60\x79\x21\x66\x48\x2a\x06\x56\x2e\x06\x51\x6a\x66\x34\x85\x66\x42\x51\x60\xa1\x50\x66\xb0\x6a\x06\x51\xc0\x66\x85\xc0\x66\xaf\x51\x60\xc0\xf8\x66\x8e\x20\x07\x51\x5c\x76\x47\x06\x76\x47\x48\x50\x49\x56\x50\x2f\x5a\x00\x4d\xf0\x65\x13\x51\x60\x35\x13\x66\x4f\xfd\x05\x51\x68\x56\xe7\x68\x56\xbb\x51\x60\x68\x8f\x65\x49\x7c\x05\x51\x2a\x56\x69\xe5\x55\x69\x48\x50\x8d\x56\x60\x13\x5a\x00\x4d\x8d\x65\x4c\x56\x70\x0e\x48\x50\xf9\x51\x60\x40\x0e\x67\x5c\xf2\x06\x51\x78\x66\xd7\x78\x66\xaa\x51\x60\x78\x7f\x66\x5b\x65\x06\x51\x3e\x66\x4c\xf4\x65\x4c\x5a\x00"; } function font_C() internal pure returns(bytes memory) { - return "\x4d\x60\x4e\xfa\x06\x51\xf2\x65\xfa\xbf\x75\x37\x51\x50\x8d\x74\x57\x8d\xdb\x07\x51\x8d\x85\x45\xbd\x85\x81\x51\x50\xed\xbc\x68\x4d\xbc\x08\x51\x73\x86\xbc\x96\x86\xb5\x51\x60\xb9\xad\x68\xdb\xa0\x08\x56\xef\x08\x51\x9b\x96\x08\x3f\x96\x08\x51\x50\xe4\x08\x59\xa8\xe2\x08\x51\x6c\x85\xbc\x4d\x85\x78\x51\x50\x2f\x34\x58\x2f\xda\x07\x51\x2f\x75\x82\x51\x75\x3e\x51\x50\x74\xfb\x56\xb4\xd4\x06\x51\xf4\x65\xae\x4c\x66\xae\x51\x60\xa6\xae\x66\xf3\xd3\x06\x4c\xd5\x76\x1c\x51\x60\xb5\x0c\x67\x93\x03\x07\x51\x72\x66\xfa\x4e\x66\xfa\x5a\x00"; + return "\x4d\x60\x2f\x62\x05\x51\xd9\x55\x62\xa7\x55\x9c\x51\x50\x75\xd6\x55\x75\x3b\x06\x51\x75\x65\x9f\xa4\x65\xd9\x51\x50\xd2\x14\x67\x2e\x14\x07\x51\x52\x76\x14\x71\x76\x0e\x51\x60\x91\x08\x67\xaf\xfe\x06\x56\x39\x07\x51\x91\x76\x44\x71\x76\x4a\x51\x60\x51\x4f\x67\x24\x4f\x07\x51\xd3\x75\x4f\x9c\x75\x2d\x51\x50\x65\x0b\x57\x49\xcd\x06\x51\x2e\x65\x8e\x2e\x65\x3a\x51\x50\x2e\xe9\x55\x4c\xab\x05\x51\x69\x55\x6d\xa3\x55\x4a\x51\x50\xdd\x27\x65\x30\x27\x05\x51\x85\x56\x27\xc4\x56\x47\x4c\x60\xa9\x80\x05\x51\x90\x56\x75\x72\x56\x6c\x51\x60\x53\x62\x65\x2f\x62\x05\x5a"; } function font_D() internal pure returns(bytes memory) { - return "\x4d\x70\x24\xd4\x07\x51\x24\x87\x68\xd3\x86\xb4\x51\x60\x82\x00\x59\xef\x00\x09\x48\x4c\x05\x56\xb6\x06\x48\xfe\x05\x51\x8d\x66\xb6\xd9\x66\xff\x51\x70\x24\x49\x77\x24\xd4\x07\x5a\x4d\x60\xc7\xd7\x07\x51\xc7\x76\x6d\x92\x76\x37\x51\x60\x5e\x01\x57\xfa\x01\x07\x48\xa5\x05\x56\xb5\x08\x48\xef\x05\x51\xc7\x86\xb5\xc7\x76\xd7\x5a\x00"; + return "\x4d\x60\xf7\x36\x06\x51\xf7\x66\xbe\xad\x76\x03\x51\x60\x63\x47\x57\xdf\x47\x07\x48\x49\x05\x56\x2f\x05\x48\xee\x05\x51\x40\x56\x2f\x7b\x56\x4d\x51\x60\xb6\x6b\x65\xd7\xa5\x05\x51\xf7\x56\xdf\xf7\x66\x36\x5a\x00\x4d\xb0\x66\x38\x51\x60\xb0\xcc\x65\x7b\x9b\x05\x51\x46\x56\x69\xe5\x55\x69\x48\x50\x8d\x56\x70\x0e\x48\x50\xd6\x51\x60\xb0\x0e\x67\xb0\x38\x06\x5a"; } function font_E() internal pure returns(bytes memory) { - return "\x4d\x50\x4c\xb6\x06\x48\x9c\x06\x56\xff\x06\x48\xa5\x05\x56\xac\x07\x48\x8c\x06\x56\xf4\x07\x48\xa5\x05\x56\xb7\x08\x48\x9c\x06\x56\x00\x09\x48\x4c\x05\x5a"; + return "\x4d\x60\x75\x47\x07\x48\x49\x05\x56\x2f\x05\x48\x75\x06\x56\x6a\x05\x48\x8d\x05\x56\x12\x06\x48\x67\x06\x56\x4c\x06\x48\x8d\x05\x56\x0c\x07\x48\x75\x06\x5a"; } function font_F() internal pure returns(bytes memory) { - return "\x4d\x50\x4c\xb6\x06\x48\x9b\x06\x56\xff\x06\x48\xa5\x05\x56\xc4\x07\x48\x8b\x06\x56\x0c\x08\x48\xa5\x05\x56\x00\x09\x48\x4c\x05\x5a"; + return "\x4d\x50\x8d\x47\x07\x48\x49\x05\x56\x2f\x05\x48\x75\x06\x56\x6a\x05\x48\x8d\x05\x56\x28\x06\x48\x67\x06\x56\x64\x06\x48\x8d\x05\x5a"; } function font_G() internal pure returns(bytes memory) { - return "\x4d\x70\x21\xe4\x08\x51\xf5\x86\xf5\xc0\x86\xfe\x51\x60\x8b\x08\x69\x51\x08\x09\x51\xc9\x95\x08\x7c\x85\xbb\x51\x50\x30\x6f\x58\x30\xdc\x07\x51\x30\x75\x84\x53\x75\x41\x51\x50\x76\xfd\x56\xba\xd6\x06\x51\xff\x65\xaf\x62\x66\xaf\x51\x60\xca\xaf\x76\x18\xd3\x06\x4c\xf9\x76\x1c\x51\x60\xb1\xfa\x66\x61\xfa\x06\x51\xfa\x65\xfa\xc4\x75\x38\x51\x50\x8d\x77\x57\x8d\xdb\x07\x51\x8d\x85\x4b\xc3\x85\x84\x51\x50\xf8\xbd\x68\x5e\xbd\x08\x51\x9d\x86\xbd\xcb\x86\xad\x56\x80\x0f\x48\x60\x37\x56\x70\xc7\x48\x70\x21\x5a\x00"; + return "\x4d\x60\x32\x2c\x06\x48\xec\x06\x56\x33\x07\x51\xc0\x76\x41\x94\x76\x48\x51\x60\x67\x4f\x67\x2f\x4f\x07\x51\xdc\x75\x4f\xa2\x75\x2d\x51\x50\x69\x0c\x57\x4c\xce\x06\x51\x2e\x65\x90\x2e\x65\x3b\x51\x50\x2e\xe7\x55\x4f\xa9\x05\x51\x70\x55\x6c\xae\x55\x49\x51\x50\xec\x27\x65\x44\x27\x05\x51\x71\x56\x27\x99\x56\x2f\x51\x60\xc2\x38\x65\xe4\x47\x05\x4c\xcb\x56\x81\x51\x60\xae\x75\x65\x8a\x6c\x05\x51\x67\x56\x62\x40\x56\x62\x51\x50\xe0\x62\x55\xaa\x9c\x05\x51\x75\x55\xd6\x75\x65\x3b\x51\x50\x75\x7b\x56\x89\xac\x06\x51\x9e\x65\xdd\xca\x65\xf9\x51\x50\xf7\x14\x67\x3f\x14\x07\x51\x62\x76\x14\x7b\x76\x11\x51\x60\x94\x0d\x67\xa8\x08\x07\x56\x68\x06\x48\x32\x06\x5a"; } function font_H() internal pure returns(bytes memory) { - return "\x4d\x70\x19\xb6\x06\x56\x00\x09\x48\xbf\x06\x56\xf5\x07\x48\xa5\x05\x56\x00\x09\x48\x4c\x05\x56\xb6\x06\x48\xa5\x05\x56\xaa\x07\x48\xbf\x06\x56\xb6\x06\x5a"; + return "\x4d\x60\xe3\x47\x07\x48\xa0\x06\x56\x4d\x06\x48\x8d\x05\x56\x47\x07\x48\x49\x05\x56\x2f\x05\x48\x8d\x05\x56\x12\x06\x48\xa0\x06\x56\x2f\x05\x48\xe3\x06\x5a"; } function font_I() internal pure returns(bytes memory) { - return "\x4d\x50\x26\x00\x09\x56\xcd\x08\x4c\x68\x85\xbc\x56\x60\xfb\x4c\x50\x26\xec\x06\x56\xb6\x06\x48\x05\x06\x56\xec\x06\x4c\xc3\x65\xfb\x56\x80\xbc\x4c\x60\x05\xcd\x08\x56\x00\x09\x5a"; + return "\x4d\x50\xe0\x47\x07\x48\x1e\x05\x56\x20\x07\x4c\x5d\x75\x12\x56\x50\x65\x4c\x50\x1e\x56\x05\x56\x2f\x05\x48\xe0\x05\x56\x56\x05\x4c\xa1\x55\x65\x56\x70\x12\x4c\x50\xe0\x20\x07\x5a"; } function font_J() internal pure returns(bytes memory) { - return "\x4d\x40\xff\xa2\x09\x51\xd2\x94\xa2\xb9\x94\x98\x56\x90\x52\x51\x40\xc9\x55\x49\xd8\x58\x09\x51\xe6\x94\x5a\xf5\x94\x5a\x51\x50\x24\x5a\x59\x39\x40\x09\x51\x4e\x95\x26\x4e\x85\xf1\x56\x60\xb6\x48\x50\xa7\x56\x80\xe8\x51\x50\xa7\x4a\x59\x7b\x76\x09\x51\x4f\x95\xa2\xff\x94\xa2\x5a\x00"; + return "\x4d\x40\xfd\xd6\x07\x51\xeb\x74\xd6\xdd\x74\xd4\x51\x40\xd0\xd1\x47\xc5\xcc\x07\x56\x93\x07\x51\xd1\x74\x96\xdf\x74\x99\x51\x40\xec\x9b\x47\xfb\x9b\x07\x51\x0e\x75\x9b\x1f\x75\x93\x51\x50\x30\x8c\x57\x3b\x79\x07\x51\x45\x75\x66\x45\x75\x44\x56\x50\x2f\x48\x50\x89\x56\x70\x3f\x51\x50\x89\x8d\x57\x62\xb1\x07\x51\x3c\x75\xd6\xfd\x74\xd6\x5a\x00"; } function font_K() internal pure returns(bytes memory) { - return "\x4d\x50\x4c\xb6\x06\x48\xa6\x05\x56\xd3\x07\x51\xb3\x75\xc2\xc3\x75\xb0\x51\x50\xd2\x9f\x57\xe0\x8e\x07\x4c\x9e\x66\xb6\x48\x70\x04\x4c\x60\x28\xb4\x07\x4c\x06\x97\x00\x48\x60\x9f\x4c\x50\xe7\xee\x07\x4c\xa6\x85\x22\x56\x90\x00\x48\x50\x4c\x5a\x00"; + return "\x4d\x60\xd1\x47\x07\x48\x82\x06\x4c\xc3\x65\x47\x4c\x50\x8d\x77\x06\x56\x47\x07\x48\x49\x05\x56\x2f\x05\x48\x8d\x05\x56\x37\x06\x51\xa3\x65\x1e\xba\x65\x04\x51\x50\xd2\xeb\x55\xe9\xd1\x05\x4c\x7a\x56\x2f\x48\x60\xc9\x4c\x50\xf4\x18\x06\x5a"; } function font_L() internal pure returns(bytes memory) { - return "\x4d\x50\xa5\xb6\x06\x56\xb5\x08\x48\xaa\x06\x56\x00\x09\x48\x4c\x05\x56\xb6\x06\x5a"; + return "\x4d\x50\x49\x47\x07\x56\x2f\x05\x48\x8d\x05\x56\x0b\x07\x48\x77\x06\x56\x47\x07\x5a"; } function font_M() internal pure returns(bytes memory) { - return "\x4d\x70\xa5\xb6\x06\x56\x00\x09\x48\x51\x07\x56\x90\x07\x51\x51\x77\x7c\x51\x77\x63\x51\x70\x52\x4a\x77\x53\x34\x07\x51\x54\x77\x1f\x55\x77\x14\x48\x70\x52\x4c\x60\x9e\x00\x09\x48\x50\x06\x4c\x9c\x75\x13\x48\x50\x99\x51\x50\x99\x1e\x57\x9a\x34\x07\x51\x9b\x75\x4a\x9c\x75\x63\x51\x50\x9d\x7d\x57\x9d\x94\x07\x56\x00\x09\x48\x4c\x05\x56\xb6\x06\x48\xc8\x05\x4c\x78\x86\x91\x48\x60\x7a\x4c\x70\x29\xb6\x06\x5a"; + return "\x4d\x60\x36\x47\x57\x85\x71\x05\x48\x82\x05\x51\x84\x55\x88\x86\x55\xb0\x51\x50\x87\xd7\x55\x87\x02\x06\x56\x47\x07\x48\x49\x05\x56\x2f\x05\x48\xad\x05\x4c\x52\x66\xe6\x48\x60\x55\x4c\x60\xfe\x2f\x05\x48\x61\x07\x56\x47\x07\x48\x1e\x07\x56\xfd\x05\x51\x1e\x57\xd6\x20\x57\xb0\x51\x70\x22\x8a\x75\x23\x72\x05\x48\x20\x07\x4c\x6d\x76\x47\x5a\x00"; } function font_N() internal pure returns(bytes memory) { - return "\x4d\x70\x31\xb6\x06\x56\x00\x09\x48\xc4\x06\x4c\x9b\x75\x25\x48\x50\x97\x51\x50\x99\x41\x57\x9b\x6a\x07\x51\x9d\x75\x93\x9d\x75\xb4\x56\x90\x00\x48\x50\x4c\x56\x60\xb6\x48\x50\xb9\x4c\x60\xe1\x8f\x08\x48\xe4\x06\x51\xe2\x86\x7a\xe1\x86\x52\x51\x60\xe0\x2a\x68\xe0\x06\x08\x56\xb6\x06\x5a"; + return "\x4d\x60\xf2\x47\x07\x48\xa4\x06\x4c\x84\x55\x8a\x48\x50\x81\x51\x50\x83\xa4\x55\x85\xcb\x05\x51\x87\x55\xf2\x87\x65\x1b\x56\x70\x47\x48\x50\x49\x56\x50\x2f\x48\x50\x97\x4c\x60\xb6\xeb\x06\x48\xb9\x06\x51\xb8\x66\xdf\xb7\x66\xc7\x51\x60\xb6\xaf\x66\xb4\x92\x06\x51\xb3\x66\x76\xb3\x66\x5e\x56\x50\x2f\x48\x60\xf2\x5a\x00"; } function font_O() internal pure returns(bytes memory) { - return "\x4d\x70\x56\xda\x07\x51\x56\x87\x34\x38\x87\x78\x51\x70\x1b\xbc\x68\xde\xe2\x08\x51\xa2\x96\x08\x45\x96\x08\x51\x50\xe8\x08\x59\xab\xe2\x08\x51\x6e\x85\xbc\x4f\x85\x78\x51\x50\x31\x33\x58\x31\xd9\x07\x51\x31\x75\x80\x4f\x75\x3c\x51\x50\x6e\xf9\x56\xab\xd3\x06\x51\xe8\x65\xad\x45\x66\xad\x51\x60\xa2\xad\x66\xde\xd3\x06\x51\x1b\x67\xf9\x38\x77\x3d\x51\x70\x56\x81\x77\x56\xda\x07\x5a\x4d\x50\x8f\xda\x07\x51\x8f\x85\x41\xbb\x85\x7e\x51\x50\xe6\xbb\x68\x44\xbb\x08\x51\xa2\x86\xbb\xcd\x86\x7e\x51\x60\xf8\x41\x68\xf8\xda\x07\x51\xf8\x76\x70\xcb\x76\x35\x51\x60\x9e\xfa\x66\x44\xfa\x06\x51\xe6\x65\xfa\xbb\x75\x37\x51\x50\x8f\x74\x57\x8f\xda\x07\x5a"; + return "\x4d\x70\x1d\x3a\x06\x51\x1d\x67\x8e\x01\x67\xcc\x51\x60\xe5\x0a\x67\xae\x2c\x07\x51\x77\x76\x4f\x26\x76\x4f\x51\x50\xd3\x4f\x57\x9b\x2c\x07\x51\x64\x75\x0a\x49\x65\xcb\x51\x50\x2e\x8d\x56\x2e\x3a\x06\x51\x2e\x55\xe7\x49\x55\xa9\x51\x50\x64\x6c\x55\x9b\x49\x05\x51\xd3\x55\x26\x27\x56\x26\x51\x60\x77\x26\x65\xae\x49\x05\x51\xe5\x56\x6b\x01\x57\xa9\x51\x70\x1d\xe7\x75\x1d\x3a\x06\x5a\x4d\x50\x75\x3a\x06\x51\x75\x65\xa0\xa0\x65\xda\x51\x50\xcb\x14\x67\x26\x14\x07\x51\x82\x76\x14\xac\x66\xda\x51\x60\xd6\xa0\x66\xd6\x3a\x06\x51\xd6\x56\xd5\xac\x56\x9b\x51\x60\x82\x62\x65\x27\x62\x05\x51\xcc\x55\x62\xa1\x55\x9b\x51\x50\x75\xd5\x55\x75\x3a\x06\x5a"; } function font_P() internal pure returns(bytes memory) { - return "\x4d\x50\xf5\xb6\x06\x51\x62\x66\xb6\x99\x66\xe3\x51\x60\xcf\x10\x67\xcf\x66\x07\x51\xcf\x76\xbd\x96\x76\xf0\x51\x60\x5c\x22\x58\xee\x22\x08\x48\xa5\x05\x56\x00\x09\x48\x4c\x05\x56\xb6\x06\x5a\x4d\x50\xe4\xd9\x07\x51\x27\x76\xd9\x4d\x76\xc2\x51\x60\x74\xaa\x67\x74\x6c\x07\x51\x74\x76\x35\x54\x76\x1a\x51\x60\x34\xff\x56\xf2\xff\x06\x48\xa5\x05\x56\xd9\x07\x5a"; + return "\x4d\x50\xd7\x2f\x05\x51\x40\x56\x2f\x70\x56\x58\x51\x60\xa1\x81\x65\xa1\xcc\x05\x51\xa1\x56\xf9\x8d\x66\x20\x51\x60\x79\x46\x66\x4a\x5e\x06\x51\x1b\x66\x76\xca\x65\x76\x48\x50\x8d\x56\x70\x47\x48\x50\x49\x56\x50\x2f\x5a\x00\x4d\xd1\x55\x69\x48\x50\x8d\x56\x60\x3d\x48\x50\xc3\x51\x60\x0f\x3d\x66\x35\x24\x06\x51\x5b\x66\x0b\x5b\x56\xd0\x51\x60\x5b\x9c\x65\x3a\x82\x05\x51\x18\x56\x69\xd1\x55\x69\x5a\x00"; } function font_Q() internal pure returns(bytes memory) { - return "\x4d\x70\x56\xda\x07\x51\x56\x87\x41\x2f\x87\x8c\x51\x70\x07\xd8\x68\xb0\xf6\x08\x4c\x3b\x97\x8b\x48\x60\xc3\x4c\x60\x54\x08\x09\x48\x45\x06\x51\xe8\x95\x08\xab\x85\xe2\x51\x50\x6e\xbc\x58\x4f\x78\x08\x51\x31\x85\x33\x31\x75\xd9\x51\x50\x31\x80\x57\x4f\x3c\x07\x51\x6e\x65\xf9\xab\x65\xd3\x51\x50\xe8\xad\x66\x45\xad\x06\x51\xa2\x66\xad\xde\x66\xd3\x51\x70\x1b\xf9\x76\x38\x3d\x07\x51\x56\x77\x81\x56\x77\xda\x5a\x00\x4d\x91\x75\xda\x51\x50\x91\x41\x58\xbc\x7e\x08\x51\xe7\x85\xbc\x45\x86\xbc\x51\x60\xa4\xbc\x68\xce\x7f\x08\x51\xf9\x86\x42\xf9\x76\xda\x51\x60\xf9\x70\x67\xcc\x35\x07\x51\xa0\x66\xfa\x46\x66\xfa\x51\x50\xe8\xfa\x56\xbd\x37\x07\x51\x91\x75\x75\x91\x75\xda\x5a\x00"; + return "\x4d\x70\x1d\x3a\x06\x51\x1d\x67\x9d\xf6\x66\xe2\x51\x60\xce\x27\x67\x81\x41\x07\x4c\x02\x77\xc7\x48\x60\xa1\x4c\x60\x39\x4e\x07\x51\x34\x76\x4e\x2f\x76\x4f\x51\x60\x2a\x4f\x67\x26\x4f\x07\x51\xd3\x75\x4f\x9b\x75\x2c\x51\x50\x64\x0a\x57\x49\xcb\x06\x51\x2e\x65\x8d\x2e\x65\x3a\x51\x50\x2e\xe7\x55\x49\xa9\x05\x51\x64\x55\x6c\x9b\x55\x49\x51\x50\xd3\x26\x65\x27\x26\x05\x51\x77\x56\x26\xae\x56\x49\x51\x60\xe5\x6b\x75\x01\xa9\x05\x51\x1d\x57\xe7\x1d\x67\x3a\x5a\x00\x4d\x75\x65\x3a\x51\x50\x75\xa0\x56\xa0\xda\x06\x51\xcb\x75\x14\x26\x76\x14\x51\x60\x82\x14\x67\xac\xda\x06\x51\xd6\x66\xa0\xd6\x66\x3a\x51\x60\xd6\xd5\x65\xac\x9b\x05\x51\x82\x56\x62\x27\x56\x62\x51\x50\xcc\x62\x55\xa1\x9b\x05\x51\x75\x55\xd5\x75\x65\x3a\x5a\x00"; } function font_R() internal pure returns(bytes memory) { - return "\x4d\x50\xef\xb6\x06\x51\xd1\x66\xb6\xd1\x76\x5d\x51\x60\xd1\x96\x67\xb5\xbe\x07\x51\x9a\x76\xe7\x5d\x76\xfc\x4c\x70\x00\x00\x09\x48\x9b\x06\x4c\x0e\x86\x12\x48\x50\xa5\x56\x90\x00\x48\x50\x4c\x56\x60\xb6\x5a\x00\x4d\xf6\x75\xcb\x51\x60\x32\xcb\x67\x54\xb2\x07\x51\x76\x76\x9a\x76\x76\x64\x51\x60\x76\x2c\x67\x53\x15\x07\x51\x30\x66\xfe\xee\x65\xfe\x48\x50\xa5\x56\x70\xcb\x5a\x00"; + return "\x4d\x50\xdd\x2f\x05\x51\x41\x56\x2f\x71\x56\x55\x51\x60\xa1\x7b\x65\xa1\xc7\x05\x51\xa1\x56\xf2\x91\x66\x0f\x51\x60\x81\x2b\x66\x69\x3c\x06\x51\x50\x66\x4d\x35\x66\x57\x4c\x60\xc8\x47\x07\x48\x79\x06\x4c\xf7\x65\x6a\x48\x50\x8d\x56\x70\x47\x48\x50\x49\x56\x50\x2f\x5a\x00\x4d\xd9\x55\x69\x48\x50\x8d\x56\x60\x30\x48\x50\xdd\x51\x60\x1e\x30\x66\x3d\x17\x06\x51\x5b\x56\xfd\x5b\x56\xca\x51\x60\x5b\x96\x65\x3b\x7f\x05\x51\x1b\x56\x69\xd9\x55\x69\x5a\x00"; } function font_S() internal pure returns(bytes memory) { - return "\x4d\x60\xac\x5e\x08\x51\xac\x86\xaa\x74\x86\xd9\x51\x60\x3b\x08\x59\xd7\x08\x09\x51\x9f\x95\x08\x76\x95\x01\x51\x50\x4d\xfa\x58\x2a\xec\x08\x56\x9a\x08\x51\x79\x85\xbe\xd7\x85\xbe\x51\x60\x0d\xbe\x68\x2f\xa7\x08\x51\x51\x86\x90\x51\x86\x65\x51\x60\x51\x39\x68\x2f\x23\x08\x51\x0c\x86\x0d\xca\x75\xf6\x51\x50\x80\xdb\x57\x58\xb7\x07\x51\x30\x75\x93\x30\x75\x4d\x51\x50\x30\x1a\x57\x4b\xf6\x06\x51\x65\x65\xd3\x93\x65\xc1\x51\x50\xc1\xae\x56\xfa\xae\x06\x51\x2a\x66\xae\x54\x66\xb8\x51\x60\x7f\xc3\x66\xa3\xd2\x06\x4c\x86\x76\x19\x51\x60\x61\x08\x67\x3d\xff\x06\x51\x19\x66\xf7\xf8\x65\xf7\x51\x50\xc6\xf7\x56\xa7\x0c\x07\x51\x89\x75\x22\x89\x75\x4a\x51\x50\x89\x67\x57\x99\x7a\x07\x51\xa8\x75\x8c\xc6\x75\x9a\x51\x50\xe4\xa7\x67\x0e\xb7\x07\x51\x3c\x76\xc9\x60\x76\xdd\x51\x60\x84\xf2\x67\x98\x10\x08\x51\xac\x86\x2e\xac\x86\x5e\x5a\x00"; + return "\x4d\x60\x79\xb8\x06\x51\x79\x66\xff\x46\x76\x27\x51\x60\x12\x4f\x57\xba\x4f\x07\x51\x8d\x75\x4f\x66\x75\x48\x51\x50\x40\x41\x57\x26\x35\x07\x56\xf5\x06\x51\x41\x75\x01\x6a\x75\x0b\x51\x50\x92\x14\x57\xbd\x14\x07\x51\xf9\x75\x14\x17\x66\xfd\x51\x60\x36\xe6\x66\x36\xbe\x06\x51\x36\x66\xa4\x2a\x66\x91\x51\x60\x1f\x7f\x66\x04\x70\x06\x51\xe8\x65\x61\xb7\x65\x4f\x51\x50\x73\x37\x56\x50\x12\x06\x51\x2d\x55\xee\x2d\x55\xb0\x51\x50\x2d\x85\x55\x43\x67\x05\x51\x59\x55\x48\x7f\x55\x38\x51\x50\xa6\x27\x55\xd9\x27\x05\x51\x05\x56\x27\x2a\x56\x2f\x51\x60\x4f\x38\x65\x6d\x45\x05\x4c\x58\x56\x7f\x51\x60\x3c\x73\x65\x1b\x6b\x05\x51\xfa\x55\x62\xd7\x55\x62\x51\x50\xa5\x62\x55\x8b\x78\x05\x51\x72\x55\x8d\x72\x55\xb1\x51\x50\x72\xcc\x55\x7d\xde\x05\x51\x88\x55\xf0\xa2\x55\xfe\x51\x50\xbb\x0c\x56\xe7\x1d\x06\x51\x16\x66\x2e\x37\x66\x42\x51\x60\x58\x56\x66\x69\x72\x06\x51\x79\x66\x8e\x79\x66\xb8\x5a\x00"; } function font_T() internal pure returns(bytes memory) { - return "\x4d\x60\xc1\xb6\x06\x56\x03\x07\x48\x12\x06\x56\x00\x09\x48\xb9\x05\x56\x03\x07\x48\x0b\x05\x56\xb6\x06\x5a"; + return "\x4d\x50\xf3\x47\x07\x48\xaf\x05\x56\x6a\x05\x48\x08\x05\x56\x2f\x05\x48\x9a\x06\x56\x6a\x05\x48\xf3\x05\x5a"; } function font_U() internal pure returns(bytes memory) { - return "\x4d\x70\x1c\x27\x08\x51\x1c\x87\x90\xde\x86\xcc\x51\x60\xa1\x08\x69\x2e\x08\x09\x51\xbe\x95\x08\x83\x85\xcd\x51\x50\x47\x92\x58\x47\x28\x08\x56\xb6\x06\x48\xa1\x05\x56\x24\x08\x51\xa1\x85\x6f\xc6\x85\x96\x51\x50\xec\xbd\x68\x33\xbd\x08\x51\x79\x86\xbd\x9d\x86\x96\x51\x60\xc2\x6f\x68\xc2\x26\x08\x56\xb6\x06\x48\x1c\x07\x5a"; + return "\x4d\x60\xe1\x8a\x06\x51\xe1\x66\xc2\xcb\x66\xee\x51\x60\xb4\x1b\x67\x86\x35\x07\x51\x58\x76\x4f\x10\x76\x4f\x51\x50\xac\x4f\x57\x78\x18\x07\x51\x44\x65\xe2\x44\x65\x88\x56\x50\x2f\x48\x50\x87\x56\x60\x8b\x51\x50\x87\xcc\x56\xaa\xf0\x06\x51\xcd\x75\x14\x14\x76\x14\x51\x60\x5d\x14\x67\x7e\xee\x06\x51\x9e\x66\xc7\x9e\x66\x8a\x56\x50\x2f\x48\x60\xe1\x5a\x00"; } function font_V() internal pure returns(bytes memory) { - return "\x4d\x50\xd2\x00\x59\x00\xb6\x06\x48\x62\x05\x4c\xe1\x85\x35\x51\x50\xee\x59\x58\xf5\x73\x08\x51\xfd\x85\x8c\x03\x86\xa4\x51\x60\x08\x8c\x68\x11\x70\x08\x51\x1b\x86\x53\x25\x86\x35\x4c\x60\xa4\xb6\x06\x48\x07\x07\x4c\x34\x96\x00\x5a\x00"; + return "\x4d\x60\xc3\x2f\x65\x03\x47\x07\x48\xc0\x05\x4c\x00\x55\x2f\x48\x50\x47\x4c\x50\xc0\x87\x06\x51\xcc\x65\xa8\xd4\x65\xc5\x51\x50\xdc\xe2\x56\xe2\xfc\x06\x51\xe7\x65\xe2\xef\x65\xc5\x51\x50\xf7\xa7\x66\x03\x85\x06\x4c\x7c\x56\x2f\x5a\x00"; } function font_W() internal pure returns(bytes memory) { - return "\x4d\x60\xa3\x8c\x07\x51\x9b\x76\x6c\x94\x76\x4d\x51\x60\x8d\x2f\x67\x8a\x18\x07\x51\x86\x76\x31\x81\x76\x4e\x51\x60\x7b\x6c\x67\x73\x88\x07\x4c\x0e\x96\x00\x48\x50\xad\x4c\x50\x11\xb6\x06\x48\x69\x05\x4c\xc2\x85\x0e\x51\x50\xcb\x32\x58\xd4\x5b\x08\x51\xdd\x85\x84\xe1\x85\xa2\x51\x50\xe7\x85\x58\xef\x63\x08\x51\xf7\x85\x41\x01\x86\x18\x4c\x60\x5e\xb6\x06\x48\xb5\x06\x4c\x14\x87\x1b\x51\x70\x1e\x3d\x78\x26\x62\x08\x51\x2f\x87\x87\x34\x87\xa3\x51\x70\x36\x92\x78\x3b\x7c\x08\x51\x41\x87\x65\x46\x87\x50\x51\x70\x4c\x3a\x78\x4f\x2d\x08\x4c\xae\x67\xb6\x48\x80\x05\x4c\x70\x68\x00\x09\x48\x07\x07\x5a"; + return "\x4d\x70\xb1\x2f\x75\x23\x47\x07\x48\xde\x06\x4c\x76\x56\xe8\x51\x60\x70\xd2\x65\x6a\xbc\x05\x51\x64\x56\xa6\x60\x56\x95\x51\x60\x5c\x84\x65\x5b\x7e\x05\x51\x5a\x56\x87\x53\x56\xa7\x51\x60\x4c\xc7\x65\x41\xea\x05\x4c\xdc\x75\x47\x48\x50\x97\x4c\x50\x09\x2f\x05\x48\x50\x05\x4c\xa3\x65\x76\x51\x50\xac\x99\x56\xb3\xb9\x06\x51\xb9\x65\xda\xbd\x65\xf6\x51\x50\xc0\xd9\x56\xc8\xb6\x06\x51\xd0\x65\x94\xd9\x65\x73\x4c\x60\x38\x2f\x05\x48\x7e\x06\x4c\xe0\x66\x75\x51\x60\xeb\x97\x66\xf2\xba\x06\x51\xfa\x66\xdc\xfe\x66\xf6\x51\x70\x02\xda\x76\x08\xba\x06\x51\x0f\x67\x99\x18\x67\x76\x4c\x70\x6b\x2f\x05\x5a"; } function font_X() internal pure returns(bytes memory) { - return "\x4d\x50\xfe\x13\x58\x65\x00\x09\x48\x01\x05\x4c\xc7\x75\xd2\x4c\x50\x11\xb6\x06\x48\x74\x05\x4c\xff\x75\x96\x4c\x60\x8a\xb6\x06\x48\xee\x06\x4c\x34\x76\xd5\x4c\x60\xfc\x00\x09\x48\x96\x06\x5a"; + return "\x4d\x60\xb6\x47\x07\x48\x69\x06\x4c\xdb\x65\x5e\x4c\x50\x4a\x47\x07\x48\x03\x05\x4c\xb5\x65\x30\x4c\x50\x0e\x2f\x05\x48\x59\x05\x4c\xdd\x65\x01\x4c\x60\x61\x2f\x05\x48\xa9\x06\x4c\x03\x66\x2e\x5a\x00"; } function font_Y() internal pure returns(bytes memory) { - return "\x4d\x60\xe4\xb6\x66\x20\x1d\x08\x56\x00\x09\x48\xc5\x05\x56\x21\x08\x4c\x00\x65\xb6\x48\x50\x62\x4c\x50\xf3\xce\x07\x4c\x84\x66\xb6\x5a\x00"; + return "\x4d\x50\xd5\x37\x66\x61\x2f\x05\x48\xaa\x06\x4c\xf7\x65\x77\x56\x70\x47\x48\x50\xb3\x56\x60\x7a\x4c\x50\x00\x2f\x05\x48\x4a\x05\x5a"; } function font_Z() internal pure returns(bytes memory) { - return "\x4d\x50\x1e\x00\x09\x56\xc7\x08\x4c\x54\x76\x01\x48\x50\x29\x56\x60\xb6\x48\x60\xc6\x56\x60\xf1\x4c\x50\x8f\xb5\x08\x48\xce\x06\x56\x00\x09\x5a"; + return "\x4d\x60\x91\x47\x07\x48\x1d\x05\x56\x14\x07\x4c\x37\x56\x6b\x48\x50\x26\x56\x50\x2f\x48\x60\x89\x56\x50\x62\x4c\x50\x6f\x0b\x07\x48\x91\x06\x5a"; } function font_left_bracket() internal pure returns(bytes memory) { - return "\x4d\x60\x37\xa2\x09\x48\x52\x05\x56\x25\x06\x48\x37\x06\x56\x6f\x06\x48\xaa\x05\x56\x58\x09\x48\x37\x06\x5a"; + return "\x4d\x50\xe5\xbe\x07\x48\x3c\x05\x56\x2f\x05\x48\xe5\x05\x56\x65\x05\x48\x7d\x05\x56\x88\x07\x48\xe5\x05\x5a"; } function font_back_slash() internal pure returns(bytes memory) { - return "\x4d\x50\x62\x25\x66\x74\x00\x09\x48\x1b\x06\x4c\x0a\x65\x25\x5a\x00"; + return "\x4d\x50\x48\x2f\x65\x11\x47\x07\x48\xd0\x05\x4c\x08\x55\x2f\x5a\x00"; } function font_right_bracket() internal pure returns(bytes memory) { - return "\x4d\x50\x1a\x58\x09\x48\xa7\x05\x56\x6f\x06\x48\x1a\x05\x56\x25\x06\x48\xff\x05\x56\xa2\x09\x48\x1a\x05\x5a"; + return "\x4d\x50\x13\x88\x07\x48\x7b\x05\x56\x65\x05\x48\x13\x05\x56\x2f\x05\x48\xbb\x05\x56\xbe\x07\x48\x13\x05\x5a"; } function font_caret() internal pure returns(bytes memory) { - return "\x4d\x60\x03\xf0\x05\x51\x0f\x66\x06\x26\x66\x22\x51\x60\x3d\x3e\x66\x57\x5a\x06\x51\x70\x66\x75\x83\x66\x88\x56\x60\x93\x48\x60\x44\x51\x60\x29\x83\x66\x0c\x6b\x06\x51\xf0\x65\x53\xd4\x65\x37\x51\x50\xb8\x53\x56\x9d\x6a\x06\x51\x81\x65\x82\x66\x65\x93\x48\x50\x29\x56\x60\x88\x51\x50\x3c\x74\x56\x54\x59\x06\x51\x6d\x65\x3e\x83\x65\x22\x51\x50\x9a\x06\x56\xa7\xf0\x05\x5a"; + return "\x4d\x50\xbe\x08\x05\x51\xc7\x55\x18\xd8\x55\x2d\x51\x50\xe9\x41\x55\xfb\x55\x05\x51\x0e\x56\x69\x1c\x56\x78\x56\x50\x80\x48\x50\xee\x51\x50\xda\x74\x55\xc5\x62\x05\x51\xb0\x55\x50\x9c\x55\x3c\x51\x50\x87\x50\x55\x73\x62\x05\x51\x5f\x55\x73\x4b\x55\x80\x48\x50\x1e\x56\x50\x78\x51\x50\x2c\x69\x55\x3e\x55\x05\x51\x50\x55\x41\x60\x55\x2d\x51\x50\x71\x18\x55\x7b\x08\x05\x5a"; } function font_underline() internal pure returns(bytes memory) { - return "\x4d\x60\xc9\x9e\x09\x48\xfe\x04\x56\x5c\x09\x48\xc9\x06\x5a"; + return "\x4d\x60\x4f\xbb\x07\x48\xfe\x04\x56\x8b\x07\x48\x4f\x06\x5a"; } function font_grave() internal pure returns(bytes memory) { - return "\x4d\x50\x94\xf0\x05\x51\xa0\x65\x06\xb1\x65\x22\x51\x50\xc2\x3e\x56\xd4\x59\x06\x51\xe7\x65\x74\xf7\x65\x87\x56\x60\x93\x48\x50\xba\x51\x50\xa3\x81\x56\x85\x64\x06\x51\x67\x65\x47\x4e\x65\x29\x51\x50\x35\x0c\x56\x29\xfa\x05\x56\xf0\x05\x5a"; + return "\x4d\x50\x6d\x08\x05\x51\x75\x55\x18\x82\x55\x2d\x51\x50\x8e\x41\x55\x9c\x55\x05\x51\xaa\x55\x69\xb5\x55\x77\x56\x50\x80\x48\x50\x89\x51\x50\x78\x72\x55\x62\x5d\x05\x51\x4c\x55\x47\x3a\x55\x32\x51\x50\x27\x1d\x55\x1e\x0f\x05\x56\x08\x05\x5a"; } function font_a() internal pure returns(bytes memory) { - return "\x4d\x60\x27\xd2\x06\x51\x8b\x66\xd2\xbb\x66\xfe\x51\x60\xec\x2a\x67\xec\x8a\x07\x56\x00\x09\x48\xaa\x06\x4c\x99\x86\xb2\x48\x60\x94\x51\x60\x71\xdf\x68\x49\xf5\x08\x51\x22\x96\x0a\xdc\x95\x0a\x51\x50\x91\x0a\x59\x60\xe3\x08\x51\x2f\x85\xbb\x2f\x85\x67\x51\x50\x2f\x16\x58\x70\xe9\x07\x51\xb0\x75\xbc\x36\x76\xb8\x4c\x60\x93\xb5\x07\x56\x94\x07\x51\x93\x76\x50\x76\x76\x35\x51\x60\x58\x1b\x67\x22\x1b\x07\x51\xf7\x75\x1b\xd0\x75\x27\x51\x50\xa9\x34\x57\x87\x45\x07\x4c\x6c\x75\x01\x51\x50\x8f\xee\x56\xc1\xe0\x06\x51\xf2\x65\xd2\x27\x66\xd2\x5a\x00\x4d\x42\x76\xf7\x51\x50\xdb\xfb\x57\xb4\x18\x08\x51\x8c\x85\x34\x8c\x85\x68\x51\x50\x8c\x97\x58\xa8\xac\x08\x51\xc5\x85\xc2\xf1\x85\xc2\x51\x60\x36\xc2\x68\x64\x9b\x08\x51\x92\x86\x75\x92\x86\x25\x56\x70\xf4\x5a\x00"; + return "\x4d\x50\xd9\xae\x05\x51\x22\x56\xae\x46\x56\xce\x51\x60\x69\xee\x65\x69\x35\x06\x56\x47\x07\x48\x39\x06\x4c\x2c\x76\x0e\x48\x60\x29\x51\x60\x0f\x2f\x57\xf2\x3f\x07\x51\xd5\x75\x4f\xa2\x75\x4f\x51\x50\x6b\x4f\x57\x47\x32\x07\x51\x23\x75\x15\x23\x65\xd7\x51\x50\x23\x9b\x56\x52\x7b\x06\x51\x81\x65\x5a\xe4\x65\x57\x4c\x60\x28\x55\x06\x56\x3d\x06\x51\x28\x66\x0a\x12\x56\xf7\x51\x50\xfd\xe3\x55\xd5\xe3\x05\x51\xb5\x55\xe3\x99\x55\xec\x51\x50\x7c\xf6\x55\x63\x02\x06\x4c\x4f\x55\xd0\x51\x50\x69\xc2\x55\x8d\xb8\x05\x51\xb1\x55\xae\xd9\x55\xae\x5a\x00\x4d\xec\x65\x85\x51\x50\xa1\x88\x56\x84\x9d\x06\x51\x67\x65\xb2\x67\x65\xd8\x51\x50\x67\xfa\x56\x7c\x0a\x07\x51\x90\x75\x1a\xb1\x75\x1a\x51\x50\xe4\x1a\x67\x06\xfd\x06\x51\x27\x66\xe1\x27\x66\xa7\x56\x60\x82\x5a\x00"; } function font_b() internal pure returns(bytes memory) { - return "\x4d\x50\xb1\xb3\x06\x51\xb1\x65\xd6\xb0\x65\xf4\x51\x50\xae\x12\x57\xac\x24\x07\x48\xb1\x05\x51\xc9\x75\x01\xf2\x65\xe9\x51\x60\x1b\xd2\x66\x5b\xd2\x06\x51\xc2\x66\xd2\xff\x76\x19\x51\x70\x3d\x60\x77\x3d\xee\x07\x51\x3d\x87\x7b\xff\x86\xc3\x51\x60\xc1\x0a\x69\x5b\x0a\x09\x51\x1b\x96\x0a\xf2\x85\xf3\x51\x50\xc9\xdb\x58\xb1\xba\x08\x48\xaa\x05\x4c\x98\x95\x00\x48\x50\x57\x56\x50\xf6\x48\x50\xb1\x5a\x00\x4d\x4c\x76\x1d\x51\x50\xf5\x1d\x57\xd3\x4f\x07\x51\xb1\x75\x81\xb1\x75\xea\x56\x70\xef\x51\x50\xb1\x54\x58\xd2\x8a\x08\x51\xf4\x85\xbf\x4e\x86\xbf\x51\x60\x98\xbf\x68\xbc\x89\x08\x51\xe0\x86\x53\xe0\x76\xed\x51\x60\xe0\x1d\x67\x4c\x1d\x07\x5a"; + return "\x4d\x50\x82\x97\x05\x51\x82\x55\xb1\x81\x55\xc7\x51\x50\x80\xdd\x55\x7e\xea\x05\x48\x82\x05\x51\x93\x55\xd0\xb1\x55\xbf\x51\x50\xd0\xae\x55\xff\xae\x05\x51\x4a\x56\xae\x78\x56\xe2\x51\x60\xa5\x16\x66\xa5\x7e\x06\x51\xa5\x66\xe6\x77\x76\x1a\x51\x60\x49\x4f\x57\xff\x4f\x07\x51\xd0\x75\x4f\xb1\x75\x3e\x51\x50\x93\x2c\x57\x82\x14\x07\x48\x7d\x05\x4c\x6f\x75\x47\x48\x50\x40\x56\x50\x0c\x48\x50\x82\x5a\x00\x4d\xf4\x55\xe5\x51\x50\xb4\xe5\x55\x9b\x09\x06\x51\x82\x65\x2e\x82\x65\x7c\x56\x60\x7f\x51\x50\x82\xc9\x56\x9b\xf1\x06\x51\xb3\x75\x18\xf5\x75\x18\x51\x60\x2b\x18\x67\x46\xf0\x06\x51\x61\x66\xc8\x61\x66\x7d\x51\x60\x61\xe5\x55\xf4\xe5\x05\x5a"; } function font_c() internal pure returns(bytes memory) { - return "\x4d\x60\x33\x0a\x09\x51\xea\x95\x0a\xb2\x85\xed\x51\x50\x79\xcf\x58\x59\x90\x08\x51\x38\x85\x52\x38\x75\xf1\x51\x50\x38\x8b\x57\x5a\x4c\x07\x51\x7c\x75\x0c\xb6\x65\xef\x51\x50\xf0\xd1\x66\x39\xd1\x06\x51\x63\x66\xd1\x8a\x66\xda\x51\x60\xb1\xe2\x66\xca\xef\x06\x4c\xae\x76\x39\x51\x60\x96\x30\x67\x75\x28\x07\x51\x54\x76\x20\x37\x76\x20\x51\x50\x96\x20\x57\x96\xf0\x07\x51\x96\x85\x53\xbd\x85\x88\x51\x50\xe4\xbc\x68\x32\xbc\x08\x51\x5f\x86\xbc\x82\x86\xb3\x51\x60\xa4\xaa\x68\xc1\x9d\x08\x56\xed\x08\x51\xa5\x86\xfb\x84\x96\x03\x51\x60\x62\x0a\x69\x33\x0a\x09\x5a"; + return "\x4d\x50\xe2\x4f\x07\x51\xac\x75\x4f\x82\x75\x39\x51\x50\x59\x23\x57\x41\xf5\x06\x51\x29\x65\xc8\x29\x65\x80\x51\x50\x29\x36\x56\x42\x07\x06\x51\x5b\x55\xd9\x85\x55\xc3\x51\x50\xb0\xad\x55\xe6\xad\x05\x51\x05\x56\xad\x21\x56\xb3\x51\x60\x3e\xba\x65\x50\xc3\x05\x4c\x3c\x56\xfa\x51\x60\x2a\xf3\x65\x12\xed\x05\x51\xfa\x55\xe7\xe5\x55\xe7\x51\x50\x6e\xe7\x55\x6e\x7f\x06\x51\x6e\x65\xc8\x8b\x65\xef\x51\x50\xa8\x16\x57\xe1\x16\x07\x51\x02\x76\x16\x1b\x76\x0f\x51\x60\x34\x08\x67\x49\xfe\x06\x56\x39\x07\x51\x35\x76\x44\x1d\x76\x49\x51\x60\x04\x4f\x57\xe2\x4f\x07\x5a"; } function font_d() internal pure returns(bytes memory) { - return "\x4d\x60\x1a\x0a\x09\x51\xb3\x95\x0a\x76\x85\xc3\x51\x50\x38\x7c\x58\x38\xef\x07\x51\x38\x75\x61\x76\x75\x19\x51\x50\xb4\xd1\x66\x1b\xd1\x06\x51\x5a\x66\xd1\x83\x66\xe8\x51\x60\xab\x00\x67\xc5\x22\x07\x48\xcb\x06\x51\xca\x76\x14\xc7\x66\xfa\x51\x60\xc5\xe0\x66\xc5\xd1\x06\x56\xf6\x05\x48\x1f\x07\x56\x00\x09\x48\xd6\x06\x4c\xc9\x86\xb6\x48\x60\xc5\x51\x60\xac\xd9\x68\x83\xf2\x08\x51\x5a\x96\x0a\x1a\x96\x0a\x5a\x00\x4d\x28\x86\xbf\x51\x60\x7f\xbf\x68\xa2\x90\x08\x51\xc6\x86\x60\xc6\x86\x00\x56\x70\xf0\x51\x60\xc6\x89\x67\xa4\x52\x07\x51\x82\x76\x1c\x27\x76\x1c\x51\x50\xde\x1c\x57\xba\x56\x07\x51\x96\x75\x8f\x96\x75\xf1\x51\x50\x96\x53\x58\xba\x89\x08\x51\xde\x85\xbf\x28\x86\xbf\x5a\x00"; + return "\x4d\x50\xcf\x4f\x07\x51\x84\x75\x4f\x56\x75\x1b\x51\x50\x29\xe6\x56\x29\x7f\x06\x51\x29\x65\x17\x57\x55\xe2\x51\x50\x84\xad\x55\xd0\xad\x05\x51\xfe\x55\xad\x1c\x56\xbe\x51\x60\x3a\xd0\x65\x4c\xe8\x05\x48\x51\x06\x51\x50\x56\xdf\x4e\x56\xcb\x51\x60\x4c\xb8\x65\x4c\xad\x05\x56\x0c\x05\x48\x8e\x06\x56\x47\x07\x48\x59\x06\x4c\x4f\x76\x11\x48\x60\x4c\x51\x60\x3a\x2b\x67\x1c\x3d\x07\x51\xfe\x75\x4f\xcf\x75\x4f\x5a\x00\x4d\xd9\x75\x18\x51\x60\x19\x18\x67\x33\xf5\x06\x51\x4d\x66\xd2\x4d\x66\x8b\x56\x60\x7f\x51\x60\x4d\x34\x66\x34\x0c\x06\x51\x1b\x56\xe4\xd9\x55\xe4\x51\x50\xa3\xe4\x55\x88\x0e\x06\x51\x6e\x65\x39\x6e\x65\x80\x51\x50\x6e\xc8\x56\x88\xf0\x06\x51\xa3\x75\x18\xd9\x75\x18\x5a\x00"; } function font_e() internal pure returns(bytes memory) { - return "\x4d\x60\x2b\xd1\x06\x51\x72\x66\xd1\xa4\x66\xf0\x51\x60\xd7\x0e\x67\xf2\x46\x07\x51\x0d\x77\x7e\x0d\x77\xc9\x56\x70\xff\x48\x50\x96\x51\x50\x98\x5c\x58\xc5\x8d\x08\x51\xf3\x85\xbd\x45\x86\xbd\x51\x60\x79\xbd\x68\xa1\xb4\x08\x51\xca\x86\xaa\xf5\x86\x98\x56\x80\xe6\x51\x60\xcb\xf9\x68\xa2\x02\x09\x51\x79\x96\x0a\x41\x96\x0a\x51\x50\xf3\x0a\x59\xb7\xea\x08\x51\x7b\x85\xcb\x5a\x85\x8c\x51\x50\x38\x4d\x58\x38\xf2\x07\x51\x38\x75\x98\x57\x75\x57\x51\x50\x75\x17\x57\xac\xf4\x06\x51\xe2\x65\xd1\x2b\x66\xd1\x5a\x00\x4d\x2a\x76\x1b\x51\x50\xe9\x1b\x57\xc4\x44\x07\x51\x9f\x75\x6e\x98\x75\xb7\x48\x60\xaf\x51\x60\xae\x72\x67\x8e\x46\x07\x51\x6f\x76\x1b\x2a\x76\x1b\x5a\x00"; + return "\x4d\x50\xdc\xad\x05\x51\x0f\x56\xad\x35\x56\xc3\x51\x60\x5a\xda\x65\x6e\x03\x06\x51\x82\x66\x2c\x82\x66\x63\x56\x60\x8b\x48\x50\x6e\x51\x50\x6f\xcf\x56\x91\xf3\x06\x51\xb2\x75\x17\xee\x75\x17\x51\x60\x15\x17\x67\x32\x0f\x07\x51\x50\x76\x08\x70\x66\xfb\x56\x70\x35\x51\x60\x51\x42\x67\x33\x49\x07\x51\x15\x76\x4f\xeb\x75\x4f\x51\x50\xb2\x4f\x57\x86\x38\x07\x51\x5a\x75\x20\x42\x65\xf2\x51\x50\x29\xc4\x56\x29\x81\x06\x51\x29\x65\x3f\x40\x65\x0f\x51\x50\x56\xe0\x55\x7e\xc6\x05\x51\xa6\x55\xad\xdc\x55\xad\x5a\x00\x4d\xdb\x55\xe3\x51\x50\xab\xe3\x55\x90\x02\x06\x51\x75\x65\x20\x6f\x65\x56\x48\x60\x3d\x51\x60\x3c\x23\x66\x24\x03\x06\x51\x0d\x56\xe3\xdb\x55\xe3\x5a\x00"; } function font_f() internal pure returns(bytes memory) { - return "\x4d\x60\x54\x21\x07\x48\xca\x05\x56\x00\x09\x48\x70\x05\x56\x21\x07\x48\x0f\x05\x56\xf7\x06\x4c\x70\x65\xd8\x56\x60\xb8\x51\x50\x70\x4e\x56\x9f\x1f\x06\x51\xce\x55\xf1\x22\x56\xf1\x51\x60\x43\xf1\x65\x5e\xf6\x05\x51\x79\x56\xfc\x8c\x66\x03\x4c\x60\x75\x4a\x06\x51\x64\x66\x45\x4f\x66\x3f\x51\x60\x39\x3a\x66\x23\x3a\x06\x51\xf6\x65\x3a\xe0\x65\x59\x51\x50\xca\x77\x56\xca\xb7\x06\x56\xdb\x06\x48\x54\x06\x5a"; + return "\x4d\x50\xfa\xe8\x05\x48\x94\x05\x56\x47\x07\x48\x52\x05\x56\xe8\x05\x48\x0b\x05\x56\xc9\x05\x4c\x52\x55\xb2\x56\x50\x9b\x51\x50\x52\x4d\x55\x75\x2a\x05\x51\x97\x55\x08\xd5\x55\x08\x51\x50\xed\x08\x65\x01\x0c\x05\x51\x15\x56\x11\x23\x56\x16\x4c\x60\x12\x4a\x05\x51\x06\x56\x46\xf6\x55\x42\x51\x50\xe6\x3e\x55\xd6\x3e\x05\x51\xb4\x55\x3e\xa4\x55\x55\x51\x50\x94\x6b\x55\x94\x9a\x05\x56\xb4\x05\x48\xfa\x05\x5a"; } function font_g() internal pure returns(bytes memory) { - return "\x4d\x60\x1a\xd1\x06\x51\x50\x66\xd1\x7b\x66\xe5\x51\x60\xa7\xfa\x66\xc6\x24\x07\x48\xcb\x06\x4c\xd7\x66\xdb\x48\x70\x1f\x56\x90\x09\x51\x70\x1f\x7f\x69\xe3\xba\x09\x51\xa7\x96\xf6\x29\x96\xf6\x51\x50\xb0\xf6\x59\x63\xd3\x09\x56\x80\x09\x51\xb4\x95\xab\x2e\x96\xab\x51\x60\x75\xab\x69\x9d\x82\x09\x51\xc6\x96\x58\xc6\x96\x10\x56\x80\xfb\x51\x60\xc6\xef\x68\xc7\xd8\x08\x51\xc8\x86\xc1\xc9\x86\xb7\x48\x60\xc5\x51\x60\x8d\x0a\x69\x1b\x0a\x09\x51\xb0\x95\x0a\x74\x85\xbf\x51\x50\x38\x75\x58\x38\xef\x07\x51\x38\x75\x6c\x74\x75\x1e\x51\x50\xb0\xd1\x66\x1a\xd1\x06\x5a\x4d\x60\x26\x1d\x07\x51\xe1\x75\x1d\xbb\x75\x53\x51\x50\x96\x8a\x57\x96\xf0\x07\x51\x96\x85\x55\xbb\x85\x8b\x51\x50\xe0\xc1\x68\x28\xc1\x08\x51\x7b\x86\xc1\xa1\x86\x94\x51\x60\xc7\x67\x68\xc7\x04\x08\x56\xef\x07\x51\xc7\x76\x7e\xa0\x76\x4d\x51\x60\x79\x1d\x67\x26\x1d\x07\x5a"; + return "\x4d\x50\xcf\xad\x05\x51\xf7\x55\xad\x17\x56\xbc\x51\x60\x37\xcb\x65\x4d\xea\x05\x48\x51\x06\x4c\x5a\x56\xb4\x48\x60\x8e\x56\x70\x4e\x51\x60\x8e\xa5\x67\x62\xd0\x07\x51\x37\x76\xfc\xda\x75\xfc\x51\x50\x81\xfc\x57\x49\xe2\x07\x56\xa5\x07\x51\x84\x75\xc5\xde\x75\xc5\x51\x60\x12\xc5\x67\x2f\xa7\x07\x51\x4d\x76\x88\x4d\x76\x53\x56\x70\x44\x51\x60\x4d\x3b\x67\x4e\x2a\x07\x51\x4f\x76\x19\x4f\x76\x12\x48\x60\x4c\x51\x60\x24\x4f\x57\xd0\x4f\x07\x51\x81\x75\x4f\x55\x75\x18\x51\x50\x29\xe1\x56\x29\x7f\x06\x51\x29\x65\x1e\x55\x55\xe6\x51\x50\x81\xad\x55\xcf\xad\x05\x5a\x4d\x50\xd8\xe5\x05\x51\xa5\x55\xe5\x8a\x65\x0d\x51\x50\x6e\x35\x56\x6e\x7f\x06\x51\x6e\x65\xca\x89\x65\xf1\x51\x50\xa5\x19\x57\xd9\x19\x07\x51\x16\x76\x19\x32\x66\xf8\x51\x60\x4e\xd7\x66\x4e\x8e\x06\x56\x7f\x06\x51\x4e\x66\x2c\x31\x66\x08\x51\x60\x15\xe5\x55\xd8\xe5\x05\x5a"; } function font_h() internal pure returns(bytes memory) { - return "\x4d\x50\xb1\xda\x06\x51\xb1\x75\x03\xac\x75\x27\x48\x50\xb2\x51\x50\xcd\xfd\x56\xfa\xe7\x06\x51\x28\x66\xd2\x5d\x66\xd2\x51\x60\xc2\xd2\x66\xf4\x02\x07\x51\x26\x77\x31\x26\x77\x9b\x56\x90\x00\x48\x60\xcd\x56\x70\xa1\x51\x60\xcd\x1d\x67\x52\x1d\x07\x51\xf6\x75\x1d\xd3\x75\x50\x51\x50\xb1\x84\x57\xb1\xe4\x07\x56\x00\x09\x48\x57\x05\x56\xf6\x05\x48\xb1\x05\x5a"; + return "\x4d\x50\x82\xb4\x05\x51\x82\x55\xd2\x7e\x55\xec\x48\x50\x83\x51\x50\x96\xcd\x55\xb8\xbd\x05\x51\xd9\x55\xae\x00\x56\xae\x51\x60\x4a\xae\x65\x6f\xd1\x05\x51\x94\x56\xf4\x94\x66\x41\x56\x70\x47\x48\x60\x52\x56\x60\x46\x51\x60\x52\xe5\x55\xf8\xe5\x05\x51\xb4\x55\xe5\x9b\x65\x0b\x51\x50\x82\x30\x56\x82\x77\x06\x56\x47\x07\x48\x40\x05\x56\x0c\x05\x48\x82\x05\x5a"; } function font_i() internal pure returns(bytes memory) { - return "\x4d\x50\x85\x0d\x06\x51\x9a\x65\x0d\xa9\x65\x1b\x51\x50\xb9\x29\x56\xb9\x47\x06\x51\xb9\x65\x63\xa9\x65\x72\x51\x50\x9a\x80\x56\x85\x80\x06\x51\x6f\x65\x80\x5f\x65\x72\x51\x50\x50\x63\x56\x50\x47\x06\x51\x50\x65\x29\x5f\x65\x1b\x51\x50\x6f\x0d\x56\x85\x0d\x06\x5a\x4d\x50\xb1\xdb\x06\x56\x00\x09\x48\x57\x05\x56\xdb\x06\x5a"; + return "\x4d\x50\x62\x1d\x05\x51\x71\x55\x1d\x7c\x55\x27\x51\x50\x88\x32\x55\x88\x47\x05\x51\x88\x55\x5c\x7c\x55\x67\x51\x50\x71\x72\x55\x62\x72\x05\x51\x51\x55\x72\x46\x55\x67\x51\x50\x3b\x5c\x55\x3b\x47\x05\x51\x3b\x55\x32\x46\x55\x27\x51\x50\x51\x1d\x55\x62\x1d\x05\x5a\x4d\x50\x82\xb4\x05\x56\x47\x07\x48\x40\x05\x56\xb4\x05\x5a"; } function font_j() internal pure returns(bytes memory) { - return "\x4d\x50\x50\x47\x06\x51\x50\x65\x29\x5f\x65\x1b\x51\x50\x6f\x0d\x56\x85\x0d\x06\x51\x9a\x65\x0d\xa9\x65\x1b\x51\x50\xb9\x29\x56\xb9\x47\x06\x51\xb9\x65\x63\xa9\x65\x72\x51\x50\x9a\x80\x56\x85\x80\x06\x51\x6f\x65\x80\x5f\x65\x72\x51\x50\x50\x63\x56\x50\x47\x06\x5a\x4d\x50\x17\xf6\x09\x51\xfd\x94\xf6\xe9\x94\xf2\x51\x40\xd6\xef\x49\xc8\xe9\x09\x56\xa1\x09\x51\xd7\x94\xa5\xe7\x94\xa8\x51\x40\xf8\xab\x59\x0b\xab\x09\x51\x2c\x95\xab\x42\x95\x99\x51\x50\x57\x87\x59\x57\x55\x09\x56\xdb\x06\x48\xb1\x05\x56\x52\x09\x51\xb1\x95\x9f\x8c\x95\xca\x51\x50\x67\xf6\x59\x17\xf6\x09\x5a"; + return "\x4d\x50\x3b\x47\x05\x51\x3b\x55\x32\x46\x55\x27\x51\x50\x51\x1d\x55\x62\x1d\x05\x51\x71\x55\x1d\x7c\x55\x27\x51\x50\x88\x32\x55\x88\x47\x05\x51\x88\x55\x5c\x7c\x55\x67\x51\x50\x71\x72\x55\x62\x72\x05\x51\x51\x55\x72\x46\x55\x67\x51\x50\x3b\x5c\x55\x3b\x47\x05\x5a\x4d\x50\x11\xfc\x07\x51\xfe\x74\xfc\xef\x74\xf9\x51\x40\xe1\xf7\x47\xd7\xf3\x07\x56\xbd\x07\x51\xe2\x74\xc0\xee\x74\xc3\x51\x40\xfa\xc5\x57\x08\xc5\x07\x51\x20\x75\xc5\x30\x75\xb8\x51\x50\x40\xab\x57\x40\x86\x07\x56\xb4\x05\x48\x82\x05\x56\x84\x07\x51\x82\x75\xbc\x67\x75\xdc\x51\x50\x4c\xfc\x57\x11\xfc\x07\x5a"; } function font_k() internal pure returns(bytes memory) { - return "\x4d\x50\xb0\x8c\x07\x51\xb0\x75\x9d\xaf\x75\xb7\x51\x50\xad\xd2\x57\xac\xe5\x07\x48\xb0\x05\x51\xb6\x75\xdd\xc3\x75\xce\x51\x50\xcf\xbe\x57\xdc\xaf\x07\x51\xe8\x75\x9f\xf2\x75\x94\x4c\x60\xa1\xdb\x06\x48\x0a\x07\x4c\x2c\x76\xc6\x4c\x70\x1a\x00\x09\x48\xad\x06\x4c\xef\x85\x00\x4c\x50\xb0\x36\x08\x56\x00\x09\x48\x57\x05\x56\xf6\x05\x48\xb0\x05\x5a"; + return "\x4d\x50\x81\x37\x06\x51\x81\x65\x43\x80\x65\x56\x51\x50\x7f\x6a\x56\x7e\x78\x06\x48\x81\x05\x51\x86\x65\x72\x8f\x65\x67\x51\x50\x98\x5b\x56\xa1\x50\x06\x51\xab\x65\x44\xb1\x65\x3d\x4c\x60\x32\xb4\x05\x48\x7f\x06\x4c\xdc\x65\x61\x4c\x60\x8b\x47\x07\x48\x3b\x06\x4c\xaf\x65\x8b\x4c\x50\x81\xb3\x06\x56\x47\x07\x48\x40\x05\x56\x0c\x05\x48\x81\x05\x5a"; } function font_l() internal pure returns(bytes memory) { - return "\x4d\x50\xb1\x00\x09\x48\x57\x05\x56\xf6\x05\x48\xb1\x05\x5a"; + return "\x4d\x50\x82\x47\x07\x48\x40\x05\x56\x0c\x05\x48\x82\x05\x5a"; } function font_m() internal pure returns(bytes memory) { - return "\x4d\x70\xb1\xd1\x06\x51\x0e\x68\xd1\x3c\x78\x01\x51\x80\x6a\x30\x87\x6a\x9b\x07\x56\x00\x09\x48\x11\x08\x56\x9f\x07\x51\x11\x78\x1d\xa2\x77\x1d\x51\x70\x52\x1d\x77\x30\x4b\x07\x51\x0d\x77\x79\x0d\x77\xd1\x56\x90\x00\x48\x60\xb4\x56\x70\x9f\x51\x60\xb4\x1d\x67\x44\x1d\x07\x51\xf1\x75\x1d\xd1\x75\x50\x51\x50\xb1\x83\x57\xb1\xe3\x07\x56\x00\x09\x48\x57\x05\x56\xdb\x06\x48\xa0\x05\x4c\xad\x75\x26\x48\x50\xb2\x51\x50\xcc\xfb\x56\xf7\xe6\x06\x51\x23\x66\xd1\x54\x66\xd1\x51\x60\xd5\xd1\x66\xfc\x2d\x07\x48\x01\x07\x51\x1d\x67\xfe\x4c\x67\xe7\x51\x70\x7c\xd1\x76\xb1\xd1\x06\x5a"; + return "\x4d\x60\xfa\xad\x05\x51\x3e\x57\xad\x60\x57\xd0\x51\x70\x82\xf3\x75\x82\x41\x06\x56\x47\x07\x48\x41\x07\x56\x44\x06\x51\x41\x57\xe5\xef\x56\xe5\x51\x60\xb4\xe5\x65\x9b\x06\x06\x51\x82\x66\x28\x82\x66\x69\x56\x70\x47\x48\x60\x40\x56\x60\x44\x51\x60\x40\xe5\x55\xee\xe5\x05\x51\xb1\x55\xe5\x99\x65\x0a\x51\x50\x82\x30\x56\x82\x76\x06\x56\x47\x07\x48\x40\x05\x56\xb4\x05\x48\x75\x05\x4c\x7f\x55\xeb\x48\x50\x83\x51\x50\x96\xcc\x55\xb6\xbc\x05\x51\xd6\x55\xad\xfa\x55\xad\x51\x60\x58\xad\x65\x75\xf1\x05\x48\x79\x06\x51\x8d\x56\xce\xb0\x56\xbd\x51\x60\xd3\xad\x65\xfa\xad\x05\x5a"; } function font_n() internal pure returns(bytes memory) { - return "\x4d\x60\x5f\xd1\x06\x51\xc2\x66\xd1\xf4\x76\x01\x51\x70\x26\x30\x77\x26\x9b\x07\x56\x00\x09\x48\xcd\x06\x56\xa1\x07\x51\xcd\x76\x1d\x52\x76\x1d\x51\x50\xf7\x1d\x57\xd4\x50\x07\x51\xb1\x75\x83\xb1\x75\xe3\x56\x90\x00\x48\x50\x57\x56\x60\xdb\x48\x50\xa0\x4c\x50\xad\x26\x07\x48\xb2\x05\x51\xcd\x65\xfb\xfc\x65\xe6\x51\x60\x2b\xd1\x66\x5f\xd1\x06\x5a"; + return "\x4d\x60\x02\xad\x05\x51\x4a\x56\xad\x6f\x56\xd0\x51\x60\x94\xf3\x65\x94\x41\x06\x56\x47\x07\x48\x52\x06\x56\x46\x06\x51\x52\x56\xe5\xf8\x55\xe5\x51\x50\xb5\xe5\x55\x9c\x0a\x06\x51\x82\x65\x30\x82\x65\x76\x56\x70\x47\x48\x50\x40\x56\x50\xb4\x48\x50\x75\x4c\x50\x7f\xeb\x05\x48\x83\x05\x51\x96\x55\xcc\xb9\x55\xbc\x51\x50\xdc\xad\x65\x02\xad\x05\x5a"; } function font_o() internal pure returns(bytes memory) { - return "\x4d\x70\x34\xed\x07\x51\x34\x87\x75\xef\x86\xbf\x51\x60\xaa\x0a\x69\x34\x0a\x09\x51\xec\x95\x0a\xb3\x85\xe9\x51\x50\x7a\xc8\x58\x59\x88\x08\x51\x38\x85\x48\x38\x75\xed\x51\x50\x38\x64\x57\x7d\x1b\x07\x51\xc2\x65\xd1\x37\x66\xd1\x51\x60\x82\xd1\x66\xbb\xf2\x06\x51\xf4\x76\x13\x14\x77\x52\x51\x70\x34\x91\x77\x34\xed\x07\x5a\x4d\x50\x96\xed\x07\x51\x96\x85\x4e\xbc\x85\x87\x51\x50\xe2\xbf\x68\x36\xbf\x08\x51\x89\x86\xbf\xb0\x86\x87\x51\x60\xd7\x4e\x68\xd7\xed\x07\x51\xd7\x76\x8b\xb0\x76\x54\x51\x60\x89\x1d\x67\x35\x1d\x07\x51\xe1\x75\x1d\xbb\x75\x54\x51\x50\x96\x8b\x57\x96\xed\x07\x5a"; + return "\x4d\x60\x9e\x7d\x06\x51\x9e\x66\xe1\x6c\x76\x18\x51\x60\x39\x4f\x57\xe2\x4f\x07\x51\xad\x75\x4f\x83\x75\x37\x51\x50\x59\x1e\x57\x41\xef\x06\x51\x29\x65\xc0\x29\x65\x7d\x51\x50\x29\x19\x56\x5c\xe3\x05\x51\x8e\x55\xad\xe5\x55\xad\x51\x60\x1b\xad\x65\x45\xc5\x05\x51\x6f\x56\xde\x87\x66\x0c\x51\x60\x9e\x3a\x66\x9e\x7d\x06\x5a\x4d\x50\x6e\x7d\x06\x51\x6e\x65\xc5\x8a\x65\xee\x51\x50\xa6\x18\x57\xe4\x18\x07\x51\x21\x76\x18\x3d\x66\xee\x51\x60\x5a\xc5\x66\x5a\x7d\x06\x51\x5a\x66\x36\x3d\x66\x0d\x51\x60\x21\xe5\x55\xe3\xe5\x05\x51\xa5\x55\xe5\x8a\x65\x0d\x51\x50\x6e\x36\x56\x6e\x7d\x06\x5a"; } function font_p() internal pure returns(bytes memory) { - return "\x4d\x60\x5c\xd1\x06\x51\xc2\x66\xd1\xff\x76\x18\x51\x70\x3d\x5e\x77\x3d\xed\x07\x51\x3d\x87\x79\xff\x86\xc2\x51\x60\xc2\x0a\x69\x5b\x0a\x09\x51\x1c\x96\x0a\xf2\x85\xf2\x51\x50\xc9\xda\x58\xb1\xba\x08\x48\xab\x05\x51\xad\x85\xcc\xaf\x85\xe6\x51\x50\xb1\x01\x59\xb1\x14\x09\x56\xf6\x09\x48\x57\x05\x56\xdb\x06\x48\xa1\x05\x4c\xad\x75\x26\x48\x50\xb1\x51\x50\xca\x02\x57\xf2\xe9\x06\x51\x1a\x66\xd1\x5c\x66\xd1\x5a\x00\x4d\x4c\x76\x1d\x51\x50\xf8\x1d\x57\xd6\x4c\x07\x51\xb3\x75\x7b\xb1\x75\xdb\x56\x70\xed\x51\x50\xb1\x52\x58\xd2\x89\x08\x51\xf4\x85\xbf\x4e\x86\xbf\x51\x60\x80\xbf\x68\xa0\xa4\x08\x51\xc1\x86\x88\xd0\x86\x59\x51\x60\xe0\x29\x68\xe0\xec\x07\x51\xe0\x76\x8d\xbc\x76\x55\x51\x60\x98\x1d\x67\x4c\x1d\x07\x5a"; + return "\x4d\x60\x00\xad\x05\x51\x4a\x56\xad\x78\x56\xe1\x51\x60\xa5\x15\x66\xa5\x7d\x06\x51\xa5\x66\xe4\x78\x76\x1a\x51\x60\x4a\x4f\x57\xff\x4f\x07\x51\xd0\x75\x4f\xb2\x75\x3d\x51\x50\x93\x2c\x57\x82\x14\x07\x48\x7e\x05\x51\x7f\x75\x21\x81\x75\x35\x51\x50\x82\x48\x57\x82\x56\x07\x56\xfc\x07\x48\x40\x05\x56\xb4\x05\x48\x76\x05\x4c\x7f\x55\xeb\x48\x50\x82\x51\x50\x94\xd1\x55\xb1\xbf\x05\x51\xcf\x55\xad\x00\x56\xad\x5a\x00\x4d\xf4\x55\xe5\x51\x50\xb6\xe5\x55\x9d\x07\x06\x51\x84\x65\x2a\x82\x65\x70\x56\x60\x7d\x51\x50\x82\xc8\x56\x9b\xf0\x06\x51\xb3\x75\x18\xf5\x75\x18\x51\x60\x1a\x18\x67\x32\x04\x07\x51\x49\x66\xef\x55\x66\xcc\x51\x60\x61\xaa\x66\x61\x7c\x06\x51\x61\x66\x37\x46\x66\x0e\x51\x60\x2b\xe5\x55\xf4\xe5\x05\x5a"; } function font_q() internal pure returns(bytes memory) { - return "\x4d\x60\xc5\x0b\x09\x51\xc5\x86\xf9\xc6\x86\xe0\x51\x60\xc7\xc8\x68\xca\xb6\x08\x48\xc4\x06\x51\xac\x86\xd9\x83\x86\xf2\x51\x60\x59\x0a\x69\x18\x0a\x09\x51\xb4\x95\x0a\x76\x85\xc3\x51\x50\x38\x7c\x58\x38\xef\x07\x51\x38\x75\x61\x77\x75\x19\x51\x50\xb6\xd1\x66\x1b\xd1\x06\x51\x5b\x66\xd1\x84\x66\xe9\x51\x60\xad\x02\x67\xc6\x26\x07\x48\xca\x06\x4c\xd7\x66\xdb\x48\x70\x1f\x56\x90\xf6\x48\x60\xc5\x5a\x00\x4d\x29\x86\xbf\x51\x60\x7e\xbf\x68\xa1\x91\x08\x51\xc5\x86\x62\xc6\x86\x02\x56\x70\xf0\x51\x60\xc6\x87\x67\xa3\x51\x07\x51\x80\x76\x1c\x27\x76\x1c\x51\x50\xdd\x1c\x57\xb9\x56\x07\x51\x96\x75\x8f\x96\x75\xf1\x51\x50\x96\x52\x58\xba\x89\x08\x51\xde\x85\xbf\x29\x86\xbf\x5a\x00"; + return "\x4d\x60\x4c\x50\x07\x51\x4c\x76\x42\x4d\x76\x30\x51\x60\x4e\x1e\x67\x50\x11\x07\x48\x4c\x06\x51\x3a\x76\x2b\x1c\x76\x3d\x51\x50\xfd\x4f\x57\xcd\x4f\x07\x51\x84\x75\x4f\x57\x75\x1b\x51\x50\x29\xe6\x56\x29\x7f\x06\x51\x29\x65\x17\x58\x55\xe2\x51\x50\x86\xad\x55\xd0\xad\x05\x51\xff\x55\xad\x1d\x56\xbf\x51\x60\x3b\xd1\x65\x4d\xeb\x05\x48\x50\x06\x4c\x5a\x56\xb4\x48\x60\x8e\x56\x70\xfc\x48\x60\x4c\x5a\x00\x4d\xda\x75\x18\x51\x60\x18\x18\x67\x32\xf6\x06\x51\x4c\x66\xd4\x4d\x66\x8d\x56\x60\x7f\x51\x60\x4d\x33\x66\x34\x0b\x06\x51\x1a\x56\xe4\xd9\x55\xe4\x51\x50\xa2\xe4\x55\x88\x0e\x06\x51\x6e\x65\x39\x6e\x65\x80\x51\x50\x6e\xc8\x56\x88\xf0\x06\x51\xa3\x75\x18\xda\x75\x18\x5a\x00"; } function font_r() internal pure returns(bytes memory) { - return "\x4d\x60\x57\xd1\x06\x51\x66\x66\xd1\x78\x66\xd2\x51\x60\x8a\xd4\x66\x98\xd7\x06\x4c\x8c\x76\x2a\x51\x60\x7f\x27\x67\x6f\x25\x07\x51\x5f\x76\x23\x51\x76\x23\x51\x60\x27\x23\x67\x02\x3a\x07\x51\xdd\x75\x51\xc7\x75\x7a\x51\x50\xb1\xa4\x57\xb1\xdb\x07\x56\x00\x09\x48\x57\x05\x56\xdb\x06\x48\xa1\x05\x4c\xab\x75\x3f\x48\x50\xaf\x51\x50\xca\x12\x57\xf4\xf2\x06\x51\x1e\x66\xd1\x57\x66\xd1\x5a\x00"; + return "\x4d\x50\xfc\xad\x05\x51\x07\x56\xad\x14\x56\xae\x51\x60\x21\xaf\x65\x2b\xb1\x05\x4c\x23\x56\xee\x51\x60\x19\xec\x65\x0e\xeb\x05\x51\x02\x56\xe9\xf7\x55\xe9\x51\x50\xd9\xe9\x55\xbd\xfa\x05\x51\xa2\x65\x0b\x92\x65\x29\x51\x50\x82\x48\x56\x82\x70\x06\x56\x47\x07\x48\x40\x05\x56\xb4\x05\x48\x76\x05\x4c\x7e\x55\xfe\x48\x50\x81\x51\x50\x94\xdd\x55\xb3\xc5\x05\x51\xd2\x55\xad\xfc\x55\xad\x5a\x00"; } function font_s() internal pure returns(bytes memory) { - return "\x4d\x60\xbc\x68\x08\x51\xbc\x86\xb8\x81\x86\xe1\x51\x60\x46\x0a\x59\xe1\x0a\x09\x51\xa8\x95\x0a\x7e\x95\x01\x51\x50\x55\xf8\x58\x35\xe7\x08\x56\x96\x08\x51\x56\x85\xa6\x85\x85\xb4\x51\x50\xb3\xc2\x58\xe3\xc2\x08\x51\x28\x86\xc2\x47\x86\xac\x51\x60\x65\x96\x68\x65\x71\x08\x51\x65\x86\x5c\x5a\x86\x4c\x51\x60\x4f\x3b\x68\x32\x2b\x08\x51\x14\x86\x1b\xde\x85\x06\x51\x50\xa9\xf2\x57\x83\xdd\x07\x51\x5d\x75\xc9\x49\x75\xac\x51\x50\x34\x8f\x57\x34\x62\x07\x51\x34\x75\x1d\x6d\x65\xf7\x51\x50\xa6\xd1\x66\x02\xd1\x06\x51\x34\x66\xd1\x60\x66\xdb\x51\x60\x8b\xe4\x66\xb1\xf6\x06\x4c\x92\x76\x3d\x51\x60\x70\x2f\x67\x4a\x25\x07\x51\x24\x76\x1b\xfc\x75\x1b\x51\x50\xc5\x1b\x57\xa7\x2d\x07\x51\x8a\x75\x3e\x8a\x75\x5d\x51\x50\x8a\x74\x57\x98\x84\x07\x51\xa5\x75\x93\xc4\x75\xa2\x51\x50\xe3\xb1\x67\x18\xc6\x07\x51\x4c\x76\xd9\x71\x76\xee\x51\x60\x96\x02\x68\xa9\x1f\x08\x51\xbc\x86\x3c\xbc\x86\x68\x5a\x00"; + return "\x4d\x60\x46\xd8\x06\x51\x46\x76\x13\x1b\x76\x31\x51\x50\xef\x4f\x57\xa5\x4f\x07\x51\x7b\x75\x4f\x5d\x75\x48\x51\x50\x3e\x41\x57\x27\x35\x07\x56\xf9\x06\x51\x3f\x75\x05\x61\x75\x0f\x51\x50\x84\x1a\x57\xa7\x1a\x07\x51\xd9\x75\x1a\xf0\x75\x09\x51\x60\x06\xf9\x66\x06\xde\x06\x51\x06\x66\xcf\xfe\x65\xc3\x51\x50\xf6\xb7\x56\xe0\xab\x06\x51\xcb\x65\x9f\xa3\x65\x90\x51\x50\x7c\x81\x56\x60\x72\x06\x51\x44\x65\x63\x35\x65\x4e\x51\x50\x26\x39\x56\x26\x18\x06\x51\x26\x55\xe5\x50\x55\xc9\x51\x50\x7a\xad\x55\xbd\xad\x05\x51\xe2\x55\xad\x02\x56\xb4\x51\x60\x22\xbb\x65\x3e\xc8\x05\x4c\x27\x56\xfd\x51\x60\x0e\xf2\x55\xf2\xeb\x05\x51\xd6\x55\xe3\xb9\x55\xe3\x51\x50\x90\xe3\x55\x7b\xf0\x05\x51\x65\x55\xfd\x65\x65\x14\x51\x50\x65\x24\x56\x6f\x30\x06\x51\x79\x65\x3c\x90\x65\x47\x51\x50\xa7\x52\x56\xcd\x61\x06\x51\xf4\x65\x6f\x0f\x66\x7e\x51\x60\x2a\x8d\x66\x38\xa2\x06\x51\x46\x66\xb8\x46\x66\xd8\x5a\x00"; } function font_t() internal pure returns(bytes memory) { - return "\x4d\x60\x0e\xc1\x08\x51\x23\x86\xc1\x38\x86\xbd\x51\x60\x4e\xb9\x68\x5b\xb5\x08\x56\xfa\x08\x51\x4d\x96\x01\x32\x96\x06\x51\x60\x18\x0a\x59\xff\x0a\x09\x51\xd4\x95\x0a\xb0\x85\xfb\x51\x50\x8b\xed\x58\x75\xc8\x08\x51\x5e\x85\xa3\x5e\x85\x60\x56\x70\x21\x48\x50\x10\x56\x60\xf6\x4c\x50\x5f\xd2\x06\x4c\x83\x65\x5d\x48\x50\xb8\x56\x60\xdb\x48\x60\x57\x56\x70\x21\x48\x50\xb8\x56\x80\x5e\x51\x50\xb8\x90\x58\xd0\xa8\x08\x51\xe8\x85\xc1\x0e\x86\xc1\x5a\x00"; + return "\x4d\x50\xc6\x19\x07\x51\xd6\x75\x19\xe5\x75\x16\x51\x50\xf5\x14\x57\xff\x11\x07\x56\x43\x07\x51\xf4\x75\x48\xe1\x75\x4c\x51\x50\xcd\x4f\x57\xbb\x4f\x07\x51\x9c\x75\x4f\x81\x75\x44\x51\x50\x66\x39\x57\x56\x1e\x07\x51\x45\x75\x03\x45\x65\xd2\x56\x50\xe8\x48\x50\x0c\x56\x50\xc8\x4c\x50\x46\xae\x05\x4c\x60\x55\x58\x48\x50\x87\x56\x50\xb4\x48\x50\xfc\x56\x50\xe8\x48\x50\x87\x56\x60\xd1\x51\x50\x87\xf5\x56\x99\x07\x07\x51\xab\x75\x19\xc6\x75\x19\x5a\x00"; } function font_u() internal pure returns(bytes memory) { - return "\x4d\x70\x22\xdb\x06\x56\x00\x09\x48\xd8\x06\x4c\xcb\x86\xb7\x48\x60\xc7\x51\x60\xac\xe2\x68\x7d\xf6\x08\x51\x4e\x96\x0a\x19\x96\x0a\x51\x50\xb5\x0a\x59\x83\xdb\x08\x51\x51\x85\xab\x51\x85\x43\x56\x60\xdb\x48\x50\xac\x56\x80\x3c\x51\x50\xac\xbf\x68\x26\xbf\x08\x51\x81\x86\xbf\xa4\x86\x8c\x51\x60\xc8\x59\x68\xc8\xf9\x07\x56\xdb\x06\x5a"; + return "\x4d\x60\x91\xb4\x05\x56\x47\x07\x48\x5b\x06\x4c\x51\x76\x12\x48\x60\x4e\x51\x60\x3a\x32\x67\x18\x40\x07\x51\xf5\x75\x4f\xce\x75\x4f\x51\x50\x85\x4f\x57\x60\x2c\x07\x51\x3b\x75\x09\x3b\x65\xbc\x56\x50\xb4\x48\x50\x7e\x56\x60\xb8\x51\x50\x7e\x18\x57\xd8\x18\x07\x51\x1b\x76\x18\x35\x66\xf2\x51\x60\x4f\xcd\x66\x4f\x86\x06\x56\xb4\x05\x5a"; } function font_v() internal pure returns(bytes memory) { - return "\x4d\x50\xd0\x00\x59\x00\xdb\x06\x48\x60\x05\x4c\xd5\x85\x1f\x51\x50\xdd\x35\x58\xe6\x51\x08\x51\xf0\x85\x6d\xf7\x85\x86\x51\x50\xfe\x9f\x68\x01\xb0\x08\x48\x05\x06\x51\x09\x86\x9f\x11\x86\x85\x51\x60\x19\x6c\x68\x22\x50\x08\x51\x2c\x86\x34\x33\x86\x1f\x4c\x60\xa8\xdb\x06\x48\x08\x07\x4c\x37\x96\x00\x5a\x00"; + return "\x4d\x50\x99\x47\x57\x00\xb4\x05\x48\x47\x05\x4c\x9c\x65\xa2\x51\x50\xa2\xb3\x56\xa9\xc7\x06\x51\xb0\x65\xdb\xb5\x65\xee\x51\x50\xba\x00\x57\xbd\x0d\x07\x48\xc0\x05\x51\xc3\x75\x00\xc8\x65\xed\x51\x50\xce\xda\x56\xd5\xc6\x06\x51\xdc\x65\xb2\xe2\x65\xa2\x4c\x60\x37\xb4\x05\x48\x7e\x06\x4c\xe5\x75\x47\x5a\x00"; } function font_w() internal pure returns(bytes memory) { - return "\x4d\x60\xb9\xca\x07\x51\xac\x76\xa0\xa2\x76\x77\x51\x60\x99\x4f\x67\x93\x38\x07\x48\x8f\x06\x51\x8b\x76\x4f\x82\x76\x77\x51\x60\x79\xa0\x67\x6a\xcb\x07\x4c\x08\x86\xff\x48\x50\xa2\x4c\x50\x0b\xda\x06\x48\x68\x05\x4c\xb4\x75\xff\x51\x50\xbf\x2b\x58\xca\x58\x08\x51\xd4\x85\x85\xd8\x85\xa3\x48\x50\xdc\x51\x50\xe0\x91\x58\xe6\x78\x08\x51\xec\x85\x5e\xf3\x85\x42\x51\x50\xfa\x26\x68\x01\x0f\x08\x4c\x62\x66\xda\x48\x60\xc5\x4c\x70\x23\x0f\x08\x51\x2e\x87\x32\x39\x87\x5b\x51\x70\x44\x84\x78\x48\xa2\x08\x48\x4c\x07\x51\x4f\x87\x88\x5a\x87\x5b\x51\x70\x64\x2e\x78\x71\xff\x07\x4c\xbd\x67\xda\x48\x80\x1a\x4c\x70\x81\xff\x08\x48\x18\x07\x5a"; + return "\x4d\x60\x44\x64\x06\x51\x3a\x66\x45\x33\x66\x27\x51\x60\x2c\x09\x66\x28\xf9\x05\x48\x25\x06\x51\x22\x66\x09\x1b\x66\x27\x51\x60\x15\x45\x66\x0a\x64\x06\x4c\xc2\x75\x47\x48\x50\x77\x4c\x50\x08\xb4\x05\x48\x4d\x05\x4c\x84\x65\x8b\x51\x50\x8d\xab\x56\x94\xcc\x06\x51\x9c\x65\xed\x9f\x75\x03\x48\x50\xa2\x51\x50\xa5\xf6\x56\xa9\xe3\x06\x51\xad\x65\xd1\xb2\x65\xbc\x51\x50\xb7\xa7\x56\xbd\x97\x06\x4c\x04\x56\xb4\x48\x60\x4c\x4c\x60\x91\x97\x06\x51\x9a\x66\xb0\xa2\x66\xce\x51\x60\xaa\xec\x66\xad\x02\x07\x48\xb0\x06\x51\xb2\x66\xef\xba\x66\xce\x51\x60\xc2\xad\x66\xcb\x8b\x06\x4c\x03\x57\xb4\x48\x70\x47\x4c\x60\xd7\x47\x07\x48\x89\x06\x5a"; } function font_x() internal pure returns(bytes memory) { - return "\x4d\x50\xd9\xe7\x57\x1c\xdb\x06\x48\x82\x05\x4c\x0f\x76\xaa\x4c\x60\x9c\xdb\x06\x48\x01\x07\x4c\x44\x76\xe7\x4c\x70\x0b\x00\x09\x48\xa5\x06\x4c\x0f\x86\x25\x4c\x50\x78\x00\x09\x48\x12\x05\x5a"; + return "\x4d\x50\x9f\x79\x56\x14\xb4\x05\x48\x5f\x05\x4c\xc7\x65\x4c\x4c\x60\x2e\xb4\x05\x48\x79\x06\x4c\xee\x65\x79\x4c\x60\x80\x47\x07\x48\x35\x06\x4c\xc7\x65\xa7\x4c\x50\x58\x47\x07\x48\x0e\x05\x5a"; } function font_y() internal pure returns(bytes memory) { - return "\x4d\x50\x01\xdb\x06\x48\x61\x05\x4c\xd8\x85\x13\x51\x50\xe7\x3c\x58\xf4\x62\x08\x51\x00\x86\x87\x06\x86\xa9\x48\x60\x0a\x51\x60\x10\x8f\x68\x1e\x66\x08\x51\x2b\x86\x3c\x39\x86\x12\x4c\x60\xa9\xdb\x06\x48\x0a\x07\x4c\x1e\x96\x4c\x51\x60\x01\x9a\x59\xd3\xc8\x09\x51\xa6\x95\xf6\x56\x95\xf6\x51\x50\x3d\xf6\x59\x2b\xf3\x09\x51\x19\x95\xf1\x0b\x95\xee\x56\x90\xa6\x51\x50\x17\xa8\x59\x26\xaa\x09\x51\x36\x95\xac\x48\x95\xac\x51\x50\x77\xac\x59\x94\x91\x09\x51\xb1\x95\x77\xc2\x95\x4b\x4c\x50\xde\x02\x09\x5a"; + return "\x4d\x50\x01\xb4\x05\x48\x47\x05\x4c\x9f\x65\x9a\x51\x50\xaa\xb8\x56\xb3\xd3\x06\x51\xbc\x65\xef\xc0\x75\x08\x48\x50\xc3\x51\x50\xc8\xf5\x56\xd2\xd6\x06\x51\xdc\x65\xb8\xe6\x65\x99\x4c\x60\x38\xb4\x05\x48\x7f\x06\x4c\xd2\x75\x7f\x51\x50\xbd\xb8\x57\x9b\xda\x07\x51\x7a\x75\xfc\x3f\x75\xfc\x51\x50\x2d\xfc\x57\x20\xfa\x07\x51\x12\x75\xf8\x08\x75\xf6\x56\x70\xc1\x51\x50\x11\xc3\x57\x1c\xc4\x07\x51\x28\x75\xc6\x35\x75\xc6\x51\x50\x57\xc6\x57\x6d\xb2\x07\x51\x82\x75\x9f\x8e\x75\x7e\x4c\x50\xa3\x49\x07\x5a"; } function font_z() internal pure returns(bytes memory) { - return "\x4d\x60\xb9\x00\x09\x48\x28\x05\x56\xc5\x08\x4c\x4f\x76\x21\x48\x50\x39\x56\x60\xdb\x48\x60\xb2\x56\x70\x1f\x4c\x50\x8f\xba\x08\x48\xb9\x06\x5a"; + return "\x4d\x60\x44\x47\x07\x48\x1d\x05\x56\x1c\x07\x4c\xf6\x55\xe8\x48\x50\x2a\x56\x50\xb4\x48\x60\x3f\x56\x50\xe6\x4c\x50\x69\x14\x07\x48\x44\x06\x5a"; } function font_left_middle_bracket() internal pure returns(bytes memory) { - return "\x4d\x60\x64\xa2\x09\x51\x06\x96\xa1\xd0\x95\x79\x51\x50\x9a\x51\x59\x9a\xff\x08\x56\x68\x08\x51\x9a\x85\x34\x79\x85\x1e\x51\x50\x59\x08\x58\x1d\x08\x08\x56\xbd\x07\x51\x59\x75\xbc\x79\x75\xa7\x51\x50\x9a\x91\x57\x9a\x5e\x07\x56\xc7\x06\x51\x9a\x65\x75\xd2\x65\x4d\x51\x60\x0a\x25\x66\x64\x25\x06\x56\x6f\x06\x51\x2f\x66\x70\x11\x66\x86\x51\x50\xf3\x9d\x56\xf3\xcf\x06\x56\x62\x07\x51\xf3\x75\xcc\x83\x75\xdf\x56\x70\xe5\x51\x50\xf3\xf9\x57\xf3\x62\x08\x56\xf9\x08\x51\xf3\x95\x2b\x10\x96\x41\x51\x60\x2e\x57\x69\x64\x58\x09\x5a"; + return "\x4d\x60\x06\xbe\x07\x51\xc0\x75\xbd\x99\x75\xa0\x51\x50\x71\x83\x57\x71\x47\x07\x56\xd8\x06\x51\x71\x65\xb2\x59\x65\xa2\x51\x50\x41\x91\x56\x15\x91\x06\x56\x5b\x06\x51\x41\x65\x5a\x59\x65\x4a\x51\x50\x71\x3a\x56\x71\x15\x06\x56\xa5\x05\x51\x71\x55\x69\x9a\x55\x4c\x51\x50\xc3\x2f\x65\x06\x2f\x05\x56\x65\x05\x51\xdf\x55\x65\xc8\x55\x76\x51\x50\xb2\x87\x55\xb2\xab\x05\x56\x18\x06\x51\xb2\x65\x65\x60\x65\x73\x56\x60\x78\x51\x50\xb2\x86\x56\xb2\xd4\x06\x56\x42\x07\x51\xb2\x75\x67\xc8\x75\x77\x51\x50\xde\x87\x67\x06\x88\x07\x5a"; } function font_vertical() internal pure returns(bytes memory) { - return "\x4d\x50\xc7\x83\x06\x48\x1a\x06\x56\x00\x09\x48\xc7\x05\x5a"; + return "\x4d\x50\xb4\x0c\x05\x48\xeb\x05\x56\xfd\x07\x48\xb4\x05\x5a"; } function font_right_middle_bracket() internal pure returns(bytes memory) { - return "\x4d\x50\x21\x58\x09\x51\x56\x95\x56\x74\x95\x40\x51\x50\x92\x2a\x59\x92\xf8\x08\x56\x63\x08\x51\x92\x75\xfa\x02\x76\xe6\x56\x70\xe0\x51\x50\x92\xcd\x57\x92\x63\x07\x56\xce\x06\x51\x92\x65\x9c\x75\x65\x86\x51\x50\x57\x70\x56\x21\x6f\x06\x56\x25\x06\x51\x7f\x65\x26\xb5\x65\x4e\x51\x50\xec\x76\x56\xec\xc8\x06\x56\x5d\x07\x51\xec\x75\x91\x0c\x76\xa7\x51\x60\x2c\xbd\x67\x68\xbd\x07\x56\x08\x08\x51\x2c\x86\x09\x0c\x86\x1f\x51\x50\xec\x34\x58\xec\x67\x08\x56\x00\x09\x51\xec\x95\x51\xb3\x95\x79\x51\x50\x7b\xa2\x59\x21\xa2\x09\x5a"; + return "\x4d\x50\x18\x88\x07\x51\x3f\x75\x87\x55\x75\x76\x51\x50\x6c\x66\x57\x6c\x41\x07\x56\xd4\x06\x51\x6c\x65\x87\xbd\x65\x79\x56\x60\x74\x51\x50\x6c\x66\x56\x6c\x18\x06\x56\xab\x05\x51\x6c\x55\x86\x56\x55\x76\x51\x50\x40\x65\x55\x18\x65\x05\x56\x2f\x05\x51\x5d\x55\x2f\x85\x55\x4d\x51\x50\xad\x6a\x55\xad\xa6\x05\x56\x14\x06\x51\xad\x65\x3a\xc5\x65\x4a\x51\x50\xdc\x5b\x66\x09\x5b\x06\x56\x91\x06\x51\xdc\x65\x92\xc5\x65\xa2\x51\x50\xad\xb2\x56\xad\xd7\x06\x56\x47\x07\x51\xad\x75\x83\x84\x75\xa1\x51\x50\x5a\xbe\x57\x18\xbe\x07\x5a"; } function font_tilde() internal pure returns(bytes memory) { - return "\x4d\x60\x13\xb9\x07\x51\xef\x75\xa9\xd7\x75\xa3\x51\x50\xbe\x9e\x57\xa8\x9e\x07\x51\x8b\x75\x9e\x6c\x75\xaf\x51\x50\x4c\xc1\x57\x33\xda\x07\x56\x8a\x07\x51\x64\x75\x54\xae\x75\x54\x51\x50\xcc\x54\x57\xe9\x5a\x07\x51\x06\x76\x60\x35\x76\x75\x51\x60\x5a\x85\x67\x72\x8b\x07\x51\x8a\x76\x90\xa0\x76\x90\x51\x60\xbd\x90\x67\xdd\x7f\x07\x51\xfd\x76\x6e\x16\x77\x54\x56\x70\xa3\x51\x60\xe3\xda\x67\x9b\xda\x07\x51\x7e\x76\xda\x60\x76\xd3\x51\x60\x42\xcd\x67\x13\xb9\x07\x5a"; + return "\x4d\x50\xca\x58\x06\x51\xaf\x65\x4c\x9e\x65\x47\x51\x50\x8c\x43\x56\x7b\x43\x06\x51\x66\x65\x43\x4f\x65\x50\x51\x50\x38\x5d\x56\x26\x70\x06\x56\x35\x06\x51\x4a\x65\x0d\x80\x65\x0d\x51\x50\x96\x0d\x56\xab\x12\x06\x51\xc0\x65\x16\xe3\x65\x25\x51\x50\xfe\x31\x66\x10\x35\x06\x51\x21\x66\x3a\x31\x66\x3a\x51\x60\x47\x3a\x66\x5e\x2d\x06\x51\x76\x66\x20\x88\x66\x0d\x56\x60\x47\x51\x60\x63\x70\x66\x2d\x70\x06\x51\x18\x66\x70\x02\x66\x6b\x51\x50\xec\x66\x56\xca\x58\x06\x5a"; } function _register(uint _key, function() view returns (bytes memory) _function, uint _width) internal { @@ -310,100 +310,100 @@ contract NotoSans is IFontProvider, Ownable { function _registerAll() internal { widths[0] = 208; // space - _register(0x21, font_ex, 275); - _register(0x22, font_double_quote, 418); - _register(0x23, font_sharp, 662); - _register(0x24, font_dallar, 586); - _register(0x25, font_percent, 851); - _register(0x26, font_and, 750); - _register(0x27, font_apostrophe, 230); - _register(0x28, font_brackets_left, 307); - _register(0x29, font_brackets_right, 307); - _register(0x2A, font_asterisk, 564); - _register(0x2B, font_plus, 586); - _register(0x2C, font_comma, 274); - _register(0x2D, font_hyphen, 330); - _register(0x2E, font_period, 274); - _register(0x2F, font_slash, 381); - _register(0x30, font_0, 586); - _register(0x31, font_1, 586); - _register(0x32, font_2, 586); - _register(0x33, font_3, 586); - _register(0x34, font_4, 586); - _register(0x35, font_5, 586); - _register(0x36, font_6, 586); - _register(0x37, font_7, 586); - _register(0x38, font_8, 586); - _register(0x39, font_9, 586); - _register(0x3A, font_colon, 274); - _register(0x3B, font_semi_colon, 274); - _register(0x3C, font_LT, 317); - _register(0x3D, font_equal, 586); - _register(0x3E, font_question, 444); - _register(0x3F, font_big, 317); - _register(0x40, font_at, 921); - _register(0x41, font_A, 541); - _register(0x42, font_B, 538); - _register(0x43, font_C, 526); - _register(0x44, font_D, 596); - _register(0x45, font_E, 458); - _register(0x46, font_F, 430); - _register(0x47, font_G, 606); - _register(0x48, font_H, 613); - _register(0x49, font_I, 298); - _register(0x4A, font_J, 241); - _register(0x4B, font_K, 518); - _register(0x4C, font_L, 450); - _register(0x4D, font_M, 754); - _register(0x4E, font_N, 638); - _register(0x4F, font_O, 647); - _register(0x50, font_P, 503); - _register(0x51, font_Q, 647); - _register(0x52, font_R, 522); - _register(0x53, font_S, 464); - _register(0x54, font_T, 459); - _register(0x55, font_U, 610); - _register(0x56, font_V, 519); - _register(0x57, font_W, 792); - _register(0x58, font_X, 509); - _register(0x59, font_Y, 484); - _register(0x5A, font_Z, 490); - _register(0x5B, font_left_bracket, 337); - _register(0x5C, font_back_slash, 381); - _register(0x5D, font_right_bracket, 337); - _register(0x5E, font_caret, 428); - _register(0x5F, font_underline, 455); - _register(0x60, font_grave, 288); - _register(0x61, font_a, 574); - _register(0x62, font_b, 630); - _register(0x63, font_c, 492); - _register(0x64, font_d, 630); - _register(0x65, font_e, 578); - _register(0x66, font_f, 352); - _register(0x67, font_g, 630); - _register(0x68, font_h, 633); - _register(0x69, font_i, 264); - _register(0x6A, font_j, 264); - _register(0x6B, font_k, 547); - _register(0x6C, font_l, 264); - _register(0x6D, font_m, 957); - _register(0x6E, font_n, 633); - _register(0x6F, font_o, 620); - _register(0x70, font_p, 630); - _register(0x71, font_q, 630); - _register(0x72, font_r, 423); - _register(0x73, font_s, 490); - _register(0x74, font_t, 370); - _register(0x75, font_u, 633); - _register(0x76, font_v, 520); - _register(0x77, font_w, 805); - _register(0x78, font_x, 542); - _register(0x79, font_y, 522); - _register(0x7A, font_z, 481); - _register(0x7B, font_left_middle_bracket, 389); - _register(0x7C, font_vertical, 388); - _register(0x7D, font_right_middle_bracket, 389); - _register(0x7E, font_tilde, 586); + _register(0x21, font_ex, 202); + _register(0x22, font_double_quote, 307); + _register(0x23, font_sharp, 486); + _register(0x24, font_dallar, 430); + _register(0x25, font_percent, 625); + _register(0x26, font_and, 550); + _register(0x27, font_apostrophe, 169); + _register(0x28, font_brackets_left, 226); + _register(0x29, font_brackets_right, 226); + _register(0x2A, font_asterisk, 414); + _register(0x2B, font_plus, 430); + _register(0x2C, font_comma, 201); + _register(0x2D, font_hyphen, 242); + _register(0x2E, font_period, 201); + _register(0x2F, font_slash, 280); + _register(0x30, font_0, 430); + _register(0x31, font_1, 430); + _register(0x32, font_2, 430); + _register(0x33, font_3, 430); + _register(0x34, font_4, 430); + _register(0x35, font_5, 430); + _register(0x36, font_6, 430); + _register(0x37, font_7, 430); + _register(0x38, font_8, 430); + _register(0x39, font_9, 430); + _register(0x3A, font_colon, 201); + _register(0x3B, font_semi_colon, 201); + _register(0x3C, font_LT, 430); + _register(0x3D, font_equal, 430); + _register(0x3E, font_big, 430); + _register(0x3F, font_question, 326); + _register(0x40, font_at, 676); + _register(0x41, font_A, 480); + _register(0x42, font_B, 489); + _register(0x43, font_C, 475); + _register(0x44, font_D, 549); + _register(0x45, font_E, 418); + _register(0x46, font_F, 390); + _register(0x47, font_G, 547); + _register(0x48, font_H, 557); + _register(0x49, font_I, 255); + _register(0x4A, font_J, 205); + _register(0x4B, font_K, 465); + _register(0x4C, font_L, 394); + _register(0x4D, font_M, 682); + _register(0x4E, font_N, 571); + _register(0x4F, font_O, 587); + _register(0x50, font_P, 455); + _register(0x51, font_Q, 587); + _register(0x52, font_R, 468); + _register(0x53, font_S, 413); + _register(0x54, font_T, 418); + _register(0x55, font_U, 550); + _register(0x56, font_V, 451); + _register(0x57, font_W, 699); + _register(0x58, font_X, 441); + _register(0x59, font_Y, 426); + _register(0x5A, font_Z, 430); + _register(0x5B, font_left_bracket, 247); + _register(0x5C, font_back_slash, 280); + _register(0x5D, font_right_bracket, 247); + _register(0x5E, font_caret, 314); + _register(0x5F, font_underline, 334); + _register(0x60, font_grave, 211); + _register(0x61, font_a, 422); + _register(0x62, font_b, 462); + _register(0x63, font_c, 361); + _register(0x64, font_d, 462); + _register(0x65, font_e, 424); + _register(0x66, font_f, 259); + _register(0x67, font_g, 462); + _register(0x68, font_h, 465); + _register(0x69, font_i, 194); + _register(0x6A, font_j, 194); + _register(0x6B, font_k, 401); + _register(0x6C, font_l, 194); + _register(0x6D, font_m, 703); + _register(0x6E, font_n, 465); + _register(0x6F, font_o, 455); + _register(0x70, font_p, 462); + _register(0x71, font_q, 462); + _register(0x72, font_r, 311); + _register(0x73, font_s, 360); + _register(0x74, font_t, 271); + _register(0x75, font_u, 465); + _register(0x76, font_v, 382); + _register(0x77, font_w, 591); + _register(0x78, font_x, 398); + _register(0x79, font_y, 383); + _register(0x7A, font_z, 353); + _register(0x7B, font_left_middle_bracket, 286); + _register(0x7C, font_vertical, 414); + _register(0x7D, font_right_middle_bracket, 286); + _register(0x7E, font_tilde, 430); } @@ -437,6 +437,6 @@ contract NotoSans is IFontProvider, Ownable { function processPayout() external payable override { address payable payableTo = payable(designer); payableTo.transfer(msg.value); - emit Payout('Font', payableTo, msg.value); + emit Payout('NotoSans', payableTo, msg.value); } } diff --git a/contract/contracts/fonts/fontData.ts b/contract/contracts/fonts/fontData.ts index 9a1d5ef4..822324a2 100644 --- a/contract/contracts/fonts/fontData.ts +++ b/contract/contracts/fonts/fontData.ts @@ -28,8 +28,8 @@ export const fonts = [ [ 'semi_colon', '0x3B' ], [ 'LT', '0x3C' ], [ 'equal', '0x3D' ], - [ 'question', '0x3E' ], - [ 'big', '0x3F' ], + [ 'big', '0x3E' ], + [ 'question', '0x3F' ], [ 'at', '0x40' ], [ 'A', '0x41' ], [ 'B', '0x42' ], diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/a.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/a.svg index 3c454672..d4b4bb1e 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/a.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/a.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/b.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/b.svg index 8cf47a6a..442c8f08 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/b.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/b.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/c.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/c.svg index 77ea38b6..a80c3e96 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/c.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/c.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/d.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/d.svg index 12351d1b..8d658183 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/d.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/d.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/e.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/e.svg index 91191069..d1704aa7 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/e.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/e.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/f.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/f.svg index 16749f40..6d10b855 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/f.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/f.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/g.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/g.svg index adc3ddd8..789558c1 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/g.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/g.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/h.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/h.svg index 7d68b9bd..f0d50264 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/h.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/h.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/i.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/i.svg index 1ec1303b..7d7e1996 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/i.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/i.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/j.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/j.svg index 9a7a211b..9a4f1da5 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/j.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/j.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/k.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/k.svg index 3e3a0ae7..e2ade7b1 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/k.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/k.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/l.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/l.svg index 58c7c57b..690f4566 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/l.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/l.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/m.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/m.svg index edec1dd6..13e35e91 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/m.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/m.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/n.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/n.svg index 119c4a2f..36e9ab7b 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/n.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/n.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/o.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/o.svg index d542327a..977af7cc 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/o.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/o.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/p.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/p.svg index 0a3cc3f1..0f7185ec 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/p.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/p.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/q.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/q.svg index a2eae00e..fd7d8876 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/q.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/q.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/r.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/r.svg index e304f66e..231358ab 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/r.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/r.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/s.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/s.svg index 9ebf6825..daddc72d 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/s.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/s.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/t.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/t.svg index 25ea69e2..140b9ac7 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/t.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/t.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/u.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/u.svg index 3833b720..d6695e2d 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/u.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/u.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/v.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/v.svg index fa344442..c1f4ee6d 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/v.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/v.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/w.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/w.svg index 7da75bd2..f8201614 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/w.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/w.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/x.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/x.svg index c63030a7..5cf9eaf0 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/x.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/x.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/y.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/y.svg index 2f937ea4..e62a9bf3 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/y.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/y.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/z.svg b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/z.svg index fb349242..58a1ec79 100644 --- a/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/z.svg +++ b/contract/contracts/fonts/font_NotoSans/font_lower_case_letters/z.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_numbers/0.svg b/contract/contracts/fonts/font_NotoSans/font_numbers/0.svg index 05bbcd79..a5e08c03 100644 --- a/contract/contracts/fonts/font_NotoSans/font_numbers/0.svg +++ b/contract/contracts/fonts/font_NotoSans/font_numbers/0.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_numbers/1.svg b/contract/contracts/fonts/font_NotoSans/font_numbers/1.svg index 7ed3c812..18640032 100644 --- a/contract/contracts/fonts/font_NotoSans/font_numbers/1.svg +++ b/contract/contracts/fonts/font_NotoSans/font_numbers/1.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_numbers/2.svg b/contract/contracts/fonts/font_NotoSans/font_numbers/2.svg index 99e11435..e7d4358d 100644 --- a/contract/contracts/fonts/font_NotoSans/font_numbers/2.svg +++ b/contract/contracts/fonts/font_NotoSans/font_numbers/2.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_numbers/3.svg b/contract/contracts/fonts/font_NotoSans/font_numbers/3.svg index 157d9327..b03fa4aa 100644 --- a/contract/contracts/fonts/font_NotoSans/font_numbers/3.svg +++ b/contract/contracts/fonts/font_NotoSans/font_numbers/3.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_numbers/4.svg b/contract/contracts/fonts/font_NotoSans/font_numbers/4.svg index c4f03003..b751931b 100644 --- a/contract/contracts/fonts/font_NotoSans/font_numbers/4.svg +++ b/contract/contracts/fonts/font_NotoSans/font_numbers/4.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_numbers/5.svg b/contract/contracts/fonts/font_NotoSans/font_numbers/5.svg index b01663d2..6e77c307 100644 --- a/contract/contracts/fonts/font_NotoSans/font_numbers/5.svg +++ b/contract/contracts/fonts/font_NotoSans/font_numbers/5.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_numbers/6.svg b/contract/contracts/fonts/font_NotoSans/font_numbers/6.svg index a78f759a..b14fceb7 100644 --- a/contract/contracts/fonts/font_NotoSans/font_numbers/6.svg +++ b/contract/contracts/fonts/font_NotoSans/font_numbers/6.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_numbers/7.svg b/contract/contracts/fonts/font_NotoSans/font_numbers/7.svg index 94f2b37e..a2ef9dce 100644 --- a/contract/contracts/fonts/font_NotoSans/font_numbers/7.svg +++ b/contract/contracts/fonts/font_NotoSans/font_numbers/7.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_numbers/8.svg b/contract/contracts/fonts/font_NotoSans/font_numbers/8.svg index 57883762..693ded49 100644 --- a/contract/contracts/fonts/font_NotoSans/font_numbers/8.svg +++ b/contract/contracts/fonts/font_NotoSans/font_numbers/8.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_numbers/9.svg b/contract/contracts/fonts/font_NotoSans/font_numbers/9.svg index eae57092..0e045fda 100644 --- a/contract/contracts/fonts/font_NotoSans/font_numbers/9.svg +++ b/contract/contracts/fonts/font_NotoSans/font_numbers/9.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/LT.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/LT.svg index 06a0c94f..2c87f084 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/LT.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/LT.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/and.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/and.svg index 25c3f6e2..eb8c4ff3 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/and.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/and.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/apostrophe.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/apostrophe.svg index 76a3f9ca..552a466a 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/apostrophe.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/apostrophe.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/asterisk.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/asterisk.svg index 89399d29..4dc8d632 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/asterisk.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/asterisk.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/at.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/at.svg index 4baa1678..a0e32054 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/at.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/at.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/back_slash.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/back_slash.svg index bf919d70..fe36d612 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/back_slash.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/back_slash.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/big.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/big.svg index 81f05750..fb34d517 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/big.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/big.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/brackets_left.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/brackets_left.svg index 3d2e9ab5..56454c12 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/brackets_left.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/brackets_left.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/brackets_right.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/brackets_right.svg index 01359b1a..ea43bbee 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/brackets_right.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/brackets_right.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/caret.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/caret.svg index 9ab83753..344e5f4f 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/caret.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/caret.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/colon.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/colon.svg index 12e2b5ce..fbb0ba7d 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/colon.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/colon.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/comma.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/comma.svg index ec75722f..88043c38 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/comma.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/comma.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/dallar.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/dallar.svg index 731da3f7..33ad83f4 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/dallar.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/dallar.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/double_quote.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/double_quote.svg index 0f782083..e1012fa1 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/double_quote.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/double_quote.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/double_quote_2.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/double_quote_2.svg index 0a0dd307..e8a9395e 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/double_quote_2.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/double_quote_2.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/equal.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/equal.svg index 6e1d901b..2c01a545 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/equal.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/equal.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/ex.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/ex.svg index fde2638f..3ddc4324 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/ex.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/ex.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/grave.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/grave.svg index bf92f350..7b42b73b 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/grave.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/grave.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/hyphen.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/hyphen.svg index cbd757c8..22c518b4 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/hyphen.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/hyphen.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/left_bracket.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/left_bracket.svg index 5b554ab6..21b42838 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/left_bracket.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/left_bracket.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/left_middle_bracket.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/left_middle_bracket.svg index ffb9665b..ac07c8c4 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/left_middle_bracket.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/left_middle_bracket.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/percent.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/percent.svg index 62d57932..782a939d 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/percent.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/percent.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/period.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/period.svg index 83e666bd..0f9e0549 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/period.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/period.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/plus.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/plus.svg index ab019751..47f1174d 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/plus.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/plus.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/question.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/question.svg index 21342f91..7878ed11 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/question.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/question.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/right_bracket.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/right_bracket.svg index d94fb6a8..97823a6b 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/right_bracket.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/right_bracket.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/right_middle_bracket.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/right_middle_bracket.svg index 3dbaf1d0..8a2bdb0c 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/right_middle_bracket.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/right_middle_bracket.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/semi_colon.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/semi_colon.svg index 7fdf155f..481bd512 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/semi_colon.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/semi_colon.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/sharp.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/sharp.svg index 2a18fc39..050df7cc 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/sharp.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/sharp.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/slash.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/slash.svg index 5d52a0ae..3fc72bd4 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/slash.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/slash.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/tilde.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/tilde.svg index 975b17d2..e1b8fc74 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/tilde.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/tilde.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/underline.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/underline.svg index 228e71d1..f9c10824 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/underline.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/underline.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/vertical.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/vertical.svg index 11258f1b..55af9974 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/vertical.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/vertical.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_symbols/yen.svg b/contract/contracts/fonts/font_NotoSans/font_symbols/yen.svg index ae6bb171..ecc6468d 100644 --- a/contract/contracts/fonts/font_NotoSans/font_symbols/yen.svg +++ b/contract/contracts/fonts/font_NotoSans/font_symbols/yen.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/A.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/A.svg index 55cd9733..aed64d24 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/A.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/A.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/B.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/B.svg index 36fcc983..f485792b 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/B.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/B.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/C.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/C.svg index 466651d7..a3a146f3 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/C.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/C.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/D.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/D.svg index 63e810b4..1cac8bdc 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/D.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/D.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/E.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/E.svg index d9cce86d..a21dc68f 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/E.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/E.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/F.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/F.svg index d56ec1c9..f3c98b63 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/F.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/F.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/G.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/G.svg index ac1ea056..dfe81ff2 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/G.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/G.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/H.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/H.svg index 855f1bc4..29d45a53 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/H.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/H.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/I.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/I.svg index 7991150c..676241f2 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/I.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/I.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/J.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/J.svg index e1908966..a55b56e9 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/J.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/J.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/K.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/K.svg index 906124e0..4674d47e 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/K.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/K.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/L.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/L.svg index 24ccdd6b..df3c585d 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/L.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/L.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/M.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/M.svg index c5971e32..2a7bfd21 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/M.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/M.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/N.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/N.svg index 4d71cce5..9193f4ca 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/N.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/N.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/O.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/O.svg index 8b00e5e4..2066686f 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/O.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/O.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/P.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/P.svg index debb5bf1..e330a7c5 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/P.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/P.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/Q.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/Q.svg index 315c2a7a..5cfb22f5 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/Q.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/Q.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/R.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/R.svg index 1e0f85ee..cafe689a 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/R.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/R.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/S.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/S.svg index ad0cfd7a..f8b065bc 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/S.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/S.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/T.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/T.svg index 94314ad4..307f5f74 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/T.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/T.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/U.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/U.svg index d80fed12..e7613fa8 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/U.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/U.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/V.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/V.svg index 4a256c6f..38ab0640 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/V.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/V.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/W.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/W.svg index c416d8a6..0bd8001b 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/W.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/W.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/X.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/X.svg index 46ebe442..e6fe0eb1 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/X.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/X.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/Y.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/Y.svg index d00a97e2..823fde06 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/Y.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/Y.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/Z.svg b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/Z.svg index 3961c759..807e8478 100644 --- a/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/Z.svg +++ b/contract/contracts/fonts/font_NotoSans/font_upper_case_letters/Z.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/src/utils/addresses.ts b/src/utils/addresses.ts index de6d8fa9..d538fc8b 100644 --- a/src/utils/addresses.ts +++ b/src/utils/addresses.ts @@ -49,6 +49,10 @@ import { addresses as londrina_solid_localhost } from "./addresses/londrina_soli import { addresses as londrina_solid_mumbai } from "./addresses/londrina_solid_mumbai"; import { addresses as londrina_solid_goerli } from "./addresses/londrina_solid_goerli"; import { addresses as londrina_solid_mainnet } from "./addresses/londrina_solid_mainnet"; +import { addresses as noto_sans_localhost } from "./addresses/noto_sans_localhost"; +import { addresses as noto_sans_goerli } from "./addresses/noto_sans_goerli"; +import { addresses as noto_sans_mumbai } from "./addresses/noto_sans_mumbai"; +import { addresses as noto_sans_mainnet } from "./addresses/noto_sans_mainnet"; import { addresses as matrix_mumbai } from "./addresses/matrix_mumbai"; import { addresses as matrix_goerli } from "./addresses/matrix_goerli"; import { addresses as matrix_localhost } from "./addresses/matrix_localhost"; @@ -236,6 +240,13 @@ export const addresses: Addresses = { goerli: londrina_solid_goerli.font, mainnet: londrina_solid_mainnet.font, }, + noto_sans: { + localhost: noto_sans_localhost.font, + goerli: noto_sans_goerli.font, + mumbai: noto_sans_mumbai.font, + mainnet: noto_sans_mainnet.font, + }, + matrix: { localhost: matrix_localhost.matrix, mumbai: matrix_mumbai.matrix, diff --git a/src/utils/addresses/noto_sans_goerli.ts b/src/utils/addresses/noto_sans_goerli.ts index e2367ecf..220dc55a 100644 --- a/src/utils/addresses/noto_sans_goerli.ts +++ b/src/utils/addresses/noto_sans_goerli.ts @@ -1,3 +1,3 @@ export const addresses = { - font:"0x0c1eEB89d5CBA72efAADc0c9A20d220Df37c87d0", + font:"0xf4fd7f7e9fC89B2F539BE378214EbB768ECBf91B", } diff --git a/src/utils/addresses/noto_sans_localhost.ts b/src/utils/addresses/noto_sans_localhost.ts new file mode 100644 index 00000000..b411c013 --- /dev/null +++ b/src/utils/addresses/noto_sans_localhost.ts @@ -0,0 +1,3 @@ +export const addresses = { + font:"0x6212cb549De37c25071cF506aB7E115D140D9e42", +} diff --git a/src/utils/addresses/noto_sans_mainnet.ts b/src/utils/addresses/noto_sans_mainnet.ts new file mode 100644 index 00000000..2770ad11 --- /dev/null +++ b/src/utils/addresses/noto_sans_mainnet.ts @@ -0,0 +1,3 @@ +export const addresses = { + font:"0xAeFA677f6C94B5db823fd837857D79B9d5AFba4e", +} diff --git a/src/utils/addresses/noto_sans_mumbai.ts b/src/utils/addresses/noto_sans_mumbai.ts new file mode 100644 index 00000000..9f455a8e --- /dev/null +++ b/src/utils/addresses/noto_sans_mumbai.ts @@ -0,0 +1,3 @@ +export const addresses = { + font:"0xCBbC30D7d8b9DCF720f4FfB98Ef42E5A2633B791", +} From 2117adbdd2efc19fb5b126ed2d6dadee757b00c0 Mon Sep 17 00:00:00 2001 From: isamu Date: Sat, 13 May 2023 12:26:16 +0900 Subject: [PATCH 05/14] add font view --- src/abis/IFontProvider.json | 107 ++++++++++++++++++++++++++++++++++++ src/router/index.ts | 6 ++ src/utils/const.ts | 3 + src/utils/pathUtils.ts | 32 +++++++++++ src/views/Font.vue | 66 ++++++++++++++++++++++ 5 files changed, 214 insertions(+) create mode 100644 src/abis/IFontProvider.json create mode 100644 src/views/Font.vue diff --git a/src/abis/IFontProvider.json b/src/abis/IFontProvider.json new file mode 100644 index 00000000..de200d65 --- /dev/null +++ b/src/abis/IFontProvider.json @@ -0,0 +1,107 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "IFontProvider", + "sourceName": "contracts/packages/graphics/IFontProvider.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "providerKey", + "type": "string" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Payout", + "type": "event" + }, + { + "inputs": [], + "name": "baseline", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "height", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_char", + "type": "string" + } + ], + "name": "pathOf", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "processPayout", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_char", + "type": "string" + } + ], + "name": "widthOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/router/index.ts b/src/router/index.ts index 9b09d891..888f3ebc 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -20,6 +20,8 @@ import SvgTest from "@/views/SVGTest.vue"; import Message from "@/views/Message.vue"; import MessagePNouns from "@/views/MessagePNouns.vue"; +import Font from "@/views/Font.vue"; + const routeChildren: Array = [ { path: "", @@ -81,6 +83,10 @@ const routeChildren: Array = [ path: "sample", component: Sample, }, + { + path: "font", + component: Font, + }, ]; const routes: Array = [ diff --git a/src/utils/const.ts b/src/utils/const.ts index 5dfe4f00..01164aa2 100644 --- a/src/utils/const.ts +++ b/src/utils/const.ts @@ -92,6 +92,9 @@ const ProviderMessageStoreEx = { const IAssetProvider = { wabi: require("@/abis/IAssetProvider.json"), // wrapped abi }; +export const IFontProvider = { + wabi: require("@/abis/IFontProvider.json"), // wrapped abi +}; export const getSvgHelper = (network: string, provider: ProviderOrSigner) => { const svgHelperAddress = addresses["svgHelper"][network]; diff --git a/src/utils/pathUtils.ts b/src/utils/pathUtils.ts index 8df40879..5cf2417c 100644 --- a/src/utils/pathUtils.ts +++ b/src/utils/pathUtils.ts @@ -125,3 +125,35 @@ export const solidityString = (array: Uint8Array) => { }) .join(""); }; + + +export const decodeCompressData = (bin: string) => { + const bytes = []; + for(let i = 0; i < bin.split("").length / 2; i++) { + bytes.push(parseInt(bin[i * 2] + bin[i*2+1], 16)); + } + + const len = bytes.length / 3; + const numArray = []; + for(let i = 0; i < len; i++) { + numArray[i * 2] = bytes[i * 3] + (bytes[i * 3 + 1] & 0x0f) * 256; + if (bytes[i * 3 + 2] !== undefined) { + numArray[i * 2 + 1] = bytes[i * 3 + 2] + (bytes[i * 3 + 1] & 0xf0) * 16; + } + } + const pathData = numArray.map(a => { + // number case; + if (a > 0x100 ) { + const c = a - 0x100 - 1024 + return c; + } else { + // string case + return String.fromCharCode(a); + } + }) + return pathData.join(" ") +}; + +export const path2SVG = (path: string) => { + return `` +} diff --git a/src/views/Font.vue b/src/views/Font.vue new file mode 100644 index 00000000..e0bcfb19 --- /dev/null +++ b/src/views/Font.vue @@ -0,0 +1,66 @@ + + + From 1e2076beb9dd9e9db1cb49cddd1d51df9a82ce5d Mon Sep 17 00:00:00 2001 From: isamu Date: Sat, 13 May 2023 12:35:40 +0900 Subject: [PATCH 06/14] add font components --- src/components/Font.vue | 59 +++++++++++++++++++++++++++++++++++++++++ src/views/Font.vue | 54 ++++++++----------------------------- 2 files changed, 70 insertions(+), 43 deletions(-) create mode 100644 src/components/Font.vue diff --git a/src/components/Font.vue b/src/components/Font.vue new file mode 100644 index 00000000..b3e66f76 --- /dev/null +++ b/src/components/Font.vue @@ -0,0 +1,59 @@ + + + diff --git a/src/views/Font.vue b/src/views/Font.vue index e0bcfb19..72513e54 100644 --- a/src/views/Font.vue +++ b/src/views/Font.vue @@ -1,64 +1,32 @@ From b13afb77597b9f0697c2dbe2385ba58c4db19055 Mon Sep 17 00:00:00 2001 From: isamu Date: Mon, 15 May 2023 06:33:34 +0900 Subject: [PATCH 09/14] format --- src/components/Font.vue | 18 ++++++++--------- src/utils/addresses.ts | 2 +- src/utils/addresses/noto_sans_goerli.ts | 4 ++-- src/utils/addresses/noto_sans_localhost.ts | 4 ++-- src/utils/addresses/noto_sans_mainnet.ts | 4 ++-- src/utils/addresses/noto_sans_mumbai.ts | 4 ++-- src/utils/addresses/svgimage_mumbai.ts | 8 ++++---- src/utils/pathUtils.ts | 23 +++++++++++----------- src/utils/svgtool.ts | 4 +++- src/views/Message.vue | 4 +--- src/views/MessagePNouns.vue | 4 +--- src/views/SVG.vue | 4 +--- 12 files changed, 38 insertions(+), 45 deletions(-) diff --git a/src/components/Font.vue b/src/components/Font.vue index 013eab90..086a5a89 100644 --- a/src/components/Font.vue +++ b/src/components/Font.vue @@ -2,7 +2,7 @@
@@ -16,8 +16,7 @@ import { Addresses } from "@/utils/addresses"; import { getProvider, IFontProvider } from "@/utils/const"; import { ethers } from "ethers"; -import { decodeCompressData, path2SVG } from "@/utils/pathUtils"; - +import { decodeCompressData, path2SVG } from "@/utils/pathUtils"; export default defineComponent({ props: { @@ -42,24 +41,23 @@ export default defineComponent({ ); // 48 ~ 126 - const strings = [ ]; - for(let i = 48; i < 127; i++) { - strings.push(String.fromCharCode(i)) + const strings = []; + for (let i = 48; i < 127; i++) { + strings.push(String.fromCharCode(i)); } - const ret = ref<{[key: string]: string}>({}); + const ret = ref<{ [key: string]: string }>({}); strings.map(async (char) => { const rawPathData = await fontProvider.functions.pathOf(char); const path = decodeCompressData(rawPathData[0].slice(2)); const pathSVG = path2SVG(path); - const encoded = Buffer.from(pathSVG).toString('base64'); + const encoded = Buffer.from(pathSVG).toString("base64"); ret.value[char] = `data:image/svg+xml;base64,${encoded}`; }); - + return { ret, strings, }; - }, }); diff --git a/src/utils/addresses.ts b/src/utils/addresses.ts index d538fc8b..9e8dd243 100644 --- a/src/utils/addresses.ts +++ b/src/utils/addresses.ts @@ -84,7 +84,7 @@ export const addresses: Addresses = { goerli: message_pnouns_goerli.messagePnounsToken, }, messageSplatter: { - goerli: message_splatter_goerli.messageSplatterToken + goerli: message_splatter_goerli.messageSplatterToken, }, svgHelper: { goerli: splatter_goerli.svgHelperAddress, diff --git a/src/utils/addresses/noto_sans_goerli.ts b/src/utils/addresses/noto_sans_goerli.ts index 220dc55a..ec5a00e8 100644 --- a/src/utils/addresses/noto_sans_goerli.ts +++ b/src/utils/addresses/noto_sans_goerli.ts @@ -1,3 +1,3 @@ export const addresses = { - font:"0xf4fd7f7e9fC89B2F539BE378214EbB768ECBf91B", -} + font: "0xf4fd7f7e9fC89B2F539BE378214EbB768ECBf91B", +}; diff --git a/src/utils/addresses/noto_sans_localhost.ts b/src/utils/addresses/noto_sans_localhost.ts index b411c013..6f3ea03b 100644 --- a/src/utils/addresses/noto_sans_localhost.ts +++ b/src/utils/addresses/noto_sans_localhost.ts @@ -1,3 +1,3 @@ export const addresses = { - font:"0x6212cb549De37c25071cF506aB7E115D140D9e42", -} + font: "0x6212cb549De37c25071cF506aB7E115D140D9e42", +}; diff --git a/src/utils/addresses/noto_sans_mainnet.ts b/src/utils/addresses/noto_sans_mainnet.ts index 2770ad11..5cfb29a6 100644 --- a/src/utils/addresses/noto_sans_mainnet.ts +++ b/src/utils/addresses/noto_sans_mainnet.ts @@ -1,3 +1,3 @@ export const addresses = { - font:"0xAeFA677f6C94B5db823fd837857D79B9d5AFba4e", -} + font: "0xAeFA677f6C94B5db823fd837857D79B9d5AFba4e", +}; diff --git a/src/utils/addresses/noto_sans_mumbai.ts b/src/utils/addresses/noto_sans_mumbai.ts index 9f455a8e..6590bf99 100644 --- a/src/utils/addresses/noto_sans_mumbai.ts +++ b/src/utils/addresses/noto_sans_mumbai.ts @@ -1,3 +1,3 @@ export const addresses = { - font:"0xCBbC30D7d8b9DCF720f4FfB98Ef42E5A2633B791", -} + font: "0xCBbC30D7d8b9DCF720f4FfB98Ef42E5A2633B791", +}; diff --git a/src/utils/addresses/svgimage_mumbai.ts b/src/utils/addresses/svgimage_mumbai.ts index 0c58ba1c..458b1550 100644 --- a/src/utils/addresses/svgimage_mumbai.ts +++ b/src/utils/addresses/svgimage_mumbai.ts @@ -1,5 +1,5 @@ export const addresses = { - store:"0x278b4103044cb8E7c999D2abe4192435f5B4D2Be", - provider:"0x76EE1a7940E2297C72973f6AE50745ff24e31086", - token:"0x67b8571A13410a2687b8ceA1C416b88d75165Fc6", -} + store: "0x278b4103044cb8E7c999D2abe4192435f5B4D2Be", + provider: "0x76EE1a7940E2297C72973f6AE50745ff24e31086", + token: "0x67b8571A13410a2687b8ceA1C416b88d75165Fc6", +}; diff --git a/src/utils/pathUtils.ts b/src/utils/pathUtils.ts index 5cf2417c..8871cc5f 100644 --- a/src/utils/pathUtils.ts +++ b/src/utils/pathUtils.ts @@ -126,34 +126,33 @@ export const solidityString = (array: Uint8Array) => { .join(""); }; - export const decodeCompressData = (bin: string) => { const bytes = []; - for(let i = 0; i < bin.split("").length / 2; i++) { - bytes.push(parseInt(bin[i * 2] + bin[i*2+1], 16)); + for (let i = 0; i < bin.split("").length / 2; i++) { + bytes.push(parseInt(bin[i * 2] + bin[i * 2 + 1], 16)); } - + const len = bytes.length / 3; const numArray = []; - for(let i = 0; i < len; i++) { + for (let i = 0; i < len; i++) { numArray[i * 2] = bytes[i * 3] + (bytes[i * 3 + 1] & 0x0f) * 256; if (bytes[i * 3 + 2] !== undefined) { numArray[i * 2 + 1] = bytes[i * 3 + 2] + (bytes[i * 3 + 1] & 0xf0) * 16; } } - const pathData = numArray.map(a => { + const pathData = numArray.map((a) => { // number case; - if (a > 0x100 ) { - const c = a - 0x100 - 1024 + if (a > 0x100) { + const c = a - 0x100 - 1024; return c; } else { // string case return String.fromCharCode(a); } - }) - return pathData.join(" ") + }); + return pathData.join(" "); }; export const path2SVG = (path: string) => { - return `` -} + return ``; +}; diff --git a/src/utils/svgtool.ts b/src/utils/svgtool.ts index eac28920..8051fc4e 100644 --- a/src/utils/svgtool.ts +++ b/src/utils/svgtool.ts @@ -332,7 +332,9 @@ const elementToData = ( const fill = element2fill(element) || style["fill"]; const stroke = element2stroke(element) || style["stroke"]; const _strokeWidth = Math.round( - element2strokeWidth(element, max) || style["stroke-width"] || (stroke ? 3 : 0 ) + element2strokeWidth(element, max) || + style["stroke-width"] || + (stroke ? 3 : 0) ); const strokeWidth = _strokeWidth > 0 ? _strokeWidth : stroke ? defaultStrokeWidth : 0; diff --git a/src/views/Message.vue b/src/views/Message.vue index 637b1d53..c0a14725 100644 --- a/src/views/Message.vue +++ b/src/views/Message.vue @@ -35,9 +35,7 @@ -
- Loading... -
+
Loading...
diff --git a/src/views/MessagePNouns.vue b/src/views/MessagePNouns.vue index 157f22ae..78175af3 100644 --- a/src/views/MessagePNouns.vue +++ b/src/views/MessagePNouns.vue @@ -35,9 +35,7 @@
-
- Loading... -
+
Loading...
diff --git a/src/views/SVG.vue b/src/views/SVG.vue index e5078417..b1bc1e8d 100644 --- a/src/views/SVG.vue +++ b/src/views/SVG.vue @@ -77,7 +77,6 @@ properties width, height.
-
{{ token.name }} @@ -177,7 +176,6 @@ export default defineComponent({ // const network = "localhost"; // const tokenAddress = "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0"; - // store contract="0x442622c789E5489A222141d06966608a2980E915" // provider contract="0x24F08949190D291DaBb9d7a828ad048FE6250E0C" // token contract="0x07f21753E1DA964fc7131571DD999471C6492e7E" @@ -185,7 +183,7 @@ export default defineComponent({ // store contract="0x05ce81EC1751E2317ddc2E90948EBc6Ca66781a1" // provider contract="0xc65Ffa203d73538557Cff496bE85BD12B28927ca" // token contract="0x5F0f949949c82f660B38FC7601A45498fa2C9fC9" - + const network = "mumbai"; const tokenAddress = "0x67b8571A13410a2687b8ceA1C416b88d75165Fc6"; From a2911d1fedb2a2e40c0f2f6e712d6f02d08c1e4d Mon Sep 17 00:00:00 2001 From: isamu Date: Mon, 15 May 2023 09:30:17 +0900 Subject: [PATCH 10/14] update @openzeppelin/contracts --- .../packages/ERC721P2P/package-lock.json | 18 +++++++++--------- .../contracts/packages/ERC721P2P/package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/contract/contracts/packages/ERC721P2P/package-lock.json b/contract/contracts/packages/ERC721P2P/package-lock.json index 115a23ee..62fc1346 100644 --- a/contract/contracts/packages/ERC721P2P/package-lock.json +++ b/contract/contracts/packages/ERC721P2P/package-lock.json @@ -1,22 +1,22 @@ { "name": "erc721p2p", - "version": "1.1.1", + "version": "1.2.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "erc721p2p", - "version": "1.1.1", + "version": "1.2.1", "license": "MIT", "devDependencies": { - "@openzeppelin/contracts": "^4.8.0", + "@openzeppelin/contracts": "^4.8.3", "erc721a": "^4.2.3" } }, "node_modules/@openzeppelin/contracts": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.2.tgz", - "integrity": "sha512-kEUOgPQszC0fSYWpbh2kT94ltOJwj1qfT2DWo+zVttmGmf97JZ99LspePNaeeaLhCImaHVeBbjaQFZQn7+Zc5g==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==", "dev": true }, "node_modules/erc721a": { @@ -28,9 +28,9 @@ }, "dependencies": { "@openzeppelin/contracts": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.2.tgz", - "integrity": "sha512-kEUOgPQszC0fSYWpbh2kT94ltOJwj1qfT2DWo+zVttmGmf97JZ99LspePNaeeaLhCImaHVeBbjaQFZQn7+Zc5g==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==", "dev": true }, "erc721a": { diff --git a/contract/contracts/packages/ERC721P2P/package.json b/contract/contracts/packages/ERC721P2P/package.json index e9a3b966..f708b563 100644 --- a/contract/contracts/packages/ERC721P2P/package.json +++ b/contract/contracts/packages/ERC721P2P/package.json @@ -22,7 +22,7 @@ }, "homepage": "https://github.com/Cryptocoders-wtf/generative/tree/main/contract/contracts/packages/ERC721P2P#readme", "devDependencies": { - "@openzeppelin/contracts": "^4.8.0", + "@openzeppelin/contracts": "^4.8.3", "erc721a": "^4.2.3" } } From 555cae2b5b0e7bf263e984117a8755fe2a5d3c67 Mon Sep 17 00:00:00 2001 From: isamu Date: Mon, 15 May 2023 09:31:48 +0900 Subject: [PATCH 11/14] update package --- .../packages/graphics/package-lock.json | 18 +++++++++--------- .../contracts/packages/graphics/package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/contract/contracts/packages/graphics/package-lock.json b/contract/contracts/packages/graphics/package-lock.json index b60d0633..3bf2705f 100644 --- a/contract/contracts/packages/graphics/package-lock.json +++ b/contract/contracts/packages/graphics/package-lock.json @@ -1,23 +1,23 @@ { "name": "fully-on-chain.sol", - "version": "1.0.1", + "version": "1.4.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "fully-on-chain.sol", - "version": "1.0.1", + "version": "1.4.0", "license": "MIT", "dependencies": { - "@openzeppelin/contracts": "^4.7.3", + "@openzeppelin/contracts": "^4.8.3", "bytes-array.sol": "^1.0.2", "trigonometry.sol": "^1.0.1" } }, "node_modules/@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==" }, "node_modules/bytes-array.sol": { "version": "1.0.2", @@ -32,9 +32,9 @@ }, "dependencies": { "@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==" + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==" }, "bytes-array.sol": { "version": "1.0.2", diff --git a/contract/contracts/packages/graphics/package.json b/contract/contracts/packages/graphics/package.json index d73b6887..69d8090f 100644 --- a/contract/contracts/packages/graphics/package.json +++ b/contract/contracts/packages/graphics/package.json @@ -24,7 +24,7 @@ }, "homepage": "https://github.com/Cryptocoders-wtf/generative/tree/main/contract/contracts/packages/graphics#readme", "dependencies": { - "@openzeppelin/contracts": "^4.7.3", + "@openzeppelin/contracts": "^4.8.3", "bytes-array.sol": "^1.0.2", "trigonometry.sol": "^1.0.1" } From 1257b74324bd0386eddc10559e65305c2783f86b Mon Sep 17 00:00:00 2001 From: isamu Date: Mon, 15 May 2023 09:33:51 +0900 Subject: [PATCH 12/14] update package --- contract/package-lock.json | 14 +++++++------- contract/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/contract/package-lock.json b/contract/package-lock.json index 1c0d99f3..18487fa9 100644 --- a/contract/package-lock.json +++ b/contract/package-lock.json @@ -12,7 +12,7 @@ "@nomicfoundation/hardhat-toolbox": "^2.0.0", "@nomiclabs/hardhat-etherscan": "^3.1.1", "@nouns/sdk": "^0.3.2", - "@openzeppelin/contracts": "^4.7.3", + "@openzeppelin/contracts": "^4.8.3", "assetprovider.sol": "^1.2.0", "assetstore.sol": "^1.0.1", "bytes-array.sol": "^1.0.0", @@ -1352,9 +1352,9 @@ } }, "node_modules/@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==", "dev": true }, "node_modules/@scure/base": { @@ -9976,9 +9976,9 @@ } }, "@openzeppelin/contracts": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz", - "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz", + "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==", "dev": true }, "@scure/base": { diff --git a/contract/package.json b/contract/package.json index 1bc7d7ef..3087392b 100644 --- a/contract/package.json +++ b/contract/package.json @@ -7,7 +7,7 @@ "@nomicfoundation/hardhat-toolbox": "^2.0.0", "@nomiclabs/hardhat-etherscan": "^3.1.1", "@nouns/sdk": "^0.3.2", - "@openzeppelin/contracts": "^4.7.3", + "@openzeppelin/contracts": "^4.8.3", "assetprovider.sol": "^1.2.0", "assetstore.sol": "^1.0.1", "bytes-array.sol": "^1.0.0", From db5a493658988ea582b1a94df4632ad213767ee9 Mon Sep 17 00:00:00 2001 From: isamu Date: Mon, 15 May 2023 09:39:25 +0900 Subject: [PATCH 13/14] update packages --- contract/package-lock.json | 774 ++++++++++++++++++++----------------- contract/package.json | 4 +- 2 files changed, 414 insertions(+), 364 deletions(-) diff --git a/contract/package-lock.json b/contract/package-lock.json index 18487fa9..c539eb94 100644 --- a/contract/package-lock.json +++ b/contract/package-lock.json @@ -10,7 +10,7 @@ }, "devDependencies": { "@nomicfoundation/hardhat-toolbox": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.1.1", + "@nomiclabs/hardhat-etherscan": "^3.1.7", "@nouns/sdk": "^0.3.2", "@openzeppelin/contracts": "^4.8.3", "assetprovider.sol": "^1.2.0", @@ -19,13 +19,39 @@ "dotenv": "^16.0.3", "fast-xml-parser": "^4.0.11", "fully-on-chain.sol": "^1.1.0", - "hardhat": "^2.11.2", + "hardhat": "^2.14.0", "prettier-plugin-solidity": "^1.0.0", "randomizer.sol": "^1.0.0", "trigonometry.sol": "^1.0.0", "ts-node": "^10.9.1" } }, + "node_modules/@chainsafe/as-sha256": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", + "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==", + "dev": true + }, + "node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", + "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", + "dev": true, + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "node_modules/@chainsafe/ssz": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", + "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", + "dev": true, + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.4.2", + "case": "^1.6.3" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -873,34 +899,36 @@ } }, "node_modules/@nomicfoundation/ethereumjs-block": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz", - "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", + "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "ethereum-cryptography": "0.1.3" + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "ethereum-cryptography": "0.1.3", + "ethers": "^5.7.1" }, "engines": { "node": ">=14" } }, "node_modules/@nomicfoundation/ethereumjs-blockchain": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz", - "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", + "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-ethash": "^2.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-ethash": "3.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "abstract-level": "^1.0.3", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", @@ -913,24 +941,24 @@ } }, "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz", - "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", + "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-util": "9.0.1", "crc-32": "^1.2.0" } }, "node_modules/@nomicfoundation/ethereumjs-ethash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz", - "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", + "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "abstract-level": "^1.0.3", "bigint-crypto-utils": "^3.0.23", "ethereum-cryptography": "0.1.3" @@ -940,15 +968,15 @@ } }, "node_modules/@nomicfoundation/ethereumjs-evm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz", - "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", + "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", + "@ethersproject/providers": "^5.7.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", "mcl-wasm": "^0.7.1", @@ -959,9 +987,9 @@ } }, "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz", - "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", + "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==", "dev": true, "bin": { "rlp": "bin/rlp" @@ -971,28 +999,28 @@ } }, "node_modules/@nomicfoundation/ethereumjs-statemanager": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz", - "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", + "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1" + "ethers": "^5.7.1", + "js-sdsl": "^4.1.4" } }, "node_modules/@nomicfoundation/ethereumjs-trie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz", - "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", + "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@types/readable-stream": "^2.3.13", "ethereum-cryptography": "0.1.3", "readable-stream": "^3.6.0" }, @@ -1001,14 +1029,16 @@ } }, "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz", - "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", + "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@chainsafe/ssz": "^0.9.2", + "@ethersproject/providers": "^5.7.2", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "ethereum-cryptography": "0.1.3" }, "engines": { @@ -1016,38 +1046,55 @@ } }, "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz", - "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", + "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2", + "@chainsafe/ssz": "^0.10.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", "ethereum-cryptography": "0.1.3" }, "engines": { "node": ">=14" } }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", + "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", + "dev": true, + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/ssz": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", + "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", + "dev": true, + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.5.0" + } + }, "node_modules/@nomicfoundation/ethereumjs-vm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz", - "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", + "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", + "dev": true, + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1", "mcl-wasm": "^0.7.1", "rustbn.js": "~0.2.0" }, @@ -1090,9 +1137,9 @@ } }, "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.0.tgz", - "integrity": "sha512-BoOPbzLQ1GArnBZd4Jz4IU8FY3RY4nUwpXlfymXwxlXNimngkPRJj7ivVNurD7igohEjf90v/Axn2M5WwAdCJQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz", + "integrity": "sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg==", "dev": true, "peerDependencies": { "@ethersproject/abi": "^5.4.7", @@ -1104,7 +1151,7 @@ "@typechain/ethers-v5": "^10.1.0", "@typechain/hardhat": "^6.1.2", "@types/chai": "^4.2.0", - "@types/mocha": "^9.1.0", + "@types/mocha": ">=9.1.0", "@types/node": ">=12.0.0", "chai": "^4.2.0", "ethers": "^5.4.7", @@ -1309,21 +1356,21 @@ } }, "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.1.tgz", - "integrity": "sha512-a6+fJlHTiPjzUYnvwkcduJN0rAKWagQsQNoHJP/9mJ1CZjIkGysGtvVAjNpnrYWocj/Hbi36XmZ0H2aIKlol7A==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", + "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@ethersproject/address": "^5.0.2", - "cbor": "^5.0.2", + "cbor": "^8.1.0", "chalk": "^2.4.2", "debug": "^4.1.1", "fs-extra": "^7.0.1", "lodash": "^4.17.11", "semver": "^6.3.0", "table": "^6.8.0", - "undici": "^5.4.0" + "undici": "^5.14.0" }, "peerDependencies": { "hardhat": "^2.0.4" @@ -1613,12 +1660,6 @@ "node": ">= 10.0.0" } }, - "node_modules/@types/async-eventemitter": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", - "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", - "dev": true - }, "node_modules/@types/bn.js": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", @@ -1725,6 +1766,22 @@ "dev": true, "peer": true }, + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/@types/secp256k1": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", @@ -2055,24 +2112,6 @@ "node": ">=8" } }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "dependencies": { - "async": "^2.4.0" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2171,33 +2210,12 @@ "dev": true }, "node_modules/bigint-crypto-utils": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", - "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz", + "integrity": "sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw==", "dev": true, - "dependencies": { - "bigint-mod-arith": "^3.1.0" - }, "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/bigint-mod-arith": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", - "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", - "dev": true, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/bignumber.js": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", - "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", - "dev": true, - "engines": { - "node": "*" + "node": ">=14.0.0" } }, "node_modules/binary-extensions": { @@ -2389,6 +2407,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/case": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", + "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -2406,16 +2433,15 @@ } }, "node_modules/cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", "dev": true, "dependencies": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" + "nofilter": "^3.1.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.19" } }, "node_modules/chai": { @@ -2541,16 +2567,16 @@ } }, "node_modules/classic-level": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", - "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", + "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", "dev": true, "hasInstallScript": true, "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.0", "module-error": "^1.0.1", - "napi-macros": "~2.0.0", + "napi-macros": "^2.2.2", "node-gyp-build": "^4.3.0" }, "engines": { @@ -4542,23 +4568,23 @@ } }, "node_modules/hardhat": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.12.0.tgz", - "integrity": "sha512-mNJFbVG479HwOzxiaLxobyvED2M1aEAuPPYhEo1+88yicMDSTrU2JIS7vV+V0GSNQKaDoiHCmV6bcKjiljT/dQ==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", + "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@nomicfoundation/ethereumjs-vm": "^6.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-vm": "7.0.1", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "@types/bn.js": "^5.1.0", @@ -4594,15 +4620,15 @@ "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", "tsort": "0.0.1", - "undici": "^5.4.0", + "undici": "^5.14.0", "uuid": "^8.3.2", "ws": "^7.4.6" }, "bin": { - "hardhat": "internal/cli/cli.js" + "hardhat": "internal/cli/bootstrap.js" }, "engines": { - "node": "^14.0.0 || ^16.0.0 || ^18.0.0" + "node": ">=14.0.0" }, "peerDependencies": { "ts-node": "*", @@ -5256,6 +5282,16 @@ "dev": true, "peer": true }, + "node_modules/js-sdsl": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -5936,9 +5972,9 @@ } }, "node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", + "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==", "dev": true }, "node_modules/neo-async": { @@ -5997,12 +6033,12 @@ } }, "node_modules/nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12.19" } }, "node_modules/nopt": { @@ -6601,29 +6637,16 @@ } }, "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "dev": true, - "peer": true, - "dependencies": { - "minimatch": "3.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dev": true, "peer": true, "dependencies": { - "brace-expansion": "^1.1.7" + "minimatch": "^3.0.5" }, "engines": { - "node": "*" + "node": ">=6.0.0" } }, "node_modules/reduce-flatten": { @@ -9139,6 +9162,32 @@ } }, "dependencies": { + "@chainsafe/as-sha256": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", + "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==", + "dev": true + }, + "@chainsafe/persistent-merkle-tree": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", + "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", + "dev": true, + "requires": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "@chainsafe/ssz": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", + "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", + "dev": true, + "requires": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.4.2", + "case": "^1.6.3" + } + }, "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -9658,31 +9707,33 @@ } }, "@nomicfoundation/ethereumjs-block": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz", - "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", + "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "ethereum-cryptography": "0.1.3" + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "ethereum-cryptography": "0.1.3", + "ethers": "^5.7.1" } }, "@nomicfoundation/ethereumjs-blockchain": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz", - "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", + "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-ethash": "^2.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-ethash": "3.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "abstract-level": "^1.0.3", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", @@ -9692,39 +9743,39 @@ } }, "@nomicfoundation/ethereumjs-common": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz", - "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", + "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-util": "9.0.1", "crc-32": "^1.2.0" } }, "@nomicfoundation/ethereumjs-ethash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz", - "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", + "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "abstract-level": "^1.0.3", "bigint-crypto-utils": "^3.0.23", "ethereum-cryptography": "0.1.3" } }, "@nomicfoundation/ethereumjs-evm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz", - "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", + "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", + "@ethersproject/providers": "^5.7.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", "mcl-wasm": "^0.7.1", @@ -9732,80 +9783,101 @@ } }, "@nomicfoundation/ethereumjs-rlp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz", - "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", + "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==", "dev": true }, "@nomicfoundation/ethereumjs-statemanager": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz", - "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", + "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1" + "ethers": "^5.7.1", + "js-sdsl": "^4.1.4" } }, "@nomicfoundation/ethereumjs-trie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz", - "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", + "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@types/readable-stream": "^2.3.13", "ethereum-cryptography": "0.1.3", "readable-stream": "^3.6.0" } }, "@nomicfoundation/ethereumjs-tx": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz", - "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", + "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@chainsafe/ssz": "^0.9.2", + "@ethersproject/providers": "^5.7.2", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "ethereum-cryptography": "0.1.3" } }, "@nomicfoundation/ethereumjs-util": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz", - "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", + "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", "dev": true, "requires": { - "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2", + "@chainsafe/ssz": "^0.10.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", "ethereum-cryptography": "0.1.3" + }, + "dependencies": { + "@chainsafe/persistent-merkle-tree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", + "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", + "dev": true, + "requires": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "@chainsafe/ssz": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", + "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", + "dev": true, + "requires": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.5.0" + } + } } }, "@nomicfoundation/ethereumjs-vm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz", - "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==", - "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", + "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", + "dev": true, + "requires": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", "debug": "^4.3.3", "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1", "mcl-wasm": "^0.7.1", "rustbn.js": "~0.2.0" } @@ -9836,9 +9908,9 @@ } }, "@nomicfoundation/hardhat-toolbox": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.0.tgz", - "integrity": "sha512-BoOPbzLQ1GArnBZd4Jz4IU8FY3RY4nUwpXlfymXwxlXNimngkPRJj7ivVNurD7igohEjf90v/Axn2M5WwAdCJQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz", + "integrity": "sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg==", "dev": true, "requires": {} }, @@ -9939,21 +10011,21 @@ "requires": {} }, "@nomiclabs/hardhat-etherscan": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.1.tgz", - "integrity": "sha512-a6+fJlHTiPjzUYnvwkcduJN0rAKWagQsQNoHJP/9mJ1CZjIkGysGtvVAjNpnrYWocj/Hbi36XmZ0H2aIKlol7A==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", + "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", "dev": true, "requires": { "@ethersproject/abi": "^5.1.2", "@ethersproject/address": "^5.0.2", - "cbor": "^5.0.2", + "cbor": "^8.1.0", "chalk": "^2.4.2", "debug": "^4.1.1", "fs-extra": "^7.0.1", "lodash": "^4.17.11", "semver": "^6.3.0", "table": "^6.8.0", - "undici": "^5.4.0" + "undici": "^5.14.0" } }, "@nouns/contracts": { @@ -10176,12 +10248,6 @@ } } }, - "@types/async-eventemitter": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", - "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", - "dev": true - }, "@types/bn.js": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", @@ -10288,6 +10354,24 @@ "dev": true, "peer": true }, + "@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "dev": true, + "requires": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, "@types/secp256k1": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", @@ -10542,24 +10626,6 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "requires": { - "async": "^2.4.0" - } - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -10640,24 +10706,9 @@ "dev": true }, "bigint-crypto-utils": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", - "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", - "dev": true, - "requires": { - "bigint-mod-arith": "^3.1.0" - } - }, - "bigint-mod-arith": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", - "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", - "dev": true - }, - "bignumber.js": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", - "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz", + "integrity": "sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw==", "dev": true }, "binary-extensions": { @@ -10814,6 +10865,12 @@ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, + "case": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", + "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -10828,13 +10885,12 @@ "dev": true }, "cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", "dev": true, "requires": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" + "nofilter": "^3.1.0" } }, "chai": { @@ -10933,15 +10989,15 @@ } }, "classic-level": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", - "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", + "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", "dev": true, "requires": { "abstract-level": "^1.0.2", "catering": "^2.1.0", "module-error": "^1.0.1", - "napi-macros": "~2.0.0", + "napi-macros": "^2.2.2", "node-gyp-build": "^4.3.0" } }, @@ -12531,23 +12587,23 @@ } }, "hardhat": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.12.0.tgz", - "integrity": "sha512-mNJFbVG479HwOzxiaLxobyvED2M1aEAuPPYhEo1+88yicMDSTrU2JIS7vV+V0GSNQKaDoiHCmV6bcKjiljT/dQ==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", + "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", "dev": true, "requires": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@nomicfoundation/ethereumjs-vm": "^6.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-vm": "7.0.1", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "@types/bn.js": "^5.1.0", @@ -12583,7 +12639,7 @@ "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", "tsort": "0.0.1", - "undici": "^5.4.0", + "undici": "^5.14.0", "uuid": "^8.3.2", "ws": "^7.4.6" }, @@ -13054,6 +13110,12 @@ "dev": true, "peer": true }, + "js-sdsl": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "dev": true + }, "js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -13578,9 +13640,9 @@ "dev": true }, "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", + "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==", "dev": true }, "neo-async": { @@ -13633,9 +13695,9 @@ "dev": true }, "nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", "dev": true }, "nopt": { @@ -14084,25 +14146,13 @@ } }, "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dev": true, "peer": true, "requires": { - "minimatch": "3.0.4" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "peer": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "minimatch": "^3.0.5" } }, "reduce-flatten": { diff --git a/contract/package.json b/contract/package.json index 3087392b..d986d20d 100644 --- a/contract/package.json +++ b/contract/package.json @@ -5,7 +5,7 @@ }, "devDependencies": { "@nomicfoundation/hardhat-toolbox": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.1.1", + "@nomiclabs/hardhat-etherscan": "^3.1.7", "@nouns/sdk": "^0.3.2", "@openzeppelin/contracts": "^4.8.3", "assetprovider.sol": "^1.2.0", @@ -14,7 +14,7 @@ "dotenv": "^16.0.3", "fast-xml-parser": "^4.0.11", "fully-on-chain.sol": "^1.1.0", - "hardhat": "^2.11.2", + "hardhat": "^2.14.0", "prettier-plugin-solidity": "^1.0.0", "randomizer.sol": "^1.0.0", "trigonometry.sol": "^1.0.0", From 1bca3b8bbf43d8223d70e1708fa6001ff86b8c39 Mon Sep 17 00:00:00 2001 From: eibakatsu Date: Thu, 15 Jun 2023 16:10:28 +0900 Subject: [PATCH 14/14] LocalNouns initial working version --- contract/contracts/LocalNounsToken.sol | 32 +- .../external/nouns/NounsDescripter.sol | 351 +++ .../localNouns/LocalNounsDescriptor.sol | 68 +- .../localNouns/LocalNounsProvider.sol | 25 +- .../contracts/localNouns/LocalNounsSeeder.sol | 21 +- contract/contracts/localNouns/README.md | 20 +- .../interfaces/IAssetProviderExMint.sol | 2 +- .../interfaces/ILocalNounsSeeder.sol | 32 + .../interfaces/INounsDescriptor.sol | 12 +- .../interfaces/INounsDescriptorMinimal.sol | 8 + contract/hardhat.config.ts | 23 +- contract/package-lock.json | 35 +- contract/package.json | 5 +- contract/scripts/deploy_localNouns.ts | 75 + contract/scripts/deploy_nounsDescriptorV1.ts | 52 + contract/scripts/populate_localNouns.ts | 107 + contract/scripts/populate_nounsV1.ts | 81 + contract/test/image-local-data.json | 1447 ++++++++++++ contract/test/image-original-nouns-data.json | 1943 +++++++++++++++++ 19 files changed, 4237 insertions(+), 102 deletions(-) create mode 100644 contract/contracts/external/nouns/NounsDescripter.sol create mode 100644 contract/contracts/localNouns/interfaces/ILocalNounsSeeder.sol create mode 100644 contract/scripts/deploy_localNouns.ts create mode 100644 contract/scripts/deploy_nounsDescriptorV1.ts create mode 100644 contract/scripts/populate_localNouns.ts create mode 100644 contract/scripts/populate_nounsV1.ts create mode 100644 contract/test/image-local-data.json create mode 100644 contract/test/image-original-nouns-data.json diff --git a/contract/contracts/LocalNounsToken.sol b/contract/contracts/LocalNounsToken.sol index a0f9dbf2..ea32159a 100644 --- a/contract/contracts/LocalNounsToken.sol +++ b/contract/contracts/LocalNounsToken.sol @@ -8,8 +8,8 @@ pragma solidity ^0.8.6; import '@openzeppelin/contracts/utils/Strings.sol'; import './libs/ProviderTokenA1.sol'; -import { INounsSeeder } from './sushi/interfaces/INounsSeeder.sol'; -import './sushi/interfaces/IAssetProviderExMint.sol'; +import { INounsSeeder } from './localNouns/interfaces/INounsSeeder.sol'; +import './localNouns/interfaces/IAssetProviderExMint.sol'; contract LocalNounsToken is ProviderTokenA1 { using Strings for uint256; @@ -26,10 +26,10 @@ contract LocalNounsToken is ProviderTokenA1 { address _committee, address _designer, address _developper - ) ProviderTokenA1(_assetProvider, 'Sushi Nouns', 'Sushi Nouns') { - description = 'Sushi Nouns Token.'; + ) ProviderTokenA1(_assetProvider, 'Local Nouns', 'Local Nouns') { + description = 'Local Nouns Token.'; assetProvider2 = _assetProvider; - mintPrice = 1e15; // 0.1 + mintPrice = 1e13; // 0.001 mintLimit = 5000; committee = _committee; designer = _designer; @@ -37,10 +37,10 @@ contract LocalNounsToken is ProviderTokenA1 { } function tokenName(uint256 _tokenId) internal pure override returns (string memory) { - return string(abi.encodePacked('Sushi Nouns ', _tokenId.toString())); + return string(abi.encodePacked('Local Nouns ', _tokenId.toString())); } function tokenURI(uint256 _tokenId) public view override returns (string memory) { - require(_tokenId < _nextTokenId(), 'SushiNounsToken.tokenURI: nonexistent token'); + require(_tokenId < _nextTokenId(), 'LocalNounsToken.tokenURI: nonexistent token'); (string memory svgPart, string memory tag) = assetProvider2.generateSVGPart(_tokenId); bytes memory image = bytes(svgPart); @@ -59,7 +59,7 @@ contract LocalNounsToken is ProviderTokenA1 { '","attributes":[', generateTraits(_tokenId), '],"image":"data:image/svg+xml;base64,', - Base64.encode(image), + image, '"}' ) ) @@ -67,19 +67,19 @@ contract LocalNounsToken is ProviderTokenA1 { ) ); } - function mint() public payable virtual override returns (uint256 tokenId) { + function mint(uint256 prefectureId) public payable virtual returns (uint256 tokenId) { require(msg.value >= mintPrice, 'Must send the mint price'); - assetProvider2.mint(_nextTokenId()); + assetProvider2.mint(prefectureId, _nextTokenId()); super.mint(); address payable payableTo = payable(committee); payableTo.transfer(address(this).balance); - if ((_nextTokenId() % 10) == 8) { - assetProvider2.mint(_nextTokenId()); - _safeMint(designer, 1); - assetProvider2.mint(_nextTokenId()); - _safeMint(developper, 1); - } + // if ((_nextTokenId() % 10) == 8) { + // assetProvider2.mint(_nextTokenId()); + // _safeMint(designer, 1); + // assetProvider2.mint(_nextTokenId()); + // _safeMint(developper, 1); + // } return _nextTokenId() - 1; } } diff --git a/contract/contracts/external/nouns/NounsDescripter.sol b/contract/contracts/external/nouns/NounsDescripter.sol new file mode 100644 index 00000000..55361dee --- /dev/null +++ b/contract/contracts/external/nouns/NounsDescripter.sol @@ -0,0 +1,351 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title The Nouns NFT descriptor + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol'; +import { Strings } from '@openzeppelin/contracts/utils/Strings.sol'; +import { INounsDescriptor } from './interfaces/INounsDescriptor.sol'; +import { INounsSeeder } from './interfaces/INounsSeeder.sol'; +import { NFTDescriptor } from './libs/NFTDescriptor.sol'; +import { MultiPartRLEToSVG } from './libs/MultiPartRLEToSVG.sol'; + +contract NounsDescriptor is INounsDescriptor, Ownable { + using Strings for uint256; + + // prettier-ignore + // https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt + bytes32 constant COPYRIGHT_CC0_1_0_UNIVERSAL_LICENSE = 0xa2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499; + + // Whether or not new Noun parts can be added + bool public override arePartsLocked; + + // Whether or not `tokenURI` should be returned as a data URI (Default: true) + bool public override isDataURIEnabled = true; + + // Base URI + string public override baseURI; + + // Noun Color Palettes (Index => Hex Colors) + mapping(uint8 => string[]) public override palettes; + + // Noun Backgrounds (Hex Colors) + string[] public override backgrounds; + + // Noun Bodies (Custom RLE) + bytes[] public override bodies; + + // Noun Accessories (Custom RLE) + bytes[] public override accessories; + + // Noun Heads (Custom RLE) + bytes[] public override heads; + + // Noun Glasses (Custom RLE) + bytes[] public override glasses; + + /** + * @notice Require that the parts have not been locked. + */ + modifier whenPartsNotLocked() { + require(!arePartsLocked, 'Parts are locked'); + _; + } + + /** + * @notice Get the number of available Noun `backgrounds`. + */ + function backgroundCount() external view override returns (uint256) { + return backgrounds.length; + } + + /** + * @notice Get the number of available Noun `bodies`. + */ + function bodyCount() external view override returns (uint256) { + return bodies.length; + } + + /** + * @notice Get the number of available Noun `accessories`. + */ + function accessoryCount() external view override returns (uint256) { + return accessories.length; + } + + /** + * @notice Get the number of available Noun `heads`. + */ + function headCount() external view override returns (uint256) { + return heads.length; + } + + /** + * @notice Get the number of available Noun `glasses`. + */ + function glassesCount() external view override returns (uint256) { + return glasses.length; + } + + /** + * @notice Add colors to a color palette. + * @dev This function can only be called by the owner. + */ + function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external override onlyOwner { + require(palettes[paletteIndex].length + newColors.length <= 256, 'Palettes can only hold 256 colors'); + for (uint256 i = 0; i < newColors.length; i++) { + _addColorToPalette(paletteIndex, newColors[i]); + } + } + + /** + * @notice Batch add Noun backgrounds. + * @dev This function can only be called by the owner when not locked. + */ + function addManyBackgrounds(string[] calldata _backgrounds) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _backgrounds.length; i++) { + _addBackground(_backgrounds[i]); + } + } + + /** + * @notice Batch add Noun bodies. + * @dev This function can only be called by the owner when not locked. + */ + function addManyBodies(bytes[] calldata _bodies) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _bodies.length; i++) { + _addBody(_bodies[i]); + } + } + + /** + * @notice Batch add Noun accessories. + * @dev This function can only be called by the owner when not locked. + */ + function addManyAccessories(bytes[] calldata _accessories) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _accessories.length; i++) { + _addAccessory(_accessories[i]); + } + } + + /** + * @notice Batch add Noun heads. + * @dev This function can only be called by the owner when not locked. + */ + function addManyHeads(bytes[] calldata _heads) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _heads.length; i++) { + _addHead(_heads[i]); + } + } + + /** + * @notice Batch add Noun glasses. + * @dev This function can only be called by the owner when not locked. + */ + function addManyGlasses(bytes[] calldata _glasses) external override onlyOwner whenPartsNotLocked { + for (uint256 i = 0; i < _glasses.length; i++) { + _addGlasses(_glasses[i]); + } + } + + /** + * @notice Add a single color to a color palette. + * @dev This function can only be called by the owner. + */ + function addColorToPalette(uint8 _paletteIndex, string calldata _color) external override onlyOwner { + require(palettes[_paletteIndex].length <= 255, 'Palettes can only hold 256 colors'); + _addColorToPalette(_paletteIndex, _color); + } + + /** + * @notice Add a Noun background. + * @dev This function can only be called by the owner when not locked. + */ + function addBackground(string calldata _background) external override onlyOwner whenPartsNotLocked { + _addBackground(_background); + } + + /** + * @notice Add a Noun body. + * @dev This function can only be called by the owner when not locked. + */ + function addBody(bytes calldata _body) external override onlyOwner whenPartsNotLocked { + _addBody(_body); + } + + /** + * @notice Add a Noun accessory. + * @dev This function can only be called by the owner when not locked. + */ + function addAccessory(bytes calldata _accessory) external override onlyOwner whenPartsNotLocked { + _addAccessory(_accessory); + } + + /** + * @notice Add a Noun head. + * @dev This function can only be called by the owner when not locked. + */ + function addHead(bytes calldata _head) external override onlyOwner whenPartsNotLocked { + _addHead(_head); + } + + /** + * @notice Add Noun glasses. + * @dev This function can only be called by the owner when not locked. + */ + function addGlasses(bytes calldata _glasses) external override onlyOwner whenPartsNotLocked { + _addGlasses(_glasses); + } + + /** + * @notice Lock all Noun parts. + * @dev This cannot be reversed and can only be called by the owner when not locked. + */ + function lockParts() external override onlyOwner whenPartsNotLocked { + arePartsLocked = true; + + emit PartsLocked(); + } + + /** + * @notice Toggle a boolean value which determines if `tokenURI` returns a data URI + * or an HTTP URL. + * @dev This can only be called by the owner. + */ + function toggleDataURIEnabled() external override onlyOwner { + bool enabled = !isDataURIEnabled; + + isDataURIEnabled = enabled; + emit DataURIToggled(enabled); + } + + /** + * @notice Set the base URI for all token IDs. It is automatically + * added as a prefix to the value returned in {tokenURI}, or to the + * token ID if {tokenURI} is empty. + * @dev This can only be called by the owner. + */ + function setBaseURI(string calldata _baseURI) external override onlyOwner { + baseURI = _baseURI; + + emit BaseURIUpdated(_baseURI); + } + + /** + * @notice Given a token ID and seed, construct a token URI for an official Nouns DAO noun. + * @dev The returned value may be a base64 encoded data URI or an API URL. + */ + function tokenURI(uint256 tokenId, INounsSeeder.Seed memory seed) external view override returns (string memory) { + if (isDataURIEnabled) { + return dataURI(tokenId, seed); + } + return string(abi.encodePacked(baseURI, tokenId.toString())); + } + + /** + * @notice Given a token ID and seed, construct a base64 encoded data URI for an official Nouns DAO noun. + */ + function dataURI(uint256 tokenId, INounsSeeder.Seed memory seed) public view override returns (string memory) { + string memory nounId = tokenId.toString(); + string memory name = string(abi.encodePacked('Noun ', nounId)); + string memory description = string(abi.encodePacked('Noun ', nounId, ' is a member of the Nouns DAO')); + + return genericDataURI(name, description, seed); + } + + /** + * @notice Given a name, description, and seed, construct a base64 encoded data URI. + */ + function genericDataURI( + string memory name, + string memory description, + INounsSeeder.Seed memory seed + ) public view override returns (string memory) { + NFTDescriptor.TokenURIParams memory params = NFTDescriptor.TokenURIParams({ + name: name, + description: description, + parts: _getPartsForSeed(seed), + background: backgrounds[seed.background] + }); + return NFTDescriptor.constructTokenURI(params, palettes); + } + + /** + * @notice Given a seed, construct a base64 encoded SVG image. + */ + function generateSVGImage(INounsSeeder.Seed memory seed) external view override returns (string memory) { + MultiPartRLEToSVG.SVGParams memory params = MultiPartRLEToSVG.SVGParams({ + parts: _getPartsForSeed(seed), + background: backgrounds[seed.background] + }); + return NFTDescriptor.generateSVGImage(params, palettes); + } + + /** + * @notice Add a single color to a color palette. + */ + function _addColorToPalette(uint8 _paletteIndex, string calldata _color) internal { + palettes[_paletteIndex].push(_color); + } + + /** + * @notice Add a Noun background. + */ + function _addBackground(string calldata _background) internal { + backgrounds.push(_background); + } + + /** + * @notice Add a Noun body. + */ + function _addBody(bytes calldata _body) internal { + bodies.push(_body); + } + + /** + * @notice Add a Noun accessory. + */ + function _addAccessory(bytes calldata _accessory) internal { + accessories.push(_accessory); + } + + /** + * @notice Add a Noun head. + */ + function _addHead(bytes calldata _head) internal { + heads.push(_head); + } + + /** + * @notice Add Noun glasses. + */ + function _addGlasses(bytes calldata _glasses) internal { + glasses.push(_glasses); + } + + /** + * @notice Get all Noun parts for the passed `seed`. + */ + function _getPartsForSeed(INounsSeeder.Seed memory seed) internal view returns (bytes[] memory) { + bytes[] memory _parts = new bytes[](4); + _parts[0] = bodies[seed.body]; + _parts[1] = accessories[seed.accessory]; + _parts[2] = heads[seed.head]; + _parts[3] = glasses[seed.glasses]; + return _parts; + } +} \ No newline at end of file diff --git a/contract/contracts/localNouns/LocalNounsDescriptor.sol b/contract/contracts/localNouns/LocalNounsDescriptor.sol index 78cad917..a4903292 100644 --- a/contract/contracts/localNouns/LocalNounsDescriptor.sol +++ b/contract/contracts/localNouns/LocalNounsDescriptor.sol @@ -60,6 +60,12 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { // Noun Glasses (Custom RLE) bytes[] public override glasses; + + // prefectureId => parts index of heads + mapping(uint256 => uint256[]) public prefectureHeads; + + // prefectureId => parts index of accessories + mapping(uint256 => uint256[]) public prefectureAccessories; constructor(INounsDescriptor _descriptor) { descriptor = _descriptor; @@ -94,6 +100,20 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { return accessories.length; } + /** + * @notice Get the number of available Noun `accessories` in the prefecture. + */ + function accessoryCountInPrefecture(uint256 prefectureId) external view override returns (uint256) { + return prefectureAccessories[prefectureId].length; + } + + /** + * @notice Get the number of available Noun `accessories` in the prefecture. + */ + function accessoryInPrefecture(uint256 prefectureId, uint256 seqNo) external view override returns (uint256) { + return prefectureAccessories[prefectureId][seqNo]; + } + /** * @notice Get the number of available Noun `heads`. */ @@ -101,6 +121,20 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { return heads.length; } + /** + * @notice Get the number of available Noun `heads` in the prefecture. + */ + function headCountInPrefecture(uint256 prefectureId) external view override returns (uint256) { + return prefectureHeads[prefectureId].length; + } + + /** + * @notice Get the number of available Noun `heads` in the prefecture. + */ + function headInPrefecture(uint256 prefectureId, uint256 seqNo) external view override returns (uint256) { + return prefectureHeads[prefectureId][seqNo]; + } + /** * @notice Get the number of available Noun `glasses`. */ @@ -144,9 +178,9 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { * @notice Batch add Noun accessories. * @dev This function can only be called by the owner when not locked. */ - function addManyAccessories(bytes[] calldata _accessories) external override onlyOwner whenPartsNotLocked { + function addManyAccessories(uint256 prefectureId, bytes[] calldata _accessories) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _accessories.length; i++) { - _addAccessory(_accessories[i]); + _addAccessory(prefectureId, _accessories[i]); } } @@ -154,9 +188,9 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { * @notice Batch add Noun heads. * @dev This function can only be called by the owner when not locked. */ - function addManyHeads(bytes[] calldata _heads) external override onlyOwner whenPartsNotLocked { + function addManyHeads(uint256 prefectureId, bytes[] calldata _heads) external override onlyOwner whenPartsNotLocked { for (uint256 i = 0; i < _heads.length; i++) { - _addHead(_heads[i]); + _addHead(prefectureId, _heads[i]); } } @@ -199,16 +233,16 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { * @notice Add a Noun accessory. * @dev This function can only be called by the owner when not locked. */ - function addAccessory(bytes calldata _accessory) external override onlyOwner whenPartsNotLocked { - _addAccessory(_accessory); + function addAccessory(uint256 prefectureId, bytes calldata _accessory) external override onlyOwner whenPartsNotLocked { + _addAccessory(prefectureId, _accessory); } /** * @notice Add a Noun head. * @dev This function can only be called by the owner when not locked. */ - function addHead(bytes calldata _head) external override onlyOwner whenPartsNotLocked { - _addHead(_head); + function addHead(uint256 prefectureId, bytes calldata _head) external override onlyOwner whenPartsNotLocked { + _addHead(prefectureId, _head); } /** @@ -325,18 +359,20 @@ contract LocalNounsDescriptor is INounsDescriptor, Ownable { // nothing // bodies.push(_body); } - + /** - * @notice Add a Noun accessory. - */ - function _addAccessory(bytes calldata _accessory) internal { + * @notice Add a Noun accessory. + */ + function _addAccessory(uint256 prefectureId, bytes calldata _accessory) internal { + prefectureAccessories[prefectureId].push(accessories.length); accessories.push(_accessory); } - + /** - * @notice Add a Noun head. - */ - function _addHead(bytes calldata _head) internal { + * @notice Add a Noun head. + */ + function _addHead(uint256 prefectureId, bytes calldata _head) internal { + prefectureHeads[prefectureId].push(heads.length); heads.push(_head); } diff --git a/contract/contracts/localNouns/LocalNounsProvider.sol b/contract/contracts/localNouns/LocalNounsProvider.sol index abff3c7f..e78f59f7 100644 --- a/contract/contracts/localNouns/LocalNounsProvider.sol +++ b/contract/contracts/localNouns/LocalNounsProvider.sol @@ -13,35 +13,36 @@ import '@openzeppelin/contracts/interfaces/IERC165.sol'; import { INounsDescriptor } from './interfaces/INounsDescriptor.sol'; import { INounsSeeder } from './interfaces/INounsSeeder.sol'; +import { ILocalNounsSeeder } from './interfaces/ILocalNounsSeeder.sol'; import { NFTDescriptor } from '../external/nouns/libs/NFTDescriptor.sol'; contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { using Strings for uint256; - string constant providerKey = 'SushiNouns'; + string constant providerKey = 'LocalNouns'; address public receiver; uint256 public nextTokenId; INounsDescriptor public immutable descriptor; - INounsDescriptor public immutable sushidescriptor; + INounsDescriptor public immutable localDescriptor; INounsSeeder public immutable seeder; - INounsSeeder public immutable sushiseeder; + ILocalNounsSeeder public immutable localSeader; mapping(uint256 => INounsSeeder.Seed) public seeds; constructor( INounsDescriptor _descriptor, - INounsDescriptor _sushidescriptor, + INounsDescriptor _localDescriptor, INounsSeeder _seeder, - INounsSeeder _sushiseeder + ILocalNounsSeeder _localSeader ) { receiver = owner(); descriptor = _descriptor; - sushidescriptor = _sushidescriptor; + localDescriptor = _localDescriptor; seeder = _seeder; - sushiseeder = _sushiseeder; + localSeader = _localSeader; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { @@ -70,9 +71,9 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { receiver = _receiver; } - function generateSeed(uint256 _assetId) internal view returns (INounsSeeder.Seed memory mixedSeed) { + function generateSeed(uint256 prefectureId, uint256 _assetId) internal view returns (INounsSeeder.Seed memory mixedSeed) { INounsSeeder.Seed memory seed1 = seeder.generateSeed(_assetId, descriptor); - INounsSeeder.Seed memory seed2 = sushiseeder.generateSeed(_assetId, sushidescriptor); + ILocalNounsSeeder.Seed memory seed2 = localSeader.generateSeed(prefectureId, _assetId, localDescriptor); mixedSeed = INounsSeeder.Seed({ background: seed1.background, @@ -86,7 +87,7 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { function generateSVGPart(uint256 _assetId) public view override returns (string memory svgPart, string memory tag) { // INounsSeeder.Seed memory seed = generateSeed(_assetId); INounsSeeder.Seed memory seed = seeds[_assetId]; - svgPart = sushidescriptor.generateSVGImage(seed); + svgPart = localDescriptor.generateSVGImage(seed); // generateSVGImage tag = string(""); @@ -97,9 +98,9 @@ contract LocalNounsProvider is IAssetProviderExMint, IERC165, Ownable { // nothing to return } - function mint(uint256 _assetId) external returns (uint256) { + function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256) { if (nextTokenId == _assetId) { - seeds[_assetId] = generateSeed(_assetId); + seeds[_assetId] = generateSeed(prefectureId, _assetId); nextTokenId ++; } diff --git a/contract/contracts/localNouns/LocalNounsSeeder.sol b/contract/contracts/localNouns/LocalNounsSeeder.sol index 4735210a..5885601f 100644 --- a/contract/contracts/localNouns/LocalNounsSeeder.sol +++ b/contract/contracts/localNouns/LocalNounsSeeder.sol @@ -17,30 +17,29 @@ pragma solidity ^0.8.6; -import { INounsSeeder } from './interfaces/INounsSeeder.sol'; +import { ILocalNounsSeeder } from './interfaces/ILocalNounsSeeder.sol'; import { INounsDescriptorMinimal } from './interfaces/INounsDescriptorMinimal.sol'; -contract LocalNounsSeeder is INounsSeeder { +contract LocalNounsSeeder is ILocalNounsSeeder { /** * @notice Generate a pseudo-random Noun seed using the previous blockhash and noun ID. */ - function generateSeed(uint256 nounId, INounsDescriptorMinimal descriptor) external view returns (Seed memory) { + function generateSeed(uint256 prefectureId, uint256 nounId, INounsDescriptorMinimal descriptor) external view returns (Seed memory) { uint256 pseudorandomness = uint256( keccak256(abi.encodePacked(blockhash(block.number - 1), nounId)) ); - uint256 accessoryCount = descriptor.accessoryCount(); - uint256 headCount = descriptor.headCount(); + uint256 accessoryCount = descriptor.accessoryCountInPrefecture(prefectureId); + uint256 headCount = descriptor.headCountInPrefecture(prefectureId); + + uint256 accesoryPartId = descriptor.accessoryInPrefecture(prefectureId, (pseudorandomness >> 96) % accessoryCount); + uint256 headPartId = descriptor.headInPrefecture(prefectureId, (pseudorandomness >> 144) % headCount); return Seed({ background: 0, body: 0, - accessory: uint48( - uint48(pseudorandomness >> 96) % accessoryCount - ), - head: uint48( - uint48(pseudorandomness >> 144) % headCount - ), + accessory: uint48(accesoryPartId), + head: uint48(headPartId), glasses: 0 }); } diff --git a/contract/contracts/localNouns/README.md b/contract/contracts/localNouns/README.md index 025c91dd..6b7992ae 100644 --- a/contract/contracts/localNouns/README.md +++ b/contract/contracts/localNouns/README.md @@ -4,19 +4,17 @@ - bodyとglassはNounsTokenのデータを参照してそのまま使う - headとaccessoryはstorageへ書き込む +-- headとaccessoryは、都道府県ごとのパーツを組み合わせる ## Contractの構成 -- SushiNounsToken -> SushiNounsProvider -> SushiNounsDescriptor(NounsDescriptorを中で参照) -- MixedSeeder(NounsSeeder, SushiNounsSeederをmixしたseeder) - -- データ等を重複しない構成をしている - - paletteが型問題で参照できないのでSushiNounsDescriptorにデータとして入れる -- backgroundsの画像化は試したがデータ量が多いのでgas代問題でng - - SushiNounsDescriptorのpartsを5個にし、NFTDescriptorを改良すればできる -- mint時にseedはproviderで管理する - - seederの受け渡しに問題でtokenで管理していない +- LocalNounsToken -> LocalNounsProvider -> LocalNounsDescriptor(NounsDescriptorを中で参照) +- NounsのパーツはNounsSeeder, LocalNounsのパーツはLocalNounsSeederで採番する ## deploy & test - - test/sushi.ts にテストがある - - これを参照すればdeployもつくれる。 + - scripts/deploy_localNouns.ts → デプロイ + - scripts/populate_localNouns.ts → パーツ画像の登録、テストミント + - nouns daoのcontracのデータを参照するので、mainnet forkingで動かす必要がある + -- パーツはNounsDescriptorV1で作成されたものを使用している + -- scripts/deploy_nounsDescriptorV1.ts → デプロイ + -- scripts/populate_nounsV1.ts → パーツ画像の登録 \ No newline at end of file diff --git a/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol b/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol index 88369dbb..d1ed179d 100644 --- a/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol +++ b/contract/contracts/localNouns/interfaces/IAssetProviderExMint.sol @@ -5,5 +5,5 @@ pragma solidity ^0.8.6; import 'assetprovider.sol/IAssetProvider.sol'; interface IAssetProviderExMint is IAssetProvider { - function mint(uint256 _assetId) external returns (uint256); + function mint(uint256 prefectureId, uint256 _assetId) external returns (uint256); } diff --git a/contract/contracts/localNouns/interfaces/ILocalNounsSeeder.sol b/contract/contracts/localNouns/interfaces/ILocalNounsSeeder.sol new file mode 100644 index 00000000..83c03590 --- /dev/null +++ b/contract/contracts/localNouns/interfaces/ILocalNounsSeeder.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-3.0 + +/// @title Interface for NounsSeeder + +/********************************* + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░██░░░████░░██░░░████░░░ * + * ░░██████░░░████████░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░██░░██░░░████░░██░░░████░░░ * + * ░░░░░░█████████░░█████████░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * + *********************************/ + +pragma solidity ^0.8.6; + +import { INounsDescriptorMinimal } from './INounsDescriptorMinimal.sol'; + +interface ILocalNounsSeeder { + struct Seed { + uint48 background; + uint48 body; + uint48 accessory; + uint48 head; + uint48 glasses; + } + + function generateSeed(uint256 prefectureId, uint256 nounId, INounsDescriptorMinimal descriptor) external view returns (Seed memory); +} \ No newline at end of file diff --git a/contract/contracts/localNouns/interfaces/INounsDescriptor.sol b/contract/contracts/localNouns/interfaces/INounsDescriptor.sol index 6c676f6a..20924c35 100644 --- a/contract/contracts/localNouns/interfaces/INounsDescriptor.sol +++ b/contract/contracts/localNouns/interfaces/INounsDescriptor.sol @@ -51,8 +51,12 @@ interface INounsDescriptor is INounsDescriptorMinimal { function accessoryCount() external view override returns (uint256); + function accessoryCountInPrefecture(uint256 prefectureId) external view returns (uint256); + function headCount() external view override returns (uint256); + function headCountInPrefecture(uint256 prefectureId) external view returns (uint256); + function glassesCount() external view override returns (uint256); function addManyColorsToPalette(uint8 paletteIndex, string[] calldata newColors) external; @@ -61,9 +65,9 @@ interface INounsDescriptor is INounsDescriptorMinimal { function addManyBodies(bytes[] calldata bodies) external; - function addManyAccessories(bytes[] calldata accessories) external; + function addManyAccessories(uint256 prefectureId, bytes[] calldata accessories) external; - function addManyHeads(bytes[] calldata heads) external; + function addManyHeads(uint256 prefectureId, bytes[] calldata heads) external; function addManyGlasses(bytes[] calldata glasses) external; @@ -73,9 +77,9 @@ interface INounsDescriptor is INounsDescriptorMinimal { function addBody(bytes calldata body) external; - function addAccessory(bytes calldata accessory) external; + function addAccessory(uint256 prefectureId, bytes calldata accessory) external; - function addHead(bytes calldata head) external; + function addHead(uint256 prefectureId, bytes calldata head) external; function addGlasses(bytes calldata glasses) external; diff --git a/contract/contracts/localNouns/interfaces/INounsDescriptorMinimal.sol b/contract/contracts/localNouns/interfaces/INounsDescriptorMinimal.sol index c49d4c86..d4b52942 100644 --- a/contract/contracts/localNouns/interfaces/INounsDescriptorMinimal.sol +++ b/contract/contracts/localNouns/interfaces/INounsDescriptorMinimal.sol @@ -38,7 +38,15 @@ interface INounsDescriptorMinimal { function accessoryCount() external view returns (uint256); + function accessoryCountInPrefecture(uint256 prefectureId) external view returns (uint256); + + function accessoryInPrefecture(uint256 prefectureId, uint256 seqNo) external view returns (uint256); + function headCount() external view returns (uint256); + function headCountInPrefecture(uint256 prefectureId) external view returns (uint256); + + function headInPrefecture(uint256 prefectureId, uint256 seqNo) external view returns (uint256); + function glassesCount() external view returns (uint256); } diff --git a/contract/hardhat.config.ts b/contract/hardhat.config.ts index 046d2ad1..f1ebb4b3 100644 --- a/contract/hardhat.config.ts +++ b/contract/hardhat.config.ts @@ -16,7 +16,8 @@ const config: HardhatUserConfig = { defaultNetwork: "localhost", networks: { mumbai: { - url: "https://rpc-mumbai.maticvigil.com", + // url: "https://rpc-mumbai.maticvigil.com", + url: "https://polygon-mumbai.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY, accounts: process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [], }, @@ -42,16 +43,16 @@ const config: HardhatUserConfig = { // https://stackoverflow.com/questions/73618935/hardhat-verification-for-polygon-mumbai-fails etherscan: { apiKey: process.env.ETHERSCAN_API_KEY, - customChains: [ - { - network: "mumbai", - chainId: 80001, - urls: { - apiURL: "https://api-testnet.polygonscan.com", - browserURL: "https://mumbai.polygonscan.com" - } - } - ] + // customChains: [ + // { + // network: "mumbai", + // chainId: 80001, + // urls: { + // apiURL: "https://api-testnet.polygonscan.com", + // browserURL: "https://mumbai.polygonscan.com" + // } + // } + // ] }, }; diff --git a/contract/package-lock.json b/contract/package-lock.json index c539eb94..44d2ccf2 100644 --- a/contract/package-lock.json +++ b/contract/package-lock.json @@ -19,11 +19,12 @@ "dotenv": "^16.0.3", "fast-xml-parser": "^4.0.11", "fully-on-chain.sol": "^1.1.0", - "hardhat": "^2.14.0", + "hardhat": "^2.15.0", "prettier-plugin-solidity": "^1.0.0", "randomizer.sol": "^1.0.0", "trigonometry.sol": "^1.0.0", - "ts-node": "^10.9.1" + "ts-node": "^10.9.1", + "typescript": "^5.1.3" } }, "node_modules/@chainsafe/as-sha256": { @@ -4568,9 +4569,9 @@ } }, "node_modules/hardhat": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", - "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.15.0.tgz", + "integrity": "sha512-cC9tM/N10YaES04zPOp7yR13iX3YibqaNmi0//Ep40Nt9ELIJx3kFpQmucur0PAIfXYpGnw5RuXHNLkxpnVHEw==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", @@ -8659,17 +8660,16 @@ "peer": true }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true, - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/typical": { @@ -12587,9 +12587,9 @@ } }, "hardhat": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", - "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.15.0.tgz", + "integrity": "sha512-cC9tM/N10YaES04zPOp7yR13iX3YibqaNmi0//Ep40Nt9ELIJx3kFpQmucur0PAIfXYpGnw5RuXHNLkxpnVHEw==", "dev": true, "requires": { "@ethersproject/abi": "^5.1.2", @@ -15709,11 +15709,10 @@ "peer": true }, "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, - "peer": true + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true }, "typical": { "version": "4.0.0", diff --git a/contract/package.json b/contract/package.json index d986d20d..6a62d509 100644 --- a/contract/package.json +++ b/contract/package.json @@ -14,11 +14,12 @@ "dotenv": "^16.0.3", "fast-xml-parser": "^4.0.11", "fully-on-chain.sol": "^1.1.0", - "hardhat": "^2.14.0", + "hardhat": "^2.15.0", "prettier-plugin-solidity": "^1.0.0", "randomizer.sol": "^1.0.0", "trigonometry.sol": "^1.0.0", - "ts-node": "^10.9.1" + "ts-node": "^10.9.1", + "typescript": "^5.1.3" }, "dependencies": { "base64-sol": "^1.1.0" diff --git a/contract/scripts/deploy_localNouns.ts b/contract/scripts/deploy_localNouns.ts new file mode 100644 index 00000000..811ad549 --- /dev/null +++ b/contract/scripts/deploy_localNouns.ts @@ -0,0 +1,75 @@ +import { ethers, network } from 'hardhat'; +import { exec } from 'child_process'; +import addresses from '@nouns/sdk/dist/contract/addresses.json'; + +// const nounsDescriptor: string = network.name == 'goerli' ? addresses[5].nounsDescriptor : addresses[1].nounsDescriptor; +// const nounsSeeder: string = network.name == 'goerli' ? addresses[5].nounsSeeder : addresses[1].nounsSeeder; +// const nftDescriptor: string = network.name == 'goerli' ? addresses[5].nftDescriptor : addresses[1].nftDescriptor; + +const nounsDescriptor: string = '0xA6f003aa2E8b8EbAe9e3b7792719A08Ea8683107'; // mumbai +const nounsSeeder: string = '0x5f5C984E0BAf150D5a74ae21f4777Fd1947DE8c9'; // mumbai +const nftDescriptor: string = '0xC93218fF7C44cbEB57c7661DCa886deCBc0E07C0'; // mumbai + +// const nounsDescriptor: string = '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0'; // localhost +// const nounsSeeder: string = '0x5FC8d32690cc91D4c39d9d3abcBD16989F875707'; // localhost +// const nftDescriptor: string = '0x5FbDB2315678afecb367f032d93F642f64180aa3'; // localhost + +const committee = "0x52A76a606AC925f7113B4CC8605Fe6bCad431EbB"; +// const committee = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"; // localhost + +async function main() { + + const factorySeeder = await ethers.getContractFactory('LocalNounsSeeder'); + const localseeder = await factorySeeder.deploy(); + await localseeder.deployed(); + console.log(`##localseeder="${localseeder.address}"`); + await runCommand(`npx hardhat verify ${localseeder.address} --network ${network.name} &`); + + const factoryLocalNounsDescriptor = await ethers.getContractFactory('LocalNounsDescriptor', { + libraries: { + NFTDescriptor: nftDescriptor, + } + }); + const localNounsDescriptor = await factoryLocalNounsDescriptor.deploy( + nounsDescriptor + ); + await localNounsDescriptor.deployed(); + console.log(`##localNounsDescriptor="${localNounsDescriptor.address}"`); + await runCommand(`npx hardhat verify ${localNounsDescriptor.address} ${nounsDescriptor} --network ${network.name} &`); + + const factorySVGStore = await ethers.getContractFactory('LocalNounsProvider'); + const provider = await factorySVGStore.deploy(nounsDescriptor, localNounsDescriptor.address, nounsSeeder, localseeder.address); + await provider.deployed(); + console.log(`##LocalNounsProvider="${provider.address}"`); + await runCommand(`npx hardhat verify ${provider.address} ${nounsDescriptor} ${localNounsDescriptor.address} ${nounsSeeder} ${localseeder.address} --network ${network.name} &`); + + const factoryToken = await ethers.getContractFactory('LocalNounsToken'); + const token = await factoryToken.deploy(provider.address, committee, committee, committee); + await token.deployed(); + console.log(`##LocalNounsToken="${token.address}"`); + await runCommand(`npx hardhat verify ${token.address} ${provider.address} ${committee} ${committee} ${committee} --network ${network.name} &`); + +} + +async function runCommand(command: string) { + if (network.name !== 'localhost') { + console.log(command); + } + // なぜかコマンドが終了しないので手動で実行 + // await exec(command, (error, stdout, stderr) => { + // if (error) { + // console.log(`error: ${error.message}`); + // return; + // } + // if (stderr) { + // console.log(`stderr: ${stderr}`); + // return; + // } + // console.log(`stdout: ${stdout}`); + // }); +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); \ No newline at end of file diff --git a/contract/scripts/deploy_nounsDescriptorV1.ts b/contract/scripts/deploy_nounsDescriptorV1.ts new file mode 100644 index 00000000..9836f38e --- /dev/null +++ b/contract/scripts/deploy_nounsDescriptorV1.ts @@ -0,0 +1,52 @@ +import { ethers, network } from 'hardhat'; +import { exec } from 'child_process'; +import addresses from '@nouns/sdk/dist/contract/addresses.json'; + +// const nftDescriptor: string = network.name == 'goerli' ? addresses[5].nftDescriptor : addresses[1].nftDescriptor; +// const nftDescriptor: string = '0x1881c541E9d83880008B3720de0E537C34052ecf'; // mumbai +// const nftDescriptor: string = '0x5FbDB2315678afecb367f032d93F642f64180aa3'; // localhost + + +async function main() { + + const factoryNFTDescriptor = await ethers.getContractFactory('NFTDescriptor'); + const nftDescriptor = await factoryNFTDescriptor.deploy(); + await nftDescriptor.deployed(); + console.log(`##nftDescriptor="${nftDescriptor.address}"`); + await runCommand(`npx hardhat verify ${nftDescriptor.address} --network ${network.name} &`); + + + const factoryNounsDescriptor = await ethers.getContractFactory('NounsDescriptor', { + libraries: { + NFTDescriptor: nftDescriptor.address, + } + }); + const nounsDescriptor = await factoryNounsDescriptor.deploy(); + await nounsDescriptor.deployed(); + console.log(`##nounsDescriptor="${nounsDescriptor.address}"`); + await runCommand(`npx hardhat verify ${nounsDescriptor.address} --network ${network.name} &`); + +} + +async function runCommand(command: string) { + if (network.name !== 'localhost') { + console.log(command); + } + // なぜかコマンドが終了しないので手動で実行 + // await exec(command, (error, stdout, stderr) => { + // if (error) { + // console.log(`error: ${error.message}`); + // return; + // } + // if (stderr) { + // console.log(`stderr: ${stderr}`); + // return; + // } + // console.log(`stdout: ${stdout}`); + // }); +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); \ No newline at end of file diff --git a/contract/scripts/populate_localNouns.ts b/contract/scripts/populate_localNouns.ts new file mode 100644 index 00000000..40d853fa --- /dev/null +++ b/contract/scripts/populate_localNouns.ts @@ -0,0 +1,107 @@ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; +import * as fs from 'fs'; + +import { images, palette } from "../test/image-local-data"; +import { abi as localSeederABI } from "../artifacts/contracts/localNouns/LocalNounsSeeder.sol/LocalNounsSeeder"; +import { abi as localNounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; +import { abi as localProviderABI } from "../artifacts/contracts/localNouns/LocalNounsProvider.sol/LocalNounsProvider"; +import { abi as localTokenABI } from "../artifacts/contracts/LocalNounsToken.sol/LocalNounsToken"; + +dotenv.config(); + +const localSeederAddress: string = '0xD00fa9C531CEE42ba319B5Bda19c60e54BEddA41'; +const localNounsDescriptorAddress: string = '0xA4D4793f2fFafb1E7278C80565FA7252Ef146623'; +const localProviderAddress: string = '0xDC00D91b1FE2bc91C241Ae1E03b30F867789E83e'; +const localTokenAddress: string = '0x4958bb35e1aEA77133E46f042d0b5d373141E759'; + +async function main() { + const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + const wallet = new ethers.Wallet(privateKey, ethers.provider); + // const [wallet] = await ethers.getSigners(); // localhost + + // ethers.Contract オブジェクトのインスタンスを作成 + const localSeeder = new ethers.Contract(localSeederAddress, localSeederABI, wallet); + const localNounsDescriptor = new ethers.Contract(localNounsDescriptorAddress, localNounsDescriptorABI, wallet); + const localProvider = new ethers.Contract(localProviderAddress, localProviderABI, wallet); + const localToken = new ethers.Contract(localTokenAddress, localTokenABI, wallet); + + if (true) { + // set Palette + console.log(`set Palette start`); + await localNounsDescriptor.addManyColorsToPalette(0, palette); + console.log(`set Palette end`); + + // set Accessories + console.log(`set Accessories start`); + const accessoryChunk = chunkArrayByPrefectureId(images.accessories); + for (const chunk of accessoryChunk) { + const prefectureId = chunk[0].filename.split('-')[0]; + await localNounsDescriptor.addManyAccessories(prefectureId, chunk.map(({ data }) => data)); + // console.log("chunk:", prefectureId, chunk); + } + console.log(`set Accessories end`); + + // set Heads + console.log(`set Heads start`); + const headChunk = chunkArrayByPrefectureId(images.heads); + for (const chunk of headChunk) { + const prefectureId = chunk[0].filename.split('-')[0]; + await localNounsDescriptor.addManyHeads(prefectureId, chunk.map(({ data }) => data)); + // console.log("chunk:", prefectureId, chunk); + } + console.log(`set Heads end`); + + } + + for (var i: number = 1; i <= 47; i++) { + try { + await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.001') }); + await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.001') }); + await localToken.functions['mint(uint256)'](ethers.BigNumber.from(String(i)), { value: ethers.utils.parseEther('0.001') }); + console.log(`mint [`, i, `]`); + } catch (error) { + console.error(error); + }; + } + + // console.log(`write file start`); + // const index = 0; + // const ret = await localToken.tokenURI(index); + // const json = Buffer.from(ret.split(",")[1], 'base64').toString(); + // const svgB = Buffer.from(JSON.parse(json)["image"].split(",")[1], 'base64').toString(); + // const svg = Buffer.from(svgB, 'base64').toString(); + // // fs.writeFileSync(`./svg/${index}.svg`, svg, { encoding: 'utf8' }); + // console.log(`write file end`); + +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); + +interface ImageData { + filename: string; + data: string; +} + +function chunkArrayByPrefectureId(imagedata: ImageData[]): ImageData[][] { + let map = new Map(); + + for (let i = 0; i < imagedata.length; i++) { + // dataが空っぽはスキップ + if (imagedata[i].data === undefined) { + console.error("not define data:", imagedata[i].filename); + continue; + } + + let id = imagedata[i].filename.split('-')[0]; + + if (!map.has(id)) { + map.set(id, []); + } + map.get(id)!.push(imagedata[i]); + } + return Array.from(map.values()); +} \ No newline at end of file diff --git a/contract/scripts/populate_nounsV1.ts b/contract/scripts/populate_nounsV1.ts new file mode 100644 index 00000000..6b0825eb --- /dev/null +++ b/contract/scripts/populate_nounsV1.ts @@ -0,0 +1,81 @@ +import * as dotenv from "dotenv"; +import { ethers, network } from 'hardhat'; + +import { images, palette, bgcolors } from "../test/image-original-nouns-data"; +// import { abi as nounsDescriptorABI } from "../artifacts/contracts/localNouns/LocalNounsDescriptor.sol/LocalNounsDescriptor"; +import { abi as nounsDescriptorABI } from "../artifacts/contracts/external/nouns/NounsDescripter.sol/NounsDescriptor"; + +dotenv.config(); + +const nounsDescriptorAddress: string = '0xA6f003aa2E8b8EbAe9e3b7792719A08Ea8683107'; + +async function main() { + const privateKey = process.env.PRIVATE_KEY !== undefined ? process.env.PRIVATE_KEY : ''; + const wallet = new ethers.Wallet(privateKey, ethers.provider); + // const [wallet] = await ethers.getSigners(); // localhost + + // ethers.Contract オブジェクトのインスタンスを作成 + const nounsDescriptor = new ethers.Contract(nounsDescriptorAddress, nounsDescriptorABI, wallet); + + if (true) { + + console.log(`set Palette start`); + await nounsDescriptor.addManyColorsToPalette(0, palette); + console.log(`set Palette end`); + + console.log(`set Accessories start`); + const accessoryChunk = chunkArray(images.accessories, 10); + for (const chunk of accessoryChunk) { + await nounsDescriptor.addManyAccessories(chunk.map(({ data }) => data)); + } + console.log(`set Accessories end`); + + console.log(`set Bodies start`); + const bodiesChunk = chunkArray(images.bodies, 10); + for (const chunk of bodiesChunk) { + await nounsDescriptor.addManyBodies(chunk.map(({ data }) => data)); + } + console.log(`set Bodies end`); + + console.log(`set heads start`); + const headChunk = chunkArray(images.heads, 10); + for (const chunk of headChunk) { + await nounsDescriptor.addManyHeads(chunk.map(({ data }) => data)); + } + console.log(`set heads end`); + + console.log(`set glasses start`); + const glassesChunk = chunkArray(images.glasses, 10); + for (const chunk of glassesChunk) { + await nounsDescriptor.addManyGlasses(chunk.map(({ data }) => data)); + } + console.log(`set glasses end`); + + console.log(`set backgrounds start`); + await nounsDescriptor.addManyBackgrounds(bgcolors); + console.log(`set backgrounds end`); + + } + +} + +main().catch(error => { + console.error(error); + process.exitCode = 1; +}); + + +interface ImageData { + filename: string; + data: string; +} + +function chunkArray(imagedata: ImageData[], size: number): ImageData[][] { + + const chunk: ImageData[][] = []; + for (let i = 0; i < imagedata.length; i += size) { + chunk.push(imagedata.slice(i, i + size)); + } + + return chunk; +} \ No newline at end of file diff --git a/contract/test/image-local-data.json b/contract/test/image-local-data.json new file mode 100644 index 00000000..100d84ea --- /dev/null +++ b/contract/test/image-local-data.json @@ -0,0 +1,1447 @@ +{ + "bgcolors": [ + "d5d7e1", + "e1d7d5" + ], + "palette": [ + "", + "ffffff", + "c5b9a1", + "cfc2ab", + "63a0f9", + "807f7e", + "caeff9", + "5648ed", + "5a423f", + "b9185c", + "b87b11", + "fffdf2", + "4b4949", + "343235", + "1f1d29", + "068940", + "867c1d", + "ae3208", + "9f21a0", + "f98f30", + "fe500c", + "d26451", + "fd8b5b", + "5a65fa", + "d22209", + "e9265c", + "c54e38", + "80a72d", + "4bea69", + "34ac80", + "eed811", + "62616d", + "ff638d", + "8bc0c5", + "c4da53", + "000000", + "f3322c", + "ffae1a", + "ffc110", + "505a5c", + "ffef16", + "fff671", + "fff449", + "db8323", + "df2c39", + "f938d8", + "5c25fb", + "2a86fd", + "45faff", + "38dd56", + "ff3a0e", + "d32a09", + "903707", + "6e3206", + "552e05", + "e8705b", + "f38b7c", + "e4a499", + "667af9", + "648df9", + "7cc4f2", + "97f2fb", + "a3efd0", + "87e4d9", + "71bde4", + "ff1a0b", + "f78a18", + "2b83f6", + "d62149", + "834398", + "ffc925", + "d9391f", + "bd2d24", + "ff7216", + "254efb", + "e5e5de", + "00a556", + "c5030e", + "abf131", + "fb4694", + "e7a32c", + "fff0ee", + "009c59", + "0385eb", + "00499c", + "e11833", + "26b1f3", + "fff0be", + "d8dadf", + "d7d3cd", + "1929f4", + "eab118", + "0b5027", + "f9f5cb", + "cfc9b8", + "feb9d5", + "f8d689", + "5d6061", + "76858b", + "757576", + "ff0e0e", + "0adc4d", + "fdf8ff", + "70e890", + "f7913d", + "ff1ad2", + "ff82ad", + "535a15", + "fa6fe2", + "ffe939", + "ab36be", + "adc8cc", + "604666", + "f20422", + "abaaa8", + "4b65f7", + "a19c9a", + "58565c", + "da42cb", + "027c92", + "cec189", + "909b0e", + "74580d", + "027ee6", + "b2958d", + "efad81", + "7d635e", + "eff2fa", + "6f597a", + "d4b7b2", + "d18687", + "cd916d", + "6b3f39", + "4d271b", + "85634f", + "f9f4e6", + "f8ddb0", + "b92b3c", + "d08b11", + "257ced", + "a3baed", + "5fd4fb", + "c16710", + "a28ef4", + "3a085b", + "67b1e3", + "1e3445", + "ffd067", + "962236", + "769ca9", + "5a6b7b", + "7e5243", + "a86f60", + "8f785e", + "cc0595", + "42ffb0", + "d56333", + "b8ced2", + "b91b43", + "f39713", + "e8e8e2", + "ec5b43", + "235476", + "b2a8a5", + "d6c3be", + "49b38b", + "fccf25", + "f59b34", + "375dfc", + "99e6de", + "27a463", + "554543", + "b19e00", + "d4a015", + "9f4b27", + "f9e8dd", + "6b7212", + "9d8e6e", + "4243f8", + "fa5e20", + "f82905", + "555353", + "876f69", + "410d66", + "552d1d", + "f71248", + "fee3f3", + "c16923", + "2b2834", + "0079fc", + "d31e14", + "f83001", + "8dd122", + "fffdf4", + "ffa21e", + "e4afa3", + "fbc311", + "aa940c", + "eedc00", + "fff006", + "9cb4b8", + "a38654", + "ae6c0a", + "2bb26b", + "e2c8c0", + "f89865", + "f86100", + "dcd8d3", + "049d43", + "d0aea9", + "f39d44", + "eeb78c", + "f9f5e9", + "5d3500", + "c3a199", + "aaa6a4", + "caa26a", + "fde7f5", + "fdf008", + "fdcef2", + "f681e6", + "018146", + "d19a54", + "9eb5e1", + "f5fcff", + "3f9323", + "00fcff", + "4a5358", + "fbc800", + "d596a6", + "ffb913", + "e9ba12", + "767c0e", + "f9f6d1", + "d29607", + "f8ce47", + "395ed1", + "ffc5f0", + "cbc1bc", + "d4cfc0", + "fe6612", + "fe6412", + "fe6b14", + "fff5cb", + "544e4a", + "01499c", + "1f3445", + "282728", + "d3ad78", + "f9e1ba", + "d5d7e1" + ], + "images": { + "glasses": [ + { + "filename": "glasses-hip-rose", + "data": "0x000b1710070300062001000620030001200201022301200100012002010223012004200201022303200201022301200420020102230320020102230120012002000120020102230120010001200201022301200300062001000620" + }, + { + "filename": "glasses-square-black-eyes-red", + "data": "0x000b17100703000623010006230300012302010264012301000123020102640123042302010264032302010264012301230200012302010264012301000123020102640123012302000123020102640123010001230201026401230300062301000623" + }, + { + "filename": "glasses-square-black-rgb", + "data": "0x000b171007030006230100062303000323016402230100032301640223102301230200012301650223015a01230100012301650223015a0123012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-black", + "data": "0x000b171007030006230100062303000123020103230100012302010323042302010523020103230123020001230201032301000123020103230123020001230201032301000123020103230300062301000623" + }, + { + "filename": "glasses-square-blue-med-saturated", + "data": "0x000b17100703000643010006430300014302010223014301000143020102230143044302010223034302010223014301430200014302010223014301000143020102230143014302000143020102230143010001430201022301430300064301000643" + }, + { + "filename": "glasses-square-blue", + "data": "0x000b17100703000607010006070300010702010223010701000107020102230107040702010223030702010223010701070200010702010223010701000107020102230107010702000107020102230107010001070201022301070300060701000607" + }, + { + "filename": "glasses-square-frog-green", + "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022301c004c00201022303c00201022301c001c0020001c00201022301c0010001c00201022301c001c0020001c00201022301c0010001c00201022301c0030006c0010006c0" + }, + { + "filename": "glasses-square-fullblack", + "data": "0x000b1710070300062301000623030004230101012301000423010101230723010106230101012301230200062301000623012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-green-blue-multi", + "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223018b018b0200010f02010223010f0100018b02010223018b018b0200010f02010223010f0100018b02010223018b0300060f0100068b" + }, + { + "filename": "glasses-square-grey-light", + "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022301c804c80201022303c80201022301c801c8020001c80201022301c8010001c80201022301c801c8020001c80201022301c8010001c80201022301c8030006c8010006c8" + }, + { + "filename": "glasses-square-guava", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-honey", + "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022301de04de0201022303de0201022301de01de020001de0201022301de010001de0201022301de01de020001de0201022301de010001de0201022301de030006de010006de" + }, + { + "filename": "glasses-square-magenta", + "data": "0x000b17100703000609010006090300010902010223010901000109020102230109040902010223030902010223010901090200010902010223010901000109020102230109010902000109020102230109010001090201022301090300060901000609" + }, + { + "filename": "glasses-square-orange", + "data": "0x000b17100703000614010006140300011402010223011401000114020102230114041402010223031402010223011401140200011402010223011401000114020102230114011402000114020102230114010001140201022301140300061401000614" + }, + { + "filename": "glasses-square-pink-purple-multi", + "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223019a019a020001200201022301200100019a02010223019a019a020001200201022301200100019a02010223019a030006200100069a" + }, + { + "filename": "glasses-square-red", + "data": "0x000b17100703000624010006240300012402010223012401000124020102230124042402010223032402010223012401240200012402010223012401000124020102230124012402000124020102230124010001240201022301240300062401000624" + }, + { + "filename": "glasses-square-smoke", + "data": "0x000b17100703000659010006590300015902660223015901000159026602230159045902660223035902660223015901590200015902660223015901000159026602230159015902000159026602230159010001590266022301590300065901000659" + }, + { + "filename": "glasses-square-teal", + "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223011c041c02010223031c02010223011c011c0200011c02010223011c0100011c02010223011c011c0200011c02010223011c0100011c02010223011c0300061c0100061c" + }, + { + "filename": "glasses-square-watermelon", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-yellow-orange-multi", + "data": "0x000b17100703000626010006130300012602010223012601000113020102230113034201260201022301260142011302010223011301260200012602010223012601000113020102230113012602000126020102230126010001130201022301130300062601000613" + }, + { + "filename": "glasses-square-yellow-saturated", + "data": "0x000b17100703000628010006280300012802010223012801000128020102230128042802010223032802010223012801280200012802010223012801000128020102230128012802000128020102230128010001280201022301280300062801000628" + } + ], + "accessories": [ + { + "filename": "01-hokkaido-crab", + "data": "0x0019161c0d0113010001130100011301000113010001130100011301000108011301080100011301000200051302000100011301000313010001130100" + }, + { + "filename": "01-hokkaido-melon", + "data": "0x0018131a0e014203000142012203420122010003220100" + }, + { + "filename": "01-hokkaido-sheep", + "data": "0x0018141d0e020001c1010e020003c10300010e0100010e0300040001c1010e020003c101000200010e0100010e0100" + }, + { + "filename": "02-aomori-jade", + "data": "0x0015141e090400010205000102050001020300010201000500017f0102011c01020101010004000101010001dd0102019b0100017f0700015203000b000b000b000b0002010900" + }, + { + "filename": "02-aomori-squid", + "data": "0x0018151d0f0300010802000100010102080101010002000208020001010100010801330200010001010123013301000101010101000101010001010100" + }, + { + "filename": "03-iwate-egg", + "data": "0x0018141b100100020101000101021e01010101021e0101010002010100" + }, + { + "filename": "03-iwate-fujiwara", + "data": "0x0017141c0f0100012303000200012302000200015d02000100026701cd0100046701310101013101670201" + }, + { + "filename": "04-miyagi-matsushima", + "data": "0x0016171f0c0600022901010100010104000301012903000b000b00025c0100025c01000129010003a205b106000300015c0100015c01290100025c0100030004b1010002b1010001a20a00020002a2010002290400" + }, + { + "filename": "04-miyagi-zunda", + "data": "0x0019131b10024e0100034e014e0101014e" + }, + { + "filename": "05-akita-fireworks", + "data": "0x0015171f0c060001c7010001c70200030001c101c7020001c1010001c10100050001c7010001c7020001c7020001c101c7050001c70100040001c7010001c101c7020001c10100014a030001c7020001c1010001c7014a0100014a01c7030001c703000100014a010001c1010001c7020001c702000400014a010001c1020001c101000300014a0100014a05000400014a0600" + }, + { + "filename": "05-akita-hatahata", + "data": "0x0018141b0e011005000100015d021001230110011001000101025d01010300015d0200" + }, + { + "filename": "05-akita-raspberry", + "data": "0x0018141c0e0200024e020001c0014e0100014e02c002b901c0014e02b906b9020002b90200" + }, + { + "filename": "06-yamagata-lafrance", + "data": "0x0019131c10010001840100010001840122022201c601de0222" + }, + { + "filename": "06-yamagata-shogi", + "data": "0x0018131b10010001230100010002230123020001000223" + }, + { + "filename": "07-fukushima-akabeko", + "data": "0x0019141b0f01230133010101230100013301230133010101330133010001330200" + }, + { + "filename": "07-fukushima-train", + "data": "0x0018131b0f015802570158010e0285010e0485016a0258016a" + }, + { + "filename": "08-ibaraki-bellpepper", + "data": "0x0018121b0f01dd01e101dd01dd010f01dd01dd010f01dd0100010f0100" + }, + { + "filename": "08-ibaraki-natto", + "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + }, + { + "filename": "08-ibaraki-rokkakudo", + "data": "0x0017171f09070001860400029107000186060004000161050001860300010001d00100026102000191060001d00200026403000186020001910100018602d401000358080002d4010003d408000a0002910200050002910700" + }, + { + "filename": "09-tochigi-gyoza", + "data": "0x0018141b0e0100013401000134010001340134012501340125013401250188022501880225010001340100013401000134" + }, + { + "filename": "09-tochigi-lemon", + "data": "0x0018131c100152020103c701c7015201c7010101c701010352" + }, + { + "filename": "09-tochigi-shimotsukare", + "data": "0x0019131b0f016001930150014901500187019301600193014901ce0187" + }, + { + "filename": "10-gunma-akagiyama", + "data": "0x0019171b0c0100014901bf020002bf020001bf014901bf0149011b014901460149011b014901bf011b01460b06" + }, + { + "filename": "10-gunma-yakimanjyu", + "data": "0x0017161e0e04000236011101220300023401230101010003000136011101340136010002000134011101230101020001000134013601340101013602000100011101340123013403000100012201360134040001220700" + }, + { + "filename": "11-saitama-icicle", + "data": "0x0015171c090e0104000101010001010100010101000101010001010100040001e0010001010100010101000101010001010100060001010100010101000101010001e0010006000101010001e001000101030006000101030001e00300060001e0030001e00300060001e00700" + }, + { + "filename": "11-saitama-soka-senbei", + "data": "0x0018131b0f0100016001e6010002e601110160011103e60100011101e60100" + }, + { + "filename": "12-chiba-inubosaki", + "data": "0x0018171f0d0128010001280100042802000700010102000700010102000600040f04000154010104b105000254010102b103000354010102b101000354010103b10300" + }, + { + "filename": "12-chiba-peanuts", + "data": "0x0018131b100100016001d8010002600260010001d801600100" + }, + { + "filename": "13-tokyo-tower", + "data": "0x0001181408030001e0010001e0010001a201e0010001e0010001e00300030003e0010001a201e0010003e00300030003e0010001a201e0010003e00300030001e0010001e0010002e0010001e0010001e00300020001e0020002e001a203e0020001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010002e0010001a201e0010002e0010001e00200020001e0010001e0020001a201e0020001e0010001e00200020001e0010001e0020002e0020001e0010001e00200020003e0010001e001a202e0010003e00200020001e0010002e0010001a201e0010002e0010001e00200010001e0020002e0010001a201e0010002e0020001e00100010001e0010002e0020001a201e0020002e0010001e00100010001e0010002e0020002e0030001e0010001e00100010001e0010001e0020001e002a201e0020001e0010001e00100010003e0020001e002a201e0020003e0010001e0020001e0010001e0010002a2010001e0010001e0020001e001e0010001e0020001e0010002a2010001e0020001e0010001e001e0010001e0010001e0020002a2020001e0010001e0010001e005e0020002a2020005e0" + }, + { + "filename": "13-tokyo-yamanote", + "data": "0x0018141c0f010001c0010101c00100010103bc010101c003bc01c00101010001bc01000101010001c0010101c00100" + }, + { + "filename": "14-ibaraki-natto", + "data": "0x001814190e012b0100012b0100012b01000100012b0100012b0100012b" + }, + { + "filename": "14-kanagawa-baybridge", + "data": "0x0018171e09030001010100015805000101010001580300010101a2015801c8030001a2010101a20158010001a201000101010001a2010001c8010001a201000101010001a201a20200010101a2015801a2010001a2010001a2010101a20158020101000b010300010101000158050001010100015803000101010001580500010101000158" + }, + { + "filename": "14-kanagawa-yacht", + "data": "0x0018141c100100015402000254014301000254024302000243037f0100" + }, + { + "filename": "15-nigata-edamame", + "data": "0x0019141b0e0200014e0200014e0100014e01c00100014e01c0011e01c00100011e01c00100" + }, + { + "filename": "15-niigata-riceear", + "data": "0x0018131d0f02000128010001000128020001c001280100012801c001000128010002c0020002c00200" + }, + { + "filename": "16-toyama-kutabe", + "data": "0x00031a17010d00060e06000b000a0e04000400010e04000e0e02000300010e04000f0e02000300020e0300100e01000300030e0200050e0501060e01000400070e0a01040e0500050e0101040e0201040e0101030e0400060e0401010e0201010e0401030e0300070e0c01030e0200080e0101030e0401030e0101030e01000a0e0101010e0101010e0201010e0101010e0101040e0100090e0101030e0201010e0101030e0101030e0100090e0701010e0401030e0a0e0701010e0401030e0a0e0501020e0501030e0a0e0c01030e0100090e0401040e0401030e0100020e0100020e0100030e01000401020e04010100030e0200010e0100020e0200010e040006010400010e01000500010e1300" + }, + { + "filename": "16-toyama-shiroebi", + "data": "0x0018131a0e0400010e010002ba010e01ba01ba0400" + }, + { + "filename": "16-toyama-tateyama", + "data": "0x0019171c090100017f020001a2017f0300027f01a20100017f027f0100017f01a2027f01a2027f01a2027f01a2017f01a2010001a2027f01a2027f01a2017f02a2017f01a2017f010004a2017f02a2027f02a2" + }, + { + "filename": "17-ishikawa-kotoji", + "data": "0x0018131c0e02000172020001000372010002000158020001000158010001580100015803000158" + }, + { + "filename": "17-ishikawa-kutani-kaga-gosai", + "data": "0x0018121a0f0118010f01c401a201e0018001c4010f0118" + }, + { + "filename": "17-ishikawa-oyster", + "data": "0x0017151c0e030001a0026b01a002000301016b01a0010001a0040101a001000401015d010001a00201015d01990200019901c301990400" + }, + { + "filename": "18-fukui-echizen-crab", + "data": "0x0019161c0d01140100011401000114010001140100011401000114010001080114010801000114010001a6010001b80414020001000114010001b80214010001b80100" + }, + { + "filename": "18-fukui-yokan", + "data": "0x0018131b0e02000385020003850200038502570385" + }, + { + "filename": "19-yamanashi-fuji", + "data": "0x0017171e0c0600020b03000500020b01eb010b0200030007eb01000beb0b58010007580300020001e0015802e00500030002e0030002a90100" + }, + { + "filename": "19-yamanashi-grape", + "data": "0x0018121b0e0200019a01220100019a0112019a019a0112016e01120112016e01450100" + }, + { + "filename": "20-nagano-kappa", + "data": "0x0018131a0e020f0201010f0100013e0123013e01000100023e022a" + }, + { + "filename": "20-nagano-oyaki", + "data": "0x0018121b0e01b0011b02000157011b01b0011b0157028a0157010002570100" + }, + { + "filename": "21-gifu-gero", + "data": "0x0018141c0e020001010100010101000100010101000101020001c8013d0101013d010101c801c8043d01c8010004c80100" + }, + { + "filename": "21-gifu-gohei-mochi", + "data": "0x0019141b0d020004110100020101600111011a0111010102000260021a0100" + }, + { + "filename": "21-gifu-sarubobo", + "data": "0x0018131d0f010002230100012302440123017102440171010002230100010002230100017102000171" + }, + { + "filename": "21-gifu-ukaibody", + "data": "0x0015171f090592075402920592075402920592075402920592075402920292010002920754029202920100029207540292029201000bad0292010001ad012601ad012601ad012601ad012601ad012601ad02920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad012602920100012601ad012601ad012601ad012601ad012601ad0126" + }, + { + "filename": "22-shizuoka-fuji", + "data": "0x0017171d0c090002e0020003e0020001010300060002320101020003e0020005320100040001e10632020001dd04e1043204dd07e1" + }, + { + "filename": "23-aichi-oguratoast", + "data": "0x0018131c0e0293028401930193028401b80193019301b8028401930193018401b8018401930593" + }, + { + "filename": "23-aichi-tebasaki", + "data": "0x0017131a0e010001480300014804000548010003480100" + }, + { + "filename": "24-mie-iseebi", + "data": "0x0017151e0d02000132020001320200010001320100023201000132010001000132010002320100013201000132021802320218013201320100011802b40118010001320100011801000232010001180100030002b40300020001180132011801320200" + }, + { + "filename": "24-mie_mochi", + "data": "0x0019121a0f018401b80184018401b80184" + }, + { + "filename": "25-shiga-funazushi", + "data": "0x0018151a0e01420100013701000137020001420100014201000137010001370142010001420100014201000142" + }, + { + "filename": "25-shiga_hieizan", + "data": "0x0018171b090700020f05000500070f0200020f01000b0f028d01000b8d" + }, + { + "filename": "26-kyoto-daimonji", + "data": "0x0017161d0d0300011405000200011401490114040003140149031402000749020002000114014901140400021401490100014904140249030003490100" + }, + { + "filename": "26-kyoto-yatsuhashi", + "data": "0x0018131a0e02000157020001000157018601570100015702860257" + }, + { + "filename": "27-osaka-cheesecake", + "data": "0x0018151c0e01000185032b018501000185012b0185012b0185012b01850157052b015707570100015701b7015701b701570100" + }, + { + "filename": "27-osaka-jinbezame", + "data": "0x0018161c0d010001a2020001a20400010601a2010002a20400020001a2010602a20106020002a2012302a20106012302a202000206025f01060200" + }, + { + "filename": "28-hyogo-akashiyaki", + "data": "0x0019141b0f02000260010001000160015d016001ae015d016002ae0160" + }, + { + "filename": "28-hyogo-tower-museum", + "data": "0x0017171e0c020001010800020001490200013f0500020001c20200026f0100013e0200020001490100013e016f023e0300020001490100043e030002a201cd01a2013f01a2023f03a2010001a201cd0100013f0200013f010001a2010001a201cd0100013f01a20100013f010001a20200" + }, + { + "filename": "29-nara-kakinohasushi", + "data": "0x0019141c0f010001c0011b01c0011b0100011b02c0011b019501a2019501a2010002cc019701cc0100" + }, + { + "filename": "29-nara-narazuke", + "data": "0x0019121a0f03b801b8010001b8" + }, + { + "filename": "30-wakayama-mikan-kaki", + "data": "0x0018121a0f03c201c201e101c203c2" + }, + { + "filename": "30-wakayama-nankoume", + "data": "0x001a151b0d024e010002a60100029c024e010002a60100029c" + }, + { + "filename": "33-oakayama-mamakari", + "data": "0x0019151b0e01a2019d01a2019d01a201000157019d01a2019d01a2019d01060100050601000157" + }, + { + "filename": "33-okauama-muscat", + "data": "0x0018141c0f0200014e010001ac0100014e01c0014e0100014e01c0014e01c0014e01c0014e01c0014e0100010001c0014e0200" + }, + { + "filename": "33-okayama-denim-jacket01", + "data": "0x0015171f090354049201000492025404540392010103920354055401920354019204540e540754010106540a54019201010192015402540100075403920154025401000454010102540392015402540100085401920254025401000b5402540100045401010654" + }, + { + "filename": "33-okayama-denim-jacket02", + "data": "0x0015171f0903540392040003920154045402920400029202540554019204000192035406540400045405540101040004540654040001540192010101920254010003540400015403920254010002540101040001540392025401000354040002540192015402540100035404000454025401000254010104000454" + }, + { + "filename": "33-okayama-denim-jacket03", + "data": "0x0015171f09035302540700025403530254070002540453025405000254015306530500035306530500010102530653050003530253010003530500010102530253010003530500035302530c0002530c0002530c00" + }, + { + "filename": "33-okayama-kibidango", + "data": "0x0018131b0f010002570100015703eb04eb010002eb0100" + }, + { + "filename": "33-okayama-momotaro", + "data": "0x00021914050200020c10000100030c1000040c1000030c0201040c0500040c020003000101060c0374060c010002000174080c0174080c01000274050c0301016a0301050c010001740101040c0301036a0301040c01000201040c0301010f016a010f0301040c01000201030c0b57030c01000274030c0b57030c010001740157030c0b57030c010012570100010012570100010012570100020001741057010003000557040c0757010003001057010004000e570200" + }, + { + "filename": "33-okayama-peach02", + "data": "0x0018151c0e0300015f03000200035f02000100055f0100011d025f01e5025f011d0100011d015f01e5015f011d0100" + }, + { + "filename": "33-okayama-retainer", + "data": "0x0015171f09054d010105040101024d054d010105040101024d0204034d010105040101024d0204034d010105040101024d02040100024d010105040101024d02040100024d010105040101024d02040100024d010105740101024d02040100024d010105740101024d02040100024d010105540101024d02040100024d010105540101024d02040100024d010105540101024d" + }, + { + "filename": "34-hiroshima-battleship", + "data": "0x0019171f09060001d70700030001d7010002d7070001d7020004d7010001d7010001d7020001d702d701000ad70100024801000b4802a201000ba202a201000ba2" + }, + { + "filename": "34-hiroshima-lemon", + "data": "0x0019131c0f0100022901220429042903290100" + }, + { + "filename": "34-hiroshima-oyster", + "data": "0x0018131c0e020001d901060101010001060288010101e9038801010106020c0101010003010200" + }, + { + "filename": "34-hiroshima-rice-scoop", + "data": "0x0018131c10036003600360010001600100010001600100" + }, + { + "filename": "34-hiroshima-shrine", + "data": "0x0018171f09040008770200050006bf0300060001bf020001bf0400050006bf0300060001bf020001bf0400027b0100037b01bf027b01bf047b028d01000b8d020601000b06" + }, + { + "filename": "34-hiroshima-wani", + "data": "0x0017141d0d04560300015602000156030003000156030001000256040003000456070003000456" + }, + { + "filename": "35-yamaguchi-kintaikyo", + "data": "0x001b171f09010001ca020002ca010002ca010002ca010001ca01ca020001ca020001ca020001ca020001ca01000188013f01000188023f0188023f0188023f0188013f023f01000b3f023f01000b3f" + }, + { + "filename": "35-yamaguchi-motonosumiinari", + "data": "0x0017171f090e53055303ad03880253010f01e101bf0100025302ad028801bf0288020f02e1010003530288011b01bf011b030f02e1010001bf0253021b020f01bf030f02e1010001e101bf021b040f01bf021b02e1010002e101bf040f01bf031b02e1010003e104bf041b02e1010006e1051b" + }, + { + "filename": "35-yamaguchi-white -snake", + "data": "0x0017151e0e060001bf0400020101000200010101af02010100010001010500010001af030102000500010101000201030001af0100020001af02010200" + }, + { + "filename": "35-yamaguhchi-tsunoshima-big-bridge", + "data": "0x0015171f090e3c0e3c041b02e101e0071b035603e1015601e0065602560100045601e0065602560100045601e0065602560100045601e0065601e101560100045601e0065602e10100045601e0065602e1010001e1035601e0065602e1010003e103c8051b" + }, + { + "filename": "36-tokushima-awaodori", + "data": "0x0018131b0f0220015a01010100022301000100025f01000100025f0100" + }, + { + "filename": "36-tokushima-citrus-sudachi", + "data": "0x0018131c0e0100035c0100015c010101c70101015c015c01c7010101c7015c015c010101c70101015c0100035c0100" + }, + { + "filename": "36-tokushima-narutomaki", + "data": "0x0017141c0d02000301020001000101034f010101000101014f0301014f01010101014f0101014f0101014f01010101034f0101014f0101010005010100" + }, + { + "filename": "37-kagawa-oliveoil", + "data": "0x0017121c0f010001ac01000100015c0100035c015c01c6015c015c01c6015c035c" + }, + { + "filename": "38-ehime-dango", + "data": "0x0018131c0e0300021b020002a6011b0100027001a60100010001570170020001570400" + }, + { + "filename": "38-ehime-juice", + "data": "0x0018131f0c02000106018d01060200010602000140030001060140040601010106010003060100010606000142060001420600014206000142" + }, + { + "filename": "38-ehime-mandarin-orange", + "data": "0x00061a140604000c4204000200084201e1074202000100024201250f4201000242012511420142012512420142012512421442144214421442144214420100054203b30a42010002001042020003000e420300" + }, + { + "filename": "38-ehime-turt", + "data": "0x0018141c0e0100045701000157037002570157017001570270015701570270015701700157010004570100" + }, + { + "filename": "39-kochi-seared-bonito", + "data": "0x0019131b0f0378010001780294017801780394" + }, + { + "filename": "40-fukuoka-mentaiko", + "data": "0x0019171b0902bf0100016a02bf0100026a01bf0100016a01bf016a026a0100036a0100016a01bf016a0100036a02bf0100026a01bf0100036a0100026a01bf" + }, + { + "filename": "40-fukuoka-umegaeda", + "data": "0x0018131c0e010003c1010002c1019702c101c1019701c1019701c101c1029702c1010003c10100" + }, + { + "filename": "41-saga-saga", + "data": "0x0017151d0e010002560200015601000100015602000156010001560256020001560100015607000156040001560100015601000156010001560100015603560100015601000156" + }, + { + "filename": "42-nagasaki-castella", + "data": "0x0018131b0f04ae0428042804ae" + }, + { + "filename": "42-nagasaki-gunkanto", + "data": "0x0016171f09020001010b000e00010001010c00050002620200016204000400036201000262040001000162010008620300026201000862010001620100026201000b620a000254010001540100015402000254010001540600" + }, + { + "filename": "43-kumamoto-hitomojiguruguru", + "data": "0x001913190e014e01e101c001e1014e" + }, + { + "filename": "43-kumamoto-ikinaridango", + "data": "0x0018131b0e01000351010001d401b8028401d401d40129012a012901d4010003d40100" + }, + { + "filename": "44-oita-yaseuma", + "data": "0x0018121a0e026002880288026002600288" + }, + { + "filename": "44-oita_toriten", + "data": "0x0019121b0f01000293039301930200" + }, + { + "filename": "45-miyazaki-mango", + "data": "0x0018131a0e0100014601e601460100014601e6014601e601460100014601e601460100" + }, + { + "filename": "45-miyazaki-takachihokyo", + "data": "0x0017141c0d020601e1013d03e10127010501060105013d02e10127010501270106013d02e10127010501270106010101050127012701050201013d010501270127053d0127" + }, + { + "filename": "46-kagoshima-senganen", + "data": "0x0016171f0907000201050005000101019d0500020103000461070001000161010006610500016101dd010008dd016101dd0161027b01000b7b029501000595067b016a010f0100010f0158036a0495027b02580100020f046a035f0295025801000158030f016a010f035f0258" + }, + { + "filename": "46-kagoshima-shochu", + "data": "0x0017121c0f0100012301000100013401000334017f01b7017f01b7027f0334" + }, + { + "filename": "47-okinawa-fish", + "data": "0x0017171d0d012401000224060001000224010001240500012401000224010001280100022801000600022801000128019b0100029b010001280100022801000100029b0100019b0500019b0100029b0600" + }, + { + "filename": "47-okinawa-satokibi", + "data": "0x0018161c0d0100011e010001c00100011e0100011e0100010001c00100011e010001c00100011e01c001c0011e010001c00100011e010001c00100010001c0010001c0010001c00100011e01000100011e0100011e0100011e0100011e0100" + } + ], + "heads": [ + { + "filename": "01-head-01-hokkaido", + "data": "0x00021f1a0109000154140008000354130006000154010004541200090004541100090005541000090006540e000154090007540c000254090009540600015403000154010009000c540200025402000154020009000f540200015403000800105406000700125404000154070012540100025402000300025403001254040004000254010011540600040010540a00030010540b00020010540c000100035401000354020007540d000100025403000154040005540e00010002540a0003540e00020003540a0001540e0002000454180001000354010001541800010002541b00" + }, + { + "filename": "01-hokkaido-goryokaku", + "data": "0x00021b16040b0002540a000a00045409000900025401c001dd025408000800025401c001dd01c001dd025407000700035401dd02c001dd0254018706000500035402c001dd03c001dd0187035404000300035401c0015401c002dd03c0018702dd045402000100035401c002dd01c001dd04c0018703c002dd04540100025401c001dd02c001dd01c0019202c0018706c002dd02540200025401c001dd02c0019202c0018707c001dd025401000300025401c001dd02c00287029204c002dd01c00254010003000187015402c001dd03c0029203c001dd02c0025402000200015402870154018701dd08c001dd01c0025403000100015401dd01c0028701c001dd07c001dd01c002540400015401c001dd01c00187025401c001dd06c001dd01c0025404000100025401c0025401c001dd02c004dd02c001dd01c0015404000300035401c001dd01c001dd04c001dd01c001dd01c0025403000400025401c002dd01c0045401c002dd01c0025403000400025401dd02c0065402c001dd025403000500055404000554040005000354080003540400" + }, + { + "filename": "01-hokkaido-ishikari", + "data": "0x00031c15040400067f0200017f0b000200037f0400017f0300027f0100017f07000100017f0200037f0200010d037f02e1010003a201e004000200027f0100017f020d06e103a203e004000400020d015702e101a2019501a201e103a2010d02e0019504000300020d015702a2019501ce029704a204e0010d03000200020d019501a201ce029703ce03a205e0020d02000100020d015704ce01cd02ce01cd02a206e00157020d01000100010d0101019501a207ce060101e0014e0257010d0100010e010d010109ce0757034e010d010e010e010d01220957015d0657034e010d010e010e010d03010e570149024e010d010e0100010d0301015701f30c570249014e010d01000100010d01220101015701490d570149014e020d01000200020d034901570434025705010157020d02000300020d01490157023401af033405010157020d03000400030d033402af01340501020d04000600020d05340257030d060009000334030d0900" + }, + { + "filename": "01-hokkaido-tokeidai", + "data": "0x00011b14060a00010b0a00090002a101370900070002a1013701e9013701a10137070007000237030102370700080001e901010196010101e908000800015d01960201015d0800080002e9013702e90800080001a10137010b01a101370800013702a1023703a1020b015d020b023701a1033702a102a1013702a10237010b01e903ca01e9010b01a1023702a10237023702a10137010b095d010b013701a1013702a1013701a10237010b0be9010b013702a10137040b0d5d040b010001e9016f03e9016f03e9016f03e9016f03e9016f01e901000100015d016f035d016f035d010b035d016f035d016f015d01000100080b013701a10137080b01000100035d010b035d02a10337035d010b035d0100010001e9016f01e9010b01e9016f02e9030b02e9016f01e9010b01e9016f01e901000100015d016f015d010b015d016f025d0396025d016f015d010b015d016f015d0100010003e9010b04e9030b04e9010b03e90100" + }, + { + "filename": "02-aomori-apple", + "data": "0x00051915080800011b080004000455011b045504000200045502a6011b02a60455020001000655011e011b011e025501010355010001000a5501010455010011551155115511551155115511550100025501a60c55010001000f5501000200065502a60555020003000b550300050007550500" + }, + { + "filename": "02-aomori-dogu", + "data": "0x00021814080400080a04000400020a0236010a0236010a040004000136030a01ca020a013604000600020a0136010a06000500010a04ca010a05000500030a01ca020a0500010001ca010a01ca010a01ca040a01ca010a01ca010a01ca0100060a01ca010a01ca020a01ca040a01ca010a01ca010a01ca018a040a01ca018a010a01ca010a01ca060a01ca010a01ca070a01ca090a01ca040a01ca0100010a01ca010a01ca010a01ca010a01ca020a01ca010a01ca010a01000500010a01ca030a01ca0500050001ca020a018a010a01ca05000500010a01ca010a01ca020a0500050006ca05000500060a0500050001ca040a01ca05000600010a02ca010a0600" + }, + { + "filename": "02-head-02-aomori", + "data": "0x00021b17040d00015409000c0003540400015403000c0005540100025403000c00085403000b00055401000254040005000154010001540300045402000254040004000554020001540500025404000500045407000354040006000454020001540300035404000500055402000254020003540400050005540200035401000354040005000f54030004001054030002001254030001001354030015540200010015540100010005540100055401000a5401000154060003540300085401000e0004540100015403000e00025407000e0001540800" + }, + { + "filename": "03-head-03-iwate", + "data": "0x00021717090900015404000600055403000200015401000754030002000a54020001000a54030001000b54020002000b5401000d54010001000c5401000d54010001000d5401000d540d5401000e540c54020001000c5401000c54020001000c54010001000a540300020006540600040004540600050001540800" + }, + { + "filename": "03-iwate-moriokamen", + "data": "0x00031d15040b00012303bf0a000900012302bf020103bf08000900012301bf010105bf08000800012303bf03a003bf07000800012302bf04a003bf07000800012302bf05a002bf07000900012302bf02a003bf0800040001060401010006bf010004330400020001060201034701930201010003bf02330401023302000100010601010193054702930101020001330401015703010133010001000106010101930347012901930129019301010200013302010257012201dd015701010133010001060101043704290293010101330201015701dd012201b80122015702010133010601010337062901220101013301010257012201b8018501b80257010101330106010102370101011e04290222010101330101025701b8018501b80185012201570101013301060101013701930201042902220101013301010257012201b80185012201dd0157010101330100010601010193052902930101020001330201015701dd0122025701010133010001000106010102930397019303dd0200013303010257030101330100020001060201019302970193020104000233040102330200030002060401080004330400" + }, + { + "filename": "03-iwate-nanbutekki", + "data": "0x00031b14060700050e09000400030e0500030e06000300010e0b00010e05000200010e0d00010e04000200010e0d00010e04000200010e0600010e0600010e04000300010e0100090e0100010e050003000d0e050002000f0e04000100110e03000100110e0100020e150e140e0100140e01000100130e01000100050e0163010e0163010e0163010e0163060e020002000f0e040003000d0e0500" + }, + { + "filename": "04-head-04-miyagi", + "data": "0x00031c1808060001540a00025401000500045408000254010003000954040002540100015404000754030001540100025402000500085401000454020004000d54030003000f54020004000d54030003000f54020004000d54030004000d54010001540100030008540100015403000254020003000954050001540200020009540900020008540a00020008540a00010008540b0009540b0009540b00020007540b00050003540c00060002540c00" + }, + { + "filename": "04-miyagi-datemasamune", + "data": "0x00011d150517000128150002280100120002010128030008000192010e0192010e0192010e032801010600032803000192010e0192010e019201010328010e080003000528030103280192010e019207000100020e01000192010e0192020103280192010e0192010e0192010e0100020e03000100010e0100010e0192010e0b92020e0100010e03000200020e0292030e0192010e0192010e0192030e0192020e04000200030e0192020e0192020e0192020e0192020e0192020e04000300010e01920188010e0192030e0192030e0192020e019205000300010e01920c880192010e05000300010e01540c880154010e05000300012801540c8801540128050002000128010e01540788016004880154010e012804000200020e01540788016004880154020e040001000128020e01540788016004880154020e012803000100030e01540588026004880154040e03000200030e01540388042303880154030e04000400020e025406880254020e0600080006540a00" + }, + { + "filename": "04-miyagi-tanabata", + "data": "0x00041c160406000de1010001bf0300050001e1010001010400010104000101010002e1010001560100040001e1020001010400010104000101020001c701e10200030001e102000356020003bf020003c7030001bf0100020001e10200015601bf015601bf015601bf01c701bf01c701bf01c7015601c7015601c701000101010001c7020001e10200055605bf05c7020001560100010001e10300055605bf05c70400010001e104000356020003bf020003c7050001e10400050605ba05e9040001e10400050605ba05e9040001e10400050605ba05e9040001e105000356020003bf020003c7050001e105000356020001bf01c701bf020003c7050001e1050001bf015601bf020003bf020001c7015601c7050001e10500015601bf0156020001bf01c701bf0200015601c70156050001e10500015601bf0156020001c701bf01c7020001c7015601c7050001e1050001bf015601bf020001bf01c701bf020001c7015601c7050001e10500015601bf0156020003bf0200015601c70156050001e10500015601000156020001c7010001c7020001c7010001c70500" + }, + { + "filename": "05-akita-akitainu", + "data": "0x00031a14021100012b06001000022b010105001000032b020103000f00042b01010123020101800e00042b06010c00062b0301025f01000b00072b0501015f0a00092b0201030009000b2b010103000200040103000b2b0101030001000201032b010101000b2b0201030002010d2b0101032b010104000201022b0200082b0301022b010104000201032b0100072b020101000101022b050002010b2b020101000101022b050001000201032b0101052b020102000101022b05000200040101000101042b010103000201012b05000800032b0301030003010400" + }, + { + "filename": "05-akita-magewappa", + "data": "0x00041a15040200108e0400010012de0300148e020014de02000188128e0188020001de0188018e02de018e04de018e03de018e02de018e018801de0200010001de0788016001880184068801de0300020007de01d801de018406de04001600030012c90100020014c90200018812c90188020001de0888016001880184078801de0200018808de01d809de0188020001de0888016001880184078801de0200018808de01d809de018803000888016001880184078801000400018e01de018e02de018e04de018e02de018e01de018e0200" + }, + { + "filename": "05-akita-namahage", + "data": "0x00021a16040700014109000141040007000241070002410400080002410500024105000600062301000523040005000123060e0123050e0123030004000123010e0623010e0523010e0123020003000123010e0123010e0123040e0123040e0223010e0123010003000123010e0123010e022307410323010e0123010003000123010e0123010e014103230318032301410123010e0123010003000123010e0123010e034102230141022303410123010e0123010002000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e01410201022301010141010102230201010e0123010e012302000123010e0123010e011801410401014104010141010e0123010e012302000123010e0123010e0118034101180341011802410118010e0123010e012302000123010e0123010e01410318054102180141010e0123010e012301000123010e0123010e01230141012302410218014102180141012301410123010e0123010001000123010e0123010e0123014101230101012301cf012301cf012301cf0101012301410123010e0123010001000123010e0123010e01230118020101cf012301cf012301cf0123020101180123010e0123010001000123010e0123010e012301410101012301cf041801cf0123010101410123010e0123010001000123010e0123010e012301000141021804410218014101000123010e01230100012301000123010001230c000123010001230200" + }, + { + "filename": "05-head-05-akita", + "data": "0x00031617090300055403000254040009540400095403000a5403000954010002000a540100015401000a5401000d5403000854020004000854010004000754020004000754020004000754020004000654030003000754030003000754030002000954020002000a540100040007540200050007540100070003540300" + }, + { + "filename": "06-head-06-yamagata", + "data": "0x000318180a05000254070005000454050004000754030004000854020004000954010003000b5402000c5401000d5401000c5401000e5402000c5402000c5404000954010004000854020004000854020002000a540200020009540300020008540400020007540500020007540500030006540500060003540500" + }, + { + "filename": "06-yamagata-hanagasa", + "data": "0x00021b170508000641080006000241065702410600040002410a5702410400030001410a5701320141025701410300020001410157013201410132025701c603570132024101320257014102000200014101570441025701dd025703410132014101570141020001000141015701320341025701dd045701410132014103570141010001000141025701410132035702dd015701dd035701c60357014101000141065701dd015704dd085701410141035701c6035702dd0341085701410141075701dd024101320241035701410132025701410141035701410357024101320141013201410257044101570141014102570132024102570332024101320141015702410132014101570141014102570141013201410132025702410232014102570132024101320157014101000141015701320241013203570341015701280257023201570141010001000141025701410132075701280123012804570141010002000141035701c6075701280123012802570141020002000141065701320341013201570128012301280157014102000300014105570141013201410132035701280157014103000400024104570141013204570241040006000241065702410600080006410800" + }, + { + "filename": "06-yamagata-zaookama", + "data": "0x00041d14040a00072702010227040007000b2703010127030005000e27024c0101012702000400022701010c2704010127010003000127020103270a010127024c0101012701000200020102270301073004010127030101270100010102270201019b0b3002010127024c01010127022703010e30020101270101022702010235103001010127010102270235123001010127010102270201019b113001010127010102270101014c010111300301012701000101014c02010f3003010127020001000201014c01010e3003010127020002000101014c03010a300201014c01010127030003000201014c0b01014c0101014c0101040005000401014c0101014c0101014c0301014c01010600" + }, + { + "filename": "07-fukushima-peach", + "data": "0x00041d16040500020f12000300030f0197010f0100030f0d000100060f0297030f0100020f0a000100030f05b90297030f0197010f09000100020f04b9011902b9020f0297030f0100020f05000100020f04b9011903b9040f0197010f0100030f04000100010f05b9011903b90a0f0100010f0200020f04b9011904b9060f0297050f0100020f04b9011903b9080f0197010f0197030f0100030f02b9011904b9040f06b9010f0297020f040f05b9040f05b9011902b9040f0d0f05b9011902b9040f01000b0f06b9011903b9030f0100020f0100080f06b9011903b90100020f0400010f0100020f0100030f06b9011903b90100010f01000600020f0100050f03b9021903b903000a00030f04b9011903b904000a00010f020003b9011904b90400100003b90600" + }, + { + "filename": "07-fukushima-tsurugacastle", + "data": "0x00011a140309000162050001620700080001620700016206000900078907000900078907000800098906000900020103080201070007000b89050006000d89040007000201017f0108010101890101017f0108020105000600068901010689040005000689010101a301010689030006000101017f010107890101017f01010400050005890201017f0201058903000300019406890501068901940100020002940101027f0201027f0301027f0201027f01010294020001870c8901010689018702000c890301068902000301027f0201027f0101018905010189027f02010d89050105891701" + }, + { + "filename": "07-head-07-fukushima", + "data": "0x00051b17030e00035407000e0006540200015401000800035403000654020002540700055402000a5406001254050013540500135403001554185401001754010017541854020016540200075402000d540100065406000a540100010003540a00095401000e00095401000f000354010002540300100001540700" + }, + { + "filename": "08-head-08-ibaraki", + "data": "0x0003191807090001540300015404000900025401000554010009000754020009000754020008000854020008000754030008000754030008000654040008000654040007000754040004000a54040002000b54050002000b5405000e5404000e54040002000c54040003000c54030003000c54030004000c5402000700045403000254020010000154010011000154" + }, + { + "filename": "08-ibaraki-anglerfish", + "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + }, + { + "filename": "08-ibaraki-hananuki-ravine", + "data": "0x00041c1502040001c006000136019701c601d80197013602bf0700020001c0060001bf01000136019701d801bf01970136060001bf0200060001bf010001bf0100029704d802970800040002c604000136019701d8019702d801970136020002bf0400070001c601000197013601d80188019701bf018801d8013601bf030001c0030009000136019702d8029702d801970136010001c0020002c00100010002c0020001c0010001bf01000136019701bf018802970288019701360700030001c0010002bf01000197013603d8029703d8013601970600080002970388029703880297020001c6010001bf010007000136029703d8029702d801bf019702c6030002c6010001bf05000136019702bf02d8019701c604d801970136010001bf0300010002bf040001360197028801bf01880297028802bf01970136050004bf0200029702bf03d8029702d801bf02d802970400010002bf02000136029705d8029705d802970136030005000136019701d802bf02d802bf019701d802bf03d801c60136010001bf01000400019701360197038802bf0188019702bf048801c60197013602bf0100040001970136019706d8029706d8019704bf170002bf0100" + }, + { + "filename": "08-ibaraki-rocket", + "data": "0x00041917030f0007010e000201015505010d0001260101015506010c000226015507010b00052606010a00072605010700037f082604010600047f0a26010101000500057f0b2601000400057f0b2602000300057f0b26030002000155047f0b260400024201000155027f020109260500040001550100030107260600030001420100020d0301032601290126017f060002000142010001730100020d03010326017f0700050001420100010d0100027f0201017f08000600017301000155027f0101017f0900030001730200024201000155027f0a000a0001550b00" + }, + { + "filename": "09-head-09-tochigi", + "data": "0x000418160709000454040007000854020005000b54010003000d54010002000e54010001000f54010002000e54010001000f54010001001054105401001054010003000d54010002000e54010002000e54010002000d54020001000e54020002000954010001540400030006540800060003540800" + }, + { + "filename": "09-tochigi-sanzaru", + "data": "0x00041e1401050003340500043404000434040003000634030006340200063403000300023401af013401af02340100023401af013401af063401af013401af013403000200013401b805af033405af043405af013402000200013401b801af010e01af010e01af01b8013402af010e01af010e02af023402af03b801af01340200020002b805af01b8023404af01b801af01340135013405b803000300023401af020e01af01b8023401af04b80135033402b8010e02b8013402000200033403af0434013504b801340135033402af04340100010001340135033403af02340135023401b8013401b8053403af01350334010001340135033403af0100053401af053404af013401350234010002340135023403af0100033404af043404af013403000100063402af0100023405af0135033403af01340400010003340235013401af0234020005af0135043401af013405000200013401350734010005af053401350234040002000b3403af013506340135023403000100063401350534013501b801af01350334013505340300023401000134013502b8010002b8053401b8013502b80100013402b8013402b80300" + }, + { + "filename": "09-tochigi-strawberry", + "data": "0x000416150602000122020001c0010001c008000300012204c003710500020001c0022204c004710300010005c00571010102710200020002c006710101017101010171020002c0017101c0077101010371010001000e71010001000f7101000f7101000f7101000f7102000e7102000d71010003000c710100040004710146027101460371010005000471024603710200070007710200090004710300" + }, + { + "filename": "09-tochigi-toshogu", + "data": "0x00031f1402060001c70f0001c70600070003c7022901c7012908c70700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701e3012701e3012701e3012701e3019601e30700070001e3019601e3012701e3012701c7012901c7012701e3012701e3019601e30700060002c702e3012701e3012701e3012701e3012701e3012702e302c706000500012902e301c7012901c701e302c7015402c701e303c702e301c705000600016d01520141016d0123016d0123016d0123016d0123016d0123016d01410152016d0600050001290100016d01520141016d0123016d0123016d0123016d0123016d01410152016d010001290500090001c7027f01c7037f01c7027f01c70900070002c70154014101c70154014101c70141015401c70141015402c70700010001e301270400016d015201410123016d0123016d0123016d0123016d012301410152016d0400012701e3010001e3012701e30500016d0123016d0123016d0123016d0123016d0123016d0123016d050001e3012701e30154015201c70500017f01c7027f01c7037f01c7027f01c7017f050001c70152015402c70141012901c7012903c7017f01230141017f0300017f01540123017f02c7012903c7014102c701c70152014101e3012701e3012701e30127017f026d017f0300017f026d017f012701e3012701e3012701e3014101c701520341027f01c7027f01c7017f01c70141017f0300017f014101c7017f01c7027f01c7027f034101c701230141027f01c7027f01c7017f01c70154017f0300017f015401c7017f01c7027f01c7027f0141012301c7" + }, + { + "filename": "10-gunma-kusatsu", + "data": "0x00041d15030600020d0200020d0200020d0200020d06000400013201da028802da028802da028802da028801da013204000400013201da023202da023202da023202da023201da01320400050001da025702da025702da025702da025701da0500060002570200025702000257020002570600060002570200025702000257020002570600030003e6025702e6025702e6025702e6025703e6030003000193013e018d0257023e0257023e0257023e02570101013e0193030003000193013e0101033e018d023e018d033e018d033e018d013e0193030003000193013e028d053e018d043e028d023e018d0193030003000193023e018d013e018d013e018d023e018d013e028d013e018d033e0193030003000193018d053e018d023e018d053e018d013e018d0193030003000193013e018d033e018d063e018d013e018d023e010101930300030001930101033e018d033e018d023e018d023e018d013e018d013e0193030003000193033e018d033e047f018d013e018d043e019303000100027f0193033e018d033e017f023e018d033e027f023e027f0100017f017f0200017f03e6017f0ce6027f01e603000100027f0100027f1400" + }, + { + "filename": "10-gunma-negi", + "data": "0x00031915070400014c030001dd0400014c040001dd0300024c020002dd0200024c030001dd03dd0100034c03dd0100034c010003dd04dd034c04dd034c03dd0100010003dd034c04dd024c04dd0100010003dd034c04dd024c03dd0200010004dd024c03dd024c04dd0200020003dd024c03dd024c03dd0300030002dd024c03dd024c02dd0400050001dd014c02dd024c01dd06000500074e06000600054e0700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c1010101c1010101c10700060001c103ca01c10700060001c1010101c1010101c107000700010101c101010800" + }, + { + "filename": "10-head-10-gunma", + "data": "0x00021c17060c00015409000a00035409000a000454080009000854050009000754060007000a54050005000b54060002000e54060001000f5406000100105405001254040011540500115405000100025401000d54050004000c54060004000e5404000300095401000754020004000754070003540100030008540a000154040005540d00040003540f00040002541000" + }, + { + "filename": "11-head-11-saitama", + "data": "0x00071c1403080002540f00080005540c000700095401000254060007000e54040005001154030003001354030001001654020017540200185401001854010001000554010012540300025405000f540d000c540e000254020002540500" + }, + { + "filename": "11-saitama-tokinokane", + "data": "0x000315140a050002ab0400030006ab020001000aab020001d701b801000292010001b80200010001d7010001b801000292010001b80200038601b801000292010001b80200030001b8040001b80200030001b8048501b80200030001b8048501b80200020008ab010001000aab030001b8048501b80200030001b8048501b80200030001b8048501b80200020001b8068501b80100020001b801b601a401b601a401b6018501b80100020001b8068501b80100020001b8068501b80100" + }, + { + "filename": "11-saitama-whitetiger", + "data": "0x00031a1406020002010b00020103000100040109000401020001000101015f020109000201015f010102000201025f020107000201025f01010200090103e3060102000100030101e3050101e3050101e3010102000200010101e3040101e3030101e3040101e302000200040101e3020101e3010101e3020101e303010200020010010200020001e30e0101e30200020010010200020010010200020001e30e0101e30200020010010200037f01e3017f01e303010320030101e3017f01e3027f02000801022006010200037f01e3017f01e3010101e3020101e3020101e3010101e3017f01e3027f0200060102e3010102e305010200" + }, + { + "filename": "12-chiba-loquat", + "data": "0x0003181508070002c9070006000426060004000826040003000a26030002000c26020001000e26010001000e260100102610261026102610261026102601000f26010006260186012601860526010002000626018605260200040008260400050006260500" + }, + { + "filename": "12-chiba-nanohana", + "data": "0x00051d14030700012a0300012a0200012a0200012a0100012a0300012a02000300012a0100012a0100022a0100022a0100012a0100022a0100022a06000200012a0100122a0100012a02000200172a01000100062a0122112a01000100152a0122022a01000100032a0122152a1a2a042a01c0102a01c0042a032a02c0012a01c00d2a02c0012a01c0022a0100012a01c0012a02c00d2a01c0012a02c0032a0100012a01c0012a01c0012a01c00c2a01c0012a01c0012a01c0012a0100012a0100012a03c00e2a03c0022a0100022a01c0012a01c0012a01c0042a0122072a01c0012a01c0012a01c0012a0100012a0100012a03c0062a0322052a03c0012a02000100012a020001c0102a01c0012a0100012a0100" + }, + { + "filename": "12-head-12-chiba", + "data": "0x000219170801541000010001540f00010002540e000200035404000354050002000c54030001000e5402000100105402000b540400020001540100085405000500065406000400065407000300075407000200085407000100095407000a540700020008540700010009540700010008540800010004540c00020002540d0004540d00010002540e00" + }, + { + "filename": "13-head-13-tokyo", + "data": "0x00091c140301000254160007541200010009540f0001000a540300025402000654010002001654010003001654040015540600135407000f54010001540100080006540300055403000c0003540400045402000d000154070002540200" + }, + { + "filename": "13-tokyo-station", + "data": "0x00011c14050b0001360b0017000b0001360b000b0001360b000700030d0336030d07000600010d010b010d0136010d010b010d0136010d010b010d06000600030d0136030d0136030d06000100013604000bbf040001360100060001bf020b01bf030b01bf020b01bf0600010001360300040d0136030d0136040d03000136010003360100010d010b020d0136010d01bf010b01bf010d0136020d010b010d0100033603bf030d01350136020d03bf020d01360135030d03bf010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b010b02bf010b01bf010b010101bf010b01bf030b01bf010b01bf0101010b01bf010b02bf010b06bf010109bf010106bf010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b010b02bf010b01bf010b02bf010b01bf030b01bf010b02bf010b01bf010b02bf010b170d010b02bf0272010b04bf037201bf010b02bf010b027202bf010b010b02bf0272010b04bf037201bf010b02bf010b027202bf010b" + }, + { + "filename": "13-tokyo-tower" + }, + { + "filename": "14-head-14-kanagawa", + "data": "0x00041d160306000254120007000254110007000354060004540600070007540300055404000600095402000754020006000a54010009540400155401000200145404000100165403001654040002001454040002001454040003000c5401000654040003000754090004540300020006540c0005540100020005540d0004540200020005540e0004540100030005540c000254040004000254010001540d0002540300" + }, + { + "filename": "14-ibaraki-anglerfish", + "data": "0x00031e14010700059811000400027e0a980d000300047e0b980b000200047e03000a980a000200037e06000a9808000300017e06000c98070008000f9806000600129805000500149804000400159804000100037e1598037e0100047e1598047e047e1598047e0100027e010015980100027e0100050005980a3905980400050003980e39029805000600019810390198050008000e980700" + }, + { + "filename": "14-kanagawa-curry", + "data": "0x00041c1504013d0206100003010200013d02060f000201022c01010100017f020106000401040002010222022c0101017f020104000801020001010257022201dd0101017f02010300040102d40401010002010157022201dd0101017f02010200030104d40235030101000201012202010100013d02a90100030105d4043502010100030102000400020105d40535020106000300030105d40635020105000300020106d40635020105000300020106d40635020105000300030105d40635020105000400020104d40635020106000400030103d40635020106000500030101d401860142016003350201070006000401033503010800070008010900090004010b00" + }, + { + "filename": "14-kanagawa-king", + "data": "0x0002171409070001210600070001a90600070001a90600060001a7011301a70500050001a7011301a7011301a70400040001a7011301a7011301a7011301a703000200012101a9012101a9012101a9012101a9012101a901210100030001b3014201270142012701420127014201b3020003000149011301270113012701130127014201490200010003a9012101a9012101a9012101a9012103a902000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010002000113014201b3012701b3012701b3012701b3014201130100020001420113014901270149012701490127014901130142010001a9012101a9012101a9012101a9012101a9012101a9012101a90121" + }, + { + "filename": "15-head-15-niigata", + "data": "0x00021b170413000254020013000254020009000154090004540800015409000554070002540900035402000700035407000454020008000254050006540200070002540400095401000c00095402000c00095402000c00085403000b00095403000a000854050009000754070008000954060007000954070004000d54060002000f540600085402000554010001540600010002540100035403000454090001000154090002540a000b0001540b00" + }, + { + "filename": "15-niigata-sasadango", + "data": "0x00021c1604100001e107000e00011b01e108000d00021b070002e10c00031b040004e101000b000129021b030006e101000800021b0129011b0129020007e10200050001290100021b0129021b0129010008e1020005000129031b0129011b0129011b08e103000500011b0129011b0329021b08e103000400021b0429031b08e103000400031b0229031b08e104000300031b0429011b01e103dd05e104000300021b0129011b0129021b012905dd03e105000300011b0129021b0129021b06dd03e1050003000129021b0129021b07dd02e106000100031b0229021b01e106dd03e10600041b0129021b01e102dd0197019801dd010101dd02e10700041b020002e1019702980197010101dd03e10700031b030003e101980197019801dd03e10800060009e10900070006e10b00" + }, + { + "filename": "15-niigata-tulip", + "data": "0x00041a1506090002b90900080004b90800010002b9040006b9040002b9010004b9030006b9030004b905b9010008b9010005b914b914b914b914b914b914b914b9010012b90100010012b90100020010b90200020009b9016a06b90200040006b9016a05b90400060008b90600" + }, + { + "filename": "16-head-16-toyama", + "data": "0x00051b17050300045409000454020002000454090006540100020003540a00065401000100055408000854010007540600085401001554165401001554165401001554010014540100010014540100010013540200145402000b54010001540100065402000854080003540300010006540f0001000154030002540f00050001541000" + }, + { + "filename": "16-toyama-blackramen", + "data": "0x00041b150508000633080006000a33060004000e3304000300053306850533030002000433038502d3058504330200010003330385018803d303e4048503330100010002330285018803d302010222010103e402850233010003330285018802d3070103e40185033302330285018803d3082202e40285023302330285018802d3092203e4018502330233028503d3080104e4018502330333018504d3062204e40185033301000233028504d3040104e4028502330100010003330185018805d3078503330100020003330185018803d3028503e402850333020003000333048503e40385033303000400043306850433040006000a330600" + }, + { + "filename": "16-toyama-kutabe" + }, + { + "filename": "16-toyama-raicho", + "data": "0x00031d15021200047f05001100077f03001100047f020e017f010e02000600010f0a00077f020e0100050001dd010f01dd0800077f0400050001dd017e01dd010f0400097f0500017f0500017e01dd010f02000c7f04000100010e017f0200010f01dd017e107f03000100017f020e157f02000200177f02000200177f02000300167f02000300157f01dd010001dd010001dd0200137f010001dd010f01dd010001dd010f0200117f0100010f01dd017e010001dd017e010f01dd0300067f030e057f010001dd010f017e02dd0200017e01dd010f03000a7f040001dd017e0300010002dd017e010f0300027f0400027f0500010f017e02dd02000300010f037e0100027f010e0300027f010e0300027e010f0400" + }, + { + "filename": "17-head-17-ishikawa", + "data": "0x00031517080a0003540700055401000600065401000600045403000500035405000500035401000154030006000454030006000454030007000154050006000254050006000154060005000354050005000254060004000454050003000454060002000554060001000754050007540600010007540500020005540600050002540600" + }, + { + "filename": "17-ishikawa-curry", + "data": "0x00071c1504060001010172020108720600040003720ab8037204000300027201b80225013403250234022502b8022201720300020002720325013401250134012502340125013402250422017202000100027201250134012502340125033401250234012501340125032202720100010101b80125013401250234012502340125013401250234012501340125042201b80172010101b80125013401250234012501340225013401250234012501340125042201b80172017201b802250134012501340125013401250234022502340225042201b80172010101b8013401250134012503340125013401250134012502340125042202b80172027201340225023401250234032502340225042201b802720100027201b802250134032501340525032202b802720100020003720fb8027202000300037204b8036406b8027203000500037208b80372050007000a720700" + }, + { + "filename": "17-ishikawa-jibuni", + "data": "0x00051a140608000423080005000a23050003000323011001230210072303000200102302000100042304e101b804d80523010001000323055c01e1046002b8032301000323016a01b804e101b804d803b803230223015f016a02b80483026004d802b802230223015f02b8051a012201b8046002b80223012302b8023401b80183021a0222018304d8026d01b80123010001230434061a0460026d0123010001000223023402490383031a04b802230100020003230249031a038302b8032302000300032301de0123038301b8012301de032303000400032301de052301880223040006000223018801de022301de01230600" + }, + { + "filename": "17-ishikawa-kinpaku", + "data": "0x000518150705a6076d05ea03a60b6d03a60aa6066d01ea09a6086d07a60a6d10a6016d11a611a604ea0da611a6046d0da609ea08a603ea056d09a60aea07a606ea036d01a603ea04a6036d07ea07a603ea03a60bea" + }, + { + "filename": "18-fukui-dinosaur", + "data": "0x00071c16011600011b0123031b1500061b0d0001e8011b0600041b02000b0001e8011b01e8011b01e8011b01e80200071b011b0900011b01e8011b01e8011b01e8011b01e8011b01e8031b012a03000100011b070001e8011b01e8011b01e8011b01e8011b01e8011b01e8021b012a04000200021b050001e8011b01e8031b01e8011b01e8011b01e8021b012a04000300041b01e8011b01e8051b01e8061b05000400022a071b01e8081b05000600022a051b01e8081b05000800012a091b022a0100041b02000900032a021b01e8032a09000c00031b0c000d00021b0c000e00011b0c000e00021b0b00" + }, + { + "filename": "18-fukui-sabae-glasses", + "data": "0x00091c1206030004710800047103000100027102060201027104000271020602010271010001000171020603010106017104000171020603010106017101000171020603010306047102060301030601710171010603010406017102000171010603010406017101710301050601710200017103010506017101710201060601710200017102010606017101000171060601710400017106060171010001000271040602710400027104060271010003000471080004710300" + }, + { + "filename": "18-head-18-fukui", + "data": "0x00041a18020c0001540b000b0003540a000c00035409000b0005540100025405000a000a5404000a000d54010009000d54020009000d5402000a000d5401000a000e540b000d540c00035401000254060009000154010004540900090001540100015401000254090006000154020003540c00070005540c000100015401000154010006540d00025401000554010001540e0008541000010007541000020004541200" + }, + { + "filename": "19-head-19-yamanashi", + "data": "0x00051a1806040002540e00030003540e00010001540100065401000354070001000f5404001054040001001054030012540200145401001254010001001354020012540200115401000100105403000200055401000754050001000654030005540500010006540d00030003540e00040002540e00040003540d00050002540d00" + }, + { + "filename": "19-yamanashi-shingen", + "data": "0x00011c1604050001280d0001280400040001280f0001280300040001280f000128030004000228010005010100050101000228030004000228010101280901012801010228030004000101022802010328010103280201022801010300020004010428010101060128010601010428040101000100015501a90155040109280401015501a901550100015503a90155010101a901550128012901280129012801290128015501a90101015503a901550100015515a901550100045501a9055503a9055501a904550200020103550488035504880355020101000200030101550d88015503010100020004010d8804010100010005010d8804010100010005010d88040101000100050101230388012302880160012303880123040101000100050104230188036001880423040101000100050105880323048805010100010006010388012303880123038804010200010004010100010102000788010005010200010101000201010001010a000201010002010300" + }, + { + "filename": "19-yamanashi-wine", + "data": "0x0001161409050003e705000500035b0500050003e70500050003e705000500037905000200011b082202000100011b0a220100011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00a2201c0011b01c00422021b042201c0011b01c00322011b0222011b032201c00100011b01c0082201c00100" + }, + { + "filename": "20-head-20-nagano", + "data": "0x000319170b0b000254010006000154020005540500095405000754020005000754020004000754030003000854030003000a54010003000954020002000b54010002000a54020003000a5401000200085401000354095404000154010008540500020006540600020007540500030005540600030005540600020006540600020004540800" + }, + { + "filename": "20-nagano-matumotocastle", + "data": "0x00011f16020a00010d0300010d0e000a0001e3030d01e30e000a0001e3030d01e30e000800020d01e3030d01e3020d0c00090007010d000900030e0123030e0d000800090d0c000700050d01e3050d0b000900020101e3010101e302010d000800020d01e3030e01e3020d0c0006000d0d060001e30300040001e30200040103230401060001e3010101e30200030001e3010101e30100040e0323040e050001e3030e01e30100020001e3030e01e30c0d0300070d010007e30c0d0400030e02000200016602e302660c0104e3050d0100010006e3040e0523030e03e3070d08e30c0d080e010002000123018501230185050102660301036603e3070d01000618040e02bc030e04bc0136010e0136050101000200040101de03d802de02d801de03d801de023601970136050e0100060002d801de03d801de03d802de01d801de0197010e019702de01d801de01d801de" + }, + { + "filename": "20-nagano-wasabi", + "data": "0x0003161505040002220100024e08000100024e01000222034e08000122024e0222034e09000122034e0122014e0222090001000122034e032201c90122070002000622014e022206000200013f022201c9014e042206000200013f014e0622014e01c90500030001c90922040003000a22040003000422014e062203000400013f014e0522014e0322020005000922014e020005000b22010006000122014e082201000700042204850122014e080001c9014e062201c90a00013f06220c000322014e0100" + }, + { + "filename": "21-gifu-gassho-summer", + "data": "0x00021d14040b0003d80b000b0003d80b000a0002d8018402d80a00090002d8038402d80900080002d80184037c018402d80800070002d8028402010123028404d80500070001d8028401ca0201012301ca028401d80700060001d8028407ca028401d80600050001d80184057c01ca057c018401d80500040002d8018401ca030103ca030101ca018402d80400030002d8028401ca030103ca030101ca028402d80300030001d802840dca028401d80300020002d8018402ca020101ca020101ca020101ca020102ca018402d80200010002d8018403ca020101ca020101ca020101ca020103ca018402d80100010001d8028401ca0f7c01ca028401d8010002d8018401ca117c01ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + }, + { + "filename": "21-gifu-gassho-winter", + "data": "0x00021d14040900070109000800030103d8030108000800030101d8018401d8030108000700030101d8038401d8050105000600030101d80184037c018401d8040105000500030101d8028402010123028401d8010102d805000400030101d8028401ca0201012301ca028401d80200010104000300030101d80184030103ca0301018401d8030103000200030101d80184050101ca0501018401d8030102000200030101d801840bca018401d8030102000100030101d802840bca028401d8030101000100020101d802840dca028401d802010100030101d801840fca018401d80301020101d8018411ca018401d80201010101d8028401ca0f0101ca028401d8010102d8018401ca110101ca018402d802d8018401ca118401ca018402d802d8018403ca010102ca010105ca020105ca018402d802000dca020106ca0200" + }, + { + "filename": "21-gifu-keichan", + "data": "0x00021d1a03040002061400060004060500050606000a000106090003060300040006060100017d029c0900010602000300010605000322017d029c0200060603000400090601d2019c010001060900030003ca0123022203e901220106017d029c0106022303ca0300020002ca0223022201e9037d01220106027d019c017d0106010c022302ca0200010002ca0123020c022201e9067d0222017d0106019c020c012302ca010002ca0123030c027d0122047d0122017d02220106017d019c030c012302ca02ca0123010c0422039c017d0222017d0322015c0322010c012302ca0123010c0123010c0322037d019c0422037d019c0322010c0123010c0123012301ca0123010c0322047d029c0322027d029c017d0122010c012301ca01230123010c0123010c015c0222077d025c037d019c027d01220123010c012302ca01230122010c0322027d0322017d0222047d019c0222012302ca02ca0123010c0422017d029c037d0422027d0222010c012302ca03ca0123030c015c0222065c0222027d0122010c012303ca010003ca0223030c0322027d02e9040c022303ca0100020004ca0e2304ca0200030014ca03001a001a001a000c00013d0101013d01010a000d00013d0100013d0a00" + }, + { + "filename": "21-gifu-ukai", + "data": "0x00031e190404000b540b0003000d540a0011540900010004920d540800020002920f5407000300105407000300105407000200115407000200045401920c0c0700020002540f0c0700140c06000100040c0401050c01a6030c0101010c0600040c0601030c03a6010c020101f406000100030c0601010c07a6010101f406000200020c04010ea603ad01000200020c040103a603e901c601220210070001ad0300010c050103a603e901c60122021007000400010c050104a602e901c6021007000f0002e90122011001a602ad0400110001220110020002ad03001200012201100600110001c602e901c60500100001c6040001c60400" + }, + { + "filename": "21-head-21-gifu", + "data": "0x00031817060c0001540100025402000b000754070002540100085407000a54010007000a54010006000a54020006000b54010006000a5402000700085403000800065404000100025401000b54030001000f5402001054020001001054010002001054020010540300055402000754010003000454040006540100020004540600015401000254020002000154010002540c00050001540c00" + }, + { + "filename": "22-head-22-shizuoka", + "data": "0x00031d14050a0001540d00090002540d000a0001540d00090002540400015408000a000154040003540200035401000800035401000154020008540100060007540200075402000500095401000754020005000c540200055404000c5404000354010003000c540600035403000d5402000554010002000c54040006540c54070005540d540500055401000c5407000454010004000254020003540700045402000a000154080002540300" + }, + { + "filename": "22-shizuoka-oden", + "data": "0x0004181407060001b1016001b10800060003c904000286019701000100025b030001b1016001b1010001600100048601970100025b01000160010003c9010001600100048601970100025b01000160010003b10100016001000586035b01000160010001c9016001c901000160020003860100035b010001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200025b020001600200016002000160030001600200010001600200016002000160010003e9020001600200010001600100036301000160010003e90200016002000100016005630160010003e90200016002000100016005630160010003e9020001600200010001600563020002e9016a05000100016005630200026a01e9050003000363030002e90600" + }, + { + "filename": "23-aichi-hitsumabushi", + "data": "0x00071a15060800040e08000500050e0134040e05000300040e0234012b013401350134040e03000200010e010b033401350234012b023401350334010e02000100010e010b0134012b03340135053401350234010b010e01000100010e01350234012b0634012b033401350134010e0100020e0834013506340135020e020e023401350234012b033401350334012b0234020e020e010b023401350b34012b020e030e010b093401350334030e050e023401350234012b03340135050e0100080e0234080e01000100120e01000200100e020004000c0e0400" + }, + { + "filename": "23-aichi-tenmusu", + "data": "0x00011b1406090001ce010001ce0900090003ce0900090003ce0900090003e70900070001bc05e701bc0700060001bc010105e7010101bc0600050001bc010107e7010101bc0500050001bc020101e7030101e7020101bc0500040003bc070103bc0400040005bc030105bc0400030007bc010107bc030003000fbc0300020010bc0300020011bc0200020011bc0200020011bc0200010013bc0100010007bc010101bc010101bc010107bc010015bc15bc" + }, + { + "filename": "23-head-23-aichi", + "data": "0x00041c170505000154110001000154010004541000010007540f0001000854020002540300015406000e54010002540200025402001754175401001554010001000354010011540100020001540100115402000400105403000300115403000300035401000d540300020001540100015401000d5404000400015402000a540600030002540500015402000354070004000254060001540100025407000b000554070007000154010005540900060005540c00" + }, + { + "filename": "24-head-24-mie", + "data": "0x000318170b06000254050007000254040007000354030006000354040005000454040002000654050001000654060002000554060002000754040002000854030004000854010002000b540200075401000254010003000554050002000354080002000254090003000254080001000354090003540a0002540b00010001540b00" + }, + { + "filename": "24-mie-ninja", + "data": "0x00041717050700069205000500039201bc069203000400039201bc059201bc029202000400039201bc069201bc019202000300039201bc01e302da010101da010101da01bc029201000300039201bc01e301da01e3010101da010101da01e301bc019201000200039201bc0a880292020003920b880292020003920b880292020003920b8802920200039203a2078801a20292020003920ba20292020003920ba20292030003920aa2019201000300039209a2029201000200059202a2039203a201920200020002920100039206a202920200010003920300029204a202920300010003920e0002921000" + }, + { + "filename": "24-mie_jingu", + "data": "0x00041e14010100012a0200012a1200012a0200012a02000200017e0100017e1300017e0100017e02000300017e0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100012a0100017e0300027e19c6027e020019ab020001001bab010001001bab01000eab01880eab0cab05880cab0aab028802d8018802d802880aab020001d805d3028804d8018804d8028805d301d80200020001d803d3118803d301d802000160010001d801d3028801d301880dd3018801d3028801d301d801000160076001880d60018807600160010001d801d301600200018801600bd3016001880200016001d301d8010001600160010001d801d301600200018801600bd8016001880200016001d301d8010001600160020001d301600200018801600bd3016001880200016001d302000160" + }, + { + "filename": "25-head-25-shiga", + "data": "0x000316160807000254050007000354040006000554030003000154010007540200030003540100015401000354020003000354030004540100010004540500035401000654040003540100010005540300035402000100045403000454020001000354020007540100010003540300075402000154020009540100025401000a540100025401000954010001000c54010002000a540200020009540300040003540700050002540700" + }, + { + "filename": "25-shiga-blackbass", + "data": "0x00021d18021700018d0100018d01001700038d01001600058d1700048d0a00016b0c00038d01000900036b010003c50157012303c50100038d02000800036b02c5011e02c5025702c50100028d04000500026b0100016b02c5031e06c50100038d03000500036b01c5041e01c5011e05c5028d05000400036b01c5031e01c5041e02c5010101c5030104000400026b01c5031e01c5031e0101016b060105000400016b01c5061e0201016b0201011e03010600050001c5031e01c5011e0201016b0201031e02010600050001c5041e0201016b0201031e02010700050001c5021e01c50201016b0701011e0700040001c5021e01c5011e0101016b0701011e0800046b01c5011e01c5011e016b040103c50101021e0800046b011e01c5011e016b08010100011e0900056b08010e000100066b0300031e0e000300046b0300021e0f000300046b14000400036b1400" + }, + { + "filename": "25-shiga_hikonecastle", + "data": "0x00021d15020a00010d0700010d0800090001bc090001bc070009000bbc070009000bbc0700090004bc010d01eb010d04bc0700080003bc01eb010d0301010d01eb03bc06000900020101a2050101a202010700080001ab010103a20101010d010103a2010101ab0600070006bc010d0101010d06bc0500060006bc010d0301010d06bc040007000401010d0501010d04010500040003bc0101010d010109bc0101010d010103bc0200040003bc010d0101010d010101a2020101a2020101a20101010d0101030d01bc0200030002bc020d03bc020d05bc020d0101020d0201010d01bc01000400030101a202ab030101a202ab0301080d0100120d07010100010d0101120d060101000301120d010101a201ab020101000101017404010174020101740201017403010174030106ab01000101017412010700" + }, + { + "filename": "26-head-26-kyoto", + "data": "0x0005171507030003540a000154010004540a0005540b0006540100025407000300045401000154070003000654070001000a54050002000b54030003000154010008540300050008540300080005540300080005540300070007540200090001540100035402000b00045401000c0004540c00025401000154" + }, + { + "filename": "26-kyoto-kinkaku", + "data": "0x00011d15020c00026d010001290b000d00016d01a60c000c00010102290c000c0003b8060001b80500040001b8030004b801a6018506b8018506000500018504b803a605e60900080002a601e40129010101a6016d01a6016d01a6090007000129016d018a016d018a0129018a016d01a6016d018a02290700060008b8028504b80700020001850ab8018504e606b801850200040001290100012907a60101012901e4012901e6012901e601290500040001290100012904e403290101012901e4012901e4012901e402290400030006290e850400030006850135018501a00135018503010185010101850101018505000400018501a0018501a00135010a018501ea010a018501ea023505850500040001850100018502ea010a018501ea010a018501ea0235018501010185010101850500030013850500030001b6015701ab015701b6015701b6015701ab0157019808570500020002a5015901ab01a501b6015901a5015901ab015902a5025901a5015901a5015904a5010001a5030002a5028502a5010a018502a5018501a5028502a50185010102a5040001a5010002a5018501a0018502ea010a018501ea01a5018501a50235028502a5018502a50300" + }, + { + "filename": "26-kyoto-kiyomizu", + "data": "0x00061a14051584010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100010801970208019702080197020801970208019702080197020801970108010001840200018402000184020001840200018402000184020001840100" + }, + { + "filename": "27-head-27-osaka", + "data": "0x000616150b05000254010001540200060004540100060005540600055406000554060005540500065405000554010006000454010006000354020005000554010005000654020001540100075403000754010001000554050003540800" + }, + { + "filename": "27-osaka-takoyaki", + "data": "0x00021e15020b0001af010001af020001af027d0900090001af027d01af0100017d01af010002af09000600017d010001af017d03af017d01af020b017d010003af060003000157020001af017d02af017d01af020b01af0134017d013401af027d0700040001570100017d01af010b01af0134010b01af01dd0134010b037d010b010001af0600050001570100010b02af01dd01af013402af017d0134010b03af010001af05000600015701af023401af010b02af010b023402af020b01dd01af050006000134010b02af010b0234010b0234020b0111010b0234010b050005000134020b0134010b013401af020b0211010b01dd0111010b0111010b01340200027f0100050001dd010b0534010b01110260020b0260020b01340100017f0200017f0500020b0134010b0234020b0111019302600293036001110100037f010005000334010b0134020b0b60050005000234020b0134010b01110260039303600393050005000134010b0234010b013401110b6005000600040b0111046002930560060006000134010b0234011101930134019305600293016006000200037f0200023402110160053404600700017f0300017f0300013401110260013403600293026008000100037f03000234011101930134076009000b00036003930b00" + }, + { + "filename": "27-osaka-tower", + "data": "0x000216150b05000195050004000395040002000195063c020003000195043c0300040003c604000100016f0195016f01c6019501c6016f0195016f01000295016f019501c6019501c60195016f02950100016f0195016f01c6019501c6016f0195016f01000300019501c6019501c6019503000300019501c6019501c6019503000300019501c6019501c6019503000200029501c6019501c6029502000200029501c6019501c6029502000200029501c6019501c60295020001950a3c0195033c01a2013c01a2043c0100016f039501a20395016f010001000195016f019503000195016f019501000100016f019505000195016f010001000195070001950100" + }, + { + "filename": "28-head-28-hyogo", + "data": "0x0004181d07040005540800020007540800030007540100015405000300095405000300095405000400065407000400065407000400085401000154030002000c54030003000e5402000f5401000f5401001054010011541154010010540100025405000754010001540a000454030011000a0001540600090001540700080002540700070003540700060005540600070003540700070001540900" + }, + { + "filename": "28-hyogo-himejicastle", + "data": "0x00021a15010b00017f0700017f05000c0007e006000c0001e0019d01e0019d01e0019d01e006000b0002e0019d0301019d02e005000c00070106000c00010101920101019d01010192010106000800017f020001e0019d01e0019d0101019d01e0019d01e00200017f0200090001e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e003000700017f02000101029d01010192010101920101029d01010200017f01000800017f01e0019d0201019d03e0019d0201019d01e0017f02000300017f040002e005010192050102e0020003e00500017f01e0010101920101019201e0010101e00192010101920101027f020001e0019d02e00300019d01e0019d01e0019d01e0019d0301019d01e0019d01e0019d01e0019d01000192010101920300037f040105920501020001e0019d01e0019d01e00100037f010101920101079201010192020102000101019201010192010101e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d01e0019d019d01e0019d01e0019d01e0019d016f0201019201010192010101920101019201010192010101920201016f01000192010101920101019201010192100102000401019d01e0019d01e0012b0250012b0350012b0250012b0350012b0200012b0150012b015001920101019201010250012b0250012b0250012b0350012b02500200" + }, + { + "filename": "28-hyogo-tajimaushi", + "data": "0x0004191504010002b50f0002b5010002b5110002b502b5030b050d0200040d030b02b5050b0c0d040b0100040b0c0d030b01000300010b0d0d010b0300150d150d150d0100130d01000300100d020004000c0d05000400060d0ab501000400050d0bb501000400050d05b5020d01b5020d01b501000400050d0bb501000400050d02b5070d02b5010009000ab50200" + }, + { + "filename": "29-head-29-nara", + "data": "0x000316140b02000154080002000254010002540100015402000200075402000100075403000100075403000200085401000200095401000854020001000854020002000754020003000654020001000854020001000854020008540300095402000100065404000100055405000100015401000154010001540500" + }, + { + "filename": "29-nara-ashura", + "data": "0x00021f140203180a00019f01c2019f0a000318020002e40700029f03c2029f070002e40200020002180600029f05c2029f0600021802000200021806000118019f01c2031801c2019f01180600021802000200021806000123021801230118012302180123060002180200020002180600091806000218020002000218060001230218032302180123060002180200020003180600071805000418020003000418060003180400021801dd031803000500021801dd041801e4031801e401dd041801dd010002e4030003000118030001dd041801e4031801e401dd0218040002180300020003180400041801e4011801e401dd0318040002180300020002e40400011801dd061801dd021801dd021802000218030002000218020001dd031801dd021801e4011801e401dd011801dd031801dd010002180300020003180100011801dd061801dd061801dd0418030003000a1803dd051802000218040004000218010003180100011803dd031801000318070007000218030002dd03180300021807000c0005180c00" + }, + { + "filename": "29-nara-deer", + "data": "0x00051b140702110a000211060001110138011108000111013801110600011102380135060001350238011106000111033801350400013503380111060001000111025702350200023502570111070002000a11080002000a11080002000a11080002000a11080002000a110800020001350e110323020001350511095703230200013505110c5702000135010b041101230b5702000135051101570223095701000135010b0111010b03110c57" + }, + { + "filename": "30-head-30-wakayama", + "data": "0x0004161606080002540600015402000754060001000a5405000200085406000100085407000100085407000200065408000100085407000a54060009540700020007540100015401000154030003000a54030005000954020006000954010005000b54060009540100070009540900055402000c0001540300" + }, + { + "filename": "30-wakayama-danjogarandaito", + "data": "0x00011914080800019508000800012108000800019508000800012108000700012701e301270700060001e3012701e3012701e30600040001e3012701e3012701e3012701e3012701e30400020001e3012701e3012701e3012701e3012701e3012701e3012701e3020002000db40200050001b4010101b4010101b4010101b40500050007b405000500012801dd01b401dd01b401dd012805000400090104000100012701e3012701e301270501012701e3012701e30127010001e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3012701e3030001b401dd01b4010101b4010101b4010101b401dd01b40300030001b401dd01b401dd01b401dd01b401dd01b401dd01b4030003000bb40300030001b4010101b4010e01b4010e01b4010e01b4010101b403000100047f07e0047f0100" + }, + { + "filename": "30-wakayama-nachifall", + "data": "0x000216150a0100036102e001610101046101610327020101e001010227016101000227019d012701e0010101e0010103270100039d016201e00301026202000400010101e0010101e004000400020101e001010400040001e0030104000500010101e001010400050001e0020104000500030104000500020101e00400050001e0010101e004000500010101e001010400050003010400050003010400050003010400030001010100016201010162010102000101050001010162020103000500020101000101010001010100020001010100010101000101010001010300" + }, + { + "filename": "31-head-31-tottori", + "data": "0x00091c13061200025402000100015404000254040002540200045402000200015401001054020003001254010002001354010002000554010004540200085402000554030001540400075406540a00035401000254010005540a00015405000454120002541400" + }, + { + "filename": "32-head-32-shimane", + "data": "0x000319190710000254100002540e000154030012001200120012000e00035401000b00055402000a00075401000b0006540100090008540100080007540300070008540300050007540600040006540800030008540700020004540c0005540d00010004540d0004540e00010003540e00010002540f00" + }, + { + "filename": "33-head-33-okayama", + "data": "0x00031b1606050002540400025408000500045401000554060004000c540400015404000c540100035401000200125401000100125402001354020001001154030012540300125403001254030001001154030001001254020001001054040001001154030002000f54040002000a5402000254050003000b5407000300035402000554080004000154040001540b00" + }, + { + "filename": "33-okayama-denim01", + "data": "0x00061815090a54042b01540799010c0299042b01990754019907540154059901540199015405990154015401f5035401f501540199015401f5035401f501540754019907540754019907540754019907540754010007540754010007540754010007540754010007540754010007540799010007990706010005060101015407060100050601010154" + }, + { + "filename": "33-okayama-denim02", + "data": "0x00061815090a92042b01920799010c0299042b01990792019907920192050c019201990192050c0192079201990792079201990792079201990792079201990792079201000792079201000792079201000792079201000792079201000792079901000799079d0100059d010101f6079d0100059d010101f6" + }, + { + "filename": "33-okayama-denim03", + "data": "0x00061815090a92042b019207ca010c02ca042b01ca079201ca07920192050c019201ca0192050c0192079201ca0792079201ca0792079201ca0792079201ca079207920100079207920100079207920100079207920100079207920100079207ca010007ca079d0100059d014d01f6079d0100059d010101f6" + }, + { + "filename": "33-okayama-dog", + "data": "0x00031a1506010003260c00022602000100015703260a000226015702000100025703260800022602570200010003570c2602570200010002570e2601570200010003260601016a05010226020001000801036a0601020001000801010f016a010f06010200010003010d26010102000100112602000100052603570326035703260200010011260200132601000826095701ca0101015707260a5701ca0123015701000526075701ca065702000426085702ca015f01db01ca0157030004260957015f01db018801001000025f0200" + }, + { + "filename": "33-okayama-horseshoe-crab", + "data": "0x00051815010a00088e0500090003d5098e02000800028e02ca01d5068e0101028e0100060001ca048e01ca01d5028e04c3018e0101018e01000700048e01ca01d5088e0101018e050001ca058e01ca01d5088e0101018e0600018e01c3018e01c3018e01ca01d5088e0101018e0600058e01ca01d50a8e06ca058e01ca01d5048e04c3028e0600058e01ca01d50a8e0600018e01c3018e01c3018e01ca01d50a8e050001ca058e01ca01d50a8e0700048e01ca01d50a8e060001ca048e01ca01d5028e04c3048e0800028e02ca01d5098e0100090003d5098e02000a00088e0500" + }, + { + "filename": "33-okayama-momotaro" + }, + { + "filename": "33-okayama-monkey", + "data": "0x00051a140605000aca050003000eca0300020010ca0200010003ca0601016a050102ca020001000801036a0601020001000801010f016a010f060102000100030106db01ca06db01010200010003ca0ddb01ca020003db01ca0ddb01ca020003db01ca0ddb01ca020003db03ca0adb01ca030003db02ca0edb0100020003ca0fdb020003ca05db0174010101740101017401010174010101740101030003ca0edb03000eca0300" + }, + { + "filename": "33-okayama-peach", + "data": "0x00041e15030d00015f0d000a00075f0a0007000d5f070006000f5f06000500025f01570e5f05000500015f0157065f01e5085f05000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400015f0157075f01e5095f04000400095f01e5095f04000400095f01e5095f04000400095f01e5095f040002000222095f01e5095f022202000422095f01e5095f042201000322095f0182095f0322010002000322055f0382095f02220300040002220f5f02220400060002220b5f02220600" + }, + { + "filename": "33-okayama-pheasant", + "data": "0x0003191506019212000292110005920a540400010002920d54030002000f540200020002540601016a05010154020002000701036a0501020002000701010f016a010f05010200020002010cb901010200020001540eb90200020001540eb90200020001540eb90200020001540eb90200020001540eb902000200025407b9036d03b9020003000754096d03000854086d03000e540100016d03000e1d0200" + }, + { + "filename": "34-head-34-hiroshima", + "data": "0x00041c19020f000254010001540100035403000f00095402000e000a5402000d000b5402000c000c5402000d000b54020004000154010001540100015401000f540100020017540100030015540200020017540100020017540100010019541a54010019540100155401000354010005540100025401000954010002540200015401000200035404000a540200015401000154020002000254010001540300055405000354040003000154060002540300025409000a000154010002540c00090001541000080002541000" + }, + { + "filename": "34-hiroshima-manju-choco", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad02880385028802ad0400010005ad01880585028804ad0100010001ad05880585058801ad0100010001ad01880d85018801ad0100010001ad02880b85028801ad0100020001ad01880b85018801ad0200020001ad02880985028801ad0200020001ad01880b85018801ad0200010002ad01880b85018802ad010002ad01880d85018802ad010002ad0188038504980485018802ad0100020002ad02880785028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-custard", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288016d028802ad0500040002ad0288036d028802ad0400010005ad0188056d028804ad0100010001ad0588056d058801ad0100010001ad01880d6d018801ad0100010001ad02880b6d028801ad0100020001ad01880b6d018801ad0200020001ad0288096d028801ad0200020001ad01880b6d018801ad0200010002ad01880b6d018802ad010002ad01880d6d018802ad010002ad0188036d04e4046d018802ad0100020002ad0288076d028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-koshi", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880180028802ad0500040002ad02880380028802ad0400010005ad01880580028804ad0100010001ad05880580058801ad0100010001ad01880d80018801ad0100010001ad02880b80028801ad0100020001ad01880b80018801ad0200020001ad02880980028801ad0200020001ad01880b80018801ad0200010002ad01880b80018802ad010002ad01880d80018802ad010002ad0188038004450480018802ad0100020002ad02880780028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-maccha", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad0288010f028802ad0500040002ad0288030f028802ad0400010005ad0188050f028804ad0100010001ad0588050f058801ad0100010001ad01880d0f018801ad0100010001ad02880b0f028801ad0100020001ad01880b0f018801ad0200020001ad0288090f028801ad0200020001ad01880b0f018801ad0200010002ad01880b0f018802ad010002ad01880d0f018802ad010002ad0188030f045c040f018802ad0100020002ad0288070f028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-manju-tsubu", + "data": "0x00031a1507090001ad0900080003ad0800070002ad018802ad0700060002ad038802ad0600050002ad02880185028802ad0500040002ad028802850180028802ad0400010005ad01880145028501450185028804ad0100010001ad0588024501800285058801ad0100010001ad018802800245018502800385018001450185018801ad0100010001ad02880180018501450480018501800285028801ad0100020001ad018802850380018501450480018801ad0200020001ad0288018501450280024502800145028801ad0200020001ad018801850345028502800345018801ad0200010002ad01880180034502800185028001450185018802ad010002ad018802850145078001450285018802ad010002ad0188028501800445018501800285018802ad0100020002ad02880180014502800385028802ad0200030002ad098802ad0300040003ad010003ad010003ad0400" + }, + { + "filename": "34-hiroshima-okonomiyaki", + "data": "0x00051b14050500015d0300045f0100019307000600025d01d9015f026a0122015d08000600012201d90101026a0122010101220800030001930101010001d90101015f016a015d0101015d01010122015f010105000500010101d90101015f016a0122015d010101220101025f010104000500012201d90101015f016a015d022201010122015d015f01d9010103000400015f015d01d90101015f016a0422015d0122015f02d9010102000300015f015d012201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101015f016a0622015f02d9010102000200016a015f022201d90101016a0722015f02d9010102000200016a015f0c22015f02d9010102000200026a015f0f22020002000560012501600125016001250160012501600125046002001623" + }, + { + "filename": "34-hiroshima-shrine01", + "data": "0x00051c15050277130002770100157701000200131a020002001341020004000441020003230200044104000500021a03000123019301230300021a0500040004410200032302000441040002001341020002001341020005000241090002410500040003b3090003b30400050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b30500050001b301410900014101b305000400018d01b30141038d0306038d014101b305000400078d0106068d0500" + }, + { + "filename": "35-head-35-yamaguchi", + "data": "0x00051e17030d0001540d000c0002540d000b0003540d00090004540e000a0004540600015406000100035401000254020007540300025406000300015401000154010008540500015406000f540200015401000254060001001554050017540400010017540300010017540300175404000e54020008540300010002540100045401000154010001540300015401000654040001000154030002540b00045401000254010001540154130002540100015401000154010015000154050014000154020001540300" + }, + { + "filename": "35-yamaguchi-anglerfish", + "data": "0x00091f15020c0005830c000900048301660683090008000a830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" + }, + { + "filename": "35-yamaguchi-fuku", + "data": "0x00051b14030400026212000400036211000400046203610495016105950300050001950361039501590395016101950126012301260195020001610300029502610395015901610159016103950326029501ed0261069501610195015903610159016101950161049501ed0100026102950161029501610195016101590361015901950161059502ed02610301016103950161015903610159016105950201010002610401059501590161015904950501010001610300130101000200026212010200020003621101020002000262010011010200060008010259050103000600080101590601030007000d010400" + }, + { + "filename": "35-yamaguchi-kawarasoba", + "data": "0x00051e1504030001061600010002060700019e0300019e08000106020001060900019e0300019e0900010601000106080001da010101da010001da010101da05000306020001000306040001d0012301d0012301d0012301d0012301d00900040001060200011501230115012301150123011501230115012301150200010605000400010601000d1503000206020001000306010001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb0400010601000106040001eb01e601eb01e601eb01e603eb01e601eb01e601eb01e601eb05000106010604000fe80300020601000100010603000fe802000106030002000106010011e8010001060300040002e80d2302e80200010602000300010c02230d0c0223010c04000200040c0d00030c01230200010c0200020c1100020c0223010c0200010c1300030c0100" + }, + { + "filename": "35-yamaguchi-shoin", + "data": "0x00031715070100030c0c000200050c09000400060c060002000d23010001000f2301000223048805230388012302230e8802230e8802230388032304880323018801230f880588032304880323018806880123028801ca0288012303880a8801ca05880a8801ca05880200088801ca05880200058802ca018801ca018801ca03880200048801ca028802ca028801ca028803000c880100050009880200" + }, + { + "filename": "35-yamagudhi-footballfish", + "data": "0x00031f15020900023402eb100008000134040001eb01da0e0007000134050001da015d01da0d0007000134040001da015d0101015d01da0c0008000134040001da015d01da0d000900023401eb020001da0e000c0002eb03830c0009000483016601eb0583090008000683013403830266018308000100013403000f83016603830300013401000234020002830266118302000234033402830166068301f7038301f709830334023402830166118301660483023401000134098307090483016604830134010002000283016603830d0906830200030004830109035f0166055f0166035f01090483030004000283010901660d5f0166010902830400040001830109018302090166015f0166015f0166015f0166015f0166015f0166020901830109050009000b090900" + }, + { + "filename": "36-head-36-tokushima", + "data": "0x00031b15031500015402001200035403001100055402000b0005540100055402000400035402000c54030003001254030002001254040001001554020001001654010001001654010016540200020016540500025402000d54020009000b54040009000a5405000c00065406000c00045408000b00055408000c0003540900" + }, + { + "filename": "36-tokushima-awa-odori01", + "data": "0x000118140d010002f80800010004f8030001f90200010006f8010001f90200010007f801060200020005f80106020001f90200012303f90106030001f9030003f9030001010100010003010267030102000401026701010400030103670500039e0367050002e2019e0367050004e2014f060002e2044f05000200044f050001000144044f050001000344014f06000300010107000200010108000200012301440700" + }, + { + "filename": "36-tokushima-naruto-wakame", + "data": "0x00021a15070b000194035c04940b000348035c02480b00035c0100025c02000b00035c0200015c020004000748035c01480400020002480723035c012302480200010001480923025c0423014801000148042306de015c02de042301480148022302e90bde022301480148012304e905de015c05de01230148014807de045c06de0148014805de055c07de0148014806de035c03de02e903de014801480bde04e902de0148014811de014802480fde0248034801de055c07de034801001148010002000f48020004000b480400" + }, + { + "filename": "36-tokusima-whirlpools", + "data": "0x00011d15030800010111000700010101300101058d040001010600090001300601020001010130010105000600018d0300073002000130010105000500018d010102300801018d02000130018d04000400018d01010130018d0101088d0101028d01300101018d030001000101028d0101013001010130038d0530028d0101028d01300101018d0200010101000201023001010130018d013006010130028d0101028d013001010200040002010130028d01010330028d02010130028d0101018d01300300040001010130018d013001010130068d02010130028d010101300300030001010130018d013001010130028d0401028d02010130018d010101300300020002010130018d01010130028d0101038d0201018d02010130018d0101013003000100010101000130028d01010130018d0101028d0101028d0101028d01010130018d01010130020101000100010101000101028d01010130018d0101018d0101038d0101028d01010130018d010101300101010001010100010102000101018d01010130018d0101028d0101018d0101038d01010130018d010101300200010102000201038d0130018d0101078d01010130018d010101300100020101000400018d0101018d0130018d01300101058d01010130028d01010130010103000500013001010130028d013005010130028d0101018d01300101030005000130018d01010130028d0530028d0101018d0130010104000600023002010130058d0201018d0130010105000a0006010a00" + }, + { + "filename": "37-head-37-kagawa", + "data": "0x00041c15041200045402001000055403000d0001540200055403001200015401000154030018000400015404000254010001540100025408000800085401000154060007000c54050005000e5405000154010001540100115403000100165401000200165402000f540500025402000d54090002000554030002540c00020003541300010003541400020001541500" + }, + { + "filename": "37-kagawa-bonsai", + "data": "0x00021d14040900071b09000700051b020f031b08000600010f041b040f031b07000500030f011b070f011b0200040f02000400070f04ca0300010f041b02000400050f04ca020f011b02ca031b030f01000b0001ca020f031b0200011b040f01000700031b010f0100010f051b07000600051b010f030003ca07000500031b03ca010f020004ca0100051b01000200021b030001ca030009ca031b020f0100011b020f011b010001ca050004ca0300011b02ca030f011b040f02ca040003ca0500020f0100020f0100060f040003ca0c00090005ca0b00090007ca09000600015401010354048c045406000600015401010b54060007000154010109540700" + }, + { + "filename": "38-ehime-iyokan", + "data": "0x00051a140604000c4204000200084201e1074202000100024201250f42010002420125114201420125124201420125124214421442144214421442144214420100054203b30a42010002001042020003000e420300" + }, + { + "filename": "38-ehime-jakoten", + "data": "0x0006191406020010d20100010001d203d102d2018e0bd201d204d10ed201d204d101d2018e0ad2018e01d201d204d106d2018e07d201d204d10ed201d204d10ed201d204d10ed201d204d10ed201d204d10dd2018e01d204d10ed201d204d105d2018e01d2018e06d201d204d10ed2010001d203d101d2038e08d2018e01d2020010d20100" + }, + { + "filename": "38-ehime-mandarin-orange" + }, + { + "filename": "38-ehime-onsen01", + "data": "0x00031b15050700015504000155040001550400060002550300025503000255040005000255030002550300025505000400025503000255030002550600040002550300025503000255060004000255030002550300025506000400025503000255030002550600050002550300025503000255050006000255030002550300025504000200025502000255030002550300025501000155020001000255030002550300025503000255010002550100025503000255030002550300025503000255025502000255030002550300025504000255025502000155040001550400015505000255025512000255035510000355010003550e000355010002001255020004000e550400" + }, + { + "filename": "38-ehime-onsen02", + "data": "0x00031b150507000101040001010400010104000600020103000201030002010400050002010300020103000201050004000201030002010300020106000400020103000201030002010600040002010300020103000201060004000201030002010300020106000500020103000201030002010500060002010300020103000201040002000374013f0201033f0201033f02010274020001000274033f0201033f0201033f0201013f027401000274033f0201033f0201033f0201033f02740274023f0201033f0201033f0201043f02740274023f0101043f0101043f0101053f02740274123f02740374103f0374010003740e3f0374010002001274020004000e740400" + }, + { + "filename": "38-ehime-onsen03", + "data": "0x00031c14050b00010c0b000900050c09000800016101740161017401610174016108000700017407de01740700020001610300016101de01ae05de01ae01de0161030001610200030001740161017401de04ae01de04ae01de0174016101740300030003de03ae053f03ae03de0300060003ae013f02e70126013f03ae0600060003ae053f03ae060006000bae060006000b3f0600013f03000f3f0300013f0100153f010002001321020004000f01040002000157010004ae015702ae015702ae015704ae0100015702000200010c010001ae0306015701ae033601ae0157030601ae0100010c02000200010c010001ae030602ae033602ae037401ae0100010c0200" + }, + { + "filename": "38-ehime-tai-somen", + "data": "0x00031c18010d000189020001890a000b0001890100015f01890100015f0189090008000357015f01890157015f01890157015f018902570600070003570b20015705000600025701890e200400050002570189102003000500015701890320018d0220018d0220018d0220018d0520020001200300025714200100010001200200015715200100010001890120010001571220028d01200100020001891320018d0101012302200200012001890c200389042001010123022002000189012002060b20038907200100018901200100015703060a200389032003090100012002000157018904060a20010603200306012003000257018907060401080601000400035712060200040004570f06040004000157010002570400068904000157040004000157010001570f000157040004000157110001570400040001571600" + }, + { + "filename": "38-ehime-taimeshi", + "data": "0x00041a16060600082306000300030f0848022304000200050f01e90182020101e9015f01010248012303000100060f02e9018202e90182010101e901010148012302000100030f0282015f02e9015f02e9015f02e9015f01010148012301000100020f03e90182015f01e9018201e9028202e9018201010148012301000123020f04e9018201e9015f01e9015f02e9025f02010148012301230148030f03e9044202e9028202e901480123012301480201025f0182044201010142015f04e90148012301230148015f028202e9044201e4014204e9015f0148012301230148018203e9015f064202e9015f01820101014801230123014803e9015f018201e9044201e9015f02820201014801230123014802e9015f018201e9018201e90101018204e90301014801230100012301480101018202e9018202e90182015f04e901010148012301000100012301480101018201e90101015f03e90182015f018202e9010101480123010002000123014803010182015f03e901010282010101480123020003000123024802010182015f02e9020102480123030004000223084802230400060008230600" + }, + { + "filename": "38-head-38-ehime", + "data": "0x00021b1a020f00015409000f00015409001000015408000e0001540a000d00035409000900015402000454080001540c00055402000354010002540b000e540a000f540a00095406000a000754080009000854080007000954090006000a54090005000b5409000300025401000a54090001000254030006540d000154040008540c00070007540b00080004540d00060005540e0007000254010001540e00060004540f0005000154010003540f0007000154010001540f00" + }, + { + "filename": "39-head-39-kochi", + "data": "0x00041a15030d0002540400015403000900085401000254030008000c54030007000e54020007000e54020006000854020007540300095406000454010004000754080003540100050005540a0002540100040006540b000154010001000154010006540e00020006540f00020006540f0002000454110003000454100002000454110001000154010001540100015411000154050001541000" + }, + { + "filename": "39-kochi-bonito", + "data": "0x00041d15020f0001260b00100001260a000f0002260a0006000126070003260a0007000126040006260900060002260c54070006001054050005000354065601540556045403000154030003540f56035402000156015401000154025606540a56010101230254010002560100035610060201025601540106025616060296025601001506019602e901560154020003e9015412e901000154040003e9095408e90200060012e90300060002260ee90500050001260b0002260800" + }, + { + "filename": "40-fukuoka-mojiko", + "data": "0x00031e14030d0001960d0009000196030001960300019609000600019602000196072701960100019607000600019602000927010001960700060002610b27026106000500046102270106016b010101270106022704610500050001a501e0010601a5032701a501aa01a5032701a501e0010601a50500040009aa015709aa0400050001c1025701c1025701e9035701e9025701c1025701c105000200032701c1015701e001c102e001e903e001e902e001c1015701e001c1032702000100042701c1015701e001c101e0010601e901e0010601e001e901e0010601c10157010601c1042701000100042701c10157010601c1020601e901e0020601e9020601c10157010601c104270100052701c1029c01c1099c01c1029c01c1052701e00106019c01e0010601c1025701c1025701e9035701e9025701c1025701c101e00106019c01e00106052701c1015701e001c10103036f016d036f010301c1015701e001c10527015701e00106015701e001c10157010601c1016d01970146039701460197016d01c10157010601c101e0015701e001060157015702060157010601c10157010601c1010301460197034601970146010301c10157010601c101060157020601570557017f0257017f0103019701460397014601970103017f0257017f0557" + }, + { + "filename": "40-fukuoka-tenmangu", + "data": "0x00031e14021b0001660100016a170001660200040013080500016a0400020801c4020801c4020801c4020801c4020801c402080500016604000185010801b80d8501b8010801850500026a0200028501b805850398058501b80285030002660129016a0200028501b804850584048501b802850300012901660400028501b80385028403bf0284038501b8028505000200048501b80185038401bf03c401bf0384018501b8048503000200061804bf017701c4017704bf061803000300031804a201bf017703bf017701bf04a2031804000300011801eb011802eb011801eb01bf011803eb011801bf01eb011802eb011801eb011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300011801b5011802b5011801b501bf011803b5011801bf01b5011802b5011801b5011804000300071801bf051801bf0718040003000118010d0118020d0118010d01bf0118030d011801bf010d0118020d0118010d011804000200019d026f029d026f029d026f029d026f029d026f019d026f019d03000600016f029d026f029d026f029d026f029d016f0600" + }, + { + "filename": "40-head-40-fukuoka", + "data": "0x00021b18051200015403000b00045402000154040009000954040007000a54050008000a54040008000a5404000500015401000c5403000300015402000d5403000200035402000f54010014540100020014541154050004000c5406000600015402000754060009000654070008000854060007000954060006000954070005000b5406000500075401000354060006000454040002540600070002540d00070002540d00" + }, + { + "filename": "41-head-41-saga", + "data": "0x00031c19040300015414000200045412000200045412000300045406000354080001000154020003540100095407000200115403000254040010540100035403001554030015540100015401001354020002540100135402001454040001001254050001001254050002000d5401000254060004000a5403000154060006000554010001540b00050007540c00060006540c00070006540b00080006540a00090005540a000c0002540a00" + }, + { + "filename": "41-saga-mudskipper-fiddlercrab", + "data": "0x0002181502070003610c0005000361028d0c0004000261018d036105000278050004000161018d0361018d0305018d0105017801920105040003000461018d01610105018d0805030003000161018d0161018d0705018d02050292030001000161018d020001610205018d0305018d0305029204000361018d01000c050500018d0161018d01610205018d0305018d020501d7010507000361090506d70400018d0161018d0105018d0205018d0205030004d705000361060501d7040002d70600018d0161018d060501d70c0001000261018d0105018d030502d70b000100018d02610405018d02d70b0002000161018d0205018d030502d70400019201000192020001a10200018d0161018d0305018d030503000149017801000178010002090300018d0161018d03000305018d0300047502090900018d0361018d0200047502000a000161028d0200017501000275010001750100" + }, + { + "filename": "42-head-42-nagasaki", + "data": "0x00011a1908080001540900070002540900070002540900070001540a00070001540a00060001540b00060001540b00120012000b00015406000b0001540600120012000900015408001200080004540600050001540200015401000254060008000154020002540500050001540400015401000254040004000354040001540100025403000400025404000254020002540200030001540100015405000754010002540a000154020002540100035408000254010002540100015401000154080001540600" + }, + { + "filename": "42-nagasaki-meganebashi", + "data": "0x00081a13060200100802000408017e0108017e0608017e0108017e04080208017e0400017e0408017e0400017e020802080600017e0208017e060002080108017e060004080600017e0108017e080002080800017e019108000291080001910191080002910800019102910700039107000191010003910300029102000391030002910100030004910600049103000700019101000191010001910800" + }, + { + "filename": "42-nagasaki-saseboburger", + "data": "0x00071c1504030002c2042b01c2032b01c2012b01c2032b02c20300020014c20200020014c2020002000393031c0593011c0493021c029302000100151c0100011c011c0100031c0e55041c010006000ee0011c0300040007e009e50400020009e5099302e50200010002e502da01010dda010102da01e5010001e503da010101da01010bda010101da010102da0100020014970200020007550585065504000200019301c2015501c2045508c2015502c201930200030012930300" + }, + { + "filename": "43-head-43-kumamoto", + "data": "0x00031816040e00035403000a0002540300035402000800065401000354020007000c54010007000c54010008000b54010009000b5409000a5401000a000854020007000a540300060001540300075403000154010001540600075404000100025402000354010006540500035401000354020006540500035403000154010009540300010002540100015402000a5403000254050009540400010001540100015402000b54030003000154020003540100065404000a0004540600" + }, + { + "filename": "43-kumamoto-karashirenkon", + "data": "0x00051a1505060009c60600040002c609d402c60400020002c606d401c606d402c60200010001c604d401c602d403c602d401c604d401c60100010001c602d404c601d403c601d404c602d401c6010001c604d403c602d401c602d403c604d401c601c605d401c607d401c605d401c601c602d402c60bd402c602d401c601c601d404c604d401c604d404c601d401c601c602d402c60bd402c602d401c601c605d401c607d401c605d401c601c604d403c605d403c604d401c6010001c602d404c605d404c602d401c60100010001c604d401c602d403c602d401c604d401c60100020002c605d402c606d402c60200040002c609d402c60400060009c60600" + }, + { + "filename": "43-kumamoto-kumamotocastle", + "data": "0x00021d15020800019d12000700019d0101019d11000600059d10000600050e1000040002c80206019d020602c80e00040002c8029d0101029d02c80e00030002c8029d0323029d02c80d0003000501019d05010800019d04000300010e0223010e019d0101019d010e0223010e0700019d0101019d0300020001c8036f019d0323019d036f01c8060003060300020001c8020e019d0101030e0101019d020e01c8039d03c8019201230192030002c8019d0c6f02c8039d01c8036f01c802000100019d0101019d0c01026f020101c80192019d019202c8010001000392010e0623010e0223020e029201230192019d0301019d01010100010003920c0e0492052301920100059d0100010101000101010001010100010101fa010101fa0a92010005010159025e0659015e02cf01ef015e030e01cf01ef02cf0100020e0392015e0259015e0159025e0159015e025901ef01cf0159030e01ef02cf01ef01cf020e03920159015e0859015e015901cf025e020e01cf02ef02cf025e01cf01ef01cf015e0159025e0159015e0159025e0259015e0259015e0159010e01ef02cf02ef" + }, + { + "filename": "44-head-44-oita", + "data": "0x00041915040b0003540700060002540200055406000600095406000200025401000a54060001000c5401000154060001000a540100015408000b540a0001000a54020001540100035403001154040010540100015403000100025402000c5404000100035402000e5401000200025402000c54030007000c540100015407000d54010007000c54020008000254010004540200035401000b000254040001540300" + }, + { + "filename": "44-oita-beppujigoku", + "data": "0x00021c17030a00027f0100017f0b000800027f0f000700017f0300017f0d000700017f0300017f0200039b0230019b05000700037f0500063004000300029d0500017f0e000200049d0300017f0100027f060001570100015703000200019d01c8019d01c80300017f0300017f0400055702000100069d0300017f0200017f0400056f02000c00017f0500016f0100036f020019000100023e0100023e0500017f070003520300063e030001ee027e01ee017e01ee020002520600033e0105023e020003a701ee02a7030001520100045201230100063e0c0005520238010002c1023e0300010101060f00060001010100010101060f000800010101060101020006bf06000600010101000101010601000106020006bf0500080001010106070001bf010001bf05001900110001bf010001bf0500" + }, + { + "filename": "44-oita_usajingu", + "data": "0x00031e1501070001b80d0001b8070007000fb80700060011b80600050013b80500060002bf01b402bf01b402bf01b402bf01b402bf01b402bf0600070001bf01b4020101b4020101b4020101b4020101b401bf0700020006b8016d02bf016d05bf016d02bf016d06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020006b801bf020101bf010103bf010101bf020101bf06b80200020004b802bf01b402bf01b402bf01b402bf01b402bf01b402bf04b80200010006b801bf01b402bf01b402bf01b402bf01b402bf01b401bf06b80100010007b801bf020101bf020101bf020101bf020101bf07b8010007b80101016d02bf016d05bf016d02bf016d010107b80200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010102000200010d01bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf010d02000200010101bf01dd010f01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01bf01dd010f01dd010f01bf0101020002000101016d0401016d02bf016d01dd010f01bf01dd010f016d02bf016d0401016d0101020001000dbf016d0dbf0100030005bf016d02bf016d05bf016d02bf016d05bf0300" + }, + { + "filename": "45-head-45-miyazaki", + "data": "0x0004161708070001540100015402000254060008540500085401000500075402000400095401000400085402000500075402000400075403000500065403000400075403000a540400010009540400020008540400030007540400030008540300050005540400050005540400070002540500060003540500080001540500" + }, + { + "filename": "45-miyazaki-aoshima", + "data": "0x00061d14030500109205000600027f0192047f0192047f0192017f0600080001bf040001bf040001bf0700010001e1020001e110bf050001e1010001e1010001e1010001e1010001bf090001bf070001e1010002e1010001e1020001bf090001bf0700010004e1010002e101bf090001bf070001e1010002e1021b02e101bf0192080001bf01920600030005e102bf080002bf0600030003e1011b019202bf010006af019202bf0600020002e1011b02e103bf07af03bf01d6026001d60260020003e101c801e102bf019207af02bf0192029902210299010003e1011b019d01e101bf019208af01bf0192016002d6026001d60100010001e1011b02e1019d01e1019209af019201af01990221039901000100011b03e1019d0caf01d6026001d6016001d60200" + }, + { + "filename": "45-miyazaki-chickennanban", + "data": "0x00061a14040800078707000600038701790787050004000a8701790487030004000287017902870179028701790587029c02000200029c0c87059c01000100029c0c87079c0100029c0187017903870179028701790287089c0100029c0a87099c029c0a870a9c029c08870c9c0100029c018701790287017901870c9c01000100029c05870d9c01000200029c028701790187029c0111099c02000200029c0387049c0311069c020005000e9c0300" + }, + { + "filename": "46-head-46-kagoshima", + "data": "0x0003181f03070001540100015402000254070007000754070006000a54050007000954050007000a5404000200015403000b54040007000b54030001000154060005540200045402000154080003540300065409000354010008540900025403000754080003540400055401000600065403000454020007000554040004540100070006540300045401000c0001540200045402000f00035403000e0002540500150015001500030001540f0001540100130001540100120002540100120002540100120001540200060002540300015405000254020009000154010002540400025402000a0004540700" + }, + { + "filename": "46-kagoshima-goromon", + "data": "0x00051e1502080001a50b0001a50700070001a50d0001a506000600112105000500022101950121019501210195012101950121019501210195012101950121019502210400040001210195012101950121019501210195012101950121019501210195012101950121019501210195012103000500067f0121019501210195012101950121067f040007000f7f060007000554057f05540600050004210354057f055406000500012101950121019501210195012101950121019501210195012101950121019501210195012104000400022101950121019501210195012101950121019501210195012101950121019501210195022103000500017f018a037f018a027f018a017f018a027f018a0195027f018a017f0400020001d702050dca0195017f019503ca01d7020501d70200010503d701ca035001ca015001ca030001ca059501ca01d7010502d70100010004d7010501ca035001ca015001ca030001ca0150038a015001ca04d70100010002d7020502d701ca025001ca018a01ca030001ca048a01ca02d70205020001d7010504d7010501ca025001ca018a01ca030001ca048a01ca010503d70200" + }, + { + "filename": "46-kagoshima-shirokuma", + "data": "0x00011914060400030f0c000700010f0271090007000271010101710800020001c00300010104710201020001c00300020002c004010271050101c00300020001c0020101e4060101b7030103000200010102e4030101b7060102b902000100020102e40a0102b9010101000100030102e40201017109010100010102650401017101ba0171020102da0501010102650f0101000100120113010106110101060106017f0f06017f01060106117f0106010001060f7f0106010002000106047f0401057f0106020003000206097f02060300050009060500" + }, + { + "filename": "47-head-47-okinawa", + "data": "0x00011c15050f00015407000e000154070001541700170017001300015403001300025402001200035402000b0001540500045402000d00025402000354030001540c00075403000e00045405000d00035407000b00045408000a0002540b000a0003540a000b0003540900090003540b0003000154040003540c00090003540b00090002540c00" + }, + { + "filename": "47-okinawa-goya-chanpuru", + "data": "0x00061915070600018702a2018701a2018706000400018701a20187016d010f018701a2028701a20400030001a20187020f0201020f018703a2030002000287010f01380222010f0122016d01380122010f02870200010002a201010138026d010f012202010138016d0122010f01a20187010001a202870201016d010f02380101010f020102a20287010002a2020f0122010f01010122020f0122010f016d010f012203870287012201380122010f0101016d0122016d0122010f016d0138010f016d018701a2028701220101010f016d013802010122033801010122020f01a20287016d0201022201380201020f026d0101022201a2010001a2010f01220138020f0101026d0222010f01220187010f018701000100018701a2013801220201016d0122010f0201016d01220138018701a2010002000287010f01010438010f0222010f0287020003000287010f0438010f0122010f02a20300040002a20187016d0122010f01a2038704000600028702a202870600" + }, + { + "filename": "47-okinawa-siisa", + "data": "0x00041d14030200033706000437060003370200030004370200033702000337020004370300040008370200083704000300023703460137034602370246023702460337030003000237026602370266043701230337012303370300020001460237016601230237016601230337012301370123013701230137012302370146020001000246143702460100020001460337042307370423023701460200010003460837024606370123013702460200030002460637014602000146063702460300030002370746020007460237030001000146010003370246023701460137020001370146023702460337010001460100024601000937020009370100024601460b3702000b37014601000a370123020001230a3701000200013701460837022308370146013702000400023701660200023701660200016602370200016602370400" + } + ] + } + } \ No newline at end of file diff --git a/contract/test/image-original-nouns-data.json b/contract/test/image-original-nouns-data.json new file mode 100644 index 00000000..98f8e212 --- /dev/null +++ b/contract/test/image-original-nouns-data.json @@ -0,0 +1,1943 @@ +{ + "bgcolors": ["d5d7e1", "e1d7d5"], + "palette": [ + "", + "ffffff", + "c5b9a1", + "cfc2ab", + "63a0f9", + "807f7e", + "caeff9", + "5648ed", + "5a423f", + "b9185c", + "b87b11", + "fffdf2", + "4b4949", + "343235", + "1f1d29", + "068940", + "867c1d", + "ae3208", + "9f21a0", + "f98f30", + "fe500c", + "d26451", + "fd8b5b", + "5a65fa", + "d22209", + "e9265c", + "c54e38", + "80a72d", + "4bea69", + "34ac80", + "eed811", + "62616d", + "ff638d", + "8bc0c5", + "c4da53", + "000000", + "f3322c", + "ffae1a", + "ffc110", + "505a5c", + "ffef16", + "fff671", + "fff449", + "db8323", + "df2c39", + "f938d8", + "5c25fb", + "2a86fd", + "45faff", + "38dd56", + "ff3a0e", + "d32a09", + "903707", + "6e3206", + "552e05", + "e8705b", + "f38b7c", + "e4a499", + "667af9", + "648df9", + "7cc4f2", + "97f2fb", + "a3efd0", + "87e4d9", + "71bde4", + "ff1a0b", + "f78a18", + "2b83f6", + "d62149", + "834398", + "ffc925", + "d9391f", + "bd2d24", + "ff7216", + "254efb", + "e5e5de", + "00a556", + "c5030e", + "abf131", + "fb4694", + "e7a32c", + "fff0ee", + "009c59", + "0385eb", + "00499c", + "e11833", + "26b1f3", + "fff0be", + "d8dadf", + "d7d3cd", + "1929f4", + "eab118", + "0b5027", + "f9f5cb", + "cfc9b8", + "feb9d5", + "f8d689", + "5d6061", + "76858b", + "757576", + "ff0e0e", + "0adc4d", + "fdf8ff", + "70e890", + "f7913d", + "ff1ad2", + "ff82ad", + "535a15", + "fa6fe2", + "ffe939", + "ab36be", + "adc8cc", + "604666", + "f20422", + "abaaa8", + "4b65f7", + "a19c9a", + "58565c", + "da42cb", + "027c92", + "cec189", + "909b0e", + "74580d", + "027ee6", + "b2958d", + "efad81", + "7d635e", + "eff2fa", + "6f597a", + "d4b7b2", + "d18687", + "cd916d", + "6b3f39", + "4d271b", + "85634f", + "f9f4e6", + "f8ddb0", + "b92b3c", + "d08b11", + "257ced", + "a3baed", + "5fd4fb", + "c16710", + "a28ef4", + "3a085b", + "67b1e3", + "1e3445", + "ffd067", + "962236", + "769ca9", + "5a6b7b", + "7e5243", + "a86f60", + "8f785e", + "cc0595", + "42ffb0", + "d56333", + "b8ced2", + "b91b43", + "f39713", + "e8e8e2", + "ec5b43", + "235476", + "b2a8a5", + "d6c3be", + "49b38b", + "fccf25", + "f59b34", + "375dfc", + "99e6de", + "27a463", + "554543", + "b19e00", + "d4a015", + "9f4b27", + "f9e8dd", + "6b7212", + "9d8e6e", + "4243f8", + "fa5e20", + "f82905", + "555353", + "876f69", + "410d66", + "552d1d", + "f71248", + "fee3f3", + "c16923", + "2b2834", + "0079fc", + "d31e14", + "f83001", + "8dd122", + "fffdf4", + "ffa21e", + "e4afa3", + "fbc311", + "aa940c", + "eedc00", + "fff006", + "9cb4b8", + "a38654", + "ae6c0a", + "2bb26b", + "e2c8c0", + "f89865", + "f86100", + "dcd8d3", + "049d43", + "d0aea9", + "f39d44", + "eeb78c", + "f9f5e9", + "5d3500", + "c3a199", + "aaa6a4", + "caa26a", + "fde7f5", + "fdf008", + "fdcef2", + "f681e6", + "018146", + "d19a54", + "9eb5e1", + "f5fcff", + "3f9323", + "00fcff", + "4a5358", + "fbc800", + "d596a6", + "ffb913", + "e9ba12", + "767c0e", + "f9f6d1", + "d29607", + "f8ce47", + "395ed1", + "ffc5f0", + "cbc1bc", + "d4cfc0" + ], + "images": { + "bodies": [ + { + "filename": "body-bege-bsod", + "data": "0x0015171f090e020e020e020e02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02" + }, + { + "filename": "body-bege-crt", + "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" + }, + { + "filename": "body-blue-sky", + "data": "0x0015171f090e040e040e040e04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04020401000b04" + }, + { + "filename": "body-bluegrey", + "data": "0x0015171f090e050e050e050e05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05020501000b05" + }, + { + "filename": "body-cold", + "data": "0x0015171f090e060e060e060e06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06" + }, + { + "filename": "body-computerblue", + "data": "0x0015171f090e070e070e070e07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07020701000b07" + }, + { + "filename": "body-darkbrown", + "data": "0x0015171f090e080e080e080e08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08020801000b08" + }, + { + "filename": "body-darkpink", + "data": "0x0015171f090e090e090e090e09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09020901000b09" + }, + { + "filename": "body-foggrey", + "data": "0x0015171f090e030e030e030e03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03020301000b03" + }, + { + "filename": "body-gold", + "data": "0x0015171f090e0a0e0a0e0a0e0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a020a01000b0a" + }, + { + "filename": "body-grayscale-1", + "data": "0x0015171f090e0b0e0b0e0b0e0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b" + }, + { + "filename": "body-grayscale-7", + "data": "0x0015171f090e0c0e0c0e0c0e0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c020c01000b0c" + }, + { + "filename": "body-grayscale-8", + "data": "0x0015171f090e0d0e0d0e0d0e0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d020d01000b0d" + }, + { + "filename": "body-grayscale-9", + "data": "0x0015171f090e0e0e0e0e0e0e0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e" + }, + { + "filename": "body-green", + "data": "0x0015171f090e0f0e0f0e0f0e0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f020f01000b0f" + }, + { + "filename": "body-gunk", + "data": "0x0015171f090e100e100e100e10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10021001000b10" + }, + { + "filename": "body-hotbrown", + "data": "0x0015171f090e110e110e110e11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11021101000b11" + }, + { + "filename": "body-magenta", + "data": "0x0015171f090e120e120e120e12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12021201000b12" + }, + { + "filename": "body-orange-yellow", + "data": "0x0015171f090e130e130e130e13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13021301000b13" + }, + { + "filename": "body-orange", + "data": "0x0015171f090e140e140e140e14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14021401000b14" + }, + { + "filename": "body-peachy-B", + "data": "0x0015171f090e150e150e150e15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15021501000b15" + }, + { + "filename": "body-peachy-a", + "data": "0x0015171f090e160e160e160e16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16021601000b16" + }, + { + "filename": "body-purple", + "data": "0x0015171f090e170e170e170e17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17021701000b17" + }, + { + "filename": "body-red", + "data": "0x0015171f090e180e180e180e18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18021801000b18" + }, + { + "filename": "body-redpinkish", + "data": "0x0015171f090e190e190e190e19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19021901000b19" + }, + { + "filename": "body-rust", + "data": "0x0015171f090e1a0e1a0e1a0e1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a021a01000b1a" + }, + { + "filename": "body-slimegreen", + "data": "0x0015171f090e1b0e1b0e1b0e1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b021b01000b1b" + }, + { + "filename": "body-teal-light", + "data": "0x0015171f090e1c0e1c0e1c0e1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c021c01000b1c" + }, + { + "filename": "body-teal", + "data": "0x0015171f090e1d0e1d0e1d0e1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d021d01000b1d" + }, + { + "filename": "body-yellow", + "data": "0x0015171f090e1e0e1e0e1e0e1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e021e01000b1e" + } + ], + "accessories": [ + { + "filename": "accessory-1n", + "data": "0x0017141e0d0100011f0500021f05000100011f0300011f01000100011f0200011f02000300011f03000200011f0200021f0100011f0200011f0100011f0400011f0100011f" + }, + { + "filename": "accessory-aardvark", + "data": "0x0018151a0d020003200100012001000100052002000120010001200100012001000220" + }, + { + "filename": "accessory-axe", + "data": "0x0017141d0e01010521010104210100010103210200010101210100012102000101020001210200030001210200030001210200" + }, + { + "filename": "accessory-belly-chameleon", + "data": "0x0017121e0d010001220100012201000500022201000222050002220100022205000222010001220100010001220300" + }, + { + "filename": "accessory-bird-flying", + "data": "0x0018151a0d0100022302000223010001230200022302000123030002230300" + }, + { + "filename": "accessory-bird-side", + "data": "0x0017131c0d040001240100030002240100042401230125010004240100020003240100010001240400" + }, + { + "filename": "accessory-bling-anchor", + "data": "0x0015141d0d01260500012601000126030001260100020001260100012602000300012603000300012603000200032602000300012603000100012601000126010001260100020003260200" + }, + { + "filename": "accessory-bling-anvil", + "data": "0x0015161e0b0127090001270100012707000127010002000127050001270200030001270300012703000400032704000500010d05000200020d052702000300020d032703000400030d04000300020d03270300" + }, + { + "filename": "accessory-bling-arrow", + "data": "0x0018141e0d0400032605000226040001260100012603000126030001000226040003260400010001260500" + }, + { + "filename": "accessory-bling-cheese", + "data": "0x0015141e0c012606000126010001260400012601000200012602000126020003000226030002000126020001260200010006260100020001260128012601280126010003000426010004000126012801260100050002260100" + }, + { + "filename": "accessory-bling-gold-ingot", + "data": "0x0015141b0c012606000126010001260400012601000200012602000126020003000226030001000629010001000426022901000100042602290100" + }, + { + "filename": "accessory-bling-love", + "data": "0x0015141d0c01260600012601000126040001260100020001260200012602000300022603000200012602000126020001000126012804260100010006260100020004260200030002260300" + }, + { + "filename": "accessory-bling-mask", + "data": "0x0015141e0c01260600012601000126040001260100020001260200012602000300022603000100062601000100012601000226010001260100010006260100020004260200010001260100022601000126010001000126040001260100" + }, + { + "filename": "accessory-bling-rings", + "data": "0x0017141d0d0300032a01000200012a0300012a0100032a0200012a012a0100012a0100012a0100012a012a0200032a0100012a0300012a02000100032a0300" + }, + { + "filename": "accessory-bling-scissors", + "data": "0x0016131c0e012b0300012b012b0300012b0100012b0100012b01000100012b0100012b01000200012b0200022b0100022b022b0100022b" + }, + { + "filename": "accessory-bling-sparkles", + "data": "0x0016141d0c010001260600032601000126020001260100012602000126030003000326020001000726030003260200040001260300040001260300" + }, + { + "filename": "accessory-body-gradient-checkerdisco", + "data": "0x0015171f09022c0223022c0223022c0223022c022c0223022c0223022c0223022c0223022d0223022d0223022d02230223022d0223022d0223022d0223022e01000123022e0223022e0223022e022e01000123022e0223022e0223022e02230100012f0223022f0223022f022302230100012f0223022f0223022f0223023001000123023002230230022302300230010001230230022302300223023002230100013102230231022302310223" + }, + { + "filename": "accessory-body-gradient-dawn", + "data": "0x0015171f090e320e320e330e33021101000b11021101000b11023401000b34023401000b34023501000b35023501000b35023601000b36" + }, + { + "filename": "accessory-body-gradient-dusk", + "data": "0x0015171f090e320e320e240e24023701000b37023701000b37023701000b37023701000b37023801000b38023801000b38023901000b39" + }, + { + "filename": "accessory-body-gradient-glacier", + "data": "0x0015171f090e3a013a013b013a013b013a013b013a013b013a013b013a013b013a013b0e3b013b0104013b0104013b0104013b0104013b0104013b0104013b0104020401000b04020401000b04020401000b040104013c0100013c0104013c0104013c0104013c0104013c0104013c023c01000b3c013c013d0100013d013c013d013c013d013c013d013c013d013c013d023d01000b3d" + }, + { + "filename": "accessory-body-gradient-ice", + "data": "0x0015171f090e3e0e3e0e3f0e3f023f01000b3f023f01000b3f023c01000b3c023c01000b3c023c01000b3c023c01000b3c024001000b40" + }, + { + "filename": "accessory-body-gradient-pride", + "data": "0x0015171f090e410e410e420e42022a01000b2a022a01000b2a020f01000b0f020f01000b0f024301000b43024301000b43021201000b12" + }, + { + "filename": "accessory-body-gradient-redpink", + "data": "0x0015171f090e440e440e440e09020901000b09020901000b09020901000b09020901000b09020901000b09024501000b45024501000b45" + }, + { + "filename": "accessory-body-gradient-sunset", + "data": "0x0015171f090e460e460e460e25024201000b42021401000b14024701000b47024701000b47024801000b48024801000b48024801000b48" + }, + { + "filename": "accessory-carrot", + "data": "0x0018131d0e0200011d0100011d0300011d010002000249010001000249020001000149030001490400" + }, + { + "filename": "accessory-chain-logo", + "data": "0x0018171c09012601000326010003260100032601000100012603000126030001260300012602260200032601000326010002260100012603000126030001260300012601260200022601000326010003260100" + }, + { + "filename": "accessory-checker-RGB", + "data": "0x0015171f090224021c024a0224021c024a02240224021c024a0224021c024a0224024a0224021c024a0224021c024a024a0224021c024a0224021c024a021c0100014a0224021c024a0224021c021c0100014a0224021c024a0224021c02240100011c024a0224021c024a022402240100011c024a0224021c024a0224024a01000124021c024a0224021c024a024a01000124021c024a0224021c024a021c0100014a0224021c024a0224021c" + }, + { + "filename": "accessory-checker-bigwalk-blue-prime", + "data": "0x0015171f09040003070100030701000207030701000307010003070300030701000307070003070700030701000600030701000307010003000207010003070100030701000107020002070100030705000107020002070700020701070700030701000207040003070100030701000207020702000307010003070300" + }, + { + "filename": "accessory-checker-bigwalk-greylight", + "data": "0x0015171f090400034b0100034b0100024b034b0100034b0100034b0300034b0100034b0700034b0700034b01000600034b0100034b01000300024b0100034b0100034b0100014b0200024b0100034b0500014b0200024b0700024b014b0700034b0100024b0400034b0100034b0100024b024b0200034b0100034b0300" + }, + { + "filename": "accessory-checker-bigwalk-rainbow", + "data": "0x0015171f090400034c010003460100021403120100034c01000346030003120100034c0400031203120400034d01000312030003140100034d010003120246010003140100034d040002460100031404000346010002460400034c010003460100030002120100034c010003460100014d020002120100034c04000112014d020002120400034d01000112" + }, + { + "filename": "accessory-checker-spaced-black", + "data": "0x0015171f0903000223040002230300030002230400022303000e0002230400022304000223022304000223040002230e0003000223040002230300030002230400022303000e000223040002230400022302230400022304000223" + }, + { + "filename": "accessory-checker-spaced-white", + "data": "0x0015171f0903000201040002010300030002010400020103000e0002010400020104000201020104000201040002010e0003000201040002010300030002010400020103000e000201040002010400020102010400020104000201" + }, + { + "filename": "accessory-checker-vibrant", + "data": "0x0015171f09024e0243024f024e0243024f024e024e0243024f024e0243024f024e024f024e0243024f024e0243024f024f024e0243024f024e0243024f02430100014f024e0243024f024e024302430100014f024e0243024f024e0243024e01000143024f024e0243024f024e024e01000143024f024e0243024f024e024f0100014e0243024f024e0243024f024f0100014e0243024f024e0243024f02430100014f024e0243024f024e0243" + }, + { + "filename": "accessory-checkers-big-green", + "data": "0x0015171f09030f0300030f0300020f030f0300030f0300020f030f0300030f0300020f0300030f0300030f02000300030f0300030f02000300030f0300030f0200020f0400030f0300020f020f0400030f0300020f020f0400030f0300020f0300030f0300030f02000300030f0300030f0200" + }, + { + "filename": "accessory-checkers-big-red-cold", + "data": "0x0015171f090319030003190300021903190300031903000219031903000319030002190300031903000319020003000319030003190200030003190300031902000219040003190300021902190400031903000219021904000319030002190300031903000319020003000319030003190200" + }, + { + "filename": "accessory-checkers-black", + "data": "0x0015171f0902000223020002230200022302000200022302000223020002230200022302000223020002230200022302230200022302000223020002230300012302000223020002230200030001230200022302000223020002230200022302000223020002230223020002230200022302000223030001230200022302000223020003000123020002230200022302000223020002230200022302000223" + }, + { + "filename": "accessory-checkers-blue", + "data": "0x0015171f09024a0200024a0200024a0200024a024a0200024a0200024a0200024a0200024a0200024a0200024a02000200024a0200024a0200024a0200024a0200024a0200024a0200024a024a0200024a0200024a0200024a0300014a0200024a0200024a02000300014a0200024a0200024a0200024a0200024a0200024a0200024a024a0200024a0200024a0200024a0300014a0200024a0200024a0200" + }, + { + "filename": "accessory-checkers-magenta-80", + "data": "0x0015171f0902000220020002200200022002000200022002000220020002200200022002000220020002200200022002200200022002000220020002200300012002000220020002200200030001200200022002000220020002200200022002000220020002200220020002200200022002000220030001200200022002000220020003000120020002200200022002000220020002200200022002000220" + }, + { + "filename": "accessory-chicken", + "data": "0x0018131d0d0300024701000201020001010150010004010100020002010200020001010300020001500300" + }, + { + "filename": "accessory-cloud", + "data": "0x0018131a0d020003010100010005010601" + }, + { + "filename": "accessory-clover", + "data": "0x0017151e0d0200021d04000200031d03000100011d0100011d0100021d0100031d0100031d0100021d0100011d0100011d02000200031d03000200021d0100011d02000600021d" + }, + { + "filename": "accessory-collar-sunset", + "data": "0x00151717090e190e260e42" + }, + { + "filename": "accessory-cow", + "data": "0x0018141c0d0500015101000100035101230151013801510100015101230251010001510100015102380151010002000151020001510100" + }, + { + "filename": "accessory-decay-gray-dark", + "data": "0x0015171f090e27020006270300032702000b270100010009270100022701000227010001270100032702000427022701000827030001270200012702000327050003000827030003000127040002270100022701000100012701000b2703000b27" + }, + { + "filename": "accessory-decay-pride", + "data": "0x0015171f090e27024106270341032702420b27014201420927014202270142022701000127012a0327022a0427022701000827032a0127010f01000127020f0327050f020f01000827030f024301000127044302270143022701430143012701000b27021201000b27" + }, + { + "filename": "accessory-dinosaur", + "data": "0x0017131d0d020003520100020001520100015201000200045202000352010001520100035201000652030001520200" + }, + { + "filename": "accessory-dollar-bling", + "data": "0x0015141e0c01260600012601260600012601000126040001260100020004260200030002260300020004260200020002260400040002260200020004260200030002260300" + }, + { + "filename": "accessory-dragon", + "data": "0x0017141e0d020f0100030f01000100030f0100020f020f0300010f01000300030f01000100020f0400010f0300020f01000100030f0200010f0200010f0400" + }, + { + "filename": "accessory-ducky", + "data": "0x0018131a0e0128010002280100010003280114010003280100" + }, + { + "filename": "accessory-eth", + "data": "0x0018131d0e020001530200020001530200010001530154015301000554010003530100020001530200" + }, + { + "filename": "accessory-eye", + "data": "0x0018151c0d02000454020001000154010002540100015401000154020002540200015401000154040001540100020004540200" + }, + { + "filename": "accessory-flash", + "data": "0x0017151d0d0100010106000200020104000300030102000801020003010300040002010200060001010100" + }, + { + "filename": "accessory-fries", + "data": "0x0017131d0e0126010a0126010a01260126010a0126010a012605550155032601550155022602550155012603550555" + }, + { + "filename": "accessory-glasses-logo-sun", + "data": "0x0018161a0d0723020003230100052303230100032301000123" + }, + { + "filename": "accessory-glasses-logo", + "data": "0x0018161a0d07560200015601000156010001560100035603560100035601000156" + }, + { + "filename": "accessory-glasses", + "data": "0x0017141d0d07560156010002560100025602000256010002560700071d011d0100021d0100021d0200021d0100021d" + }, + { + "filename": "accessory-grid-simple-bege", + "data": "0x0016171e09015701000157010001570100015701000157010001570100015701000e00010001570100015701000157010001570100015701000157010001570e000157030001570100015701000157010001570100015701000e00010001570100015701000157010001570100015701000157010001570e00015703000157010001570100015701000157010001570100" + }, + { + "filename": "accessory-heart", + "data": "0x0018141d0d0100025801000258010007580758010005580100020003580200030001580300" + }, + { + "filename": "accessory-hoodiestrings-uneven", + "data": "0x0016121b0f0101010001010101010001010101010001010101010001590101020001590200" + }, + { + "filename": "accessory-id", + "data": "0x0017151a10020001010200052605010501" + }, + { + "filename": "accessory-infinity", + "data": "0x0017141e0d0100020b0400010b0200010b0300010b06000100030b03000300030b01000600010b0300010b0200010b0400020b0100" + }, + { + "filename": "accessory-insignia", + "data": "0x0016131d0e0200015b02000100015b012b015b01000200015b02000100035b0100015b032b015b025b022b015b015b032b015b0100035b0100" + }, + { + "filename": "accessory-leaf", + "data": "0x0018141d0d0300045c0200055c0200055c0200055c0200045c0100025c0500" + }, + { + "filename": "accessory-lightbulb", + "data": "0x0017121c0e045d045d045d0100025d01000100025e01000100025e0100" + }, + { + "filename": "accessory-lines-45-greens", + "data": "0x0015171f090200010f0200010f0200010f0200010f0200015c0200015c0200015c0200015c0200015c01000100010f0200010f0200010f0200010f0200010f0200015c0200015c0200015c0200015c0200010f0200010f0200010f0200010f0200010f01000100015c0200015c0200015c0200015c0200015c0500010f0200010f0200010f0200015c0200015c0200015c0200015c0200015c01000100010f0200010f0200010f0200010f0200010f0500015c0200015c0200015c0200010f0200010f0200010f0200010f0200010f0100" + }, + { + "filename": "accessory-lines-45-rose", + "data": "0x0015171f090200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f01000100015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f01000100015f0200015f0200015f0200015f0200015f0500015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f01000100015f0200015f0200015f0200015f0200015f0500015f0200015f0200015f0200015f0200015f0200015f0200015f0200015f0100" + }, + { + "filename": "accessory-lp", + "data": "0x0016161e0d03000323030001000723010001000723010003230301032303230101010001010323032303010323010007230100010007230100030003230300" + }, + { + "filename": "accessory-marsface", + "data": "0x0018131d0e040001230223010002230300022302000323030002230523" + }, + { + "filename": "accessory-matrix-white", + "data": "0x0018131c0e010b0100010b0100010b0500010b0100010b0100010b0500010b0100010b0100010b" + }, + { + "filename": "accessory-moon-block", + "data": "0x0017131d0e056001600100016001000160010001600100016001000160010001600100016001000160010001600100036001000160016001000360" + }, + { + "filename": "accessory-none", + "data": "0x0000000000" + }, + { + "filename": "accessory-oldshirt", + "data": "0x0015171f090e610e610461075803610e6102620100026103580261015803610261010001610158036102580461026201000361015807610261010001610258016104580361026201000b6102610100016107580361026201000b61" + }, + { + "filename": "accessory-pizza-bling", + "data": "0x0015141d0c0126060001260100012604000126010002000126020001260200030002260300030002260300020004260200020004260200010006260100010006260100" + }, + { + "filename": "accessory-pocket-pencil", + "data": "0x00171519100100013703000100010103000563" + }, + { + "filename": "accessory-rain", + "data": "0x0018131d0e040001430100014302000143010001430300030001430100014302000143010001430400" + }, + { + "filename": "accessory-rainbow-steps", + "data": "0x0017171c090b000312070004180312030004140418031202460100041404180300024601000414070002460c00" + }, + { + "filename": "accessory-rgb", + "data": "0x0018151e0d030002640300020004640200020004640200010002650264025a01000465045a0465045a010002650200025a0100" + }, + { + "filename": "accessory-robot", + "data": "0x0019171b0901230200012302000123020001230200012301000e00022301000b23" + }, + { + "filename": "accessory-safety-vest", + "data": "0x0015171f0b0413030005130413030005130413030005130413030005130100036603000566010003660300056601000366030005660100036603000566010003130300051301000313030005130100031303000513" + }, + { + "filename": "accessory-scarf-clown", + "data": "0x0015151f0c031c0300031c031c0300031c031c0300031c032303000323032303000323032303000323031c0300031c031c0300031c031c0300031c032303000323032303000323" + }, + { + "filename": "accessory-secret-x", + "data": "0x0018121b0e016702000167010002670100010002670100016702000167" + }, + { + "filename": "accessory-shirt-black", + "data": "0x0015151f0c0923052301000323022301000223020002230123020001230168030001230300022304000300022304000300022304000300022304000300012301680400030002230400030002230400" + }, + { + "filename": "accessory-shrimp", + "data": "0x0018121c0e0100025f0100035f0100025f02000100015f0220020001200100" + }, + { + "filename": "accessory-slimesplat", + "data": "0x0017121d0d0200014e0100014e014e0100024e01000100034e01000100024e0100014e014e0100014e02000300014e01000100014e0300" + }, + { + "filename": "accessory-small-bling", + "data": "0x001514170d01260500012601000126030001260100020003260200" + }, + { + "filename": "accessory-snowflake", + "data": "0x0017141d0d01000101030001010100020101000101010002010200030102000100050101000200030102000201010001010100020101000101030001010100" + }, + { + "filename": "accessory-stains-blood", + "data": "0x0016151d0d05000219010002000119010004190400041905000219010001190100021904000200021904000800010001190600" + }, + { + "filename": "accessory-stains-zombie", + "data": "0x0017151e0d0100010f060008000200020f0400010f0100020f04000500020f01000400040f0200010f0100040f0500020f0100" + }, + { + "filename": "accessory-stripes-and-checks", + "data": "0x0015171f090e690e430e280e1c02010100012302010223020102230201020101000123020102230201022302010223010001010223020102230201022302230100010102230201022302010223026901000b69024301000b43022801000b28" + }, + { + "filename": "accessory-stripes-big-red", + "data": "0x0015171d090e240e240e240e000e000e00022401000b24022401000b24022401000b24" + }, + { + "filename": "accessory-stripes-blit", + "data": "0x0015171b090e5a0e5a0e5a0e00026a01000b6a0e00022a01000b2a" + }, + { + "filename": "accessory-stripes-blue-med", + "data": "0x0015171f090e430e000e430e00024301000b430e00024301000b430e00024301000b430e00024301000b43" + }, + { + "filename": "accessory-stripes-brown", + "data": "0x0015171f090e350e000e350e00023501000b350e00023501000b350e00023501000b350e00023501000b35" + }, + { + "filename": "accessory-stripes-olive", + "data": "0x0015171f090e6b0e000e6b0e00026b01000b6b0e00026b01000b6b0e00026b01000b6b0e00026b01000b6b" + }, + { + "filename": "accessory-stripes-red-cold", + "data": "0x0015171f090e190e000e190e00021901000b190e00021901000b190e00021901000b190e00021901000b19" + }, + { + "filename": "accessory-sunset", + "data": "0x0017141a0d0300012603000100012603000126010002000326020001260100032601000126" + }, + { + "filename": "accessory-taxi-checkers", + "data": "0x0017171a090266020d0266020d0266020d02660266020d0266020d0266020d0266020d01000166020d0266020d0266020d020d01000166020d0266020d0266020d" + }, + { + "filename": "accessory-tee-yo", + "data": "0x0015171f0902280200012804000128030001280228030004280400012803280900022803280900022802280200012801000128030001280100022802280300012801000228010001280100022802280300012801000228030002280228080001280100022802280a00022802280a00022802280a000228" + }, + { + "filename": "accessory-text-yolo", + "data": "0x0017131d0d014e0100014e010002570100014e020002570100014e02000257060001570200024e010001570200024e010002570100024e0100" + }, + { + "filename": "accessory-think", + "data": "0x0018131c0e0301020003010200050002000101020004000101" + }, + { + "filename": "accessory-tie-black-on-white", + "data": "0x0015121f0e0423014b0223014b014b0223014b014b0223014b014b0223014b014b0223014b014b0223014b014b0223014b014b0223014b014b0223014b014b0223014b" + }, + { + "filename": "accessory-tie-dye", + "data": "0x0016151f0b0200023b0100016c0200016c0100013b0100033b0200016c02000100013b0300013b0200026c0300026d0100013b0100026c0200016d0100011c016d013b0100016c01000100016d0100011c016c013b0100016c0100011c0100016d0100011c0100026c03000100016d0200011c0300011c01000200016d0200031c0100011c0100016d0200016d0100021c0200" + }, + { + "filename": "accessory-tie-purple-on-white", + "data": "0x0015121f0e046e014b026e014b014b026e014b014b026e014b014b026e014b014b026e014b014b026e014b014b026e014b014b026e014b014b026e014b014b026e014b" + }, + { + "filename": "accessory-tie-red", + "data": "0x0016111e0f024102410200024102410241024102410241" + }, + { + "filename": "accessory-txt-a2+b2", + "data": "0x0017151d0d0200016f0500026f0600026f0100016f04000200036f03000300016f0100016f0100016f0500026f01000500026f0100" + }, + { + "filename": "accessory-txt-cc", + "data": "0x0017151d0c010007700100017007000170017001000270010002700100017001700100017002000170020001700170010002700100027001000170017007000170010007700100" + }, + { + "filename": "accessory-txt-cc2", + "data": "0x0017141c0d0371010003710171030001710200017103000171020001710300017102000171030001710200037101000371" + }, + { + "filename": "accessory-txt-copy", + "data": "0x0017131d0d02720100027201000172020002720100027201000272010006000272010001720100017202720100027201000172020001720200" + }, + { + "filename": "accessory-txt-dao-black", + "data": "0x0018151b0c02230200012302000123010001230100022301000223010001230123010005230100012302230100012301000123010001230100" + }, + { + "filename": "accessory-txt-doom", + "data": "0x0016161d0b0200012308000323080001230100032306000100022301000323040003000223010003230200050002230100032308000123010001230a000123" + }, + { + "filename": "accessory-txt-dope-text", + "data": "0x0017131d0d01000173020001730100027301000173010001730273020001730100060002730100017302000273010002730100017302000373" + }, + { + "filename": "accessory-txt-foo-black", + "data": "0x0019151b0d0523010002230223010002230100022301230200022301000223" + }, + { + "filename": "accessory-txt-ico", + "data": "0x0019171d09027401000b74027401000b74027401000b74027401000b74027401000b74" + }, + { + "filename": "accessory-txt-io", + "data": "0x0018131c0d01560300015601000156020001560200015601000156010002560100015602000256015603000256" + }, + { + "filename": "accessory-txt-lmao", + "data": "0x0017131d0d013e0300023e013e0200023e0100023e0100013e020006000100013e0200023e013e0100013e0100023e013e0100013e0100023e" + }, + { + "filename": "accessory-txt-lol", + "data": "0x001715190d01010200020101000101010001010200020101000101010002010100020101000201" + }, + { + "filename": "accessory-txt-mint", + "data": "0x0016141c0d0600011407000214010001140200011401140100011401000114010001140700021402000314011401000114020001140100" + }, + { + "filename": "accessory-txt-nil-grey-dark", + "data": "0x0018151a0d037501000175010001750100017501000175010001750100017501000175010001750100017501000275" + }, + { + "filename": "accessory-txt-noun-f0f", + "data": "0x0017131e0d010002690100016901000100016901000269010006000269010001690100016902690100036906000100026901000169010001000169010002690100" + }, + { + "filename": "accessory-txt-noun-green", + "data": "0x0017131e0d0100023e0100013e01000100013e0100023e01000600023e0100013e0100013e023e0100033e06000100023e0100013e01000100013e0100023e0100" + }, + { + "filename": "accessory-txt-noun-multicolor", + "data": "0x0017131e0d010002170100011701000100011701000217010006000276010001140100011402760100031406000100020f0100010f01000100010f0100020f0100" + }, + { + "filename": "accessory-txt-noun", + "data": "0x0016131d0d0100026c0100016c01000100016c0100026c01000600026c0100016c0100016c026c0100036c06000100026c0100016c01000100016c0100026c0100" + }, + { + "filename": "accessory-txt-pi", + "data": "0x0018131b0d0100051f011f0100011f0100011f01000200011f0100011f01000200011f0200011f" + }, + { + "filename": "accessory-txt-pop", + "data": "0x0017131d0d022804000228040001280100022802000200022802000400022804000228040001280100" + }, + { + "filename": "accessory-txt-rofl", + "data": "0x0017131d0d02010200027702010200027701010100010101000277060003370100012601000237020001260100013703000226" + }, + { + "filename": "accessory-txt-we", + "data": "0x0018151d0c0700011c0100040001560100011c0100011c02000156010001560100031c015601000156010001560100011c0200015601000156010001560200011c010001000156010001560500" + }, + { + "filename": "accessory-txt-yay", + "data": "0x0018151a0c0143010001430100011c0100014301000143010001430100031c010001430100010001430100011c0100011c010001430100" + }, + { + "filename": "accessory-wall", + "data": "0x0015171f090a00016203000a0001620300026201000b62040001620900040001620900026201000462010006620a00016203000a0001620300026201000b62040001620900040001620900" + }, + { + "filename": "accessory-wave", + "data": "0x0017151b0d0100035604000256020001560300020001560200015602000200015603000256010001560600" + }, + { + "filename": "accessory-wet-money", + "data": "0x0018141e0d017802790178037902790178017a0178027902790178017a0178027903790178027901780100010401000104010001040100010001040500050001040100" + }, + { + "filename": "accessory-woolweave-bicolor", + "data": "0x0015171f09037b010003140100037b0100027b0e00017b010003140100037b010003140100010001140300017b030001140300017b01140200027b010003140100037b01000e00027b020003140100037b01000214030001140300017b030001140200017b01140200037b010003140100027b0e00017b0200027b010003140100037b0100" + }, + { + "filename": "accessory-woolweave-dirt", + "data": "0x0015171f09037c0100037c0100037c0100027c0e00017c0100037c0100037c0100037c01000100017c0300017c0300017c0300017c017c0200027c0100037c0100037c01000e00027c0200037c0100037c0100027c0300017c0300017c0300017c0200027c0200037c0100037c0100027c0e00017c0200027c0100037c0100037c0100" + }, + { + "filename": "accessory-yingyang", + "data": "0x0018121b0e040d020d024b020d024b044b" + }, + { + "filename": "body-bege", + "data": "0x0015171f090e020e020e020e02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02020201000b02" + }, + { + "filename": "body-gray-scale-1", + "data": "0x0015171f090e0b0e0b0e0b0e0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b020b01000b0b" + }, + { + "filename": "body-gray-scale-9", + "data": "0x0015171f090e0e0e0e0e0e0e0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e020e01000b0e" + }, + { + "filename": "body-ice-cold", + "data": "0x0015171f090e060e060e060e06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06020601000b06" + } + ], + "heads": [ + { + "filename": "head-aardvark", + "data": "0x00021e140605000137020001370f0004000237020002370e0003000337020003370d0002000437020004370c0003000337020003370d0004000237020002370e0005000137020001370f000d370b000d370b000d370b000d370b000d370b000d370b000d370600057d0d370600017d017e017d017e017d0b37097d017e017d017e017d0b370d7d0a370523097d0b370d7d" + }, + { + "filename": "head-abstract", + "data": "0x00041a1405045c01000447010004470100017f01000114010001140100045c01230447012304470123017f01230114012301140123045c01230447012304470123017f01230114012301140123045c01230447012304470123017f01230114012301140123045c01230447012304470123017f012301140123011401230100142301230158012301580123017f012304460123047f0123044601230158012301580123017f012304460123047f0123044601230158012301580123017f012304460123047f0123044601230158012301580123017f012304460123047f0123044601230158012301580123017f012304460123047f012304460100132301000123015401230154012301540123040701230455012304550123015401230154012301540123040701230455012304550123015401230154012301540123010703540123045501230455012301540123015401230154012304070123045501230455012301540123015401230154012304070123045501230455" + }, + { + "filename": "head-ape", + "data": "0x0005191406030004800c0002000980080001000e80040002000f80020001001080020002000f80020002000f800200020001800e810200020001800e810200020001800e810200020001800e81020003800e8102000180018101800f8101000180018103800d82018005800d81018002001180" + }, + { + "filename": "head-bag", + "data": "0x00031c140306000e3a050006000e3a05000400023a0e00023a03000400023a0e00023a03000400023a0e00023a030002000207023a0e07023a02070100020001070126023a040706260407023a01260107010001000126010702260607042606070226010701000100012608070626080701000100013a16070100013a0100013a15070100013a0100013a15070100013a0107013a1607013a0107013a1607010018070100070703760e0701001807020016070100" + }, + { + "filename": "head-bagpipe", + "data": "0x00011d19050a0001830d000a00030f0b000a0001830200010f0100018308000a00020f0300010f017a07000a000108010f017a020f0108017a010f06000a00020f017a020f0183017a020f050001000183080001830100017a010f010001080100020f018304000200010807000108040001080200010f017a010f030003000108060001080300010803000183017a010f0300040001080500010803000108020001080100017a010f0200010f0200017a030f017a030f010803000108020001080200020f017a01000100010f017a030f017a030f017a03000108010001080400010f017a010f0100010f017a030f017a030f017a010f01000108020001080400010f02000100010f017a030f017a030f017a020f01080100010808000100010f017a030f017a030f017a030f017a020f07000100010f017a030f017a030f017a030f017a030f017a050001000108017a030f017a030f017a030f017a030f017a010f0400010001080200020f017a030f0211020f017a030f017a010f0400010001080400017a030f017a030f017a030f017a010f0400010001080400017a030f017a030f017a030f017a0500010001080500030f017a030f017a030f017a0500010001080700010f017a030f017a020f070001000108160001000183160003831500" + }, + { + "filename": "head-banana", + "data": "0x00041d140304000523047903260a0005000323047905260900060001230479072608000700037909260700070002790226012b07260700070001790326012b0326022b0226070007000226012b0526022b02260700012606000826022b022606000126022605000826022b022605000226032604000c26040003260126012b022602000e26020004260226012b022601000e26010005260326012b1226012b032601001426012b0326010002000a26032b0926020003000626015706260157062603000400042603570526025704260400" + }, + { + "filename": "head-bank", + "data": "0x00031c15040b00021f0b000900061f09000700031f0472031f07000500021f020c011f0472011f020c021f05000300021f020c031f0472031f020c021f03000100161f01000100167201000200031f0272041f0272041f0272031f02000200011f010c011f0272041f0272041f0272011f010c011f02000200031f0272041f0272041f0272031f02000200031f0272041f0272041f0272031f02000200031f0272041f0272041f0272031f02000200031f0272041f0272041f0272031f02000200031f0272041f0272041f0272031f02000200031f0272041f0272041f0272031f02000200031f0272041f0272041f0272031f02000200011f1272011f02000100161f0100021f1472021f" + }, + { + "filename": "head-baseball-gameball", + "data": "0x00041a17060800040b08000600080b0600040001240b0b04000300020b01240a0b0124010b02000200030b01240a0b0124010b02000200030b01240a0b0124010b02000100040b01240a0b0124020b01000100030b01240c0b0124010b0100040b01240c0b0124020b030b01240e0b0124010b030b01240e0b0124010b030b01240e0b0124010b0100030b01240c0b0124010b01000100030b01240c0b0124010b01000200030b01240a0b0124010b02000200040b0224060b0224020b02000300050b0624030b030004000c0b04000600080b06000800040b0800" + }, + { + "filename": "head-basketball", + "data": "0x00031a160607000542011a070005000442011a0242011a0242050003000242021a0542011a0442030002000542011a0442011a0442011a020002000142011a0442011a0342011a0342011a0142020001000842011a0242011a0242011a0342010001000142011a0742051a044201000c42011a07420c42011a07420c42011a0742141a0c42011a07420c42011a074201000b42011a0642010001000942051a04420100020004420166010e0166010e0166010e011a0242011a0242020002000642011a0342011a0342011a0142020003000442011a0442011a044203000500021a0542011a0242050007000542011a0700" + }, + { + "filename": "head-bat", + "data": "0x00031e14020900018408000184090009000184080001840900080003840600038408000400018402000284018501840600018401850284020001840400040005840185028404000284018505840400030001840185038401850a84018503840185018403000300058401850a8401850584030002000184018514840185018402000200018401851484018501840200010001840185168401850184010001000184018516840185018401000100018401851684018501840100010001840185168401850184010001840185188401850184018401851884018501840784018504840223016201230162022301840185078402840300028401850384032301010123010101230284018502840300028401840500108405000184" + }, + { + "filename": "head-bear", + "data": "0x0005181508058606000586018602370286060002860237018610861086108610861086108610861086108610860208028602080223018701230187022301080286020802860208072301080286020802860208028602080286020802860208028602080286020802860208028601000e080100" + }, + { + "filename": "head-beer", + "data": "0x00021914060500028702000387070004000b87040003000f87010003000f870100020011870200018701420c87016d02870300024201680287016802470587016d018701000388024201680247016802470168014702870168016d0187010003880342024701680247016802470268016d0200028801000342024701680247016802470268016d0200028801000342024701680247016802470268016d0200028801000342024701680247016802470268016d0200028801000342024701420247016802470268016d0200028801000342024701420247016802470268016d020003880342024701420247016802470268016d0200010002880342024701420247014202470268016d020003000c420168016d02000300058807850288020003000e880200" + }, + { + "filename": "head-beet", + "data": "0x00021a14060400031d0200028009000400011d0119021d0280010c018008000400021d0119011d0180010c028008000500021d0119010c028009000600011d0119010c01800a00070002850b000200108902000100091901890119018901190189011903890100148903191089011914891489128902191489148902190f89031901000a8902200689010002000419018901190789011901890119020003000e890300" + }, + { + "filename": "head-bell", + "data": "0x00011c14040b0002260b000b0002260b0008000826080007000226010107260700060002260101092606000500022601010b26050005000e26050005000e2605000400102604000400102604000400102604000400102604000400102604000400108a04000400108a0400020014260200020001260101122602000c26033709261826010016260100" + }, + { + "filename": "head-bigfoot-yeti", + "data": "0x00021d14020d00047f0a000d00067f08000c00037f0156017f0156017f08000c00027f0156015a0156015a017f08000c00027f028b0156018b017f08000900057f018b0156015a0156017f080008000b7f080007000b7f090006000d7f080005000e7f018c07000400047f01000a7f038c05000300047f02000a7f058c03000200047f02000b7f078c0100047f03000c7f0300058c037f04000c7f0400018c0100018c010007000b7f09000700087f028d027f08000800028c0a7f07000700068c087f0600" + }, + { + "filename": "head-bigfoot", + "data": "0x00021d14020d0004340a000d00063408000c000334012b0134012b013408000c000234012b0136012b0136013408000c000234028e012b018e0134080009000534018e012b0136012b0134080008000b34080007000b34090006000d34080005000e34013607000400043401000a34033605000300043402000a34053603000200043402000b3407360100043403000c3403000536033404000c340400013601000136010007000b34090007000834021602340800080002360a3407000700063608340600" + }, + { + "filename": "head-blackhole", + "data": "0x00011d17030e00018f0b000d00018f0c000400018f15000300018f0600015f0600015f0400018f03000300018f0500015f0600015f0600018f02000800015f0300045f0300015f06000800015f01190120015f0320031908000400015f0200015f01190220045f0220025f07000400015f0100015f01190120025f0490025f01200119015f06000400015f0100015f0120015f029004230290015f01200119015f0100015f03000200015f0200025f0120015f019006230190015f022001190300018f010005000119025f019008230190025f01190400018f018f0500025f019008230190015f0120015f01190300018f018f0400015f0120015f019008230190015f0120015f05000100018f0300015f0120015f019008230190015f0120015f05000500015f01190120015f019006230190015f02200119015f04000300015f0200035f029004230290025f02190100015f03000400025f02190120025f0490025f0220015f01190100015f03000700015f01190220045f0120015f01200119015f060006000219055f0320015f02190200015f04000200018f0700015f01000319015f0a000300018f0900015f0900018f02001600018f0300" + }, + { + "filename": "head-blueberry", + "data": "0x00041a1706070006430700050005430691040003000143019101560591035403910300020002430691015403770154039102000200014306910254047701540291020001000243079101540477015403910100010001430156089104540491010002431291034311910343119102431291024312910243129101000143039106770891010001000143049102920991014301910100020002430e910200020004430c9102000400024309910143040004000543069101430400070006430700" + }, + { + "filename": "head-bomb", + "data": "0x00041c16070f00010d05000600060d0200030d028302000400040d0172090d0100018301000300020d02720a0d030001830200030d0272090d040001830100100d030001830100100d03000193120d02000141120d0300120d0300120d0300120d0300120d03000100100d04000100100d04000200060d0572030d050003000c0d060004000a0d07000600060d0900" + }, + { + "filename": "head-bonsai", + "data": "0x00021e15030c00070f08000a00030f031c040f07000800050f031c010f021c020f06000600040f011c020f031c010f021c020f06000500100f060006000e0f0200030f02000a00080f0300020f011c020f01000100070f0600027c0300080f020f021c060f0400037c060f021c020f020f021c010f011c050f0400017c070f021c020f0b0f0400037c080f01000b0f0300097c04000100080f087c0a000200030f047c0300047c0b000a00067c0b000900087c0a00040012940500040005940d0e050004001294050006000e940700" + }, + { + "filename": "head-boombox", + "data": "0x00041b1f06040002580f00060002580d00080002580b00020008950258079502000200019509000258040001950200020001950b0002580200019502000296136f0296016f011c016f0195016f090e016f0195016f0124016f0296136f0296036f030e026f0195016f0195026f030e036f0296026f050e056f050e026f0296016f070e016f0195016f070e016f0296016f070e036f070e016f0296016f070e016f0195016f070e016f0296026f050e056f050e026f0296036f030e026f0195016f0195026f030e036f0296136f1200020e01001300010e01001300010e01001300010e01001300010e01001300010e01001300010e01001300010e01001300010e01001300010e01001300010e0100" + }, + { + "filename": "head-boot", + "data": "0x00061c140701000697030002970900010006970208010001970198090001000797020801970198090001000897010801970198090001000b97090001000b97090001000b9709000d9708000e9707001497010015971597049703260e971597010013830100" + }, + { + "filename": "head-box", + "data": "0x00061c1403040003970f9901080200030004970f99010802000200049701080f99020801000200049701080f99020801000100049702080f9902080100059702080f990308040003080f990308040003080f990300040003080f9903000400029901080f9903000400029901080f99030004000299010805990a0203000400030805990a0203000400030805990a020300040003080f990300" + }, + { + "filename": "head-boxingglove", + "data": "0x000418140504000d55020002000a55043802550100010012551355135513550255018901550607095502550189015506070955025501890155060709550255018901550607095502550189015506070955030001550607095503000f550100040003550b26010004000355012605010123010103260100040003550b26010004000e550100" + }, + { + "filename": "head-brain", + "data": "0x00051a14060600086a06000300036a0320016a0420036a03000200016a0320036a0120046a0320016a02000100016a0120026a0120016a0120016a0120016a0120026a0120026a0120016a01000100016a0120016a0120026a0120026a0120026a0120056a0100066a0120036a0120026a0120026a0120016a0120016a016a0120046a0120066a0120046a0120016a016a0120026a0120026a0120036a0120066a0120016a046a0120026a0120046a0120016a0220026a0120016a016a0120026a0120036a0120096a0120016a016a0120036a0120056a0120066a0120016a066a0120056a0220046a0120016a0100126a01000100016a0120036a0220026a0120056a0220016a01000200016a0120016a0120026a0220046a0220026a020003000e6a0300" + }, + { + "filename": "head-bubble-speech", + "data": "0x00041b160504000e010400020012010200010014010100010014010100160116011601160116011601160101001401010001001401010002001201020004000f0103000f00030104000f00020105000e00020106000e0001010700" + }, + { + "filename": "head-bubblegum", + "data": "0x00021b170508000669080006000369029a0569060004000269029a046902010469040003000269019a056904010469030002000269019a066904010569020002000a690201026902010269020001000f690201036901000100026901011169010016691669166916691669166901001469010001001469010002000a69019a0769020002000b69019a0669020003000169019a0769019a0469019a0169030004000169039a0669039a0169040006000a9a06000800069a0800" + }, + { + "filename": "head-burger-dollarmenu", + "data": "0x00071a14060600080a06000400060a0125050a04000300040a0125050a0125030a03000200020a01250d0a020002000e0a0125010a02000100120a01000100120a0100010012260100082601970626029701260197012601970226019704260c97029701260c97012604970100129701000200100a02000200100a0200" + }, + { + "filename": "head-cake", + "data": "0x00021a140605000137040001370300013705000400013701290137020001370129013701000137012901370400040001370129012602000137012901260100013701290126040005000126040001260300012605000400033c0200033c0100033c040004000156023c02000156023c01000156023c0400020010200200010005200601072001000100042008010620010001000420080105200101010001000101032009010320020101000100020102200e0101000100020102200e0101000100020101200f01010001001201010001001201010001000120010102200201052002010220020101200100012001010120020102200501022002010220010101201420" + }, + { + "filename": "head-calculator", + "data": "0x00051a16060200120302001203020001030488010303880103070701030200060303880103070701030200010304880d03020006030388010303880103038801030200010304880d03020006030388010303880103038801030200010304180d0302000103041801030388010303880103038801030200120302000103105c010302080103015c019b035c019b035c019b015c019b015c029b015c010302080103015c039b015c029b025c019b015c019b015c029b015c010302080103015c019b015c019b015c039b015c019b015c019b015c029b015c010302080103105c010302000103109c010302001203" + }, + { + "filename": "head-calendar", + "data": "0x00041a14050100029d0200029d0200029d0200029d0200029d02000201019d0301019d0301019d0301019d0301019d02011501010101230101012301010123010101230101012301010123010101230101059f01010f01029f0101029f010101010da00101019f0101019f0101019f0101020101a0010101a0010101a0010101a0010101a0010101a00201059f010101010da00101059f0101020101a0010101a0010101a0010101a0010101a0010101a00201059f010101010da00101059f0101020101a0010101a0010101a0010101a0010101a0010101a00201059f010101010da00101059f0101020101a0010101a0010101a0010101a0010101a0010101a00201059f010101010da00101059f0101020101a0010101a0010101a0062301a00101059f010101010da00101059f01011501" + }, + { + "filename": "head-camcorder", + "data": "0x00091c14050400047e0500047e060001230100117c030001230123017e017c01240f7c020002230123017e117c027e022301230100117c027e02230200117c027e02230200117c027e022302001123027e022302001123027e022302000e23027e0123027e0223020001230b7c0223027e0123020002230200112303000123" + }, + { + "filename": "head-cannedham", + "data": "0x00041a14060f00017a04000c000383017a04000e00027a04000b00047a05000700067a030002390200097a0500053901001483148c148c148c148c14a2140714070507010e0151010e0151010e0151010e0151070714071483" + }, + { + "filename": "head-car", + "data": "0x00091c140605000855090004000155080401550800030003550804015507000200055508040155060001000755060401a30104015505000e5502a304550200145501570100145501570155035501230227095502270123045502a30155012702a30127015502230455012702a30127025502a302a30100012702a3012707a3012702a30127010002a3010004000227090002270500" + }, + { + "filename": "head-cash-register", + "data": "0x00021a1408010004580d0001000158026201580d000100045802000a2701000161015801620258026101270843012701610161045802610127014306540143012701610161016f0262016f026101270843012701610161046f0261012701430354044301270161016104270261012708430127016112611261126112611261126112610f61022a0161016102870161028701610287016102870161042a0161016102870161028701610287016102870161042a01611261" + }, + { + "filename": "head-cassettetape", + "data": "0x00071b14050100140e0100020e1201020e020e0101010e1001020e010e0101010e0101010e1001010e010e05a4010103a4020103a4010105a4010e010e04a4030103a4010102a4030104a4010e010e04a4030103a4010102a4030104a4010e010e05a4010103a4020103a4010105a4010e010e14a4010e010e1426010e010e1426010e060c0a1f060c050c021f0100061f0100021f050c040c0e1f040c" + }, + { + "filename": "head-cat", + "data": "0x00031a14060100020e0d00020e02000100040e0900040e02000100010e0106040e0500040e0106010e02000100010e0306020e0500020e0306010e02000100010e0406070e0406010e02000100010e0306090e0306010e02000100010e01060d0e0106010e02000100110e02000200100e02000200100e02000200100e02000200100e02000200100e02000200100e0200053c0506026c0406043c02000806019607060200053c030604960406043c020010060200" + }, + { + "filename": "head-cd", + "data": "0x00031b1805080006a40800060002a4066702a40600040002a40a6702a40400030001a40e6701a40300020001a401220f6701a40200020001a402220e6701a40200010001a405220b67024301a40100010001a40622016704080367044301a4010001a404200322010804a40108074301a401a40620010806a40108064301a401a40620010802a4020002a40108064301a401a40620010802a4020002a40108069a01a401a40626010806a40108069a01a401a40726010804a40108026e059a01a4010001a40426036704080167046e029a01a40100010001a402260b67056e01a40100020001a40d67036e01a40200020001a40f67016e01a40200030001a40e6701a40300040002a40a6702a40400060002a4066702a40600080006a40800" + }, + { + "filename": "head-chain", + "data": "0x00051e160203000484010006840100068401000384030003000493018406930184069301840393030003000484010a0684010a0684010a0384030004000184010a0184010a018402000184010a0184010a018402000184010a0184010a018405000200038401930684019306840193068402000200039301840101059301840101059301840101059302000200038401000684010006840100068402001c001c001c001c000300068401000684010006840100048402000184010105930184010105930184010105930184010103930100018401930684010a0684010a06840193048401000184010a0184010a018402000184010a0184010a018402000184010a0184010a018402000184010a0184010a01840100048401930684019306840193068401930184010004930184069301840693018406930184020004840100068401000684010006840300" + }, + { + "filename": "head-chainsaw", + "data": "0x00051d1604030003631300020001630300016312000200016303000163120008630200010d0200010d0200010d0200010d05000863010d0100020d0100020d0100020d0100020d04000863020d0263010d0263010d0263010d0263020d02000100010d06630e0d0163020d08630e0d0163010d01000100010d06630f0d020008630e0d0163020d0100010d06630e0d0163010d010008630f0d020008630e0d0163020d03630101010d0101010d01630e0d0163010d010001000263010d0101010d010101630f0d020002000863010d0263010d0263010d0263010d0263010d020003000563020d0100020d0100020d0100020d0100020d0300040004630100010d0200010d0200010d0200010d0200010d0300" + }, + { + "filename": "head-chameleon", + "data": "0x00021c16040b00021d0b000b00021d0b000a00041d0a000900061d090005000184031d0184041d0184031d018405000300030f0184031d0484031d0184030f03000200010f0222020f0184011d0184041d0184011d0184050f02000100010f0423010f0184021d0484021d0184060f01000100010f012202230122020f0184061d0184050f022201000100020f0222030f0184061d0184040f032301000100070f0184061d0184040f0122022301000100070f0184061d0184050f022201000200040f0284081d0284040f0200030003840c1d038403000200141d02000100161d01000100041d048406230484041d0100021d03840e220384021d011d01840522010f0122060f0122010f05220184011d010016220100020003220e0003220200" + }, + { + "filename": "head-chart-bars", + "data": "0x00041a1406100004730800041c040004730800041c040004730800041c0469047304000428041c0469047304000428041c0469047304000428041c0469047304190428041c0469047304190428041c0469047304190428041c0469047304190428041c0469047304190428041c0469047304190428041c0469047304190428041c0469047304190428011c06230169047304190428041c0469047304190428041c04690473" + }, + { + "filename": "head-cheese", + "data": "0x00031a140605000226012b0226022908000500052602290800050005260329070004000226012902260229012b01290700040001260129022b01260129012b03290600040001260129022b01260129012603290600030005260329022602290500030005260729050003000526082904000200052609290400020005260a290300020005260a290300010005260c290200010005260c29020001000126012903260d29010001260129012b02260429012b012903230529010001260129012b02260229022607290126032905260f29" + }, + { + "filename": "head-chefhat", + "data": "0x00051c1404050006010d0003000b010a000200090103a4080102000100060104a40c0101000100030103a41001010018010d0101a4060101a4030101000b0101a4050102a4030101000200030101a4060101a4030102a4040102000300030101a4050101a4020101a40501030005000e7c050005000ea4050005000ea40500050001010c550101050005000e01050005000e010500" + }, + { + "filename": "head-cherry", + "data": "0x00011b15050900030f0a000400010f0200070f080005000b0f06000500010f0100070f08000600010f0200030f0a000600010f0300010f0b000700010f0300010f0a000700010f0400010f090004000318010f01180400010f044104000200091809410200010009180b41010001000918094101010141010009180d4109180d4109180d4109180d4109180d410100091806410318024101000100091805410118020103410100020009180941020004000518040005410400" + }, + { + "filename": "head-chicken", + "data": "0x00031814080500015501000355060004000755050003000855050002000287075503870200010006870455048701000100098701550487010010871087108710871087108710871087088704130487088706130287088704550487088704550487" + }, + { + "filename": "head-chilli", + "data": "0x00041c16050600081c090004000a1c09000200081c0d0001000a1c0c000100071c0224011c0c00041c07240c00011c0a240c0001000a240c0001000a240c0001000b240b0001000b240b0002000b240900012402000c240700022403000d2404000324040005240523092405001124010006000f24020007000c2404000a0007240600" + }, + { + "filename": "head-chipboard", + "data": "0x00061c140513a5040001a501a603a502a701a508a801a501a601a5040005a502a706a501a906a5030001a503aa01a502a701a50aab02a5030001a501aa01ab01aa02a501a906a501a907a501ac01a601a503aa01a501a904a501a903a501a905a501a902a605a501a903a501a905a501a903a501a901a501ac01a605a501a903a501a905a501a902a501a902a502a602a510a903a501ac01a601a501a903a501a90fa5020001a501a902a510a901a501ac01a601a501a901a501a910a501a902a603a501a901a502ab01a502ab01a502ab01a502ab01a502ab02a501ac01a601a501a601a501a901a502ab01a502ab01a502ab01a502ab01a502ab02a502a615a501ac01a6" + }, + { + "filename": "head-chips", + "data": "0x00021c19040d0001230a000c000107022309000b000307022308000a000207010102070223070009000287050702230600080004870507022305000700028701010387050703420300060002870101058705070242030005000a87050701420123020004000c8705070223010003000e8705070223020001070f8705070123010003070f870407010005070f870207020006070f870300010006070d870200014201000200060703870214068702000242010003000607098702000342010004000607078707001800180015000342150002420100150001420200" + }, + { + "filename": "head-chocolate", + "data": "0x000319140701000185010e039701850397080001000185010e028501970385019708000100020e0985060001000185010e03970185039701850197060001000185010e028501970385019703850197018503000100020e0c85030001000185010e03970185039701850397018502970100038c0f06128c128c128c128c128c010002890e190100010010190100010010190100010003190c8901190100010010190100" + }, + { + "filename": "head-cloud", + "data": "0x00041c14040b000501080009000901060008000b01050007000d01040006000f0103000400110103000200140102000100150102000100150102001601020017010100180118010100170101001701020015010100040012010200" + }, + { + "filename": "head-clover", + "data": "0x00041d16070400031d0500031c07000300051d0300051c06000300051d0300051c06000100031c051d0100061c021d0400041c061d041c051d0300051c051d031c061d0300061c010f021d031c010f061d03000100061c010f011d021c010f061d04000300051c010f011c010f051d06000400021d031c010f031c021d07000300051d010f011c010f051c06000100061d010f021c011d010f061c0400061d010f031c021d010f061c0300061d031c051d051c0300051d041c011d055c041c0100020f0100021d061c010f051d031c040f0300051c030f051d050f01000300051c0300051d06000400031c0500031d0700" + }, + { + "filename": "head-clutch", + "data": "0x00071b14030b0004120900020009760412097602000876015b0412015b087602000876065b087602000812015b04ad015b0812010001120876015b0412015b087601000112097604120976015b0100097604120976015b0100097604120976020009760412097602000976041209760200097601010123010101230101087602000976041209760200097604120976" + }, + { + "filename": "head-coffeebean", + "data": "0x0005191608040004ae010004ae0400020005ae01340135013405ae0200010002ae013403ae01340123013406ae010002ae013404ae01340123013407ae01ae013405ae01340123013407ae01ae013405ae01340123013407ae01ae013405ae01340123013407ae07ae01340123013407ae07ae01340123013407ae07ae01340123013407ae07ae01340123013407ae07ae01340123013407ae07ae01340123013407ae04ae032301340123013407ae07ae01340123013407ae010006ae01340123013406ae0100020005ae01340135013405ae0200040004ae010004ae0400" + }, + { + "filename": "head-cone", + "data": "0x0003191407080002240800080002240800070004240700070004240700070004240700060006240600060006af0600060006af0600050008af050005000824050005000824050004000a24040004000aaf040004000aaf040003000caf030003000c24030004240c4802241224" + }, + { + "filename": "head-console-handheld", + "data": "0x00031914071203010310100103010301100f79010301030110077901b0077901030103011005790510017901b0011001b00179010301030110067903b00279011001b0011001790103010301100179021001790110017901b0017901b0027901b0011001b001790103010301100f790103010301100f790103010301100f790103010301100f790103010301100f790103010301100f7901031203020301b10f03010303b1020301b1010301b1010303b2010303240103020301b1020301b1010301b1020303b20103032401031203" + }, + { + "filename": "head-cookie", + "data": "0x00031a160607000698070005000a98050003000e9803000200079801850898020002000d98018502980200010012980100010012980100149814981498149814980f980285039801000e98028502980100010003980285029801850a980100020002980285029805850598020002000698018509980200030004980185049801850498030005000a980500070006980700" + }, + { + "filename": "head-cordlessphone", + "data": "0x000a1d1402020009030db10303020005030389010301b1028801b1028801b1028802b1018901b103030200020301b102030389010301b1028801b1028801b1028802b1018901b1030302000503038901030db1010301230103020005030389010301b1028801b1028801b1028804b10103012301030200010301b1010301b101030389010301b1028801b1028801b1028804b1010301230103020005030389010301b1028801b1028801b1028804b101030123010302230503038901030db10103012301030223020301b102030389010301b1028801b1028801b1028802b1018801b1010301230103020005030389010301b1028801b1028801b1028802b1018801b10303020009030db10303" + }, + { + "filename": "head-cottonball", + "data": "0x00021c16040a0001010d0009000301014b02010200010106000400010102000201014b0701070005000501014b0401014b030102000101020004000101014b0401014b0501014b0401030004000201014b0a01014b0201040003000301014b0601014b0301014b0301030003000101014b0201014b0601014b0401014b0101030001000201014b0301014b0601014b0701020002000501014b0d01014b020002000401014b0f01020002001101014b02010100010101001201014b03010100010101000301014b0d01014b0201020003000101014b0d01014b0201030003000401014b0201014b0201014b0301014b0301030004000301014b0301024b070101000101020003000301014b0301014b0201014b0401014b010104000500014b0d01050007000801014b0101070009000101014b0301014b0900" + }, + { + "filename": "head-cow", + "data": "0x00061914060300017f0323057f052302000300017f0323057f052302000100037f0323057f0523017f01000c7f0523027f137f047f02230d7f030003230b7f020003000323047f0323047f02000300077f0323047f02000300077f0323047f02000300027f0e5f03000123017f045f0208035f0208035f030002230e5f03000223035f0908025f030002230e5f" + }, + { + "filename": "head-crab", + "data": "0x00021b1405040004130600041304000200071304000713020001000913020009130100031302b30c0002b303130a1302000a130913040009130213010005130600051301000213021307000123020001230700021302130100101301000213021301001013010002131613161316130300101303000300101303000300101303000300061304b306130300030010130300030010130300" + }, + { + "filename": "head-crane", + "data": "0x00061f1405060005b40f0004000ab40c0003000cb40b00020003b4050106230a00010002b406010823090001b40801092308000901072304b606000a01052308b60300060109230bb6050107230e00040108230e00010002010a230d00020002010323040105230a00030002010d230800040002010c230800" + }, + { + "filename": "head-croc-hat", + "data": "0x00061e150801000e23070001000e2307001023060001000e1d070001000e1d070001000e1d070001000e1d070001000e1d070001000e1d070001000e1d07000100151d0100151d0100031d0323021d0423021d0423031d0100051d0123021d0123021d0123021d0123021d0123031d0100051d0423021d0423021d0323011d0100151d" + }, + { + "filename": "head-crown", + "data": "0x00041a14060100015b0700025b0700015b01000100015b0700025b0700015b01000100025b0500045b0500025b0100028b012b015b0300015b041d015b0300015b012b0241018b0154012b025b0100025b011d029b010f025b0100025b012b011801410254012b055b021d020f055b012b02180100125b01000100125b01000100125b01000100125b01000100125b01000100125b01000100125b01000100125b010002000135052b0435052b013502000100125b01000100125b0100" + }, + { + "filename": "head-crt-bsod", + "data": "0x00051a15040400120204001202020004020166025a01660a5a02020602025a01660b5a020206020166025a01660a5a020206020e5a020206020e5a020206020e5a020206020e5a020202b104020e5a020206020e5a020202b104020e5a020206020e5a020202b104020e5a02020d02012301020123060202000a0201230102012301020123050204001202" + }, + { + "filename": "head-crystalball", + "data": "0x00021a14060700062d07000500022d06b7022d05000400012d0ab7012d04000300012d07b7012d04b7012d03000200012d03b7012d0ab7012d02000100012d03b7012d01b7012d05b7012d04b7012d01000100012d04b7012d05b7032d03b7012d0100012d0cb7012d05b7012d012d07b7012d0ab7012d012d12b7012d012d12b7012d012d12b7012d012d12b7012d0100012d10b7012d01000100012d10b7012d01000200012d0eb7012d0200020010b80200020005b8072304b80200020010b80200" + }, + { + "filename": "head-diamond-blue", + "data": "0x00051a18060500024a0104044a0104024a05000400034a0104044a0104034a04000300034a0104064a0104034a03000200044a0104064a0104044a02000100044a0101084a0104044a01000204010101040301010401010b04054a0101084a0104054a054a0104084a0104054a054a0104084a0104054a054a0104084a0104054a14040100054a0104064a0104054a01000200044a0104064a0104044a02000300044a0104044a0104044a03000400034a0104044a0104034a04000500024a0104044a0104024a05000600024a0104024a0104024a06000700014a0104024a0104014a070008000104024a010408000900024a0900" + }, + { + "filename": "head-diamond-red", + "data": "0x00051a1806050002b9014204b9014202b90500040003b9014204b9014203b90400030003b9014206b9014203b90300020004b9014206b9014204b90200010004b9010108b9014204b901000242010101420301014201010b4205b9010108b9014205b905b9014208b9014205b905b9014208b9014205b905b9014208b9014205b91442010005b9014206b9014205b90100020004b9014206b9014204b90200030004b9014204b9014204b90300040003b9014204b9014203b90400050002b9014204b9014202b90500060002b9014202b9014202b90600070001b9014202b9014201b907000800014202b901420800090002b90900" + }, + { + "filename": "head-dictionary", + "data": "0x00051b150501000801040008010100014a01010372010103720101020001010372010103720101014a014a1401014a014a010103720101037204010372010103720101014a014a1401014a014a010103720101037204010372010103720101014a014a1401014a014a010103720d0102720101014a014a1401014a014a010103720d0102720101014a014a1401014a014a010103720d0102720101014a014a070106410701014a014a1401014a014a1401014a0a4a02010a4a0900044a0900" + }, + { + "filename": "head-dino", + "data": "0x00071d15080300061d0c000300061d0c00151d151d151d151d151d151d151d151d151d0100051d0301011d0301011d0301011d03010100051d0301011d0301011d0301011d03010100141d0100141d" + }, + { + "filename": "head-dna", + "data": "0x00091d160304431200045501000126010004430c00045501000151010001000126010001550100044308000355014301000126010001510100010001260100015501000143010001510243060002550143010001430100012601000151010001000126010001550100014301000151010002430400025501000143010001430100012601000151010001000126010001550100014301000151010003430200025501430100014301000143010001260100015101000100012601000155010001430100015101000143010002430255010001430100014301000143010001260100015101000100014301000151010001260100015501000143020002550200014301000143010001550100014301000155010001000143010001510100012601000155010001430100025502430100014301000143010001550100014301000155010001000143010001510100012601000155010001430255020003430100014301000155010001430100015501000100014301000151010001260100015501000255040002430100014301000155010001430100015501000100014301000151010001260100035506000343010001550100014301000155010001000143010005550a000543010001550100055510000543" + }, + { + "filename": "head-dog", + "data": "0x00061a140603000e970300010004850d970185010005850d97028504850e97028504850e97028504850e97028504850e97028504850e9702850485049706380497028504850497063804970285048503970838039702850485019708380223020d013802850200039708380423013802000200039704380223010103230101012301380200020003970d380200" + }, + { + "filename": "head-doughnut", + "data": "0x00031a160607000156056c07000500026c0156046c01ba026c050003000a6c01ba036c03000200086c016d056c021902000200026c02ba016c0119036c016d066c02000100076c0119016c0138056c0156026c01000100076c0538026c0156036c0100046c016d026c013804000138066c011c016c021c016c016d016c013806000138026d036c011c066c013806000138066c066c013806000138066c026c0156036c013806000138036c02ba016c026c0156036c023804000138026c0156046c0100076c0538036c0156026c01000100046c01ba066c0219056c01000200026c01ba046c0156086c02000200076c0156040e016d036c02000300026c0119096c016d016c030005000119096c05000700016c021c036c0700" + }, + { + "filename": "head-drill", + "data": "0x00071c140502000e1401a4060001000f1401a4017e050001000f1401a4017e017c017e017c017e017c101401a4027e017c017e017c017e101401a4017e050001000f1401a4060001000f1401a4060002000e1401a406000500057e01a40c000500057e02a40b000500057e03a40a000500077e0b0004000114012301260123012601230814050004000e140500" + }, + { + "filename": "head-duck", + "data": "0x00041d1407070006010900050005010c001001060011010500110105001101050011010500110105001101050011010500110105001101050011010500050110460100050104460142014601420a4605011146010005011046" + }, + { + "filename": "head-ducky", + "data": "0x00031c14040c00082604000a000526045102260300090005260251022302510126030009000526025102230251012601140200090006260451022603140100022607000a26031401000100052605000a260300162602001726010018261826182601001726010017260200162602000b26018a0926010003000726038a09260200050010260300" + }, + { + "filename": "head-earth", + "data": "0x00031a160607000643070005000a43050003000343011c0543011c0243021c030002000243031c0543061c020002000243021c0543071c02000100011c0243031c0343091c01000100021c0243011c0443091c0100031c0843091c031c0d43041c041c0743091c051c0543091c0143061c0443081c0243061c0443071c03430100031c0643071c024301000100021c0843041c044301000200011c0943041c024302000200011c0443081c0343020003000e43030005000a430500070006430700" + }, + { + "filename": "head-egg", + "data": "0x00011915070700040107000500020102af040105000400010101af010102af020102af0101040003000c0103000200010101af020101af020101af060102000200010101af060102af020101af010102000100010101af020101af040102af030101af010101000100010101af0c0101af010101000100010101af0b0101af02010100100101af0101050101af0a0101af0101020101af0a0101af020101af0101020101af0a0101af020101af0101120112010e0102af02010100100101000100030101af080101af0301010002000501021e0701020003000c0103000500050101af02010500" + }, + { + "filename": "head-faberge", + "data": "0x000119140608000326080005000126020701260107012602070126050005000207012603070126020705000400010f0407010f0407010f040003000d07030003000107012604070126040701260107030002000107012601890126020701260189012602070126018901260107020002000207012604070126040701260207020001001107010001001126010013260100118a010001001107010001001107010002000f07020002000f07020002000f07020003000d070300030006260323032604000500098a0500" + }, + { + "filename": "head-factory-dark", + "data": "0x00031a14080300057c0a000100010e0300087c05000100020e0b00047c010002240f000100020e0400010e0300010e0300010e02000100020e0300020e0200020e0200020e0200040e0100030e0100030e0100030e0200100e0200100e0200100e0200100e0200100e0200100e0200100e0200100e0200020e0172010e026d010e026d010e0172050e0200100e0200100e0200" + }, + { + "filename": "head-fan", + "data": "0x00031a160607000651070005000351010001510200035105000300035102000151020001510200035103000200035102000151027e0151027e01510200025102000200025102000151027e0151027e0151027e015101000151020001000251020001510100017e0151027e0151027e0151017e010002510100010001510200015102000151027e0151027e0151017e01000151010001510100025101000151020001510100017e0262017e0151017e0100015102000251015101000151027e0151020004620200015102000151010001510251027e0151027e06620151027e01510200015101510100017e0151027e01510662027e0151017e01000251015101000151027e0151027e0462027e0151027e01510100015102510100017e0151027e0151017e0262027e0151027e0151017e02510100015101000151027e0151027e01510100017e0151027e0151027e01510100010002510100017e0151027e01510100017e0151027e0151027e025101000200015101000151027e015102000151027e0151017e010002510200020002510200015102000151027e01510200035102000300035102000151020001510200035103000500035102000151010003510500070006510700" + }, + { + "filename": "head-fence", + "data": "0x00041d1403020001bb060001bb060001bb060001340200010003bb0400013402bb040003bb040001bb013401bb010005bb020001bb013403bb020005bb020002bb013402bb05bb020001bb013403bb020003bb013401bb020002bb013402bb03bb013401bb020001bb013403bb020003bb013401bb020005bb03bb013401bb023401bb013403bb023403bb013401bb023402bb013402bb03bb013401bb023401bb013403bb023405bb023405bb03bb013401bb023401bb013403bb023405bb023405bb03bb013401bb020005bb020005bb020005bb013404bb020005bb020001bb013403bb020003bb013401bb013404bb020005bb020001bb013403bb020003bb013401bb013402bb013401bb023405bb023401bb013403bb023403bb013401bb013404bb023405bb023401bb013403bb023401bb013401bb013401bb013404bb023405bb023401bb013403bb023403bb013401bb013404bb020005bb02000585020003bb013401bb05bb020003bb013401bb02000585020003bb013401bb05bb020003bb013401bb020001bb013403bb020005bb" + }, + { + "filename": "head-film-35mm", + "data": "0x00031814050800062305000800062305000300102303420726078702260100014201000726078702260342072607870226034207260787022603420726078702260342072607870226034207260787022603420726078702260342072607870226034207260787022603420726078702260342072607870226010001420100022603ae022607870226034207260787022603001023" + }, + { + "filename": "head-film-strip", + "data": "0x00051b140516bc010002bc010002bc010002bc010002bc010002bc010002bc010002bc010016bc02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd01bd017b01bc10bd01bc02bd02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd02bd01bc10bd01bc02bd16bc010002bc010002bc010002bc010002bc010002bc010002bc010002bc010016bc" + }, + { + "filename": "head-fir", + "data": "0x00011f18010e00020f0e000d00040f0d000c00060f0c000b00030f015c040f0b000a00030f015c060f0a000900030f015c040f015c030f090008000a0f015c030f080007000c0f015c030f07000600120f06000500140f05000400160f04000300180f030002001a0f020001001c0f01001e0f0600120f06000500140f05000400160f04000300060f065c0c0f030002001a0f02001e000700010f0e00010f07000600020f0e00020f06000500030f0e00030f0500" + }, + { + "filename": "head-firehydrant", + "data": "0x00021c14040b0002be0b00090006be0900080002bf01be02bf01be02bf0800070003bf01be02bf01be03bf0700060003bf01be04bf01be03bf0600060003bf01be04bf01be03bf0600050003bf01be06bf01be03bf0500050003bf01be06bf01be03bf0500030012be0300030012be030005000ebf050005000ebf0500010002bf012310be012302bf0100010002bf012310be012302bf010001be02bf012310be012302bf01be01be02bf012310be012302bf01be010002bf012303be0b2302be012302bf0100010002bf012310be012302bf010005000ebf0500" + }, + { + "filename": "head-flamingo", + "data": "0x00031b14050c00042003ba03000a00062001ba012301ba012002000900072003ba022001000800042005000320025f070004200800035f070004200800025f010e070005200800020e080006200600020e090008200300010e01000a00092003000b00092002000d00082001000f00062001000100156a166a0b20060905201620010014200100" + }, + { + "filename": "head-flower", + "data": "0x00031b18050a00024f0a000900044f0900040002ba0200019a044f019a020002ba0400030005ba019a044f019a05ba0300020007ba019a024f019a07ba0200020007ba041307ba0200030004ba0213046d021304ba0300030003ba0113086d011303ba03000200029a02ba0113086d011302ba029a02000100034f019a01130a6d0113019a034f0100054f01130a6d0113054f054f01130a6d0113054f0100034f019a01130a6d0113019a034f01000200029a02ba0113086d011302ba029a0200030003ba0113086d011303ba0300030004ba0213016d0385021304ba0300020007ba041307ba0200020007ba019a024f019a07ba0200030005ba019a044f019a05ba0300040002ba0200019a044f019a020002ba04000900044f09000a00024f0a00" + }, + { + "filename": "head-fox", + "data": "0x00031c1904050003011000040005010f000300014205010800022301000223020002000242050108000242010002420200010004420301090006420100074204000223064201110142011102420542070006010642044209000b01054209000a010100054209000901020004420a00080104000f4205010400104204010400114203010400124202010400054207010742010104000542062302010642010004000542090104420200040001420e0002420300010004420e00014204000100014211000242030001000123120002420223010001231600" + }, + { + "filename": "head-frog", + "data": "0x00061914070300051c0300041c03000200071c0100061c02000100041c020f0a1c01000100041c020f0a1c010001000d1c020f011c010001000d1c020f011c01000100101c01000100101c01000100020f0e1c0100011c020f0f1c121c121c126702670e5c0267010010670100" + }, + { + "filename": "head-garlic", + "data": "0x00051914070700010b0100010b0100010b06000800030b07000800030b070007000157030b0157060003000157030b0157030b0157030b03000200010b0157030b0157030b0157030b015702000100020b0157030b0157030b0157030b0157010b0100030b0157030b0157030b0157030b0157020b030b0157030b0157030b0157030b0157020b030b0157030b0157030b0157030b0157020b030b0157030b0157030b0157030b0157020b030b0157030b0157030b0157030b0157020b030b0157010b01c0010b0157030b0157030b0157020b030b0157020b04c0010b0157030b0157020b0100020b0157030b0157030b0157030b0157010b01000200010b0157030b0157030b0157030b01570200" + }, + { + "filename": "head-gavel", + "data": "0x000419140108000f34010008000f34010009000d23020009000d26020009000126015d0b26020009000126015d0b260200013401000234010004340d26020002000134020004340d26020001000234010005340d26020009000d26020009000d26020009000d26020008000f34010008000f2301000700118e0700118e07001123" + }, + { + "filename": "head-ghost-B", + "data": "0x00051b16030c00028c0a000b00048c09000200028c0700058c0600028c0200048c0400028c0104018c0104018c0400048c0200068c0200068c0200068c0300148c01000300148c01000300148c01000300148c01000400128c02000400128c02000400118c03000400118c030005000f8c040003000f8c0600118c07000400028c12000200048c1200" + }, + { + "filename": "head-glasses-big", + "data": "0x00091c120204000a8002000a80040001800501048002000180050104800400018005010480020001800501048005800501078005010480058005010780050104800180030001800501048002000180050104800180030001800501048002000180050104800180030001800501048002000180050104800400018005010480020001800501048004000a8002000a80" + }, + { + "filename": "head-gnome", + "data": "0x00011a140609000241090009000241090008000441080007000641070007000641070006000841060006000841060005000a41050003000ec1030001c2010001c10ec201c1010001c202c201c10ec201c102c202c201c10ec201c102c202c201c10ec201c102c20200104c02000200104c02000200104c02000200104c0200020003c20123010101230101012301010123010101230101012302c20200020003c20b4102c202000300088a018e078a0100" + }, + { + "filename": "head-goat", + "data": "0x00051d1805030001b10c00040d0400020002b10e0004b10200010002b10e0002b1017e022301b10100010002b10e0002b1017e04b101000fb1017e02b1017e02b1029802000eb1017e02b1017e01b1017e02b103000eb1027e02b1010002b1030010b1030001b10100030010b10500030010b10500030011b10400030011b10400020005b1017e0cb10400020005b1017e01230101012301010123010107b10300020004b1017e0ab1010003b10300020003b101000ab1040001b10300010002b1110001b1030003b1100002b1030001b1120001b1040001b1120001b10400" + }, + { + "filename": "head-goldcoin", + "data": "0x00031a160607000626070005000326042b0326050003000326022b0426022b0326030002000226022b0826022b0226020002000126012b0c26012b0126020001000226012b0c26012b0226010001000126012b092603290226012b012601000226012b032603290826012b02260126012b1026012b01260126012b1026012b01260126012b1026012b01260126012b1026012b01260226012b112601000126012b1026010001000226012b0f26010002000126012b02260129012604290426012b0126020002000226022b0826022b0226020003000326022b0426022b0326030005000326042b03260500070006260700" + }, + { + "filename": "head-goldfish", + "data": "0x00051b1405020012210200030010950300010014210100162113210151022101211207015101070121012114070121012112070151010701210121140701210121140701210121140701210221080703250707022101000121070701140125012302250607012101000100022107070325060702210100020003210c070321020004000e210400" + }, + { + "filename": "head-grouper", + "data": "0x00061d16020900010801000108010001080100010801000108090007000c08080006000f08060001000208020004080e7a040004080200137a020001000408157a01000508157a010001000408117a0108047a02000308107a02c5047a010004080e7a02c5047a0282020003080d7a01c5047a02820200010004080c7a01c5047a018204000508057a0208047a010801c5037a018205c501000408047a0108057a020801c5027a018201c5047a010004080200077a040801c5077a0200010002080600027a0508027a01c5047a04000c0003080c00" + }, + { + "filename": "head-hair", + "data": "0x00031e15020800068e0100058e08000700018e0626018e0526018e07000600018e0126068e0126058e0126018e06000300018e0100018e0126018e0626018e0526018e0126018e0100018e03000400018e0126018e0126068e0126058e0126018e0126018e04000400018e0126018e0126018e0500018e0400018e0126018e0126018e04000400018e0126018e0126018e0a00018e0126018e0126018e04000400018e0126018e0126018e0a00018e0126018e0126018e04000200018e0100018e0126018e0126018e0a00018e0126018e0126018e0100018e02000300018e0126018e0126018e0c00018e0126018e0126018e03000300018e0126018e0126018e0c00018e0126018e0126018e03000300018e0126018e0126018e0c00018e0126018e0126018e03000300018e0126018e0126018e0c00018e0126018e0126018e03000100018e0100018e0126018e0126018e0c00018e0126018e0126018e0100018e01000200018e0126018e0126018e0e00018e0126018e0126018e02000200018e0126018e0126018e0e00018e0126018e0126018e02000200018e0126018e0126018e0e00018e0126018e0126018e02000200018e0126018e0126018e0e00018e0126018e0126018e0200028e0100018e0100018e1000018e0100018e0100028e" + }, + { + "filename": "head-hardhat", + "data": "0x00041d1405050005c605c70900040006c701c605c70800030006c602c701c605c70700020007c701c602c701c605c70600020008c701c601c701c605c70600010009c701c602c705c601c70500010009c701c608c70500010009c701c608c70500010009c701c608c70500010009c701c608c70500010009c701c608c70500010009c701c608c70500010009c701c608c70500010003c70fc6050004c701c60d2301c605c704c701c60dc701c605c718c7" + }, + { + "filename": "head-heart", + "data": "0x00041c1704050005240400052405000300092401000824030002000624020106240201042402000100092401010524020101240101032401000100132401010224010014240101032418241824182401001624010001001624010002001424020002001424020003001224030004000724020101230624040005000e24050006000c24060007000a2407000900062409000b0002240b00" + }, + { + "filename": "head-helicopter", + "data": "0x00031d14020d0002230c000400016104620261062302610462016103000d0002230c000d0002230c000a000720075603000100022006000220019a0120019a0120019a0120085602000100032004000320019a0120019a0120019a012009560100010002620e200556030102560162022301620d200556030102560162022301620d200556030102560100026202000c200a5606000b2008560101015607000a2008560101015608000920065602010156010009000820085602000a000e2003000c000123020001230b0007000e230600" + }, + { + "filename": "head-highheel", + "data": "0x00061b1405020003181100010005181000010006180f0008180e0008180e0008180e0008180e0009180d000b180b0001000c18090002000418020008180600030002180400091804000300021805000a1802000300021806000318042304180300025b07000a5b" + }, + { + "filename": "head-hockeypuck", + "data": "0x00051b150507000805070004000305081f03050400020002050e1f0205020001000105121f010501000105141f01050105141f01050105141f0105010d0105121f0105011f020d02050e1f0205010c011f040d0305081f0305020c021f070d0805060c011f040d030c020d010c010d090c021f070d0e0c011f0100030d030c020d0b0c011f01000200050d030c0105010d0205010d050c02000400030c020d090c04000700080c0700" + }, + { + "filename": "head-horse-deepfried", + "data": "0x00061b15050900018e0100028e0900040003ad0100068e010003ad04000200028e03ad068e020003ad04000200028e07ad018e06ad04000100038e06ad036d05ad04000200028e07ad016d06ad04000200028e07ad016d06ad04000100038e07ad016d06ad04000200028e07ad016d06ad04000200028e07ad016d06ad04000100038e128a0200028e0e8a0123018a0123018a0100038e028a016d0123016d0123016d0123016d098a048e128a0100038e128a0100018e0100018e0e8a0400" + }, + { + "filename": "head-hotdog", + "data": "0x000317140905000489050002000183013906890139018302000100028301390689013902830100028301390289016d0219038901390283028301390389026d0119028901390283028301390589016d0119018901390283028301390389026d0119028901390283028301390289016d0219038901390283028301390389026d0119028901390283028301390589016d0119018901390283028301390389026d0119028901390283028301390289016d0219038901390283028301390389026d0119028901390283028301390589016d0119018901390283028301390389026d0119028901390283028301390289016d0219038901390283028301390389026d0119028901390283028301390589016d0119018901390283" + }, + { + "filename": "head-house", + "data": "0x00031c1505080001830e000100027c04000183015101830d000100021103000183035101830c00010002110200018302510183025101830b0001000211010001830251018301c8018302510183071103000100021101830351038303510183071102000100011101830b51018307110100010001830d510183071101830f51078317510351051103510b8301510351051103510183031103c80311018301510351051103510183021105c80211018301510351051103510183011107c801110183015103510311012601110351018306c8017c02c801830151035105110351018305c8027c02c80183015103510111032301110351018304c8037c02c8018301510351051103510b8301510251077c0e51" + }, + { + "filename": "head-icepop-b", + "data": "0x00071c19020500061c0893051902000400021c059b08010316031901000400011c019b051c08930319020102190400011c019b051c08930319020102190400071c089305190116011904c9071c089305190116011904c9071c0893071904c9071c089305190116011904c9071c0893071904c9071c089307190400071c089307190400011c029b041c089307190400011c029b041c01930201019301010393061901000500061c0893051902000800021c0c00021902000800011c0d00011903001600011903001a00160001190300" + }, + { + "filename": "head-igloo", + "data": "0x00051e1405080006010b0005000401013c0201023c0301080004000101033c0301013c0301023c0101070003000101013c0601013c0501013c0101060002000101033c0101043c0101013c0101053c0101050002000601013c0601013c0401050001000101013c1001013c0101040001000501053c0101063c030104000100140104001201013c0101013c020102000101023c0901063c0101013c040101000301013c0401013c0501013c0201013c0101013c0201013c010101000301013c0401013c0501013c0301013c0201023a013c01010101023c0101053c0101033c0201043c0201023a013c01010101013c0301013c0501013c0401013c0101013c0201033c010101000401013c0501013c0401013c0101013c05010100" + }, + { + "filename": "head-island", + "data": "0x00021b14060400040f0d000300060f0100061c05000700020f091c03000500080f031c01ca031c01000400040f01ca030f031c01ca0200031c0400020f020002ca0100010f021c02ca0300021c0400010f040002ca0100021c01ca0400021c090002ca0200011c01ca0500011c0400060f01ca020002ca06000300080f01ca010002ca06000300080f01ca010002ca06000300080f01ca010002ca06000300080f01ca010002ca060003000e26040002001026030001000d2601460426020002260146012602290226022902260146032601460326010006260229062601460526010014260100" + }, + { + "filename": "head-jellyfish", + "data": "0x00031c1b050700055f016a035f07000400016a0e5f04000200065f016a0c5f02000200135f02000100085f0576055f016a025f01000100015f016a045f0976065f0100055f0d76055f015f016a025f0f76025f016a015f045f0f76045f035f1176035f035f1176035f0100015f1376015f01000100015f1376015f01000100015f1376015f01000100015f036e0176036e0176036e0176036e0176036e015f01000100156e01000100016a086e0690066e01000100016a0200016a0e6e016a0100016a01000100016a0200016a0e00016a0100016a01000100016a0200016a0e00016a0100016a0100016a0200016a0f00016a0200016a016a0200016a1000016a0100016a016a1300016a0100016a016a1500016a016a1500016a" + }, + { + "filename": "head-jupiter", + "data": "0x00011d1a0309000882090007000c82070007000982037d07000400107d023704000300057d0f37030003000b3709380300010005370a3809370100010006380a37087d0100010009370f7d01000637147d0437167d1a7d1a7d1a7d187d0237167d0437147d0637010001370b7d0c37010001000e37042503370382010003000b370225022302250382030003000482083704250482030003001482030004001282040007000c820700090008820900090008820900" + }, + { + "filename": "head-kangaroo", + "data": "0x00051a1406037e0a00037e0400017e0238017e0800017e0238017e0400017e0338017e0600017e0338017e04000100017e0338017e0400017e0338017e05000200017e0238027e0200027e0238017e060003000a7e07000300087e09000300087e09000300087e09000300087e09000300067e088103230300067e088103230300067e0b810300067e022309810300067e0b810300067e0b81" + }, + { + "filename": "head-ketchup", + "data": "0x000218140807000224070007000224070006000424060006000424060005000689050005000623050001000224028902240289022402890224010001000e23010010241024102410241024102410241024022403890224038906240424048908241024" + }, + { + "filename": "head-laptop", + "data": "0x00061b1605161f011f010b013c120b011f011f1456011f011f1456011f011f1456011f011f1456011f011f1456011f011f1456011f011f1456011f011f1456011f011f1456011f011f1456011f031f010e011f010e011f010e011f010e011f010e011f010e011f010e011f010e011f010e021f021f130e011f021f010e011f010e011f010e011f010e011f010e011f010e011f010e011f010e011f010e031f011f130e021f161f" + }, + { + "filename": "head-lightning-bolt", + "data": "0x00021e19050800031e0e000700081e0a0007000c1e060006000c1e070006000b1e080005000b1e090005000a1e0a0004000a1e0b000400091e0c000300091e0d000300081e0e000200171e0200161e01000100151e03000100131e0500121e070005000b1e090004000a1e0b000400081e0d000300071e0f000300051e11000200041e13000200021e15000100011e1700" + }, + { + "filename": "head-lint", + "data": "0x00021b16050a00018c0b000900018c0c00030001910600018c040001400600020001910300018c0200038c0140010002400600030002910200028c0191028c034004000291010005000340028c0191018c014001910240018c0200019102000100018c0200014001910340018c0191018c024001910240028c0300038c034001910340038c024001910140018c04000100018c0100018c024001910340018c0191028c014001910140028c03000300018c0191024001910240028c0191028c02400191028c010001910100028c0191018c024001910240028c0191028c0240038c010001910200018c0140028c014001910240058c0240028c0191018c01910100058c0740038c01400191038c010001910100038c01910840028c01400191028c020001910200018c01910a40018c0191028c03000200038c0140018c01910640018c0191038c01910200030001910140028c0191014004230140048c0100029101000200048c01910740028c0191028c03000200018c010002910740028c0191018c01910400050001910100014001000340018c0191018c0100018c0500090001400191010001910900" + }, + { + "filename": "head-lips", + "data": "0x00051d1503070004240400042407000500072402000724050004000d2402010324040003000e2403010324030002001324010102240200010018240100010006240c01062401000524100105240424120104240324140103241a240100182401000100182401000200162402000300082404010824030005001024050008000a240800" + }, + { + "filename": "head-lipstick2", + "data": "0x000118140806000324070004000724050003000137092403000200012401370a240200020002240137062401370224020002000324043702010324020002000724023703240200020007240237032402000b2a0101042a0b2a0101042a0b2a0101042a0b0d0105040d0b0d0105040d0b0d0105040d0b0d0105040d0b0d0105040d0b0d0105040d060d0223030d0105040d0b0d0105040d0b0501010405" + }, + { + "filename": "head-lock", + "data": "0x00031814080400081f040003000a1f03000200031f0600031f02000200021f0800021f02000200011f010d0800011f010d02000200020d0800020d0200107a108a108a108a108a108a108a108a018a026d0a8a026d018a018a026d048a0223048a026d018a078a0223078a108a" + }, + { + "filename": "head-macaroni", + "data": "0x00081d1403010008290800082901000229060a022906000229060a022901260829012606000126082901260a2606000a26012601280826060008260128012601260128092604000826022801261726012802260100182601000100152601280226010002001626020003000626020a0126020a0126020a0626030004001226040006000e260600" + }, + { + "filename": "head-mailbox", + "data": "0x00071c1405070005890b00070005890b000a0002890b000a050289030508000a050289030508000a050289030508000a050289030508000a0502890305060102000a05028903050401013a010102000a0502890305060102000a0502890305060102000a050289030501010423010102000f05060102001705" + }, + { + "filename": "head-maze", + "data": "0x00061b14050acb01000bcb01cb0b0001cb040001cb030001cb01cb01000bcb010001cb010004cb010001cb01cb010001cb030001cb070001cb040001cb010001cb01cb030001cb030007cb010004cb010001cb06cb010002cb030001cb080001cb01cb010001cb050001cb010001cb010001cb010006cb010001cb01cb010005cb010001cb010003cb080001cb01cb050001cb050001cb010008cb01cb010003cb010003cb010001cb080001cb010001cb01cb030001cb010001cb010001cb010008cb010001cb010001cb03cb010001cb100001cb01cb010001cb010004cb010007cb010005cb01cb030001cb080001cb070001cb14cb010001cb" + }, + { + "filename": "head-microwave", + "data": "0x00071a1f05010002950f06012102060100029501060e9201210143010e0100029501060e920121010e01430100029501060e92012102c80100029501060e92012102060100029501060e92012102c80100029501060e92012102060100029501060e92012102c80100029501060e92012102060100029501060e92012102c80100010e019501060e9201210206020e019501060e92012102c8020e01950f06012102c8010e02950f0601210206010e1400010e1400010e1400010e1400010e1400010e1400010e1400010e1400010e1400010e1400010e1400" + }, + { + "filename": "head-milk", + "data": "0x00031b14080100014a0d7f04000100014a067f0524027f0400034a057f09240289034a097f05240289034a0d430300034a0143017f0143027f0143047f0143017f01430300034a0d430300034a0d430300034a0d430300034a0d430300034a0d430300034a0d430300034a0d430300034a0d430300034a0d43030003c80d7f0300034a0d430300034a0d430300" + }, + { + "filename": "head-mirror", + "data": "0x00041a14061497019702060101010603010a0601010197019701060101010603010b060101019701970101010603010c06010101970197010603010d0601010197019703010106063c0106063c01010197019702010206013c0406013c0106013c0406013c0101019701970101043c0406033c0406013c0101019701970106013c0206013c0406013c0106013c0406013c0101019701970106013c0206013c0406013c0106013c0406013c0101019701970406063c0106063c0101019701971106010101970197110601010197019711060101019701971106010101970197120101971497" + }, + { + "filename": "head-mixer", + "data": "0x00021a1406030002230300022403000224050002000172030001230172030001240172030001240300140c010c030f020c030f020c030f020c0123010c0123010c010c010f015c010f020c010f015c010f020c010f015c010f020c0124010c0123010c100c014e010c01b0010c020c0123040c0123030c0301020c014e010c014e010c020c0123040c0123030c0372020c014e010c014e010c020c0123040c0123040c0123070c020c0123040c0123040c0123070c020c0123040c0123040c0123050c011f010c020c0123040c0123040c0123070c020c0123040c0123040c0123050c011f010c020c0123040c0123040c0123070c020c0123040c0123040c0123050c011f010c010c0301030c0123040c0123070c010c0372020c0301030c0123040c021f010c020c0123030c0372030c0123040c021f010c140c" + }, + { + "filename": "head-moon", + "data": "0x00031a160607000687070005000387035e0487050003000487035e0787030002000487025e0687015e0387020002000e87015e0187020001001287010001000587015e0887015e038701000287015e11870187025e11870187015e128714871487148701001287010001000f87015e028701000200058702230687025e0187020002000b87035e0287020003000687015e0387015e0387030005000a870500070006870700" + }, + { + "filename": "head-moose", + "data": "0x00051c15040383010002830c000283010003830383010002830c850283010003830383010002830c850283010003830383010002830c8502830100038307830b85068307830b85068307830b85068304000e85060004000f85050004000f85050004000f850500040005850d980200040005850d98020004000585069802840298028401980200040005850d9802000400058501980b840198020009000d980200" + }, + { + "filename": "head-mosquito", + "data": "0x00011f14030c0002350e000a000235030002350b0009000135030002350d0008000135030001350f00080001350200013510000800013502000135100008000135020001351000040009110f0003000211014909110d000200021101490b110c000100021101490d110b00010011110a001311090002110149101109001411080001001b1102001511050003000a11078508000400021107850711080005000f110800" + }, + { + "filename": "head-mountain-snowcap", + "data": "0x00031c15040a0004010a0009000101028d0301090008000101018d0601080008000101018d0601080007000a01070007000101018d0601018d0101070006000c01060006000c01060005000e01050005000e0105000400021d0201021d0401021d0301011d04000400021d0101041d0201041d0101021d04000300021d0201051d0101041d0201021d03000300021d02010a1d0201021d03000200031d0201051d0101041d0201031d02000100021d01010f1d0101031d01000b1d0301071d0101021d0100161d01000300061d0600061d0300" + }, + { + "filename": "head-mouse", + "data": "0x00031e1407070e0400070e0500070e0400070e0500070e0400070e0500070e0400070e0500070e0400070e0500070e0400070e0500070e0400070e050002000e05070002000e05070002000e05070002000e05070002000e050400030e02000e050400030e02000e050400030e02001205030002000e05011f0105011f0105030002000805024b0105024b05050300020012050300" + }, + { + "filename": "head-mug", + "data": "0x00031b14020900067f0200017f07000700037f0400017f0300027f0100017f03000600017f0200037f0300037f07000700027f0100017f0e0019000300160103000101016f014b1101014b010101000101014b0101016f014b1101014b0101020101000101016f024b1001014b0101010102000101016f024b1001014b0101010102000101016f024b1001014b0101020101000101016f024b1001014b010101000101014b0101016f024b120102000101014b0101016f014b1101010004000101016f014b1101010005000101016f014b040104370401014b0201020006000101016f014b040102370401014b0201030007000101016f024b0601024b02010400" + }, + { + "filename": "head-mushroom", + "data": "0x00021c150408000855080005000855025104550500030003550151045502510455025102550300020008550451055501510255020001000a5502510a5501000100035502510c5503510255010003550451065502510255055102550155015102550251035501510355025102550551025501550151105503510355185501001655010003001255030005000eaf050005000eaf050005000eaf050005000eaf050005000eaf0500050002af045508af0500050002af01550223015508af0500070004550d00" + }, + { + "filename": "head-mustard", + "data": "0x00021814080700022607000700022607000600042606000600042606000500068a050005000623050001000226028a0226028a0226028a0226010001000e230100104610461046104610461046104610460246038a0246038a06460446048a08461046" + }, + { + "filename": "head-nigiri", + "data": "0x00051c1404040002ce01cd03ce01cd03ce01cd03ce01cd01ce0400020001cd03ce01cd03ce01cd03ce01cd03ce01cd03ce020002ce01cd04ce01cd03ce01cd03ce01cd03ce01cd04ce03ce01cd03ce01cd03ce01cd03ce01cd03ce01cd04ce03ce01cd03ce01cd03ce01cd03ce01cd03ce01cd04ce03ce120103ce01001601010001001601010002001401020001001601010001001601010002001401020001001601010001000a0103cf09010100020014010200030012010300" + }, + { + "filename": "head-noodles", + "data": "0x00021e1402100001360b00100001360500013605000f000136040002360600050001d0010001d0010001d005000136020002360800040001d0015c01d0015c01d0015c01d002000298038803160700030001d0015c01d0025c03160398068802160600020001d0015c01d0025c02160419038803c20288011602980400020001d0015c01d0015c02160619018801c2034601c201880116039803001c0b01001a0b010001001a8901000200188902000200180b02000300168903000300160b03000400140b04000500070b0789040b05000600100b060008000c0b0800" + }, + { + "filename": "head-onion", + "data": "0x00041a14060a00019c09000800019c0100019c0100019c07000900039c080008000137039c013707000200029c0137039c0137039c0137039c0137019c02000100039c0137039c0137039c0137039c0137029c0100049c0137039c0137039c0137039c0137039c049c0137039c0137039c0137039c0137039c049c0137039c0137039c0137039c0137039c049c0137039c0137039c0137039c0137039c049c0137039c0137039c0137039c0137039c049c0137039c0137039c0137039c0137039c049c0137039c0137039c0137039c0137039c049c01c8019c0123019c0137039c0137029c01c80137039c0100039c0137029c0423019c0137039c0137029c01000200029c0137039c0137039c0137039c0137019c02000300019c0137039c0137039c0137039c01370300" + }, + { + "filename": "head-orangutan", + "data": "0x0002181406070001240a0004000b24030003000b24040003000c24030001000e2403000624070e0424010002000424070e04240100020002240c0e01240100020002240c0e01240100020002240c0e01240100020002240c0e01240100020002240c0e012401000200100e0200040e0a08020e0200030e0c08010e0200030e010801240208010e0108010e030801240108010e0200030e01240a080124010e0200030e01240a230124010e0200030e0c24010e" + }, + { + "filename": "head-orca", + "data": "0x00021b14010d00010d0c000d00020d0b000d00030d0a000d00040d09000d00050d08000d00060d07000b000b0d040009000e0d03000800100d02000100030d0300110d02000200030d0100130d01000200170d01000300160d01000200180d0200030d0100140d0100030d0200130d0100030d0400080d090b02000800060d090b03000900040d090b0400" + }, + { + "filename": "head-otter", + "data": "0x000918140704000b86020002000e86010002000f8602000f8602000f86010010861186118602000286047f0623037f020001d10486017f0623017f0286020002d1037f04d1012303d1027f020008d1012301d1012304d1" + }, + { + "filename": "head-outlet", + "data": "0x000418160810511051045108a40451035102a4012304a4012302a40351035102a4012304a4012302a40351035101a4037c02a4037c01a40351035104a4022304a40351035104a4022304a40351045108a404511051045108a40451035102a4012304a4012302a40351035102a4012304a4012302a40351035101a4037c02a4037c01a40351035104a4022304a40351035104a4022304a40351045108a4045110511051" + }, + { + "filename": "head-owl", + "data": "0x000218140507000ad20200060001d20ad301d20100050001d201d304d402d304d401d301d2050001d201d30ad401d301d2050001d201d301d402d501d302d401d302d501d401d301d2050001d201d303d401d302d401d303d401d301d2050001d201d304d402d304d401d301d2050002d201d308d402d301d20400042b01d308d401d301d20300062b08d401d301d20300062b01d207d401d301d20200072b01d207d401d301d20200072b01d207d401d301d20200072b01d207d401d301d20200062b02d207d401d201000200052b03d206d401d202000200032b04d206d401d20300010001d2012b07d206d403000bd207d40100" + }, + { + "filename": "head-oyster", + "data": "0x00021d14040a0005810a000700048103820481070007000181098201810700050003810982038105000500018105820398058201810500020004810282099802820481020002000181058209980582018102000200018102820f980282018102000381018211980182038101810382119803820181018102821398028201810181048206980351079803820181010002810382049805510498038202810100030002810182039807510398018202810300050001810198025507510255019801810500040001810f550181040003000481035505810355048103000300018102d6058103d6058102d601810300040011d60400" + }, + { + "filename": "head-paintbrush", + "data": "0x00091c18020700036d0572097502240600046d027201b10272097502240600046d0572087503240100096d0572087503240a6d0572087503240a6d0572087503240a6d0572077504240a6d0572077504240100096d0572077504240600046d0572077504240600036d0224017201b10272067505240700036d057206750524160001240100022418000224180001240100180001240100" + }, + { + "filename": "head-panda", + "data": "0x00051914060100042309000423010006230700062306230901042305230b01032304230d010223010002230e010123010002001001010002001001010002001001010002001001010002001001010002001001010002000a0104230201010002000a0104230201010002000701062303010100020010010100" + }, + { + "filename": "head-paperclip", + "data": "0x00091d14031ad701d7180001d701d7180001d701d7180001d701d7030010d7050001d701d7030001d7140001d701d7030001d7140001d701d7030001d7140001d701d7030001d7140001d701d7030016d701d7190014d70600" + }, + { + "filename": "head-peanut", + "data": "0x00041b1605040005d80d00020002d8036004d80b00010002d8016003c9036002d80a00010002d8016001c902d8016002c9016001d80a0002d8026003d8016002d8016002d8090001d8016002c9036001d8046002d8080001d8016002d8016003d8016001d802c9016005d8040001d801600bd8016006d8020002d8016012d80100010001d8016010d8016001d80100010002d8016012d8020002d801600dd8026002d803000fd802c9016001d8040005d8036005d8016002d8016001d8050002d8016002d802c9056001d8026002d8060002d8026002d8016004c9016002c901d80100080002d8036004d8016003d801000a0003d8046003d802000d0005d80400" + }, + { + "filename": "head-pencil-tip", + "data": "0x00031714090600022306000600022306000500042305000500042305000400062304000400022301570323040003000223035703230300030007570123030002000a57020002000a57020001000c57010001000c5701000e570e57025704260557032601570626035704260326083703260e26" + }, + { + "filename": "head-peyote", + "data": "0x00021e14030a0001d9020001da020001d90a000a0001d901db010001da010001db01d90a00080001d9020001db01dc01da01dc01db020001d90800090002db05dc02db0900050001d9010002aa01dd02aa03dd02aa01dd02aa010001d90500040002d902aa01dd04aa01dd04aa01dd02aa02d90400050002aa01dd02aa02d901aa01dd01aa02d902aa01dd02aa0500040002aa01dd02aa02d902aa01dd02aa02d902aa01dd02aa0400030002aa01dd0faa01dd02aa0300020017aa020001d9010017aa010001d9010001d917aa01d9010002d917aa02d9010001d917aa01d9010001d9010017aa010001d9020002aa01da11aa01da02aa0200030001aa13da01aa0300030015aa0300050011aa0500" + }, + { + "filename": "head-piano", + "data": "0x00041b15080400050e0a000200020e010501590105040e08000100020e0105080e070001000b0e07000d0e06000d0e06000e0e05000e0e05000f0e0400110e0200130e130e130e130e010e0159070e0159050e0159030e010e0159010e0159010e0159010e0159010e0159010e0159010e0159010e0159010e0159010e010e1159010e130e" + }, + { + "filename": "head-pickle", + "data": "0x00031b15050400040f0e000200080f0c000100030f01c0060f0b000100030f015c030f01c0020f0b00020f01c0060f015c020f0a00020f015c030f01c0070f0800060f015c040f01c0015c050f0400010f01c0120f0200010f015c130f0100150f0100160f0100150f0100130f01c0010f0100020f01c0100f015c010f0200010f015c120f02000b0f012302c0015c040f01000300030f01c0015c010f01c0040f025c050f01000500050f015c090f020007000b0f0400" + }, + { + "filename": "head-pie", + "data": "0x00011c14040b0002cc0b00050002cc030002cc050002cc0500060002cc030002cc030002cc0600050002cc030002cc050002cc0500060002cc080002cc0600050002cc04000209040002cc0500060002cc0200020901190109020002cc0600090001de040901de0900050002de010903de020903de010902de0500030012de0300020001de010910de010901de0200010016de0100010001de04bb01de04bb01de04bb01de04bb01de01bb010018bb18bb03bb029503bb0196019503bb0195019603bb029504bb01bb01950196029501960295019202950196029501960295019602950196029501bb01000195019602950196029509920196029501960295010002000196029501960295019202950196029501960295019602950196019502000200019602950196029501960295019602950196029501960295019601950200" + }, + { + "filename": "head-piggybank", + "data": "0x00041d14020c0003420c000b000142039301420500027604000800036c012503930125026c02000176016c0176040006000276026c017605120176026c0176026c0176040005000176106c01760400020001760100036c01010f6c01760300010001760259146c01760200010001760159136c0112016c03760100017601590176166c0176015901000276166c017603000176146c037603000276156c0176030001590176146c0176010004000376106c02760200050013760300060006760112020101120676050008000c760700" + }, + { + "filename": "head-pill", + "data": "0x00061d140305000924071d050003000c24081d03000200062401010724081d02000100032402010a24091d01000100032402010b24081d01001124091d1124091d1124091d1124091d1124091d01001024061d010f011d010001000f24071d010f011d010002000a2403230124061d010f011d020003000c24081d030005000924071d0500" + }, + { + "filename": "head-pillow", + "data": "0x000319160702df0e0002e00ddf05e0010002df0ee00100010003df0de00100010003df08e003df02e00100010003df0de00100010003df02e002df09e00100010003df0de00100010003df0de00100010003df0de00100010003df0de00100010003df0de00100010003df0de00100010003df0de00100010003df0de00100010003df05e004df04e00100010003df0de00100010002df0ee001000ddf05e002df0e0002e0" + }, + { + "filename": "head-pineapple", + "data": "0x00031914070600010f010002e10100010f0600040001e10100020f02e1020f010001e10400040003e1010f02e1010f03e10400060006e1060004000228022602280226022804000200022802260228022602280226022802000200022802260228022602280226022802000100012802260228022602280226022802260128010001000128022602280226022802260228022601280100010001260228022602280226022802260228012601000100012602280226022802260228022602280126010001001126010010260100010010260100122601000226034201260442012603420226010001000226034201260442012603420226010002000e260200" + }, + { + "filename": "head-pipe", + "data": "0x00061c150509160e0009980e0009980e000100030804980f000100030804980f000100030804980f000100030804980f000100030804980c0003160100030804980c160398010003081398010003081398010004081298010006080123010101230101012308080398020015080300140814000308" + }, + { + "filename": "head-pirateship", + "data": "0x00011f14030c0002230e000d0001980e0005000198030008230b00040002230400082302000223060005000198050001230151012302510123015101230200019806000300025501980500032302510323010003550500030003550500042301510323020003550400030004550300022301510423015101230100035505000200065501000923030001980600050001980700019807000198060005000198070001980700019806000d2601980700019806000c97012601980700019806000197022309970126089701980100052601970223099701260198010001970100019701000197010001980126049701000c970a2603970300020004970123109705000300029703230197012301970123019701230197012301970123049706000400029701230e97070005000f970800" + }, + { + "filename": "head-pizza", + "data": "0x000319140708000237080008000237080007000137022801370700070001370228013707000600013704280137060006000137012802370128013706000500013702280237022801370500050001370628013705000400013708280137040004000137082801370400030001370a2801370300030001370a2801370300020001370c2801370200020001370c280137020001000137032803370828013701000100013701280137012803370528023701280137010001370828032305280137013710280137" + }, + { + "filename": "head-plane", + "data": "0x00041e14030d0002010c000c0005010a0009000901090007000b01090005000c010a001b001b0006000bc80a0006000bc80a0006000bc80a0006000cc8090006000cc8090002c8040012c80200010102c8040005c8060107c8020001010ac8090105c8010001c801010924020106230201052402000101010007c80b0105c802000101" + }, + { + "filename": "head-pop", + "data": "0x000318140802000ca302000100061405280314010005140128031404280314022802140128011401280314042802140214012802140128041405280114021401280814042801140228051401280314042801140a14052801140a1404280214091405280214091404280314081404280414071404280514051405280614031404280914021403280314012801230201012301280214010002280c14010002000ca30200" + }, + { + "filename": "head-porkbao", + "data": "0x00051914070500025701000257010002570500050002570183025701830257050004000257018302570183025701830157040004000157018302570183025701830257040002000e57020002000e57020001001057010001001057010001001057010012571257125712570957037d06571257010010570100" + }, + { + "filename": "head-potato", + "data": "0x00061d15040f0001c909000d00077a05000b00037a01c9077a030008000b7a02c9027a020005000f7a01c9027a02000200167a01000100177a0100187a0100187a0100187a01c9187a0100107a02c9057a02000100097a01230101012301010123017a02c9057a02000200057a02c90d7a03000300047a02c90b7a050006000a7a0900" + }, + { + "filename": "head-pufferfish", + "data": "0x00041c160509000168020001680a000600016801000668010001680700034903000568014904680700054902680349076806000449036803490368024903680500034904680349036802490468040003491068040002001268030002001268030002001268030005490d6805490149046801930b680193046801490549029309680293054901490a68044907680149054902930468014902350149026801930549030006930268044901680393040004000e93050005000c930600070008930800" + }, + { + "filename": "head-pumpkin", + "data": "0x00051b1406080003b001c501b00800080003b001c501b00800080003b001c501b008000300072401b0072403000300072401480724030002240148072401480724014802240224014807240148072401480224022401480724014807240148022402240148072401480724014802240224014807240148072401480224022401480724014807240148022402240148072401480724014802240224014807240148072401480224022401480585016d0385016d05850148022402240148072401480724014802240224014807240148072401480224" + }, + { + "filename": "head-pyramid", + "data": "0x00031e14030800018601b111000800028601b110000700038602b10f000700038603b10e000600058603b10d000600058604b10c00050002860284028601b1028602b10b000500078605b10a000400088606b109000400088607b1080003000a8607b1070003000a8608b1060002000b8609b1050002000c8606b1028601b1040001000d860ab1030001000186038401860184078607b1038601b102000986032303860bb101000f860cb1" + }, + { + "filename": "head-queencrown", + "data": "0x00021b14050a00025b0a000900015b01180141015b09000900015b01410118015b09000500035b0200025b0200035b05000400015b0300015b0100025b0100015b0300015b04000100035b0500045b0500035b0100015b0200015b03000241015b018b0154015b02410300015b0200015b015b0200015b01000441015b0254015b04410100015b0200015b015b01000141015b0541015b0154018b015b0541015b01410100015b0100015b0141015b0541045b0541015b0141015b01000100015b0141015b0641025b0641015b0141015b01000100015b0241015b0441045b0441015b0241015b01000200015b0241015b0341015b028a015b0341015b0241015b02000200015b0241015b0341015b028a015b0341015b0241015b02000100025b0141035b0241015b028a015b0241035b0141025b01000200125b02000300103503000200055b0841055b02000200125b0200" + }, + { + "filename": "head-rabbit", + "data": "0x00041715090372080003720372080003720372080003720372080003720372080003720e720e720e720e720e720e720e720e050e0502050b230105030502010405020103050e050e05" + }, + { + "filename": "head-rainbow", + "data": "0x00041a140608000c1807000d18060003180b14050004180b140400021803140b460300031803140b4602000118031403460b0f01000218031403460b0f031803140346030f0854031803140346030f0854031803140346030f03540512031803140346030f03540512031803140346030f035403120200031803140346030f035403120200031803140346030f032303120200031803140346030f035403120200031803140346030f035403120200" + }, + { + "filename": "head-rangefinder", + "data": "0x00061b1405020002050100020501000d72010501050b7203050172020e0101010e017201050105027201050372020c037203050172040e0172010501050172020511720105010e010c0205110c010e010e140c010e010e140c010e010e140c010e010e140c010e010e140c010e010e140c010e010e120c0205010e010e080c0505050c0205010e010e140c010e010514720105" + }, + { + "filename": "head-raven", + "data": "0x00041e14080100080e0d000400070e0b0001000c0e090002000c0e080001000e0e070001000e0e070001000f0e0600100e0600100e0600100e0600100e0600090e070d0600080e0c0d0200070e0f0d070e0f0d070e0d0d0200080e090d0500" + }, + { + "filename": "head-retainer", + "data": "0x00091d150504000320110004000120011906200c0004000320011906200a0003000520011902200119042008000300092001190620050003000220011903200119062001190320040002000220021903200119032002190120031901200400020002200f19022003000100022011190120030001000120031904a4011904a4011904a40119022002a402200219012001a40120011901a4011901a4021901a4011901a40119012001a40320010001a4052001a4022003a4022003a4022006a4030003a41200" + }, + { + "filename": "head-rgb", + "data": "0x00011c160409000664090007000a64070006000c64060005000e64050005000e640500040010640400040001640628026406690164040003000165072802010769015a030002000265062804010669025a020001000365052806010569035a010001000365052806010569035a01000565032808010369055a0565032808010369055a0665022808010269065a0765012808010169075a086501e2060101e2085a086508e2085a0100086506e2085a01000100086506e2085a01000200086504e2085a02000300086502e2085a0300050006650200065a0500" + }, + { + "filename": "head-ring", + "data": "0x00021a15060600084f06000600024f0101024f016c024f06000700034f016c024f07000500032a044f032a05000300022a021e022a024f022a021e022a03000200012a021e0a2a021e012a02000100052a011e0700052a01000100032a011e0b00032a0100032a021e0c00032a012a0101012a011e0d00032a032a011e0d00032a032a011e0d00032a032a011e0d00012a0101012a032a011e0d00012a0101012a032a011e0d00032a0100032a021e0a00032a01000100052a081e052a01000200102a020003000e2a030005000a2a0500" + }, + { + "filename": "head-road", + "data": "0x00061c1403020017e3020017e3020017d4020017e3020017e3010017e30100010017e30100010017e30100010017e30100010017e3010018e3010017e4020017e3020001e303e403e303e403e303e403e303e401e3020017e30200" + }, + { + "filename": "head-robot", + "data": "0x00031c140405000e1f050005000e1f050003001205030003000105011f0205011f0205011f0205011f0205011f0205011f0105030003001205030003001205030003000105101f01050300010001050100120503000100010501001205010001050100031f1205010001050100010e021f1205031f031f1205021f010e010e021f1205031f031f1205021f010e03000105010e0259010e0259010e0259010e0259010e0259010e0105031f03000105010e020b010e020b010e020b010e020b010e020b010e0105030003000105100e01050300030012050300" + }, + { + "filename": "head-rock", + "data": "0x00031b14050b00030c08000a00010c031f020c06000900010c011f010c041f020c04000800020c021f010c051f020c02000300050c051f010c061f010c01000200010c121f010c0100010c051f040c0a1f010c0100010c091f010c091f010c0100010c021f010c101f010c0100010c071f020c011f070c021f010c0100010c051f020c0c1f010c010c141f010c010c041f010c0e1f020c010c041f010c081f020c011f030c02000100010c041f010c041f030c021f010c021f010c02000200010c051f030c041f010c021f010c03000300050c041f030c031f010c03000400010c0c1f010c0400" + }, + { + "filename": "head-rosebud", + "data": "0x00021c14040c0001940b000a000119010002940a000900021904940900070004190694070006000419089406000500051909940500040006190a940400040005190b940400030006190394011d08940300030006190394011d08940300011d020006190294021d08940200011d0100011d010007190194021d08940100011d01000100041d05190194021d0694041d01000200051d03190194021d0494051d02000300051d0219041d0294051d03000400041d0119011d0123021d0123011d0194041d04000500031d0119021d0223021d0194031d050006000c1d060006000c1d0600" + }, + { + "filename": "head-ruler-triangular", + "data": "0x00021c1508019a1300019a014f1200029a014f1100019a034f1000019a044f0f00029a044f0e00019a064f0d00019a074f0c00029a074f0b00019a094f0a00019a034f0100064f0900029a024f0200064f0800019a034f0300064f0700019a034f0400064f0600029a024f0500064f0500019a034f0600064f0400019a104f0300029a094f049a034f0200019a0a4f049a044f0100019a134f" + }, + { + "filename": "head-saguaro", + "data": "0x00031c14040c00047908000c00057907000300047905000579070003000479020002790100057907000300047902000279010005790700027901000479020002790100057907000279010004790200017902b0057902000279010002790100017901b004790500057902000279010002790300047905000579010003790100027904000379050004790200037901b001790100027902000479020001790100047902000379030002790200047902000179010004790200027904000279020004790200017901b00479020002790400037901000479030001b004790100037904000100027901b0047904b004790100037904000200017901b0077902b00379010002790500040002790323037901b0037901b0027905000500077901b0037901b002790500" + }, + { + "filename": "head-sailboat", + "data": "0x00011c14040d0001010a000c0002010100010108000b0003010100010108000a0004010100020107000900020102df01010100020107000800030102df010101000301060007000701010003010600060008010100040105000500090101000401050004000a0101000501040003000b0101000501040002000c0101000601030001000d010100060103000e010100070102001800188301000183149801830100020001830198108301980183020003000183109801830300040010830400" + }, + { + "filename": "head-sandwich", + "data": "0x00041d14030d0001880c000c0003e10b000c0002e1011a0b000c0003e10b000500088301880783050003000783017d028301880483017d0483030002000283017d088301880183017d0883020001000883017d0a83017d04830100010018830100010018e501000100185501000100016d0655016d0855016d07550100011c186d011c031c066d081c056d041c0100041c0298051c0398051c0298011c0100011c010003000698082306980300040012980400" + }, + { + "filename": "head-saturn", + "data": "0x00051c16030b0004e60a00090008e6080007000ce60200023a0200010005510ee60100023a0200015105000ee605000151040002140de6011404000151040003140ce601140400010001510200025503140be6021403000200015101000255041409e603140300030001510355061405e6041403000400015102550f1403000500015104550b140151020001e60500015502510555061402550100015102000600025502510a55030001510100030002e60100045503510755040001510200013a02e60200065503510355050001510200023a050007550351050001510b000455040005510100" + }, + { + "filename": "head-saw", + "data": "0x00091e15020c9710a301000b9710a3020003970100069710a3020002970300059710a3020002970300059710a3020002970300059710a3020002970300059710a302000297030005970ea3010001a302000297030005970ca3010001a302000200039701000297012602970ba3010001a304000100099703a3025105a3010001a30600099702a3025105a3010001a30800080008a30c00" + }, + { + "filename": "head-scorpion", + "data": "0x00031e1403060008e70d00060008e70d00060008e70d00030004e7050003e70c00030004e7020003e803e70c00030004e7020001e8010002e802e70c00010003e7070003e80d00010003e71700010003e7170003e7180003e7180003e7180003e703000de8080003e7020010e80300039f05e710e803e7019f0200010004e702e802e902e802e902e802e901e807e70200010004e704e802e902e802e904e806e7020006000ee8010003e7039f" + }, + { + "filename": "head-shark", + "data": "0x00031c14030a0004ec0b000b0005ec09000c0005ec08000c0005ec080001ec0b0006ec0700010001ec08000b430400010002ec05000e430300010003ec020011430200020003ec010012430100020004ec1343030003ec1343030003ec104301ec01430100030003ec104301ec01430100020003ec010011430200020002ec020011430200020001ec0300034301ec014301ec0243023c0101013c0101013c0101013c0300010001ec0400024301ec014301ec0243023c0101013c0101013c0101023c030006000643093c0400" + }, + { + "filename": "head-shower", + "data": "0x00011c19040b00020d0b000b00020d0b000800080d080006000c0d060005000e0d05000400101f04000400081f010b011f030b031f04000400101f040005000e43050005000e430500040010430400040010430400040010430400030012430300030012430300030012430300020014430200020014430200020014430200010016430100010001430100014310000143010001430100010004430e0004430100014301000143010001430e00014301000143010001431800010001430100014310000143010001430100" + }, + { + "filename": "head-skateboard", + "data": "0x00091e1402030016c00300010003c0016a0369016a0ac0016a0369016a03c00100010001c0011b01c0016a0369016a0ac0016a0369016a01c0011b01c0010002c0011b01c0016a0369016a0ac0016a0369016a01c0011b02c002c0011b03c0017c0ec0017c03c0011b02c002c0011b03c0017c0ec0017c03c0011b02c002c0011b03c0017c0ec0017c03c0011b02c002c0011b03c0017c0ec0017c03c0011b02c002c0011b01c0016a0369016a0ac0016a0369016a01c0011b02c0010001c0011b01c0016a0369016a05c0030e02c0016a0369016a01c0011b01c00100010003c0016a0369016a0ac0016a0369016a03c00100030016c00300" + }, + { + "filename": "head-skeleton-hat", + "data": "0x000519150704000a43040001001043010001001043010012431243010010af0100010010af0100010010af0100010010af0100010010af0100010010af0100010010af0100010007af01b101af01b106af010003000caf0300030002af01b101af016d01af01b101af01b101af01b101af0300030003af01b101af01b101af01b101af01b101af01b1030004000baf0300" + }, + { + "filename": "head-skilift", + "data": "0x00011e1403010001230100142301000123010001230800012301000123100001230200152301000123010006000123140006000123140006000223130006000423110007000b230900030014880400020001880a770188097701880300020001880a77018807770166017701880300020001880a77018807770166017701880300020001880a77018807770166017701880300020001880a7701880977018803000200163303000200168803000200163303000200063306230a330300020016330300040012330500" + }, + { + "filename": "head-smile", + "data": "0x00051d14030600042406000424060004000824020008240400012402001424020001240724020108240201072401240101162401010124012404011024040101240224160102240324140103240100032412010324010001000424100104240100020004240e0104240200020006240a010624020003001424030004000a2402010624040005001024050007000c240700" + }, + { + "filename": "head-snowglobe", + "data": "0x00051914080600048c07000300038c0151038c0151038c03000100018c0151058c0151068c015101000100048c0151018c0351028c0151038c0100038c0151018c0197025101970251038c0151028c0151048c025103970251058c048c025105970251038c0151038c0251039701260197012601970251038c048c0997048c048c04970126019701260297048c048c09970151038c038c015109970251028c11510100045104110751010001000f08010001000f080100" + }, + { + "filename": "head-snowmobile", + "data": "0x00071e15050c0001040c000c0001040c0008000305010002040b000b00010502040b000b00010502040b000b000123010402260a000a0003230426080003230600032302260155052605000c23012603550104052603000b23022602550804020002230901022602550804020005010123110102000601032301010b05030001040a010a050300010401000100012301050123010501230105012301000e040200" + }, + { + "filename": "head-spaghetti", + "data": "0x00041a1c060c000384050005000384030001840385018404000400038401850484028501d00284030003000184028501d001840485028404850200030004850184048501840585020003000f8502000300015503850255028501d002550385015502000200105502000200105502000100037d0c55027d02000100127d0100147d147d017d0201017d0101017d0701017d0301017d0101017d017d0401017d0701017d0301017d0101017d017d0c01017d0501017d017d010010010100017d017d0100017d0e00017d0100017d017d0100017d0e00017d0100017d017d0100017d0e00017d0100017d017d0100017d0e00017d0100017d017d0100017d0e00017d0100017d0200017d0e00017d02000200017d0e00017d02000200017d0e00017d0200" + }, + { + "filename": "head-sponge", + "data": "0x0004191408010003290200022902000429030001290222032901220929010001290222092903220229010007290222022903220229010003290222022902220229032202290100032902220a2901001029010010290100112911291129112910290100012902220d29010001290222032905230429020001000d2901220129010001000e290200" + }, + { + "filename": "head-squid", + "data": "0x00011c1a020d00026a0b000c00046a0a000b00036a01ed026a09000a00056a01ed026a08000900076a01ed026a070008000c6a060007000e6a05000600014f0e6a014f04000500024f0e6a024f03000400024f106a024f02000300034f106a034f01000200044f106a014f01ed024f0200044f106a024f01ed014f0200044f106a044f0200044f106a044f0300034f106a034f01000100014f0200034f0e6a034f0200014f016a014f03000245014f0123010101230101012301010123010101230101014f02450400014f016a014f020003450c4f03450300014f016a014f0100144502000100014f014501000145010002450100024506000245010002450100024501000200034501000145020001450800014502000145020001450100030001451300014f014501001700014f014501001700014f014501001700014f0200" + }, + { + "filename": "head-stapler", + "data": "0x00081c140407000d2404000400122402000200162401001724010017240100172401001724051812720100061811720100041801240218110005181224010018181818" + }, + { + "filename": "head-star-sparkles", + "data": "0x00021b17050a0002ad0a0006000129020001ad022901ad0900090001ad022901ad0900080001ad042901ad0300012901000129020003000129040001ad042901ad04000129030002000329020001ad062901ad0200012901000129020003000129030001ad062901ad0700050002ad082902ad0500030002ad0c2902ad0300010002ad102902ad010001ad142901ad01ad142901ad010002ad102902ad0100030002ad0c2902ad0300050001ad0a2901ad0500050001ad0a2901ad050001000129020001ad072903ad022901ad0400040001ad0c2901ad0400030001ad062902ad062901ad0300030001ad042902ad020002ad042901ad0300030001ad022902ad060002ad022901ad0300040002ad0a0002ad0400" + }, + { + "filename": "head-steak", + "data": "0x00071b160504000e51040002000251061803380518025102000100015109180138081801510100010001510918013808180151010001510a1801380918015101510a1801380918015101510a1801380918015101510a1801380918015101510a1801380918015101510138091801380918015102510238051803380118035105180151010003510838011801510138015104180251020008510238011803510418015101000400075102380518035101000a000a5102000b0007510400" + }, + { + "filename": "head-sunset", + "data": "0x00031d1403090008490900070004490142024901420449070005000549014201490242014901420549050004000149014201490c420149014201490400030001490142014904420126014202260142012604420149014201490300020001490142014903420a2603420149014201490200020002490342032601280126022801260128032603420249020001000249034203260828032603420249010001000249024203260a2803260242024901000349024202260c280226024203490249024202260e28022602420249014901420149024202260d28012602420149014201490249024202260e280226024202490249024202260e28022602420249014901420149024202260c280226024201490142014902490242022606280201012605280226024202490349024202260c2802260242034901000349024202260a280226024203490100" + }, + { + "filename": "head-taco-classic", + "data": "0x00051d14030a00038e0167028e0a000800038e0167018e0167048e08000600038e0167018e015701670157018e0167028e0167018e06000500018e0267018e0367011102570367038e05000500028e026708500157038e05000300018e0167018e015702110150018a0350018a025002110267028e03000300028e01670650018a0750038e03000300018e01110d50018a02500167018e03000200018e015701110150018a0e5001110157018e020001000167018e1450018e0200020001670450018a0c50018a02500267010002000111145001110200016701000350018a0d50018a0150018a025002000100016716500167010002000550018a0550018a0750018a0250010001670300145001670200" + }, + { + "filename": "head-taxi", + "data": "0x00041c170405000ee60500050001e603c8040105c801e60500040001e603c8040107c801e60400040001e602c8040108c801e60400030001e602c8040104c8034303c801e60300030001e601c8040104c8014303c8014302c801e60300010016e60100010016e60100010016e60100010016e60100010016e60100010016e60100010016e60100010002e6011f10e6011f02e60100011f0137141f0137011f091f061d091f010008e6061d08e601000200020e0500061d0500020e02000200020d1000020d02000200020d1000020d0200" + }, + { + "filename": "head-thumbsup", + "data": "0x00011a14050a00012b02e608000a0001e6012b02e607000a0001e6012b02e607000a00012b03e60700090005e60700080006e60700070006e60800060006e6012b07e60100030008e6012b07e6012b01e60be6012b07e6012b01e60de6012b06e6012b0de6072b01000ae6012b0ae60ae6012b08e6012b01e60ae6012b09e6012b0ce6082b010001e6022b05e6012b02e6012b08e6010008e6042b06e6012b01e60100030004e6012b03e6012b07e6012b0100040008e6072b0200" + }, + { + "filename": "head-toaster", + "data": "0x00031a1f0504000e840300030002840cd8028402000300018403d8089903d801840200040001840cd8018403000400018402d8089902d8018403000300010b0e72010b02000300010b0e72010b02000300010b0e72010b020d0300010b0e72010b020d0300010b0e72010b02000300010b0e72010b02000300010b0e72010b02000300010b0e72010b02000300010b0e72010b02000300010b0e72010b02000200120d0100021f120d0100011f0100120d0100011f1400011f1400011f1400011f1400011f1400011f1400011f1400011f1400011f1400011f1400011f1400" + }, + { + "filename": "head-toiletpaper-full", + "data": "0x00071a1605010002ee11010100010002ee1101010004ee110104ee110104ee110101ee017c010d01ee110101ee017c010d01ee110101ee017c010d01ee110101ee017c010d01ee110104ee110104ee110104ee1101010002ee027c01ee010101ee010101ee010101ee010101ee010101ee010101ee01010200010002ee017c1001010004000c010500050008010800" + }, + { + "filename": "head-tooth", + "data": "0x00041917060a0005570400030004570100025705010257020002000157040101570301015705010157010001000157060103570701015701000157100101570157110101570157110101570157110101570157110101570157110101570157110101570100015710010157020001570e0101570100020001570e0101570100030001570201097c020101570100030001570d0101570100040001570401035704010157020004000157030101570300015703010157020005000157020101570400015702010157020006000257060002570300" + }, + { + "filename": "head-toothbrush-fresh", + "data": "0x00021914011000016707000f000167011c016706000f000167021c046702000f000167061c016701000c000667021c0101011c0167010009000367081c0101011c01670100080001670d1c01670100080001670d1c0167010008000101011c0101011c0101011c0101011c0101011c0101011c0101011c0101010008000f01010008000f01010008000f01010008000f01010008000f0101000143010002430100134302000143020013430100024301000543012301460123014601230a430700114307001143" + }, + { + "filename": "head-tornado", + "data": "0x00031c150406000c81060003000281017c0281047e057c0381040002000281027c0b81017c03810300020003810f7c038101000200168103000b7c0181017c078101000500118102000700047c0181017c0181017c0581040006000c81060005000d81060004000b81090002000b810b00010009810e0002000a810800018103000500088106000181040001000181010001810100017c049c0281017c0681010001810300018101000481067c0881040003001281030003000481080004810500" + }, + { + "filename": "head-trashcan", + "data": "0x00031b14050900050508000700020504000105080007000105020009050300020011050300020008050723010d04000300010d08230a0d020006050323030d0505010d020002000205031f0205031f0205031f02050100010d010001000305031f0205031f0205031f03050200010501000205031f0205031f0205031f020501000105010002000205031f0205031f0205031f0205030002000205031f0205031f0205031f0205030002000205031f0205031f0205031f0205030002000205031f0205031f0205031f0205030002000205031f0205031f0205031f0205030002000205011f0523021f0205031f0205030002000205031f0205031f0205031f02050300020011050300" + }, + { + "filename": "head-turing", + "data": "0x00041d19031500018904000300126101890161030002000289016101cc01820161018201cc01610282016101cc0182016101cc0182016101820189016103000100018901940261028201610282016101cc018201610282016102820161018201cc028902000100018901941461018902000100018901000261018201cc016102820161018201cc0161018201cc016102820161028201610189020001000189010002890282016101cc01820161028201610282016101cc0182016101cc018201610189020002890194016101891261018901940100038901610189018201cc01610282016101cc01820161018201cc016102820161018201cc0161018901000189018901000189016101890282016101cc018201610282016102820161018201cc01610282016101890100018901890100018901610189126101890100018901890100018901610189018201cc016102820161028201610282016101cc018201610282016101890100018901890100038902820161018201cc0161018201cc0161018201cc01610282016101cc018201610189010001890189010001891461018901000189018901000189026102010161020101610201016102010161020101610201016102000189018901000189026102010161020101610201016102010161020101610201016101890100018901890100018914610189010001890189010001890194110001940100028901000189020002891100018903000100018901000289150001000189010001941600020002891600" + }, + { + "filename": "head-ufo", + "data": "0x00021e15020e00014f0d000d00034f0c000e00014f0d000b00064f0b0009000a4f090007000e43070006000a430106014302060243060006000c430206024306000500124305000500124305000500124305000400144304000400144304000400144304000400144f04000200184f02000100054f026d014f026d014f026d014f026d014f026d014f026d044f0100064f026d014f026d014f026d014f026d014f026d014f026d054f0400144f040009000a4f0900" + }, + { + "filename": "head-undead", + "data": "0x00021b16050600027903260b00060004790200027903260500020001260300027903000579060002000126017902000279020003790900020001260179020002790200037909000200027902000279020002790200018003000126030002000279020003790100027905000179022602000200027903000579050004790100018002000279020005790600037901000280010002790200057907000279010003000a7904000479010004001079020004000f7902000180018005000a79040002800700087907000300018003000879070006000180017901230125012301250123027901800300018002000500038006790380050004000e80040005000180010003800200028001000180060008000180090001800300" + }, + { + "filename": "head-unicorn", + "data": "0x00041b16040b00021c0a000800011c0300021c0600012602000900021c0100021c040002260300050003660100051c0200032604000200031c0366071c032601660400011c0100031c0766011c0426026604000100031c012007660426036604000200011c02200766032604660400020003200766022605660400010004200766012606660400020003200e660400020003200e66040002000320125f01000220023a0e5f0120015f0120015f0100043a035f012001660123016601230166012301660120065f0200033a125f0200033a125f0300023a12000400013a1200" + }, + { + "filename": "head-vent", + "data": "0x00081c140418011801030101230101012301010123010101230201012301010123010101230101012305010301011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f05010301011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f0101012303010301011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f0101012303010101011f0101011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f010101230101011f01010301011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f0101012303010301011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f0101020202010301011f0101011f0101011f0101011f0201011f0101011f0101011f0101011f05010301010201010102010101020101010202010102010101020101010201010102050118011801" + }, + { + "filename": "head-void", + "data": "0x00051b14050123020001230200012302000123020001230200012302000123020001231600160001231400012316001600012314000123160016000123140001231600160001231400012316001600012302000123020001230200012302000123020001230200012302000123" + }, + { + "filename": "head-volcano", + "data": "0x00031c15040800081f08000800011f0641011f08000700021f0642021f07000700011f014106280141011f07000600021f0341031f0241021f06000600021f0141041f0141021f0141011f06000500021f01410b1f05000500041f010c051f010c031f05000400051f010c051f010c041f04000400051f010c051f010c041f04000300051f010c071f010c041f03000300051f010c071f010c041f03000200061f010c071f010c051f02000200051f010c091f010c041f02000100021f020c0f1f010c021f01000100021f020c051f010c0c1f01000a1f010c0341010c041f020c031f061f010c021f010c091f020c031f0200141f0200" + }, + { + "filename": "head-volleyball", + "data": "0x00031b1505090004d40900060001d401ef02d4020102d401ef01d40600040003d401ef02d4020102d401ef03d40400030001d401ef03d401ef04d401ef03d401ef01d40300020003d401ef02d401ef04d401ef02d401ef03d40200020004d40aef02d4010101d40200010004d401ef0ad401ef04d40100010003d401ef0cd401ef01d4010101d40100010003d401ef0cd401ef01d4010101d4010004d401ef0cd401ef01d4010102d404d401ef0cd401ef02d4010101d404d401ef0cd401ef02d4010101d404d401ef0cd401ef04d4010003d401ef0cd401ef04d4010003d401ef0cd401ef03d40100010001d4010102d401ef0ad401ef04d40100020001d4010102d40aef04d40200020003d401ef02d401ef04d401ef02d401ef03d40200030001d401ef03d401ef04d401ef03d401ef01d40300" + }, + { + "filename": "head-wall", + "data": "0x00031a15060237041a01830237011a0137091a061a01830d1a061a01830d1a061a01830d1a0100128301000237011a0137091a01830237041a0d1a0183061a0d1a0183061a0d1a0183061a0100128301000237041a018301370c1a061a01830d1a061a01830d1a061a01830d1a0100128301000237011a0137091a01830237041a071a0337031a0183061a0d1a0183061a0d1a0183061a" + }, + { + "filename": "head-wallet", + "data": "0x00081d1403020008a40e8c0200029701a408510ec801970197012301a408510ec801970d9701080c9701970ba40197010801970a430197019701a4057c05a4019701080c97019701a4017c03a4017c05a40197010801970a260197019701a4017c03a4017c05a4019701080c97019701a4027c01a4027c05a40197010801970a980197019701a4017c03a4017c05a40197010801970a980197019701a4057c01a4034701a4019701080c9701970ba4019701080c970d9701080c97" + }, + { + "filename": "head-wallsafe", + "data": "0x00091d140419080108117e0108052401080108017e0f08017e0108052401080108017e0f08017e07080108017e0f08017e01080124010801240108012401080108017e0f08017e07080108017e0f08017e01080124010801240108012401080108017e010801a40d08017e07080108017e01a4010801a40c08017e01080124010801240108012401080108017e010801a40208010101230101012301010123010101230308017e07080108117e010801a401080124010801a401081908" + }, + { + "filename": "head-washingmachine", + "data": "0x0003191f0402000fee0400020002ee017201ee017201ee017401ee017201ee015101ee0155017402ee0300020002ee017401ee017401ee017201ee017403ee0143017402ee03000200037210510200037206510472065102000372045102720475027204510200037203510172087501720351020003720351017208750172035102000372025101720a750172025102000372025101720a750172025102000372025101720a750172025102000372025101720a75017202510200037203510172087501720351020003720351017208750172035102000372045102720475027204510223037201510243035104720651012301000372105101230100037210510123140001231400012314000123140001231400012314000123140001231400012314000123140001231400" + }, + { + "filename": "head-watch", + "data": "0x00041a150802000c0a040001000826011e0126021e0226030001260e51012602000126065102780651012602000126035101780651017803510126020001260e51012602000126015101780a51017801510126020001260e5101260100010a01260e510126010a012601260e510126020a01260e510126010a012601260e5101260100010a0126045101780451017804510126020001260e510126020001260651027806510126020001260e510126020001000e26030002000c0a0400" + }, + { + "filename": "head-watermelon", + "data": "0x00031b15050400051d0d000300051d02240c000200051d0124011802240b000200041d0224012303240a000100041d082409000100031d06240123011802240800041d02240123011807240700031d0d240600031d0e240500031d0f240400031d10240300031d112402000100021d122401000100031d1124011d0200021d1024011d01000300021d042401230118012301180624011d02000400031d0a24021d03000500041d0624021d05000800071d0700" + }, + { + "filename": "head-wave", + "data": "0x00021c1401120004df05000e000adf03000c0002df014a0adf02000b0005df024a0243014a02df014a02df01000a0002df024a01df024a0143054a02df014a01df090002df024a01df024a01df034a01df0143024a03df090001df034a01df024a01df024a01df064a01df080002df024a01df024a01df034a01df024a0300014a01df080001df034a01df024a01df054a040001df0100070001df0d4a0600070001df0d4a0600060002df0d4a0600060001df0e4a0600050001df0f4a0600050001df0f4a0600040001df074a0143024a0143034a0143014a0600040001df044a01df024a0143034a0143034a0143014a050001df020001df044a01df044a0143034a0243054a0300010002df164a0100014a" + }, + { + "filename": "head-weed", + "data": "0x00011d15020d00010f0d000c00020f0d000c00020f0100010f0b000b00040f0c000400010f0600040f0700010f04000400020f0600030f0100010f0400020f04000400030f0100010f0200050f0400030f04000500040f0200060f0100040f05000500050f0200040f0100050f05000600050f0100040f0100040f0600010f06000d0f0600010f0100020f0100010f03000b0f0500020f01000100040f0200130f01000200170f02000400130f040005000f0f07000900030f015c030f015c010f09000800050f035c030f080006000f0f06000500110f05000400020f0f00020f0400" + }, + { + "filename": "head-weight", + "data": "0x00021a1405060001270896019505000600012701960727019505000600012701960600012701950500020003270d9601950200020003270396010e0196010e0196020e049601950200020003270396020e0296010e059601950200020003270396010e0196010e0196010e0196010e039601950200020003270396010e0196010e0296020e039601950200010003270f9601950100010003270f9601950100010003270f9601950100010003270f9601950100010003270f9601950100010003270f960195010003271196019503271196019503270496092704960195032711960195032711960195" + }, + { + "filename": "head-werewolf", + "data": "0x00061c1404030005970700059704000300059707000597040003000597070005970400030011260400030011070400030011260400030002970e8101970400030002970e8101970400020003970e8101970400010004970e810197040005971181029703000297018101d6018101d60f8102000397018101d6018101d60181042301010123010103230381010001000497018101d6018101d602230101062301010223018102000597018101d6018101d60c820300" + }, + { + "filename": "head-whale-alive", + "data": "0x00021e15021100044a07001000064a06000f00084a05000e000a4a04000d00064a010e054a0300014a0400014a0600064a010e014a010e054a0200024a0200024a05000f4a01560100064a05000f4a015601000100044a07000d4a03560200034a07000c4a04560200054a05000b4a055602000156134a065603000156114a0756030003560e4a07560100040005560a4a0856010004000656084a0856020005000556014a030e034a0856030006000356074a0856040007000156064a085606000a0009560900" + }, + { + "filename": "head-whale", + "data": "0x00041a1606080009d6030007000cd60100060005d6080d0100050005d6010d097c040005d6010d037c0281017c0281017c0181030005d6010d017c0281017c0281017c0281017c0181020005d6010d0481017c0281017c0281017c0181010005d6010d0581017c0281017c0281017c018106d6010d0581017c0281017c0281017c018106d6010d0581017c0281017c0281017c018106d6010d0581017c0281017c0281017c018106d6010d0481017c0381017c0281017c018106d6010d0381017c0381017c0381017c018103d6010d02d6010d0281017c0381017c0381017c028102d6030d01d602980181017c0281017c0381017c038103d6010d02d60398017c0281017c0281017c0381010006d60398017c0281017c0281017c02810200060003980b00060003980b00" + }, + { + "filename": "head-wine", + "data": "0x00051b1405166f166f136f0101026f136f0101026f136f0101026f016f129401190194016f016f1494016f016f1494016f016f1494016f016f1494016f016f1494016f026f1294026f0100016f1294016f01000100026f069404190694026f01000200036f0c94036f020004000e6f0400" + }, + { + "filename": "head-wizardhat", + "data": "0x00041b1404030008ec0c00020006ec014604ec0a00020001ec020002ec034604ec090002000146030002ec014606ec08000546020004ec014604ec070001000346040002ec014601ec014601ec014602ec06000100014601000146050002ec014606ec050009000aec0400080008ec014602ec0400080001ec014605ec034602ec0300080008ec014603ec0300080004ec014607ec030007000dec030006000eec0300050007ec050e02ec040003001254020001001654" + }, + { + "filename": "head-zebra", + "data": "0x00061b14060a0001010123090001000223035e0101012301010123010102230100035e040001000201035e0101012301010123010101230200035e040001000223055e0123035e0123045e040001000201065e0323055e040001000223065e0323055e040001000201075e0123065e040001000223075e0123065e040001000201075e0123065e0400010002230e5e0400010002010c5e0623010002230d5e012301010123010101230301025e0101012301010123010101230101035e062303230d5e052303010d5e0523" + } + ], + "glasses": [ + { + "filename": "glasses-hip-rose", + "data": "0x000b1710070300062001000620030001200201022301200100012002010223012004200201022303200201022301200420020102230320020102230120012002000120020102230120010001200201022301200300062001000620" + }, + { + "filename": "glasses-square-black-eyes-red", + "data": "0x000b17100703000623010006230300012302010264012301000123020102640123042302010264032302010264012301230200012302010264012301000123020102640123012302000123020102640123010001230201026401230300062301000623" + }, + { + "filename": "glasses-square-black-rgb", + "data": "0x000b171007030006230100062303000323016402230100032301640223102301230200012301650223015a01230100012301650223015a0123012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-black", + "data": "0x000b171007030006230100062303000123020103230100012302010323042302010523020103230123020001230201032301000123020103230123020001230201032301000123020103230300062301000623" + }, + { + "filename": "glasses-square-blue-med-saturated", + "data": "0x000b17100703000643010006430300014302010223014301000143020102230143044302010223034302010223014301430200014302010223014301000143020102230143014302000143020102230143010001430201022301430300064301000643" + }, + { + "filename": "glasses-square-blue", + "data": "0x000b17100703000607010006070300010702010223010701000107020102230107040702010223030702010223010701070200010702010223010701000107020102230107010702000107020102230107010001070201022301070300060701000607" + }, + { + "filename": "glasses-square-frog-green", + "data": "0x000b171007030006c0010006c0030001c00201022301c0010001c00201022301c004c00201022303c00201022301c001c0020001c00201022301c0010001c00201022301c001c0020001c00201022301c0010001c00201022301c0030006c0010006c0" + }, + { + "filename": "glasses-square-fullblack", + "data": "0x000b1710070300062301000623030004230101012301000423010101230723010106230101012301230200062301000623012302000623010006230300062301000623" + }, + { + "filename": "glasses-square-green-blue-multi", + "data": "0x000b1710070300060f0100068b0300010f02010223010f0100018b02010223018b034a010f02010223010f014a018b02010223018b018b0200010f02010223010f0100018b02010223018b018b0200010f02010223010f0100018b02010223018b0300060f0100068b" + }, + { + "filename": "glasses-square-grey-light", + "data": "0x000b171007030006c8010006c8030001c80201022301c8010001c80201022301c804c80201022303c80201022301c801c8020001c80201022301c8010001c80201022301c801c8020001c80201022301c8010001c80201022301c8030006c8010006c8" + }, + { + "filename": "glasses-square-guava", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-honey", + "data": "0x000b171007030006de010006de030001de0201022301de010001de0201022301de04de0201022303de0201022301de01de020001de0201022301de010001de0201022301de01de020001de0201022301de010001de0201022301de030006de010006de" + }, + { + "filename": "glasses-square-magenta", + "data": "0x000b17100703000609010006090300010902010223010901000109020102230109040902010223030902010223010901090200010902010223010901000109020102230109010902000109020102230109010001090201022301090300060901000609" + }, + { + "filename": "glasses-square-orange", + "data": "0x000b17100703000614010006140300011402010223011401000114020102230114041402010223031402010223011401140200011402010223011401000114020102230114011402000114020102230114010001140201022301140300061401000614" + }, + { + "filename": "glasses-square-pink-purple-multi", + "data": "0x000b171007030006200100069a030001200201022301200100019a02010223019a036e0120020102230120016e019a02010223019a019a020001200201022301200100019a02010223019a019a020001200201022301200100019a02010223019a030006200100069a" + }, + { + "filename": "glasses-square-red", + "data": "0x000b17100703000624010006240300012402010223012401000124020102230124042402010223032402010223012401240200012402010223012401000124020102230124012402000124020102230124010001240201022301240300062401000624" + }, + { + "filename": "glasses-square-smoke", + "data": "0x000b17100703000659010006590300015902660223015901000159026602230159045902660223035902660223015901590200015902660223015901000159026602230159015902000159026602230159010001590266022301590300065901000659" + }, + { + "filename": "glasses-square-teal", + "data": "0x000b1710070300061c0100061c0300011c02010223011c0100011c02010223011c041c02010223031c02010223011c011c0200011c02010223011c0100011c02010223011c011c0200011c02010223011c0100011c02010223011c0300061c0100061c" + }, + { + "filename": "glasses-square-watermelon", + "data": "0x000b17100703000637010006370300013702010223013701000137020102230137043702010223033702010223013701370200013702010223013701000137020102230137013702000137020102230137010001370201022301370300063701000637" + }, + { + "filename": "glasses-square-yellow-orange-multi", + "data": "0x000b17100703000626010006130300012602010223012601000113020102230113034201260201022301260142011302010223011301260200012602010223012601000113020102230113012602000126020102230126010001130201022301130300062601000613" + }, + { + "filename": "glasses-square-yellow-saturated", + "data": "0x000b17100703000628010006280300012802010223012801000128020102230128042802010223032802010223012801280200012802010223012801000128020102230128012802000128020102230128010001280201022301280300062801000628" + } + ] + } + } \ No newline at end of file