{"id":14128174,"url":"https://github.com/azoyan/geopattern","last_synced_at":"2025-08-03T22:32:30.048Z","repository":{"id":88510014,"uuid":"301398449","full_name":"azoyan/geopattern","owner":"azoyan","description":"Generate beautiful SVG patterns from a string on Lua (5.1 - 5.4 and LuaJIT)","archived":false,"fork":false,"pushed_at":"2020-10-07T16:49:42.000Z","size":1260,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-08-16T16:22:19.263Z","etag":null,"topics":["lib","library","lua","lua51","luajit"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/azoyan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-05T12:18:33.000Z","updated_at":"2024-04-15T10:01:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"7c7cc510-6f8d-4681-9503-823a10149aad","html_url":"https://github.com/azoyan/geopattern","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azoyan%2Fgeopattern","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azoyan%2Fgeopattern/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azoyan%2Fgeopattern/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azoyan%2Fgeopattern/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/azoyan","download_url":"https://codeload.github.com/azoyan/geopattern/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228571844,"owners_count":17938772,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["lib","library","lua","lua51","luajit"],"created_at":"2024-08-15T16:01:22.223Z","updated_at":"2024-12-07T06:30:57.366Z","avatar_url":"https://github.com/azoyan.png","language":"Lua","funding_links":[],"categories":["Lua"],"sub_categories":[],"readme":"# geopattern\n![geopattern example](https://github.com/azoyan/geopattern/blob/media/geopattern.gif)\n\n**Lua** implemenation of [geopatterns (Ruby library)][2] by [Jason Long][1].\n\nGenerate beautiful SVG patterns from a string.\n\n[1]: https://github.com/jasonlong/\n[2]: https://github.com/jasonlong/geopatterns/\n\n## Installation\n```shell\ngit clone https://github.com/azoyan/geopattern.git\n```\n\n## Usage\nCreate a new pattern by calling `GeoPattern:new()` with a string and a\ngenerator (the result of this string/generator pair is the above image).\n\n```Lua\nlocal GeoPattern = require \"geopattern\"\n\nlocal geo = GeoPattern:new(\"GitHub\")\nprint(geo:toSvg())\n```\n\n### API\n\n#### `GeoPattern:new(string, options)`\n\nReturns a newly-generated, tiling SVG Pattern.\n\n- `string` Will be hashed using the SHA1 algorithm, and the resulting hash will be used as the seed for generation.\n\n- `options.color` Specify an exact background color. This is a CSS hexadecimal color value.\n\n- `options.baseColor` Controls the relative background color of the generated image. The color is not identical to that used in the pattern because the hue is rotated by the generator. This is a CSS hexadecimal color value, which defaults to `#933c3c`.\n\n- `options.generator` Determines the pattern. [All of the original patterns](https://github.com/jasonlong/geo_pattern#available-patterns) are available in this port, and their names are camelCased.\n  \n  Available Patterns:\n  - `\"octogons\"`\n  - `\"overlappingCircles\"`\n  - `\"plusSigns\"`\n  - `\"xes'\"`\n  - `\"sineWaves\"`\n  - `\"hexagons\"`\n  - `\"overlappingRings\"`\n  - `\"plaid\"`\n  - `\"triangles\"`\n  - `\"squares\"`\n  - `\"concentricCircles\"`\n  - `\"diamonds\"`\n  - `\"tessellation\"`\n  - `\"nestedSquares'\"`\n  - `\"mosaicSquares\"`\n  - `\"chevrons\"`\n\n```Lua\nlocal GeoPattern = require \"geopattern\"\n\nlocal pattern1 = GeoPattern:new(\"GitHub\") -- without options \nlocal pattern3 = GeoPattern:new(\"GitHub\", { color = \"#00ffff\" })\nlocal pattern2 = GeoPattern:new(\"GitHub\", { generator = \"concentricCircles\" })\n\nlocal options = {\n    generator = \"concentricCircles\",\n    color = \"#00ffff\", \n    baseColor = \"#af39b3\"\n}\nlocal pattern4 = GeoPattern:new(\"GitHub\", options) -- with all available options\n```\n\n#### `GeoPattern:toSvg()`\nReturns the SVG string representing the pattern.\n\n```Lua\nlocal GeoPattern = require \"geopattern\"\n\nlocal pattern = GeoPattern:new(\"GitHub\")\nlocal svg = pattern:toSvg() -- string in SVG format\n\nprint(svg)\n```\n#### Output:\n```xml\n\u003csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"160\" height=\"160\"\u003e\u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\"  fill=\"rgb(69, 93, 137)\"/\u003e\u003crect x=\"0\" y=\"0\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.063333333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"26\" y=\"0\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.054666666666667\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"53\" y=\"0\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.054666666666667\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"80\" y=\"0\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.037333333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"106\" y=\"0\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.14133333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"133\" y=\"0\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.037333333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"0\" y=\"26\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.11533333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"26\" y=\"26\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.072\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"53\" y=\"26\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.054666666666667\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"80\" y=\"26\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.15\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"106\" y=\"26\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.10666666666667\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"133\" y=\"26\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.02\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"0\" y=\"53\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.098\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"26\" y=\"53\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.080666666666667\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"53\" y=\"53\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.072\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"80\" y=\"53\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.054666666666667\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"106\" y=\"53\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.11533333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"133\" y=\"53\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.098\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"0\" y=\"80\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.15\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"26\" y=\"80\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.063333333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"53\" y=\"80\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.098\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"80\" y=\"80\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.046\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"106\" y=\"80\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.089333333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"133\" y=\"80\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.072\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"0\" y=\"106\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.080666666666667\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"26\" y=\"106\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.14133333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"53\" y=\"106\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.063333333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"80\" y=\"106\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.098\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"106\" y=\"106\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.10666666666667\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"133\" y=\"106\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.098\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"0\" y=\"133\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.080666666666667\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"26\" y=\"133\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.037333333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"53\" y=\"133\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.098\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#222\"/\u003e\u003crect x=\"80\" y=\"133\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.037333333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"106\" y=\"133\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.124\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003crect x=\"133\" y=\"133\" width=\"26.666666666667\" height=\"26.666666666667\"  fill-opacity=\"0.089333333333333\" stroke=\"#000\" stroke-opacity=\"0.02\" fill=\"#ddd\"/\u003e\u003c/svg\u003e\n```\n\n#### `GeoPattern:toBase64()`\nReturns Base64-encoded string representing the pattern.\n\n```Lua\nlocal GeoPattern = require \"geopattern\"\n\nlocal pattern = GeoPattern:new(\"GitHub\")\nlocal base64 = pattern:toBae64() -- encode to Base64 string\n\nprint(base64)\n```\n#### Output:\n```base64\nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNjAiIGhlaWdodD0iMTYwIj48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiAgZmlsbD0icmdiKDY5LCA5MywgMTM3KSIvPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIyNi42NjY2NjY2NjY2NjciIGhlaWdodD0iMjYuNjY2NjY2NjY2NjY3IiAgZmlsbC1vcGFjaXR5PSIwLjA2MzMzMzMzMzMzMzMzMyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iIzIyMiIvPjxyZWN0IHg9IjI2IiB5PSIwIiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4wNTQ2NjY2NjY2NjY2NjciIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiNkZGQiLz48cmVjdCB4PSI1MyIgeT0iMCIgd2lkdGg9IjI2LjY2NjY2NjY2NjY2NyIgaGVpZ2h0PSIyNi42NjY2NjY2NjY2NjciICBmaWxsLW9wYWNpdHk9IjAuMDU0NjY2NjY2NjY2NjY3IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiBmaWxsPSIjZGRkIi8+PHJlY3QgeD0iODAiIHk9IjAiIHdpZHRoPSIyNi42NjY2NjY2NjY2NjciIGhlaWdodD0iMjYuNjY2NjY2NjY2NjY3IiAgZmlsbC1vcGFjaXR5PSIwLjAzNzMzMzMzMzMzMzMzMyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iI2RkZCIvPjxyZWN0IHg9IjEwNiIgeT0iMCIgd2lkdGg9IjI2LjY2NjY2NjY2NjY2NyIgaGVpZ2h0PSIyNi42NjY2NjY2NjY2NjciICBmaWxsLW9wYWNpdHk9IjAuMTQxMzMzMzMzMzMzMzMiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiNkZGQiLz48cmVjdCB4PSIxMzMiIHk9IjAiIHdpZHRoPSIyNi42NjY2NjY2NjY2NjciIGhlaWdodD0iMjYuNjY2NjY2NjY2NjY3IiAgZmlsbC1vcGFjaXR5PSIwLjAzNzMzMzMzMzMzMzMzMyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iI2RkZCIvPjxyZWN0IHg9IjAiIHk9IjI2IiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4xMTUzMzMzMzMzMzMzMyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iIzIyMiIvPjxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjI2LjY2NjY2NjY2NjY2NyIgaGVpZ2h0PSIyNi42NjY2NjY2NjY2NjciICBmaWxsLW9wYWNpdHk9IjAuMDcyIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiBmaWxsPSIjZGRkIi8+PHJlY3QgeD0iNTMiIHk9IjI2IiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4wNTQ2NjY2NjY2NjY2NjciIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiNkZGQiLz48cmVjdCB4PSI4MCIgeT0iMjYiIHdpZHRoPSIyNi42NjY2NjY2NjY2NjciIGhlaWdodD0iMjYuNjY2NjY2NjY2NjY3IiAgZmlsbC1vcGFjaXR5PSIwLjE1IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiBmaWxsPSIjMjIyIi8+PHJlY3QgeD0iMTA2IiB5PSIyNiIgd2lkdGg9IjI2LjY2NjY2NjY2NjY2NyIgaGVpZ2h0PSIyNi42NjY2NjY2NjY2NjciICBmaWxsLW9wYWNpdHk9IjAuMTA2NjY2NjY2NjY2NjciIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiNkZGQiLz48cmVjdCB4PSIxMzMiIHk9IjI2IiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4wMiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iI2RkZCIvPjxyZWN0IHg9IjAiIHk9IjUzIiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4wOTgiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiMyMjIiLz48cmVjdCB4PSIyNiIgeT0iNTMiIHdpZHRoPSIyNi42NjY2NjY2NjY2NjciIGhlaWdodD0iMjYuNjY2NjY2NjY2NjY3IiAgZmlsbC1vcGFjaXR5PSIwLjA4MDY2NjY2NjY2NjY2NyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iIzIyMiIvPjxyZWN0IHg9IjUzIiB5PSI1MyIgd2lkdGg9IjI2LjY2NjY2NjY2NjY2NyIgaGVpZ2h0PSIyNi42NjY2NjY2NjY2NjciICBmaWxsLW9wYWNpdHk9IjAuMDcyIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiBmaWxsPSIjZGRkIi8+PHJlY3QgeD0iODAiIHk9IjUzIiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4wNTQ2NjY2NjY2NjY2NjciIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiNkZGQiLz48cmVjdCB4PSIxMDYiIHk9IjUzIiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4xMTUzMzMzMzMzMzMzMyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iIzIyMiIvPjxyZWN0IHg9IjEzMyIgeT0iNTMiIHdpZHRoPSIyNi42NjY2NjY2NjY2NjciIGhlaWdodD0iMjYuNjY2NjY2NjY2NjY3IiAgZmlsbC1vcGFjaXR5PSIwLjA5OCIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iIzIyMiIvPjxyZWN0IHg9IjAiIHk9IjgwIiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4xNSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iIzIyMiIvPjxyZWN0IHg9IjI2IiB5PSI4MCIgd2lkdGg9IjI2LjY2NjY2NjY2NjY2NyIgaGVpZ2h0PSIyNi42NjY2NjY2NjY2NjciICBmaWxsLW9wYWNpdHk9IjAuMDYzMzMzMzMzMzMzMzMzIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiBmaWxsPSIjMjIyIi8+PHJlY3QgeD0iNTMiIHk9IjgwIiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4wOTgiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiMyMjIiLz48cmVjdCB4PSI4MCIgeT0iODAiIHdpZHRoPSIyNi42NjY2NjY2NjY2NjciIGhlaWdodD0iMjYuNjY2NjY2NjY2NjY3IiAgZmlsbC1vcGFjaXR5PSIwLjA0NiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iIzIyMiIvPjxyZWN0IHg9IjEwNiIgeT0iODAiIHdpZHRoPSIyNi42NjY2NjY2NjY2NjciIGhlaWdodD0iMjYuNjY2NjY2NjY2NjY3IiAgZmlsbC1vcGFjaXR5PSIwLjA4OTMzMzMzMzMzMzMzMyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iI2RkZCIvPjxyZWN0IHg9IjEzMyIgeT0iODAiIHdpZHRoPSIyNi42NjY2NjY2NjY2NjciIGhlaWdodD0iMjYuNjY2NjY2NjY2NjY3IiAgZmlsbC1vcGFjaXR5PSIwLjA3MiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iI2RkZCIvPjxyZWN0IHg9IjAiIHk9IjEwNiIgd2lkdGg9IjI2LjY2NjY2NjY2NjY2NyIgaGVpZ2h0PSIyNi42NjY2NjY2NjY2NjciICBmaWxsLW9wYWNpdHk9IjAuMDgwNjY2NjY2NjY2NjY3IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiBmaWxsPSIjMjIyIi8+PHJlY3QgeD0iMjYiIHk9IjEwNiIgd2lkdGg9IjI2LjY2NjY2NjY2NjY2NyIgaGVpZ2h0PSIyNi42NjY2NjY2NjY2NjciICBmaWxsLW9wYWNpdHk9IjAuMTQxMzMzMzMzMzMzMzMiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiNkZGQiLz48cmVjdCB4PSI1MyIgeT0iMTA2IiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4wNjMzMzMzMzMzMzMzMzMiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiMyMjIiLz48cmVjdCB4PSI4MCIgeT0iMTA2IiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4wOTgiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiMyMjIiLz48cmVjdCB4PSIxMDYiIHk9IjEwNiIgd2lkdGg9IjI2LjY2NjY2NjY2NjY2NyIgaGVpZ2h0PSIyNi42NjY2NjY2NjY2NjciICBmaWxsLW9wYWNpdHk9IjAuMTA2NjY2NjY2NjY2NjciIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiNkZGQiLz48cmVjdCB4PSIxMzMiIHk9IjEwNiIgd2lkdGg9IjI2LjY2NjY2NjY2NjY2NyIgaGVpZ2h0PSIyNi42NjY2NjY2NjY2NjciICBmaWxsLW9wYWNpdHk9IjAuMDk4IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiBmaWxsPSIjMjIyIi8+PHJlY3QgeD0iMCIgeT0iMTMzIiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4wODA2NjY2NjY2NjY2NjciIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiMyMjIiLz48cmVjdCB4PSIyNiIgeT0iMTMzIiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4wMzczMzMzMzMzMzMzMzMiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiNkZGQiLz48cmVjdCB4PSI1MyIgeT0iMTMzIiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4wOTgiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiMyMjIiLz48cmVjdCB4PSI4MCIgeT0iMTMzIiB3aWR0aD0iMjYuNjY2NjY2NjY2NjY3IiBoZWlnaHQ9IjI2LjY2NjY2NjY2NjY2NyIgIGZpbGwtb3BhY2l0eT0iMC4wMzczMzMzMzMzMzMzMzMiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLW9wYWNpdHk9IjAuMDIiIGZpbGw9IiNkZGQiLz48cmVjdCB4PSIxMDYiIHk9IjEzMyIgd2lkdGg9IjI2LjY2NjY2NjY2NjY2NyIgaGVpZ2h0PSIyNi42NjY2NjY2NjY2NjciICBmaWxsLW9wYWNpdHk9IjAuMTI0IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwLjAyIiBmaWxsPSIjZGRkIi8+PHJlY3QgeD0iMTMzIiB5PSIxMzMiIHdpZHRoPSIyNi42NjY2NjY2NjY2NjciIGhlaWdodD0iMjYuNjY2NjY2NjY2NjY3IiAgZmlsbC1vcGFjaXR5PSIwLjA4OTMzMzMzMzMzMzMzMyIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMC4wMiIgZmlsbD0iI2RkZCIvPjwvc3ZnPg==\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazoyan%2Fgeopattern","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fazoyan%2Fgeopattern","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazoyan%2Fgeopattern/lists"}