extract_curves 0.0.1-i586-linux
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/CVS/Entries +4 -0
- data/CVS/Repository +1 -0
- data/CVS/Root +1 -0
- data/bin/CVS/Entries +5 -0
- data/bin/CVS/Repository +1 -0
- data/bin/CVS/Root +1 -0
- data/bin/ec_rect2polar.rb +22 -0
- data/bin/ec_rev_lines.rb +5 -0
- data/bin/ec_sph_area.rb +30 -0
- data/bin/extract_curves.rb +2145 -0
- data/ruby_ext/CVS/Entries +1 -0
- data/ruby_ext/CVS/Repository +1 -0
- data/ruby_ext/CVS/Root +1 -0
- data/ruby_ext/pav/CVS/Entries +14 -0
- data/ruby_ext/pav/CVS/Repository +1 -0
- data/ruby_ext/pav/CVS/Root +1 -0
- data/ruby_ext/pav/extconf.rb +22 -0
- data/ruby_ext/pav/pav.so +0 -0
- data/ruby_libs/CVS/Entries +1 -0
- data/ruby_libs/CVS/Repository +1 -0
- data/ruby_libs/CVS/Root +1 -0
- data/ruby_libs/pav/CVS/Entries +20 -0
- data/ruby_libs/pav/CVS/Repository +1 -0
- data/ruby_libs/pav/CVS/Root +1 -0
- data/ruby_libs/pav/attr_cache.rb +211 -0
- data/ruby_libs/pav/attr_cache.t1.rb +32 -0
- data/ruby_libs/pav/cache.rb +31 -0
- data/ruby_libs/pav/dbg_log.rb +458 -0
- data/ruby_libs/pav/floatsio.rb +53 -0
- data/ruby_libs/pav/generator_cache.rb +165 -0
- data/ruby_libs/pav/gtk/CVS/Entries +4 -0
- data/ruby_libs/pav/gtk/CVS/Repository +1 -0
- data/ruby_libs/pav/gtk/CVS/Root +1 -0
- data/ruby_libs/pav/gtk/button.rb +130 -0
- data/ruby_libs/pav/gtk/icons.rb +87 -0
- data/ruby_libs/pav/gtk/toolbar.rb +192 -0
- data/ruby_libs/pav/heap.rb +54 -0
- data/ruby_libs/pav/icons/CVS/Entries +17 -0
- data/ruby_libs/pav/icons/CVS/Repository +1 -0
- data/ruby_libs/pav/icons/CVS/Root +1 -0
- data/ruby_libs/pav/icons/alt_handle.xpm +3832 -0
- data/ruby_libs/pav/icons/alt_handle_hover.xpm +3368 -0
- data/ruby_libs/pav/icons/alt_handle_pressed.xpm +3828 -0
- data/ruby_libs/pav/icons/extract_curves/CVS/Entries +6 -0
- data/ruby_libs/pav/icons/extract_curves/CVS/Repository +1 -0
- data/ruby_libs/pav/icons/extract_curves/CVS/Root +1 -0
- data/ruby_libs/pav/icons/extract_curves/extract_curves-icon-rgb.ppm +14 -0
- data/ruby_libs/pav/icons/extract_curves/extract_curves-logo-rgb.gif +0 -0
- data/ruby_libs/pav/icons/extract_curves/trace_mark.xpm +38 -0
- data/ruby_libs/pav/icons/handle.xpm +213 -0
- data/ruby_libs/pav/icons/next.xpm +29 -0
- data/ruby_libs/pav/icons/next_hover.xpm +315 -0
- data/ruby_libs/pav/icons/next_pressed.xpm +144 -0
- data/ruby_libs/pav/icons/prev.xpm +29 -0
- data/ruby_libs/pav/icons/prev_hover.xpm +315 -0
- data/ruby_libs/pav/icons/prev_pressed.xpm +144 -0
- data/ruby_libs/pav/icons/vnext.xpm +29 -0
- data/ruby_libs/pav/icons/vprev.xpm +29 -0
- data/ruby_libs/pav/numeric/CVS/Entries +2 -0
- data/ruby_libs/pav/numeric/CVS/Repository +1 -0
- data/ruby_libs/pav/numeric/CVS/Root +1 -0
- data/ruby_libs/pav/numeric/ext.rb +13 -0
- data/ruby_libs/pav/pav_find.rb +90 -0
- data/ruby_libs/pav/pix/CVS/Entries +11 -0
- data/ruby_libs/pav/pix/CVS/Repository +1 -0
- data/ruby_libs/pav/pix/CVS/Root +1 -0
- data/ruby_libs/pav/pix/aapix.rb +378 -0
- data/ruby_libs/pav/pix/blob.rb +543 -0
- data/ruby_libs/pav/pix/circle.rb +73 -0
- data/ruby_libs/pav/pix/contour/CVS/Entries +5 -0
- data/ruby_libs/pav/pix/contour/CVS/Repository +1 -0
- data/ruby_libs/pav/pix/contour/CVS/Root +1 -0
- data/ruby_libs/pav/pix/contour/calc_situations.rb +9 -0
- data/ruby_libs/pav/pix/contour/carp_calc.rb +212 -0
- data/ruby_libs/pav/pix/contour/situations.dmp +0 -0
- data/ruby_libs/pav/pix/contour/situations.rb +21 -0
- data/ruby_libs/pav/pix/contour.rb +644 -0
- data/ruby_libs/pav/pix/curve.rb +1508 -0
- data/ruby_libs/pav/pix/img_obj.rb +751 -0
- data/ruby_libs/pav/pix/node.rb +712 -0
- data/ruby_libs/pav/pix/node_grp.rb +853 -0
- data/ruby_libs/pav/pix/shaved_core.rb +534 -0
- data/ruby_libs/pav/pix/subpix.rb +212 -0
- data/ruby_libs/pav/pix.rb +402 -0
- data/ruby_libs/pav/rand_accessible.rb +16 -0
- data/ruby_libs/pav/rangeset.rb +63 -0
- data/ruby_libs/pav/search.rb +210 -0
- data/ruby_libs/pav/set.rb +20 -0
- data/ruby_libs/pav/string/CVS/Entries +6 -0
- data/ruby_libs/pav/string/CVS/Repository +1 -0
- data/ruby_libs/pav/string/CVS/Root +1 -0
- data/ruby_libs/pav/string/bits.rb +523 -0
- data/ruby_libs/pav/string/ext.rb +58 -0
- data/ruby_libs/pav/string/observable.rb +155 -0
- data/ruby_libs/pav/string/text.rb +79 -0
- data/ruby_libs/pav/string/words.rb +42 -0
- data/ruby_libs/pav/sub_arr.rb +55 -0
- data/ruby_libs/pav/traced_obj.rb +79 -0
- metadata +147 -0
@@ -0,0 +1 @@
|
|
1
|
+
D/pav////
|
@@ -0,0 +1 @@
|
|
1
|
+
extract-curves/ruby_ext
|
data/ruby_ext/CVS/Root
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
:ext:pavpen@rubyforge.org:/var/cvs/extract-curves
|
@@ -0,0 +1,14 @@
|
|
1
|
+
/Makefile/1.1.1.1/Tue Nov 15 17:32:09 2005//
|
2
|
+
/Makefile.mingw32/1.1.1.1/Tue Nov 15 17:32:09 2005//
|
3
|
+
/cstr.c/1.1.1.1/Tue Nov 15 17:32:09 2005//
|
4
|
+
/cstr.h/1.1.1.1/Tue Nov 15 17:32:08 2005//
|
5
|
+
/extconf.rb/1.1.1.1/Tue Nov 15 17:32:08 2005//
|
6
|
+
/pav.c/1.1.1.1/Tue Nov 15 17:32:09 2005//
|
7
|
+
/pgtk.c/1.1.1.1/Tue Nov 15 17:32:08 2005//
|
8
|
+
/pgtk.h/1.1.1.1/Tue Nov 15 17:32:09 2005//
|
9
|
+
/pix.c/1.1.1.1/Tue Nov 15 17:32:08 2005//
|
10
|
+
/pix.h/1.1.1.1/Tue Nov 15 17:32:09 2005//
|
11
|
+
/rbconfig.rb/1.1.1.1/Tue Nov 15 17:32:09 2005//
|
12
|
+
/t.rb/1.1.1.1/Tue Nov 15 17:32:08 2005//
|
13
|
+
/t1.rb/1.1.1.1/Tue Nov 15 17:32:09 2005//
|
14
|
+
D
|
@@ -0,0 +1 @@
|
|
1
|
+
extract-curves/ruby_ext/pav
|
@@ -0,0 +1 @@
|
|
1
|
+
:ext:pavpen@rubyforge.org:/var/cvs/extract-curves
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# To cross-compile for Win32 on Linux:
|
4
|
+
# shell$ export PKG_CONFIG_PATH=/devel/target/mswin32/lib/pkgconfig
|
5
|
+
# shell$ export TARGET_PLATFORM_RUBYLIB=/devel/target/mswin32/lib/ruby/site_ruby/1.8:/devel/target/mswin32/lib/ruby/site_ruby/1.8/i386-msvcrt:/devel/target/mswin32/lib/ruby/1.8:/devel/target/mswin32/lib/ruby/1.8/i386-target-mswin32
|
6
|
+
# shell$ ruby1.8 extconf.rb
|
7
|
+
|
8
|
+
if targ_rb_lib_paths = ENV['TARGET_PLATFORM_RUBYLIB']
|
9
|
+
targ_rb_lib_paths.split(':').reverse_each { |lpath| $:.unshift(lpath) }
|
10
|
+
end
|
11
|
+
|
12
|
+
#require 'rbconfig'
|
13
|
+
#Config::CONFIG.keys.sort.each { |k| puts "#{k} = #{Config::CONFIG[k]}" }
|
14
|
+
#puts Config::DESTDIR
|
15
|
+
#puts Config::TOPDIR
|
16
|
+
|
17
|
+
require 'mkmf'
|
18
|
+
|
19
|
+
have_header('string.h')
|
20
|
+
|
21
|
+
pkg_config('gobject-2.0 gdk-pixbuf-2.0 glib-2.0')
|
22
|
+
create_makefile('pav')
|
data/ruby_ext/pav/pav.so
ADDED
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
D/pav////
|
@@ -0,0 +1 @@
|
|
1
|
+
extract-curves/ruby_libs
|
data/ruby_libs/CVS/Root
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
:ext:pavpen@rubyforge.org:/var/cvs/extract-curves
|
@@ -0,0 +1,20 @@
|
|
1
|
+
/attr_cache.rb/1.1.1.1/Tue Nov 15 17:32:12 2005//
|
2
|
+
/attr_cache.t1.rb/1.1.1.1/Tue Nov 15 17:32:11 2005//
|
3
|
+
/cache.rb/1.1.1.1/Tue Nov 15 17:32:12 2005//
|
4
|
+
/dbg_log.rb/1.1.1.1/Tue Nov 15 17:32:12 2005//
|
5
|
+
/floatsio.rb/1.1.1.1/Tue Nov 15 17:32:11 2005//
|
6
|
+
/generator_cache.rb/1.1.1.1/Tue Nov 15 17:32:12 2005//
|
7
|
+
/heap.rb/1.1.1.1/Tue Nov 15 17:32:11 2005//
|
8
|
+
/pav_find.rb/1.1.1.1/Tue Nov 15 17:32:11 2005//
|
9
|
+
/pix.rb/1.1.1.1/Tue Nov 15 17:32:12 2005//
|
10
|
+
/rand_accessible.rb/1.1.1.1/Tue Nov 15 17:32:11 2005//
|
11
|
+
/rangeset.rb/1.1.1.1/Tue Nov 15 17:32:12 2005//
|
12
|
+
/search.rb/1.1.1.1/Tue Nov 15 17:32:12 2005//
|
13
|
+
/set.rb/1.1.1.1/Tue Nov 15 17:32:11 2005//
|
14
|
+
/sub_arr.rb/1.1.1.1/Tue Nov 15 17:32:12 2005//
|
15
|
+
/traced_obj.rb/1.1.1.1/Tue Nov 15 17:32:11 2005//
|
16
|
+
D/gtk////
|
17
|
+
D/icons////
|
18
|
+
D/numeric////
|
19
|
+
D/pix////
|
20
|
+
D/string////
|
@@ -0,0 +1 @@
|
|
1
|
+
extract-curves/ruby_libs/pav
|
@@ -0,0 +1 @@
|
|
1
|
+
:ext:pavpen@rubyforge.org:/var/cvs/extract-curves
|
@@ -0,0 +1,211 @@
|
|
1
|
+
require 'pav/dbg_log'
|
2
|
+
|
3
|
+
class Module
|
4
|
+
# Like +once+ from the Ruby Book (Pragmatic Programmer's Guide):
|
5
|
+
def cache_attr!(*ids)
|
6
|
+
res = []
|
7
|
+
for id in ids
|
8
|
+
id_orig = "__ca_#{id.to_i}_o__".to_sym
|
9
|
+
id_val = "@__ca_#{id.to_i}_val__".to_sym
|
10
|
+
self.module_eval <<-"end_eval"
|
11
|
+
#{if self.public_instance_methods.member?(id_orig.id2name)
|
12
|
+
res << id
|
13
|
+
""
|
14
|
+
else
|
15
|
+
"alias_method #{id_orig.inspect}, #{id.inspect}"
|
16
|
+
end}
|
17
|
+
def #{id.id2name}(*args, &block)
|
18
|
+
tc = Thread::critical=(true)
|
19
|
+
def self.#{id.id2name}(*args, &block)
|
20
|
+
#{id_val.id2name}
|
21
|
+
end
|
22
|
+
$PDbgLog.sig_wrapped_call
|
23
|
+
#{id_val.id2name} = #{id_orig.id2name}(*args, &block)
|
24
|
+
$PDbgLog.sig_wrapped_return
|
25
|
+
Thread::critical = tc
|
26
|
+
#{id_val.id2name}
|
27
|
+
end
|
28
|
+
end_eval
|
29
|
+
end
|
30
|
+
res
|
31
|
+
end
|
32
|
+
|
33
|
+
def freeze_cache_attr!(*ids)
|
34
|
+
res = []
|
35
|
+
for id in ids
|
36
|
+
id_orig = "__ca_#{id.to_i}_o__".to_sym
|
37
|
+
id_val = "@__ca_#{id.to_i}_val__".to_sym
|
38
|
+
self.module_eval <<-"end_eval"
|
39
|
+
#{if self.public_instance_methods.member?(id_orig.id2name)
|
40
|
+
res << id
|
41
|
+
""
|
42
|
+
else
|
43
|
+
"alias_method #{id_orig.inspect}, #{id.inspect}"
|
44
|
+
end}
|
45
|
+
def #{id.id2name}(*args, &block)
|
46
|
+
tc = Thread::critical=(true)
|
47
|
+
def self.#{id.id2name}(*args, &block)
|
48
|
+
#{id_val.id2name}
|
49
|
+
end
|
50
|
+
$PDbgLog.sig_wrapped_call
|
51
|
+
#{id_val.id2name} = #{id_orig.id2name}(*args, &block)
|
52
|
+
$PDbgLog.sig_wrapped_return
|
53
|
+
#{id_val.id2name}.freeze
|
54
|
+
Thread::critical = tc
|
55
|
+
#{id_val.id2name}
|
56
|
+
end
|
57
|
+
end_eval
|
58
|
+
end
|
59
|
+
res
|
60
|
+
end
|
61
|
+
|
62
|
+
def uncache_attr!(*ids)
|
63
|
+
res = []
|
64
|
+
for id in ids
|
65
|
+
id_orig = "__ca_#{id.to_i}_o__".to_sym
|
66
|
+
if !self.public_instance_methods.member?(id_orig.id2name)
|
67
|
+
res << id
|
68
|
+
next
|
69
|
+
end
|
70
|
+
self.module_eval <<-"end_eval"
|
71
|
+
alias_method #{id.inspect}, #{id_orig.inspect}
|
72
|
+
remove_method #{id_orig.inspect}
|
73
|
+
end_eval
|
74
|
+
end
|
75
|
+
res
|
76
|
+
end
|
77
|
+
|
78
|
+
def cache_get!(*ids)
|
79
|
+
for id in ids
|
80
|
+
self.module_eval <<-end_eval
|
81
|
+
def #{id.to_s['get_'.length...id.to_s.length]}
|
82
|
+
if (tmp = @cache_#{id.to_s})
|
83
|
+
return tmp
|
84
|
+
end
|
85
|
+
@cache_#{id.to_s} = self.#{id.to_s}
|
86
|
+
end
|
87
|
+
end_eval
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def cache_get_lm!(*ids)
|
92
|
+
for id in ids
|
93
|
+
self.module_eval <<-end_eval
|
94
|
+
def #{id.to_s['get_'.length...id.to_s.length]}(lm)
|
95
|
+
if (tmp = @cache_#{id.to_s}[lm])
|
96
|
+
return tmp
|
97
|
+
end
|
98
|
+
@cache_#{id.to_s}[lm] = self.#{id.to_s}(lm)
|
99
|
+
end
|
100
|
+
end_eval
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
module AttrCache
|
106
|
+
def uncache_attr!(*ids)
|
107
|
+
res = []
|
108
|
+
for id in ids
|
109
|
+
id_orig = "__ca_#{id.to_i}_o__".to_sym
|
110
|
+
id_val = "@__ca_#{id.to_i}_val__".to_sym
|
111
|
+
if !self.instance_variables.member?(id_val.id2name)
|
112
|
+
res << id
|
113
|
+
next
|
114
|
+
end
|
115
|
+
self.instance_eval <<-"end_eval"
|
116
|
+
class <<self
|
117
|
+
alias_method #{id.inspect}, #{id_orig.inspect}
|
118
|
+
end
|
119
|
+
end_eval
|
120
|
+
remove_instance_variable id_val
|
121
|
+
end
|
122
|
+
res
|
123
|
+
end
|
124
|
+
|
125
|
+
def cache_attr!(*ids)
|
126
|
+
res = []
|
127
|
+
for id in ids
|
128
|
+
id_orig = "__ca_#{id.to_i}_o__".to_sym
|
129
|
+
id_val = "@__ca_#{id.to_i}_val__".to_sym
|
130
|
+
if self.instance_variables.member?(id_val.id2name)
|
131
|
+
res << id
|
132
|
+
next
|
133
|
+
end
|
134
|
+
self.instance_eval <<-"end_eval"
|
135
|
+
class <<self
|
136
|
+
alias_method #{id_orig.inspect}, #{id.inspect}
|
137
|
+
def #{id.id2name}(*args, &block)
|
138
|
+
tc = Thread::critical=(true)
|
139
|
+
def self.#{id.id2name}(*args, &block)
|
140
|
+
#{id_val.id2name}
|
141
|
+
end
|
142
|
+
$PDbgLog.sig_wrapped_call
|
143
|
+
#{id_val.id2name} = #{id_orig.id2name}(*args, &block)
|
144
|
+
$PDbgLog.sig_wrapped_return
|
145
|
+
Thread::critical = tc
|
146
|
+
#{id_val.id2name}
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end_eval
|
150
|
+
end
|
151
|
+
res
|
152
|
+
end
|
153
|
+
|
154
|
+
def freeze_cache_attr!(*ids)
|
155
|
+
res = []
|
156
|
+
for id in ids
|
157
|
+
id_orig = "__ca_#{id.to_i}_o__".to_sym
|
158
|
+
id_val = "@__ca_#{id.to_i}_val__".to_sym
|
159
|
+
if self.instance_variables.member?(id_val.id2name)
|
160
|
+
res << id
|
161
|
+
next
|
162
|
+
end
|
163
|
+
self.instance_eval <<-"end_eval"
|
164
|
+
class <<self
|
165
|
+
alias_method #{id_orig.inspect}, #{id.inspect}
|
166
|
+
def #{id.id2name}(*args, &block)
|
167
|
+
tc = Thread::critical=(true)
|
168
|
+
def self.#{id.id2name}(*args, &block)
|
169
|
+
#{id_val.id2name}
|
170
|
+
end
|
171
|
+
$PDbgLog.sig_wrapped_call
|
172
|
+
#{id_val.id2name} = #{id_orig.id2name}(*args, &block)
|
173
|
+
$PDbgLog.sig_wrapped_return
|
174
|
+
#{id_val.id2name}.freeze
|
175
|
+
Thread::critical = tc
|
176
|
+
#{id_val.id2name}
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end_eval
|
180
|
+
end
|
181
|
+
res
|
182
|
+
end
|
183
|
+
|
184
|
+
def kill_attr_cache!(*ids)
|
185
|
+
res = []
|
186
|
+
for id in ids
|
187
|
+
id_orig = "__ca_#{id.to_i}_o__".to_sym
|
188
|
+
id_val = "@__ca_#{id.to_i}_val__".to_sym
|
189
|
+
if !self.instance_variables.member?(id_val.id2name)
|
190
|
+
res << id
|
191
|
+
next
|
192
|
+
end
|
193
|
+
self.instance_eval <<-"end_eval"
|
194
|
+
class <<self
|
195
|
+
def #{id.id2name}(*args, &block)
|
196
|
+
tc = Thread::critical=(true)
|
197
|
+
def self.#{id.id2name}(*args, &block)
|
198
|
+
#{id_val.id2name}
|
199
|
+
end
|
200
|
+
$PDbgLog.sig_wrapped_call
|
201
|
+
#{id_val.id2name} = #{id_orig.id2name}(*args, &block)
|
202
|
+
$PDbgLog.sig_wrapped_return
|
203
|
+
Thread::critical = tc
|
204
|
+
#{id_val.id2name}
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end_eval
|
208
|
+
end
|
209
|
+
res
|
210
|
+
end
|
211
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'pav/attr_cache'
|
2
|
+
|
3
|
+
class C
|
4
|
+
include AttrCache
|
5
|
+
|
6
|
+
def f(x)
|
7
|
+
x
|
8
|
+
end
|
9
|
+
|
10
|
+
cache_attr! :f
|
11
|
+
end
|
12
|
+
|
13
|
+
a = C.new
|
14
|
+
b = C.new
|
15
|
+
p a.f("a")
|
16
|
+
p b.f("b")
|
17
|
+
c = C.new
|
18
|
+
d = C.new
|
19
|
+
p c.f("c")
|
20
|
+
p a.f(1)
|
21
|
+
p b.f(2)
|
22
|
+
p c.f(3)
|
23
|
+
p d.uncache_attr!(:f)
|
24
|
+
a.uncache_attr!(:f)
|
25
|
+
p a.f(0)
|
26
|
+
p a.f(1)
|
27
|
+
p a.cache_attr!(:f)
|
28
|
+
p a.f(2)
|
29
|
+
p a.f(3)
|
30
|
+
p a.kill_attr_cache!(:f)
|
31
|
+
p a.f(4)
|
32
|
+
p a.f(5)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#begin
|
2
|
+
require 'pav/pav'
|
3
|
+
#rescue LoadError
|
4
|
+
|
5
|
+
require 'weakref'
|
6
|
+
|
7
|
+
class PCache
|
8
|
+
attr_reader :tbl, :args
|
9
|
+
|
10
|
+
def initialize(*args)
|
11
|
+
@args = args
|
12
|
+
#@tbl = WeakRef.new(Hash.new(*@args))
|
13
|
+
end
|
14
|
+
|
15
|
+
def method_missing(id, *args)
|
16
|
+
return @args[0]
|
17
|
+
gc_dis = GC.disable
|
18
|
+
unless @tbl.weakref_alive?
|
19
|
+
@tbl = WeakRef.new(Hash.new(*@args))
|
20
|
+
end
|
21
|
+
begin
|
22
|
+
res = @tbl.send(id, *args)
|
23
|
+
rescue WeakRef::RefError
|
24
|
+
res = @args[0]
|
25
|
+
end
|
26
|
+
GC.enable unless gc_dis
|
27
|
+
res
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
#end # require 'pav/pav'
|