gcaptcha 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e6bae238a6e252435c307924e785ef11f4069be6f8e402fa9555eca5335f1841
4
+ data.tar.gz: 3fa938cb33079789d561423d274cda62d99d8045ab8cdb55fd1d05dfaa6817de
5
+ SHA512:
6
+ metadata.gz: e62f4a7f0fdf25678502afec1b25e89278b09b7977863e27fc3bca21d5e211f57c2ac0e217a13dda3706a34909e8032c0fa48ff3991502f48a168662651f6470
7
+ data.tar.gz: 9e93c5cb97dad740b9a0840c3e79388c215f07bbbf19ecf51569aebc6c4d291ce7f9ac5a6ad674c41403c530e0b02656afa19a273a09da1ce2ebad744517d1c1
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ .idea/
10
+ .DS_Store
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.6.1
7
+ before_install: gem install bundler -v 1.17.2
@@ -0,0 +1,2 @@
1
+ ### 0.1.0
2
+ * First release
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at lanyuejin1108@gmail.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in gcaptcha.gemspec
6
+ gemspec
@@ -0,0 +1,25 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ gcaptcha (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ minitest (5.11.3)
10
+ rake (10.5.0)
11
+ rake-compiler (1.0.7)
12
+ rake
13
+
14
+ PLATFORMS
15
+ ruby
16
+
17
+ DEPENDENCIES
18
+ bundler (~> 1.17)
19
+ gcaptcha!
20
+ minitest (~> 5.0)
21
+ rake (~> 10.0)
22
+ rake-compiler (~> 1)
23
+
24
+ BUNDLED WITH
25
+ 1.17.2
@@ -0,0 +1,3 @@
1
+ compile:
2
+ rake clean
3
+ rake compile
@@ -0,0 +1,76 @@
1
+ # GCaptcha
2
+
3
+ 最近涉及验证码识别的工作,所以需要生成一定量的验证码数据进行训练,然后发现Ruby下没有比较方便的Gem可以做到直接生成验证码图片(大部分是与Rails结合的)。所以自己就针对[rucaptcha](https://github.com/huacnlee/rucaptcha)
4
+ 抽离出验证码生成的逻辑,形成了这个Gem。验证码较为简单,仅作学习使用。
5
+
6
+ Recently, it involves the work of verification code identification, so it is necessary to generate a certain amount of verification code data for training, and then find that there is no convenient Gem under Ruby to directly generate verification code pictures (mostly combined with Rails). So I created the Gem according to the logic of [Rucaptcha](https://github.com/huacnlee/rucaptcha).The verification code is simple and just for learning.
7
+
8
+ ## Example
9
+ ![](./img/wiyvfca.png)
10
+
11
+ ## Installation
12
+
13
+ ```ruby
14
+ gem 'gcaptcha'
15
+ ```
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install gcaptcha
24
+
25
+ ## Usage
26
+
27
+ You can write the script to generate the captcha. Example:
28
+ ```ruby
29
+ GCaptcha.configure do |config|
30
+ config.style = :colorful # default: :colorful, allows: [:colorful, :black_white]
31
+ config.length = 5 # default: 5, allows: 3..7
32
+ config.strike_through = false # default: true
33
+ config.outline = false # default: true, outline style for the hard mode
34
+ config.batch_nums = 10 # default: 10, batch generate captcha
35
+ config.img_path = "path" # default: Dir.pwd
36
+ config.extension_name = :jpg # default: :jpg, allows: [:jpg, :png, :gif]
37
+ end
38
+
39
+ # generate one, return the img path
40
+ GCaptcha.generate
41
+
42
+ # batch generate, return an array of img path
43
+ GCaptcha.batch_generate
44
+
45
+ # get the config
46
+ GCaptcha.config
47
+ ```
48
+
49
+ And also you can use the command, example:
50
+ ```ruby
51
+ $ gcaptcha -h
52
+ Usage: GCaptcha [options]
53
+
54
+ Specific options:
55
+ -s, --style [TYPE] Color style, default: colorful, allows: [colorful, black_white]
56
+ -l, --length [INTEGER] Chars length: default 5, allows: [3..7]
57
+ -t, --[no-]through strike_through, default: true
58
+ -u, --[no-]outline Outline style for the hard mode, default: true
59
+ -n, --nums [INTEGER] The nums to batch generate captcha, default: 10
60
+ -o, --output [STRING] img output path, default: Dir.pwd
61
+ -e, --ext_name [TYPE] image's extension name, allows: [jpg, png, gif], default: jpg
62
+
63
+ Common options:
64
+ -h, --help show the help message
65
+ -v, --version Show version
66
+ ```
67
+
68
+ ## Thanks
69
+ * [rucaptcha](https://github.com/huacnlee/rucaptcha)
70
+ * [captcha](https://github.com/ITikhonov/captcha)
71
+
72
+ ## Development
73
+
74
+ After checking out the repo, run `bin/setup` to install dependencies and run `rake compile` to make the c extension. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
75
+
76
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
@@ -0,0 +1,15 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+ require 'rake/extensiontask'
4
+
5
+ Rake::ExtensionTask.new "gcaptcha" do |ext|
6
+ ext.lib_dir = "lib/gcaptcha"
7
+ end
8
+
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << "test"
11
+ t.libs << "lib"
12
+ t.test_files = FileList["test/**/*_test.rb"]
13
+ end
14
+
15
+ task :default => :test
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "gcaptcha"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'optparse'
5
+ require 'gcaptcha'
6
+
7
+ class GCaptchaOptparser
8
+ class Parser
9
+ attr_accessor :style,
10
+ :length,
11
+ :strike_through,
12
+ :outline,
13
+ :batch_nums,
14
+ :img_path,
15
+ :extension_name
16
+
17
+ def initialize
18
+
19
+ end
20
+
21
+ def define_options(parser)
22
+ parser.banner = "Usage: GCaptcha [options]"
23
+ parser.separator ""
24
+ parser.separator "Specific options:"
25
+
26
+ style_option(parser)
27
+ length_option(parser)
28
+ strike_through_option(parser)
29
+ outline_option(parser)
30
+ batch_nums_option(parser)
31
+ img_path_option(parser)
32
+ extension_name_option(parser)
33
+
34
+ parser.separator ""
35
+ parser.separator "Common options:"
36
+
37
+ parser.on_tail("-h", "--help", "show the help message") do
38
+ puts parser
39
+ exit
40
+ end
41
+
42
+ parser.on_tail("-v", "--version", "Show version") do
43
+ puts GCaptcha::VERSION
44
+ exit
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def style_option(parser)
51
+ parser.on("-s", "--style [TYPE]", [:colorful, :blank_white],"Color style, default: colorful, allows: [colorful, black_white]") do |style|
52
+ self.style = style
53
+ end
54
+ end
55
+
56
+ def length_option(parser)
57
+ parser.on("-l", "--length [INTEGER]", Integer, "Chars length: default 5, allows: [3..7]") do |length|
58
+ self.length = length
59
+ end
60
+ end
61
+
62
+ def strike_through_option(parser)
63
+ parser.on("-t", "--[no-]through", "strike_through, default: true") do |strike_through|
64
+ self.strike_through = strike_through
65
+ end
66
+ end
67
+
68
+ def outline_option(parser)
69
+ parser.on("-u", "--[no-]outline", "Outline style for the hard mode, default: true") do |outline|
70
+ self.outline = outline
71
+ end
72
+ end
73
+
74
+ def batch_nums_option(parser)
75
+ parser.on("-n", "--nums [INTEGER]", Integer, "The nums to batch generate captcha, default: 10") do |num|
76
+ self.batch_nums = num
77
+ end
78
+ end
79
+
80
+ def img_path_option(parser)
81
+ parser.on("-o", "--output [STRING]", String, "img output path, default: Dir.pwd") do |path|
82
+ self.img_path = path
83
+ end
84
+ end
85
+
86
+ def extension_name_option(parser)
87
+ parser.on("-e", "--ext_name [TYPE]", [:jpg, :png, :gif], "image's extension name, allows: [jpg, png, gif], default: jpg") do |ext_name|
88
+ self.extension_name = ext_name
89
+ end
90
+ end
91
+ end
92
+
93
+ attr_reader :parser, :options
94
+ def parse(args)
95
+ @options = Parser.new
96
+ @args = OptionParser.new do |parser|
97
+ @options.define_options(parser)
98
+ parser.parse!(args)
99
+ end
100
+ @options
101
+ end
102
+ end
103
+
104
+ parser = GCaptchaOptparser.new
105
+ options = parser.parse(ARGV)
106
+
107
+ GCaptcha.configure do |config|
108
+ config.style = options.style if options.style
109
+ config.length = options.length if options.length
110
+ config.strike_through = options.strike_through unless options.strike_through.nil?
111
+ config.outline = options.outline unless options.outline.nil?
112
+ config.batch_nums = options.batch_nums if options.batch_nums
113
+ config.img_path = options.img_path if options.img_path
114
+ config.extension_name = options.extension_name if options.extension_name
115
+ end
116
+ GCaptcha.batch_generate
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,345 @@
1
+ // Colors from
2
+ // https://material.io/guidelines/style/color.html#color-ui-color-palette
3
+ static char *colors[] = {
4
+ // Black 500 #000000
5
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
6
+ "\x11\x11\x11"
7
+ "\x11\x11\x11"
8
+ "\x11\x11\x11"
9
+ "\x11\x11\x11"
10
+ "\x11\x11\x11"
11
+ "\x11\x11\x11"
12
+ "\x11\x11\x11"
13
+ "\x11\x11\x11"
14
+ "\x11\x11\x11"
15
+ "\x11\x11\x11"
16
+ "\x11\x11\x11"
17
+ "\x11\x11\x11"
18
+ "\x11\x11\x11"
19
+ "\x11\x11\x11"
20
+ "\x11\x11\x11"
21
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
22
+
23
+ // Red 500 #F44336
24
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
25
+ "\xF4\x43\x36"
26
+ "\xF4\x43\x36"
27
+ "\xF4\x43\x36"
28
+ "\xF4\x43\x36"
29
+ "\xF4\x43\x36"
30
+ "\xF4\x43\x36"
31
+ "\xF4\x43\x36"
32
+ "\xF4\x43\x36"
33
+ "\xF4\x43\x36"
34
+ "\xF4\x43\x36"
35
+ "\xF4\x43\x36"
36
+ "\xF4\x43\x36"
37
+ "\xF4\x43\x36"
38
+ "\xF4\x43\x36"
39
+ "\xF4\x43\x36"
40
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
41
+
42
+ // Pink 500 #E91E63
43
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
44
+ "\xE9\x1E\x63"
45
+ "\xE9\x1E\x63"
46
+ "\xE9\x1E\x63"
47
+ "\xE9\x1E\x63"
48
+ "\xE9\x1E\x63"
49
+ "\xE9\x1E\x63"
50
+ "\xE9\x1E\x63"
51
+ "\xE9\x1E\x63"
52
+ "\xE9\x1E\x63"
53
+ "\xE9\x1E\x63"
54
+ "\xE9\x1E\x63"
55
+ "\xE9\x1E\x63"
56
+ "\xE9\x1E\x63"
57
+ "\xE9\x1E\x63"
58
+ "\xE9\x1E\x63"
59
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
60
+
61
+ // Purple 500 #9C27B0
62
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
63
+ "\x9C\x27\xB0"
64
+ "\x9C\x27\xB0"
65
+ "\x9C\x27\xB0"
66
+ "\x9C\x27\xB0"
67
+ "\x9C\x27\xB0"
68
+ "\x9C\x27\xB0"
69
+ "\x9C\x27\xB0"
70
+ "\x9C\x27\xB0"
71
+ "\x9C\x27\xB0"
72
+ "\x9C\x27\xB0"
73
+ "\x9C\x27\xB0"
74
+ "\x9C\x27\xB0"
75
+ "\x9C\x27\xB0"
76
+ "\x9C\x27\xB0"
77
+ "\x9C\x27\xB0"
78
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
79
+
80
+ // Deep Purple 500 #673AB7
81
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
82
+ "\x67\x3A\xB7"
83
+ "\x67\x3A\xB7"
84
+ "\x67\x3A\xB7"
85
+ "\x67\x3A\xB7"
86
+ "\x67\x3A\xB7"
87
+ "\x67\x3A\xB7"
88
+ "\x67\x3A\xB7"
89
+ "\x67\x3A\xB7"
90
+ "\x67\x3A\xB7"
91
+ "\x67\x3A\xB7"
92
+ "\x67\x3A\xB7"
93
+ "\x67\x3A\xB7"
94
+ "\x67\x3A\xB7"
95
+ "\x67\x3A\xB7"
96
+ "\x67\x3A\xB7"
97
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
98
+
99
+ // Indigo 500 #3F51B5
100
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
101
+ "\x3F\x51\xB5"
102
+ "\x3F\x51\xB5"
103
+ "\x3F\x51\xB5"
104
+ "\x3F\x51\xB5"
105
+ "\x3F\x51\xB5"
106
+ "\x3F\x51\xB5"
107
+ "\x3F\x51\xB5"
108
+ "\x3F\x51\xB5"
109
+ "\x3F\x51\xB5"
110
+ "\x3F\x51\xB5"
111
+ "\x3F\x51\xB5"
112
+ "\x3F\x51\xB5"
113
+ "\x3F\x51\xB5"
114
+ "\x3F\x51\xB5"
115
+ "\x3F\x51\xB5"
116
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
117
+
118
+ // Blue 500 #2196F3
119
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
120
+ "\x21\x96\xF3"
121
+ "\x21\x96\xF3"
122
+ "\x21\x96\xF3"
123
+ "\x21\x96\xF3"
124
+ "\x21\x96\xF3"
125
+ "\x21\x96\xF3"
126
+ "\x21\x96\xF3"
127
+ "\x21\x96\xF3"
128
+ "\x21\x96\xF3"
129
+ "\x21\x96\xF3"
130
+ "\x21\x96\xF3"
131
+ "\x21\x96\xF3"
132
+ "\x21\x96\xF3"
133
+ "\x21\x96\xF3"
134
+ "\x21\x96\xF3"
135
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
136
+
137
+ // Light Blue 500 #03A9F4
138
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
139
+ "\x03\xA9\xF4"
140
+ "\x03\xA9\xF4"
141
+ "\x03\xA9\xF4"
142
+ "\x03\xA9\xF4"
143
+ "\x03\xA9\xF4"
144
+ "\x03\xA9\xF4"
145
+ "\x03\xA9\xF4"
146
+ "\x03\xA9\xF4"
147
+ "\x03\xA9\xF4"
148
+ "\x03\xA9\xF4"
149
+ "\x03\xA9\xF4"
150
+ "\x03\xA9\xF4"
151
+ "\x03\xA9\xF4"
152
+ "\x03\xA9\xF4"
153
+ "\x03\xA9\xF4"
154
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
155
+
156
+ // Cyan 500 #00BCD4
157
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
158
+ "\x00\xBC\xD4"
159
+ "\x00\xBC\xD4"
160
+ "\x00\xBC\xD4"
161
+ "\x00\xBC\xD4"
162
+ "\x00\xBC\xD4"
163
+ "\x00\xBC\xD4"
164
+ "\x00\xBC\xD4"
165
+ "\x00\xBC\xD4"
166
+ "\x00\xBC\xD4"
167
+ "\x00\xBC\xD4"
168
+ "\x00\xBC\xD4"
169
+ "\x00\xBC\xD4"
170
+ "\x00\xBC\xD4"
171
+ "\x00\xBC\xD4"
172
+ "\x00\xBC\xD4"
173
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
174
+
175
+ // Teal 500 #009688
176
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
177
+ "\x00\x96\x88"
178
+ "\x00\x96\x88"
179
+ "\x00\x96\x88"
180
+ "\x00\x96\x88"
181
+ "\x00\x96\x88"
182
+ "\x00\x96\x88"
183
+ "\x00\x96\x88"
184
+ "\x00\x96\x88"
185
+ "\x00\x96\x88"
186
+ "\x00\x96\x88"
187
+ "\x00\x96\x88"
188
+ "\x00\x96\x88"
189
+ "\x00\x96\x88"
190
+ "\x00\x96\x88"
191
+ "\x00\x96\x88"
192
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
193
+
194
+ // Green 500 #4CAF50
195
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
196
+ "\x4C\xAF\x50"
197
+ "\x4C\xAF\x50"
198
+ "\x4C\xAF\x50"
199
+ "\x4C\xAF\x50"
200
+ "\x4C\xAF\x50"
201
+ "\x4C\xAF\x50"
202
+ "\x4C\xAF\x50"
203
+ "\x4C\xAF\x50"
204
+ "\x4C\xAF\x50"
205
+ "\x4C\xAF\x50"
206
+ "\x4C\xAF\x50"
207
+ "\x4C\xAF\x50"
208
+ "\x4C\xAF\x50"
209
+ "\x4C\xAF\x50"
210
+ "\x4C\xAF\x50"
211
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
212
+
213
+ // Light Green 500 #8BC34A
214
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
215
+ "\x8B\xC3\x4A"
216
+ "\x8B\xC3\x4A"
217
+ "\x8B\xC3\x4A"
218
+ "\x8B\xC3\x4A"
219
+ "\x8B\xC3\x4A"
220
+ "\x8B\xC3\x4A"
221
+ "\x8B\xC3\x4A"
222
+ "\x8B\xC3\x4A"
223
+ "\x8B\xC3\x4A"
224
+ "\x8B\xC3\x4A"
225
+ "\x8B\xC3\x4A"
226
+ "\x8B\xC3\x4A"
227
+ "\x8B\xC3\x4A"
228
+ "\x8B\xC3\x4A"
229
+ "\x8B\xC3\x4A"
230
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
231
+
232
+ // Lime 500 #CDDC39
233
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
234
+ "\xCD\xDC\x39"
235
+ "\xCD\xDC\x39"
236
+ "\xCD\xDC\x39"
237
+ "\xCD\xDC\x39"
238
+ "\xCD\xDC\x39"
239
+ "\xCD\xDC\x39"
240
+ "\xCD\xDC\x39"
241
+ "\xCD\xDC\x39"
242
+ "\xCD\xDC\x39"
243
+ "\xCD\xDC\x39"
244
+ "\xCD\xDC\x39"
245
+ "\xCD\xDC\x39"
246
+ "\xCD\xDC\x39"
247
+ "\xCD\xDC\x39"
248
+ "\xCD\xDC\x39"
249
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
250
+
251
+ // Yellow 500 #FFEB3B
252
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
253
+ "\xFF\xEB\x3B"
254
+ "\xFF\xEB\x3B"
255
+ "\xFF\xEB\x3B"
256
+ "\xFF\xEB\x3B"
257
+ "\xFF\xEB\x3B"
258
+ "\xFF\xEB\x3B"
259
+ "\xFF\xEB\x3B"
260
+ "\xFF\xEB\x3B"
261
+ "\xFF\xEB\x3B"
262
+ "\xFF\xEB\x3B"
263
+ "\xFF\xEB\x3B"
264
+ "\xFF\xEB\x3B"
265
+ "\xFF\xEB\x3B"
266
+ "\xFF\xEB\x3B"
267
+ "\xFF\xEB\x3B"
268
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
269
+
270
+ // Amber 500 #FFC107
271
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
272
+ "\xFF\xC1\x07"
273
+ "\xFF\xC1\x07"
274
+ "\xFF\xC1\x07"
275
+ "\xFF\xC1\x07"
276
+ "\xFF\xC1\x07"
277
+ "\xFF\xC1\x07"
278
+ "\xFF\xC1\x07"
279
+ "\xFF\xC1\x07"
280
+ "\xFF\xC1\x07"
281
+ "\xFF\xC1\x07"
282
+ "\xFF\xC1\x07"
283
+ "\xFF\xC1\x07"
284
+ "\xFF\xC1\x07"
285
+ "\xFF\xC1\x07"
286
+ "\xFF\xC1\x07"
287
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
288
+
289
+ // Orange 500 #FF9800
290
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
291
+ "\xFF\x98\x00"
292
+ "\xFF\x98\x00"
293
+ "\xFF\x98\x00"
294
+ "\xFF\x98\x00"
295
+ "\xFF\x98\x00"
296
+ "\xFF\x98\x00"
297
+ "\xFF\x98\x00"
298
+ "\xFF\x98\x00"
299
+ "\xFF\x98\x00"
300
+ "\xFF\x98\x00"
301
+ "\xFF\x98\x00"
302
+ "\xFF\x98\x00"
303
+ "\xFF\x98\x00"
304
+ "\xFF\x98\x00"
305
+ "\xFF\x98\x00"
306
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
307
+
308
+ // Deep Orange 500 #FF5722
309
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
310
+ "\xFF\x57\x22"
311
+ "\xFF\x57\x22"
312
+ "\xFF\x57\x22"
313
+ "\xFF\x57\x22"
314
+ "\xFF\x57\x22"
315
+ "\xFF\x57\x22"
316
+ "\xFF\x57\x22"
317
+ "\xFF\x57\x22"
318
+ "\xFF\x57\x22"
319
+ "\xFF\x57\x22"
320
+ "\xFF\x57\x22"
321
+ "\xFF\x57\x22"
322
+ "\xFF\x57\x22"
323
+ "\xFF\x57\x22"
324
+ "\xFF\x57\x22"
325
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
326
+
327
+ // Brown 500 #795548
328
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
329
+ "\x79\x55\x48"
330
+ "\x79\x55\x48"
331
+ "\x79\x55\x48"
332
+ "\x79\x55\x48"
333
+ "\x79\x55\x48"
334
+ "\x79\x55\x48"
335
+ "\x79\x55\x48"
336
+ "\x79\x55\x48"
337
+ "\x79\x55\x48"
338
+ "\x79\x55\x48"
339
+ "\x79\x55\x48"
340
+ "\x79\x55\x48"
341
+ "\x79\x55\x48"
342
+ "\x79\x55\x48"
343
+ "\x79\x55\x48"
344
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04"
345
+ };