mumuki-gobstones-runner 2.7.1 → 2.8.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/lib/assets_server.rb +21 -1
  3. data/lib/checker.rb +2 -2
  4. data/lib/game_framework/default.gbs.erb +3 -0
  5. data/lib/game_framework/default.xml.erb +3 -0
  6. data/lib/game_framework/extra.gbs.erb +84 -0
  7. data/lib/game_framework/program.gbs.erb +5 -0
  8. data/lib/game_framework/program.xml.erb +17 -0
  9. data/lib/gobstones.rb +1 -0
  10. data/lib/gobstones/batch.rb +4 -2
  11. data/lib/gobstones/batch_parser.rb +5 -1
  12. data/lib/gobstones/compilation_mode.rb +60 -0
  13. data/lib/gobstones_runner.rb +3 -1
  14. data/lib/public/full-kindergarten-toolbox.xml +5 -0
  15. data/lib/public/local-media/bool-false.svg +24 -0
  16. data/lib/public/local-media/bool-true.svg +17 -0
  17. data/lib/public/local-media/clean.png +0 -0
  18. data/lib/public/local-media/color-azul.svg +44 -0
  19. data/lib/public/local-media/color-negro.svg +44 -0
  20. data/lib/public/local-media/color-rojo.svg +44 -0
  21. data/lib/public/local-media/color-verde.svg +44 -0
  22. data/lib/public/local-media/direccion-este.svg +38 -0
  23. data/lib/public/local-media/direccion-norte.svg +38 -0
  24. data/lib/public/local-media/direccion-oeste.svg +38 -0
  25. data/lib/public/local-media/direccion-sur.svg +38 -0
  26. data/lib/public/local-media/hand.png +0 -0
  27. data/lib/public/local-media/main-procedure.png +0 -0
  28. data/lib/public/local-media/minus.png +0 -0
  29. data/lib/public/local-media/plus.png +0 -0
  30. data/lib/public/local-media/program.png +0 -0
  31. data/lib/public/local-media/repeticion-simple.png +0 -0
  32. data/lib/public/media/1x1.gif +0 -0
  33. data/lib/public/media/ShiftDown.png +0 -0
  34. data/lib/public/media/ShiftLeft.png +0 -0
  35. data/lib/public/media/ShiftRight.png +0 -0
  36. data/lib/public/media/ShiftUp.png +0 -0
  37. data/lib/public/media/click.mp3 +0 -0
  38. data/lib/public/media/click.ogg +0 -0
  39. data/lib/public/media/click.wav +0 -0
  40. data/lib/public/media/delete.mp3 +0 -0
  41. data/lib/public/media/delete.ogg +0 -0
  42. data/lib/public/media/delete.wav +0 -0
  43. data/lib/public/media/disconnect.mp3 +0 -0
  44. data/lib/public/media/disconnect.ogg +0 -0
  45. data/lib/public/media/disconnect.wav +0 -0
  46. data/lib/public/media/quote0.png +0 -0
  47. data/lib/public/media/quote1.png +0 -0
  48. data/lib/public/media/sprites.png +0 -0
  49. data/lib/public/media/sprites.svg +74 -0
  50. data/lib/public/minimal-kindergarten-toolbox.xml +2 -0
  51. data/lib/render/boards.html.erb +4 -6
  52. data/lib/render/editor/editor.css +9 -0
  53. data/lib/render/editor/{editor.html → editor.html.erb} +143 -18
  54. data/lib/render/html_renderer.rb +2 -2
  55. data/lib/render/with_renderer.rb +6 -3
  56. data/lib/version_hook.rb +1 -1
  57. metadata +91 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d96082c599e490cc9fb4852f5abeb3e1d1028dae114a164439c012de51b21f0f
4
- data.tar.gz: 0ec06a7c118e46a253a6b1c5629743f06557df5a2a08c659a70316b22e2c36d9
3
+ metadata.gz: b81904b19b4ecb207d1b52ffec98b8cd617b83f47eb02ec37b4fdd33f7087db4
4
+ data.tar.gz: ad185dffbfc9c311578b2f4ab5a71f0b42cf4bd2110563ede627e4050d1280d8
5
5
  SHA512:
