blob: 60a34be153c917f944d0fc91f6ab4d632ed26427 [file] [log] [blame]
Geoff Lang2aaa7b42018-01-12 17:17:27 -05001//
2// Copyright (c) 2018 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7// validationES1.cpp: Validation functions for OpenGL ES 1.0 entry point parameters
8
9#include "libANGLE/validationES1.h"
10
11#include "common/debug.h"
Lingfeng Yang13b708f2018-03-21 12:14:10 -070012#include "libANGLE/Context.h"
13#include "libANGLE/ErrorStrings.h"
14
15#define ANGLE_VALIDATE_IS_GLES1(context) \
16 if (context->getClientMajorVersion() > 1) \
17 { \
18 ANGLE_VALIDATION_ERR(context, InvalidOperation(), GLES1Only); \
19 return false; \
20 }
21
22namespace
23{
24
25bool ValidateAlphaFuncCommon(gl::Context *context, gl::AlphaTestFunc func)
26{
27 switch (func)
28 {
29 case gl::AlphaTestFunc::AlwaysPass:
30 case gl::AlphaTestFunc::Equal:
31 case gl::AlphaTestFunc::Gequal:
32 case gl::AlphaTestFunc::Greater:
33 case gl::AlphaTestFunc::Lequal:
34 case gl::AlphaTestFunc::Less:
35 case gl::AlphaTestFunc::Never:
36 case gl::AlphaTestFunc::NotEqual:
37 return true;
38 default:
39 context->handleError(gl::InvalidEnum() << gl::kErrorEnumNotSupported);
40 return false;
41 }
42}
43
44} // anonymous namespace
Geoff Lang2aaa7b42018-01-12 17:17:27 -050045
46namespace gl
47{
48
Lingfeng Yang13b708f2018-03-21 12:14:10 -070049bool ValidateAlphaFunc(Context *context, AlphaTestFunc func, GLfloat ref)
Geoff Lang2aaa7b42018-01-12 17:17:27 -050050{
Lingfeng Yang13b708f2018-03-21 12:14:10 -070051 ANGLE_VALIDATE_IS_GLES1(context);
52 return ValidateAlphaFuncCommon(context, func);
Geoff Lang2aaa7b42018-01-12 17:17:27 -050053}
54
Lingfeng Yang13b708f2018-03-21 12:14:10 -070055bool ValidateAlphaFuncx(Context *context, AlphaTestFunc func, GLfixed ref)
Geoff Lang2aaa7b42018-01-12 17:17:27 -050056{
Lingfeng Yang13b708f2018-03-21 12:14:10 -070057 ANGLE_VALIDATE_IS_GLES1(context);
58 return ValidateAlphaFuncCommon(context, func);
Geoff Lang2aaa7b42018-01-12 17:17:27 -050059}
60
61bool ValidateClearColorx(Context *context, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
62{
63 UNIMPLEMENTED();
64 return true;
65}
66
67bool ValidateClearDepthx(Context *context, GLfixed depth)
68{
69 UNIMPLEMENTED();
70 return true;
71}
72
73bool ValidateClientActiveTexture(Context *context, GLenum texture)
74{
75 UNIMPLEMENTED();
76 return true;
77}
78
79bool ValidateClipPlanef(Context *context, GLenum p, const GLfloat *eqn)
80{
81 UNIMPLEMENTED();
82 return true;
83}
84
85bool ValidateClipPlanex(Context *context, GLenum plane, const GLfixed *equation)
86{
87 UNIMPLEMENTED();
88 return true;
89}
90
91bool ValidateColor4f(Context *context, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
92{
93 UNIMPLEMENTED();
94 return true;
95}
96
97bool ValidateColor4ub(Context *context, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
98{
99 UNIMPLEMENTED();
100 return true;
101}
102
103bool ValidateColor4x(Context *context, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
104{
105 UNIMPLEMENTED();
106 return true;
107}
108
109bool ValidateColorPointer(Context *context,
110 GLint size,
111 GLenum type,
112 GLsizei stride,
113 const void *pointer)
114{
115 UNIMPLEMENTED();
116 return true;
117}
118
119bool ValidateCullFace(Context *context, GLenum mode)
120{
121 UNIMPLEMENTED();
122 return true;
123}
124
125bool ValidateDepthRangex(Context *context, GLfixed n, GLfixed f)
126{
127 UNIMPLEMENTED();
128 return true;
129}
130
131bool ValidateDisableClientState(Context *context, GLenum array)
132{
133 UNIMPLEMENTED();
134 return true;
135}
136
137bool ValidateEnableClientState(Context *context, GLenum array)
138{
139 UNIMPLEMENTED();
140 return true;
141}
142
143bool ValidateFogf(Context *context, GLenum pname, GLfloat param)
144{
145 UNIMPLEMENTED();
146 return true;
147}
148
149bool ValidateFogfv(Context *context, GLenum pname, const GLfloat *params)
150{
151 UNIMPLEMENTED();
152 return true;
153}
154
155bool ValidateFogx(Context *context, GLenum pname, GLfixed param)
156{
157 UNIMPLEMENTED();
158 return true;
159}
160
161bool ValidateFogxv(Context *context, GLenum pname, const GLfixed *param)
162{
163 UNIMPLEMENTED();
164 return true;
165}
166
167bool ValidateFrustumf(Context *context,
168 GLfloat l,
169 GLfloat r,
170 GLfloat b,
171 GLfloat t,
172 GLfloat n,
173 GLfloat f)
174{
175 UNIMPLEMENTED();
176 return true;
177}
178
179bool ValidateFrustumx(Context *context,
180 GLfixed l,
181 GLfixed r,
182 GLfixed b,
183 GLfixed t,
184 GLfixed n,
185 GLfixed f)
186{
187 UNIMPLEMENTED();
188 return true;
189}
190
191bool ValidateGetBufferParameteriv(Context *context, GLenum target, GLenum pname, GLint *params)
192{
193 UNIMPLEMENTED();
194 return true;
195}
196
197bool ValidateGetClipPlanef(Context *context, GLenum plane, GLfloat *equation)
198{
199 UNIMPLEMENTED();
200 return true;
201}
202
203bool ValidateGetClipPlanex(Context *context, GLenum plane, GLfixed *equation)
204{
205 UNIMPLEMENTED();
206 return true;
207}
208
209bool ValidateGetFixedv(Context *context, GLenum pname, GLfixed *params)
210{
211 UNIMPLEMENTED();
212 return true;
213}
214
215bool ValidateGetLightfv(Context *context, GLenum light, GLenum pname, GLfloat *params)
216{
217 UNIMPLEMENTED();
218 return true;
219}
220
221bool ValidateGetLightxv(Context *context, GLenum light, GLenum pname, GLfixed *params)
222{
223 UNIMPLEMENTED();
224 return true;
225}
226
227bool ValidateGetMaterialfv(Context *context, GLenum face, GLenum pname, GLfloat *params)
228{
229 UNIMPLEMENTED();
230 return true;
231}
232
233bool ValidateGetMaterialxv(Context *context, GLenum face, GLenum pname, GLfixed *params)
234{
235 UNIMPLEMENTED();
236 return true;
237}
238
239bool ValidateGetPointerv(Context *context, GLenum pname, void **params)
240{
241 UNIMPLEMENTED();
242 return true;
243}
244
245bool ValidateGetTexEnvfv(Context *context, GLenum target, GLenum pname, GLfloat *params)
246{
247 UNIMPLEMENTED();
248 return true;
249}
250
251bool ValidateGetTexEnviv(Context *context, GLenum target, GLenum pname, GLint *params)
252{
253 UNIMPLEMENTED();
254 return true;
255}
256
257bool ValidateGetTexEnvxv(Context *context, GLenum target, GLenum pname, GLfixed *params)
258{
259 UNIMPLEMENTED();
260 return true;
261}
262
Corentin Wallezf0e89be2017-11-08 14:00:32 -0800263bool ValidateGetTexParameterxv(Context *context, TextureType target, GLenum pname, GLfixed *params)
Geoff Lang2aaa7b42018-01-12 17:17:27 -0500264{
265 UNIMPLEMENTED();
266 return true;
267}
268
269bool ValidateLightModelf(Context *context, GLenum pname, GLfloat param)
270{
271 UNIMPLEMENTED();
272 return true;
273}
274
275bool ValidateLightModelfv(Context *context, GLenum pname, const GLfloat *params)
276{
277 UNIMPLEMENTED();
278 return true;
279}
280
281bool ValidateLightModelx(Context *context, GLenum pname, GLfixed param)
282{
283 UNIMPLEMENTED();
284 return true;
285}
286
287bool ValidateLightModelxv(Context *context, GLenum pname, const GLfixed *param)
288{
289 UNIMPLEMENTED();
290 return true;
291}
292
293bool ValidateLightf(Context *context, GLenum light, GLenum pname, GLfloat param)
294{
295 UNIMPLEMENTED();
296 return true;
297}
298
299bool ValidateLightfv(Context *context, GLenum light, GLenum pname, const GLfloat *params)
300{
301 UNIMPLEMENTED();
302 return true;
303}
304
305bool ValidateLightx(Context *context, GLenum light, GLenum pname, GLfixed param)
306{
307 UNIMPLEMENTED();
308 return true;
309}
310
311bool ValidateLightxv(Context *context, GLenum light, GLenum pname, const GLfixed *params)
312{
313 UNIMPLEMENTED();
314 return true;
315}
316
317bool ValidateLineWidthx(Context *context, GLfixed width)
318{
319 UNIMPLEMENTED();
320 return true;
321}
322
323bool ValidateLoadIdentity(Context *context)
324{
325 UNIMPLEMENTED();
326 return true;
327}
328
329bool ValidateLoadMatrixf(Context *context, const GLfloat *m)
330{
331 UNIMPLEMENTED();
332 return true;
333}
334
335bool ValidateLoadMatrixx(Context *context, const GLfixed *m)
336{
337 UNIMPLEMENTED();
338 return true;
339}
340
341bool ValidateLogicOp(Context *context, GLenum opcode)
342{
343 UNIMPLEMENTED();
344 return true;
345}
346
347bool ValidateMaterialf(Context *context, GLenum face, GLenum pname, GLfloat param)
348{
349 UNIMPLEMENTED();
350 return true;
351}
352
353bool ValidateMaterialfv(Context *context, GLenum face, GLenum pname, const GLfloat *params)
354{
355 UNIMPLEMENTED();
356 return true;
357}
358
359bool ValidateMaterialx(Context *context, GLenum face, GLenum pname, GLfixed param)
360{
361 UNIMPLEMENTED();
362 return true;
363}
364
365bool ValidateMaterialxv(Context *context, GLenum face, GLenum pname, const GLfixed *param)
366{
367 UNIMPLEMENTED();
368 return true;
369}
370
371bool ValidateMatrixMode(Context *context, GLenum mode)
372{
373 UNIMPLEMENTED();
374 return true;
375}
376
377bool ValidateMultMatrixf(Context *context, const GLfloat *m)
378{
379 UNIMPLEMENTED();
380 return true;
381}
382
383bool ValidateMultMatrixx(Context *context, const GLfixed *m)
384{
385 UNIMPLEMENTED();
386 return true;
387}
388
389bool ValidateMultiTexCoord4f(Context *context,
390 GLenum target,
391 GLfloat s,
392 GLfloat t,
393 GLfloat r,
394 GLfloat q)
395{
396 UNIMPLEMENTED();
397 return true;
398}
399
400bool ValidateMultiTexCoord4x(Context *context,
401 GLenum texture,
402 GLfixed s,
403 GLfixed t,
404 GLfixed r,
405 GLfixed q)
406{
407 UNIMPLEMENTED();
408 return true;
409}
410
411bool ValidateNormal3f(Context *context, GLfloat nx, GLfloat ny, GLfloat nz)
412{
413 UNIMPLEMENTED();
414 return true;
415}
416
417bool ValidateNormal3x(Context *context, GLfixed nx, GLfixed ny, GLfixed nz)
418{
419 UNIMPLEMENTED();
420 return true;
421}
422
423bool ValidateNormalPointer(Context *context, GLenum type, GLsizei stride, const void *pointer)
424{
425 UNIMPLEMENTED();
426 return true;
427}
428
429bool ValidateOrthof(Context *context,
430 GLfloat l,
431 GLfloat r,
432 GLfloat b,
433 GLfloat t,
434 GLfloat n,
435 GLfloat f)
436{
437 UNIMPLEMENTED();
438 return true;
439}
440
441bool ValidateOrthox(Context *context,
442 GLfixed l,
443 GLfixed r,
444 GLfixed b,
445 GLfixed t,
446 GLfixed n,
447 GLfixed f)
448{
449 UNIMPLEMENTED();
450 return true;
451}
452
453bool ValidatePointParameterf(Context *context, GLenum pname, GLfloat param)
454{
455 UNIMPLEMENTED();
456 return true;
457}
458
459bool ValidatePointParameterfv(Context *context, GLenum pname, const GLfloat *params)
460{
461 UNIMPLEMENTED();
462 return true;
463}
464
465bool ValidatePointParameterx(Context *context, GLenum pname, GLfixed param)
466{
467 UNIMPLEMENTED();
468 return true;
469}
470
471bool ValidatePointParameterxv(Context *context, GLenum pname, const GLfixed *params)
472{
473 UNIMPLEMENTED();
474 return true;
475}
476
477bool ValidatePointSize(Context *context, GLfloat size)
478{
479 UNIMPLEMENTED();
480 return true;
481}
482
483bool ValidatePointSizex(Context *context, GLfixed size)
484{
485 UNIMPLEMENTED();
486 return true;
487}
488
489bool ValidatePolygonOffsetx(Context *context, GLfixed factor, GLfixed units)
490{
491 UNIMPLEMENTED();
492 return true;
493}
494
495bool ValidatePopMatrix(Context *context)
496{
497 UNIMPLEMENTED();
498 return true;
499}
500
501bool ValidatePushMatrix(Context *context)
502{
503 UNIMPLEMENTED();
504 return true;
505}
506
507bool ValidateRotatef(Context *context, GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
508{
509 UNIMPLEMENTED();
510 return true;
511}
512
513bool ValidateRotatex(Context *context, GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
514{
515 UNIMPLEMENTED();
516 return true;
517}
518
519bool ValidateSampleCoveragex(Context *context, GLclampx value, GLboolean invert)
520{
521 UNIMPLEMENTED();
522 return true;
523}
524
525bool ValidateScalef(Context *context, GLfloat x, GLfloat y, GLfloat z)
526{
527 UNIMPLEMENTED();
528 return true;
529}
530
531bool ValidateScalex(Context *context, GLfixed x, GLfixed y, GLfixed z)
532{
533 UNIMPLEMENTED();
534 return true;
535}
536
537bool ValidateShadeModel(Context *context, GLenum mode)
538{
539 UNIMPLEMENTED();
540 return true;
541}
542
543bool ValidateTexCoordPointer(Context *context,
544 GLint size,
545 GLenum type,
546 GLsizei stride,
547 const void *pointer)
548{
549 UNIMPLEMENTED();
550 return true;
551}
552
553bool ValidateTexEnvf(Context *context, GLenum target, GLenum pname, GLfloat param)
554{
555 UNIMPLEMENTED();
556 return true;
557}
558
559bool ValidateTexEnvfv(Context *context, GLenum target, GLenum pname, const GLfloat *params)
560{
561 UNIMPLEMENTED();
562 return true;
563}
564
565bool ValidateTexEnvi(Context *context, GLenum target, GLenum pname, GLint param)
566{
567 UNIMPLEMENTED();
568 return true;
569}
570
571bool ValidateTexEnviv(Context *context, GLenum target, GLenum pname, const GLint *params)
572{
573 UNIMPLEMENTED();
574 return true;
575}
576
577bool ValidateTexEnvx(Context *context, GLenum target, GLenum pname, GLfixed param)
578{
579 UNIMPLEMENTED();
580 return true;
581}
582
583bool ValidateTexEnvxv(Context *context, GLenum target, GLenum pname, const GLfixed *params)
584{
585 UNIMPLEMENTED();
586 return true;
587}
588
Corentin Wallezf0e89be2017-11-08 14:00:32 -0800589bool ValidateTexParameterx(Context *context, TextureType target, GLenum pname, GLfixed param)
Geoff Lang2aaa7b42018-01-12 17:17:27 -0500590{
591 UNIMPLEMENTED();
592 return true;
593}
594
Corentin Wallezf0e89be2017-11-08 14:00:32 -0800595bool ValidateTexParameterxv(Context *context,
596 TextureType target,
597 GLenum pname,
598 const GLfixed *params)
Geoff Lang2aaa7b42018-01-12 17:17:27 -0500599{
600 UNIMPLEMENTED();
601 return true;
602}
603
604bool ValidateTranslatef(Context *context, GLfloat x, GLfloat y, GLfloat z)
605{
606 UNIMPLEMENTED();
607 return true;
608}
609
610bool ValidateTranslatex(Context *context, GLfixed x, GLfixed y, GLfixed z)
611{
612 UNIMPLEMENTED();
613 return true;
614}
615
616bool ValidateVertexPointer(Context *context,
617 GLint size,
618 GLenum type,
619 GLsizei stride,
620 const void *pointer)
621{
622 UNIMPLEMENTED();
623 return true;
624}
625
626bool ValidateDrawTexfOES(Context *context,
627 GLfloat x,
628 GLfloat y,
629 GLfloat z,
630 GLfloat width,
631 GLfloat height)
632{
633 UNIMPLEMENTED();
634 return true;
635}
636
637bool ValidateDrawTexfvOES(Context *context, const GLfloat *coords)
638{
639 UNIMPLEMENTED();
640 return true;
641}
642
643bool ValidateDrawTexiOES(Context *context, GLint x, GLint y, GLint z, GLint width, GLint height)
644{
645 UNIMPLEMENTED();
646 return true;
647}
648
649bool ValidateDrawTexivOES(Context *context, const GLint *coords)
650{
651 UNIMPLEMENTED();
652 return true;
653}
654
655bool ValidateDrawTexsOES(Context *context,
656 GLshort x,
657 GLshort y,
658 GLshort z,
659 GLshort width,
660 GLshort height)
661{
662 UNIMPLEMENTED();
663 return true;
664}
665
666bool ValidateDrawTexsvOES(Context *context, const GLshort *coords)
667{
668 UNIMPLEMENTED();
669 return true;
670}
671
672bool ValidateDrawTexxOES(Context *context,
673 GLfixed x,
674 GLfixed y,
675 GLfixed z,
676 GLfixed width,
677 GLfixed height)
678{
679 UNIMPLEMENTED();
680 return true;
681}
682
683bool ValidateDrawTexxvOES(Context *context, const GLfixed *coords)
684{
685 UNIMPLEMENTED();
686 return true;
687}
688
689bool ValidateCurrentPaletteMatrixOES(Context *context, GLuint matrixpaletteindex)
690{
691 UNIMPLEMENTED();
692 return true;
693}
694
695bool ValidateLoadPaletteFromModelViewMatrixOES(Context *context)
696{
697 UNIMPLEMENTED();
698 return true;
699}
700
701bool ValidateMatrixIndexPointerOES(Context *context,
702 GLint size,
703 GLenum type,
704 GLsizei stride,
705 const void *pointer)
706{
707 UNIMPLEMENTED();
708 return true;
709}
710
711bool ValidateWeightPointerOES(Context *context,
712 GLint size,
713 GLenum type,
714 GLsizei stride,
715 const void *pointer)
716{
717 UNIMPLEMENTED();
718 return true;
719}
720
721bool ValidatePointSizePointerOES(Context *context, GLenum type, GLsizei stride, const void *pointer)
722{
723 UNIMPLEMENTED();
724 return true;
725}
726
727bool ValidateQueryMatrixxOES(Context *context, GLfixed *mantissa, GLint *exponent)
728{
729 UNIMPLEMENTED();
730 return true;
731}
Lingfeng Yanga0648782018-03-12 14:45:25 -0700732
733bool ValidateGenFramebuffersOES(Context *context, GLsizei n, GLuint *framebuffers)
734{
735 UNIMPLEMENTED();
736 return true;
737}
738
739bool ValidateDeleteFramebuffersOES(Context *context, GLsizei n, const GLuint *framebuffers)
740{
741 UNIMPLEMENTED();
742 return true;
743}
744
745bool ValidateGenRenderbuffersOES(Context *context, GLsizei n, GLuint *renderbuffers)
746{
747 UNIMPLEMENTED();
748 return true;
749}
750
751bool ValidateDeleteRenderbuffersOES(Context *context, GLsizei n, const GLuint *renderbuffers)
752{
753 UNIMPLEMENTED();
754 return true;
755}
756
757bool ValidateBindFramebufferOES(Context *context, GLenum target, GLuint framebuffer)
758{
759 UNIMPLEMENTED();
760 return true;
761}
762
763bool ValidateBindRenderbufferOES(Context *context, GLenum target, GLuint renderbuffer)
764{
765 UNIMPLEMENTED();
766 return true;
767}
768
769bool ValidateCheckFramebufferStatusOES(Context *context, GLenum target)
770{
771 UNIMPLEMENTED();
772 return true;
773}
774
775bool ValidateFramebufferRenderbufferOES(Context *context,
776 GLenum target,
777 GLenum attachment,
778 GLenum rbtarget,
779 GLuint renderbuffer)
780{
781 UNIMPLEMENTED();
782 return true;
783}
784
785bool ValidateFramebufferTexture2DOES(Context *context,
786 GLenum target,
787 GLenum attachment,
788 TextureTarget textarget,
789 GLuint texture,
790 GLint level)
791{
792 UNIMPLEMENTED();
793 return true;
794}
795
796bool ValidateGenerateMipmapOES(Context *context, TextureType target)
797{
798 UNIMPLEMENTED();
799 return true;
800}
801
802bool ValidateGetFramebufferAttachmentParameterivOES(Context *context,
803 GLenum target,
804 GLenum attachment,
805 GLenum pname,
806 GLint *params)
807{
808 UNIMPLEMENTED();
809 return true;
810}
811
812bool ValidateGetRenderbufferParameterivOES(Context *context,
813 GLenum target,
814 GLenum pname,
815 GLint *params)
816{
817 UNIMPLEMENTED();
818 return true;
819}
820
821bool ValidateIsFramebufferOES(Context *context, GLuint framebuffer)
822{
823 UNIMPLEMENTED();
824 return true;
825}
826
827bool ValidateIsRenderbufferOES(Context *context, GLuint renderbuffer)
828{
829 UNIMPLEMENTED();
830 return true;
831}
832
833bool ValidateRenderbufferStorageOES(Context *context,
834 GLenum target,
835 GLint internalformat,
836 GLsizei width,
837 GLsizei height)
838{
839 UNIMPLEMENTED();
840 return true;
841}
842
843// GL_OES_texture_cube_map
844
845bool ValidateGetTexGenfvOES(Context *context, GLenum coord, GLenum pname, GLfloat *params)
846{
847 UNIMPLEMENTED();
848 return true;
849}
850
851bool ValidateGetTexGenivOES(Context *context, GLenum coord, GLenum pname, int *params)
852{
853 UNIMPLEMENTED();
854 return true;
855}
856
857bool ValidateGetTexGenxvOES(Context *context, GLenum coord, GLenum pname, GLfixed *params)
858{
859 UNIMPLEMENTED();
860 return true;
861}
862
863bool ValidateTexGenfvOES(Context *context, GLenum coord, GLenum pname, const GLfloat *params)
864{
865 UNIMPLEMENTED();
866 return true;
867}
868
869bool ValidateTexGenivOES(Context *context, GLenum coord, GLenum pname, const GLint *param)
870{
871 UNIMPLEMENTED();
872 return true;
873}
874
875bool ValidateTexGenxvOES(Context *context, GLenum coord, GLenum pname, const GLint *param)
876{
877 UNIMPLEMENTED();
878 return true;
879}
880
881bool ValidateTexGenfOES(Context *context, GLenum coord, GLenum pname, GLfloat param)
882{
883 UNIMPLEMENTED();
884 return true;
885}
886
887bool ValidateTexGeniOES(Context *context, GLenum coord, GLenum pname, GLint param)
888{
889 UNIMPLEMENTED();
890 return true;
891}
892
893bool ValidateTexGenxOES(Context *context, GLenum coord, GLenum pname, GLfixed param)
894{
895 UNIMPLEMENTED();
896 return true;
897}
Geoff Lang2aaa7b42018-01-12 17:17:27 -0500898}