Segmentation fault when using mpeg2enc plugin

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Segmentation fault when using mpeg2enc plugin

hammerwerfer
Hi,
 
i am using a pipeline to encode a video stream with the mpeg2enc plugin. The element is created with:
 
        videoEnc = Gst.ElementFactory.make("mpeg2enc")
        videoEnc.set_property("format", 1)
        videoEnc.set_property("norm", "p")
 
the crash occured at the moment a queue is linked to this element:
 
        queueVideo.link(videoEnc)
 
i installed debugging symbols for gstreamer and some plugins. gdb gives me the following traceback:
 
(gdb) backtrace
#0  strlen () at ../sysdeps/x86_64/strlen.S:106
#1  0x00007fc822a13323 in g_strdup () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fc822cf3efc in ?? () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#3  0x00007fc812b94c90 in gst_structure_set_valist_internal (structure=<optimized out>, fieldname=<optimized out>, varargs=0x7fc832c00750) at gststructure.c:605
#4  0x00007fc812b96ac5 in gst_structure_new_valist (name=<optimized out>, firstfield=0x7fc7f6828052 "format", varargs=varargs@entry=0x7fc832c00750) at gststructure.c:284
#5  0x00007fc812b96b64 in gst_structure_new (name=name@entry=0x7fc7f682798e "video/x-raw", firstfield=firstfield@entry=0x7fc7f6828052 "format") at gststructure.c:253
#6  0x00007fc7f682464b in gst_mpeg2enc_structure_from_norm (enc=enc@entry=0x20e77c0, horiz=352, pal_v=288, ntsc_v=240) at gstmpeg2enc.cc:258
#7  0x00007fc7f682588f in gst_mpeg2enc_getcaps (pad=0x7fc82800d000, enc=0x20e77c0) at gstmpeg2enc.cc:311
#8  gst_mpeg2enc_sink_query (pad=0x7fc82800d000, parent=0x20e77c0, query=0x7fc828054ad0) at gstmpeg2enc.cc:360
#9  0x00007fc812b777f8 in gst_pad_query (pad=pad@entry=0x7fc82800d000, query=query@entry=0x7fc828054ad0) at gstpad.c:3831
#10 0x00007fc812bac2a4 in gst_pad_query_caps (pad=pad@entry=0x7fc82800d000, filter=filter@entry=0x0) at gstutils.c:2841
#11 0x00007fc812bace8a in gst_element_get_compatible_pad (element=element@entry=0x20e77c0, pad=pad@entry=0x7fc82800c4c0, caps=caps@entry=0x0) at gstutils.c:1053
#12 0x00007fc812badf27 in gst_element_link_pads_full (src=0x7fc828014120, srcpadname=<optimized out>, dest=0x20e77c0, destpadname=<optimized out>, flags=GST_PAD_LINK_CHECK_DEFAULT) at gstutils.c:1691
#13 0x00007fc81adb4d90 in ffi_call_unix64 () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#14 0x00007fc81adb47f8 in ffi_call () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#15 0x00007fc8131266f4 in ?? () from /usr/lib/python2.7/dist-packages/gi/_gi.so
#16 0x00007fc813128148 in ?? () from /usr/lib/python2.7/dist-packages/gi/_gi.so
#17 0x00007fc81311c4ee in ?? () from /usr/lib/python2.7/dist-packages/gi/_gi.so
#18 0x00000000004bf3cc in PyObject_Call (kw=0x0, arg=(<__main__.GstMpeg2enc at remote 0x7fc80c512dc0>,), func=<gi.FunctionInfo at remote 0x7fc80e00b490>) at ../Objects/abstract.c:2529
#19 do_call (nk=<optimized out>, na=<optimized out>, pp_stack=0x7fc832c00e10, func=<gi.FunctionInfo at remote 0x7fc80e00b490>) at ../Python/ceval.c:4574
#20 call_function (oparg=<optimized out>, pp_stack=0x7fc832c00e10) at ../Python/ceval.c:4379
#21 PyEval_EvalFrameEx () at ../Python/ceval.c:2993
#22 0x00000000004bf10f in fast_function (nk=<optimized out>, na=<optimized out>, n=1, pp_stack=0x7fc832c00f30, func=<function at remote 0x7fc812a92320>) at ../Python/ceval.c:4442
#23 call_function (oparg=<optimized out>, pp_stack=0x7fc832c00f30) at ../Python/ceval.c:4377
#24 PyEval_EvalFrameEx () at ../Python/ceval.c:2993
 