6
- metadata.gz: 1de5ceb45cd458d6ab9f9d15ee9e43a58b020892334986b890f52383e11d5bfa3cc4055d4e5a70f56a5a571c52308bf7a3207da2fbb22be159f3cc46d34544d5
7
- data.tar.gz: 3926c4c075c955982333d363b3423cecc9cc77ff52249fd9147c58fc9943499a74dd0b63dd4cfa43f3df66a5b2b27652a840b53a9a1fe2f4cdbe432752ee78c2
6
+ metadata.gz: a9f6ac4c47444e5ff26c1151d19a120dd797bf16d394518399157be3eda926b869064b9536ee940c0587168bea17b2e492dad48678460cb9f5558fd5ecc1909f
7
+ data.tar.gz: 87e3b5464e1daf5027c0f84e9fe806076f343542e0bd4ce1ca3bdea61ee345e7f46bc066bca4ca8267a8dad8dd7c9ce8581c5e6cb3b81a35042b8c088f1fa643
@@ -17,6 +17,13 @@ class Mumukit::Server::App < Sinatra::Base
17
17
  get_local_asset "#{asset_type}/#{name}.svg", "lib/public/#{name}.svg", 'image/svg+xml'
18
18
  end
19
19
 
20
+ def self.get_media_assets(folder)
21
+ Dir.glob(File.join(__dir__,"../lib/public/#{folder}/*")).each do |path|
22
+ relative_media_asset_path = "#{folder}/#{File.basename path}"
23
+ get_local_asset relative_media_asset_path, "lib/public/#{relative_media_asset_path}"
24
+ end
25
+ end
26
+
20
27
  ['polymer', 'polymer-mini', 'polymer-micro'].each { |name|
21
28
  get_board_asset "#{name}.html", "htmls/vendor/#{name}.html", 'text/html'
22
29
  }
@@ -29,9 +36,13 @@ class Mumukit::Server::App < Sinatra::Base
29
36
  get_local_asset 'layout/layout.html', 'lib/render/layout/layout.html', 'text/html'
30
37
  get_local_asset 'editor/editor.js', 'lib/render/editor/editor.js', 'application/javascript'
31
38
  get_local_asset 'editor/editor.css', 'lib/render/editor/editor.css', 'text/css'
32
- get_local_asset 'editor/editor.html', 'lib/render/editor/editor.html', 'text/html'
33
39
  get_local_asset 'editor/hammer.min.js', 'lib/render/editor/hammer.min.js', 'application/javascript'
34
40
  get_local_asset 'boom.png', 'lib/public/boom.png', 'image/png'
41
+ get_local_asset 'full-kindergarten-toolbox.xml', 'lib/public/full-kindergarten-toolbox.xml', 'text/plain'
42
+ get_local_asset 'minimal-kindergarten-toolbox.xml', 'lib/public/minimal-kindergarten-toolbox.xml', 'text/plain'
43
+
44
+ get_media_assets 'media'
45
+ get_media_assets 'local-media'
35
46
 
36
47
  ['red', 'blue', 'green', 'black'].each do |name|
37
48
  get_local_svg(name, 'editor')
@@ -40,4 +51,13 @@ class Mumukit::Server::App < Sinatra::Base
40
51
  ['attires_enabled', 'attires_disabled'].each do |name|
41
52
  get_local_svg(name, 'layout')
42
53
  end
54
+
55
+ get '/assets/editor/editor.html' do
56
+ cross_origin
57
+ @game_framework_extra = Gobstones::CompilationMode::GameFramework.extra_code
58
+ @game_framework_program = Gobstones::CompilationMode::GameFramework.program_code
59
+ @game_framework_default = Gobstones::CompilationMode::GameFramework.default_code
60
+ @assets_url = "//#{request.host_with_port}/assets"
61
+ erb File.read(File.join(__dir__, 'render/editor/editor.html.erb'))
62
+ end
43
63
  end
@@ -49,7 +49,7 @@ module Gobstones
49
49
  fail_with status: :check_error_failed_another_reason,
50
50
  result: {
51
51
  reason: result[:finalBoardError],
52
- expected_code: expected
52
+ expected_code: I18n.t("code_#{expected}")
53
53
  } if reason_code != expected
54
54
  end
55
55
 
@@ -102,7 +102,7 @@ module Gobstones
102
102
  end
103
103
 
104
104
  def fail_with(error)
105
- fail error.to_json
105
+ fail error[:status], details: error[:result]
106
106
  end
107
107
 
108
108
  def board_json(board)
