emojidex 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/emojidex.gemspec +7 -6
  3. data/lib/emojidex.rb +9 -1
  4. data/lib/emojidex/client.rb +53 -0
  5. data/lib/emojidex/data/categories.rb +42 -42
  6. data/lib/emojidex/data/category.rb +10 -10
  7. data/lib/emojidex/data/collection.rb +39 -21
  8. data/lib/emojidex/data/collection/asset_information.rb +19 -3
  9. data/lib/emojidex/data/collection/cache.rb +28 -33
  10. data/lib/emojidex/data/collection/moji_data.rb +13 -11
  11. data/lib/emojidex/data/collection/static_collection.rb +3 -3
  12. data/lib/emojidex/data/emoji.rb +54 -37
  13. data/lib/emojidex/data/emoji/asset_information.rb +86 -3
  14. data/lib/emojidex/data/extended.rb +2 -2
  15. data/lib/emojidex/data/utf.rb +2 -2
  16. data/lib/emojidex/defaults.rb +9 -1
  17. data/lib/emojidex/env_helper.rb +1 -2
  18. data/lib/emojidex/service/collection.rb +70 -31
  19. data/lib/emojidex/service/error.rb +1 -0
  20. data/lib/emojidex/service/indexes.rb +31 -10
  21. data/lib/emojidex/service/search.rb +5 -4
  22. data/lib/emojidex/service/transactor.rb +35 -19
  23. data/lib/emojidex/service/user.rb +80 -37
  24. data/lib/emojidex/service/user/history_item.rb +23 -0
  25. data/lib/emojidex/{data → util}/collection_checker.rb +2 -3
  26. metadata +10 -79
  27. data/.coveralls.yml +0 -1
  28. data/.gitignore +0 -12
  29. data/.rspec +0 -2
  30. data/.rubocop.yml +0 -18
  31. data/.travis.yml +0 -18
  32. data/Gemfile +0 -18
  33. data/Guardfile +0 -19
  34. data/README.md +0 -73
  35. data/spec/emojidex/data/categories_spec.rb +0 -19
  36. data/spec/emojidex/data/collection_checker_spec.rb +0 -72
  37. data/spec/emojidex/data/collection_spec.rb +0 -136
  38. data/spec/emojidex/data/emoji_spec.rb +0 -47
  39. data/spec/emojidex/data/extended_spec.rb +0 -118
  40. data/spec/emojidex/data/utf_spec.rb +0 -91
  41. data/spec/emojidex/service/collection_spec.rb +0 -20
  42. data/spec/emojidex/service/error_spec.rb +0 -17
  43. data/spec/emojidex/service/indexes_spec.rb +0 -62
  44. data/spec/emojidex/service/search_spec.rb +0 -87
  45. data/spec/emojidex/service/transactor_spec.rb +0 -11
  46. data/spec/emojidex/service/user_spec.rb +0 -128
  47. data/spec/spec_helper.rb +0 -18
  48. data/spec/support/Genshin.svg +0 -126
  49. data/spec/support/couple_kiss/0.svg +0 -177
  50. data/spec/support/couple_kiss/1.svg +0 -177
  51. data/spec/support/couple_kiss/10.svg +0 -293
  52. data/spec/support/couple_kiss/11.svg +0 -235
  53. data/spec/support/couple_kiss/12.svg +0 -235
  54. data/spec/support/couple_kiss/13.svg +0 -235
  55. data/spec/support/couple_kiss/14.svg +0 -177
  56. data/spec/support/couple_kiss/15.svg +0 -177
  57. data/spec/support/couple_kiss/2.svg +0 -177
  58. data/spec/support/couple_kiss/3.svg +0 -235
  59. data/spec/support/couple_kiss/4.svg +0 -235
  60. data/spec/support/couple_kiss/5.svg +0 -235
  61. data/spec/support/couple_kiss/6.svg +0 -293
  62. data/spec/support/couple_kiss/7.svg +0 -235
  63. data/spec/support/couple_kiss/8.svg +0 -235
  64. data/spec/support/couple_kiss/9.svg +0 -235
  65. data/spec/support/couple_kiss/animation.json +0 -14
  66. data/spec/support/fixtures/categories.json +0 -14
  67. data/spec/support/fixtures/category.json +0 -5
  68. data/spec/support/fixtures/emoji.json +0 -28
  69. data/spec/support/fixtures/emoji_detailed.json +0 -41
  70. data/spec/support/fixtures/search_emoji.json +0 -21
  71. data/spec/support/fixtures/single_emoji.json +0 -19
  72. data/spec/support/fixtures/single_emoji_detailed.json +0 -30
  73. data/spec/support/sample_collections/good/emoji.json +0 -30
  74. data/spec/support/sample_collections/good/mouth.svg +0 -49
  75. data/spec/support/sample_collections/good/nut_and_bolt.svg +0 -372
  76. data/spec/support/sample_collections/good/purple_heart.svg +0 -24
  77. data/spec/support/sample_collections/good/px32/mouth.png +0 -0
  78. data/spec/support/sample_collections/good/px32/nut_and_bolt.png +0 -0
  79. data/spec/support/sample_collections/good/px32/purple_heart.png +0 -0
  80. data/spec/support/sample_collections/good/px32/woman_with_bunny_ears.png +0 -0
  81. data/spec/support/sample_collections/good/woman_with_bunny_ears.svg +0 -90
  82. data/spec/support/sample_collections/missing_assets/emoji.json +0 -30
  83. data/spec/support/sample_collections/missing_assets/mouth.svg +0 -49
  84. data/spec/support/sample_collections/missing_assets/purple_heart.svg +0 -24
  85. data/spec/support/sample_collections/missing_assets/px32/mouth.png +0 -0
  86. data/spec/support/sample_collections/missing_assets/px32/nut_and_bolt.png +0 -0
  87. data/spec/support/sample_collections/missing_assets/px32/woman_with_bunny_ears.png +0 -0
  88. data/spec/support/sample_collections/missing_assets/woman_with_bunny_ears.svg +0 -90
  89. data/spec/support/sample_collections/missing_index/emoji.json +0 -23
  90. data/spec/support/sample_collections/missing_index/mouth.svg +0 -49
  91. data/spec/support/sample_collections/missing_index/nut_and_bolt.svg +0 -372
  92. data/spec/support/sample_collections/missing_index/purple_heart.svg +0 -24
  93. data/spec/support/sample_collections/missing_index/px32/mouth.png +0 -0
  94. data/spec/support/sample_collections/missing_index/px32/nut_and_bolt.png +0 -0
  95. data/spec/support/sample_collections/missing_index/px32/purple_heart.png +0 -0
  96. data/spec/support/sample_collections/missing_index/px32/woman_with_bunny_ears.png +0 -0
  97. data/spec/support/sample_collections/missing_index/woman_with_bunny_ears.svg +0 -90
