--------------------------------------------------------------------------------------------------------------- INITIALIZING VIDBOT, v1.7.1... --------------------------------------------------------------------------------------------------------------- [23:10:13.463] Vidbot :: start() [23:10:13.463] Vidbot :: _next(), _stepIndex:0 of 4 [23:10:13.464] index :: _onStepStarted_vidbot(), step: 1 [23:10:13.465] Vidbot :: step[0], label:Initializing Core [23:10:13.475] index :: _onStepProgress_vidbot(), percent: 20 [23:10:13.475] Vidbot :: _parse() [23:10:13.476] index :: _onStepProgress_vidbot(), percent: 40 [23:10:13.477] Vidbot :: _validate() [23:10:13.477] index :: _onStepProgress_vidbot(), percent: 60 [23:10:13.478] Vidbot :: _fonts() [23:10:13.478] FabricFontManager :: add(), id: SourceSansPro-Bold [23:10:13.478] src: /var/app/Vidbot-V2/assets/fonts/SourceSansPro/SourceSansPro-Bold.ttf [23:10:13.487] FabricFontManager :: add(), id: SourceSansPro-Light [23:10:13.487] src: /var/app/Vidbot-V2/assets/fonts/SourceSansPro/SourceSansPro-Light.ttf [23:10:13.488] FabricFontManager :: add(), id: DINOT-Bold [23:10:13.488] src: /var/app/Vidbot-V2/assets/fonts/DINOT/DINOT-Bold.otf [23:10:13.489] FabricFontManager :: add(), id: DINOT-Light [23:10:13.489] src: /var/app/Vidbot-V2/assets/fonts/DINOT/DINOT-Light.otf [23:10:13.490] FabricFontManager :: add(), id: TradeGothicLTStd-Regular [23:10:13.490] src: /var/app/Vidbot-V2/assets/fonts/TradeGothicCond/TradeGothicLTStd-Regular.otf [23:10:13.491] FabricFontManager :: add(), id: TradeGothicLTStd-Bold [23:10:13.491] src: /var/app/Vidbot-V2/assets/fonts/TradeGothicCond/TradeGothicLTStd-Bold.otf [23:10:13.493] index :: _onStepProgress_vidbot(), percent: 80 [23:10:13.493] Vidbot :: _clips() [23:10:13.494] StreamManager :: add(), id:audio_vo, type:audio [23:10:13.494] AudioClip[audio_vo] :: constructor() [23:10:13.494] InputStream[audio_vo] :: constructor() [23:10:13.494] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'audio_vo', clipId: null } [23:10:13.497] StreamManager :: add(), id:bg_music, type:audio [23:10:13.497] AudioClip[bg_music] :: constructor() [23:10:13.497] InputStream[bg_music] :: constructor() [23:10:13.498] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'bg_music', clipId: null } [23:10:13.498] StreamManager :: add(), id:intro, type:video [23:10:13.498] VideoStream[intro] :: constructor() [23:10:13.498] InputStream[intro] :: constructor() [23:10:13.499] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'intro', clipId: null } [23:10:13.499] StreamManager :: add(), id:simplefadedisplay, type:canvas [23:10:13.499] CanvasStream[canvas_360008594092] :: constructor() [23:10:13.499] InputStream[canvas_360008594092] :: constructor() [23:10:13.584] KenBurnsSlideshow[simplefadedisplay] :: constructor() [23:10:13.585] Overlay[simplefadedisplay] :: constructor() [23:10:13.585] CanvasClip[simplefadedisplay] :: constructor() [23:10:13.585] Clip[simplefadedisplay] :: constructor() [23:10:13.585] clip:"simplefadedisplay" added to stream:"canvas_360008594092" [23:10:13.585] Vidbot :: StreamMgr.on( 'ADDED' ), data: { streamID: 'canvas_360008594092', clipId: 'simplefadedisplay' } [23:10:13.585] all added... [23:10:13.586] Vidbot :: _next(), _stepIndex:1 of 4 [23:10:13.586] index :: _onStepCompleted_vidbot(), step: 1 [23:10:13.586] index :: _onStepStarted_vidbot(), step: 2 [23:10:13.586] Vidbot :: step[1], label:Initializing Input Streams [23:10:13.587] StreamManager :: init() [23:10:13.587] Vidbot :: StreamMgr.on( 'STREAM_INITED' ), data: { streamID: 'audio_vo', progress: 0.25 } [23:10:13.587] index :: _onStepProgress_vidbot(), percent: 25 [23:10:13.587] Vidbot :: StreamMgr.on( 'STREAM_INITED' ), data: { streamID: 'bg_music', progress: 0.5 } [23:10:13.588] index :: _onStepProgress_vidbot(), percent: 50 [23:10:13.588] Vidbot :: StreamMgr.on( 'STREAM_INITED' ), data: { streamID: 'intro', progress: 0.75 } [23:10:13.588] index :: _onStepProgress_vidbot(), percent: 75 [23:10:13.588] CanvasStream[canvas_360008594092] :: _init(), BEGIN [23:10:13.588] i:0, c.id:simplefadedisplay [23:10:13.589] KenBurnsSlideshow[simplefadedisplay] :: _init(), BEGIN [23:10:13.589] KenBurnsSlideshow[simplefadedisplay] :: _validate() [23:10:13.590] KenBurnsSlideshow[undefined] :: _validateAnim() [23:10:13.590] KenBurnsSlideshow[undefined] :: _validateTheme() [23:10:13.592] KenBurnsSlideshow[simplefadedisplay] :: _build() [23:10:13.598] AnimatedImageFrame[aif] :: constructor() [23:10:13.599] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.599] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_1.jpg [23:10:13.644] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.649] AnimatedImageFrame[aif] :: _init(), END [23:10:13.651] AnimatedImageFrame[aif] :: constructor() [23:10:13.652] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.652] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_2.jpg [23:10:13.672] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.674] AnimatedImageFrame[aif] :: _init(), END [23:10:13.674] AnimatedImageFrame[aif] :: constructor() [23:10:13.675] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.675] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_3.jpg [23:10:13.694] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.696] AnimatedImageFrame[aif] :: _init(), END [23:10:13.697] AnimatedImageFrame[aif] :: constructor() [23:10:13.697] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.697] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_4.jpg [23:10:13.716] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.717] AnimatedImageFrame[aif] :: _init(), END [23:10:13.718] AnimatedImageFrame[aif] :: constructor() [23:10:13.718] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.718] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_5.jpg [23:10:13.737] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.739] AnimatedImageFrame[aif] :: _init(), END [23:10:13.739] AnimatedImageFrame[aif] :: constructor() [23:10:13.740] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.740] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_6.jpg [23:10:13.759] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.761] AnimatedImageFrame[aif] :: _init(), END [23:10:13.761] AnimatedImageFrame[aif] :: constructor() [23:10:13.762] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.762] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_7.jpg [23:10:13.785] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.786] AnimatedImageFrame[aif] :: _init(), END [23:10:13.786] AnimatedImageFrame[aif] :: constructor() [23:10:13.787] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.787] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_8.jpg [23:10:13.806] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.807] AnimatedImageFrame[aif] :: _init(), END [23:10:13.808] AnimatedImageFrame[aif] :: constructor() [23:10:13.808] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.808] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_9.jpg [23:10:13.829] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.831] AnimatedImageFrame[aif] :: _init(), END [23:10:13.831] AnimatedImageFrame[aif] :: constructor() [23:10:13.832] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.832] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_10.jpg [23:10:13.851] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.852] AnimatedImageFrame[aif] :: _init(), END [23:10:13.853] AnimatedImageFrame[aif] :: constructor() [23:10:13.853] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.853] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_11.jpg [23:10:13.873] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.875] AnimatedImageFrame[aif] :: _init(), END [23:10:13.875] AnimatedImageFrame[aif] :: constructor() [23:10:13.875] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.875] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_12.jpg [23:10:13.897] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.898] AnimatedImageFrame[aif] :: _init(), END [23:10:13.899] AnimatedImageFrame[aif] :: constructor() [23:10:13.899] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.899] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_13.jpg [23:10:13.919] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.920] AnimatedImageFrame[aif] :: _init(), END [23:10:13.921] AnimatedImageFrame[aif] :: constructor() [23:10:13.921] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.921] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_14.jpg [23:10:13.941] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.942] AnimatedImageFrame[aif] :: _init(), END [23:10:13.943] AnimatedImageFrame[aif] :: constructor() [23:10:13.943] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.943] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_15.jpg [23:10:13.964] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.966] AnimatedImageFrame[aif] :: _init(), END [23:10:13.966] AnimatedImageFrame[aif] :: constructor() [23:10:13.966] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.967] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_16.jpg [23:10:13.985] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:13.986] AnimatedImageFrame[aif] :: _init(), END [23:10:13.987] AnimatedImageFrame[aif] :: constructor() [23:10:13.987] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:13.987] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_17.jpg [23:10:14.006] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:14.007] AnimatedImageFrame[aif] :: _init(), END [23:10:14.008] AnimatedImageFrame[aif] :: constructor() [23:10:14.008] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:14.008] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_18.jpg [23:10:14.028] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:14.029] AnimatedImageFrame[aif] :: _init(), END [23:10:14.030] AnimatedImageFrame[aif] :: constructor() [23:10:14.030] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:14.030] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_19.jpg [23:10:14.061] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:14.062] AnimatedImageFrame[aif] :: _init(), END [23:10:14.063] AnimatedImageFrame[aif] :: constructor() [23:10:14.063] AnimatedImageFrame[aif] :: _init(), BEGIN [23:10:14.063] CanvasClip :: LoadImageWithPromise(), src: 9CC7518D-D0EF-6382-86B9-C41222AE539A_20.jpg [23:10:14.086] CanvasClip :: LoadImageWithPromise(), loaded, isError: false [23:10:14.087] AnimatedImageFrame[aif] :: _init(), END [23:10:14.088] Overlay[simplefadedisplay] :: _animate() [23:10:14.089] KenBurnsSlideshow[simplefadedisplay] :: _init(), END [23:10:14.089] CanvasStream[simplefadedisplay] :: _init(), p.then() [23:10:14.089] CanvasStream[canvas_360008594092] :: _init(), promise.all.then() [23:10:14.091] CanvasStream[canvas_360008594092] :: _init(), END [23:10:14.091] StreamMangaer :: init(), stream[canvas_360008594092].then() [23:10:14.091] Vidbot :: StreamMgr.on( 'STREAM_INITED' ), data: { streamID: 'canvas_360008594092', progress: 1 } [23:10:14.091] index :: _onStepProgress_vidbot(), percent: 100 [23:10:14.091] StreamManager :: init(), promise.all.then... [23:10:14.091] Vidbot :: StreamMgr.on( 'INITED' ) [23:10:14.092] Vidbot :: _next(), _stepIndex:2 of 4 [23:10:14.092] index :: _onStepCompleted_vidbot(), step: 2 [23:10:14.092] index :: _onStepStarted_vidbot(), step: 3 [23:10:14.092] Vidbot :: step[2], label:Rendering Canvas Streams [23:10:14.093] Vidbot :: StreamMgr.on( 'RENDER_STARTED' ), data: undefined [23:10:14.093] StreamManager :: render() [23:10:14.093] CanvasStream[canvas_360008594092] :: render() [23:10:14.169] index :: _onStepProgress_vidbot(), percent: 0 [23:10:20.198] index :: _onStepProgress_vidbot(), percent: 5 [23:10:32.964] index :: _onStepProgress_vidbot(), percent: 10 [23:10:52.812] index :: _onStepProgress_vidbot(), percent: 15 [23:11:05.837] index :: _onStepProgress_vidbot(), percent: 20 [23:11:20.586] index :: _onStepProgress_vidbot(), percent: 25 [23:11:35.190] index :: _onStepProgress_vidbot(), percent: 30 [23:11:50.610] index :: _onStepProgress_vidbot(), percent: 35 [23:12:04.170] index :: _onStepProgress_vidbot(), percent: 40 [23:12:16.346] index :: _onStepProgress_vidbot(), percent: 45 [23:12:27.125] index :: _onStepProgress_vidbot(), percent: 50 [23:12:40.383] index :: _onStepProgress_vidbot(), percent: 55 [23:12:52.975] index :: _onStepProgress_vidbot(), percent: 60 [23:13:06.840] index :: _onStepProgress_vidbot(), percent: 65 [23:13:21.936] index :: _onStepProgress_vidbot(), percent: 70 [23:13:37.164] index :: _onStepProgress_vidbot(), percent: 75 [23:13:52.367] index :: _onStepProgress_vidbot(), percent: 80 [23:14:06.116] index :: _onStepProgress_vidbot(), percent: 85 [23:14:18.879] index :: _onStepProgress_vidbot(), percent: 90 [23:14:31.858] index :: _onStepProgress_vidbot(), percent: 95 [23:14:53.888] index :: _onStepProgress_vidbot(), percent: 100 [23:14:55.890] StreamManager :: render(), Promise.all.then... [23:14:55.891] Vidbot :: StreamMgr.on( 'RENDER_COMPLETED' ), data: undefined [23:14:55.891] Vidbot :: _next(), _stepIndex:3 of 4 [23:14:55.892] index :: _onStepCompleted_vidbot(), step: 3 [23:14:55.892] index :: _onStepStarted_vidbot(), step: 4 [23:14:55.893] Vidbot :: step[3], label:Encoding Media [23:14:55.896] VideoStream[intro] :: inputOptions() [23:14:55.896] VideoFilters :: Scale() [23:14:55.897] VideoFilters :: Overlay() [23:14:55.898] CanvasFilters :: Overlay() [23:14:55.898] AudioStream[audio_vo] :: inputOptions() [23:14:55.898] AudioFilters :: Volume() [23:14:55.899] filter: [3:a]volume=1[3_vol] [23:14:55.899] AudioFilters :: Delay() [23:14:55.899] filter: [3_vol]adelay=5030|5030[3_del] [23:14:55.899] AudioStream[bg_music] :: inputOptions() [23:14:55.899] AudioFilters :: Volume() [23:14:55.899] filter: [4:a]volume=0.25[4_vol] [23:14:55.899] AudioFilters :: FadeOut() [23:14:55.900] filter: [4_vol]afade=t=out:st=60:d=1[4_fadeout] [23:14:55.900] AudioFilters :: Delay() [23:14:55.900] filter: [4_fadeout]adelay=5030|5030[4_del] [23:14:55.900] VideoStream[intro] :: inputOptions() [23:14:55.900] AudioFilters :: Volume() [23:14:55.900] filter: [5:a]volume=1[5_vol] [23:14:55.900] AudioFilters :: Delay() [23:14:55.900] filter: [5_vol]adelay=0|0[5_del] [23:14:55.900] AudioFilters :: Mix() [23:14:55.901] filter: [3_del][4_del][5_del]amix=inputs=3:duration=longest[a_out] [23:14:55.901] mixed filter: [3_del][4_del][5_del]amix=inputs=3:duration=longest[a_out] [23:14:55.903] hang.time: 60 [23:14:56.034] Vidbot :: ffmpeg.on( 'start' ) [23:14:56.035] ffmpeg -f lavfi -i color=c=000000:s=960x540:r=30:duration=65.03 -to 00:00:05.030 -i file:///var/www/html/clients/9660/library/960_intro.mp4 -r 30 -i . [23:14:56.035] /tmp/canvas_360008594092_%05d.png -to 00:01:00.000 -i file:///var/www/html/clients/9660/audio/9CC7518D-D0EF-6382-86B9-C41222AE539A.mp3 -to 00:01:00.00 [23:14:56.035] 0 -i file:///var/app/video_pre_processor/assets/vidbot/_files/audio/Orchestra-3_30.mp3 -to 00:00:05.030 -i file:///var/www/html/clients/9660/library/9 [23:14:56.035] 60_intro.mp4 -y -filter_complex [1:v]scale=w=960:h=540[1_scaled];[0:v][1_scaled]overlay=x=0:y=0:enable='between(t,0,5.03)'[1_out];[1_out][2:v]overlay= [23:14:56.035] x=0:y=0[2_out];[3:a]volume=1[3_vol];[3_vol]adelay=5030|5030[3_del];[4:a]volume=0.25[4_vol];[4_vol]afade=t=out:st=60:d=1[4_fadeout];[4_fadeout]adelay=5 [23:14:56.035] 030|5030[4_del];[5:a]volume=1[5_vol];[5_vol]adelay=0|0[5_del];[3_del][4_del][5_del]amix=inputs=3:duration=longest[a_out] -acodec aac -vcodec libx264 - [23:14:56.035] r 30 -f mp4 -map [a_out] -map [2_out] -preset veryfast -crf 18 -movflags frag_keyframe+empty_moov -pix_fmt yuv420p /var/www/html/clients/9660/video/9C [23:14:56.035] C7518D-D0EF-6382-86B9-C41222AE539A.mp4 [23:14:56.323] index :: _onStepProgress_vidbot(), percent: -3194292568 [23:14:56.749] index :: _onStepProgress_vidbot(), percent: 1 [23:14:58.275] index :: _onStepProgress_vidbot(), percent: 5 [23:14:59.763] index :: _onStepProgress_vidbot(), percent: 10 [23:15:00.764] index :: _onStepProgress_vidbot(), percent: 15 [23:15:02.307] index :: _onStepProgress_vidbot(), percent: 21 [23:15:03.811] index :: _onStepProgress_vidbot(), percent: 27 [23:15:04.821] index :: _onStepProgress_vidbot(), percent: 30 [23:15:06.328] index :: _onStepProgress_vidbot(), percent: 36 [23:15:07.333] index :: _onStepProgress_vidbot(), percent: 40 [23:15:08.344] index :: _onStepProgress_vidbot(), percent: 45 [23:15:09.348] index :: _onStepProgress_vidbot(), percent: 51 [23:15:10.361] index :: _onStepProgress_vidbot(), percent: 55 [23:15:11.865] index :: _onStepProgress_vidbot(), percent: 62 [23:15:12.867] index :: _onStepProgress_vidbot(), percent: 66 [23:15:13.873] index :: _onStepProgress_vidbot(), percent: 71 [23:15:14.894] index :: _onStepProgress_vidbot(), percent: 75 [23:15:15.910] index :: _onStepProgress_vidbot(), percent: 81 [23:15:16.920] index :: _onStepProgress_vidbot(), percent: 86 [23:15:17.941] index :: _onStepProgress_vidbot(), percent: 90 [23:15:18.959] index :: _onStepProgress_vidbot(), percent: 95 [23:15:19.959] index :: _onStepProgress_vidbot(), percent: 100 [23:15:20.085] Vidbot :: ffmpeg.on( 'end' ), Done! [23:15:20.086] StreamManager :: dispose() [23:15:20.086] CanvasStream[canvas_360008594092] :: dispose() [23:15:20.103] Vidbot :: fflog.on( 'finish' ) [23:15:20.103] fflog.path: /var/www/html/clients/9660/video/9CC7518D-D0EF-6382-86B9-C41222AE539A.mp4.fflog [23:15:20.103] Vidbot :: _next(), _stepIndex:4 of 4 [23:15:20.104] index :: _onStepCompleted_vidbot(), step: 4 [23:15:20.104] index :: _onComplete_vidbot(), data: { stepTime: 0, appTime: 306.663, output: '/var/www/html/clients/9660/video/9CC7518D-D0EF-6382-86B9-C41222AE539A.mp4', duration: 65.03 } --------------------------------------------------------------------------------------------------------------- Output File : /var/app/video_pre_processor/jobs/postp//var/www/html/clients/9660/video/9CC7518D-D0EF-6382-86B9-C41222AE539A.mp4 Media Duration : 00:01:05.030 Generation Time : 00:05:06.663 ---------------------------------------------------------------------------------------------------------------