@@ -0,0 +1,3 @@
1
+ procedure Main() {
2
+
3
+ }
@@ -0,0 +1,3 @@
1
+ <block type="procedures_defnoreturnnoparams" x="30" y="30">
2
+ <field name="NAME">Main</field>
3
+ </block>
@@ -0,0 +1,84 @@
1
+ procedure Before() {
2
+ x := 0
3
+ y := 0
4
+
5
+ while(puedeMover(Sur)) {
6
+ x := x + 1
7
+ Mover(Sur)
8
+ }
9
+ while(puedeMover(Oeste)) {
10
+ y := y + 1
11
+ Mover(Oeste)
12
+ }
13
+
14
+ NextStage()
15
+
16
+ while(x > 0) {
17
+ x := x - 1
18
+ Mover(Norte)
19
+ }
20
+ while(y > 0) {
21
+ y := y - 1
22
+ Mover(Este)
23
+ }
24
+ }
25
+
26
+ procedure After() {
27
+ GoToOrigin()
28
+ NextStage()
29
+ }
30
+
31
+ procedure NextStage() {
32
+ while(puedeMover(Norte)) {
33
+ NextRowStage()
34
+ Mover(Norte)
35
+ }
36
+ NextRowStage()
37
+ GoToOrigin()
38
+ }
39
+
40
+ procedure NextRowStage() {
41
+ while(puedeMover(Este)) {
42
+ Poner(Verde)
43
+ Mover(Este)
44
+ }
45
+ Poner(Verde)
46
+ IrAlBorde(Oeste)
47
+ }
48
+
49
+ procedure ShiftLeft() {
50
+ ShiftTo(Oeste)
51
+ }
52
+
53
+ procedure ShiftRight() {
54
+ ShiftTo(Este)
55
+ }
56
+
57
+ procedure ShiftUp() {
58
+ ShiftTo(Norte)
59
+ }
60
+
61
+ procedure ShiftDown() {
62
+ ShiftTo(Sur)
63
+ }
64
+
65
+ procedure ShiftTo(dir) {
66
+ if (puedeMover(dir)) {
67
+ Sacar(Rojo)
68
+ Mover(dir)
69
+ Poner(Rojo)
70
+ CheckCollision()
71
+ }
72
+ }
73
+
74
+ procedure CheckCollision() {
75
+ if (hayBolitas(Azul) && nroBolitas(Azul) mod 2 == 0) {
76
+ After();
77
+ BOOM("Colision")
78
+ }
79
+ }
80
+
81
+ procedure GoToOrigin() {
82
+ IrAlBorde(Sur)
83
+ IrAlBorde(Oeste)
84
+ }
@@ -0,0 +1,5 @@
1
+ program {
2
+ Before()
3
+ Main()
4
+ After()
5
+ }
@@ -0,0 +1,17 @@
1
+ <block type="Program" deletable="false" x="189" y="177">
2
+ <statement name="program">
3
+ <block type="procedures_callnoreturnnoparams">
4
+ <mutation name="Before"></mutation>
5
+ <next>
6
+ <block type="procedures_callnoreturnnoparams">
7
+ <mutation name="Main"></mutation>
8
+ <next>
9
+ <block type="procedures_callnoreturnnoparams">
10
+ <mutation name="After"></mutation>
11
+ </block>
12
+ </next>
13
+ </block>
14
+ </next>
15
+ </block>
16
+ </statement>
17
+ </block>
@@ -8,5 +8,6 @@ end
8
8
 
9
9
  require_relative './gobstones/batch'
10
10
  require_relative './gobstones/batch_parser'
11
+ require_relative './gobstones/compilation_mode'
11
12
  require_relative './gobstones/error_builder'
12
13
  require_relative './gobstones/example_code_builder'
@@ -1,11 +1,13 @@
1
1
  class Gobstones::Batch
2
2
  attr_accessor :options, :examples, :content, :extra
3
+ delegate :compile_content, :compile_extra, to: :@compilation_mode
3
4
 
4
5
  def initialize(content, examples, extra, options)
5
6
  @content = content
6
7
  @examples = examples
7
8
  @extra = extra
8
9
  @options = options
10
+ @compilation_mode = @options[:game_framework] ? Gobstones::CompilationMode::GameFramework : Gobstones::CompilationMode::Classic
9
11
  end
10
12
 
11
13
  def run_tests!(output)
@@ -16,8 +18,8 @@ class Gobstones::Batch
16
18
 
17
19
  def to_json
18
20
  {
19
- code: content,
20
- extraCode: extra,
21
+ code: compile_content(content),
22
+ extraCode: compile_extra(extra),
21
23
  examples: examples.map { |example| example_json(example) }
22
24
  }.to_json