@@ -1,87 +0,0 @@
1
- require 'spec_helper'
2
- require 'emojidex/service/search'
3
-
4
- describe Emojidex::Service::Search do
5
- describe '.term' do
6
- it 'searches for a term and returns a collection with the results' do
7
- res = Emojidex::Service::Search.term('chocolate')
8
- expect(res).to be_a(Emojidex::Service::Collection)
9
- expect(res.emoji.count >= 3).to be true
10
- end
11
- end
12
-
13
- describe '.search' do
14
- it 'searches for a term and returns a collection with the results' do
15
- res = Emojidex::Service::Search.term('チョコ')
16
- expect(res).to be_a(Emojidex::Service::Collection)
17
- expect(res.emoji.count >= 3).to be true
18
- end
19
- end
20
-
21
- describe '.starting' do
22
- it 'searches for a code starting with the term and returns a collection with the results' do
23
- res = Emojidex::Service::Search.starting('face')
24
- expect(res).to be_a(Emojidex::Service::Collection)
25
- expect(res.emoji.count >= 3).to be true
26
- for i in 0..10
27
- expect(/^face/.match(res.emoji.values[i].code).nil?).to be false
28
- end
29
- end
30
- end
31
-
32
- describe '.ending' do
33
- it 'searches for a code starting with the term and returns a collection with the results' do
34
- res = Emojidex::Service::Search.ending('face')
35
- expect(res).to be_a(Emojidex::Service::Collection)
36
- expect(res.emoji.count >= 3).to be true
37
- for i in 0..10
38
- expect(/face$/.match(res.emoji.values[i].code).nil?).to be false
39
- end
40
- end
41
- end
42
-
43
- describe '.tags' do
44
- it 'searches for emoji by a single tag' do
45
- res = Emojidex::Service::Search.tags(:metal)
46
- expect(res.emoji.values[0].tags.include? :metal).to be true
47
- end
48
-
49
- it 'searches for emoji by multiple tags and mixed symbols/strings with spaces' do
50
- res = Emojidex::Service::Search.tags([:metal, 'fist', 'heavy metal'])
51
- expect(res.emoji.values[0].tags.include? :metal).to be true
52
- expect(res.emoji.values[0].tags.include? :fist).to be true
53
- end
54
- end
55
-
56
- describe '.advanced' do
57
- it 'searches for a term' do
58
- res = Emojidex::Service::Search.advanced('face')
59
- expect(res).to be_a(Emojidex::Service::Collection)
60
- expect(res.emoji.count > 0).to be true
61
- for i in 0..(res.emoji.count - 1)
62
- expect(/face/.match(res.emoji.values[i].code).nil?).to be false
63
- end
64
- end
65
-
66
- it 'searches for a term constrained with a tag' do
67
- res = Emojidex::Service::Search.advanced('metal', [], :fist)
68
- expect(res).to be_a(Emojidex::Service::Collection)
69
- expect(res.emoji.count > 0).to be true
70
- for i in 0..(res.emoji.count - 1)
71
- expect(/metal/.match(res.emoji.values[i].code).nil?).to be false
72
- expect(res.emoji.values[i].tags.include? :fist).to be true
73
- end
74
- end
75
-
76
- it 'searches for a term constrained by a category' do
77
- res = Emojidex::Service::Search.advanced('san', [:food])
78
- expect(res).to be_a(Emojidex::Service::Collection)
79
- expect(res.emoji.count > 0).to be true
80
- for i in 0..(res.emoji.count - 1)
81
- expect(/san/.match(res.emoji.values[i].code).nil?).to be false
82
- expect(res.emoji.values[i].category).to be :food
83
- end
84
- end
85
-
86
- end
87
- end
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
- require 'emojidex/service/transactor'
3
-
4
- describe Emojidex::Service::Transactor do
5
- describe '.get' do
6
- it 'gets data' do
7
- res = Emojidex::Service::Transactor.get('emoji')
8
- expect(res.count > 0).to be true
9
- end
10
- end
11
- end
@@ -1,128 +0,0 @@
1
- require 'spec_helper'
2
- require 'emojidex/service/user'
3
-
4
-
5
- describe Emojidex::Service::User do
6
- it 'has a set of auth status codes which define if a user is authorized' do
7
- expect(Emojidex::Service::User.auth_status_codes.include? :verified).to be true
8
- expect(Emojidex::Service::User.auth_status_codes.include? :unverified).to be true
9
- expect(Emojidex::Service::User.auth_status_codes[:verified]).to be true
10
- expect(Emojidex::Service::User.auth_status_codes[:unverified]).to be false
11
- end
12
-
13
- describe 'initialize' do
14
- it 'sets defaults' do
15
- user = Emojidex::Service::User.new
16
- expect(user.username).to eq ''
17
- expect(user.pro).to eq false
18
- expect(user.premium).to eq false
19
- expect(user.pro_exp).to eq nil
20
- expect(user.premium_exp).to eq nil
21
- end
22
-
23
- it 'defaults to an unauthroized state' do
24
- user = Emojidex::Service::User.new
25
- expect(user.authorized?).to be false
26
- end
27
- end
28
-
29
- describe 'authorize' do
30
- it 'fails authorization with a bad token' do
31
- user = Emojidex::Service::User.new
32
- expect(user.authorize('test', '12345')).to be false
33
- expect(user.status).to eq :unverified
34
- end
35
-
36
- it 'authorizes with a good token' do
37
- user = Emojidex::Service::User.new
38
- expect(user.authorize('test',
39
- '1798909355d57c9a93e3b82d275594e7c7c000db05021138')).to be true
40
- expect(user.status).to eq :verified
41
- end
42
-
43
- it 'fails to sync history when unauthorized' do
44
- user = Emojidex::Service::User.new
45
- expect(user.sync_history).to be false
46
- expect(user.history.class == Array).to be true
47
- expect(user.history.size).to eq 0
48
- end
49
-
50
- it 'syncs history when authorized' do
51
- user = Emojidex::Service::User.new
52
- user.authorize('test', '1798909355d57c9a93e3b82d275594e7c7c000db05021138')
53
- expect(user.sync_history).to be true
54
- expect(user.history.size > 0).to be true
55
- end
56
-
57
- it 'fails to sync favorites when unauthorized' do
58
- user = Emojidex::Service::User.new
59
- expect(user.sync_favorites).to be false
60
- end
61
-
62
- it 'syncs favorites when authorized' do
63
- user = Emojidex::Service::User.new
64
- user.authorize('test', '1798909355d57c9a93e3b82d275594e7c7c000db05021138')
65
- expect(user.sync_favorites).to be true
66
- expect(user.favorites.emoji.length > 0).to be true
67
- end
68
-
69
- it 'refuses to add a favorite when not authorized' do
70
- user = Emojidex::Service::User.new
71
- expect(user.add_favorite('combat knife')).to be false
72
- end
73
-
74
- it 'adds a favorite when authorized' do
75
- user = Emojidex::Service::User.new
76
- user.authorize('test', '1798909355d57c9a93e3b82d275594e7c7c000db05021138')
77
- expect(user.add_favorite('combat_knife')).to be true
78
- end
79
-
80
- it 'refuses to remove a favorite when not authorized' do
81
- user = Emojidex::Service::User.new
82
- expect(user.remove_favorite('combat_knife')).to be false
83
- end
84
-
85
- it 'removes a favorite when authorized' do
86
- user = Emojidex::Service::User.new
87
- user.authorize('test', '1798909355d57c9a93e3b82d275594e7c7c000db05021138')
88
- user.add_favorite('combat_knife')
89
- expect(user.remove_favorite('combat_knife')).to be true
90
- end
91
-
92
- it 'saves user data' do
93
- user = Emojidex::Service::User.new
94
- user.authorize('test', '1798909355d57c9a93e3b82d275594e7c7c000db05021138')
95
- user.save(tmp_cache_path)
96
- expect(File.exist? "#{tmp_cache_path}/user.json").to be true
97
- expect(File.exist? "#{tmp_cache_path}/history.json").to be true
98
- expect(File.exist? "#{tmp_cache_path}/favorites.json").to be true
99
- end
100
-
101
- it 'loads user data' do
102
- user = Emojidex::Service::User.new
103
- user.authorize('test', '1798909355d57c9a93e3b82d275594e7c7c000db05021138')
104
- user.sync_favorites
105
- user.sync_history
106
- user.add_favorite('忍者') # just in case
107
- user.save(tmp_cache_path)
108
-
109
- # without syncing
110
- user = Emojidex::Service::User.new
111
- user.load(tmp_cache_path)
112
- expect(user.username).to eq 'test'
113
- expect(user.authorized?).to be true
114
- expect(user.favorites.emoji.count > 0).to be true
115
- expect(user.history.length > 0).to be true
116
-
117
- # with syncing
118
- user = Emojidex::Service::User.new
119
- user.load(tmp_cache_path, false)
120
- expect(user.username).to eq 'test'
121
- expect(user.authorized?).to be false
122
- expect(user.status).to be :loaded
123
- expect(user.favorites.emoji.count > 0).to be true
124
- expect(user.history.length > 0).to be true
125
- end
126
-
127
- end
128
- end
@@ -1,18 +0,0 @@
1
- require 'rspec'
2
- require 'emojidex'
3
- require 'emojidex/data/collection'
4
- require 'emojidex/vectors'
5
-
6
- def sample_collection(name)
7
- e = Emojidex::Data::Collection.new
8
- e.load_local_collection(File.expand_path("../support/sample_collections/#{name}", __FILE__))
9
- e
10
- end
11
-
12
- def tmp_cache_path
13
- tmp_cache_path = File.expand_path('../tmp/samplecache', __FILE__)
14
- end
15
-
16
- def clear_tmp_cache
17
- FileUtils.rm_rf tmp_cache_path if Dir.exist? tmp_cache_path
18
- end
@@ -1,126 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
-
4
- <svg
5
- xmlns:dc="http://purl.org/dc/elements/1.1/"
6
- xmlns:cc="http://creativecommons.org/ns#"
7
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
- xmlns:svg="http://www.w3.org/2000/svg"
9
- xmlns="http://www.w3.org/2000/svg"
10
- xmlns:xlink="http://www.w3.org/1999/xlink"
11
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
- width="64px"
14
- height="64px"
15
- id="svg3713"
16
- version="1.1"
17
- inkscape:version="0.48.2 r9819"
18
- sodipodi:docname="genshin-logo-revised-s2.svg"
19
- inkscape:export-filename="/home/zero/デスクトップ/genshin-logo-revised-s2.png"
20
- inkscape:export-xdpi="90.349998"
21
- inkscape:export-ydpi="90.349998">
22
- <defs
23
- id="defs3715">
24
- <linearGradient
25
- id="linearGradient4528">
26
- <stop
27
- style="stop-color:#d70b3a;stop-opacity:1;"
28
- offset="0"
29
- id="stop4530" />
30
- <stop
31
- style="stop-color:#d70b3a;stop-opacity:0;"
32
- offset="1"
33
- id="stop4532" />
34
- </linearGradient>
35
- <radialGradient
36
- inkscape:collect="always"
37
- xlink:href="#linearGradient4528"
38
- id="radialGradient4534"
39
- cx="31.954546"
40
- cy="32.045456"
41
- fx="31.954546"
42
- fy="32.045456"
43
- r="31.863636"
44
- gradientUnits="userSpaceOnUse"
45
- gradientTransform="matrix(0.9985415,-1.6601007e-5,1.6156097e-5,0.97684882,0.04608723,0.74242019)" />
46
- </defs>
47
- <sodipodi:namedview
48
- id="base"
49
- pagecolor="#ffffff"
50
- bordercolor="#666666"
51
- borderopacity="1.0"
52
- inkscape:pageopacity="0.0"
53
- inkscape:pageshadow="2"
54
- inkscape:zoom="5.6568543"
55
- inkscape:cx="-54.952613"
56
- inkscape:cy="18.847043"
57
- inkscape:current-layer="g3"
58
- showgrid="true"
59
- inkscape:document-units="px"
60
- inkscape:grid-bbox="true"
61
- inkscape:window-width="1920"
62
- inkscape:window-height="999"
63
- inkscape:window-x="0"
64
- inkscape:window-y="26"
65
- inkscape:window-maximized="1" />
66
- <metadata
67
- id="metadata3718">
68
- <rdf:RDF>
69
- <cc:Work
70
- rdf:about="">
71
- <dc:format>image/svg+xml</dc:format>
72
- <dc:type
73
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
74
- <dc:title></dc:title>
75
- </cc:Work>
76
- </rdf:RDF>
77
- </metadata>
78
- <g
79
- id="layer1"
80
- inkscape:label="Layer 1"
81
- inkscape:groupmode="layer">
82
- <g
83
- transform="matrix(0.57354429,0,0,0.57354429,-9.3948988,-4.8771052)"
84
- id="g3"
85
- style="fill:#eaf4fc;fill-opacity:1"
86
- inkscape:export-filename="/home/zero/repo/genshin.org/public/images/logo.png"
87
- inkscape:export-xdpi="899.45599"
88
- inkscape:export-ydpi="899.45599">
89
- <path
90
- style="fill:#000b00;fill-opacity:1"
91
- inkscape:connector-curvature="0"
92
- d="M 25.836,60.884 C 24.166,40.446 48.553,29.302 56.569,21.716 -18.048,34.763 21.127285,141.272 92.968,116.101 55.66,114.913 61,104.364 53.038,102.823 34.947,99.318 23.875,84.208 23.875,77.524 c 0,-5.82 3.127,-11.227 1.961,-16.64 z"
93
- id="path5"
94
- sodipodi:nodetypes="ccccsc" />
95
- <path
96
- style="fill:#000b00;fill-opacity:1"
97
- inkscape:connector-curvature="0"
98
- d="m 113.716,93.582 c -2.866,6.521 -6.899,12.655 -12.102,18.097 14.903,-9.178 23.524,-23.791 25.886,-39.501 -2.569,7.972 -7.767,15.337 -13.784,21.404 z"
99
- id="path7" />
100
- <path
101
- style="fill:#000b00;fill-opacity:1"
102
- inkscape:connector-curvature="0"
103
- d="M 103.22,17.748 C 90.066,15.033 74.921,11.61 64.736,17.282 47.742,14.826 29.859,28.196 27.575,30.997 49.169,1.381 87.748,5.928 103.22,17.748 z"
104
- id="path9" />
105
- </g>
106
- <g
107
- transform="matrix(0.57354429,0,0,0.57354429,-9.3948988,-4.8771052)"
108
- id="g19"
109
- style="fill:#d7003a;fill-opacity:1"
110
- inkscape:export-filename="/home/zero/repo/genshin.org/public/images/logo.png"
111
- inkscape:export-xdpi="899.45599"
112
- inkscape:export-ydpi="899.45599">
113
- <path
114
- style="fill:#d7003a;fill-opacity:1"
115
- inkscape:connector-curvature="0"
116
- d="M 51.111,43.19 C 58.462774,38.269206 66.017957,33.761108 74,28.841 l 0,-4.095 c -8.247318,5.125197 -15.321401,9.30897 -22.829,14.275 -8.797,5.749 -14.357,9.711 -14.357,16.446 0,5.879 4.211,9.647 11.136,14.334 C 46.919651,70.483832 45.873425,71.246791 45,71.879 40,75.676 36.801,79 36.801,84 l -0.004,0 -10e-4,-0.047 c 0,0.011 0.003,4.047 4.094,4.047 4.095,0 20.477,0 20.477,0 0,0 2.566,-0.008 3.633,-1.999 l 0,16.469 c 0,0 9,-4.095 9,-12.287 0,-8.191 0,-15.061 0,-15.061 C 74,75.122 73.654,71 69.558,71 65.462,71 65,71 65,71 l 0,13 -20.016,0 c 0,-6 0.007,-7.794 6.247,-12.221 2.081315,-1.349288 4.033477,-2.724396 5.769,-4.064 5,-3.797 8,-7.267 8,-12.252 L 65,51 57,51 c -0.07924,1.223929 0.04302,3.037425 0.136,4 0,7 0.061,8.075 -6.077,12.445 -6.143,-4.371 -6.109,-5.598 -6.109,-12.099 0,-6.501 0.017,-7.784 6.161,-12.156 z"
117
- id="path21"
118
- sodipodi:nodetypes="ccccscccccscccscsccccccsccccc" />
119
- <path
120
- style="fill:#d7003a;fill-opacity:1"
121
- inkscape:connector-curvature="0"
122
- d="m 116.841,37 c 0,0 -0.08,-4.199 -4.175,-4.199 -4.096,0 -4.142,-0.052 -16.428,8.14 C 92.937,43.141 90,44.684 88,45.861 V 27.106 C 88,27.106 88.014,23 83.917,23 80.264,23 80.012,23 80,23 v 26 4.176 c 4,0 3.761,0 16.048,-8.191 7.257,-4.838 9.952,-6.818 11.952,-7.629 0,3.689 0,24.739 0,32.203 0,8.19 0.358,8.19 -11.928,16.381 C 83.785,94.132 78,98.228 78,98.228 v 4.095 c 0,0 6.189,-4.095 18.477,-12.288 C 108.763,81.844 117,77.749 117,69.558 117,61.366 117,37 117,37 h -0.159 z"
123
- id="path23" />
124
- </g>
125
- </g>
126
- </svg>
@@ -1,177 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="_x30_1_12_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- width="64px" height="64px" viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
6
- <g>
7
- <g>
8
- <g>
9
- <path fill="#FFB997" d="M47.156,8.059c-2.125,5.375,3.375,11.375,2.125,14.375s-7.875,4.375-7.875,4.375
10
- s-2.125,2.375,1.125,6.625c0,0-5.406,6.711,10.718,18.589c7.145,5.247,21.196-5.503,21.196-5.503V8.059H47.156z"/>
11
- <path fill="none" stroke="#190902" stroke-width="3" stroke-miterlimit="10" d="M47.156,8.059
12
- c-2.125,5.375,3.375,11.375,2.125,14.375s-7.875,4.375-7.875,4.375s-2.125,2.375,1.125,6.625c0,0-5.406,6.711,10.718,18.589
13
- c7.145,5.247,21.196-5.503,21.196-5.503V8.059H47.156z"/>
14
- </g>
15
- <defs>
16
- <filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="39.224" y="6.559" width="36.722" height="48.408">
17
-
18
- <feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" color-interpolation-filters="sRGB" result="source"/>
19
- </filter>
20
- </defs>
21
- <mask maskUnits="userSpaceOnUse" x="39.224" y="6.559" width="36.722" height="48.408" id="SVGID_1_">
22
- <g filter="url(#Adobe_OpacityMaskFilter)">
23
-
24
- <image overflow="visible" width="41" height="53" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
25
- EAMCAwYAAAG9AAACJQAAArv/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
26
- Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
27
- JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIADUAKQMBIgACEQEDEQH/
28
- xACHAAACAwEBAAAAAAAAAAAAAAAABwQFBgECAQEAAAAAAAAAAAAAAAAAAAAAEAAABgIBBQEAAAAA
29
- AAAAAAABAgMEBQYAEBIwExU1BxYRAAIABQICCgMAAAAAAAAAAAECABARIQNBEjETUWFxkaEiYnIz
30
- BIEjFBIBAAAAAAAAAAAAAAAAAAAAMP/aAAwDAQACEQMRAAAAX+gz7LKjjMBOUbQV5MZuWZ50AySs
31
- aasNE2kIwTfEaMUat1OWD0Bf1gEEA//aAAgBAgABBQDqf//aAAgBAwABBQDqf//aAAgBAQABBQDI
32
- yqLP0w+duBwfnjgAl6yrGJaoDkq7TV9TKEfkfFupBSn100Q31fvWZQTcnIAABq/esymyJGj9FUqq
33
- er8YPHYQ5iGq1wTMVN+2UK8m2TUlpspJAdJ9zm1/T9l/5Xlr/9oACAECAgY/AE//2gAIAQMCBj8A
34
- T//aAAgBAQEGPwCFcORUaR8jdwj5G7hDZGYnb0zCm7JY/ieRgNJbMAtWhJgtkNcmS7Hrnk9snxst
35
- VBBB7YAE8ntly3sHuDCupqCJ5B6ZB0O1lNQRC/V+yaOBS+sBg4pBLOKjrhsGLzKbFtJry676+WnG
36
- sfrrt9XHwg/2czXjXb4T/9k=" transform="matrix(1 0 0 1 37 4)">
37
- </image>
38
- </g>
39
- </mask>
40
- <g opacity="0.36" mask="url(#SVGID_1_)">
41
- <path fill="#FF1744" d="M47.156,8.059c-2.125,5.375,3.375,11.375,2.125,14.375s-7.875,4.375-7.875,4.375
42
- s-2.125,2.375,1.125,6.625c0,0-5.406,6.711,10.718,18.589c7.145,5.247,21.196-5.503,21.196-5.503V8.059H47.156z"/>
43
- <path fill="none" stroke="#FF1744" stroke-width="3" stroke-miterlimit="10" d="M47.156,8.059
44
- c-2.125,5.375,3.375,11.375,2.125,14.375s-7.875,4.375-7.875,4.375s-2.125,2.375,1.125,6.625c0,0-5.406,6.711,10.718,18.589
45
- c7.145,5.247,21.196-5.503,21.196-5.503V8.059H47.156z"/>
46
- </g>
47
- </g>
48
- <polygon fill="#160201" points="53.757,18.434 60.394,22.999 54.375,14.521 "/>
49
- <g>
50
- <defs>
51
- <filter id="Adobe_OpacityMaskFilter_1_" filterUnits="userSpaceOnUse" x="55.268" y="25.355" width="17.814" height="11.5">
52
- <feFlood style="flood-color:white;flood-opacity:1" result="back"/>
53
- <feBlend in="SourceGraphic" in2="back" mode="normal"/>
54
- </filter>
55
- </defs>
56
- <mask maskUnits="userSpaceOnUse" x="55.268" y="25.355" width="17.814" height="11.5" id="SVGID_2_">
57
- <g filter="url(#Adobe_OpacityMaskFilter_1_)">
58
-
59
- <image overflow="visible" width="23" height="16" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
60
- EAMCAwYAAAF7AAABnAAAAeH/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
61
- Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
62
- JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIABAAFwMBIgACEQEDEQH/
63
- xABsAAEBAQAAAAAAAAAAAAAAAAAGAAEBAQAAAAAAAAAAAAAAAAAAAAAQAAMBAQEAAAAAAAAAAAAA
64
- AAIDBQQQBhEAAwACAgMAAAAAAAAAAAAAARECABJRAyFyBBIBAAAAAAAAAAAAAAAAAAAAEP/aAAwD
65
- AQACEQMRAAAAKIjyILWx/9oACAECAAEFAOf/2gAIAQMAAQUA5//aAAgBAQABBQCNEOmTfCpFWiUz
66
- PQiWymG33aCVorM0b//aAAgBAgIGPwA//9oACAEDAgY/AD//2gAIAQEBBj8Ae2steM3BLXOdfx0W
67
- O25ia9iJxUHDbGGAC1wc6/roIdVzcz6nbP/Z" transform="matrix(1 0 0 1 53 23)">
68
- </image>
69
- </g>
70
- </mask>
71
- <g mask="url(#SVGID_2_)">
72
- <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="58.9609" y1="23.7437" x2="71.1666" y2="40.9757">
73
- <stop offset="0" style="stop-color:#FFA67F"/>
74
- <stop offset="0.0969" style="stop-color:#FF967B"/>
75
- <stop offset="0.3655" style="stop-color:#FF7170"/>
76
- <stop offset="0.6143" style="stop-color:#FF5568"/>
77
- <stop offset="0.8336" style="stop-color:#FF4564"/>
78
- <stop offset="1" style="stop-color:#FF3F62"/>
79
- </linearGradient>
80
- <ellipse fill="url(#SVGID_3_)" cx="64.175" cy="31.104" rx="8.907" ry="5.751"/>
81
- </g>
82
- </g>
83
- <path fill="#3E3A39" stroke="#000000" stroke-width="3" d="M46.852-3.604L34.977,1.521l4.837,1.052c0,0-4.212,4.073-1.837,10.448
84
- l1.837-2.5c0,0,1.532,4.032,5.4,6.875l0.638-6.375c0,0,10.725,6.375,15.625,9l0.5-7c0,0,4.494,13.75,6,18.085l5.125-8.835
85
- l2.375,0.25L75.352-3.604H46.852z"/>
86
- <path fill="#160201" d="M52.335,21.921l0.35,3.396c0,0,3.108,2.328,6.565,0.839C59.25,26.157,56.684,25.355,52.335,21.921z"/>
87
- </g>
88
- <g>
89
- <g>
90
- <g>
91
- <path fill="#FFB997" d="M20.397,7.396c2.125,5.375-1.65,12.039-0.4,15.039s5.502,3.019,5.502,3.019s2.104,2.404-0.023,6.443
92
- c0,0,4.398,6.125-2.352,14.75c-14.264,18.227-37-4.625-37-4.625l8.708-33.961L20.397,7.396z"/>
93
- <path fill="none" stroke="#3A0101" stroke-width="3" stroke-miterlimit="10" d="M20.397,7.396
94
- c2.125,5.375-1.65,12.039-0.4,15.039s5.502,3.019,5.502,3.019s2.104,2.404-0.023,6.443c0,0,4.398,6.125-2.352,14.75
95
- c-14.264,18.227-37-4.625-37-4.625l8.708-33.961L20.397,7.396z"/>
96
- </g>
97
- <defs>
98
- <filter id="Adobe_OpacityMaskFilter_2_" filterUnits="userSpaceOnUse" x="-15.54" y="5.869" width="43.925" height="49.331">
99
-
100
- <feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" color-interpolation-filters="sRGB" result="source"/>
101
- </filter>
102
- </defs>
103
- <mask maskUnits="userSpaceOnUse" x="-15.54" y="5.869" width="43.925" height="49.331" id="SVGID_4_">
104
- <g filter="url(#Adobe_OpacityMaskFilter_2_)">
105
-
106
- <image overflow="visible" width="49" height="55" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
107
- EAMCAwYAAAHEAAACRAAAAwL/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
108
- Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
109
- JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIADcAMQMBIgACEQEDEQH/
110
- xACHAAEBAAIDAQAAAAAAAAAAAAAABwUGAgMEAQEBAAAAAAAAAAAAAAAAAAAAABAAAQQCAgMBAAAA
111
- AAAAAAAAAQIDBAUABhAHQBIUMREBAAEDAgIIBwEAAAAAAAAAAQIAEQMQITESIEFRgZEiEwRhobHR
112
- QtIzBRIBAAAAAAAAAAAAAAAAAAAAQP/aAAwDAQACEQMRAAAAn/v8FIMRzpYkutWKOgHOzyizncDE
113
- SO5Ts0QGz1eE0U3N0dp9nu3yYxgHIM3kwwONAD//2gAIAQIAAQUA8D//2gAIAQMAAQUA8D//2gAI
114
- AQEAAQUAyrqJFmtvr6StJ67kZYaa/CaIIPHX9eBEAA42wpRWkknGWy67rkQRq7jZKxVlXWVVKrXM
115
- 12N9NrFbDbHH7nYbXoM0dDf3oIKeew5DakZCnSIL2u7nHkIZmR3h7pGWtzGhM3tquzmcI9/aBO2Z
116
- jFXm2lNnIuHzx//aAAgBAgIGPwAH/9oACAEDAgY/AAf/2gAIAQEBBj8ApjhbA2WhckjuK/rLwKlk
117
- ZrYpHicdTNIvzebxrbTJPg8rvSvF3dIYz85Bt8WscQtsa5MEWzIS5TDObXsSNMMd7ReZqEDqOhFj
118
- EsyLukskncsBQnC3QMY+ZkbaGXBKycTqaMWeXLMsI0MJjer3Kksy9qlkvfGPl++pyX5+rl4/Kj0c
119
- OfLHs9Ob9CrP+f7gO30sn61f32PLjj2ShKJ331//2Q==" transform="matrix(1 0 0 1 -18 3)">
120
- </image>
121
- </g>
122
- </mask>
123
- <g opacity="0.36" mask="url(#SVGID_4_)">
124
- <path fill="#FF1744" d="M20.397,7.396c2.125,5.375-1.65,12.039-0.4,15.039s5.502,3.019,5.502,3.019s2.104,2.404-0.023,6.443
125
- c0,0,4.398,6.125-2.352,14.75c-14.264,18.227-37-4.625-37-4.625l8.708-33.961L20.397,7.396z"/>
126
- <path fill="none" stroke="#FF1744" stroke-width="3" stroke-miterlimit="10" d="M20.397,7.396
127
- c2.125,5.375-1.65,12.039-0.4,15.039s5.502,3.019,5.502,3.019s2.104,2.404-0.023,6.443c0,0,4.398,6.125-2.352,14.75
128
- c-14.264,18.227-37-4.625-37-4.625l8.708-33.961L20.397,7.396z"/>
129
- </g>
130
- </g>
131
- <path fill="#8E480E" d="M16.785,14.016c0,0-3.604,1.261-5.823,2.135c-2.218,0.875-4.905,1.283-4.905,1.283s6.335-0.249,7.463-0.533
132
- C14.647,16.618,16.785,14.016,16.785,14.016z"/>
133
- <path fill="#160201" d="M17.115,21.189l-2.555,3.899c0,0-4.618,1.358-6.084-1.173C8.476,23.916,13.041,24.251,17.115,21.189z"/>
134
- <g>
135
- <defs>
136
- <filter id="Adobe_OpacityMaskFilter_3_" filterUnits="userSpaceOnUse" x="-0.82" y="26.344" width="16.482" height="10.354">
137
- <feFlood style="flood-color:white;flood-opacity:1" result="back"/>
138
- <feBlend in="SourceGraphic" in2="back" mode="normal"/>
139
- </filter>
140
- </defs>
141
- <mask maskUnits="userSpaceOnUse" x="-0.82" y="26.344" width="16.482" height="10.354" id="SVGID_5_">
142
- <g filter="url(#Adobe_OpacityMaskFilter_3_)">
143
-
144
- <image overflow="visible" width="21" height="15" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
145
- EAMCAwYAAAGJAAABqQAAAfr/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
146
- Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
147
- JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAA8AFQMBIgACEQEDEQH/
148
- xAB5AAADAQAAAAAAAAAAAAAAAAAABQYBAQEAAAAAAAAAAAAAAAAAAAAAEAACAgIDAQAAAAAAAAAA
149
- AAADBQIEEBQBExUGEQACAQIEBgMAAAAAAAAAAAABAhEAEiExAwRBYXGxMhSyEwUSAQAAAAAAAAAA
150
- AAAAAAAAABD/2gAMAwEAAhEDEQAAAJh/PvyVMD//2gAIAQIAAQUAx//aAAgBAwABBQDH/9oACAEB
151
- AAEFAEKLlpO38KAQfNJvorzOpO2/fzD33t//2gAIAQICBj8AP//aAAgBAwIGPwA//9oACAEBAQY/
152
- AJZoQGIHGi6MQ0ZzXpTjPlyqdpt9TcITiNNGb4iip/M3S4ZtpOB2r7rG9iZstN3SM6//2Q==" transform="matrix(1 0 0 1 -3 24)">
153
- </image>
154
- </g>
155
- </mask>
156
- <g mask="url(#SVGID_5_)">
157
- <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="2.6548" y1="24.7915" x2="13.8115" y2="40.5427">
158
- <stop offset="0" style="stop-color:#FFA67F"/>
159
- <stop offset="0.0969" style="stop-color:#FF967B"/>
160
- <stop offset="0.3655" style="stop-color:#FF7170"/>
161
- <stop offset="0.6143" style="stop-color:#FF5568"/>
162
- <stop offset="0.8336" style="stop-color:#FF4564"/>
163
- <stop offset="1" style="stop-color:#FF3F62"/>
164
- </linearGradient>
165
- <ellipse fill="url(#SVGID_6_)" cx="7.421" cy="31.521" rx="8.241" ry="5.177"/>
166
- </g>
167
- </g>
168
- <path fill="#8E480E" stroke="#4C2101" stroke-width="2.8682" stroke-miterlimit="10" d="M0.791,17.044
169
- c0,0-1.562,36.691,2.299,43.508c0,0-11.708-2.723-16.34-23.697l-3.375-24.492L0.791,17.044z"/>
170
- <path fill="#8E480E" stroke="#4C2101" stroke-width="3" stroke-miterlimit="10" d="M14.658,3.521c0,0-7.395,24-13.145,28.75
171
- s-11.25,5.75-11.25,5.75l1.302-40h19.448C11.013-1.979,13.552-1.479,14.658,3.521z"/>
172
- <path fill="#8E480E" stroke="#4C2101" stroke-width="3" stroke-miterlimit="10" d="M12.495,2.896c0,0,5.505,11.875,11.505,15.5
173
- c0,0,2.885-8.875,0-15c-2.189-4.649-4.481-6.5-4.481-6.5H8.289L12.495,2.896z"/>
174
- <path fill="#160201" d="M19.519,23.321c0,0-2.885,0.813-3.942-0.931l-1.308,2.192C14.269,24.582,17.769,25.121,19.519,23.321z"/>
175
- <path fill="#160201" d="M12.795,24.658c3.21,0.784,3.213,0.637,4.319,0.795l-2.457-2.132L12.795,24.658z"/>
176
- </g>
177
- </svg>