Same crash occurs when using format 4 (videoEnc.set_property("format", 4)) but NO CRASH for format 0. Format 0 starts encoding but gives another error (streaming task paused, reason not-negotiated (-4))
but that is not related to the crash i guess.
I am using gstreamer 1.6.0-1ubuntu1. The pipeline in principle works when i use another video/audio encoder and muxer.
 
Regards,
Jens

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Segmentation fault when using mpeg2enc plugin

Vivia Nikolaidou
Hi,

Thanks for reporting this crash. It is now fixed in latest git:
http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=c3d6635bbff70f9c1d5314ecb6d3d38cdccfd3ee

Best regards,

Vivia

On 2 March 2016 at 21:37,  <[hidden email]> wrote:

> Hi,
>
> i am using a pipeline to encode a video stream with the mpeg2enc plugin. The
> element is created with:
>
>         videoEnc = Gst.ElementFactory.make("mpeg2enc")
>         videoEnc.set_property("format", 1)
>         videoEnc.set_property("norm", "p")
>
> the crash occured at the moment a queue is linked to this element:
>
>         queueVideo.link(videoEnc)
>
> i installed debugging symbols for gstreamer and some plugins. gdb gives me
> the following traceback:
>
> (gdb) backtrace
> #0  strlen () at ../sysdeps/x86_64/strlen.S:106
> #1  0x00007fc822a13323 in g_strdup () from
> /lib/x86_64-linux-gnu/libglib-2.0.so.0
> #2  0x00007fc822cf3efc in ?? () from
> /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
> #3  0x00007fc812b94c90 in gst_structure_set_valist_internal
> (structure=<optimized out>, fieldname=<optimized out>,
> varargs=0x7fc832c00750) at gststructure.c:605
> #4  0x00007fc812b96ac5 in gst_structure_new_valist (name=<optimized out>,
> firstfield=0x7fc7f6828052 "format", varargs=varargs@entry=0x7fc832c00750) at
> gststructure.c:284
> #5  0x00007fc812b96b64 in gst_structure_new (name=name@entry=0x7fc7f682798e
> "video/x-raw", firstfield=firstfield@entry=0x7fc7f6828052 "format") at
> gststructure.c:253
> #6  0x00007fc7f682464b in gst_mpeg2enc_structure_from_norm
> (enc=enc@entry=0x20e77c0, horiz=352, pal_v=288, ntsc_v=240) at
> gstmpeg2enc.cc:258
> #7  0x00007fc7f682588f in gst_mpeg2enc_getcaps (pad=0x7fc82800d000,
> enc=0x20e77c0) at gstmpeg2enc.cc:311
> #8  gst_mpeg2enc_sink_query (pad=0x7fc82800d000, parent=0x20e77c0,
> query=0x7fc828054ad0) at gstmpeg2enc.cc:360
> #9  0x00007fc812b777f8 in gst_pad_query (pad=pad@entry=0x7fc82800d000,
> query=query@entry=0x7fc828054ad0) at gstpad.c:3831
> #10 0x00007fc812bac2a4 in gst_pad_query_caps (pad=pad@entry=0x7fc82800d000,
> filter=filter@entry=0x0) at gstutils.c:2841
> #11 0x00007fc812bace8a in gst_element_get_compatible_pad
> (element=element@entry=0x20e77c0, pad=pad@entry=0x7fc82800c4c0,
> caps=caps@entry=0x0) at gstutils.c:1053
> #12 0x00007fc812badf27 in gst_element_link_pads_full (src=0x7fc828014120,
> srcpadname=<optimized out>, dest=0x20e77c0, destpadname=<optimized out>,
> flags=GST_PAD_LINK_CHECK_DEFAULT) at gstutils.c:1691
> #13 0x00007fc81adb4d90 in ffi_call_unix64 () from
> /usr/lib/x86_64-linux-gnu/libffi.so.6
> #14 0x00007fc81adb47f8 in ffi_call () from
> /usr/lib/x86_64-linux-gnu/libffi.so.6
> #15 0x00007fc8131266f4 in ?? () from
> /usr/lib/python2.7/dist-packages/gi/_gi.so
> #16 0x00007fc813128148 in ?? () from
> /usr/lib/python2.7/dist-packages/gi/_gi.so
> #17 0x00007fc81311c4ee in ?? () from
> /usr/lib/python2.7/dist-packages/gi/_gi.so
> #18 0x00000000004bf3cc in PyObject_Call (kw=0x0, arg=(<__main__.GstMpeg2enc
> at remote 0x7fc80c512dc0>,), func=<gi.FunctionInfo at remote
> 0x7fc80e00b490>) at ../Objects/abstract.c:2529
> #19 do_call (nk=<optimized out>, na=<optimized out>,
> pp_stack=0x7fc832c00e10, func=<gi.FunctionInfo at remote 0x7fc80e00b490>) at
> ../Python/ceval.c:4574
> #20 call_function (oparg=<optimized out>, pp_stack=0x7fc832c00e10) at
> ../Python/ceval.c:4379
> #21 PyEval_EvalFrameEx () at ../Python/ceval.c:2993
> #22 0x00000000004bf10f in fast_function (nk=<optimized out>, na=<optimized
> out>, n=1, pp_stack=0x7fc832c00f30, func=<function at remote
> 0x7fc812a92320>) at ../Python/ceval.c:4442
> #23 call_function (oparg=<optimized out>, pp_stack=0x7fc832c00f30) at
> ../Python/ceval.c:4377
> #24 PyEval_EvalFrameEx () at ../Python/ceval.c:2993
>
> Same crash occurs when using format 4 (videoEnc.set_property("format", 4))
> but NO CRASH for format 0. Format 0 starts encoding but gives another error
> (streaming task paused, reason not-negotiated (-4))
> but that is not related to the crash i guess.
> I am using gstreamer 1.6.0-1ubuntu1. The pipeline in principle works when i
> use another video/audio encoder and muxer.
>
> Regards,
> Jens
>
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Aw: Re: Segmentation fault when using mpeg2enc plugin