23
25
  end
@@ -3,7 +3,7 @@ module Gobstones::BatchParser
3
3
  def parse(request)
4
4
  test = parse_test(request)
5
5
 
6
- options = parse_options test
6
+ options = parse_options(test).merge(parse_settings(request))
7
7
  examples = parse_examples test, options
8
8
 
9
9
  Gobstones::Batch.new request.content, examples, request.extra, options
@@ -11,6 +11,10 @@ module Gobstones::BatchParser
11
11
 
12
12
  private
13
13
 
14
+ def parse_settings(request)
15
+ { game_framework: !!request.dig(:settings, 'game_framework') }
16
+ end
17
+
14
18
  def parse_test(request)
15
19
  YAML.load(request.test).deep_symbolize_keys
16
20
  end
@@ -0,0 +1,60 @@
1
+ module Gobstones
2
+ module CompilationMode
3
+ module Classic
4
+ class << self
5
+ def compile_extra(extra)
6
+ extra
7
+ end
8
+
9
+ def compile_content(content)
10
+ content
11
+ end
12
+ end
13
+ end
14
+
15
+ module GameFramework
16
+ class << self
17
+ def compile_extra(extra)
18
+ [extra, extra_code]
19
+ end
20
+
21
+ def compile_content(content)
22
+ if blockly_code?(content)
23
+ xml = Nokogiri::XML(content)
24
+ xml.root.add_child render_framework_file('program.xml')
25
+ xml.to_xhtml.gsub(/\n\s*/, '')
26
+ else
27
+ <<~GBS
28
+ #{content}
29
+
30
+ #{program_code}
31
+ GBS
32
+ .chop
33
+ end
34
+ end
35
+
36
+ def extra_code
37
+ render_framework_file 'extra.gbs'
38
+ end
39
+
40
+ def program_code
41
+ render_framework_file 'program.gbs'
42
+ end
43
+
44
+ def default_code
45
+ render_framework_file 'default.xml'
46
+ end
47
+
48
+ private
49
+
50
+ def blockly_code?(content)
51
+ content.strip.start_with? '<xml'
52
+ end
53
+
54
+ def render_framework_file(name)
55
+ ERB.new(File.read(File.join(__dir__, "../game_framework/#{name}.erb"))).result
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,13 +1,15 @@
1
1
  require 'mumukit'
2
2
  require 'erb'
3
+ require 'nokogiri'
3
4
 
4
5
  I18n.load_translations_path File.join(__dir__, 'locales', '*.yml')
5
6
 
6
7
  Mumukit.runner_name = 'gobstones'
7
8
  Mumukit.configure do |config|
8
- config.docker_image = 'mumuki/mumuki-gobstones-worker:9.0'
9
+ config.docker_image = 'mumuki/mumuki-gobstones-worker:9.1'
9
10
  config.content_type = 'html'
10
11
  config.structured = true
12
+ config.settings = true
11
13
  end
12
14
 
13
15
  require_relative './gobstones'
