geo_pattern 1.3.2 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +30 -0
  3. data/.gitignore +1 -0
  4. data/.simplecov +26 -0
  5. data/Gemfile +17 -17
  6. data/README.md +154 -29
  7. data/Rakefile +72 -13
  8. data/fixtures/generated_patterns/chevrons.svg +1 -0
  9. data/fixtures/generated_patterns/concentric_circles.svg +1 -0
  10. data/fixtures/generated_patterns/diamonds.svg +1 -0
  11. data/fixtures/generated_patterns/diamonds_with_base_color.svg +1 -0
  12. data/fixtures/generated_patterns/diamonds_with_color.svg +1 -0
  13. data/fixtures/generated_patterns/hexagons.svg +1 -0
  14. data/fixtures/generated_patterns/mosaic_squares.svg +1 -0
  15. data/fixtures/generated_patterns/nested_squares.svg +1 -0
  16. data/fixtures/generated_patterns/octagons.svg +1 -0
  17. data/fixtures/generated_patterns/overlapping_circles.svg +1 -0
  18. data/fixtures/generated_patterns/overlapping_rings.svg +1 -0
  19. data/fixtures/generated_patterns/plaid.svg +1 -0
  20. data/fixtures/generated_patterns/plus_signs.svg +1 -0
  21. data/fixtures/generated_patterns/sine_waves.svg +1 -0
  22. data/fixtures/generated_patterns/squares.svg +1 -0
  23. data/fixtures/generated_patterns/tessellation.svg +1 -0
  24. data/fixtures/generated_patterns/triangles.svg +1 -0
  25. data/fixtures/generated_patterns/xes.svg +1 -0
  26. data/geo_pattern.gemspec +19 -17
  27. data/lib/geo_pattern/background.rb +27 -0
  28. data/lib/geo_pattern/background_generators/solid_generator.rb +54 -0
  29. data/lib/geo_pattern/color.rb +27 -0
  30. data/lib/geo_pattern/color_generators/base_color_generator.rb +57 -0
  31. data/lib/geo_pattern/color_generators/simple_generator.rb +29 -0
  32. data/lib/geo_pattern/color_preset.rb +32 -0
  33. data/lib/geo_pattern/errors.rb +9 -0
  34. data/lib/geo_pattern/geo_pattern_task.rb +61 -0
  35. data/lib/geo_pattern/helpers.rb +50 -1
  36. data/lib/geo_pattern/pattern.rb +86 -0
  37. data/lib/geo_pattern/pattern_generator.rb +34 -81
  38. data/lib/geo_pattern/pattern_helpers.rb +34 -2
  39. data/lib/geo_pattern/pattern_preset.rb +25 -0
  40. data/lib/geo_pattern/pattern_sieve.rb +38 -0
  41. data/lib/geo_pattern/pattern_store.rb +65 -0
  42. data/lib/geo_pattern/pattern_validator.rb +29 -0
  43. data/lib/geo_pattern/rake_task.rb +112 -0
  44. data/lib/geo_pattern/roles/comparable_metadata.rb +37 -0
  45. data/lib/geo_pattern/roles/named_generator.rb +15 -0
  46. data/lib/geo_pattern/seed.rb +23 -0
  47. data/lib/geo_pattern/structure.rb +27 -0
  48. data/lib/geo_pattern/structure_generators/base_generator.rb +88 -0
  49. data/lib/geo_pattern/structure_generators/chevrons_generator.rb +57 -0
  50. data/lib/geo_pattern/structure_generators/concentric_circles_generator.rb +58 -0
  51. data/lib/geo_pattern/structure_generators/diamonds_generator.rb +72 -0
  52. data/lib/geo_pattern/structure_generators/hexagons_generator.rb +69 -0
  53. data/lib/geo_pattern/structure_generators/mosaic_squares_generator.rb +85 -0
  54. data/lib/geo_pattern/structure_generators/nested_squares_generator.rb +62 -0
  55. data/lib/geo_pattern/structure_generators/octagons_generator.rb +45 -0
  56. data/lib/geo_pattern/structure_generators/overlapping_circles_generator.rb +57 -0
  57. data/lib/geo_pattern/structure_generators/overlapping_rings_generator.rb +57 -0
  58. data/lib/geo_pattern/structure_generators/plaid_generator.rb +55 -0
  59. data/lib/geo_pattern/structure_generators/plus_signs_generator.rb +68 -0
  60. data/lib/geo_pattern/structure_generators/sine_waves_generator.rb +45 -0
  61. data/lib/geo_pattern/structure_generators/squares_generator.rb +37 -0
  62. data/lib/geo_pattern/structure_generators/tessellation_generator.rb +105 -0
  63. data/lib/geo_pattern/structure_generators/triangles_generator.rb +64 -0
  64. data/lib/geo_pattern/structure_generators/xes_generator.rb +74 -0
  65. data/lib/geo_pattern/svg_image.rb +103 -0
  66. data/lib/geo_pattern/version.rb +3 -1
  67. data/lib/geo_pattern.rb +54 -30
  68. data/script/bootstrap +30 -0
  69. data/script/console +9 -0
  70. data/script/test +21 -0
  71. data/spec/background_generators/solid_generator_spec.rb +52 -0
  72. data/spec/background_spec.rb +27 -0
  73. data/spec/color_generators/base_color_generator_spec.rb +33 -0
  74. data/spec/color_generators/simple_generator_spec.rb +14 -0
  75. data/spec/color_preset_spec.rb +55 -0
  76. data/spec/color_spec.rb +17 -0
  77. data/spec/geo_pattern_spec.rb +98 -26
  78. data/spec/helpers_spec.rb +67 -0
  79. data/spec/pattern_preset_spec.rb +43 -0
  80. data/spec/pattern_sieve_spec.rb +68 -0
  81. data/spec/pattern_spec.rb +74 -0
  82. data/spec/pattern_store_spec.rb +49 -0
  83. data/spec/pattern_validator_spec.rb +30 -0
  84. data/spec/seed_spec.rb +16 -0
  85. data/spec/spec_helper.rb +9 -13
  86. data/spec/structure_generators/chevrons_generator_spec.rb +7 -0
  87. data/spec/structure_generators/concentric_circles_generator_spec.rb +7 -0
  88. data/spec/structure_generators/diamonds_generator_spec.rb +7 -0
  89. data/spec/structure_generators/hexagons_generator_spec.rb +7 -0
  90. data/spec/structure_generators/mosaic_squares_generator_spec.rb +7 -0
  91. data/spec/structure_generators/nested_squares_generator_spec.rb +7 -0
  92. data/spec/structure_generators/octagons_generator_spec.rb +7 -0
  93. data/spec/structure_generators/overlapping_circles_generator_spec.rb +7 -0
  94. data/spec/structure_generators/overlapping_rings_generator_spec.rb +7 -0
  95. data/spec/structure_generators/plaid_generator_spec.rb +7 -0
  96. data/spec/structure_generators/plus_signs_generator_spec.rb +7 -0
  97. data/spec/structure_generators/sine_waves_generator_spec.rb +7 -0
  98. data/spec/structure_generators/squares_generator_spec.rb +7 -0
  99. data/spec/structure_generators/tessellation_generator_spec.rb +7 -0
  100. data/spec/structure_generators/triangles_generator_spec.rb +7 -0
  101. data/spec/structure_generators/xes_generator_spec.rb +7 -0
  102. data/spec/structure_spec.rb +40 -0
  103. data/spec/support/aruba.rb +6 -6
  104. data/spec/support/helpers/fixtures.rb +14 -0
  105. data/spec/support/kernel.rb +46 -0
  106. data/spec/support/matchers/image.rb +19 -0
  107. data/spec/support/matchers/name.rb +17 -0
  108. data/spec/support/rspec.rb +4 -2
  109. data/spec/support/shared_examples/generator.rb +48 -0
  110. data/spec/support/shared_examples/pattern.rb +33 -0
  111. data/spec/support/shared_examples/pattern_name.rb +9 -0
  112. data/spec/support/shared_examples/structure.rb +50 -0
  113. data/spec/support/string.rb +3 -2
  114. data/spec/svg_spec.rb +8 -6
  115. metadata +105 -37
  116. data/.rubocop.yml +0 -13
  117. data/lib/geo_pattern/pattern/base_pattern.rb +0 -47
  118. data/lib/geo_pattern/pattern/chevron_pattern.rb +0 -45
  119. data/lib/geo_pattern/pattern/concentric_circles_pattern.rb +0 -47
  120. data/lib/geo_pattern/pattern/diamond_pattern.rb +0 -56
  121. data/lib/geo_pattern/pattern/hexagon_pattern.rb +0 -57
  122. data/lib/geo_pattern/pattern/mosaic_squares_pattern.rb +0 -76
  123. data/lib/geo_pattern/pattern/nested_squares_pattern.rb +0 -51
  124. data/lib/geo_pattern/pattern/octagon_pattern.rb +0 -35
  125. data/lib/geo_pattern/pattern/overlapping_circles_pattern.rb +0 -46
  126. data/lib/geo_pattern/pattern/overlapping_rings_pattern.rb +0 -46
  127. data/lib/geo_pattern/pattern/plaid_pattern.rb +0 -49
  128. data/lib/geo_pattern/pattern/plus_sign_pattern.rb +0 -53
  129. data/lib/geo_pattern/pattern/sine_wave_pattern.rb +0 -36
  130. data/lib/geo_pattern/pattern/square_pattern.rb +0 -27
  131. data/lib/geo_pattern/pattern/tessellation_pattern.rb +0 -93
  132. data/lib/geo_pattern/pattern/triangle_pattern.rb +0 -51
  133. data/lib/geo_pattern/pattern/xes_pattern.rb +0 -58
  134. data/lib/geo_pattern/svg.rb +0 -77
  135. data/spec/support/helpers.rb +0 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 81c3c62556904d41859cbdc5f24b309d27643d61
