scbi_blast 0.0.40 → 0.0.42
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.
- data/.gemtest +0 -0
- data/History.txt +8 -0
- data/README.rdoc +7 -3
- data/lib/scbi_blast.rb +1 -1
- data/lib/scbi_blast/batch_blast.rb +70 -13
- data/lib/scbi_blast/blast_table_result.rb +3 -0
- data/test/test_scbi_blast.rb +23 -2
- metadata +94 -49
- checksums.yaml +0 -7
data/.gemtest
ADDED
File without changes
|
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
|
5
5
|
== DESCRIPTION:
|
6
6
|
|
7
|
-
scbi_blast is a ruby gem to handle blast+ executions without the need of temporary files,
|
7
|
+
scbi_blast is a ruby gem to handle blast+ executions using pipes when possible to read data without the need of temporary files,
|
8
8
|
it has been developed at [SCBI](http://www.scbi.uma.es) by Almudena Bocinos & Dario Guerrero.
|
9
9
|
|
10
10
|
== FEATURES:
|
11
11
|
|
12
|
-
* Execute blast
|
12
|
+
* Execute blast (using pipe to read output). Pipes cannot be used for input since it will block if writing more 64kb.
|
13
13
|
* Parse XML and table results into Query and Hit objects
|
14
|
-
* Execute DustMasker without temporary files (using pipes)
|
14
|
+
* Execute DustMasker without temporary files (using pipes for both input and output)
|
15
15
|
|
16
16
|
== SYNOPSIS:
|
17
17
|
|
@@ -86,6 +86,10 @@ An example that shows how to use it to find dust into some sequences:
|
|
86
86
|
|
87
87
|
* NCBI blast+ already installed
|
88
88
|
|
89
|
+
== ENVIRONMENT
|
90
|
+
|
91
|
+
You can set the SCBI_BLAST_TMPDIR environment variable to choose where input temfiles should be written.
|
92
|
+
|
89
93
|
== INSTALL:
|
90
94
|
|
91
95
|
gem install scbi_blast
|
data/lib/scbi_blast.rb
CHANGED
@@ -31,7 +31,6 @@ class BatchBlast
|
|
31
31
|
@database = database
|
32
32
|
@extra_params = extra_params
|
33
33
|
|
34
|
-
|
35
34
|
end
|
36
35
|
|
37
36
|
# returns the blast cmd that will be used to launch blast
|
@@ -47,6 +46,13 @@ class BatchBlast
|
|
47
46
|
|
48
47
|
if !file.nil? and !file.empty?
|
49
48
|
out=" -out #{file}"
|
49
|
+
else
|
50
|
+
# if RUBY_PLATFORM.index('darwin')
|
51
|
+
# out =" | sed -l"
|
52
|
+
# else
|
53
|
+
# out =" | sed -l 0"
|
54
|
+
# end
|
55
|
+
# out =" | grep --line-buffered ''"
|
50
56
|
end
|
51
57
|
|
52
58
|
dust=''
|
@@ -111,17 +117,69 @@ class BatchBlast
|
|
111
117
|
res=''
|
112
118
|
if !seq_fasta.empty?
|
113
119
|
# Ojo, que una vez nos ibamos a volver locos buscando porque esto no devolvia todos los hits que se encontraban al ejecutar el blast a mano, y era porque en el blast a mano le estabamos pasando la secuencia completa mientras que en el MID le estabamos pasando solo los 20 primeros nt.
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
120
|
+
|
121
|
+
# Change the buffering type in factor command,
|
122
|
+
# assuming that factor uses stdio for stdout buffering.
|
123
|
+
# If IO.pipe is used instead of PTY.open,
|
124
|
+
# this code deadlocks because factor's stdout is fully buffered.
|
125
|
+
|
126
|
+
|
127
|
+
# require 'pty'
|
128
|
+
# require 'io/console' # for IO#raw!
|
129
|
+
# res = []
|
130
|
+
# m, s = PTY.open
|
131
|
+
# s.raw! # disable newline conversion.
|
132
|
+
# r, w = IO.pipe
|
133
|
+
# pid = spawn(cmd, :in=>r, :out=>s)
|
134
|
+
# r.close
|
135
|
+
# s.close
|
136
|
+
# w.puts seq_fasta
|
137
|
+
# w.close
|
138
|
+
# while !m.eof do
|
139
|
+
# res << m.gets
|
140
|
+
# end
|
141
|
+
|
142
|
+
|
143
|
+
|
144
|
+
# puts "="*60
|
145
|
+
# puts res
|
146
|
+
# puts "="*60
|
147
|
+
require 'tempfile'
|
148
|
+
if !ENV['SCBI_BLAST_TMPDIR'].nil?
|
149
|
+
file = Tempfile.new('scbi_blast_',ENV['SCBI_BLAST_TMPDIR'])
|
150
|
+
else
|
151
|
+
file = Tempfile.new('scbi_blast_')
|
152
|
+
end
|
153
|
+
begin
|
154
|
+
file.puts seq_fasta
|
155
|
+
file.close
|
156
|
+
|
157
|
+
res=`#{cmd} -query #{file.path}`
|
158
|
+
res=res.split("\n")
|
159
|
+
|
160
|
+
if !$?.exitstatus.nil? && $?.exitstatus>0
|
161
|
+
raise "Error doing blast #{cmd} to fasta: #{seq_fasta}"
|
162
|
+
end
|
163
|
+
|
164
|
+
# puts "FILEPATH"+file.path
|
165
|
+
ensure
|
166
|
+
file.close! # Closes the file handle. If the file wasn't unlinked
|
167
|
+
# because #unlink failed, then this method will attempt
|
168
|
+
# to do so again.
|
169
|
+
file.unlink # On Windows this silently fails.
|
124
170
|
end
|
171
|
+
|
172
|
+
# IO.popen(cmd,'w+') {|blast|
|
173
|
+
# blast.sync = true
|
174
|
+
# blast.write(seq_fasta)
|
175
|
+
# blast.close_write
|
176
|
+
# res = blast.readlines
|
177
|
+
# blast.close_read
|
178
|
+
# }
|
179
|
+
#
|
180
|
+
# if !$?.exitstatus.nil? && $?.exitstatus>0
|
181
|
+
# raise "Error doing blast #{cmd} to fasta: #{seq_fasta}"
|
182
|
+
# end
|
125
183
|
end
|
126
184
|
|
127
185
|
return res
|
@@ -131,8 +189,7 @@ class BatchBlast
|
|
131
189
|
# do blast to an array of Sequence objects
|
132
190
|
def do_blast_seqs(seqs, fmt = :table,parse_output=true, file=nil)
|
133
191
|
|
134
|
-
|
135
|
-
cmd = get_blast_cmd(fmt)
|
192
|
+
# cmd = get_blast_cmd(fmt)
|
136
193
|
|
137
194
|
fastas=[]
|
138
195
|
|
data/test/test_scbi_blast.rb
CHANGED
@@ -8,6 +8,8 @@ class TestScbiBlast < Test::Unit::TestCase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def test_blast
|
11
|
+
puts "TEST BLAST"
|
12
|
+
|
11
13
|
blast=BatchBlast.new('-db ~/progs/ruby/DB/formatted/mids.fasta -task blastn-short')
|
12
14
|
|
13
15
|
seqs=[">GFIJCBT03F4XVR","ACGCGTCTAGTGACTACACGACGACCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTNTTTTTNTTTTATTTTATTTTATTTATTATATATATATATATATATATATATATANNNNCNCACACANACACNNGAGNGNGNGNGAGNGAGNGAGTAGTAGTAGTAGTGTATATATACTACTACTACTACTACACACGACGACGTACGTACGTACGTACGTACGTACGTACGTACGTAACGTAAGTAAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTATATATATATATAGTAGTAGTAGTAGTAGTAGTAGTACGTACGTACGTACGTACGTACGTACGTACGACGACGACGACGACGACGACGACGAGATATATACTACTAACTAACTAACAACGTACGACGACGACGACGACGACGTACGTACGTACGTACGTACGTACTACTACTACTACGTACGTACGTACGTACGTACGTACGTACGTAGTAGTAGTAGTACGTACGTACGTCGTCGTCGTCGTCGTCGTCGTCGTACGTACGACGACGACGAGAGNGNGNNNNNNNNNNNN",">GFIJCBT03G3M1I","GACTACACGACGACTTTATTTATTATTTATTTATTTATTTATTTATTTATTTATTTATTTATTTTATTTTATTTTATTTTTATTTTTATTTTTATTTTTATTTTTTATTTTTTATTTTTTATTTTTTATTTTTTTATTTTTTTATTTTTTTATTTTTTTATTTTTTTTATTTTTTTTATTTTTTTTATTTTTTTTATTTTTTTTATTTTTTTTTATTTTTTTTTATTTTTTTTTAGTTTTTTTTTAGTTTTTTTTTAGTTTTTTTTTTAGTTTTTTTTTTAGTTTTTTTTTTAGTTTTTTTTTTTAGTTTTTTTTTTTAGTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTTACGTTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTTACGTTTTTTTTTTTTACGTTTTTTTTTTTTTACGTTTTTTTTTTTTTAGTTTTTTTTTTTTTACGTTTTTTTTTTTTACGTTTTTTTTTTTTTACGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTACGTTTTTTTTTTTTAGTTTTTTTTTTTTACGTTTTTTTTTTTTAGTTTTTTTTTTTTACGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTACGTTTTTTTTTTTTAGTTTTTTTTTTTTACGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTTTTTTTTNNNNNNNN"]
|
@@ -18,6 +20,7 @@ class TestScbiBlast < Test::Unit::TestCase
|
|
18
20
|
end
|
19
21
|
|
20
22
|
def test_blast_outfile
|
23
|
+
puts "TEST BLAST OUTFILE"
|
21
24
|
blast=BatchBlast.new('-db ~/progs/ruby/DB/formatted/mids.fasta -task blastn-short')
|
22
25
|
|
23
26
|
seqs=[">GFIJCBT03F4XVR","ACGCGTCTAGTGACTACACGACGACCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTNTTTTTNTTTTATTTTATTTTATTTATTATATATATATATATATATATATATATANNNNCNCACACANACACNNGAGNGNGNGNGAGNGAGNGAGTAGTAGTAGTAGTGTATATATACTACTACTACTACTACACACGACGACGTACGTACGTACGTACGTACGTACGTACGTACGTAACGTAAGTAAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTAGTATATATATATATAGTAGTAGTAGTAGTAGTAGTAGTACGTACGTACGTACGTACGTACGTACGTACGACGACGACGACGACGACGACGACGAGATATATACTACTAACTAACTAACAACGTACGACGACGACGACGACGACGTACGTACGTACGTACGTACGTACTACTACTACTACGTACGTACGTACGTACGTACGTACGTACGTAGTAGTAGTAGTACGTACGTACGTCGTCGTCGTCGTCGTCGTCGTCGTACGTACGACGACGACGAGAGNGNGNNNNNNNNNNNN",">GFIJCBT03G3M1I","GACTACACGACGACTTTATTTATTATTTATTTATTTATTTATTTATTTATTTATTTATTTATTTTATTTTATTTTATTTTTATTTTTATTTTTATTTTTATTTTTTATTTTTTATTTTTTATTTTTTATTTTTTTATTTTTTTATTTTTTTATTTTTTTATTTTTTTTATTTTTTTTATTTTTTTTATTTTTTTTATTTTTTTTATTTTTTTTTATTTTTTTTTATTTTTTTTTAGTTTTTTTTTAGTTTTTTTTTAGTTTTTTTTTTAGTTTTTTTTTTAGTTTTTTTTTTAGTTTTTTTTTTTAGTTTTTTTTTTTAGTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTTACGTTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTTACGTTTTTTTTTTTTACGTTTTTTTTTTTTTACGTTTTTTTTTTTTTAGTTTTTTTTTTTTTACGTTTTTTTTTTTTACGTTTTTTTTTTTTTACGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTACGTTTTTTTTTTTTAGTTTTTTTTTTTTACGTTTTTTTTTTTTAGTTTTTTTTTTTTACGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTACGTTTTTTTTTTTTAGTTTTTTTTTTTTACGTTTTTTTTTTTTAGTTTTTTTTTTTTAGTTTTTTTTTTTTTTTTTTTNNNNNNNN"]
|
@@ -25,6 +28,8 @@ class TestScbiBlast < Test::Unit::TestCase
|
|
25
28
|
res=blast.do_blast(seqs,:table,true,'/tmp/blast.txt')
|
26
29
|
puts "="*30
|
27
30
|
puts res.inspect
|
31
|
+
|
32
|
+
|
28
33
|
end
|
29
34
|
|
30
35
|
|
@@ -108,6 +113,22 @@ class TestScbiBlast < Test::Unit::TestCase
|
|
108
113
|
|
109
114
|
end
|
110
115
|
|
116
|
+
def test_good_table
|
117
|
+
res = BlastTableResult.new(File.join(File.dirname(__FILE__),'table.txt'))
|
118
|
+
|
119
|
+
assert_equal(999,res.querys.count)
|
120
|
+
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
|
125
|
+
def test_bad_table
|
126
|
+
assert_raise RuntimeError do
|
127
|
+
BlastTableResult.new(File.join(File.dirname(__FILE__),'bad_table.txt'))
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
111
132
|
|
112
133
|
def test_dust
|
113
134
|
dust_masker=DustMasker.new()
|
@@ -147,7 +168,7 @@ class TestScbiBlast < Test::Unit::TestCase
|
|
147
168
|
|
148
169
|
seqs=">GFIJCBT03G3M1I"
|
149
170
|
|
150
|
-
|
171
|
+
dust_masker.do_dust(seqs)
|
151
172
|
# puts res.to_json
|
152
173
|
# assert_equal(res.count,2)
|
153
174
|
# assert_equal(res[0].dust.count,4)
|
@@ -214,7 +235,7 @@ class TestScbiBlast < Test::Unit::TestCase
|
|
214
235
|
# seqs.push 'actggtacgacgtacaccagtactacgatcgtacgtacggatcgatcgatcgttagtgtacgtacgttgtacgtactgac'
|
215
236
|
|
216
237
|
assert_raise(RuntimeError) {
|
217
|
-
|
238
|
+
dust_masker.do_dust("name")
|
218
239
|
}
|
219
240
|
|
220
241
|
end
|
metadata
CHANGED
@@ -1,50 +1,93 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: scbi_blast
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.42
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
|
-
authors:
|
7
|
+
authors:
|
7
8
|
- Dario Guerrero & Almudena Bocinos
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-09-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
15
|
name: xml-simple
|
16
|
-
|
17
|
-
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
21
|
version: 1.0.12
|
22
22
|
type: :runtime
|
23
|
-
version_requirements: *id001
|
24
|
-
- !ruby/object:Gem::Dependency
|
25
|
-
name: hoe
|
26
23
|
prerelease: false
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.0.12
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rdoc
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '4.0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '4.0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: newgem
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.5.3
|
32
54
|
type: :development
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.5.3
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: hoe
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3.6'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '3.6'
|
78
|
+
description: ! "scbi_blast is a ruby gem to handle blast+ executions using pipes when
|
79
|
+
possible to read data without the need of temporary files, \nit has been developed
|
80
|
+
at [SCBI](http://www.scbi.uma.es) by Almudena Bocinos & Dario Guerrero."
|
81
|
+
email:
|
38
82
|
- dariogf@gmail.com, alkoke@gmail.com
|
39
83
|
executables: []
|
40
|
-
|
41
84
|
extensions: []
|
42
|
-
|
43
|
-
extra_rdoc_files:
|
85
|
+
extra_rdoc_files:
|
44
86
|
- History.txt
|
45
87
|
- Manifest.txt
|
46
88
|
- PostInstall.txt
|
47
|
-
|
89
|
+
- README.rdoc
|
90
|
+
files:
|
48
91
|
- History.txt
|
49
92
|
- Manifest.txt
|
50
93
|
- PostInstall.txt
|
@@ -68,33 +111,35 @@ files:
|
|
68
111
|
- lib/scbi_blast/blast_streamxml_result.rb
|
69
112
|
- lib/scbi_blast/batch_blast.rb
|
70
113
|
- lib/scbi_blast/dust_masker.rb
|
114
|
+
- .gemtest
|
71
115
|
homepage: http://www.scbi.uma.es/downloads
|
72
116
|
licenses: []
|
73
|
-
|
74
|
-
metadata: {}
|
75
|
-
|
76
117
|
post_install_message:
|
77
|
-
rdoc_options:
|
118
|
+
rdoc_options:
|
78
119
|
- --main
|
79
120
|
- README.rdoc
|
80
|
-
require_paths:
|
121
|
+
require_paths:
|
81
122
|
- lib
|
82
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version:
|
88
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
-
|
90
|
-
|
123
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
124
|
+
none: false
|
125
|
+
requirements:
|
126
|
+
- - ! '>='
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ! '>='
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
91
135
|
requirements: []
|
92
|
-
|
93
136
|
rubyforge_project: scbi_blast
|
94
|
-
rubygems_version:
|
137
|
+
rubygems_version: 1.8.24
|
95
138
|
signing_key:
|
96
|
-
specification_version:
|
97
|
-
summary: scbi_blast is a ruby gem to handle blast+ executions
|
98
|
-
|
139
|
+
specification_version: 3
|
140
|
+
summary: scbi_blast is a ruby gem to handle blast+ executions using pipes when possible
|
141
|
+
to read data without the need of temporary files, it has been developed at [SCBI](http://www.scbi.uma.es)
|
142
|
+
by Almudena Bocinos & Dario Guerrero.
|
143
|
+
test_files:
|
99
144
|
- test/test_helper.rb
|
100
145
|
- test/test_scbi_blast.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: abd62dc048e15cc41de0e5540c28cdb76b255823
|
4
|
-
data.tar.gz: c7d96d24d714d3641fe144241a6e9c8d4c2d9add
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 2c9216022a183a69a5f6417ddc69a6bb70c95c646acf84e2a9c97150c5fca40cb3d02f3ad91551bf506f1deb338e44d5af603bcf64f8ca28a9476108bc0d70f2
|
7
|
-
data.tar.gz: c54e86e65fbbb372e1c2e9c4031a2e05a2ac7b89daa47698c8e74398f4a3c7d74c94496ce1a7da2b332c7d8bc2e095fc79e8af2ecc96f46727840f40643ed95a
|