hammerwerfer
Hi,
wow, that was quick.
Jens
 
 
 
Gesendet: Mittwoch, 02. März 2016 um 20:50 Uhr
Von: "Vivia Nikolaidou" <[hidden email]>
An: "Discussion of the development of and with GStreamer" <[hidden email]>
Betreff: Re: Segmentation fault when using mpeg2enc plugin
Hi,

Thanks for reporting this crash. It is now fixed in latest git:
http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=c3d6635bbff70f9c1d5314ecb6d3d38cdccfd3ee

Best regards,

Vivia

On 2 March 2016 at 21:37, <[hidden email]> wrote:
> Hi,
>
> i am using a pipeline to encode a video stream with the mpeg2enc plugin. The
> element is created with:
>
> videoEnc = Gst.ElementFactory.make("mpeg2enc")
> videoEnc.set_property("format", 1)
> videoEnc.set_property("norm", "p")
>
> the crash occured at the moment a queue is linked to this element:
>
> queueVideo.link(videoEnc)
>
> i installed debugging symbols for gstreamer and some plugins. gdb gives me
> the following traceback:
>
> (gdb) backtrace
> #0 strlen () at ../sysdeps/x86_64/strlen.S:106
> #1 0x00007fc822a13323 in g_strdup () from
> /lib/x86_64-linux-gnu/libglib-2.0.so.0
> #2 0x00007fc822cf3efc in ?? () from
> /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
> #3 0x00007fc812b94c90 in gst_structure_set_valist_internal
> (structure=<optimized out>, fieldname=<optimized out>,
> varargs=0x7fc832c00750) at gststructure.c:605
> #4 0x00007fc812b96ac5 in gst_structure_new_valist (name=<optimized out>,
> firstfield=0x7fc7f6828052 "format", varargs=varargs@entry=0x7fc832c00750) at
> gststructure.c:284
> #5 0x00007fc812b96b64 in gst_structure_new (name=name@entry=0x7fc7f682798e
> "video/x-raw", firstfield=firstfield@entry=0x7fc7f6828052 "format") at
> gststructure.c:253
> #6 0x00007fc7f682464b in gst_mpeg2enc_structure_from_norm
> (enc=enc@entry=0x20e77c0, horiz=352, pal_v=288, ntsc_v=240) at
> gstmpeg2enc.cc:258
> #7 0x00007fc7f682588f in gst_mpeg2enc_getcaps (pad=0x7fc82800d000,
> enc=0x20e77c0) at gstmpeg2enc.cc:311
> #8 gst_mpeg2enc_sink_query (pad=0x7fc82800d000, parent=0x20e77c0,
> query=0x7fc828054ad0) at gstmpeg2enc.cc:360
> #9 0x00007fc812b777f8 in gst_pad_query (pad=pad@entry=0x7fc82800d000,
> query=query@entry=0x7fc828054ad0) at gstpad.c:3831
> #10 0x00007fc812bac2a4 in gst_pad_query_caps (pad=pad@entry=0x7fc82800d000,
> filter=filter@entry=0x0) at gstutils.c:2841
> #11 0x00007fc812bace8a in gst_element_get_compatible_pad
> (element=element@entry=0x20e77c0, pad=pad@entry=0x7fc82800c4c0,
> caps=caps@entry=0x0) at gstutils.c:1053
> #12 0x00007fc812badf27 in gst_element_link_pads_full (src=0x7fc828014120,
> srcpadname=<optimized out>, dest=0x20e77c0, destpadname=<optimized out>,
> flags=GST_PAD_LINK_CHECK_DEFAULT) at gstutils.c:1691
> #13 0x00007fc81adb4d90 in ffi_call_unix64 () from
> /usr/lib/x86_64-linux-gnu/libffi.so.6
> #14 0x00007fc81adb47f8 in ffi_call () from
> /usr/lib/x86_64-linux-gnu/libffi.so.6
> #15 0x00007fc8131266f4 in ?? () from
> /usr/lib/python2.7/dist-packages/gi/_gi.so
> #16 0x00007fc813128148 in ?? () from
> /usr/lib/python2.7/dist-packages/gi/_gi.so
> #17 0x00007fc81311c4ee in ?? () from
> /usr/lib/python2.7/dist-packages/gi/_gi.so
> #18 0x00000000004bf3cc in PyObject_Call (kw=0x0, arg=(<__main__.GstMpeg2enc
> at remote 0x7fc80c512dc0>,), func=<gi.FunctionInfo at remote
> 0x7fc80e00b490>) at ../Objects/abstract.c:2529
> #19 do_call (nk=<optimized out>, na=<optimized out>,
> pp_stack=0x7fc832c00e10, func=<gi.FunctionInfo at remote 0x7fc80e00b490>) at
> ../Python/ceval.c:4574
> #20 call_function (oparg=<optimized out>, pp_stack=0x7fc832c00e10) at
> ../Python/ceval.c:4379
> #21 PyEval_EvalFrameEx () at ../Python/ceval.c:2993
> #22 0x00000000004bf10f in fast_function (nk=<optimized out>, na=<optimized
> out>, n=1, pp_stack=0x7fc832c00f30, func=<function at remote
> 0x7fc812a92320>) at ../Python/ceval.c:4442
> #23 call_function (oparg=<optimized out>, pp_stack=0x7fc832c00f30) at
> ../Python/ceval.c:4377
> #24 PyEval_EvalFrameEx () at ../Python/ceval.c:2993
>
> Same crash occurs when using format 4 (videoEnc.set_property("format", 4))
> but NO CRASH for format 0. Format 0 starts encoding but gives another error
> (streaming task paused, reason not-negotiated (-4))
> but that is not related to the crash i guess.
> I am using gstreamer 1.6.0-1ubuntu1. The pipeline in principle works when i
> use another video/audio encoder and muxer.
>
> Regards,
> Jens
>
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Aw: Re: Segmentation fault when using mpeg2enc plugin

