Send Motion-user mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
https://lists.sourceforge.net/lists/listinfo/motion-user
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Motion-user digest..."
Today's Topics:
1. Re: segfault details (tosiara)
2. Re: segfault details (Jim Dodgen)
----------------------------------------------------------------------
Message: 1
Date: Sat, 2 May 2015 07:21:35 +0300
From: tosiara <[email protected]>
Subject: Re: [Motion-user] segfault details
To: Jim Dodgen <[email protected]>
Cc: Motion discussion list <[email protected]>
Message-ID:
<cachtdwtsapuiucz0o6xtsegfwvvg5dnsdvrmbbzryaqwknm...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Can you try to compile this version and see if it segfaults too?
https://github.com/Mr-Dave/motion
On Fri, May 1, 2015 at 11:26 PM, Jim Dodgen <[email protected]> wrote:
> Whoops, I left out the config files
>
> ---- motion.conf ----
>
> daemon off
>
> setup_mode off
> frequency 0
>
> rotate 0
>
> width 640
>
> height 480
>
> framerate 2
>
> minimum_frame_time 0
>
> auto_brightness off
>
> brightness 0
>
> contrast 0
>
> saturation 0
>
> hue 0
>
> roundrobin_frames 1
>
> roundrobin_skip 1
>
> switchfilter off
>
>
> threshold 1500
>
> threshold_tune off
>
> noise_level 32
>
> noise_tune on
>
> despeckle_filter EedDl
>
> smart_mask_speed 0
>
> lightswitch 100
>
> minimum_motion_frames 2
>
>
> pre_capture 0
> post_capture 0
>
> event_gap 60
>
> max_movie_time 60
>
> emulate_motion off
>
> output_pictures on
> output_debug_pictures off
> quality 75
> picture_type jpeg
>
>
>
> ffmpeg_output_movies on
> ffmpeg_output_debug_movies off
> ffmpeg_timelapse 0
> ffmpeg_timelapse_mode hourly
> ffmpeg_bps 500000
> ffmpeg_variable_bitrate 0
>
> ffmpeg_video_codec mpeg4
>
> ffmpeg_deinterlace off
>
>
> snapshot_interval 10
>
>
> locate_motion_mode off
> locate_motion_style box
>
>
> text_right %Y-%m-%d\n%T-%q
> text_changes off
>
> text_event %Y%m%d%H%M%S
> text_double off
>
> target_dir /tmp/motion
>
> snapshot_filename lastsnap
>
>
> picture_filename %v-%Y%m%d%H%M%S-%q
>
> movie_filename %v-%Y%m%d%H%M%S
>
> timelapse_filename %Y%m%d-timelapse
>
> ipv6_enabled off
>
> webcontrol_port 0
> track_type 0
> track_auto off
> track_motorx 0
> track_motory 0
> track_maxx 0
> track_maxy 0
> track_iomojo_id 0
> track_step_angle_x 10
> track_step_angle_y 10
> track_move_wait 10
> track_speed 255
> track_stepsize 40
>
>
> quiet on
>
> sql_log_picture on
> sql_log_snapshot off
>
> database_type sqlite3
> sqlite3_db /home/jim/run_motion/test.db
>
> sql_query insert or ignore into images (camera_name, file_name, event,
> changed_pixels, date) values ('%C', '%f', '%v', '%D', '%y-%m-%d %H:%M')
>
> #thread /home/jim/run_motion/T1.conf
> #thread /home/jim/run_motion/T2.conf
> #thread /home/jim/run_motion/T3.conf
> thread /home/jim/run_motion/T4.conf
> #thread /home/jim/run_motion/T5.conf
> #thread /home/jim/run_motion/T6.conf
>
>
> ----- T4.conf ----
>
> videodevice /dev/video0
>
> v4l2_palette 17
>
> input 0
> norm 1
>
> lightswitch 30
> text_event blue
> text_left blue
> target_dir /tmp/blue
>
> webcam_port 0
>
>
> *Jim Dodgen*
>
>
>
>
>
>
>
> On Fri, May 1, 2015 at 1:11 PM, Jim Dodgen <[email protected]> wrote:
>
>> Compiling and running from motion revision 564 using ffmpeg 2.6.2 built
>> from source (from https://www.ffmpeg.org/download.html#releases).
>>
>>
>> *Here is my analysis so far:*
>>
>> the only changes are the recommended addition of videodev2.h to track.c
>> and the additions to the Makefile LIBS of *-lswresample -lva*
>>
>> *The segfault happens when ever movement is detected.*
>>
>> gdb takes me to an issue where ffmpeg 2.6.2 ->* libavformat/utils.c* ->
>> subroutine *avformat_new_stream* -> line 3718 is the issue:
>>
>> *st->inject_global_side_data = s->internal->inject_global_side_data;*
>>
>> from gdb I see "s->internal" is null and thus is causing the segfault.
>>
>> *"s->internal" *is a* AVFormatInternal*
>>
>> *Here is the gdb stuff*
>>
>> [1] [NTC] [EVT] event_newfile: File of type 2 saved to:
>> /tmp/blue/lastsnap.jpg
>> [1] [NTC] [EVT] event_new_video FPS 2
>>
>> Program received signal SIGSEGV, Segmentation fault.
>> [Switching to Thread 0xb734cb40 (LWP 1698)]
>> 0x081f876f in avformat_new_stream (s=0xb6a118a0, c=c@entry=0x0) at
>> libavformat/utils.c:3718
>> 3718 st->inject_global_side_data =
>> s->internal->inject_global_side_data;
>> (gdb) backtrace
>> #0 0x081f876f in avformat_new_stream (s=0xb6a118a0, c=c@entry=0x0) at
>> libavformat/utils.c:3718
>> #1 0x080c0e1e in ffmpeg_open (ffmpeg_video_codec=<optimized out>,
>> filename=filename@entry=0x924ba18 "/tmp/blue/01-20150501130502.avi",
>> y=y@entry=0xb67cb008
>> "\020\020\020\021\020<w\230\223\212\212\217\217\212\211\213\214\214\214\211\210\211\211\212\211\211\213\213\215\216\214\211\211\211\213\213\213\212\213\213\214\216\214\213\211\211\211\212\212\211\213\212\212\212\210\207\207\212\214\215\214\212\211\211\213\214\214\212\213\214\212\213\210\211\212\211\212\211\210\210\212\212\212\207\204\205\205\207\210\212\214\212\212\211\211\210\206\210\212\213\212\210\207\210\210\207\207\206\206\205\205\206\206\206\206\210\207\207\210\210\212\213\211\207\206\210\210\212\210\207\211\210\207\206\204\205\205\204\205\205\205\206\206\205\205\205\206\207\205\205\207\205\206\205\205\205\205\206\207\211\207\207\204\204\211\212\211\210\207\211\212\211\211\211\210\204\204\203\205\206\207\214\214\212\211\212\212\214\212\210\207\205\211\211\211\213\211\211\206\207"...,
>>
>> u=0xb6816008
>> "\202\177ztrty||~||zyzxz||||||||z|||~~\200\200\200~|||||}~~~~~\200\200\200\200~~~~\200~\200\200\177\200~~~}|}~~~~||zyxyz||~\177\200\200\177~}~~\200\202\203\204\202\201\200~~||z{|~}~|||||}~~~~~~~}~~~~~~|||{zzz||||||zzzz|||{||{|{|zzz{|~~\200~~|||zzxwvvvvvxy|~}~}~|||zz|{|{|zyxvvxxx"...,
>>
>> v=v@entry=0xb6828c08
>> "}zxx}\200\202\203\202\203\203\201\200\177\200\200\200\201\201\203\203\203\203\202\203\202\203\203\203\203\203\203\203\204\204\206\205\206\204\204\203\202\201\201\201\203\202\203\201\201\201\201\201\201\201\200\200\200\201\201\201\201\201\201\201\201\201\201\200\200\201\200\200\200\200\200\200\201\201\201\203\203\203\201\201\201\201\201\202\203\203\203\203\203\203\203\203\203\204\204\206\206\206\205\206\204\204\204\204\204\203\202\203\202\203\203\202\203\202\203\203\202\203\201\201\201\201\201\200\200\200\200\201\203\203\203\203\203\203\203\203\204\206\205\206\204\204\204\204\204\204\204\206\205\206\207\207\206\206\206\206\206\207\207\207\206\206\206\205\206\204\203\204\204\204\206\206\206\205\206\204\204\204\204\204\206\205\206\206\206\206\205\206\204\204\204\204\204\204\204"...,
>> width=640, height=480, rate=2, bps=500000, vbr=0) at ffmpeg.c:504
>> #2 0x080b67c7 in event_ffmpeg_newfile (cnt=0x9247240, type=3,
>> img=0xb67cb008
>> "\020\020\020\021\020<w\230\223\212\212\217\217\212\211\213\214\214\214\211\210\211\211\212\211\211\213\213\215\216\214\211\211\211\213\213\213\212\213\213\214\216\214\213\211\211\211\212\212\211\213\212\212\212\210\207\207\212\214\215\214\212\211\211\213\214\214\212\213\214\212\213\210\211\212\211\212\211\210\210\212\212\212\207\204\205\205\207\210\212\214\212\212\211\211\210\206\210\212\213\212\210\207\210\210\207\207\206\206\205\205\206\206\206\206\210\207\207\210\210\212\213\211\207\206\210\210\212\210\207\211\210\207\206\204\205\205\204\205\205\205\206\206\205\205\205\206\207\205\205\207\205\206\205\205\205\205\206\207\211\207\207\204\204\211\212\211\210\207\211\212\211\211\211\210\204\204\203\205\206\207\214\214\212\211\212\212\214\212\210\207\205\211\211\211\213\211\211\206\207"...,
>> dummy1=0x0, dummy2=0x0, currenttime_tm=0xb6a117d4) at event.c:586
>> #3 0x080b76f6 in event (cnt=cnt@entry=0x9247240, type=type@entry=3,
>> image=0xb67cb008
>> "\020\020\020\021\020<w\230\223\212\212\217\217\212\211\213\214\214\214\211\210\211\211\212\211\211\213\213\215\216\214\211\211\211\213\213\213\212\213\213\214\216\214\213\211\211\211\212\212\211\213\212\212\212\210\207\207\212\214\215\214\212\211\211\213\214\214\212\213\214\212\213\210\211\212\211\212\211\210\210\212\212\212\207\204\205\205\207\210\212\214\212\212\211\211\210\206\210\212\213\212\210\207\210\210\207\207\206\206\205\205\206\206\206\206\210\207\207\210\210\212\213\211\207\206\210\210\212\210\207\211\210\207\206\204\205\205\204\205\205\205\206\206\205\205\205\206\207\205\205\207\205\206\205\205\205\205\206\207\211\207\207\204\204\211\212\211\210\207\211\212\211\211\211\210\204\204\203\205\206\207\214\214\212\211\212\212\214\212\210\207\205\211\211\211\213\211\211\206\207"...,
>> filename=filename@entry=0x0, eventdata=eventdata@entry=0x0,
>> tm=tm@entry=0xb6a117d4)
>> at event.c:930
>> #4 0x0809ef83 in motion_detected (cnt=cnt@entry=0x9247240, dev=3,
>> img=img@entry=0xb6a117c8) at motion.c:465
>> #5 0x080a087a in motion_loop (arg=0x9247240) at motion.c:1828
>> #6 0xb7facf70 in start_thread (arg=0xb734cb40) at pthread_create.c:312
>> #7 0xb7cbabee in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:129
>> (gdb)
>>
>>
>>
>>
>>
>> *Jim Dodgen*
>>
>>
>>
>>
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
------------------------------
Message: 2
Date: Fri, 1 May 2015 22:05:32 -0700
From: Jim Dodgen <[email protected]>
Subject: Re: [Motion-user] segfault details
To: tosiara <[email protected]>
Cc: Motion discussion list <[email protected]>
Message-ID:
<CAJ2wgcpLm=hptxxg7wrifjuy1ruqxjp35e-aorud4ercgus...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Ok same LIBS changes -lswresample -lva and track.c #include
<linux/videodev2.h>
No crash ! I'll let it run all night (I'm in California USA)
I have been making some improvements to the sqlite3 logging, where should
I be doing this?
*Jim Dodgen*
On Fri, May 1, 2015 at 9:21 PM, tosiara <[email protected]> wrote:
> Can you try to compile this version and see if it segfaults too?
>
> https://github.com/Mr-Dave/motion
>
> On Fri, May 1, 2015 at 11:26 PM, Jim Dodgen <[email protected]> wrote:
>
>> Whoops, I left out the config files
>>
>> ---- motion.conf ----
>>
>> daemon off
>>
>> setup_mode off
>> frequency 0
>>
>> rotate 0
>>
>> width 640
>>
>> height 480
>>
>> framerate 2
>>
>> minimum_frame_time 0
>>
>> auto_brightness off
>>
>> brightness 0
>>
>> contrast 0
>>
>> saturation 0
>>
>> hue 0
>>
>> roundrobin_frames 1
>>
>> roundrobin_skip 1
>>
>> switchfilter off
>>
>>
>> threshold 1500
>>
>> threshold_tune off
>>
>> noise_level 32
>>
>> noise_tune on
>>
>> despeckle_filter EedDl
>>
>> smart_mask_speed 0
>>
>> lightswitch 100
>>
>> minimum_motion_frames 2
>>
>>
>> pre_capture 0
>> post_capture 0
>>
>> event_gap 60
>>
>> max_movie_time 60
>>
>> emulate_motion off
>>
>> output_pictures on
>> output_debug_pictures off
>> quality 75
>> picture_type jpeg
>>
>>
>>
>> ffmpeg_output_movies on
>> ffmpeg_output_debug_movies off
>> ffmpeg_timelapse 0
>> ffmpeg_timelapse_mode hourly
>> ffmpeg_bps 500000
>> ffmpeg_variable_bitrate 0
>>
>> ffmpeg_video_codec mpeg4
>>
>> ffmpeg_deinterlace off
>>
>>
>> snapshot_interval 10
>>
>>
>> locate_motion_mode off
>> locate_motion_style box
>>
>>
>> text_right %Y-%m-%d\n%T-%q
>> text_changes off
>>
>> text_event %Y%m%d%H%M%S
>> text_double off
>>
>> target_dir /tmp/motion
>>
>> snapshot_filename lastsnap
>>
>>
>> picture_filename %v-%Y%m%d%H%M%S-%q
>>
>> movie_filename %v-%Y%m%d%H%M%S
>>
>> timelapse_filename %Y%m%d-timelapse
>>
>> ipv6_enabled off
>>
>> webcontrol_port 0
>> track_type 0
>> track_auto off
>> track_motorx 0
>> track_motory 0
>> track_maxx 0
>> track_maxy 0
>> track_iomojo_id 0
>> track_step_angle_x 10
>> track_step_angle_y 10
>> track_move_wait 10
>> track_speed 255
>> track_stepsize 40
>>
>>
>> quiet on
>>
>> sql_log_picture on
>> sql_log_snapshot off
>>
>> database_type sqlite3
>> sqlite3_db /home/jim/run_motion/test.db
>>
>> sql_query insert or ignore into images (camera_name, file_name, event,
>> changed_pixels, date) values ('%C', '%f', '%v', '%D', '%y-%m-%d %H:%M')
>>
>> #thread /home/jim/run_motion/T1.conf
>> #thread /home/jim/run_motion/T2.conf
>> #thread /home/jim/run_motion/T3.conf
>> thread /home/jim/run_motion/T4.conf
>> #thread /home/jim/run_motion/T5.conf
>> #thread /home/jim/run_motion/T6.conf
>>
>>
>> ----- T4.conf ----
>>
>> videodevice /dev/video0
>>
>> v4l2_palette 17
>>
>> input 0
>> norm 1
>>
>> lightswitch 30
>> text_event blue
>> text_left blue
>> target_dir /tmp/blue
>>
>> webcam_port 0
>>
>>
>> *Jim Dodgen*
>>
>>
>>
>>
>>
>>
>>
>> On Fri, May 1, 2015 at 1:11 PM, Jim Dodgen <[email protected]> wrote:
>>
>>> Compiling and running from motion revision 564 using ffmpeg 2.6.2 built
>>> from source (from https://www.ffmpeg.org/download.html#releases).
>>>
>>>
>>> *Here is my analysis so far:*
>>>
>>> the only changes are the recommended addition of videodev2.h to track.c
>>> and the additions to the Makefile LIBS of *-lswresample -lva*
>>>
>>> *The segfault happens when ever movement is detected.*
>>>
>>> gdb takes me to an issue where ffmpeg 2.6.2 ->* libavformat/utils.c* ->
>>> subroutine *avformat_new_stream* -> line 3718 is the issue:
>>>
>>> *st->inject_global_side_data = s->internal->inject_global_side_data;*
>>>
>>> from gdb I see "s->internal" is null and thus is causing the segfault.
>>>
>>> *"s->internal" *is a* AVFormatInternal*
>>>
>>> *Here is the gdb stuff*
>>>
>>> [1] [NTC] [EVT] event_newfile: File of type 2 saved to:
>>> /tmp/blue/lastsnap.jpg
>>> [1] [NTC] [EVT] event_new_video FPS 2
>>>
>>> Program received signal SIGSEGV, Segmentation fault.
>>> [Switching to Thread 0xb734cb40 (LWP 1698)]
>>> 0x081f876f in avformat_new_stream (s=0xb6a118a0, c=c@entry=0x0) at
>>> libavformat/utils.c:3718
>>> 3718 st->inject_global_side_data =
>>> s->internal->inject_global_side_data;
>>> (gdb) backtrace
>>> #0 0x081f876f in avformat_new_stream (s=0xb6a118a0, c=c@entry=0x0) at
>>> libavformat/utils.c:3718
>>> #1 0x080c0e1e in ffmpeg_open (ffmpeg_video_codec=<optimized out>,
>>> filename=filename@entry=0x924ba18
>>> "/tmp/blue/01-20150501130502.avi",
>>> y=y@entry=0xb67cb008
>>> "\020\020\020\021\020<w\230\223\212\212\217\217\212\211\213\214\214\214\211\210\211\211\212\211\211\213\213\215\216\214\211\211\211\213\213\213\212\213\213\214\216\214\213\211\211\211\212\212\211\213\212\212\212\210\207\207\212\214\215\214\212\211\211\213\214\214\212\213\214\212\213\210\211\212\211\212\211\210\210\212\212\212\207\204\205\205\207\210\212\214\212\212\211\211\210\206\210\212\213\212\210\207\210\210\207\207\206\206\205\205\206\206\206\206\210\207\207\210\210\212\213\211\207\206\210\210\212\210\207\211\210\207\206\204\205\205\204\205\205\205\206\206\205\205\205\206\207\205\205\207\205\206\205\205\205\205\206\207\211\207\207\204\204\211\212\211\210\207\211\212\211\211\211\210\204\204\203\205\206\207\214\214\212\211\212\212\214\212\210\207\205\211\211\211\213\211\211\206\207"...,
>>>
>>> u=0xb6816008
>>> "\202\177ztrty||~||zyzxz||||||||z|||~~\200\200\200~|||||}~~~~~\200\200\200\200~~~~\200~\200\200\177\200~~~}|}~~~~||zyxyz||~\177\200\200\177~}~~\200\202\203\204\202\201\200~~||z{|~}~|||||}~~~~~~~}~~~~~~|||{zzz||||||zzzz|||{||{|{|zzz{|~~\200~~|||zzxwvvvvvxy|~}~}~|||zz|{|{|zyxvvxxx"...,
>>>
>>> v=v@entry=0xb6828c08
>>> "}zxx}\200\202\203\202\203\203\201\200\177\200\200\200\201\201\203\203\203\203\202\203\202\203\203\203\203\203\203\203\204\204\206\205\206\204\204\203\202\201\201\201\203\202\203\201\201\201\201\201\201\201\200\200\200\201\201\201\201\201\201\201\201\201\201\200\200\201\200\200\200\200\200\200\201\201\201\203\203\203\201\201\201\201\201\202\203\203\203\203\203\203\203\203\203\204\204\206\206\206\205\206\204\204\204\204\204\203\202\203\202\203\203\202\203\202\203\203\202\203\201\201\201\201\201\200\200\200\200\201\203\203\203\203\203\203\203\203\204\206\205\206\204\204\204\204\204\204\204\206\205\206\207\207\206\206\206\206\206\207\207\207\206\206\206\205\206\204\203\204\204\204\206\206\206\205\206\204\204\204\204\204\206\205\206\206\206\206\205\206\204\204\204\204\204\204\204"...,
>>> width=640, height=480, rate=2, bps=500000, vbr=0) at ffmpeg.c:504
>>> #2 0x080b67c7 in event_ffmpeg_newfile (cnt=0x9247240, type=3,
>>> img=0xb67cb008
>>> "\020\020\020\021\020<w\230\223\212\212\217\217\212\211\213\214\214\214\211\210\211\211\212\211\211\213\213\215\216\214\211\211\211\213\213\213\212\213\213\214\216\214\213\211\211\211\212\212\211\213\212\212\212\210\207\207\212\214\215\214\212\211\211\213\214\214\212\213\214\212\213\210\211\212\211\212\211\210\210\212\212\212\207\204\205\205\207\210\212\214\212\212\211\211\210\206\210\212\213\212\210\207\210\210\207\207\206\206\205\205\206\206\206\206\210\207\207\210\210\212\213\211\207\206\210\210\212\210\207\211\210\207\206\204\205\205\204\205\205\205\206\206\205\205\205\206\207\205\205\207\205\206\205\205\205\205\206\207\211\207\207\204\204\211\212\211\210\207\211\212\211\211\211\210\204\204\203\205\206\207\214\214\212\211\212\212\214\212\210\207\205\211\211\211\213\211\211\206\207"...,
>>> dummy1=0x0, dummy2=0x0, currenttime_tm=0xb6a117d4) at event.c:586
>>> #3 0x080b76f6 in event (cnt=cnt@entry=0x9247240, type=type@entry=3,
>>> image=0xb67cb008
>>> "\020\020\020\021\020<w\230\223\212\212\217\217\212\211\213\214\214\214\211\210\211\211\212\211\211\213\213\215\216\214\211\211\211\213\213\213\212\213\213\214\216\214\213\211\211\211\212\212\211\213\212\212\212\210\207\207\212\214\215\214\212\211\211\213\214\214\212\213\214\212\213\210\211\212\211\212\211\210\210\212\212\212\207\204\205\205\207\210\212\214\212\212\211\211\210\206\210\212\213\212\210\207\210\210\207\207\206\206\205\205\206\206\206\206\210\207\207\210\210\212\213\211\207\206\210\210\212\210\207\211\210\207\206\204\205\205\204\205\205\205\206\206\205\205\205\206\207\205\205\207\205\206\205\205\205\205\206\207\211\207\207\204\204\211\212\211\210\207\211\212\211\211\211\210\204\204\203\205\206\207\214\214\212\211\212\212\214\212\210\207\205\211\211\211\213\211\211\206\207"...,
>>> filename=filename@entry=0x0, eventdata=eventdata@entry=0x0,
>>> tm=tm@entry=0xb6a117d4)
>>> at event.c:930
>>> #4 0x0809ef83 in motion_detected (cnt=cnt@entry=0x9247240, dev=3,
>>> img=img@entry=0xb6a117c8) at motion.c:465
>>> #5 0x080a087a in motion_loop (arg=0x9247240) at motion.c:1828
>>> #6 0xb7facf70 in start_thread (arg=0xb734cb40) at pthread_create.c:312
>>> #7 0xb7cbabee in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:129
>>> (gdb)
>>>
>>>
>>>
>>>
>>>
>>> *Jim Dodgen*
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
------------------------------
------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
------------------------------
_______________________________________________
Motion-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/motion-user
End of Motion-user Digest, Vol 108, Issue 3
*******************************************