4
- data.tar.gz: 13208f9b302c0294458d5c6d33ed41c5ea6bddf2
2
+ SHA256:
3
+ metadata.gz: 673c02d78cab6a2a0d4739661a9a4e93845fd6c3dafff82f36f36e15e759e032
4
+ data.tar.gz: da40879b6a7e41a039e00741d5b48e4be51a584f339bc84572bf5d47cb1b44cc
5
5
  SHA512:
6
- metadata.gz: 429e50e9f25823d253761aae3b9fedf5a113271bd1cbeb495a32b4f7d828af56a7c9a8308553e85e50f93266d3e2c19f90fb93a72504c096d029aec6c962f3d2
7
- data.tar.gz: 77b6992af30dba44823e148850fa32e7de5b0b04454c091818d4ce99714a8bb4e07b89f148d47ae06903389472063b23e0b94b455e6cca194991c6a44dbc3eb9
6
+ metadata.gz: 87e2bac49b72b2dbb068ab84abdbdbf6a2240fe13f6898de4be9fc72c40d1239654cee649718d8620598257bdaa1cc24366054ed4f320346ddf68b9b11c8a66b
7
+ data.tar.gz: f69912aeb10d51c3110edd472b8a02dee9653e2b3cb0b8127d817a45a9d878e7ade1b85922a3aaf0a8ef8568912e57661f84b050220171632665fe784b3420a5
@@ -0,0 +1,30 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ test:
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ # Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
15
+ ruby: [2.6, 2.7, '3.0', 3.1, 3.2, head]
16
+
17
+ runs-on: ubuntu-latest
18
+
19
+ steps:
20
+ - uses: actions/checkout@v2
21
+
22
+ - name: Set up Ruby
23
+ uses: ruby/setup-ruby@v1
24
+ with:
25
+ ruby-version: ${{ matrix.ruby }}
26
+ rubygems: latest
27
+ bundler-cache: true
28
+
29
+ - name: Run tests
30
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -16,3 +16,4 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  test.rb
19
+ .ruby-version
data/.simplecov ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ class ExcludeRegexFilter < SimpleCov::Filter
5
+ def matches?(source_file)
6
+ source_file.filename !~ filter_argument
7
+ end
8
+ end
9
+
10
+ class IncludeRegexFilter < SimpleCov::Filter
11
+ def matches?(source_file)
12
+ source_file.filename =~ filter_argument
13
+ end
14
+ end
15
+
16
+ SimpleCov.start do
17
+ add_filter "/features/"
18
+ add_filter "/fixtures/"
19
+ add_filter "/spec/"
20
+ add_filter "/tmp"
21
+ add_filter "/vendor"
22
+
23
+ generator_filter = %r{/background_generators/|/structure_generators/}
24
+ add_group "lib", ExcludeRegexFilter.new(generator_filter)
25
+ add_group "generators", IncludeRegexFilter.new(generator_filter)
26
+ end
data/Gemfile CHANGED
@@ -1,24 +1,24 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
2
4
 