hammerwerfer
In reply to this post by Vivia Nikolaidou
I dont't know how fast linux distributions update the gstreamer libs, but does it make sense to backport this fix to gestreamer 1.6 branch?
 
Gesendet: Mittwoch, 02. März 2016 um 20:50 Uhr
Von: "Vivia Nikolaidou" <[hidden email]>
An: "Discussion of the development of and with GStreamer" <[hidden email]>
Betreff: Re: Segmentation fault when using mpeg2enc plugin
Hi,

Thanks for reporting this crash. It is now fixed in latest git:
http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=c3d6635bbff70f9c1d5314ecb6d3d38cdccfd3ee

Best regards,

Vivia

On 2 March 2016 at 21:37, <[hidden email]> wrote:
> Hi,
>
> i am using a pipeline to encode a video stream with the mpeg2enc plugin. The
> element is created with:
>
> videoEnc = Gst.ElementFactory.make("mpeg2enc")
> videoEnc.set_property("format", 1)
> videoEnc.set_property("norm", "p")
>
> the crash occured at the moment a queue is linked to this element:
>
> queueVideo.link(videoEnc)
>
> i installed debugging symbols for gstreamer and some plugins. gdb gives me
> the following traceback:
>
> (gdb) backtrace
> #0 strlen () at ../sysdeps/x86_64/strlen.S:106
> #1 0x00007fc822a13323 in g_strdup () from
> /lib/x86_64-linux-gnu/libglib-2.0.so.0
> #2 0x00007fc822cf3efc in ?? () from
> /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
> #3 0x00007fc812b94c90 in gst_structure_set_valist_internal
> (structure=<optimized out>, fieldname=<optimized out>,
> varargs=0x7fc832c00750) at gststructure.c:605
> #4 0x00007fc812b96ac5 in gst_structure_new_valist (name=<optimized out>,
> firstfield=0x7fc7f6828052 "format", varargs=varargs@entry=0x7fc832c00750) at
> gststructure.c:284
> #5 0x00007fc812b96b64 in gst_structure_new (name=name@entry=0x7fc7f682798e
> "video/x-raw", firstfield=firstfield@entry=0x7fc7f6828052 "format") at
> gststructure.c:253
> #6 0x00007fc7f682464b in gst_mpeg2enc_structure_from_norm
> (enc=enc@entry=0x20e77c0, horiz=352, pal_v=288, ntsc_v=240) at
> gstmpeg2enc.cc:258
> #7 0x00007fc7f682588f in gst_mpeg2enc_getcaps (pad=0x7fc82800d000,
> enc=0x20e77c0) at gstmpeg2enc.cc:311
> #8 gst_mpeg2enc_sink_query (pad=0x7fc82800d000, parent=0x20e77c0,
> query=0x7fc828054ad0) at gstmpeg2enc.cc:360
> #9 0x00007fc812b777f8 in gst_pad_query (pad=pad@entry=0x7fc82800d000,
> query=query@entry=0x7fc828054ad0) at gstpad.c:3831
> #10 0x00007fc812bac2a4 in gst_pad_query_caps (pad=pad@entry=0x7fc82800d000,
> filter=filter@entry=0x0) at gstutils.c:2841
> #11 0x00007fc812bace8a in gst_element_get_compatible_pad
> (element=element@entry=0x20e77c0, pad=pad@entry=0x7fc82800c4c0,
> caps=caps@entry=0x0) at gstutils.c:1053
> #12 0x00007fc812badf27 in gst_element_link_pads_full (src=0x7fc828014120,
> srcpadname=<optimized out>, dest=0x20e77c0, destpadname=<optimized out>,
> flags=GST_PAD_LINK_CHECK_DEFAULT) at gstutils.c:1691
> #13 0x00007fc81adb4d90 in ffi_call_unix64 () from
> /usr/lib/x86_64-linux-gnu/libffi.so.6
> #14 0x00007fc81adb47f8 in ffi_call () from
> /usr/lib/x86_64-linux-gnu/libffi.so.6
> #15 0x00007fc8131266f4 in ?? () from
> /usr/lib/python2.7/dist-packages/gi/_gi.so
> #16 0x00007fc813128148 in ?? () from
> /usr/lib/python2.7/dist-packages/gi/_gi.so
> #17 0x00007fc81311c4ee in ?? () from
> /usr/lib/python2.7/dist-packages/gi/_gi.so
> #18 0x00000000004bf3cc in PyObject_Call (kw=0x0, arg=(<__main__.GstMpeg2enc
> at remote 0x7fc80c512dc0>,), func=<gi.FunctionInfo at remote
> 0x7fc80e00b490>) at ../Objects/abstract.c:2529
> #19 do_call (nk=<optimized out>, na=<optimized out>,
> pp_stack=0x7fc832c00e10, func=<gi.FunctionInfo at remote 0x7fc80e00b490>) at
> ../Python/ceval.c:4574
> #20 call_function (oparg=<optimized out>, pp_stack=0x7fc832c00e10) at
> ../Python/ceval.c:4379
> #21 PyEval_EvalFrameEx () at ../Python/ceval.c:2993
> #22 0x00000000004bf10f in fast_function (nk=<optimized out>, na=<optimized
> out>, n=1, pp_stack=0x7fc832c00f30, func=<function at remote
> 0x7fc812a92320>) at ../Python/ceval.c:4442
> #23 call_function (oparg=<optimized out>, pp_stack=0x7fc832c00f30) at
> ../Python/ceval.c:4377
> #24 PyEval_EvalFrameEx () at ../Python/ceval.c:2993
>
> Same crash occurs when using format 4 (videoEnc.set_property("format", 4))
> but NO CRASH for format 0. Format 0 starts encoding but gives another error
> (streaming task paused, reason not-negotiated (-4))
> but that is not related to the crash i guess.
> I am using gstreamer 1.6.0-1ubuntu1. The pipeline in principle works when i
> use another video/audio encoder and muxer.
>
> Regards,
> Jens
>
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Aw: Re: Segmentation fault when using mpeg2enc plugin

Sebastian Dröge-3
On Fr, 2016-03-04 at 10:59 +0100, [hidden email] wrote:
> I dont't know how fast linux distributions update the gstreamer libs,
> but does it make sense to backport this fix to gestreamer 1.6 branch?

http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=86c622531d746543117ed82e1982bab2a750736e

Still won't get automatically in your Linux distro unless someone does
it there and especially first reports it to them :)

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (968 bytes) Download Attachment