@@ -0,0 +1,5 @@
1
+ <category name="Bloques de Gobstones">
2
+ <block type="RepeticionSimple"></block>
3
+ </category>
4
+ <category name="Procedimientos primitivos"></category>
5
+ <category name="Funciones primitivas"></category>
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, 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" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="14.173px" height="14.173px" viewBox="0 0 14.173 14.173" enable-background="new 0 0 14.173 14.173" xml:space="preserve">
6
+ <g id="Layer_2" display="none">
7
+ <g display="inline">
8
+ <rect x="-5.132" y="-3.933" fill="#5CBEFF" width="67.306" height="25.396"/>
9
+ </g>
10
+ </g>
11
+ <g id="Layer_3" display="none">
12
+ </g>
13
+ <g id="Layer_1">
14
+
15
+ <line fill="#FFFFFF" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="3.836" y1="3.836" x2="10.336" y2="10.336"/>
16
+
17
+ <line fill="#FFFFFF" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="10.336" y1="3.836" x2="3.836" y2="10.336"/>
18
+ </g>
19
+ <g id="Layer_4" display="none">
20
+
21
+ <polyline display="inline" fill="none" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
22
+ 10.958,4.801 6.388,9.372 3.215,6.094 "/>
23
+ </g>
24
+ </svg>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, 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" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="14.173px" height="14.173px" viewBox="0 0 14.173 14.173" enable-background="new 0 0 14.173 14.173" xml:space="preserve">
6
+ <g id="Layer_2" display="none">
7
+ <g display="inline">
8
+ <rect x="-5.132" y="-3.933" fill="#5CBEFF" width="67.306" height="25.396"/>
9
+ </g>
10
+ </g>
11
+ <g id="Layer_3" display="none">
12
+ </g>
13
+ <g id="Layer_1">
14
+ <polyline fill="none" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
15
+ 10.958,4.801 6.388,9.372 3.215,6.094 "/>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, 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" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="14.173px" height="14.173px" viewBox="0 0 14.173 14.173" enable-background="new 0 0 14.173 14.173" xml:space="preserve">
6
+ <g id="Layer_2" display="none">
7
+ <g display="inline">
8
+ <rect x="-5.132" y="-3.933" fill="#5CBEFF" width="67.306" height="25.396"/>
9
+ </g>
10
+ </g>
11
+ <g id="Layer_3" display="none">
12
+ </g>
13
+ <g id="Layer_7">
14
+ </g>
15
+ <g id="Layer_1">
16
+
17
+ <circle fill="#1B75BB" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="7.087" cy="7.086" r="3.688"/>
18
+ </g>
19
+ <g id="Layer_6" display="none">
20
+ <g display="inline">
21
+ <g>
22
+
23
+ <path fill="#231F20" stroke="#231F20" stroke-width="0.9761" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
24
+ M7.082,3.701c0.021,1.21-0.007,5.512,0,6.771L0.889,7.086L7.082,3.701z"/>
25
+ </g>
26
+ <g>
27
+
28
+ <path fill="none" stroke="#231F20" stroke-width="0.9761" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
29
+ M7.09,3.701c-0.021,1.21,0.008,5.512,0,6.771l6.194-3.386L7.09,3.701z"/>
30
+ </g>
31
+ </g>
32
+ </g>
33
+ <g id="Layer_5" display="none">
34
+
35
+ <line display="inline" fill="#FFFFFF" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="3.836" y1="3.836" x2="10.336" y2="10.336"/>
36
+
37
+ <line display="inline" fill="#FFFFFF" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="10.336" y1="3.836" x2="3.836" y2="10.336"/>
38
+ </g>
39
+ <g id="Layer_4" display="none">
40
+
41
+ <polyline display="inline" fill="none" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
42
+ 10.958,4.801 6.388,9.372 3.215,6.094 "/>
43
+ </g>
44
+ </svg>
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, 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" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="14.173px" height="14.173px" viewBox="0 0 14.173 14.173" enable-background="new 0 0 14.173 14.173" xml:space="preserve">
6
+ <g id="Layer_2" display="none">
7
+ <g display="inline">
8
+ <rect x="-5.132" y="-3.933" fill="#5CBEFF" width="67.306" height="25.396"/>
9
+ </g>
10
+ </g>
11
+ <g id="Layer_3" display="none">
12
+ </g>
13
+ <g id="Layer_7">
14
+ </g>
15
+ <g id="Layer_1">
16
+
17
+ <circle fill="#404041" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="7.087" cy="7.086" r="3.688"/>
18
+ </g>
19
+ <g id="Layer_6" display="none">
20
+ <g display="inline">
21
+ <g>
22
+
23
+ <path fill="#231F20" stroke="#231F20" stroke-width="0.9761" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
24
+ M7.082,3.701c0.021,1.21-0.007,5.512,0,6.771L0.889,7.086L7.082,3.701z"/>
25
+ </g>
26
+ <g>
27
+
28
+ <path fill="none" stroke="#231F20" stroke-width="0.9761" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
29
+ M7.09,3.701c-0.021,1.21,0.008,5.512,0,6.771l6.194-3.386L7.09,3.701z"/>
30
+ </g>
31
+ </g>
32
+ </g>
33
+ <g id="Layer_5" display="none">
34
+
35
+ <line display="inline" fill="#FFFFFF" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="3.836" y1="3.836" x2="10.336" y2="10.336"/>
36
+
37
+ <line display="inline" fill="#FFFFFF" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="10.336" y1="3.836" x2="3.836" y2="10.336"/>
38
+ </g>
39
+ <g id="Layer_4" display="none">
40
+
41
+ <polyline display="inline" fill="none" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
42
+ 10.958,4.801 6.388,9.372 3.215,6.094 "/>
43
+ </g>
44
+ </svg>