3
5
  # Specify your gem's dependencies in geopatterns.gemspec
4
6
  gemspec
5
7
 
6
8
  group :development, :test do
7
- gem 'rspec'
8
- gem 'aruba'
9
- gem 'rake'
10
- gem 'rubocop'
11
- gem 'simplecov'
12
- gem 'fuubar'
13
- gem 'inch'
14
- gem 'activesupport'
15
- gem 'pry'
9
+ gem "activesupport", "~> 6"
10
+ gem "aruba"
11
+ gem "fuubar"
12
+ gem "inch"
13
+ gem "pry"
14
+ gem "pry-rescue"
15
+ gem "pry-stack_explorer"
16
+ gem "rake"
17
+ gem "rspec"
18
+ gem "standard"
19
+ gem "simplecov"
16
20
 
17
- if RUBY_VERSION >= "2"
18
- gem 'byebug'
19
- gem 'pry-byebug'
20
- else
21
- gem 'debugger'
22
- gem 'pry-debugger'
23
- end
21
+ gem "byebug"
22
+ gem "irb"
23
+ gem "pry-byebug"
24
24
  end
data/README.md CHANGED
@@ -1,16 +1,36 @@
1
- [![](http://img.shields.io/gem/v/geo_pattern.svg?style=flat)](http://rubygems.org/gems/geo_pattern)
2
- [![](http://img.shields.io/gem/dt/geo_pattern.svg?style=flat)](http://rubygems.org/gems/geo_pattern)
1
+ ### This project is largely unmaintained now.
2
+
3
+ #### I'll happily accept PRs to keep things in working order, but I no longer plan to make updates.
4
+
5
+ ----
6
+
7
+ [![](https://img.shields.io/gem/v/geo_pattern.svg?style=flat)](http://rubygems.org/gems/geo_pattern)
8
+ ![Ruby](https://github.com/jasonlong/geo_pattern/workflows/Ruby/badge.svg)
9
+ [![](https://img.shields.io/gem/dt/geo_pattern.svg?style=flat)](http://rubygems.org/gems/geo_pattern)
10
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://github.com/testdouble/standard)
3
11
 
4
12
  # GeoPattern
5
13
 
6
- Generate beautiful tiling SVG patterns from a string. The string is converted into a SHA and a color and pattern are determined based on the values in the hash. The color is determined by shifting the hue and saturation from a default (or passed in) base color. One of 16 patterns is used (or you can specify one) and the sizing of the pattern elements is also determined by the hash values.
14
+ Generate beautiful tiling SVG patterns from a string. The string is converted
15
+ into a SHA and a color and pattern are determined based on the values in the
16
+ hash. The color is determined by shifting the hue and saturation from a default
17
+ (or passed in) base color. One of 16 patterns is used (or you can specify one)
18
+ and the sizing of the pattern elements is also determined by the hash values.
7
19
 
8
- You can use the generated pattern as the `background-image` for a container. Using the `base64` representation of the pattern still results in SVG rendering, so it looks great on retina displays.
20
+ You can use the generated pattern as the `background-image` for a container.
21
+ Using the `base64` representation of the pattern still results in SVG
22
+ rendering, so it looks great on retina displays.
9
23
 
10
- See the [GitHub Guides](http://guides.github.com) site and the [Explore section of GitHub](https://github.com/explore) are examples of this library in action. Brandon Mills has put together an awesome [live preview page](http://btmills.github.io/geopattern/geopattern.html) that's built on his Javascript port.
24
+ See the [GitHub Guides](https://guides.github.com/) site and the [Explore section
25
+ of GitHub](https://github.com/explore) are examples of this library in action.
26
+ Brandon Mills has put together an awesome [live preview
27
+ page](http://btmills.github.io/geopattern/geopattern.html) that's built on his
28
+ Javascript port.
11
29
 
12
30
  ## Installation
13
31
 
32
+ **Note:** as of version `1.4.0`, Ruby version 2 or greater is required.
33
+
14
34
  Add this line to your application's Gemfile:
15
35
 
16
36
  gem 'geo_pattern'
@@ -46,115 +66,220 @@ pattern = GeoPattern.generate('Mastering Markdown', color: '#fc0')
46
66
  To use a specific [pattern generator](#available-patterns):
47
67
 
48
68
  ```ruby
49
- pattern = GeoPattern.generate('Mastering Markdown', generator: GeoPattern::SineWavePattern)
69
+ pattern = GeoPattern.generate('Mastering Markdown', patterns: :sine_waves)
70
+ ```
71
+
72
+ To use a subset of the [available patterns](#available-patterns):
73
+
74
+ ```ruby
75
+ pattern = GeoPattern.generate('Mastering Markdown', patterns: [:sine_waves, :xes])
50
76
  ```
51
77
 
52
78
  Get the SVG string:
53
79
 
54
80
  ```ruby
55
- puts pattern.svg_string
81
+ puts pattern.to_svg
56
82
  # => <svg xmlns="http://www.w3.org/2000/svg" ...
57
83
  ```
58
84
 
59
85
  Get the Base64 encoded string:
60
86
 
61
87
  ```ruby
62
- puts pattern.base64_string
88
+ puts pattern.to_base64
63
89
  # => PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC...
64
90
  ```
65
91
 
66
92
  You can then use this string to set the background:
67
93
 
68
94
  ```html
69
- <div style="background-image: <%= pattern.uri_image %>"></div>
95
+ <div style="background-image: <%= pattern.to_data_uri %>"></div>
70
96
  ```
71
97
 
72
98
  ## Available patterns
73
99
 
74
- *Note: As of version `1.3.0`, string references (e.g. `overlapping_circles`) are deprecated in favor of class references (e.g. `GeoPattern::OverlappingCirclesPattern`).*
100
+ *Note: As of version `1.3.0`, string references (e.g. `overlapping_circles`)
101
+ are deprecated in favor of symbol references (e.g. `:overlapping_circles`).*
102
+
103
+ ### :chevrons
104
+
105
+ ![](http://jasonlong.github.io/geo_pattern/examples/chevrons.png)
75
106
 
76
- ### GeoPattern::OctagonPattern
107
+
108
+ ### :octagons
77
109
 
78
110
  ![](http://jasonlong.github.io/geo_pattern/examples/octogons.png)
79
111
 
80
- ### GeoPattern::OverlappingCirclesPattern
112
+ ### :overlapping_circles
81
113
 
82
114
  ![](http://jasonlong.github.io/geo_pattern/examples/overlapping_circles.png)
83
115
 
84
- ### GeoPattern::PlusSignPattern
116
+ ### :plus_signs
85
117
 
86
118
  ![](http://jasonlong.github.io/geo_pattern/examples/plus_signs.png)
87
119
 
88
- ### GeoPattern::XesPattern
120
+ ### :xes
89
121
 
90
122
  ![](http://jasonlong.github.io/geo_pattern/examples/xes.png)
91
123
 
92
- ### GeoPattern::SineWavePattern
124
+ ### :sine_waves
93
125
 
94
126
  ![](http://jasonlong.github.io/geo_pattern/examples/sine_waves.png)
95
127
 
96
- ### GeoPattern::HexagonPattern
128
+ ### :hexagons
97
129
 
98
130
  ![](http://jasonlong.github.io/geo_pattern/examples/hexagons.png)
99
131
 
100
- ### GeoPattern::OverlappingCirclesPattern
132
+ ### :overlapping_rings
101
133
 
102
134
  ![](http://jasonlong.github.io/geo_pattern/examples/overlapping_rings.png)
103
135
 
104
- ### GeoPattern::PlaidPattern
136
+ ### :plaid
105
137
 
106
138
  ![](http://jasonlong.github.io/geo_pattern/examples/plaid.png)
107
139
 
108
- ### GeoPattern::TrianglePattern
140
+ ### :triangles
109
141
 
110
142
  ![](http://jasonlong.github.io/geo_pattern/examples/triangles.png)
111
143
 
112
- ### GeoPattern::SquarePattern
144
+ ### :squares
113
145
 
114
146
  ![](http://jasonlong.github.io/geo_pattern/examples/squares.png)
115
147
 
116
- ### GeoPattern::NestedSquaresPattern
148
+ ### :nested_squares
117
149
 
118
150
  ![](http://jasonlong.github.io/geo_pattern/examples/nested_squares.png)
119
151
 
120
- ### GeoPattern::MosaicSquaresPattern
152
+ ### :mosaic_squares
121
153
 
122
154
  ![](http://jasonlong.github.io/geo_pattern/examples/mosaic_squares.png)
123
155
 
124
- ### GeoPattern::ConcentricCirclesPattern
156
+ ### :concentric_circles
125
157
 
126
158
  ![](http://jasonlong.github.io/geo_pattern/examples/concentric_circles.png)
127
159
 
128
- ### GeoPattern::DiamondPattern
160
+ ### :diamonds
129
161
 
130
162
  ![](http://jasonlong.github.io/geo_pattern/examples/diamonds.png)
131
163
 
132
- ### GeoPattern::TessellationPattern
164
+ ### :tessellation
133
165
 
134
166
  ![](http://jasonlong.github.io/geo_pattern/examples/tessellation.png)
135
167
 
136
168
 
169
+ ## Inspection of pattern
170
+
171
+ If you want to get some more information about a pattern, please use the
172
+ following methods.
173
+
174
+ ```ruby
175
+ pattern = GeoPattern.generate('Mastering Markdown', patterns: [:sine_waves, :xes])
176
+
177
+ # The color of the background in html notation
178
+ pattern.background.color.to_html
179
+
180
+ # The color of the background in svg notation
181
+ pattern.background.color.to_svg
182
+
183
+
184
+ # The input colors
185
+ pattern.background.preset.color
186
+ pattern.background.preset.base_color
187
+
188
+ # The generator
189
+ pattern.background.generator
190
+ ```
191
+
192
+ To get more information about the structure of the pattern, please use the following methods:
193
+
194
+ ```ruby
195
+ pattern = GeoPattern.generate('Mastering Markdown', patterns: [:sine_waves, :xes])
196
+
197
+ # The name of the structure
198
+ pattern.structure.name
199
+
200
+ # The generator of the structure
201
+ pattern.structure.generator
202
+ ```
203
+
204
+ ## Rake Support
205
+
206
+ ```ruby
207
+ string = 'Mastering markdown'
208
+
209
+ require 'geo_pattern/geo_pattern_task'
210
+
211
+ GeoPattern::GeoPatternTask.new(
212
+ name: 'generate',
213
+ description: 'Generate patterns to make them available as fixtures',
214
+ data: {
215
+ 'fixtures/generated_patterns/diamonds_with_color.svg' => { input: string, patterns: [:diamonds], color: '#00ff00' },
216
+ 'fixtures/generated_patterns/diamonds_with_base_color.svg' => { input: string, patterns: [:diamonds], base_color: '#00ff00' }
217
+ }
218
+ )
219
+ ```
220
+
221
+ ## Developing
222
+
223
+ ### Generate Fixtures
224
+
225
+ ```ruby
226
+ rake fixtures:generate
227
+ ```
228
+
229
+ ### Run tests
230
+
231
+ ```ruby
232
+ rake test
233
+ ```
234
+
137
235
  ## Contributing
138
236
 
139
- 1. Fork it ( http://github.com/jasonlong/geo_pattern/fork )
237
+ 1. Fork it ( https://github.com/jasonlong/geo_pattern/fork )
140
238
  2. Create your feature branch (`git checkout -b my-new-feature`)
141
239
  3. Commit your changes (`git commit -am 'Add some feature'`)
142
240
  4. Push to the branch (`git push origin my-new-feature`)
143
241
  5. Create new Pull Request
144
242
 
145
- ## Ports
243
+ ## Development
244
+
245
+ Prefix rspec-commandline with `RSPEC_PROFILE=1` to output the ten slowest
246
+ examples of the test suite.
247
+
248
+ ```bash
249
+ RSPEC_PROFILE=1 bundle exec rspec
250
+ ```
251
+
252
+ ## Ports & related projects
146
253
 
147
254
  JavaScript port by Brandon Mills:
148
- https://github.com/btmills/geopatterns-js
255
+ https://github.com/btmills/geopattern
256
+
257
+ TypeScript port by MooYeol Lee:
258
+ https://github.com/mooyoul/geo-pattern
149
259
 
150
260
  Python port by Bryan Veloso:
151
261
  https://github.com/bryanveloso/geopatterns
152
262
 
263
+ Elixir port by Anne Johnson:
264
+ https://github.com/annejohnson/geo_pattern
265
+
153
266
  PHP port by Anand Capur:
154
267
  https://github.com/redeyeventures/geopattern-php
155
268
 
156
269
  Go port by Pravendra Singh:
157
- https://github.com/pravj/geo_pattern
270
+ https://github.com/pravj/geopattern
158
271
 
159
272
  CoffeeScript port by Aleks (muchweb):
160
273
  https://github.com/muchweb/geo-pattern-coffee
274
+
275
+ Cocoa port by Matt Faluotico:
276
+ https://github.com/mattfxyz/GeoPattern-Cocoa
277
+
278
+ Middleman extension by @maxmeyer:
279
+ https://github.com/fedux-org/middleman-geo_pattern
280
+
281
+ Dart(Flutter) port by @suyash:
282
+ https://github.com/suyash/geopattern
283
+
284
+ Lua port by Ivan Azoyan:
285
+ https://github.com/azoyan/geopattern
data/Rakefile CHANGED
@@ -1,23 +1,82 @@
1
- require 'rubocop/rake_task'
2
- require 'inch/rake'
3
- require 'rspec/core/rake_task'
1
+ # frozen_string_literal: true
4
2
 
5
- desc 'Default task running Tests'
6
- task default: :test
3
+ $LOAD_PATH.unshift File.expand_path("lib", __dir__)
7
4
 
8
- desc 'Run test suite'
9
- task test: 'test:rspec'
10
- # task test: %w(test:rspec test:rubocop)
5
+ desc "Default task running Tests"
6
+ task default: :test
11
7
 
8
+ desc "Run test suite"
9
+ task test: ["test:standard", "test:rspec"]
10
+ task "test:ci" => ["bootstrap:gem_requirements", :test]
12
11
  namespace :test do
12
+ task :rspec do
13
+ sh "rspec"
14
+ end
13
15
 
14
- RSpec::Core::RakeTask.new(:rspec)
16
+ task "inch" do
17
+ sh "inch"
18
+ end
15
19
 
16
- RuboCop::RakeTask.new
17
-
18
- Inch::Rake::Suggest.new
20
+ require "standard/rake"
19
21
  end
20
22
 
21
23
  namespace :gem do
22
- require 'bundler/gem_tasks'
24
+ require "bundler/gem_tasks"
25
+ end
26
+
27
+ unless ENV.key?("CI")
28
+ require "geo_pattern/geo_pattern_task"
29
+
30
+ namespace :fixtures do
31
+ string = "Mastering Markdown"
32
+
33
+ GeoPattern::GeoPatternTask.new(
34
+ name: "generate",
35
+ description: "Generate patterns to make them available as fixtures",
36
+ data: {
37
+ "fixtures/generated_patterns/chevrons.svg" => {input: string, patterns: [:chevrons]},
38
+ "fixtures/generated_patterns/concentric_circles.svg" => {input: string, patterns: [:concentric_circles]},
39
+ "fixtures/generated_patterns/diamonds.svg" => {input: string, patterns: [:diamonds]},
40
+ "fixtures/generated_patterns/hexagons.svg" => {input: string, patterns: [:hexagons]},
41
+ "fixtures/generated_patterns/mosaic_squares.svg" => {input: string, patterns: [:mosaic_squares]},
42
+ "fixtures/generated_patterns/nested_squares.svg" => {input: string, patterns: [:nested_squares]},
43
+ "fixtures/generated_patterns/octagons.svg" => {input: string, patterns: [:octagons]},
44
+ "fixtures/generated_patterns/overlapping_circles.svg" => {input: string, patterns: [:overlapping_circles]},
45
+ "fixtures/generated_patterns/overlapping_rings.svg" => {input: string, patterns: [:overlapping_rings]},
46
+ "fixtures/generated_patterns/plaid.svg" => {input: string, patterns: [:plaid]},
47
+ "fixtures/generated_patterns/plus_signs.svg" => {input: string, patterns: [:plus_signs]},
48
+ "fixtures/generated_patterns/sine_waves.svg" => {input: string, patterns: [:sine_waves]},
49
+ "fixtures/generated_patterns/squares.svg" => {input: string, patterns: [:squares]},
50
+ "fixtures/generated_patterns/tessellation.svg" => {input: string, patterns: [:tessellation]},
51
+ "fixtures/generated_patterns/triangles.svg" => {input: string, patterns: [:triangles]},
52
+ "fixtures/generated_patterns/xes.svg" => {input: string, patterns: [:xes]},
53
+ "fixtures/generated_patterns/diamonds_with_color.svg" => {input: string, patterns: [:diamonds], color: "#00ff00"},
54
+ "fixtures/generated_patterns/diamonds_with_base_color.svg" => {input: string, patterns: [:diamonds], base_color: "#00ff00"}
55
+ }
56
+ )
57
+ end
58
+ end
59
+
60
+ desc "Bootstrap project"
61
+ task bootstrap: %w[bootstrap:bundler]
62
+
63
+ desc "Bootstrap project for ci"
64
+ task "bootstrap:ci" do
65
+ Rake::Task["bootstrap"].invoke
66
+ end
67
+
68
+ namespace :bootstrap do
69
+ desc "Bootstrap bundler"
70
+ task :bundler do |t|
71
+ puts t.comment
72
+ sh "gem install bundler"
73
+ sh "bundle install"
74
+ end
75
+
76
+ desc "Require gems"
77
+ task :gem_requirements do |t|
78
+ puts t.comment
79
+ require "bundler"
80
+ Bundler.require
81
+ end
23
82
  end
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="459" height="303"><rect x="0" y="0" width="100%" height="100%" fill="rgb(63, 144, 77)" /><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.14133333333333334" stroke-width="1" transform="translate(0.0,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.14133333333333334" stroke-width="1" transform="translate(0.0,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.08933333333333333" stroke-width="1" transform="translate(76.66666666666666,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.08933333333333333" stroke-width="1" transform="translate(76.66666666666666,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.13266666666666665" stroke-width="1" transform="translate(153.33333333333331,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.13266666666666665" stroke-width="1" transform="translate(153.33333333333331,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.15" stroke-width="1" transform="translate(229.99999999999997,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.15" stroke-width="1" transform="translate(229.99999999999997,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.098" stroke-width="1" transform="translate(306.66666666666663,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.098" stroke-width="1" transform="translate(306.66666666666663,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(383.33333333333326,-38.33333333333333)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(383.33333333333326,265.26666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(0.0,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.08066666666666666" stroke-width="1" transform="translate(76.66666666666666,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(153.33333333333331,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.08066666666666666" stroke-width="1" transform="translate(229.99999999999997,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.15" stroke-width="1" transform="translate(306.66666666666663,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.11533333333333334" stroke-width="1" transform="translate(383.33333333333326,12.266666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.13266666666666665" stroke-width="1" transform="translate(0.0,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.046" stroke-width="1" transform="translate(76.66666666666666,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.10666666666666667" stroke-width="1" transform="translate(153.33333333333331,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.046" stroke-width="1" transform="translate(229.99999999999997,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.08933333333333333" stroke-width="1" transform="translate(306.66666666666663,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.046" stroke-width="1" transform="translate(383.33333333333326,62.86666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.12400000000000001" stroke-width="1" transform="translate(0.0,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.06333333333333334" stroke-width="1" transform="translate(76.66666666666666,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.046" stroke-width="1" transform="translate(153.33333333333331,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.03733333333333333" stroke-width="1" transform="translate(229.99999999999997,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.028666666666666667" stroke-width="1" transform="translate(306.66666666666663,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(383.33333333333326,113.46666666666665)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.08066666666666666" stroke-width="1" transform="translate(0.0,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.098" stroke-width="1" transform="translate(76.66666666666666,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.098" stroke-width="1" transform="translate(153.33333333333331,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.11533333333333334" stroke-width="1" transform="translate(229.99999999999997,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.14133333333333334" stroke-width="1" transform="translate(306.66666666666663,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.11533333333333334" stroke-width="1" transform="translate(383.33333333333326,164.06666666666666)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.05466666666666667" stroke-width="1" transform="translate(0.0,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.11533333333333334" stroke-width="1" transform="translate(76.66666666666666,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.05466666666666667" stroke-width="1" transform="translate(153.33333333333331,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#222" fill-opacity="0.06333333333333334" stroke-width="1" transform="translate(229.99999999999997,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.07200000000000001" stroke-width="1" transform="translate(306.66666666666663,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g><g stroke="#000" stroke-opacity="0.02" fill="#ddd" fill-opacity="0.05466666666666667" stroke-width="1" transform="translate(383.33333333333326,214.66666666666663)" ><polyline points="0,0,38.33333333333333,26.066666666666663,38.33333333333333,76.66666666666666,0,50.599999999999994,0,0" /><polyline points="38.33333333333333,26.066666666666663,76.66666666666666,0,76.66666666666666,50.599999999999994,38.33333333333333,76.66666666666666,38.33333333333333,26.066666666666663" /></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="408" height="408"><rect x="0" y="0" width="100%" height="100%" fill="rgb(63, 144, 77)" /><circle cx="34.0" cy="34.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.14133333333333334;stroke-width:11.333333333333332px;" /><circle cx="34.0" cy="34.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.05466666666666667" /><circle cx="102.0" cy="34.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.08933333333333333;stroke-width:11.333333333333332px;" /><circle cx="102.0" cy="34.0" r="14.166666666666666" fill="#222" fill-opacity="0.08066666666666666" /><circle cx="170.0" cy="34.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.13266666666666665;stroke-width:11.333333333333332px;" /><circle cx="170.0" cy="34.0" r="14.166666666666666" fill="#222" fill-opacity="0.11533333333333334" /><circle cx="238.0" cy="34.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.15;stroke-width:11.333333333333332px;" /><circle cx="238.0" cy="34.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.12400000000000001" /><circle cx="306.0" cy="34.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.098;stroke-width:11.333333333333332px;" /><circle cx="306.0" cy="34.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.05466666666666667" /><circle cx="374.0" cy="34.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.07200000000000001;stroke-width:11.333333333333332px;" /><circle cx="374.0" cy="34.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.07200000000000001" /><circle cx="34.0" cy="102.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.07200000000000001;stroke-width:11.333333333333332px;" /><circle cx="34.0" cy="102.0" r="14.166666666666666" fill="#222" fill-opacity="0.06333333333333334" /><circle cx="102.0" cy="102.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.08066666666666666;stroke-width:11.333333333333332px;" /><circle cx="102.0" cy="102.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.05466666666666667" /><circle cx="170.0" cy="102.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.07200000000000001;stroke-width:11.333333333333332px;" /><circle cx="170.0" cy="102.0" r="14.166666666666666" fill="#222" fill-opacity="0.11533333333333334" /><circle cx="238.0" cy="102.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.08066666666666666;stroke-width:11.333333333333332px;" /><circle cx="238.0" cy="102.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.05466666666666667" /><circle cx="306.0" cy="102.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.15;stroke-width:11.333333333333332px;" /><circle cx="306.0" cy="102.0" r="14.166666666666666" fill="#222" fill-opacity="0.11533333333333334" /><circle cx="374.0" cy="102.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.11533333333333334;stroke-width:11.333333333333332px;" /><circle cx="374.0" cy="102.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.14133333333333334" /><circle cx="34.0" cy="170.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.13266666666666665;stroke-width:11.333333333333332px;" /><circle cx="34.0" cy="170.0" r="14.166666666666666" fill="#222" fill-opacity="0.11533333333333334" /><circle cx="102.0" cy="170.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.046;stroke-width:11.333333333333332px;" /><circle cx="102.0" cy="170.0" r="14.166666666666666" fill="#222" fill-opacity="0.098" /><circle cx="170.0" cy="170.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.10666666666666667;stroke-width:11.333333333333332px;" /><circle cx="170.0" cy="170.0" r="14.166666666666666" fill="#222" fill-opacity="0.098" /><circle cx="238.0" cy="170.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.046;stroke-width:11.333333333333332px;" /><circle cx="238.0" cy="170.0" r="14.166666666666666" fill="#222" fill-opacity="0.08066666666666666" /><circle cx="306.0" cy="170.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.08933333333333333;stroke-width:11.333333333333332px;" /><circle cx="306.0" cy="170.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.07200000000000001" /><circle cx="374.0" cy="170.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.046;stroke-width:11.333333333333332px;" /><circle cx="374.0" cy="170.0" r="14.166666666666666" fill="#222" fill-opacity="0.028666666666666667" /><circle cx="34.0" cy="238.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.12400000000000001;stroke-width:11.333333333333332px;" /><circle cx="34.0" cy="238.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.03733333333333333" /><circle cx="102.0" cy="238.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.06333333333333334;stroke-width:11.333333333333332px;" /><circle cx="102.0" cy="238.0" r="14.166666666666666" fill="#222" fill-opacity="0.046" /><circle cx="170.0" cy="238.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.046;stroke-width:11.333333333333332px;" /><circle cx="170.0" cy="238.0" r="14.166666666666666" fill="#222" fill-opacity="0.06333333333333334" /><circle cx="238.0" cy="238.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.03733333333333333;stroke-width:11.333333333333332px;" /><circle cx="238.0" cy="238.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.12400000000000001" /><circle cx="306.0" cy="238.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.028666666666666667;stroke-width:11.333333333333332px;" /><circle cx="306.0" cy="238.0" r="14.166666666666666" fill="#222" fill-opacity="0.046" /><circle cx="374.0" cy="238.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.07200000000000001;stroke-width:11.333333333333332px;" /><circle cx="374.0" cy="238.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.08933333333333333" /><circle cx="34.0" cy="306.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.08066666666666666;stroke-width:11.333333333333332px;" /><circle cx="34.0" cy="306.0" r="14.166666666666666" fill="#222" fill-opacity="0.046" /><circle cx="102.0" cy="306.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.098;stroke-width:11.333333333333332px;" /><circle cx="102.0" cy="306.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.10666666666666667" /><circle cx="170.0" cy="306.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.098;stroke-width:11.333333333333332px;" /><circle cx="170.0" cy="306.0" r="14.166666666666666" fill="#222" fill-opacity="0.046" /><circle cx="238.0" cy="306.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.11533333333333334;stroke-width:11.333333333333332px;" /><circle cx="238.0" cy="306.0" r="14.166666666666666" fill="#222" fill-opacity="0.13266666666666665" /><circle cx="306.0" cy="306.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.14133333333333334;stroke-width:11.333333333333332px;" /><circle cx="306.0" cy="306.0" r="14.166666666666666" fill="#222" fill-opacity="0.11533333333333334" /><circle cx="374.0" cy="306.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.11533333333333334;stroke-width:11.333333333333332px;" /><circle cx="374.0" cy="306.0" r="14.166666666666666" fill="#222" fill-opacity="0.15" /><circle cx="34.0" cy="374.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.05466666666666667;stroke-width:11.333333333333332px;" /><circle cx="34.0" cy="374.0" r="14.166666666666666" fill="#222" fill-opacity="0.08066666666666666" /><circle cx="102.0" cy="374.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.11533333333333334;stroke-width:11.333333333333332px;" /><circle cx="102.0" cy="374.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.07200000000000001" /><circle cx="170.0" cy="374.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.05466666666666667;stroke-width:11.333333333333332px;" /><circle cx="170.0" cy="374.0" r="14.166666666666666" fill="#222" fill-opacity="0.08066666666666666" /><circle cx="238.0" cy="374.0" r="28.333333333333332" fill="none" stroke="#222" style="opacity:0.06333333333333334;stroke-width:11.333333333333332px;" /><circle cx="238.0" cy="374.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.07200000000000001" /><circle cx="306.0" cy="374.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.07200000000000001;stroke-width:11.333333333333332px;" /><circle cx="306.0" cy="374.0" r="14.166666666666666" fill="#ddd" fill-opacity="0.07200000000000001" /><circle cx="374.0" cy="374.0" r="28.333333333333332" fill="none" stroke="#ddd" style="opacity:0.05466666666666667;stroke-width:11.333333333333332px;" /><circle cx="374.0" cy="374.0" r="14.166666666666666" fill="#222" fill-opacity="0.098" /></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="284" height="94"><rect x="0" y="0" width="100%" height="100%" fill="rgb(63, 144, 77)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.14133333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(-23.666666666666668, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.14133333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(260.3333333333333, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.14133333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(-23.666666666666668, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.14133333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(260.3333333333333, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.08933333333333333" stroke="#000" stroke-opacity="0.02" transform="translate(23.666666666666668, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.08933333333333333" stroke="#000" stroke-opacity="0.02" transform="translate(23.666666666666668, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.13266666666666665" stroke="#000" stroke-opacity="0.02" transform="translate(71.0, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.13266666666666665" stroke="#000" stroke-opacity="0.02" transform="translate(71.0, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.15" stroke="#000" stroke-opacity="0.02" transform="translate(118.33333333333333, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.15" stroke="#000" stroke-opacity="0.02" transform="translate(118.33333333333333, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.098" stroke="#000" stroke-opacity="0.02" transform="translate(165.66666666666669, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.098" stroke="#000" stroke-opacity="0.02" transform="translate(165.66666666666669, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(213.00000000000003, -15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(213.00000000000003, 78.33333333333333)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(0.0, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(284.0, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.08066666666666666" stroke="#000" stroke-opacity="0.02" transform="translate(47.333333333333336, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(94.66666666666667, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.08066666666666666" stroke="#000" stroke-opacity="0.02" transform="translate(142.0, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.15" stroke="#000" stroke-opacity="0.02" transform="translate(189.33333333333334, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.11533333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(236.66666666666669, 0.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.13266666666666665" stroke="#000" stroke-opacity="0.02" transform="translate(-23.666666666666668, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.13266666666666665" stroke="#000" stroke-opacity="0.02" transform="translate(260.3333333333333, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.046" stroke="#000" stroke-opacity="0.02" transform="translate(23.666666666666668, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.10666666666666667" stroke="#000" stroke-opacity="0.02" transform="translate(71.0, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.046" stroke="#000" stroke-opacity="0.02" transform="translate(118.33333333333333, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.08933333333333333" stroke="#000" stroke-opacity="0.02" transform="translate(165.66666666666669, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.046" stroke="#000" stroke-opacity="0.02" transform="translate(213.00000000000003, 15.666666666666666)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.12400000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(0.0, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.12400000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(284.0, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.06333333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(47.333333333333336, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.046" stroke="#000" stroke-opacity="0.02" transform="translate(94.66666666666667, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.03733333333333333" stroke="#000" stroke-opacity="0.02" transform="translate(142.0, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.028666666666666667" stroke="#000" stroke-opacity="0.02" transform="translate(189.33333333333334, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(236.66666666666669, 31.333333333333336)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.08066666666666666" stroke="#000" stroke-opacity="0.02" transform="translate(-23.666666666666668, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.08066666666666666" stroke="#000" stroke-opacity="0.02" transform="translate(260.3333333333333, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.098" stroke="#000" stroke-opacity="0.02" transform="translate(23.666666666666668, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.098" stroke="#000" stroke-opacity="0.02" transform="translate(71.0, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.11533333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(118.33333333333333, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.14133333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(165.66666666666669, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.11533333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(213.00000000000003, 47.0)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.05466666666666667" stroke="#000" stroke-opacity="0.02" transform="translate(0.0, 62.666666666666664)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.05466666666666667" stroke="#000" stroke-opacity="0.02" transform="translate(284.0, 62.666666666666664)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.11533333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(47.333333333333336, 62.666666666666664)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.05466666666666667" stroke="#000" stroke-opacity="0.02" transform="translate(94.66666666666667, 62.666666666666664)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#222" fill-opacity="0.06333333333333334" stroke="#000" stroke-opacity="0.02" transform="translate(142.0, 62.666666666666664)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.07200000000000001" stroke="#000" stroke-opacity="0.02" transform="translate(189.33333333333334, 62.666666666666664)" /><polyline points="23.666666666666668, 0, 47.333333333333336, 15.666666666666666, 23.666666666666668, 31.333333333333332, 0, 15.666666666666666" fill="#ddd" fill-opacity="0.05466666666666667" stroke="#000" stroke-opacity="0.02" transform="translate(236.66666666666669, 62.666666666666664)" /></svg>